Hands-On C++ Concurrency: Quick Sort and Hash Table

In this hands-on tutorial, we will explore concurrent programming in C++ through the implementation of a concurrent quick sort and a lock-based hash table. Building Blocks Before diving into the detailed implementation, let’s first go through the building blocks of concurrent programming in C++. std::thread std::thread is a class that represents a single thread of execution. It can be used to create new threads that run concurrently with the calling thread....

June 17, 2024 · 7 min

Step-by-Step Guide to Building a WebSocket Chat App with Axum and React

In this guide, we’ll walk through the process of creating a full-stack chat app using WebSocket. Our backend will be built with Axum, a powerful Rust backend framework, and Shuttle, a development platform, while the frontend will be developed using React and Vite. We’ll cover Utilizing WebSocket in Axum and React. Generating unique identifiers using nanoid. Incorporating telemetry with tracing for enhanced logging. You can find the complete code for this project on GitHub....

April 22, 2024 · 12 min

Deploying a Rust WebAssembly (WASM) App to GitHub Pages

In this tutorial, we’ll guide you through the step-by-step process of deploying a Rust WebAssembly (WASM) app on GitHub Pages. The final website will consist of a JavaScript frontend that utilizes WASM, generated from Rust code. The project we’ll use is called lp, a logical operation language that I created earlier. We won’t delve into the implementation details; instead, our focus will be on incorporating WASM into an existing Rust project....

March 5, 2024 · 6 min

Building a Lisp-like Language from Scratch in Rust

This post delves into building an interpreter for a Lisp-like language using Rust. No knowledge beyond Rust basics is required to follow this post. Inspiration and Project Overview Inspired by Stepan Parunashvili’s article Risp (in (Rust) (Lisp)), I created lip, an interpreted language designed for logical operations with a Lisp-like syntax. This supports logical operations (not, and, or), branching (if expression), lambda functions, and variable definition. This post guides you through the process of building an interpreter, focusing on the core functionalities of tokenizing, parsing, and evaluating expressions....

March 4, 2024 · 11 min

PDF Summarizer with Ollama in 20 Lines of Rust

Explore the simplicity of building a PDF summarization CLI app in Rust using Ollama, a tool similar to Docker for large language models (LLM). Ollama allows for local LLM execution, unlocking a myriad of possibilities. This post guides you through leveraging Ollama’s functionalities from Rust, illustrated by a concise example. Since PDF is a prevalent format for e-books or papers, it would be useful to be able to summarize it....

February 10, 2024 · 3 min

Rust Error Handling: thiserror, anyhow, and When to Use Each

In this blog post, we’ll explore strategies for streamlining error handling in Rust using two popular libraries: thiserror and anyhow. We’ll discuss their features, use cases, and provide insights on when to choose each library. TL;DR thiserror simplifies the implementation of custom error type, removing boilerplates anyhow consolidates errors that implement std::error::Error While thiserror provides detailed error information for specific reactions, anyhow hides internal details Return Different Error Types from Function Let’s start by creating a function decode() for illustration....

February 6, 2024 · 6 min

Organize Rust Integration Tests Without Dead Code Warning

In this blog post, we’ll explore strategies for organizing integration tests in Rust, addressing challenges like dead code warnings and maximizing modularity. Integration Testing In Rust Conventionally, integration test files are placed in tests directory at the top level of a project. Let’s create a project for illustration: 1 cargo new --lib my-tests 1 2 3 4 5 6 7 8 ❯ exa --tree --level 2 . ├── Cargo.lock ├── Cargo....

February 5, 2024 · 6 min

Embarking on Backend Development with "Zero To Production In Rust"

In this blog post, I will share insights gained from Zero To Production In Rust, a comprehensive guide to backend development in Rust. Through the development of a newsletter app, this book covers various important topics for developing an API server. TDD and User Stories: A Shared Vision This book adopts Test Driven Development (TDD) as a consistent approach, starting implementation with tests. This improves code reliability and, more importantly, facilitates a shared vision when collaborating with others....

February 4, 2024 · 4 min

キャリア 4 年目の振り返り

働き始めて 3 年と 9 か月が経過した. まだ 4 年目が終わるには早いのだが, 今年から拠点を海外に移したので, 年度ではなく西暦を基準にして振り返りをしようと思う. 海外移住 2023 年 7 月にカナダのバンクーバーに引っ越した. 日本で生まれ育って, 海外経験といえば数回の旅行程度だった自分にとっては, 仕事を辞めて海外生活を始めるのは大きな冒険だった. しかし移住から半年近く経過した今となっては普段の生活は落ち着いていて, 海外生活と言っても意外に大したことないなと思っている(日本からバンクーバーに移住して生活を安定させるまでにやったこと). 個人的な今年の目標であった「リスクを取る」は十分達成できたのではないかと思う. 海外移住したことが最大の成果だが, 日常生活の中でも精神的な変化があった. やったことがないことをやるということに対してポジティブな姿勢を持つようになった. 私のように慎重な(臆病な)人間にとっては, 進んで失敗しに行くくらいの心持ちがちょうど良いだろう. 英語 海外で暮らしていると言語については意識せざるを得ない. 渡航前に一か月間フィリピンで英語留学をしていた. それまではそもそも英語でコミュニケーションを取るという経験がほぼなかったので, そもそも自分が喋る英語が人に伝わるかどうか不安を覚えていたのだが, 英語を喋ることに対する心理的な障壁は打破することができた. 一年前と比べると進歩したとはいえペラペラになったかというとそんなことはなく, 当然だが日本語と比べると遥かに言語能力が落ちることがもどかしい. コミュニケーションという人間の活動における根本的な要素に不安がある状態がどれほどのハンデになっているのか想像もつかない. バンクーバーに住んでいる限り英語は何をするにしても必ず重要になるので, できる限り腕を磨きたい. プログラミング 渡航してからは, 日本で言うところの専門学校のような立ち位置の私立カレッジに通っていて, 今は WEB Development コースの学生をしている. WEB 開発の経験はないが, 学校が始まるのに先んじて予習をしておいたおかげもあってか, 授業の中で特に困ることもない. むしろ課題を素早く終わらせて先生を驚かせる日々を送っている. 授業の内容は未経験者向けなので, 正直なところ大してエキサイティングでもない. しかし曲がりなりにも数か月取り組んでみて, 何かを作る時の選択肢として WEB を自分の中で持てるようになったのは良かった. 授業外では Rust に入門して, 最近は競技プログラミングをずっとやっている. もともと仕事で C++ や C# を使っていて Rust に興味はあったのだが, ようやく本格的に触ってみることができた. 基本的には C++ と似ているが, 関数型言語を始め他言語の特徴を上手い具合に集めていて面白い....

December 31, 2023 · 2 min

日本からバンクーバーに移住して生活を安定させるまでにやったこと

2023 年 7 月 26 日に日本からカナダのバンクーバーへ引っ越しました. 現在はプログラミングの専門学校に通っており, 一年後にエンジニアとして現地就職することを目標としています. 渡航から 1 か月以上経ち生活が落ち着いてきたこのタイミングで, 渡航前・渡航後に行った重要なことをまとめておきます. 将来バンクーバーに引っ越す方の参考になれば幸いです. 筆者のステータス 日本生まれ日本育ち, 大学卒業後 3 年間エンジニアとして働いた後, 海外就職を目標としてバンクーバーに渡航しました. 海外経験は数回の旅行程度で, 海外に特別な縁があったわけではありません. 普通に日本で生まれ育った私の視点から, 海外移住に必要だったことという視点で記事を書きます. 渡航前 最初は海外生活というと現実離れしたことのように思えていましたが, 実際の所必要なものは多くありません. ビザとお金です. それがあればどうにかなりますし, なければどうにもなりません. ビザ 最重要はビザです. ビザとはその国への滞在に必要な許可証のことです. 海外生活においては何よりも重要なものです. 国によって形態は異なりますが, カナダには観光/学生/就労/ワーキングホリデービザなどの種類があります. 自分がどのビザを利用して渡航するかは非常に重要な選択であるため, 情報を集めた上で判断したほうが良いでしょう. 例えばワーキングホリデーは, 強力なものの人生で一度しか使えない切り札のようなビザで, うかつに使ってしまうと後々まで悪影響を及ぼす可能性があります. 私がバンクーバーを選んだ大きな理由の 1 つはビザが取得しやすかったからです. まず学生ビザで渡航し, 一年間学校に通った後, 1 年間就労可能な co-op という制度を使い就職を目指します. その後ワーキングホリデーを使ってさらに 1 年間就労期間を伸ばすこともできますし, 就職できていれば永住権 (≠ 市民権) 取得も見えてきます. もちろんビザの制度が変更される可能性もあるので計画通りに行くとは限りませんが, 今後 3 年間のビジョンが持てるのは悪くないと思っています. 疑問が生じるかも知れないので説明しておくと, エンジニアとしての経験があるにも拘らず学校に通うのは, ビザのためです. 授業で技術に関することを教えてほしいとは, 実はあまり思っていません(傲慢に聞こえるかも知れませんが, まあ多くのことは独学できますし, 授業で教えられることも限られているでしょうし). もちろん一年を無為に過ごすわけではなくその間に就職へ向けた準備をするつもりです. しかし学校に通う最大の目的は co-op とワーキングホリデーで二年間働ける状態を作ることであり, それくらいビザは重要だと考えています....

September 4, 2023 · 2 min