モニターアームをエルゴトロン LX デスクマウント デュアル 長身ポールに交換した

デュアルモニターの配置は、最近はこういう縦にモニタを並べたようなモニタも出てきているように

www.gizmodo.jp

縦配置のほうが視線移動が少なく、スペースの節約もできるのでお手軽な横配置より縦の配置を試してもらいですね。

何年もデュアルモニタの配置は縦にしているのだけど、縦にするために長さのあるポールが必要になります。今までは

にもともと持っていた通常のエルゴトロンLXのアームや、こういう安いアーム

を購入してアーム部分だけ再利用してたりしていました。ただやはりLXアームの利便性が大きかったので、経済的にはもう1本ベーシックなエルゴトロンLXを買って安いアームを入れ替えれば良かったところ、統一感的にも交換してしまうことにしました。

どう考えても2本分にしただけの料金ではないのだけどまあ需要的に仕方がない。

一つだけ設置中に誤算があって、自分の使っているクルーズCタイプという机は変わった形をしているので、アームの取り付けにはこういう部品が必要になります。

item.rakuten.co.jp

この部品の幅がポールを固定するのに必要な幅に対して足りなかったので、この別売り部品に空いている穴を利用して、グロメット取り付けをすることになってしまったことがあります。 あんまりクルーズを使っている人はいないと思いますが、取り付け時には気を付けてほしいです。

基本的にエルゴトロンLXは最高のディスプレイアームなんですが、弱点のうちの一つが、下向きには5度しかチルトできないということがあります。これを可能にするためには色々な方法がありますが、できるだけ頑張りたくないので

www.youtube.com

nippan3.com

このような特注部品を取り付けています。だいぶ昔に手に入れたものなので、今はもっと安く便利なパーツがあるかもしれませんが、エルゴトロン社からの部品やLXそのものの改善はなさそうなので、変わらずユーザー側がなんとかしてあげる必要がありそうです。

「Zero2Production」を読んでいる

shishi.hatenablog.jp

Advent Calenderなのにまだ続くRust学習録。

RustでのWeb開発の学習リソース探しをしていた結果、今は

www.lpalmieri.com

をやっています。

まだ途中ですが、今まで見たWeb開発のための学習リソースとして一番身になっているというか、実際のWeb開発ではこんな簡単な実装でごまかすわけにはいかないとか、アクセスログぐらいいちいち指定せずに出力したい…などと思っていた疑問に答えてくれる解説があり、プロダクトとしとしてRustをやっていく自信がつきはじめています。

本コンテンツは現在無料のコンテンツとして提供されていますが、

www.zero2prod.com

のサンプルとして提供されている、いわゆる「ベータ版の間は無料」のようなコンテンツになる可能性があります。私はこのZero2Prodの発展と完成を応援する意味も込めてアーリーアクセス版を既に購入していますが、いつか見れなくなるかもしれません。早いうちに勉強させてもらいましょう。

ログ出力のために使われているcrateなどがZero2Prodの筆者自身の作だったりするので、コンテンツ筆者自身が他の言語でのウェブ開発からRustに移ってきて解決してきた感覚が自分のようなWeb開発経験のあるRustを使っていきたい人という境遇の近さからも考えやコードが理解しやすいような気がします。全体で一連のアプリケーションの作成から始めて少しづつ作りあげていきデプロイなどにも言及されるので、RubyでのRailsチュートリアルのような代表的な学習コンテンツにもなりうるなあと思っています。

今のところRustでWeb開発するぞーってなったプログラミング経験者は

doc.rust-jp.rs

をやってRustの基礎を学び、

www.lpalmieri.com

Zero2Productionをやれば、それなりの形になるものを作る算段がつけられるようになるかと思います。

「Rust Web Programming」を読んだ

shishi.hatenablog.jp

に続くRust学習録。

"rust web programming book" みたいな感じで適当にぐぐると真っ先に出る候補で、他と比較してもと2021年出版と新しく、目次は好感触だったので買ってみるも、自分にはこの本で学習した甲斐がないなと感じた本でした。

現実とは乖離しすぎた方法で実装を進めていくので、「web開発とはこういうものだ」と学んでしまったらもうそれはむしろ害悪になってしまう内容になっています。Reactなどはオーバーキルだから使わないと説明されていましたが、だからと言ってその結果が {{BASE_CSS}} などと <head> に書いてそこに別ファイルのCSSを読んでその内容で置換してHTMLを出力するというところまで戻るのはやりすぎで、せめて既存のテンプレートエンジンを使うほうが読者の利益になったと思います。 その他、JSの実装についても簡単な実装ではなく間違った実装に見え、十分な経験を積んだ人のものとは思えず、本書筆者の知識と経験に疑いを持ってしまいました。

また、typoが多く、中には引数の型があってないものまであり、本当にRustで動かしてやっていたのか?となってしまいました。なお、資料として公開されているgithubソースコードと本もまた乖離していますが、githubの資料はちゃんと動きました。

その他、Dockerやデプロイまで解説されているのですが、どれも大変原始的かつ今覚えなくていいやり方に感じるものが散見されました。だいたいどこのchapterにも「複雑だから説明しない」とか、「これで十分」的なエクスキューズがあるのですが、この内容はそのエクスキューズでもってカバーするにも苦しいだろうと思います。

逆に良かったこととしては、とりあえずでも開発段階が一通り解説されていることです。プロジェクトの作成からJWTによる認証、データの永続化、デプロイまで解説されていることは良いことだと思いました。冒頭の通り、目次で見えたこの構成が気に入って買ったのですが、内容がこんなに残念に思うものだとは…

この本でいわゆるバックエンド的な学習をしてwasmで構築するフロントエンド的な方向の学習に移るつもりだったのですが、ちょっと納得できないので、各フレームワークの解説記事やチュートリアル、本などを探していて、もうちょっとバックエンドの学習をしようと思います。

さすがにまだまだ学習資料自体が少ないし、あってもよりRustが注目されているであろう分野であるwasmや低レイヤのものが多く、なんでもできると期待される反面のきつい部分だなと思っています。

休職明けなどにNotionからのワンタイムパスワードのメールが来ないときの対処

Notionからのワンタイムパスワードが記載されたメールが来ない

NotionにはGoogleなどのOpenID Connectを使ったログインと、SSOプロバイダ経由、あとベーシックなものとしてメールアドレスを入力してそのメールアドレスに対しワンタイムパスワード記載のメールを送信してもらってログインする方法がありますが、僕が休職明けでNotionの利用を再開しようとしたところ、いつまで経ってもそのメールが来ないということがありました。

僕のメールアドレスをもとのグループのメンバーに加えてもこの現象は起こり続けていたので、社内で相談してみたところ、休職明けの人にこの問題は良く起こっていたらしく、Notionに問い合わせで復活することが何度かあったということや、Notionのバウンスリストに入っていて届かないことがあったという有力情報を聞くことができました。

そこで、Notionのウェブサイトのフッターにあるmailtoから「休職明けでサスペンドしてたメールアドレスを復活させてNotionにログインしたいんだけどできないんだ。あなたのところのバウンスリストに入っててメール送信できないなら消してほしいな」っていう内容をちょっとビジネスっぽくした英語で送ってみると、素早く1時間程度で「確かにバウンスリストに入ってたので消したよ」って返ってきて、再試行したところ無事メールが来てログインすることができるようになりました。

休職明けや何かの事情でサスペンドしていたメールアドレスや、スパムの送信元として詐称や乗っ取りされたメールアドレスは同様の理由でログインできなくなっているかもしれません。

あまり頻繁に起こるケースでないので逆に残しておこうと思った情報でした。

「The Rust Programming Language 日本語版 (通称 the book)」を読んだ

shishi.hatenablog.jp

前記事で読んだ本から次のステップとして

doc.rust-jp.rs

Rust界隈ではthe bookと呼ばれている、入門書がウェブで無料公開されており、有志により翻訳された日本語版が存在するので、そちらを読みました。 思っていたよりも知りたかった知識が網羅的に得られ、

www.oreilly.com

この辺の本から得ようとしていた基礎知識はとりあえず得られたのではないかという感想を得ているので、基礎知識ステップはとりあえず完了としてより実践の知識を得るフェイズに移っていこうかなというところです。

有志によるボランティアなので、ありがちな翻訳の固さ、逐語翻訳された不自然さなどはありますが、些細な問題です。やはり英語が読めるほうとは言っても日本語とは理解の早さが違いますからね。ほぼ全てのコードを写経しました。ほぼ全てのコードが今も問題はありませんが、dyn キーワードの導入から日本語版の更新が追いついていないようで、そこだけは修正しないとコンパイルすることができないことがありました。コンパイルできないようなコード、日本語が理解できないようなところは、原著である英語版をのぞきにいくと差分が見られたり、原文を見てああなるほどと理解することもできるので、そのようにして読まれることをおすすめします。

やはり母国語で必要十分な学習ができるというのは布教に大きな影響があるものと思います。Rails Tutorialのような、大きなひとつのつながりではないので、そこまで読みやすいとは言いにくいですが、実際に書いて実行できることに配慮されたコードがあり、Rust Playgroundで気軽にコード片を実行もできるしで、Rust勉強したいというプログラマにはまず紹介したい教材です。

今までのところ自分がやってきたRustの学習フェイズをこの順番なら良かったなと思う順としては

tourofrust.com

doc.rust-jp.rs

shishi.hatenablog.jp

です。

次は

www.rust-lang.org

"Rust By Example" を挟んでコード片の実例知識をもうちょっと眺めたりこのページで学習できる内容を眺めた後、

www.packtpub.com

で自分のやりたいメイン部分のウェブに発展していきたいなと思います。

「実践Rustプログラミング入門」を読んだ

Rustを勉強しようと思い本を探しはじめたのがだいたい1年前、この本の出版されたころでした。なんやかんやあって積まれたこの本を読んだのは世間的にもRustの評価が高まってきた今頃となってしまい、もっとはやく知っておけば今ごろRustのスキルももっとついていたろうになあと思うばかりです。

本書はRustの入門書ということになっていますが、あまり親切な部類の入門書ではありませんでした。

入門書としてRustのコンセプトや簡単な言語仕様、コンパイラなどのインストール方法から解説されてはいますが、大変に広く浅く解説されているので、プログラミングに慣れた人でないと理解は難しいかと思いました。広く解説しているため、多くのバックグラウンド知識がないとコンテキストが理解できず、Rustの理解とコンテキストの理解を同時に行わなければならない範囲が多いためです。実践中にコードの意図は説明されてもあまりコード自体の内容は説明されないので、Rustのリファレンスを見ながら見ていくようになります。丁寧に説明されたいという人には厳しいでしょう。

ただ、その分とりあえずRustでできることに触れてみたいという範囲は広くサポートされています。CLIアプリケーション、Webアプリケーション、WebAssembly、ローカルGUIアプリケーション、組み込みプログラミングとRustを使ってやりたいと思われる活用範囲に一通り触れていると思います。

発売されて1年ほどですが、エラッタにも載ってない内容で記載コードが実行不能だったり、誤字があったりします。エラッタページにあるソースコードを見ればわかりますが外部ライブラリに関するものだったりもしましたので難しいところです。 cargo add xxx だけでなく全てバージョンは書いておいたほうが良かったように思われます。

実例としては、Section5で本の説明通りにするとpanic が発生してアプリケーションが実行できなくなるこのような問題が発生したりします。

stackoverflow.com

僕のバックグラウンド的な問題があったと思いますが、WebAssemblyとunsafeに関する説明は特に理解が難しかったです。今後の実践から理解を深めていきたいと思いました。

意外にも自分のバックグラウンドでは本格的に扱ったことはない組み込みプログラミング、マクロの解説は分かりやすかったです。他にもおもしろかった部分としてはWebアプリケションの章ではデプロイするための実用的なdockerイメージの作り方が説明されたり、cargo周辺ツールの紹介、 FFIによる多言語連携の実例、最後にはRustで仕事をするための説得法まで、Rustの入門書とはいったい…という感想を持ってしまいました。

ちょっととまどってしまう本書ではありますが広く触れさせてもらえたことで私はRustに大変興味をもちましたし、とりあえずはもうちょっと詳しい言語仕様などを知ったり、もっと本格的なWebアプリケーション例を知りたく、

www.rust-lang.org

www.oreilly.com

www.packtpub.com

このあたりの本を読もうと思いました。

前者の本は前版の和訳があるのですが、Rustは数年ごとにエディションという区切りのアップデートがあるポリシーに追従できていないので、原著を追いたいところです。原著も2021年に予定されてるアップデートにどの程度追従できてるのかは読んでみないと分かりません。

これらでRustにより自信をつけたら、WebAssemblyなどにより詳しくなって、自身の得意領域のwebでRustをもっと活かせるようになりたいですね。

「プログラミングElixir」を読んだ

プログラミングElixir第2版を翻訳者笹田さんから頂けました。ありがとうございます。

プログラミング Elixir(第2版)

プログラミング Elixir(第2版)

  • 作者:Thomas,Dave
  • 発売日: 2020/12/01
  • メディア: 単行本

ElixirについてはErlangVMを利用した言語であり、なんだかRubyインスパイアな部分があるらしい関数型言語であると何年も前に知ったものの特に学習はしていないという状態でした。

また、本書の原著者Dave ThomasはRubyの普及に大きな影響があったと語られるピッケル本の作者であるのみならず、まさに世界のレジェンドプログラマーRubyをメイン言語として愛用する自分としてはRubyの良さを広めた彼が次にお気に入りの言語としてElixirを挙げているのは結構気になっていました。 さらにタイムリーなことに弊社でもElixirの機運が上がっており、まさに渡りに船というタイミングでいただけることになったのでした。

まず、本書はElixir習得のための総合的な入門書です。某所ではよくこういう書籍に関して「プログラマ初心者にとっての本ではない」というレビューがつくことがありますが、本書もプログラミング初心者のための本ではありません。プログラミング的な知見をある程度備えたElixir初心者、もしくは学習済みの人が知識を総ざらいするための本です。

序盤はまずElixirのもつ型や構造体の説明ののち、関数型言語の特徴的な扱いというか、考え方について解説が割かれます。パターンマッチに始まり、例えば、本書で whileloop といった代表的な繰り返し制御構造を見ることはありません。その代わり何度も再帰を使う場面に出会います。Rubyやその他いわゆるオブジェクト指向言語では再帰を使えてもあまり積極的に使う場面は少ないと思うのですが、Elixirではこういう風にするとクールだというふうに聞こえるぐらい再帰を使います。パターンマッチと再帰になじんでくると、なんだか関数型言語っぽい書き方ができるようになってきたなという感じになります。リストの扱いもオブジェクト指向言語たちでは見かけないやり方なので、Emacs LispCommon Lispになじんでなければリストの扱いにはもう少し苦労したかもしれません。

中盤になると、組み込みの依存管理ツール兼プロジェクト管理ツールである mixGithubと連携する使ったちょっとしたCLIツールを作ってみる章に入ります。近時のプログラミング言語にはこのようなツールの扱いは必須で、とても実用的と思いました。テストの書き方にもちゃんと振られており、実際に全部写経しましたが手にElixirをなじませるに良い教材となってくれたと感じます。新規プロジェクト作成、テストも何も言わずに最初からセットアップされており、依存性管理もビルトイン。このスムーズさはやはり新しい言語ならではという感じがありました。

その後、より本格的と言うか、ElixirとErlangのパワーを知れる内容に移っていきます。最近の言語が備えていなければならない安全に並行プログラミングを実行する機能、OTPサーバー、スーパーバイザ、タスク機能といった具合です。どれも入門書にある内容と思えないほどしっかりと解説がされており、コード量もしっかりしているので全部写経することは時間的な都合でできませんでしたが、辿れる考え方はもちろん規模や方法の違いはあれど、実世界の問題にも十分に適用できそうです。スーパーバイザとクロージャでもっていた値を新しくデプロイしたアプリケーションに引き継がせる例はこれがこのコンテナ時代より前にもっと知られていれば…と思わせる大変おもしろい体験でした。

終盤は高度な機能としてマクロやビヘイビア、プロトコルについて説明されます。マクロはともかくとして、プロトコルは実世界上のプログラミングでよくお世話になる予感があります。Javaでいうところのインターフェイスに近いものと理解しました。

要所に要所に演習問題がありますが、本を通してみると結構な量があります。すぐ解けるようなものばかりではなく、結構考え込んだりもします。ちなみに答えは用意されていないので、どうしてもわからない場合はGithubで探すことになります…僕は探しました。 演習問題と合わせて写経しながら本書はそのコード量と合わせて相当なボリュームとなります。

本書の最初に 「赤いカプセルをとれ」"Take the red pill" という映画マトリクスの名言が出てきますが、今だこういう世界観に対するあこがれのある自分としては最初に本書に引き込まれるきっかけとなってくれました。大変ずるくて効果的ですね。あと本書は全編に渡りカラーでした。紙の本を久しぶりに読んだこともあり、新鮮で驚きました。

本書を読了した今、さらにElixirのウェブフレームワークであるPhoenixに入門してウェブ開発への知見を深めていくか最近噂のIoT用フレームワークNervesを学んでいくか、うずうずしているところです。