Happy Developing

楽しい開発ライフ 🦀

RabbitMQ Essentials 2nd Editionを読んだ感想

読んだ本 RabbitMQ Essentials - Second Edition 2020出版でRabbitMQ関連の本で比較的新しめだったのと、Taxi ApplicationにRabbitMQを組み込んでいくという形がおもしろそうだったので読んでみました。 1 A Rabbit Springs to Life 概要やインストールにつ…

RabbitMQ TutorialsをRustでやってみる

本記事ではRabbitMQ TutorialsをRustでやっていきます。 RabbitMQはAMQP 0-9-1というプロトコルの実装という位置づけなので、登場するコンセプトについてはAMQPに基づいて理解していきます。(以降AMQPはAMQP 0-9-1を前提にします) Tutorialsは以下の7つから…

deadpoolでConnectionPoolを作る

本記事では、deadpoolを利用したConnectionPoolの作り方とその仕組みについてみていきます。 外部リソースを抽象化した形でPoolが提供されているので同時利用数に制限のある外部リソースを複数作成して、必要に応じて使いまわしたい場面においてdeadpoolが利…

RustのAPI Guidelinesを読んでみる

Rustのブログ記事でよく言及されることが多いので、API Guidelinesを読んでみました。 本GuidelinesはRustのlibrary teamによってメンテされているみたいです。 Guidelinesの位置付け 本Guidelinesの位置付けはAboutで述べられています。 These guidelines s…

error-stackを試してみる

この記事では最近(2022-06-10)0.1.0がリリースされたerror-stackを試してみます。 READMEには error-stack is a context-aware error-handling library that supports arbitrary attached user data. とあり、crate/moduleで利用する、Result型を提供してお…

tower::Service traitを理解する

tower::Service traitについての公式のGuideがとてもがとてもわかりやすかったです。 そこで本記事ではこれを辿りながらtower::Serviceがなにを抽象化しようとしているかの理解を試みます。(libraryのAPIがどうして今のsignatureに至ったのかをここまで丁寧…

入門WebAssemblyを読んでWASMをはじめた

読んだ本 入門WebAssembly The Art Of WebAssemblyの翻訳書です。 本書を読みながらサンプルコードを写経したので感想を書いていきます。 著者のWebサイトには他にもWebAssemblyについてのトピックがあります。 サンプルコードはGitHubから見れます。 canvas…

Rustのexponential retry実装 againのソースを読んでみる

本記事では、Rustでexponential retryの機能を提供するagainのソースを読んでいきます。 (lib.rs 1ファイルだけの小さなcrateなのですぐ読めます) 基本的にproductionでnetwork callを行う際はretryが必要になってくると思います。sidecar等の透過的なinfra …

ソフトウェアアーキテクチャの基礎を読んだ感想

読んだ本 ソフトウェアアーキテクチャの基礎 Fundamentals of Software Architecture 日本語版は紙、英語版はKindleで読みました。Kindle版は図がカラーで見れます。 本書を読んだ感想を書いていきます。 Chapter 1. Introduction Software Architectureとは…

AWS CDK Conference Japan 2022の感想

2022/4/9に行われたAWS CDK Conference Japan 2022の動画を見たので感想を書きます。 Keynote: What is CDK v2? CDK v1とv2の主な違い Deployまでの流れ パラメータに関するCloudformationとの差異 Construct Levels 3年目のCDKを振り返って 初学者にCDKをオ…

cargo-nextestの使い方と仕組み

この記事では以下の点について書きます。 cargo-nextestの使い方 ソースを読んで理解できた範囲内で仕組みの解説 Contents cargo-nextestの使い方 概要 Install Testの実行 Retry Flaky Test Partitioning Test Testの一覧表示 Config Profile Github Action…

RUST FOR RUSTACEANSを読んだ感想

読んだ本 きっかけ まとめ FOUNDATIONS TYPES Types In Memory Alignment Layout Dynamically Sized Types and Wide Pointers Traits and Trait Bounds Compilation and Dispatch Generic Traits Coherence and the Orphan Rule Trait Bounds Marker Existen…

proconio::input!の仕組みを追ってみる

この記事ではRustのproconio::input! macroについて書きます。 documentやtest caseで想定されているユースケースをどうやって実現しているのかを追っていきます。 versionは記事を書いている時点で最新のp-v0.4.3 を対象にしています。 proconio::input! と…

Parser combinator nom 入門

この記事ではparser combinator nom1について書きます。versionは v6.1を前提にしています。 nomは小さいparserを組み合わせて、目的とするデータ構造を入力から読み取るためのpackageです。 nushell のコードを読んでいてみかけたのが初めてでしたが他のpac…

Rustのlifetimeとvariance

nomicon を読んでいてSubtyping and Variance の話がでてきたときにどうして継承の概念がないRustにvarianceの話がでてくるのかなと思っていました。 その後、Rustの動画をyoutubeに投稿されているJon Gjengsetさん のCrust of Rust: Subtyping and Variance…

Web APIの設計を読んだ感想

読んだ本 https://www.shoeisha.co.jp/book/detail/9784798167015 本書を読みながら、参考になったところ、普段自分が開発していて思ったところなんかを書いていきます。 本書でいうところのWeb APIはもっぱらRESTが前提です。(GraphQL,gRPCについても言及は…

Key Value Storeを作りながら学ぶtokio

本エントリーではKey Value Storeをtokioで作るうえで学んだことを書いていきます。 RustのLT会 Shinjuku.rs #13で話させていただいた内容です。 発表時のスライド source code 作ったもの TCP Server Max Connection Graceful shutdown Stream read/write w…

Mini-Redis Tutorialからはじめるtokio

この記事ではRustの非同期runtimeのひとつtokioの公式Tutorialを通じてtokioのAPIに入門していきます。 TutorialではMini-RedisというRedisのclient/serverを実装したlibraryを通してtokioとfuture/asyncの概念を学んでいきます。Redisについての前提知識は…

りあクト! 第3版がすごくよかった

会社のフロントエンドエンジニアの方にReact/Typescript関連のおすすめのドキュメントを聞いたところりあクトを教えてもらいました。 読んでみてとてもおもしろく、おおげさですが感動してしまったので感想を書きます。 読んだ本 りあクト! TypeScriptで始…

自作キーボードLily58Proを組み立てる

この記事では自作キーボードLily58 Proの組み立て工程について書いていきます。 普段はHHKBを使っていたのですが分離型キーボードを試してみたいと思っていました。 HHKBに近い感じがよく、CapsLock、FunctionKeyがなくてUS配列あたりで探していたのですがし…

Rustでgitのtagをbumpする

同じチームのメンバーがnodegitというnodeのlibgit2のbindingを利用して、便利なツールを作っているのをみて各言語にgitを操作するためのライブラリーへのbindingがあることを知りました。 そこで、今回はRustのlibgit2 bindingであるgit2-rsを利用して、git…

Rustでネットワークの速度を測ってみる

会社の回線が遅いなと感じ、具体的な数字を測ってみたくなったので、Rustでtcpのthroughputを計測するcliを作ってみました。 source codeはこちら install cargoとbrewでinstallできます。 brew $ brew tap ymgyt/netspeed $ brew install netspeed cargo ca…

RustのcliをHomebrewで公開する

この記事ではRust製のcliをbrew installできるようになるまでの手順について書きます。(CI上で実行できるようにしたいのですが、まずは手でやります) サンプルとして利用するのは、前回の記事で紹介した、MySQLにpingをうつだけのcli, mysqlpingerです。 bui…

RustでMySQLにpingをうつ

local環境でdocker-compose等を利用してDBを立ち上げた際に、DBの"ready"を待ちたいことがありました。 最初は、tcp接続でよしとしていたのですが、やはりprotocol的な"ready"が必要だったので、pingをうつ必要がありました。 ということで、RustでMySQLにpi…

RustでRui Ueyama先生の低レイヤを知りたい人のためのCコンパイラ作成入門をやってみる1(環境構築から四則演算まで)

compilerbookこと低レイヤを知りたい人のためのCコンパイラ作成入門をRustでやっていきます。 本記事では、環境構築から四則演算のtestを通すところまでおこないます。compilerbookのステップ5: 四則演算のできる言語の作成までです。 概要 概要としては、計…

Kubernetes Meetup Tokyo #23にいってきました

2019年9月27日に開催されたKubernetes Meetup Tokyo #23にブログ枠で参加させていただいたので、その模様について書いていきます。 会場 会場は渋谷ストリームの隣に誕生した渋谷スクランブルスクエアです。ビルの正式オープンが11月からとのことで絶賛内装…

nushell/bookに日本語翻訳のPRだしたらマージしてもらえました

nushell/bookというRust製shellのbook(document)に日本語翻訳のPRをだしたらmergeしてもらえました。 ドキュメントはこちらから読めます。 そもそもnushellとは A modern, GitHub-era shell written in Rustと謳っているとおり、Rustで書かれたshellです。主…

RustConf 2019にいってきました

現地時間(PDT) 8/22 ~ 23、オレゴン州ポートランドで開催されたRustConfに参加してきたので、その模様を書いていこうと思います。 参加のきっかけ Rustに関わっておられる方々がにどんな人達なのか実際に見てみたいと思い、ちょうどRustConfの開催時期に夏季…

Rustでdoubly linked list

Rustでdoubly linked listを書いてみました。 use std::cell::RefCell; use std::fmt; use std::rc::Rc; type Link<T> = Rc<RefCell<Node<T>>>; #[derive(Debug)] struct Node<T> { value: T, prev: Option<Link<T>>, next: Option<Link<T>>, } impl<T> Node<T> { fn new(value: T) -> Rc<RefCell<Self>> { Rc::new(RefC</refcell<self></t></t></link<t></link<t></t></refcell<node<t></t>…

Rust env_loggerの出力に色をつける

env_loggerの出力に色をつけたかったのですが、exampleが見つからず、docを読んだ結果以下のような処理になりました。 [dependencies] log = "0.4.8" env_logger = "0.6.2" use env_logger::{fmt::Color, Builder}; use log::{Level,trace,debug,info,warn,e…