<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Yusuke Ohashi</title>
    <link>https://yusuke.cloud/</link>
    <description>Recent content on Yusuke Ohashi</description>
    <image>
      <title>Yusuke Ohashi</title>
      <url>https://cdn.yusuke.cloud/assets/image/golden-gate-bridge.jpg</url>
      <link>https://cdn.yusuke.cloud/assets/image/golden-gate-bridge.jpg</link>
    </image>
    <generator>Hugo -- 0.152.2</generator>
    <language>en</language>
    <lastBuildDate>Thu, 05 Mar 2026 09:00:00 +0900</lastBuildDate>
    <atom:link href="https://yusuke.cloud/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>What Is Git Worktree, and Why It Matters Now</title>
      <link>https://yusuke.cloud/git-worktree/</link>
      <pubDate>Thu, 05 Mar 2026 09:00:00 +0900</pubDate>
      <guid>https://yusuke.cloud/git-worktree/</guid>
      <description>&lt;h2 id=&#34;why-it-pairs-well-with-ai-agents&#34;&gt;Why It Pairs Well with AI Agents&lt;/h2&gt;
&lt;p&gt;As AI-assisted development (Claude Code, Cursor, OpenAI Codex, and others) becomes more common, &lt;strong&gt;git worktree&lt;/strong&gt; is getting attention again.&lt;/p&gt;
&lt;p&gt;It has existed in Git for a long time, but it becomes especially powerful when multiple agents work in parallel.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what I want to cover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what git worktree is&lt;/li&gt;
&lt;li&gt;why it is getting attention now&lt;/li&gt;
&lt;li&gt;why it works so well with AI agents&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-is-git-worktree&#34;&gt;What Is Git Worktree?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;git worktree&lt;/code&gt; lets you create multiple working directories from a single repository.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Keycloak: The Architect&#39;s Guide to Identity and Access Management</title>
      <link>https://yusuke.cloud/keycloak-architects-guide-iam/</link>
      <pubDate>Thu, 22 Jan 2026 10:00:00 +0900</pubDate>
      <guid>https://yusuke.cloud/keycloak-architects-guide-iam/</guid>
      <description>A comprehensive guide to Keycloak for software architects, covering authentication, authorization, and IAM best practices</description>
    </item>
    <item>
      <title>Dotfiles</title>
      <link>https://yusuke.cloud/dotfiles/</link>
      <pubDate>Tue, 28 May 2024 11:08:11 +0900</pubDate>
      <guid>https://yusuke.cloud/dotfiles/</guid>
      <description>A comprehensive guide to managing dotfiles for consistent development environments across multiple machines</description>
    </item>
    <item>
      <title>Writing C Compiler</title>
      <link>https://yusuke.cloud/writing-c-compiler/</link>
      <pubDate>Wed, 24 Aug 2022 02:50:09 +0900</pubDate>
      <guid>https://yusuke.cloud/writing-c-compiler/</guid>
      <description>A journey into compiler development: building a C compiler with tokenizer, parser, and code generator</description>
    </item>
    <item>
      <title>Github Issue Driven Blog</title>
      <link>https://yusuke.cloud/github-issue-driven-blog/</link>
      <pubDate>Thu, 07 Jul 2022 13:29:23 +0900</pubDate>
      <guid>https://yusuke.cloud/github-issue-driven-blog/</guid>
      <description>&lt;p&gt;I experimented automating &lt;a href=&#34;https://til.yusuke.cloud/&#34;&gt;my micro blog&lt;/a&gt; so that it&amp;rsquo;s generated from github issues.&lt;/p&gt;
&lt;p&gt;In this blog post, I will show you how I redesigned my blogging workflow.&lt;/p&gt;
&lt;h2 id=&#34;system-diagram&#34;&gt;System Diagram&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;system diagram&#34; loading=&#34;lazy&#34; src=&#34;https://cdn.yusuke.cloud/assets/image/automate-publishing.drawio.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;All piplines are run on github platforms.&lt;/p&gt;
&lt;h2 id=&#34;motivation&#34;&gt;Motivation&lt;/h2&gt;
&lt;p&gt;Normally, we google around issues, and paste code from stackoverflow. That&amp;rsquo;s it. Nothing more.
However, there should be something we learned there. That&amp;rsquo;s what we should log.&lt;/p&gt;
&lt;p&gt;I love blogging, but writing on my computer is somehow tedious.
I need to establish publishing method that I can do on my mobile phone.&lt;/p&gt;</description>
    </item>
    <item>
      <title>XCConfig</title>
      <link>https://yusuke.cloud/xcconfig/</link>
      <pubDate>Tue, 12 Oct 2021 12:00:00 +0000</pubDate>
      <guid>https://yusuke.cloud/xcconfig/</guid>
      <description>Externalize build information from Info.plist</description>
    </item>
    <item>
      <title>SwiftDoc Action for Fastlane</title>
      <link>https://yusuke.cloud/swiftdoc-action-for-fastlane/</link>
      <pubDate>Mon, 19 Jul 2021 06:01:57 +0000</pubDate>
      <guid>https://yusuke.cloud/swiftdoc-action-for-fastlane/</guid>
      <description>&lt;p&gt;I just want to announce I created a fastlane action for &lt;a href=&#34;https://swiftdoc.org&#34;&gt;SwiftDoc&lt;/a&gt;, since I couldn&amp;rsquo;t find it in the fastlane official docs.&lt;/p&gt;
&lt;p&gt;SwiftDoc is yet another documentation generator, and it&amp;rsquo;s dedicated for Swift project.
It has very clean UI and also generates beautiful dependency graph.
I introduced my private swift project.&lt;/p&gt;
&lt;p&gt;Here is the script.&lt;/p&gt;
&lt;script src=&#34;https://gist.github.com/junkpiano/f37d27f10bde1653f4975cfc8dff6b34.js&#34;&gt;&lt;/script&gt;

&lt;p&gt;Place this script into &lt;code&gt;fastlane/actions&lt;/code&gt;, and run in &lt;code&gt;Fastfile&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;e.g.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    swiftdoc(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      input: &amp;#34;Sources&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      module_name: &amp;#34;YourModuleName&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      output: &amp;#34;docs/&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      base_url: &amp;#34;/&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      format: &amp;#34;html&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can publish it into github pages, netlify, and so on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://yusuke.cloud/about/</link>
      <pubDate>Mon, 12 Jul 2021 16:20:37 +0900</pubDate>
      <guid>https://yusuke.cloud/about/</guid>
      <description>&lt;p&gt;Hello, internet!&lt;/p&gt;
&lt;p&gt;Welcome to my personal website.
I am a software engineer in Tokyo, Japan.&lt;/p&gt;
&lt;p&gt;My official name is &amp;ldquo;Yusuke Ohashi&amp;rdquo;, but I am also using &amp;ldquo;Michael Ling&amp;rdquo; or just &amp;ldquo;Mike&amp;rdquo; for communication. You can call me Mike, Yusuke, or Ohashi-san(if you prefer japanese style).&lt;/p&gt;
&lt;p&gt;This is yet another static website built on top of hugo, but is leveraged by a bunch of tech stacks to streamline my blogging. See more details at &lt;a href=&#34;https://yusuke.cloud/9/&#34;&gt;this post&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I built this blog</title>
      <link>https://yusuke.cloud/how-i-built-this-blog/</link>
      <pubDate>Wed, 30 Jun 2021 06:49:42 +0000</pubDate>
      <guid>https://yusuke.cloud/how-i-built-this-blog/</guid>
      <description>&lt;p&gt;This is a snapshot as of 2021/6. I will write about this blog.
This digram shows my blog architecture.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;diagram&#34; loading=&#34;lazy&#34; src=&#34;https://cdn.yusuke.cloud/assets/image/blog_network_diagram.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;core&#34;&gt;Core&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linode.com/?r=5f4b41dbdb0e009af64882ea35ee82ecf0ef0290&#34;&gt;&lt;strong&gt;Linode&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dokku.com/&#34;&gt;&lt;strong&gt;Dokku&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I am running this blog on linode VPS. This blog is in a docker container and I am using dokku to manage containers(apps). Dokku is script based Paas and an OSS. Heroku buildpacks are compatible with Dokku since it&amp;rsquo;s a heroku alternative. Thanksfully, you can run any applications on Dokku just by pushing your code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Make Comment Great Again</title>
      <link>https://yusuke.cloud/make-comment-great-again/</link>
      <pubDate>Fri, 18 Jun 2021 08:04:24 +0000</pubDate>
      <guid>https://yusuke.cloud/make-comment-great-again/</guid>
      <description>&lt;p&gt;I haven&amp;rsquo;t use comment feature on this weblog, but I really wanted to implement it.
I have tried &lt;a href=&#34;https://disqus.com/&#34;&gt;Disqus&lt;/a&gt;. It was cool but it turned out that it didn&amp;rsquo;t match my needs.&lt;/p&gt;
&lt;h2 id=&#34;thought-of-disqus&#34;&gt;Thought of Disqus&lt;/h2&gt;
&lt;p&gt;Disqus has rich UI and features to discuss blog posts, but it allows&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;anonymous comments&lt;/li&gt;
&lt;li&gt;Ads inclusion&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For anonymous comments, my blog thanksfully has almost no comments from readers. However, recently a lot of celebrities receive relentless aggresive comments, and ended up suffering from mental disorder. No one tells that this won&amp;rsquo;t happen on this tiny personal blog.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NWPathMonitor</title>
      <link>https://yusuke.cloud/nwpathmonitor/</link>
      <pubDate>Mon, 14 Jun 2021 16:16:05 +0900</pubDate>
      <guid>https://yusuke.cloud/nwpathmonitor/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;NWPathMonitor is a class in Network framework, which observes network status and monitor network interface.
It&amp;rsquo;s available in iOS 12 or later.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-swift&#34; data-lang=&#34;swift&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Network&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You must retain NWPathMonitor instances to get callbacks.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-swift&#34; data-lang=&#34;swift&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;NetworkMonitorViewController&lt;/span&gt;: ViewController {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; monitor = NWPathMonitor()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;requiredInterface&lt;/code&gt; lets you observe the specific network interface.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-swift&#34; data-lang=&#34;swift&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; wifiMonitor = NWPathMonitor(requiredInterfaceType: .wifi)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here is the list of interfaces that NWPathMonitor supports.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://developer.apple.com/documentation/network/nwinterface/interfacetype&#34;&gt;https://developer.apple.com/documentation/network/nwinterface/interfacetype&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;detect-network-changes&#34;&gt;Detect network changes&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-swift&#34; data-lang=&#34;swift&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monitor.pathUpdateHandler = { path &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; path.status == .satisfied {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// Connected&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;start-observation&#34;&gt;Start observation&lt;/h2&gt;
&lt;p&gt;Create a background queue, then pass it to &lt;code&gt;start()&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Portfolio</title>
      <link>https://yusuke.cloud/portfolio/</link>
      <pubDate>Fri, 01 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://yusuke.cloud/portfolio/</guid>
      <description>Selected projects and links.</description>
    </item>
    <item>
      <title>Munin Installation Memo</title>
      <link>https://yusuke.cloud/munin-installation-memo/</link>
      <pubDate>Tue, 21 Apr 2020 07:02:57 +0000</pubDate>
      <guid>https://yusuke.cloud/munin-installation-memo/</guid>
      <description>&lt;p&gt;Have you ever listened to &lt;a href=&#34;http://munin-monitoring.org/&#34;&gt;Munin&lt;/a&gt;?
Munin is a server resource monitoring tool, which provides graphical interfaces for a bunch of data&lt;/p&gt;
&lt;p&gt;Munin is quite simple and easy to set up.&lt;/p&gt;
&lt;p&gt;Here, I will write down my configuration when I set up munin lately.
I suppose that you are using &lt;a href=&#34;https://releases.ubuntu.com/18.04.4/&#34;&gt;Ubuntu 18.04 LTS&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo apt install munin munin-node nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;nginx-configuration&#34;&gt;Nginx Configuration&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;server {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        listen &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt; default_server;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        listen [::]:&lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt; default_server;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        root &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;www&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;html;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# Add index.php to the list if you are using PHP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        index index&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;html index&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;htm index&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;nginx&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;debian&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;html;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        server_name _;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        location &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;munin {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            alias &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;www&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;html&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;munin;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        location &lt;span style=&#34;color:#f92672&#34;&gt;^~&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;munin&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;cgi&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;munin&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;cgi&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;graph&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            access_log off;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            fastcgi_split_path_info &lt;span style=&#34;color:#f92672&#34;&gt;^&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;munin&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;cgi&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;munin&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;cgi&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;graph)(&lt;span style=&#34;color:#f92672&#34;&gt;.*&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            fastcgi_param PATH_INFO &lt;span style=&#34;color:#f92672&#34;&gt;$&lt;/span&gt;fastcgi_path_info;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            fastcgi_pass unix:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;run&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;munin&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;fastcgi&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;graph&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sock;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            include fastcgi_params;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Restart nginx.&lt;/p&gt;</description>
    </item>
    <item>
      <title>LSP for Swift</title>
      <link>https://yusuke.cloud/lsp-for-swift/</link>
      <pubDate>Tue, 07 Apr 2020 18:01:03 +0900</pubDate>
      <guid>https://yusuke.cloud/lsp-for-swift/</guid>
      <description>&lt;h2 id=&#34;what-is-language-server-protocollsp&#34;&gt;What is Language Server Protocol(LSP)?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Language Server Protocol defines &lt;strong&gt;standardized protocol&lt;/strong&gt; with which both a text editor or IDE(client) and a language(server) communicate.&lt;/li&gt;
&lt;li&gt;The protocol is based on &lt;strong&gt;JSONRPC&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A client(text editor) can implement
&lt;ul&gt;
&lt;li&gt;Go to definition&lt;/li&gt;
&lt;li&gt;Error and warnings&lt;/li&gt;
&lt;li&gt;Auto completion&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;diagram&#34; loading=&#34;lazy&#34; src=&#34;https://microsoft.github.io/language-server-protocol/overviews/lsp/img/language-server-sequence.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://microsoft.github.io/language-server-protocol/overviews/lsp/overview/&#34;&gt;https://microsoft.github.io/language-server-protocol/overviews/lsp/overview/&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Solves &lt;em&gt;m-times-n&lt;/em&gt; complexity problems&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;width:600px&#34; loading=&#34;lazy&#34; src=&#34;https://code.visualstudio.com/assets/api/language-extensions/language-server-extension-guide/lsp-languages-editors.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;what-is-sourcekit-lsp&#34;&gt;What is Sourcekit-LSP?&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;width:800px&#34; loading=&#34;lazy&#34; src=&#34;https://cdn.yusuke.cloud/assets/image/source_kit_lsp_github.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apple&amp;rsquo;s LSP implementation on top of &lt;code&gt;sourcekitd&lt;/code&gt; and &lt;code&gt;clangd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sourcekitd&lt;/code&gt; is a framework that provide IDE features&lt;/li&gt;
&lt;li&gt;&lt;code&gt;clangd&lt;/code&gt; for c-family languages (C/C++/ObjC) language server&lt;/li&gt;
&lt;li&gt;supports &lt;strong&gt;only Swift Package Manager project&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As of Xcode 11.4, SourceKit-LSP is a built-in tool.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2018 in review</title>
      <link>https://yusuke.cloud/2018-in-review/</link>
      <pubDate>Fri, 11 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://yusuke.cloud/2018-in-review/</guid>
      <description>&lt;p&gt;2018 was yet another awesome year.&lt;/p&gt;
&lt;h2 id=&#34;commitments-in-work&#34;&gt;Commitments in work&lt;/h2&gt;
&lt;p&gt;I worked on building mobile development foundation.&lt;/p&gt;
&lt;h3 id=&#34;jenkins-ci-exapansion&#34;&gt;Jenkins CI Exapansion&lt;/h3&gt;
&lt;p&gt;I read &lt;a href=&#34;https://amzn.to/2sDcqm7&#34;&gt;this book&lt;/a&gt; to learn Jenkins(written in Japanese).
Aside from maintaining jenkins, I learned to modify several Jenkins modules, such as Git plugin.(We are using my forked Git plugin now.)&lt;/p&gt;
&lt;h3 id=&#34;open-api-specification&#34;&gt;Open API Specification&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://www.openapis.org/&#34;&gt;OpenAPI Initiative&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;side-projects&#34;&gt;Side projects&lt;/h2&gt;
&lt;h3 id=&#34;this-blog&#34;&gt;This blog&lt;/h3&gt;
&lt;p&gt;I moved this blog to &lt;a href=&#34;https://www.linode.com/?r=5f4b41dbdb0e009af64882ea35ee82ecf0ef0290&#34;&gt;Linode&lt;/a&gt;.
What I exactly did is that I moved my blog on docker on Linode instance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Network Abstraction Layer</title>
      <link>https://yusuke.cloud/network-abstraction-layer/</link>
      <pubDate>Sat, 10 Nov 2018 00:00:00 +0000</pubDate>
      <guid>https://yusuke.cloud/network-abstraction-layer/</guid>
      <description>&lt;p&gt;I am experimenting a new way for network request in &lt;code&gt;Kiri&lt;/code&gt; library.
&lt;code&gt;Kiri&lt;/code&gt; is &lt;code&gt;Moya&lt;/code&gt; inspired abstract networking layer. I was very impressed by &lt;code&gt;Moya&lt;/code&gt; architecture, so to learn from it the most, I decided to trace the same architecture by writing by myself, instead of copy and paste. :D&lt;/p&gt;
&lt;p&gt;We need to break down client library into three parts.&lt;/p&gt;
&lt;h2 id=&#34;request&#34;&gt;Request&lt;/h2&gt;
&lt;p&gt;Normally, you have to construct networking request every time.
Instead, in Kiri, your network configuration is compiled in one place, like class, enum.
And the class, enum must conform to &lt;code&gt;RequestContainer&lt;/code&gt; protocol.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crontab Guru</title>
      <link>https://yusuke.cloud/crontab-guru/</link>
      <pubDate>Wed, 12 Sep 2018 00:00:00 +0000</pubDate>
      <guid>https://yusuke.cloud/crontab-guru/</guid>
      <description>&lt;p&gt;If you use google whenever you write crontab, this website is good for you.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://crontab.guru/&#34;&gt;crontab guru&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;crontab guru screenshot&#34; loading=&#34;lazy&#34; src=&#34;https://cdn.yusuke.cloud/assets/image/crontabguru.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;Crontab format is not intuitive. This website tells you how your cron will work.
You can input your own cron job in the rounded textfield, and you can check how it works before you start on your server.
It will help you avoid significant mistakes before deploying your job.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NPM Dependency Graph</title>
      <link>https://yusuke.cloud/npm-dependency-graph/</link>
      <pubDate>Tue, 11 Sep 2018 00:00:00 +0000</pubDate>
      <guid>https://yusuke.cloud/npm-dependency-graph/</guid>
      <description>&lt;p&gt;I found the awesome tool to visualize npm dependency graph.&lt;/p&gt;
&lt;p&gt;This example shows dependency graph of &lt;code&gt;react-native-maps&lt;/code&gt;, which I was investigating last night.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://npm.anvaka.com/#/view/2d/react-native-maps&#34;&gt;https://npm.anvaka.com/#/view/2d/react-native-maps&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;2d&#34;&gt;2D&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;2d&#34; loading=&#34;lazy&#34; src=&#34;https://cdn.yusuke.cloud/assets/image/npm-dependency-graph-2d.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;You can drag nodes, and highlight node with cursor on.&lt;/p&gt;
&lt;h2 id=&#34;3d&#34;&gt;3D&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;3d&#34; loading=&#34;lazy&#34; src=&#34;https://cdn.yusuke.cloud/assets/image/npm-dependency-graph-3d.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;You can rotate graph, but 3D doesn&amp;rsquo;t show module names.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://npm.anvaka.com/&#34;&gt;https://npm.anvaka.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/anvaka/npmgraph.an&#34;&gt;Github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
