[{"content":"","date":"2026年10月26日","externalUrl":null,"permalink":"/series/go-tips/","section":"Series","summary":"","title":"Go Tips","type":"series"},{"content":"Goで「これどう書くんやっけ」となった時に見返すためのTips集．まずは for の書き方から．\n早見表 # やりたいこと 書き方 カウンタを増やす for i := 0; i \u0026lt; n; i++ { ... } n回繰り返す（Go 1.22以降） for range n { ... } 0からn−1を使う（Go 1.22以降） for i := range n { ... } 条件を満たす間繰り返す for 条件 { ... } 無限ループ for { ... } スライスの添字と値を使う for i, v := range items { ... } スライスの値だけ使う for _, v := range items { ... } スライスの添字だけ使う for i := range items { ... } 逆順に処理する for i := len(items) - 1; i \u0026gt;= 0; i-- { ... } 以下のコードは，特記がなければ main 関数内に書く想定．fmt を使う例では import \u0026quot;fmt\u0026quot; が必要です．\n基本形：初期化・条件・更新 # for i := 0; i \u0026lt; 5; i++ { fmt.Println(i) // 0, 1, 2, 3, 4 } for 初期化; 条件; 更新 の形．2つ飛ばしなら i += 2 のように，刻み幅も変えられます．\n回数だけ指定する（Go 1.22以降） # for range 3 { fmt.Println(\u0026#34;hello\u0026#34;) // 3回表示 } for i := range 3 { fmt.Println(i) // 0, 1, 2 } 整数への range はGo 1.22で追加されました．n 回繰り返し，添字は 0 から n-1．n が0以下なら一度も実行しません．利用するモジュールの go.mod でも go 1.22 以降を指定します．Go 1.22リリースノート\nwhile風：条件だけ書く # Goには while がないので，for に条件だけ書きます．\nn := 1 for n \u0026lt; 10 { fmt.Println(n) // 1, 2, 4, 8 n *= 2 } 無限ループとdo-while風 # 条件を省略すると無限ループ．終了条件で break します．\nn := 0 for { fmt.Println(n) n++ if n \u0026gt;= 3 { break } } do-while もありませんが，このようにループの末尾で終了判定すると，最低1回は処理を実行できます．\nスライス・配列をrangeで回す # names := []string{\u0026#34;Go\u0026#34;, \u0026#34;Rust\u0026#34;, \u0026#34;Python\u0026#34;} for i, name := range names { fmt.Println(i, name) } // 値だけ使う for _, name := range names { fmt.Println(name) } // 添字だけ使う for i := range names { fmt.Println(i) } 変数を1つだけ書くと，受け取るのは値ではなく添字です．値だけ欲しい時は _, name と書きます．\n元の要素を更新する # range で受け取る値は要素のコピーなので，元の要素への代入には添字を使います．\nnums := []int{1, 2, 3} for i := range nums { nums[i] *= 2 } fmt.Println(nums) // [2 4 6] ポインタなどを含む要素の場合，コピー先から参照先を変更することはできます．「値がコピーされる」と「参照先も複製される」は別の話です．\n逆順に回す # names := []string{\u0026#34;Go\u0026#34;, \u0026#34;Rust\u0026#34;, \u0026#34;Python\u0026#34;} for i := len(names) - 1; i \u0026gt;= 0; i-- { fmt.Println(names[i]) // Python, Rust, Go } 空のスライスなら i の初期値が -1 になり，一度も実行しません．\nmapを回す # scores := map[string]int{\u0026#34;alice\u0026#34;: 90, \u0026#34;bob\u0026#34;: 80} for name, score := range scores { fmt.Println(name, score) } // キーだけ使う for name := range scores { fmt.Println(name) } mapの走査順は保証されません．順番が必要なら，キーをスライスに集めてソートしてからアクセスします．\n文字列を回す：runeとbyte # s := \u0026#34;Go言語\u0026#34; // Unicodeコードポイント単位 for i, r := range s { fmt.Printf(\u0026#34;%d: %c\\n\u0026#34;, i, r) } // 0: G // 1: o // 2: 言 // 5: 語 // byte単位 for i := 0; i \u0026lt; len(s); i++ { fmt.Printf(\u0026#34;%d: %02x\\n\u0026#34;, i, s[i]) } 文字列への range は rune 単位ですが，添字はUTF-8のバイト位置です．また，結合文字や絵文字では，1つの見た目の文字が複数の rune になることがあります．\nchannelから受信する # ch := make(chan string, 2) ch \u0026lt;- \u0026#34;Go\u0026#34; ch \u0026lt;- \u0026#34;Rust\u0026#34; close(ch) for name := range ch { fmt.Println(name) } 送信済みの値を受信し終え，channelが閉じられるとループが終了します．閉じられていないchannelは，値がなければ受信待ちになります．この例ではバッファを2つ用意しているので，受信前に2回送信できます．\ncontinueとbreak # for i := 0; i \u0026lt; 10; i++ { if i%2 == 0 { continue // 偶数はスキップ } if i \u0026gt;= 7 { break // ループ終了 } fmt.Println(i) // 1, 3, 5 } この形の for では，continue しても更新処理の i++ は実行されます．条件だけのループで自分でカウンタを更新する場合は，更新を飛ばさないように注意．\n入れ子のループから抜ける # Outer: for i := 0; i \u0026lt; 3; i++ { for j := 0; j \u0026lt; 3; j++ { if i+j == 3 { break Outer } fmt.Println(i, j) } } break Outer でラベルの付いた外側のループを終了できます．continue Outer なら外側のループの次の反復に進みます．\nイテレータを回す（Go 1.23以降） # Go 1.23以降はイテレータ関数にも range を使えます．例えば，標準ライブラリの slices.Backward で逆順に走査できます．公式ブログの解説\npackage main import ( \u0026#34;fmt\u0026#34; \u0026#34;slices\u0026#34; ) func main() { names := []string{\u0026#34;Go\u0026#34;, \u0026#34;Rust\u0026#34;, \u0026#34;Python\u0026#34;} for i, name := range slices.Backward(names) { fmt.Println(i, name) // 2 Python, 1 Rust, 0 Go } } ループ変数とGoのバージョン # Go 1.22以降の言語仕様では，:= でループ内に宣言した変数は反復ごとに新しく作られます．古い記事にある，クロージャのための v := v という退避は，この条件では不要です．ただし，外で宣言した変数へ = で代入する場合は同じ変数を使い回します．Go 1.22リリースノート\n基本構文と range の詳しい仕様は，Go言語仕様のFor statementsを参照．\n","date":"2026年10月26日","externalUrl":null,"permalink":"/blog/go-tips-for/","section":"Blog","summary":"回数指定，while風のループ，range，逆順，break / continueなど，Goのforを用途別にまとめます．","title":"Go Tips: forの書き方集","type":"blog"},{"content":"","date":"2026年10月26日","externalUrl":null,"permalink":"/tags/tips/","section":"Tags","summary":"","title":"Tips","type":"tags"},{"content":" ","date":"3 October 2026","externalUrl":null,"permalink":"/en/","section":"","summary":" ","title":"","type":"page"},{"content":"","date":"3 October 2026","externalUrl":null,"permalink":"/en/blog/","section":"Blog","summary":"","title":"Blog","type":"blog"},{"content":"","date":"3 October 2026","externalUrl":null,"permalink":"/en/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":" Introduction # I came across this little growing kit while I was out and bought it on impulse.\nI guess spending so much time tinkering with machines makes me want to spend time with something alive from nature.\nWhat Will I Get? # The seeds come inside a capsule, and there are four varieties in total.\nI was hoping for a Japanese black pine, but didn\u0026rsquo;t think I would get the one I wanted.\nAnd then I did! So happy!\nPlanting the Seeds # The kit includes seeds, a tiny pot, and soil, so I planted them right away. Grow well!\nSprouting # About ten days later, I woke up to a new little life sprouting. So cute!\nWhen I got home that evening, another one had popped up beside it!\nConclusion # The capsule toy cost 500 yen, so I wasn\u0026rsquo;t sure the seeds would sprout. I was glad to see them come up so healthy.\nI\u0026rsquo;ll keep watching them and hope to write more updates as they grow.\n","date":"3 October 2026","externalUrl":null,"permalink":"/en/blog/mame-bonsai/","section":"Blog","summary":"Starting a black pine bonsai from seeds in a capsule growing kit.","title":"Growing a Mini Bonsai from Seed","type":"blog"},{"content":"","date":"3 October 2026","externalUrl":null,"permalink":"/en/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"3 October 2026","externalUrl":null,"permalink":"/en/categories/%E3%81%9D%E3%81%AE%E4%BB%96/","section":"Categories","summary":"","title":"その他","type":"categories"},{"content":"","date":"3 October 2026","externalUrl":null,"permalink":"/en/tags/%E7%9B%86%E6%A0%BD/","section":"Tags","summary":"","title":"盆栽","type":"tags"},{"content":" Introduction # This article summarizes the key lessons from The Art of Readable Code.\nView The Art of Readable Code on Amazon Japan\n1. Write Code That Is Easy to Understand # Good code can be understood by someone else quickly Optimize for comprehension, not line count 2. Pack Information into Names # Choose precise words: prefer verbs such as Fetch or Download over a vague name like Get Avoid generic names: short-lived variables such as tmp are fine when their purpose is obvious Be specific: make it clear what a value represents Include important details: add units or attributes, as in start_ms Match length to scope: reserve short names for small scopes Use formatting consistently: give capitalization and underscores a clear meaning 3. Choose Names That Cannot Be Misread # Use max_ and min_ for upper and lower limits Use first and last for inclusive ranges, and begin and end when the endpoint is excluded Prefix booleans with words such as is or has 4. Make Code Visually Clear # Keep indentation consistent Present related elements in the same order everywhere Split large blocks into meaningful paragraphs with blank lines 5. Know What to Comment # Do not comment:\nWhat is already obvious from the code Confusing code that should be rewritten instead Do comment:\nWhy a particular approach was chosen TODOs and known issues Why a constant has a particular value The purpose of a file, class, or block of code 6. Keep Comments Accurate and Concise # Avoid ambiguous pronouns such as “this” or “it” Describe the code\u0026rsquo;s intent precisely and briefly 7. Make Control Flow Easy to Follow # Put the changing value on the left side of a comparison and the stable value on the right When possible, handle positive, simple, or prominent conditions first Avoid ternary expressions, do/while, and goto when they make the flow harder to follow Use early returns to reduce nesting 8. Break Down Large Expressions # Use explanatory variables to split large expressions and code blocks into meaningful pieces.\n9. Use Variables Carefully # Remove variables that do not simplify an expression, clarify meaning, or eliminate duplication Keep variable scope as small as possible Prefer immutable variables 10. Extract Unrelated Subproblems # Separate general-purpose logic from project-specific logic Too many tiny functions can also hurt readability, so extract them when reuse becomes necessary 11. Do One Thing at a Time # Let each block of code handle one task When several tasks are mixed together, list them and separate the distinct operations 12. Turn Thoughts into Code # Explain a complex idea in simple language first. Too much detail can hide the real intent.\nTo make code clearer:\nExplain what the code does in language a colleague can understand Identify the key words and phrases in that explanation Write the code to match that explanation 13. Write Less Code # More code means more maintenance. To avoid adding unnecessary code:\nRemove unnecessary features and avoid speculative functionality Find the simplest requirement that solves the problem Learn the available APIs and standard libraries so you can reuse existing solutions 14. Make Tests Readable # Write failure messages that make the cause easy to identify Code designed for easy testing tends to have clearer responsibilities ","date":"27 September 2026","externalUrl":null,"permalink":"/en/blog/readable-code/","section":"Blog","summary":"A collection of tips for writing readable code.","title":"The Key Lessons from The Art of Readable Code","type":"blog"},{"content":"","date":"27 September 2026","externalUrl":null,"permalink":"/en/tags/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/","section":"Tags","summary":"","title":"プログラミング","type":"tags"},{"content":"","date":"27 September 2026","externalUrl":null,"permalink":"/en/categories/%E6%9C%AC/","section":"Categories","summary":"","title":"本","type":"categories"},{"content":"","date":"26 September 2026","externalUrl":null,"permalink":"/en/tags/go/","section":"Tags","summary":"","title":"Go","type":"tags"},{"content":"","date":"26 September 2026","externalUrl":null,"permalink":"/en/tags/kubernetes/","section":"Tags","summary":"","title":"Kubernetes","type":"tags"},{"content":"","date":"26 September 2026","externalUrl":null,"permalink":"/en/tags/metal3/","section":"Tags","summary":"","title":"Metal3","type":"tags"},{"content":"I am a maintainer of Metal3.io, an open-source project for managing bare-metal hosts with Kubernetes.\nAbout Metal3 # Metal3 manages physical servers through Kubernetes APIs, from host enrollment and OS image provisioning to Kubernetes cluster deployment and upgrades. Metal3.io itself runs on Kubernetes and uses Kubernetes resources and APIs as its interface.\nThe project was started by Red Hat in 2019, with Ericsson joining later that year. It entered the CNCF Sandbox in September 2020 and advanced to a CNCF Incubating Project in August 2025.\nActivities # As a member of the release team, I work on component releases and patch fixes.\nI review changes and dependencies, prepare release notes, check test results, update packages, and verify published artifacts after each release.\nContributions # OCI image URLs without checksum Fix Linux detection for kubectl installation in Leap CI Run zizmor for release branch PRs [release-0.14]Run zizmor for release branch PRs Bump OpenTelemetry to v1.45.0 CAPM3 v1.13.5 release IPAM v1.13.6 release IPAM v1.14.1 release BMO v0.14.2 release Bump Go to 1.26.9, osv-scanner to v2.6.0 and go group dependencies BMO v0.13.6 release CAPM3 v1.14.2 release Bump BMO to v0.14.2, IPAM to v1.14.2, Go to 1.26.9, osv-scanner to v2.6.0 and Go dependencies ","date":"26 September 2026","externalUrl":null,"permalink":"/en/work/metal3-maintainer/","section":"Work","summary":"Member of the release team for Metal3.io, a CNCF Incubating Project.","title":"Metal3.io Maintainer","type":"work"},{"content":"","date":"26 September 2026","externalUrl":null,"permalink":"/en/tags/open-source/","section":"Tags","summary":"","title":"Open Source","type":"tags"},{"content":"","date":"2026年9月26日","externalUrl":null,"permalink":"/tags/oss/","section":"Tags","summary":"","title":"OSS","type":"tags"},{"content":"","date":"26 September 2026","externalUrl":null,"permalink":"/en/work/","section":"Work","summary":"","title":"Work","type":"work"},{"content":"","date":"20 September 2026","externalUrl":null,"permalink":"/en/photos/","section":"Gallery","summary":"","title":"Gallery","type":"photos"},{"content":"","date":"20 September 2026","externalUrl":null,"permalink":"/en/photos/2026/","section":"Gallery","summary":"","title":"Gallery 2026","type":"photos"},{"content":" Copyright # Unless otherwise noted, the text, images, videos, source code, and design published on the Website belong to the Operator or the respective rights holders. Unauthorized reproduction, redistribution, modification, or publication is prohibited except where permitted by law.\nWhen quoting content, please identify the source and include the URL of the relevant page, keeping the quotation within a reasonable scope.\nDisclaimer # The Operator makes reasonable efforts to keep the information on the Website accurate and complete, but does not guarantee it. Information may be changed or removed without notice.\nThe Operator is not responsible for any loss or damage arising from the use of, or inability to use, the Website.\nLinks # Linking to the Website is generally permitted. Please make it clear that the link leads to this Website.\nThe Operator is not responsible for the content, services, or privacy practices of external websites linked from the Website.\nPersonal Information # Names, email addresses, and messages provided through inquiries are used to respond and provide necessary support. They will not be shared with third parties without consent, except where required by law or necessary for appropriate service providers to perform their work.\nCookies and Access Information # The Website may use cookies and access logs to improve usability, improve the Website, and understand how it is used. This information does not identify individuals by itself.\nYou can refuse cookies through your browser settings, although some features of the Website may not work correctly as a result.\nChanges to This Policy # This policy may be changed without prior notice when necessary. Changes take effect when they are published on the Website.\nContact # For questions about this policy, please contact the Operator by email.\n","date":"15 August 2026","externalUrl":null,"permalink":"/en/policy/","section":"","summary":"Copyright # Unless otherwise noted, the text, images, videos, source code, and design published on the Website belong to the Operator or the respective rights holders. Unauthorized reproduction, redistribution, modification, or publication is prohibited except where permitted by law.\nWhen quoting content, please identify the source and include the URL of the relevant page, keeping the quotation within a reasonable scope.\n","title":"Site Policy","type":"page"},{"content":" Introduction # Public clouds such as AWS, Azure, and Google Cloud are very convenient, but they are expensive for personal use. (Good for poor students) I want a cloud that is free for life and can be used as much as I want.\n**You can just make it yourself! **\nSo I tried creating a public cloud myself.\nThe system configuration is roughly as shown in the figure below (Figure by Gemini). Advertisement # This is a portfolio site operated using a self-made cloud container service (ECS style). https://daigo-suhara.com\nPhase 1: Kubernetes cluster automatic construction # We decided to use Kubernetes as the foundation. However, building a cluster on bare metal is a pain, so we made it possible to build a cluster automatically.\nSpecifically, I use software called Tinkerbell. This will automatically install an OS that includes only the minimum packages necessary for cluster construction (kubeadm, etc.) from a state where the storage is empty and the power is off. (Tinkerbell: automatically provisions the OS and initial settings on bare metal via ipxe) Furthermore, by using ClusterAPI Provider Tinkerbell, cluster construction work after OS provisioning can be automated.\nI installed argocd on a cluster created with microk8s on my laptop and built a tinkerbell environment as an argocd resource.\nPhase 2: Creation of cloud core system # First of all, the current situation is\nAuthentication system (IAM-like) Tenant Container service (ECS) Virtual machine (EC2) *WEB console *API has been created.\nEach internal system is separated as a grpc server, and ArgoCD calls what is containerized using GitHub Actions and pushed to the oci registry. (*API is FastAPI, web console is made by React)\nAbout container services # The base is running on knative. It is operated using a Go system based on instructions from FastAPI.\nYou can autoscale, specify container image URL, etc. Continuous deployment functionality from source code has not yet been developed.\nIt also supports domain mapping, providing a public URL in the form \u0026lt;service-id\u0026gt;.drkatana.com. You can also configure a custom domain using a CNAME record. About virtual machines # The platform is running on kubevirt. In addition to templates such as ubuntu, fedora, and debian, you can also specify custom oci images. You can specify the number of cores and memory and operate from the console screen. The console screen is implemented using websocket and xterm.js. Conclusion # It\u0026rsquo;s easier to use an OSS such as OpenStack to create your own cloud, but building one from scratch was both educational and fun, so much so that I ended up losing track of time and staying up all night.I really hope more people create their own clouds.\nAcknowledgments # I would like to thank Codex for doing much of the coding work to implement my crazy architecture during this development work.\nRead the original article on Qiita\n","date":"14 June 2026","externalUrl":null,"permalink":"/en/blog/build-your-own-public-cloud/","section":"Blog","summary":"An introduction to building a public cloud on Kubernetes with bare-metal management, virtual machines, and related components.","title":"Building Your Own Public Cloud, Part 1","type":"blog"},{"content":"","date":"14 June 2026","externalUrl":null,"permalink":"/en/tags/%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9/","section":"Tags","summary":"","title":"インフラ","type":"tags"},{"content":"","date":"14 June 2026","externalUrl":null,"permalink":"/en/categories/%E6%8A%80%E8%A1%93/","section":"Categories","summary":"","title":"技術","type":"categories"},{"content":" Introduction # I received a Fujitsu business server, and I want to install proxmox, but for some reason the disk is not recognized? So I\u0026rsquo;ll make a note of how I solved it.\nCause # Because IOMMU strictly remaps physical and virtual addresses, it may conflict with DMA transfers expected by some MegaRAID controllers. By the way, it seems to work depending on the OS.\nSolution # When installing proxmox, press the e key on the installation method selection screen to jump to the grub editing screen, leave a space at the end of the line that says linux,\nintel_iommu=off After adding this and confirming with F10, I was able to install normally.\nAlternatively, you can permanently turn off iommu by going to UEFI and setting Advanced -\u0026gt; CPU Configuration -\u0026gt; VT-d to Disabled. (After this, a MegaRAID cache error occurred, so I pressed the X key at something like health check from UEFI and it was fixed.)\nIf you don\u0026rsquo;t want to use RAID (if you want to use a single disk) # By switching to JBOD Mode, the disk is recognized as is.\nAt UEFI Advanced -\u0026gt; AVAGO MegaRAID -\u0026gt; Main Menu -\u0026gt; Controller Manegement -\u0026gt; Advanced Controller Properties -\u0026gt; Change JBOD Mode to Enabled -\u0026gt; Apply Changes\nWhat I tried 1 # I took the RAID card out of my motherboard.\nEven if I insert the SAS in the hdd case into the motherboard, it doesn\u0026rsquo;t seem to recognize it, and I need to convert SAS to SATA, so it doesn\u0026rsquo;t recognize it either way (although the RAID cache error is gone).\nWhat I tried 2 # I set up Raid0 with the number of storages (2 pieces).\nAt UEFI Advanced -\u0026gt; AVAGO MegaRAID -\u0026gt; Configure -\u0026gt; Create Virtual Drive Then select raid0, select only one drive, and do apply twice.\nBut it didn\u0026rsquo;t work\nAppendix (Error screen) # Error that keeps appearing after cleaning the RAID containing Windows Server # L2/L3 Cache error was detected on the RAID controller. Please contact technical support to resolve this issue. Press \u0026#39;X\u0026#39; to continue or else power off the system, replace the controller and reboot. Enter Your Input Here: Error when trying to install OS # [ 78.431957] megaraid_sas 0000:01:00.0: megasas_get_ld_map_info DCMD timed out, RAID map is disabled [ 78.433510] megaraid_sas 0000:01:00.0: megasas_enable_intr_fusion is called outbound_intr_mask:0x40000000 [ 78.434796] megaraid_sas 0000:01:00.0: INIT adapter done Timed out for waiting the udev queue being empty. Begin: Loading essential drivers ... [ 121.164801] raid6: avx2x4 gen() 41207 MB/s [ 121.181805] raid6: avx2x2 gen() 40382 MB/s [ 121.198804] raid6: avx2x1 gen() 32882 MB/s [ 121.199111] raid6: using algorithm avx2x4 gen() 41207 MB/s [ 121.215805] raid6: .... xor() 13554 MB/s, rmw enabled [ 121.216100] raid6: using avx2x2 recovery algorithm [ 121.217759] xor: automatically using best checksumming function avx [ 121.219041] async_tx: api initialized (async) done. Begin: Running /scripts/init-premount ... Timed out for waiting the udev queue being empty. done. Begin: Mounting root file system ... Begin: Running /scripts/local-top ... Begin: Waiting up to 180 secs for BOOTIF to become available ... _ Read the original article on Qiita\n","date":"19 April 2026","externalUrl":null,"permalink":"/en/blog/fujitsu-tx1320-m3-setup/","section":"Blog","summary":"How to resolve a disk detection issue when installing Proxmox on a Fujitsu TX1320 M3 server.","title":"Issues I Encountered While Setting Up a Fujitsu TX1320 M3 Server","type":"blog"},{"content":" What is nix? # A savior that frees us from the troubles of building an environment (works natively, not in a virtual environment like docker) Super useful package manager (and configuration language) The OS environment (including non-development environments) can be coded to create the exact same environment on any machine. Time series # Know apt I learned about the existence of package managers when I used Ubuntu for the first time. Learn about homebrew I learned that there is a package manager not only for Linux but also for Mac. Know docker I learned that you can easily reproduce environments by using containers. Know dotfiles I learned that there is a concept of centrally managing config files that were previously managed manually using git. Know nix I came across this when I wanted to switch dotfiles for each machine. Appendix # My dotfiles: https://github.com/daigo-suhara/dotfiles Read the original article on Qiita\n","date":"10 April 2026","externalUrl":null,"permalink":"/en/blog/journey-to-nix/","section":"Blog","summary":"A journey through apt, Homebrew, and Docker that led to Nix for reproducible development environments.","title":"Escaping Environment Setup Hell: My Journey to Nix","type":"blog"},{"content":" Introduction # trying to build neovim\nmake CMAKE_BUILD_TYPE=RelWithDebInfo When I executed\nfatal error: CoreServices/CoreServices.h: No such file or directory An error occurred.\nCause # (Did you install it on nix?) When using gcc, it seems that it references header files that are incompatible with the latest SDK of macOS.\nSolution # I was able to build it successfully using clang.\nIf you specify it as an option, please specify the following\nmake CMAKE_BUILD_TYPE=RelWithDebInfo CC=clang CXX=clang++ Read the original article on Qiita\n","date":"14 March 2026","externalUrl":null,"permalink":"/en/blog/neovim-build-macos-header-error/","section":"Blog","summary":"How to fix the missing CoreServices header error encountered when building Neovim on macOS.","title":"Fixing Missing Header Files When Building Neovim on macOS","type":"blog"},{"content":"","date":"14 March 2026","externalUrl":null,"permalink":"/en/tags/neovim/","section":"Tags","summary":"","title":"Neovim","type":"tags"},{"content":"","date":"1 October 2025","externalUrl":null,"permalink":"/en/tags/dart/","section":"Tags","summary":"","title":"Dart","type":"tags"},{"content":"","date":"1 October 2025","externalUrl":null,"permalink":"/en/tags/firebase/","section":"Tags","summary":"","title":"Firebase","type":"tags"},{"content":"","date":"1 October 2025","externalUrl":null,"permalink":"/en/tags/flutter/","section":"Tags","summary":"","title":"Flutter","type":"tags"},{"content":"","date":"1 October 2025","externalUrl":null,"permalink":"/en/tags/github-actions/","section":"Tags","summary":"","title":"GitHub Actions","type":"tags"},{"content":"Period: 2025\nI developed a mobile application for searching and booking accommodation, commissioned by a company operating in the hospitality industry.\nDevelopment # I handled the design and implementation of the application. Flutter and Dart were used to build a cross-platform application supporting both Android and iOS.\nInfrastructure # In addition to the mobile application, I built the infrastructure for a website introducing accommodation properties. I also established a CI/CD workflow with GitHub Actions to support continuous builds and deployments.\nTechnology # Flutter / Dart / Firebase / GitHub Actions\n","date":"1 October 2025","externalUrl":null,"permalink":"/en/work/minpaku-app/","section":"Work","summary":"An accommodation booking app for Android and iOS built with Flutter and Firebase.","title":"SYNASIA HOTELS | Accommodation Booking App","type":"work"},{"content":" Introduction # After participating in the ROSConJP2025 workshop (Practical Introduction to ROS 2 and Model-Based Design (MBD)), I was able to enjoy ROS development with Simulink! So, this time I will try object recognition.\nCaution # In this article, detailed operations related to collaboration between MATLAB/Simulink and ROS are omitted.\nConfiguration # MacbookAir M3 (16GB) start matlab/simulink Camera data subscription and object recognition RaspberryPi4B (8GB) Publish camera data Raspberry Pi side # Required package installation # sudo apt update sudo apt install raspi-config v4l-util Change settings # sudo raspi-config Select [3 Interface Options], enable [I1 Legacy Camera] and restart.\nStarting camera node # sudo apt install ros-jazzy-v4l2-camera ros2 run v4l2_camera v4l2_camera_node --ros-args -p video_device:=/dev/video0 MATLAB/Simulink side # The Simulink model now looks like the image above. I subscribe to the published camera image on the Raspberry Pi side and recognize objects using ObjectDetector. The model used for recognition was created and loaded using the following command.\ndetector=yolov4ObjectDetector(\u0026#34;tiny-yolov4-coco\u0026#34;); save(\u0026#39;detector.mat\u0026#39;, \u0026#39;detector\u0026#39;); The function that filters only human detection is defined as below.\nfunction [bboxes_person, isDetected] = filter_detections(boundingBoxes, labels) % 検出された物体の数を取得 numDetections = size(labels, 1); % personかどうかを格納するための論理配列を初期化 isPerson = false(numDetections, 1); % forループを使って、ラベルを一つずつチェックする for i = 1:numDetections % ラベルを一つだけ取り出して文字列に変換し、\u0026#34;person\u0026#34;と比較 if string(labels(i)) == \u0026#34;person_label\u0026#34; isPerson(i) = true; end end % 1つでもpersonが検出されたかチェック if any(isPerson) % personのバウンディングボックスのみを抽出 bboxes_person = boundingBoxes(isPerson, :); isDetected = true; else % personが検出されなかった場合、空行列を返す bboxes_person = zeros(0, 4, \u0026#39;single\u0026#39;); isDetected = false; end end Read the original article on Qiita\n","date":"12 September 2025","externalUrl":null,"permalink":"/en/blog/ros2-matlab-raspberry-pi-human-detection/","section":"Blog","summary":"Stream Raspberry Pi camera data through ROS 2 and detect people with MATLAB and Simulink.","title":"Human Detection with a Raspberry Pi Camera, ROS 2, and MATLAB/Simulink","type":"blog"},{"content":"","date":"12 September 2025","externalUrl":null,"permalink":"/en/tags/%E3%83%AD%E3%83%9C%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9/","section":"Tags","summary":"","title":"ロボティクス","type":"tags"},{"content":" Introduction # \u0026ldquo;I want to take over the infrastructure without worrying about cloud bankruptcy\u0026hellip;\u0026rdquo; \u0026ldquo;I want a more powerful and flexible development environment at home\u0026hellip;\u0026rdquo; With this in mind, I decided to build a private cloud at home.\nIn this article, we will record the steps to build a full-fledged home cloud using three mini PCs and one Raspberry Pi, automating everything from OS provisioning to OpenStack deployment.\nConfiguration introduction: Equipment that supports this home cloud # 🖥️ Servers # Role Equipment Quantity Specifications OpenStack node (Control x1, Compute x2) Mini PC 3 units CPU: Intel Processor N150 Memory: 16GB Storage: 512GB NVMe SSD NIC: 1 port MAAS Server (OS provisioning) Raspberry Pi 4 1 unit 8GB model 💡 About adding NICs # A standard OpenStack (Kolla-Ansible) configuration requires two network interfaces on the control node: one for management and one for external connectivity. The mini PC I used this time had one NIC port, so I added one USB-connected NIC to only one for the control node.\n🌐 Network equipment # Role Equipment Notes Router Ubiquiti EdgeRouter X Uses OpenWrt firmware Network switch TP-Link TL-SG605 Five-port managed switch Why this configuration? # MAAS on Raspberry Pi: Raspberry Pi is ideal for a MAAS server that is low power and always running. By introducing MAAS, OS installation and reconfiguration of mini PCs will be completely automated, allowing servers to be treated not as physical objects, but as resources that can be operated using APIs.\nMini PC: Space-saving and recent models have sufficient performance as a virtualization platform. By preparing three devices, you can try out an OpenStack multi-node configuration.\nSTEP 1: Automate OS provisioning with MAAS # First, set up MAAS, which is the heart of the home cloud, on Raspberry Pi and put the mini PCs under control.\nInstall MAAS on Raspberry Pi Install Ubuntu Server on the Raspberry Pi beforehand. Then log in over SSH and install MAAS.\nMAAS initial settings Access the Web UI and proceed with the initial setup.\nMini PC PXE boot settings and OS deployment Next, prepare the mini PC side.\nOpen the BIOS/UEFI settings screen of each mini PC and enable Network Boot (PXE Boot).\nChange the boot order so that PXE Boot has the highest priority.\nWhen you save the settings and start the mini PC, it will obtain an IP address from MAAS\u0026rsquo;s DHCP server and start network booting.\nAfter a while, the new machine should appear in the Machines tab of the MAAS web UI with a New status.\nMAAS automatically collects (commissions) machine hardware information (CPU, memory, storage, etc.). Once commissioning is complete, select the machine, acquire it, and finally press the Deploy button to start deploying Ubuntu 24.04.\nPerform this operation on all three mini PCs. Once the deployment is complete, you should be able to log in without a password using the SSH key you registered earlier to the IP address issued by MAAS. That\u0026rsquo;s great!\nSTEP 2: OpenStack multi-node construction using Kolla-Ansible # Now that the OS is ready, we can finally start building OpenStack. We will try a multi-node configuration using Kolla-Ansible, which allows you to build a container-based OpenStack environment.\ncontrol01: control node \u0026amp; etc\ncompute01: compute node\ncompute02: compute node\nAccessing Horizon (Dashboard) # Go to http://\u0026lt;kolla_internal_vip_address\u0026gt; in your browser and you should see the OpenStack dashboard (Horizon). You can log in using keystone_admin_password listed in /etc/kolla/passwords.yml.\n🚀 Future prospects: Kubernetes clusters with Magnum! # We now have a powerful IaaS platform called OpenStack. As a next step, we aim to create an environment where we can build Kubernetes clusters on demand using Magnum, an OpenStack container orchestration engine service.\nConclusion # This time, we introduced the steps to build a home cloud that automates everything from OS provisioning to OpenStack deployment by combining MAAS and the powerful tool Kolla-Ansible.\nSetting up a physical server became surprisingly easy, and I was able to experience the fun and power of managing infrastructure in an on-premises environment with code. Why not get your own cloud with a mini PC and Raspberry Pi?\nI hope this article will help someone who is trying to use the cloud at home.\nRead the original article on Qiita\n","date":"29 June 2025","externalUrl":null,"permalink":"/en/blog/home-cloud-maas-openstack/","section":"Blog","summary":"Build a home cloud with three mini PCs and a Raspberry Pi, automating OS provisioning with MAAS and deploying OpenStack.","title":"Building a Home Cloud with Three Mini PCs, a Raspberry Pi, MAAS, and OpenStack","type":"blog"},{"content":"Type thisisunsafe on the warning page\nRead the original article on Qiita\n","date":"25 June 2025","externalUrl":null,"permalink":"/en/blog/bypass-chrome-certificate-warning/","section":"Blog","summary":"A quick guide to the hidden command for temporarily bypassing Chrome’s certificate warning page.","title":"How to Bypass a Certificate Warning in Chrome","type":"blog"},{"content":"","date":"25 June 2025","externalUrl":null,"permalink":"/en/tags/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3/","section":"Tags","summary":"","title":"セキュリティ","type":"tags"},{"content":" Environment # MAAS server *IP: 192.168.100.50 *node1 *OS: Ubuntu24.04 *IP: 192.168.100.8 *node2 *OS: Ubuntu24.04 *IP: 192.168.100.9 (Unnecessary) Installing docker # sudo snap install docker # docker実行権限付与 sudo addgroup --system docker sudo adduser $USER docker Installing microk8s # sudo snap install microk8s # 起動 sudo microk8s start Run this on two servers\nCreate a cluster # Check the command to join node1\nsudo microk8s.add-node The output should be as below\nFrom the node you wish to join to this cluster, run the following: microk8s join 192.168.100.8:25000/3039a88b56eaa8aa4b37fcc6ee281bdf/f8d2731d0c54 Use the \u0026#39;--worker\u0026#39; flag to join a node as a worker not running the control plane, eg: microk8s join 192.168.100.8:25000/3039a88b56eaa8aa4b37fcc6ee281bdf/f8d2731d0c54 --worker Join the cluster on node2\nmicrok8s join 192.168.100.8:25000/3039a88b56eaa8aa4b37fcc6ee281bdf/f8d2731d0c54 After waiting a while, Successfully joined the cluster. I was able to join the cluster with the output\n# エイリアス作成 sudo snap alias microk8s.kubectl kubectl sudo microk8s.kubectl get nodes If you check by typing the command\nNAME STATUS ROLES AGE VERSION node1 Ready \u0026lt;none\u0026gt; 15m v1.32.3 node2 Ready \u0026lt;none\u0026gt; 77s v1.32.3 The node is properly registered.\nargoCD installation # #　ネームスペースの作成 sudo kubectl create namespace argocd # 公式マニフェストでデプロイ sudo kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml # サービスポート確認 sudo kubectl get svc argocd-server -n argocd # パスワード確認 sudo kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=\u0026#34;{.data.password}\u0026#34; | base64 -d; echo Reference # *https://devops-blog.virtualtech.jp/entry/20220322/1647924202\nRead the original article on Qiita\n","date":"15 June 2025","externalUrl":null,"permalink":"/en/blog/microk8s-cluster-mini-pcs/","section":"Blog","summary":"A practical guide to installing MicroK8s across multiple mini PCs and forming a Kubernetes cluster.","title":"Building a MicroK8s Cluster with Mini PCs","type":"blog"},{"content":"","date":"24 May 2025","externalUrl":null,"permalink":"/en/tags/ai/","section":"Tags","summary":"","title":"AI","type":"tags"},{"content":" 1. Introduction # This article describes how to self-host dify, which allows you to easily create AI applications on WEBUI, on Google Cloud Platform (GCP) using terraform.\nWhat you can do with this article # Self-hosting dify on gcp using terraform Who is this article for? # Those who want to easily publish AI applications externally Those who want to operate dify not only locally but also in the cloud Operating environment # -OS version - MacOS Sequoia 15.5\nAdvance preparation # Clone the repository # When hosting dify with gcp, there is a repository below that publishes configuration files for terraform, which automates infrastructure construction on the cloud, so clone it.\ngit clone https://github.com/DeNA/dify-google-cloud-terraform Installing packages # Installing terraform # brew install terraform Installing google cloud sdk # brew install --cask google-cloud-sdk Create gcp project # Create a project with any name from the console. I will omit the details.\nLogin to gcp from cli # gcloud auth login After entering the command, a web page will open and you can log in.\nCreate a bucket for storing tfvars # Create storage for managing terraform state in the cloud Select buckets from the GCP console. Create a bucket with any name\nModify the file # Modify the repository you cloned earlier and customize it for yourself.\nFix gitignore # Add to gitignore to prevent confidential information from being uploaded remotely\nterraform.tfvars *terraform/environments/dev The *terraform/environments/prod Copy it with the name.\nModification of provider.tf # Apply the bucket you created earlier to terraform state management\nterraform { backend \u0026#34;gcs\u0026#34; { + bucket = \u0026#34;\u0026lt;バケットの名前\u0026gt;\u0026#34; prefix = \u0026#34;dify\u0026#34; } } Fixed tfvars # Modify terraform.tfvars in the copied prod Regarding the key,\nopenssl rand -base64 42 It would be a good idea to create it by running\n+ project_id = \u0026#34;例：dify-sample-app\u0026#34; + region = \u0026#34;例：asia-northeast1\u0026#34; + plugin_daemon_key = \u0026#34;\u0026lt;opensslコマンドで作成\u0026gt;\u0026#34; + plugin_dify_inner_api_key = \u0026#34;\u0026lt;opensslコマンドで作成\u0026gt;\u0026#34; Deploy # Once you\u0026rsquo;ve reached this point, it\u0026rsquo;s time to deploy to GCP.\nterraform initialization # cd terraform/environments/prod terraform init Create Artifact Registry repository # terraform apply -target=module.registry Build and push container image # cd ../../.. sh ./docker/cloudbuild.sh \u0026lt;project-id\u0026gt; \u0026lt;region\u0026gt; terraform planning # cd terraform/environments/dev terraform plan Apply terraform # terraform apply Attention # API-related errors may occur while applying terraform. In that case, follow the error message and enable the necessary APIs. Just press the enable button from the GCP console\nReference materials # https://github.com/DeNa/dify-google-cloud-terraform\nRead the original article on Qiita\n","date":"24 May 2025","externalUrl":null,"permalink":"/en/blog/self-host-dify-gcp-terraform/","section":"Blog","summary":"Deploy a production-oriented self-hosted Dify environment on Google Cloud using Terraform.","title":"Production Self-Hosting of Dify on GCP with Terraform","type":"blog"},{"content":" Prologue # Even though I love vim, there were times when I had to use VScode. This is when you want to directly edit files on the server or container locally. I\u0026rsquo;ve been looking around for about half a year to see if it could be done with vim, but I couldn\u0026rsquo;t find it. But I found it. Its name is remote-nvim.nvim\nAbout remote-nvim # This is seriously divine👼 The OS supports Linux, mac, and FreeBSD, It supports ssh, docker-container/image, and dev-container.\nAs for what I\u0026rsquo;m doing\nAutomatically install neovim on remote destination using sh Push local oreo nvim config to remote Start remote nvim and connect with local nvim You can use nvim to operate files on remote destinations from the local area. Of course, you can use most of the various plugins, and you can automatically install any other dependent tools you want to install (I\u0026rsquo;ve installed lazygit etc.) Moreover, clean up properly after use to avoid polluting the server environment. Installation # When using lazy.nvim to separate files for each plugin\nreturn { \u0026#34;amitds1997/remote-nvim.nvim\u0026#34;, version = \u0026#34;*\u0026#34;, -- Pin to GitHub releases dependencies = { \u0026#34;nvim-lua/plenary.nvim\u0026#34;, -- For standard functions \u0026#34;MunifTanjim/nui.nvim\u0026#34;, -- To build the plugin UI \u0026#34;nvim-telescope/telescope.nvim\u0026#34;, -- For picking b/w different remote methods }, config = true, } After that, you can use it by looking at github and setting the config parameters for each. I did not set Enter passphrase for key in ssh_prompts, so I was unable to enter the password when connecting via ssh.\nlocal ssh_config = { ssh_binary = \u0026#34;ssh\u0026#34;, scp_binary = \u0026#34;scp\u0026#34;, ssh_config_file_paths = { \u0026#34;$HOME/.ssh/config\u0026#34; }, ssh_prompts = { { match = \u0026#34;Enter passphrase for key\u0026#34;, type = \u0026#34;secret\u0026#34;, -- パスフレーズはシークレットとして扱う value_type = \u0026#34;static\u0026#34;, -- 毎回新しいパスフレーズを入力するか value = \u0026#34;\u0026#34;, -- 初期値 }, { match = \u0026#34;password:\u0026#34;, type = \u0026#34;secret\u0026#34;, value_type = \u0026#34;static\u0026#34;, value = \u0026#34;\u0026#34;, }, { match = \u0026#34;continue connecting (yes/no/[fingerprint])?\u0026#34;, type = \u0026#34;plain\u0026#34;, value_type = \u0026#34;static\u0026#34;, value = \u0026#34;\u0026#34;, }, }, } How to use # A demo video is available on github. You can easily start it by typing the RemoteStart command and selecting the necessary items for ssh connection on Telescope.\n:RemoteStart Connect to a remote instance. User can start local client if remote neovim server is already running\n:RemoteStop Stop Neovim server execution and close session\n:RemoteInfo Get information about sessions created during the current Neovim run and open the progress viewer.\n:RemoteCleanup Remove the workspace and the entire remote neovim setup from the remote instance. Also clean up the configuration of remote resources.\n:RemoteConfigDel Delete records of remote instances that no longer exist from the saved session records.\n:RemoteLog Open the plugin\u0026rsquo;s log file. If an error occurs, you can see it here.\n:RemoteInfo Information about the connection etc. will be displayed.\nRead the original article on Qiita\n","date":"16 October 2024","externalUrl":null,"permalink":"/en/blog/neovim-remote-ssh/","section":"Blog","summary":"Use remote-nvim.nvim to edit files on SSH hosts and inside containers directly from Neovim.","title":"Remote SSH in Neovim, Just Like VS Code","type":"blog"},{"content":" Introduction # Since it is a hassle to write an iso to a USB memory every time you install Linux, I wanted to create an all-in-one package that includes multiple Linux distributions on one USB.\nProcedure # This time we will be working with Ventoy. Ventoy is an open source tool that creates bootable USB drives.\nVisit the official Ventoy website and select Download. Since this procedure uses Linux, download ventoy-1.0.97-linux.tar.gz.\nUnzip the folder, open a terminal at the path below, and execute the following command.\n$./VentoyGUI.x86_64 The GUI will start up, so click Install and proceed with OK to all warnings.\nNow that you have a versatile USB disk, all you have to do is insert your favorite ISO file into it.\nPoints to note # If Secure Boot is enabled in the BIOS, an error will occur during startup, so please disable it in the BIOS.\nRead the original article on Qiita\n","date":"13 May 2024","externalUrl":null,"permalink":"/en/blog/all-in-one-live-usb/","section":"Blog","summary":"Learn how to use Ventoy to boot multiple Linux distributions from a single USB drive.","title":"How to Create an All-in-One Live USB","type":"blog"},{"content":" Introduction # This time, I would like to introduce a plugin that I found that is fully compatible with neovim and allows you to move around the screen in all directions like easymotion. This will definitely improve development efficiency!\nHow to use (when displaying all words) # 1 # Suppose the cursor is currently on line 25 and you want to jump to the word methods, which is after line 71 at the bottom of the screen. 2 # When you call the command, binding will be assigned to all words, so this time enter jj. 3 # Yes. I can now move! hop.nvim # https://github.com/hadronized/hop.nvim\nEasymotion was the only plug-in I knew about, so I used it for a long time, but I thought it was noisy because the buffer was rewritten, so the LSP reacted every time. hop.nvim seems to be a plugin implemented in the latest neovim based on the concept that UI plugins should not make changes to existing buffers to solve this problem. It\u0026rsquo;s the best.\nInstallation method # Same as me, in case of lazy.nvim\nreturn { \u0026#34;phaazon/hop.nvim\u0026#34;, branch = \u0026#34;v2\u0026#34;, config = function() require(\u0026#34;hop\u0026#34;).setup { multi_windows = true, } end, keys = { {mode = \u0026#34;\u0026#34;, \u0026#34;\u0026lt;leader\u0026gt;s\u0026#34;, \u0026#34;\u0026lt;cmd\u0026gt;HopChar\u0026lt;CR\u0026gt;\u0026#34;, desc = \u0026#34;説明\u0026#34;}, } } You can install and configure. multi_windows is a setting that allows all windows to be searched when several windows are expanded. There were various other setting items, but basically there didn\u0026rsquo;t seem to be much to change from the defaults.\nFeature introduction # I would like to introduce three commands that I personally find particularly useful.\n:HopWordYou can move to where all the words in the buffer are\n:HopChar2You can search and move by specifying two characters.\n:HopPatternYou can search in the same way as / in vim. In the standard version, you can only move one by one, but with this one, you can instantly jump to any location from the hit target.\nI think it would be quite convenient if you set this area as a key binding.\nRead the original article on Qiita\n","date":"29 April 2024","externalUrl":null,"permalink":"/en/blog/hop-nvim/","section":"Blog","summary":"An introduction to hop.nvim, a Neovim plugin for quickly jumping to any visible location in the editor.","title":"Navigate at the Speed of Thought with hop.nvim","type":"blog"},{"content":" Introduction # I built an environment for writing reports using the divine editor neovim (I\u0026rsquo;m a beginner) using the tex plugin, so I\u0026rsquo;ll summarize it.\nAuthor\u0026rsquo;s development environment # M3macbookair(13-inch) homebrew installed nvim is managed in init.lua latexmk setup # First, we will set up latexmk, a useful tool that will perform the troublesome compilation of tex with a single command. A plugin to run tex in vim is required because latexmk runs behind the scenes. If you don\u0026rsquo;t have the tex environment installed in the first place, install it using the command below.\nbrew install mactex If you don\u0026rsquo;t need a GUI, please install it using the command below.\nbrew install mactex-no-gui I will pass the path (maybe the GUI version did this during installation?) The 2024 part will change.\nexport PATH=$PATH:/usr/local/texlive/2024/bin/universal-darwin Mactex also includes latexmk, so all you have to do is write the configuration file.\nnvim ~/.latexmkrc Open the configuration file with and write the following content\n#!/usr/bin/perl $latex = \u0026#39;platex -guess-input-enc -src-specials -interaction=nonstopmode -synctex=1\u0026#39;; $latex_silent = \u0026#39;platex -interaction=batchmode\u0026#39;; $dvips = \u0026#39;dvips\u0026#39;; $bibtex = \u0026#39;pbibtex\u0026#39;; $makeindex = \u0026#39;mendex -r -c -s jind.ist\u0026#39;; $dvi_previewer = \u0026#39;start dviout\u0026#39;; # -pv option $dvipdf = \u0026#39;dvipdfmx %O -o %D %S\u0026#39;; if ($^O eq \u0026#39;darwin\u0026#39;) { #$pdf_previewer = \u0026#39;open -a Preview %S\u0026#39;; #プレビュー使うならこっち $pdf_previewer = \u0026#39;open -a Skim\u0026#39;; #skimはこっち } elsif ($^O eq \u0026#39;linux\u0026#39;) { $pdf_previewer = \u0026#39;evince\u0026#39;; } $preview_continuous_mode = 1; $pdf_mode = 3; $pdf_update_method = 4; Just this\nlatexmk *.tex Just type the command and it will even generate a PDF for you. There are also options, but since the purpose of this article is not to use commands, I will omit them.\nvimtex setup # From here, we will install the vimtex plugin, which provides useful tex functions to vim/nvim. In my case, I manage plugins with lazy.nvim, so I created vimtex.lua under nvim/lua/plugins,\nreturn { \u0026#34;lervag/vimtex\u0026#34;, lazy = false, tag = \u0026#34;v2.15\u0026#34;, init = function() vim.g.vimtex_view_method = \u0026#39;skim\u0026#39; end } It is written as The latest version did not work well in my environment, so I specified the previous version, v2.15. Be careful as it didn\u0026rsquo;t work for some reason at first. Also, I have specified skim for the viewer, but if you are using preview etc., please change it. After that, restart nvim and the installation will start, so you can use the minimum functionality.\nOpen the tex file with nvim and in normal mode\n\u0026lt;localleader\u0026gt;ll Let\u0026rsquo;s enter . (By default, localleader is , so if no keymap is set, it is \\ll) Then, the compilation will be done automatically and the viewer should open and the PDF should be displayed. If you edit the code and save it with :w, it will automatically be recompiled, but if you don\u0026rsquo;t like this, you can change it in the settings.\n(In the case of skim, go to skim → Settings → Sync and select Check for file changes and Automatically reload. After editing, you can automatically compile and update the display.)\nThe end # I wanted to complete as much of my PC work as possible with just vim, so I\u0026rsquo;m glad that there\u0026rsquo;s one more thing I can do with vim. I also hope that this article will be of help to someone.\nReference # https://qiita.com/tdrk/items/16f31e45826c57bce412 (confirmed April 24, 2024) Read the original article on Qiita\n","date":"24 April 2024","externalUrl":null,"permalink":"/en/blog/neovim-latex-setup/","section":"Blog","summary":"A guide to setting up Neovim for writing and compiling LaTeX documents.","title":"Setting Up a LaTeX Environment for Neovim","type":"blog"},{"content":"","date":"1 April 2024","externalUrl":null,"permalink":"/en/tags/docker/","section":"Tags","summary":"","title":"Docker","type":"tags"},{"content":"","date":"1 April 2024","externalUrl":null,"permalink":"/en/tags/flask/","section":"Tags","summary":"","title":"Flask","type":"tags"},{"content":"","date":"1 April 2024","externalUrl":null,"permalink":"/en/tags/jinja2/","section":"Tags","summary":"","title":"Jinja2","type":"tags"},{"content":"Period: 2023–2024\nI developed a reservation system for the shuttle bus operated at Kansai University\u0026rsquo;s Takatsuki Campus.\nBackground # The university had not previously operated a shuttle service. A reservation system was therefore developed alongside the launch of the new service. The system allows students to reserve a service and seat through a web application and authenticate with their student ID cards when boarding.\nSystem # The system manages 20 seats on each of four buses. Students can select a service and reserve a seat through the web application. Reservation data is managed by a Flask API and database running on an on-premises server.\nBoth the web application and the Raspberry Pi-based authentication devices installed on the buses retrieve reservation data through the Flask API. Each device compares the information read from a student ID card with the reservation data, displays whether the student is eligible to board, and records the completed boarding in the database.\nAn administrative interface also allows staff to review and manage reservation and boarding information, providing centralized oversight of shuttle usage.\nCard Reader # I built a custom authentication device incorporating an NFC reader, a Raspberry Pi, and a display. Students can verify their reservations by tapping their ID cards, making the boarding process more efficient.\nCustom-built student ID card reader Development # I built the on-premises server infrastructure for the system and performed the on-site setup and validation.\nWorking overnight at the university while building the on-premises server infrastructure Technology # Docker / Nginx / Python / Flask / Jinja2\n","date":"1 April 2024","externalUrl":null,"permalink":"/en/work/shuttle-bus-reservation/","section":"Work","summary":"A shuttle bus reservation system for Kansai University’s Takatsuki Campus with assigned seating and student ID authentication.","title":"Kansai University | Shuttle Bus Reservation System","type":"work"},{"content":"","date":"1 April 2024","externalUrl":null,"permalink":"/en/tags/nginx/","section":"Tags","summary":"","title":"Nginx","type":"tags"},{"content":"","date":"1 April 2024","externalUrl":null,"permalink":"/en/tags/python/","section":"Tags","summary":"","title":"Python","type":"tags"},{"content":"Period: 2024\nI took over an existing app for a company operating in real estate and construction and worked on feature development and operational improvements.\nDevelopment # I added user authentication and a chat feature that allows users to communicate with administrators. I also built a CMS as a Flutter Web application, enabling administrators to update property information.\nWhile Flutter Web has limitations in initial load performance and SEO, these were not critical for an internal CMS that does not rely on search traffic. It was selected to share the technology stack with the existing application and streamline development and maintenance.\n","date":"1 January 2024","externalUrl":null,"permalink":"/en/work/property-company-app/","section":"Work","summary":"An official app enhanced with user authentication, administrator chat, and a property management CMS.","title":"FDS, Inc. | Official App","type":"work"},{"content":"I conduct robotics research in graduate school. I also contribute as a maintainer of Metal3, an open source project. My hobbies are photography and driving.\nCareer # Date School 2026‑Present Master\u0026rsquo;s Program, Graduate School of Informatics, Kansai University 2023‑2026 Faculty of Informatics, Kansai University (Second-year transfer) 2018‑2023 Department of Control Engineering, National Institute of Technology, Maizuru College ","externalUrl":null,"permalink":"/en/about/","section":"","summary":"I conduct robotics research in graduate school. I also contribute as a maintainer of Metal3, an open source project. My hobbies are photography and driving.\nCareer # Date School 2026‑Present Master’s Program, Graduate School of Informatics, Kansai University 2023‑2026 Faculty of Informatics, Kansai University (Second-year transfer) 2018‑2023 Department of Control Engineering, National Institute of Technology, Maizuru College ","title":"About","type":"page"},{"content":"","externalUrl":null,"permalink":"/en/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/en/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":" Blog Building a Home Cloud with Three Mini PCs, a Raspberry Pi, MAAS, and OpenStack Building a MicroK8s Cluster with Mini PCs Building Your Own Public Cloud, Part 1 Escaping Environment Setup Hell: My Journey to Nix Fixing Missing Header Files When Building Neovim on macOS Growing a Mini Bonsai from Seed How to Bypass a Certificate Warning in Chrome How to Create an All-in-One Live USB Human Detection with a Raspberry Pi Camera, ROS 2, and MATLAB/Simulink Issues I Encountered While Setting Up a Fujitsu TX1320 M3 Server Navigate at the Speed of Thought with hop.nvim Production Self-Hosting of Dify on GCP with Terraform Remote SSH in Neovim, Just Like VS Code Setting Up a LaTeX Environment for Neovim The Key Lessons from The Art of Readable Code Work FDS, Inc. | Official App Kansai University | Shuttle Bus Reservation System Metal3.io Maintainer SYNASIA HOTELS | Accommodation Booking App About Site Policy ","externalUrl":null,"permalink":"/en/site-map/","section":"","summary":"Blog Building a Home Cloud with Three Mini PCs, a Raspberry Pi, MAAS, and OpenStack Building a MicroK8s Cluster with Mini PCs Building Your Own Public Cloud, Part 1 Escaping Environment Setup Hell: My Journey to Nix Fixing Missing Header Files When Building Neovim on macOS Growing a Mini Bonsai from Seed How to Bypass a Certificate Warning in Chrome How to Create an All-in-One Live USB Human Detection with a Raspberry Pi Camera, ROS 2, and MATLAB/Simulink Issues I Encountered While Setting Up a Fujitsu TX1320 M3 Server Navigate at the Speed of Thought with hop.nvim Production Self-Hosting of Dify on GCP with Terraform Remote SSH in Neovim, Just Like VS Code Setting Up a LaTeX Environment for Neovim The Key Lessons from The Art of Readable Code Work FDS, Inc. | Official App Kansai University | Shuttle Bus Reservation System Metal3.io Maintainer SYNASIA HOTELS | Accommodation Booking App About Site Policy","title":"Sitemap","type":"page"}]