英語の本を初めて翻訳した感想

ご縁があって英語の本を先日翻訳一部翻訳しました。どんな本かはこの記事にはあまり関係ないので気になる方はこの記事をご覧ください。本記事の目的は、この作業の苦労したこと、工夫したことを紹介して、これから英文を和訳する必要が出てくる人に何らかの参考にしてもらうことです。

翻訳した本は土地勘がある分野の本で、かつ、私は専門書なら日本語とそれほど変わらない速度で読めるので「まあなんとかなるだろ」くらいの感覚で引き受けたのですが、そんなことはまったくなかったです。ここでは、とくに大事だと思った2つのことを紹介します。

1つ目は専門用語の日本語化です。ほとんどの専門用語は英語として理解できたのですが、それを日本語の文書内に書くときには適切な表現を選ぶ必要があって、それがかなり大変でした。人によってやりかたはたくさんあると思いますが、私は次のような方針で邦訳しました。

  • 広く使われている日本語訳があればそれに倣う。英語のままで認識されていれば同じくそれに倣う。
  • そのようなものがなければ、英単語をそのまま、あるいはそれをカタカナ英語にしたものを使う。

適切な日本語訳が無い英単語の日本語を自分で創造するのは極力避けました。もしやるとしても初回登場時にカッコ内にもとの英語表現を残しました。その理由は、私の定義した用語が、本書以外で今後使われる見込みはあまりないので、特定の本の中だけで通じる独自用語を覚えることを読者に強いたくなかったからです。他にも、今後英語の文献に触れる際に英語表現と本書内の表現が対応付けられずに読者が苦労してほしくないという思いもありました。

この作業において、とくに比較的知識が浅い分野では自分の中で英語表現と、それに対応する普及した日本語表現が結びついていないものが多かったので、想像以上に苦労しました。

第二に、極力直訳を避けて日本語として読みやすい意訳を心がけました。私は英文から直訳された「いかにも翻訳調」な文書が苦手なので、もとの英文で言わんとすることを極力変えない範囲で、かなりの意訳をしました。場所によっては一文を複数の文に分けたり、複数の文を一文にまとめたりもしながら文書を再構成したりもしました。また、日本語ではあまり見かけない表現(正確には覚えていませんが「冒険に出かけよう」というような英語独特の表現やアメリカンジョークなど)はカットしたりもしました。

このあたりの意訳の塩梅は人によって好みが分かれるところではありますが、少なくとも直訳よりはよくなったかなと思っています。ただし本当に読みやすいかどうかは私ではなく読者の皆様が決めることなので、これから様々なところに出てくるであろう読者レビューの評価を待ちたいと思います。

本記事は上記の通り2つのポイントに絞って英語書籍の翻訳をわたしが初体験した際の苦労点や工夫点を紹介しました。誰かに何かの参考になることを願って、こんなところで終わりにします。

一部訳した本の宣伝: 「入門モダンLinux」

4/6 更新。Amazon上の煽り文を最新化&公式サイトから目次を転載

一部だけ翻訳にかかわった「入門モダンLinux」という本が4月7日に出るので宣伝を兼ねた紹介をします。

原著は「Learning Modern Linux」です。

本書のタイトルを目にしてまず思うのは「モダンLinuxとはいったいなんぞや」でしょう。これについてはamazonにも載っている煽り文をご覧ください。

Linuxはサーバ、組み込み機器、スーパーコンピュータなどにおいて存在感を示してきました。近年では、オンプレミスのシステムだけではなく、クラウドサービスでも広く使われています。本書は、前半でLinuxを使いこなす上で必要な基本知識を、後半で最新情報をまとめています。Linuxの知識を体系的に整理したい、最新動向が知りたい、運用を改善したい、効率的に開発を行いたい、といった要望をかなえる内容となっています。時代の変化に柔軟に対応できるLinux技術者を目指すなら必読の一冊です。

以下、少し長いですが、本書の雰囲気を掴んでもらうために公式サイトから目次を引用します。

1章 Linuxの入門
    1.1 モダンな環境とは何か?
    1.2 これまでのLinuxの歴史
    1.3 なぜオペレーティングシステムなのか?
    1.4 Linuxディストリビューション
    1.5 リソースの可視性
    1.6 Linuxの全体像
    1.7 まとめ

2章 Linuxカーネル
    2.1 Linuxアーキテクチャ
    2.2 CPUアーキテクチャ
        2.2.1 x86アーキテクチャ
        2.2.2 ARMアーキテクチャ
        2.2.3 RISC-Vアーキテクチャ
    2.3 カーネルコンポーネント
        2.3.1 プロセス管理
        2.3.2 メモリ管理
        2.3.3 ネットワーク
        2.3.4 ファイルシステム
        2.3.5 デバイスドライバ
        2.3.6 システムコール
    2.4 カーネルの拡張
        2.4.1 モジュール
        2.4.2 モダンなカーネル拡張:eBPF
    2.5 まとめ

3章 シェルとスクリプト
    3.1 基本用語
        3.1.1 ターミナル
        3.1.2 シェル
        3.1.3 モダンなコマンド
        3.1.4 一般的なタスク
    3.2 使いやすいシェル
        3.2.1 fishシェル
        3.2.2 Zシェル
        3.2.3 他のモダンなシェル
        3.2.4 どのシェルを使うべきか?
    3.3 ターミナルマルチプレクサ
        3.3.1 screen
        3.3.2 tmux
        3.3.3 他のマルチプレクサ
        3.3.4 どのマルチプレクサを使うべきか?
    3.4 スクリプト
        3.4.1 スクリプトの基本
        3.4.2 移植性の高いbashスクリプトの書き方
        3.4.3 スクリプトのlintとテスト
        3.4.4 GitHubのユーザ情報スクリプト
    3.5 まとめ

4章 アクセス制御
    4.1 基本
        4.1.1 リソースと所有権
        4.1.2 サンドボックス化
        4.1.3 アクセス制御の種類
    4.2 ユーザ
        4.2.1 ローカルでのユーザ管理
        4.2.2 ユーザの一元管理
    4.3 パーミッション
        4.3.1 ファイルのパーミッション
        4.3.2 プロセスの権限
    4.4 高度な権限管理
        4.4.1 ケーパビリティ
        4.4.2 seccompプロファイル
        4.4.3 ACL
    4.5 アクセス制御のよい実践方法
    4.6 まとめ

5章 ファイルシステム
    5.1 基本
    5.2 仮想ファイルシステム
        5.2.1 論理ボリュームマネージャ
        5.2.2 ファイルシステムの操作
        5.2.3 一般的なファイルシステムレイアウト
    5.3 擬似ファイルシステム
        5.3.1 procfs
        5.3.2 sysfs
        5.3.3 devfs
    5.4 通常のファイル
        5.4.1 一般的なファイルシステム
        5.4.2 インメモリファイルシステム
        5.4.3 コピーオンライトファイルシステム
    5.5 まとめ

6章 アプリケーション、パッケージ管理、コンテナ
    6.1 基本
    6.2 Linuxの起動プロセス
    6.3 systemd
        6.3.1 ユニット
        6.3.2 systemctlによる管理
        6.3.3 journalctlによる監視
        6.3.4 greeterのスケジューリング例
    6.4 Linuxアプリケーションのサプライチェーン
    6.5 パッケージとパッケージマネージャ
        6.5.1 RPMパッケージマネージャ
        6.5.2 Debian deb
        6.5.3 言語固有のパッケージマネージャ
    6.6 コンテナ
        6.6.1 namespace
        6.6.2 cgroup
        6.6.3 コピーオンライトファイルシステム
        6.6.4 Docker
        6.6.5 他のコンテナ関連のツール
    6.7 モダンなパッケージマネージャ
    6.8 まとめ

7章 ネットワーク
    7.1 基本
    7.2 TCP/IPスタック
        7.2.1 リンク層
        7.2.2 インターネット層
        7.2.3 トランスポート層
        7.2.4 ソケット
    7.3 DNS
        7.3.1 DNSレコード
        7.3.2 DNSルックアップ
    7.4 アプリケーション層ネットワーク
        7.4.1 ウェブ
        7.4.2 SSH
        7.4.3 ファイル転送
        7.4.4 NFS
        7.4.5 Windowsとのファイル共有
    7.5 ネットワークの高度なトピック
        7.5.1 whois
        7.5.2 DHCP
        7.5.3 NTP
        7.5.4 wiresharkとtshark
        7.5.5 他の高度なツール
    7.6 まとめ

8章 オブザーバビリティ(可観測性)
    8.1 基本
        8.1.1 オブザーバビリティの戦略
        8.1.2 用語
        8.1.3 シグナルの種類
    8.2 ログ
        8.2.1 Syslog
        8.2.2 journalctl
    8.3 監視
        8.3.1 I/Oデバイスとネットワークインタフェース
        8.3.2 統合パフォーマンス監視
        8.3.3 インスツルメンテーション
    8.4 高度なオブザーバビリティ
        8.4.1 トレースとプロファイリング
        8.4.2 PrometheusとGrafana
    8.5 まとめ

9章 高度なトピック
    9.1 プロセス間通信
        9.1.1 シグナル
        9.1.2 名前付きパイプ
        9.1.3 UNIXドメインソケット
    9.2 仮想マシン
        9.2.1 KVM
        9.2.2 Firecracker
    9.3 モダンなLinuxディストリビューション
        9.3.1 Red Hat Enterprise Linux CoreOS
        9.3.2 Flatcar Container Linux
        9.3.3 Bottlerocket
        9.3.4 RancherOS
    9.4 セキュリティに関するトピック
        9.4.1 Kerberos
        9.4.2 PAM
    9.5 その他のモダンLinuxの話、あるいは将来の話
        9.5.1 NixOS
        9.5.2 デスクトップ版Linux
        9.5.3 組み込みシステムにおけるLinux
        9.5.4 クラウドIDEにおけるLinux
    9.6 まとめ

付録A 便利なコマンド集
    A.1 システム情報
    A.2 ユーザとプロセス
    A.3 ファイル情報
    A.4 ファイルとディレクトリ
    A.5 リダイレクトとパイプ
    A.6 時刻と日付
    A.7 Git
    A.8 システムパフォーマンス

付録B モダンLinuxツール

Linux経験が長い方々であっても、見慣れない「モダンな」キーワードがいくつかあったのではないでしょうか。

ここからは各章について軽く紹介します。1章は「Linux の入門」というよくあるものです。では2章のテーマは使い方なのかな…と思いきや、いきなり「Linuxカーネル」です。平易な書き方でハードウェアとソフトウェアの関係、ユーザプロセスとカーネルの関係などについて書いているので、そのあたりの話題に興味がある人は楽しめるかと思います。最近一部で話題のeBPFについても少し触れられています。

8章「オブザーバビリティ(可観測性)」ではオブザーバビリティの基本的な考え方やmonitoring, metrics, log, traceなどなどについて具体的なツールを挙げながら紹介してくれています。オブザーバビリティは入門書には載っていないものの、学ぼうとするといきなりごっつい本を一冊買う必要がある、となりがちです。いまいちオブザーバビリティについてピンと来ないかたは、まずは本書で軽く触れておくといいのではないでしょうか。

3章「シェルとスクリプト」、4章「アクセス制御」、5章「ファイルシステム」、6章「アプリケーション、パッケージ管理、コンテナ」、7章「ネットワーク」など、「そんなの知ってるよ」と言われそうな章も、既存の書籍に比べるとやや高度なものを扱っています。たとえばシェルについてはbashだけではなくfishやzsh、さらにもうちょっとマニアックなものについて紹介していたり、tmuxなどのターミナルマルチプレクサについての言及があったりします。現場で知ったり同僚や友人に教えてもらわないとなかなか存在に気付けないこの手のツールが紹介されているのが本書の魅力の一つです。

第九章「高度なトピック」では、たとえばコンテナベースのFlatcar Container Linuxという新しいタイプのLinuxディストリビューションを紹介しています。この言葉を聞いたことがないかたは、おそらく「こんなものがあるのか」と驚くかと思います。ほかにも著者のMichael HausenblasさんはAWS所属なこともあってか、AWSにかかわりが深いFirecrackerやBottleRocketといった非常にマニアックなものが紹介されていています。

そんなこんなで「Linuxを使っているけど、最近のLinuxまわりの状況はわからないなあ」という人は是非軽い気分で読んで知識をアップデートして、さらなる成長へのきっかけとしていただけたらと思います。

スタンディングデスクを一年以上使った感想

2021年にスタンディングデスクを買ってからしばらく経ったので、感想を書いておきます。対象読者は一日中デスクワークしてるような人です。わたしのようなリモートワークのソフトウェア開発者なんかがぴったり当てはまると思います。わたしは医療関係者ではないので、医学的にはデタラメ言ってるかもしれません。「個人の感想」というやつです。

いきなり結論から言うと、いまのところ「スタンディングデスク買ってよかった。座ってばかりのときより楽になった」という感想を持っています。ただし、いくつかの注意事項付きです。

  • 立ったり座ったりをこまめに切り替えるとよい。「座り仕事が駄目」というよりも「ずっと同じ姿勢なのが駄目」なんだと思う
  • 立ち仕事するときは足の下にマットを敷いたりクッションがある靴を履いたりするとよい。わたしはヨガマットとワークマンだったかで買ったゴム底の靴を使っている
  • 痩せたとか筋肉がついたとかは別にない。そういうのをお望みなら、運動したり食生活に気をつけたりが必要
  • これだけで体が柔らかくなったりもしない。「凝りにくくなる」だけ。柔らかくしたければ別途ストレッチが必要

わたしがそもそもスタンディングデスクをほしかった理由は2つあります。一つは同僚が愛用していたのを、前から「いいなあと」思っていたことです。もう一つはフルリモートワークで毎日何時間も座り仕事をしていてロクに体を動かさないのがまずいなと思っていたからです。思っていただけでなく、年々背中や腰が重くなってきて体が悲鳴を上げつつあるのを体感していました。これらの理由によりスタンディングデスク購入に踏み切りました。

買ったのはこれです。

この製品をとくに狙って買ったわけではなく、なんとなく思い浮かべていた以下の要件を満たすものの中てよさそうと思ったのがこれだっただけです。

  1. 天板の横幅が可能な限り広い
  2. キーボードスライダー付き

aについては天板の横幅を広くしたのは正解でした。最初は天板にはノートPCだけを置ければいいかとも思っていましたが、だんだん欲が出てきて、置くものはどんどん増えていきました。いまではマグカップ電気ケトル、茶器、電源タップ、ディスプレイ、その時読んでいる参考書、などなど、いろんなものが置かれています。

bについては天板の奥行きをむやみに長くせずにキーボードやマウスが収納できるのは思っていた以上に便利でした。また、天板より少し低いところにキーボードがあるのはかなりしっくり来ました。スライダーがなければ天板の上に高さ調節用の何かを置いて、さらにその上にPCを置くといったことをしていたかもしれません。

机の高さ調節は手動でするものを選びました。なぜかというと、私は田舎住まいで部屋のスペースに比較的余裕があるので、普通に座って使う机とスタンディングデスクを使い分けているからです。この場合、最初に立ち仕事用に高さ調節してしまえば二度と再調整しなくて済むというわけです。一つの机で立ったり座ったり…ということをやりたいかたは自動昇降機能付きのものなどを選ぶとよいかと思います。手動だと、よほどマメな人でないと座り仕事モードか立ち仕事モードのいずれかのまま二度と調整しなくなると思います。とくに机の上に置くであろうものが多い人ほどそうなると思います。

スタンディングデスクを買ったその日は嬉しくなって一日中立ってたんですが、一日の終わりにふと気付くと背中と腰がぶっ壊れそうになっていました。この体験によって「立ってればいいというわけではないのだな」ということか身に沁みました。また、その日は何も考えずに洋間に素足で立ってたのも悪かったです。仕事してるかどうかという問題ではなく、こんなことしていたら身体がもつわけありません。

次の日からはこういうことが起きないように、上述のようにクッション性のあるマットと靴を使い、かつ、1,2時間ごとに休憩のタイミングで机を変えることになりました。そのあとは快適な環境を手に入れました。導入前よりはるかにQoLか上がったと思います。ただ、これは「座っているだけの状態を無くせた」にすぎないので、それ以外の、たとえば筋力向上などの効果は(ひょっとしたら少しはあるのかもしれませんが)とくに感じませんでした。

では、誰かに何かの参考になることを願いまして、終わり

好きなの使って他のをけなさない

私が生業とするソフトウェア開発において、OSやコードエディタやプログラミング言語など、様々なソフトウェアを使います*1。これらについて私が使っているものを理由付きで書くと次のようになります。

  • OS: Ubuntu 22.04
    • 細かい設定をしなくてもそれなりに使える。よく普及しているから色々な情報を得やすい
  • コードエディタ: VSCode
    • 細かい設定をしなくてもそれなりに使える。Remote SSH extensionを使ったリモートマシン上での開発が楽
  • プログラミング言語: 主にGo
    • 使い慣れているから。システムプログラムをするから。覚えやすいから

これらにそれなりの愛着はあるものの、今後置かれる状況によって、どんどん変わってくるでしょう。じっさい10年くらい前はGoはほとんど使っていなくて、Cプログラマでした。

私はこんな感じですが、中には特定のソフトウェアに愛情を注ぐ人もいます。それ自身はとても良いことであり、うらやましくもあります。しかし、中には愛情が行き過ぎてしまって、他の人もこれを使うべきと考えて人に押し付けようとしたり、場合によっては他のソフトウェアをけなしてまで自分の好きなものを上位に置こうとする、などです。

わたしはこのようなことをするのは無益、もっというと逆効果だと思っています。たとえばわたしは自分が使っているものをけなされるといい気はしませんし、押し付けられるのは嫌です。さらにいうと、そのソフトウェアを使ったり、あるいはそのソフトウェアに言及したりすると面倒な人に絡まれるのは嫌なので使いたくないと思うことすらあります。

というようなわけで、好きなものがあれば「こういう理由で好きだ」と主張して、必要ならば別のものとの比較をして、自分は楽しそうに使って、そのときにわざわざ他のものをけなすような真似をしなければ、人の興味を引きやすいし普及もしやすくなるのかなと思います。

*1:他にももちろん山ほどありますが、話を簡単にするため割愛します

自分のコーヒー環境とか

先日友人とコーヒーについて話していたらなんか楽しくなってきたのでメモがてらここに書きます。対象読者はコーヒー好きか、あるいはコーヒーに興味がある人で、かつ、他人の考え方や装備にも興味があるかたです。

わたしにとってのコーヒーの役割

最初に、まずはわたしにとってのコーヒーの役割について書いておきます。

  • コーヒーの味と香りを嗜好品として楽しみたい
  • 朝食がパンが多いので、そのときの自分と家族の飲物として
  • 同じ豆でなるべく多くの味を楽しみたい
  • 丁寧に淹れて、香りを楽しんで、という行為によってあわただしい生活にゆったりした時間を作りたい
  • かっこいい器具を見て気分を良くしたい
  • 家の庭や出張などでの宿泊先でも飲みたい。理由はいいのを飲みたいというのに加えて「外でも飲める」という事実で勝った感があって幸せになれるから
  • カフェインに弱くて飲みすぎるとイライラしたり不眠になったりするので、あんまりたくさんは飲まない

選ぶ器具、および飲みかたやタイミングも、この考え方をもとに決めています。

フルーティなものを好みます。苦いのとか渋いのはあんまり好きではないです。苦いものは甘いものを食べるときに例外的に飲むことがあります。 豆の鮮度は味に強く影響すると感じるので、豆は少し(だいたい100gづつ)だけ買ってすぐ飲むようにしています。豆屋でいろんな豆を眺めたり、普段ないやつが入荷 されていないかチェックするのが好きなので苦になりません。

豆は常温でキャニスターで保存しています。冷蔵や冷凍が嫌というわけではなくて、単にめんどくさいからそうしているだけです。

豆は豆の専門店で買います。あんまり古いのは困るので「焙煎何日以内のものだけ置いてる」と謳っているものを買います。通販でもたまに買います。 通販のときは注文を受けてから焙煎するようなものを選びます。一つのものをずっと飲むというよりは、新しいものを見つけたら買うようなことをします。

淹れ方

同じ豆でいろいろな味を楽しみたいので、ペーパードリップ、サイフォン、ネルドリップを模したもの(後述)、フレンチプレスで飲みます。 それ以外のものは合わないわけではなく単に試していないだけです。ネルドリップについては洗うのがめんどくさそうだからやってないです。

ペーパードリップは本やyoutubeの動画を見るなりして、なるべく単純な淹れ方をするとおいしく入れられます。自己流よりだいぶよくなりました。 ただし腕を上げるとどんどんうまくなる…というよりは「失敗しないようにする」のが大事と思ってます。いまのところ最高のコーヒーを求めて 淹れ方に工夫するようなことはしていませんが、将来的にはやるかもしれません。淹れ方よりも豆の種類と品質、鮮度のほうが味への影響がはるかに 大きいと感じます。あとペーパードリップは1杯分を淹れると湯量調節などがうまくいかないことが多いので、すくなくとも2杯ぶん淹れて、 2杯目は後で飲むか家族にあげたりすることが多いです。

お湯は多めかつ温度は低めで、おおよそ90度くらいで淹れます。挽き方は粗めです。理由は香りを楽しみたいのと、上述の通り、苦味が苦手だからです。

器具

いろいろ器具を持っています。商品へのリンクを張っていますが、同じ種類のいろいろな器具を買って比較したわけではないです。 単に自分が持っているものを書いただけです。

かっこいいから買いました。ガラスのドリッパーと木製サーバーのセットです。

1~2人ぶん淹れるときに使うサーバーです。V60が特別好きというわけではなく「ペーパードリップは一種類でいいか」って思ってるのと、なんとなく円錐が好きだからこれにしてます。

ネルドリップっぽいものが淹れられるとの触れ込みのステンレスドリッパーです。ネルドリップは後始末とかめんどくさそうと敬遠してたんですが、これならと思って買いました。 ただ、わたしはネルドリップのコーヒーをあんまり飲んだことがないので、ほんとにネルドリップに近いのかはわかりません。ただ、ペーパードリップとは全然違う味になるので 重宝しています。紙のフィルターがいらないのはいいんですが、粉が詰まりがちなので、毎度丁寧に歯ブラシなどで洗ってあげる必要があるのでちょっとめんどくさいです。

使用後のドリッパーを置くのに便利です。上述のガラスのドリッパーについては残念ながら形が合わなくて 寝っ転がすような形になりますが、まあ使えなくもないのでセーフ。

フレンチプレス器です。フレンチプレスのなにかいいのないかなと探していたら友人が教えてくれたので買いました。 かっこよくてとてもよいです。あと仕事中に悠長にペーパードリップしていられないときに、豆挽いてお湯だけ沸かせば 粉とお湯をここに入れて数分放置でできあがるので、とくに仕事中に重宝しています。

www.bodum.com

電動サイフォンメーカーです。「サイフォンかっこいい!ほしい!でも子供が触ると危ないから無理だな」とおもってたんですが、電動があったのでこれだと 飛びついた…といいたいところですが友人に誕生日プレゼントにいただきました。とてもいいのでおすすめです。 粉と水を入れたらスイッチひとつでできるのがよいです。気持ちを落ち着かせたいときはできあがるのを 眺めるのも楽しいです。ボコボコいう音と、サイフォン効果でお湯が上がったり下がったりするのを 見るのが楽しいです。

ペーパードリップは飲み終わったあとのカスはフィルタごと包んで捨てればいいんですが、それ以外のものは そうはいきませんので、このネットにカスを捨てて、さらに水洗いします。ビニールではないので袋に水が溜まらず、 かつ、目が細かいので微粉以外は粉が落ちることもないので大変よいです。

かっこいいと思って買ったキャニスターです。だいたいいつも豆を3種類常備しているので3つ買っています。 最近は豆が透けるやつも欲しいなあとか思っていますが、キャニスターをそんなに持っててもしょうがないかなと思って、まだ手を出していません。

温度調整機能付きの電気ケトルです。温度は93-96度、および100度にできます。わたしは上述のとおり あんまり温度を高くせず、93度にすることが多いです。普通の電気ケトルに比べた利点は温度調整が できることに加えて、注ぎ口が細いのでケトルで沸かしてからドリップポットに移し替えずにそのまま ドリップ工程に移れることです。

淹れるたびに毎回必要な豆の量を測って挽くので、大変便利です。目分量でもいいかもしれないんですが、 0.1g単位で測っているとちょっと落ち着いた気分になれるので、あえてスケールを使っているというところもあります。

1~2人ぶんなど、少量だけ淹れたい場合に使っています。かわいくてよい。小さいので外出先にはこれを持っていきます。

グラインダーです。楽だし粉の粒度も調整できるのでとてもよいです。定期的に メンテする必要がありますが、それもまた心が落ち着くのでよいです。

外泊するときに持っていく折り畳み式の電気ケトルです。日本だとホテルに電気ケトルが置いてあることがほとんどでしょうけど、 海外出張などのときは置いてないことが多いので便利です。別にコーヒー飲まない人でも便利です。

外出先でペーパードリップする用。小さくたためるのでよいです。昔はバネット使っていたんですが 今一つ安定性が悪いのでこれにしました。

ハンドミルです。小さくて取り回しがよいし、豆の粒度も変えられるのが便利です。 ゴリゴリやってると豆の香りがしてくるのと、無心になれるのがよいです。おもに 外出先で使いますが、家でも気分を落ち着かせたいときにグラインダーのかわりに 使うこともあります。

あとこれは非売品なんですが、自分で革細工をしている友人からいただいたペーパーフィルターを入れるケースです。 外出先に持って行ってます。

コーヒーの淹れ方とか器具や豆の種類、その他うんちくなどが書いています。基本を知るのに役立ちました。

実は他にも何冊かあるんですが、どれもまあまあ似たようなことが書いてあります。書店でフィーリングが 合いそうなものを一冊適当に買って読めばいいかなと思います。

おわりに

こんなかんじです。次は焙煎小屋が欲しいです。

「[試して理解]Linuxのしくみ ~実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版】」が発売されます

拙著、「[試して理解]Linuxのしくみ ~実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版】」が10/17日に発売されることになりました。本記事はその宣伝のためのブログエントリです。

まずは本書がどのようなものかについて説明し、その後に、すでに第一版を読まれている方向けに第一版と本書の差分について説明します。

どんな本なのか

筆者は過去にLinuxカーネル開発をしていたのですが、そのころから次のような思いをずっと持っていました。

  • OS、とくにOSカーネルについての広く浅い知識はOSカーネル開発者だけではなく多くの技術者にとって役立つはず
  • 当時OSカーネルについての知識を得ようとすると、OSを作ったりサポートしたりする人用の難しくて分厚い本の読解が避けられないという状況をなんとかしたい

これらの思いを踏まえ、Linuxを題材としてLinuxカーネルのソースは一切読まずに、実験と図解によってLinuxカーネルを広く浅く理解するというコンセプトの本が2018年に「[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識」として生まれました。

本書はこの第一版にさまざまな改善を加えたパワーアップ版という位置付けです。

本書は以下のような12個の章からできています。

  • 第1章 Linuxの概要
  • 第2章 プロセス管理(基礎編)
  • 第3章 プロセススケジューラ
  • 第4章 メモリ管理システム
  • 第5章 プロセス管理(応用編)
  • (NEW!) 第6章 デバイスアクセス
  • 第7章 ファイルシステム
  • 第8章 記憶階層
  • 第9章 ブロック層
  • (NEW!) 第10章 仮想化機能
  • (NEW!) 第11章 コンテナ
  • (NEW!) 第12章 cgroup

各章の詳細な説明はここでは省略しますが、冒頭にリンクを張った書籍ページに実際の紙面のサンプルや目次などが掲載されているので、興味のあるかたはごらんください。

第一版との違い

第一版は幸いにも多くの読者にご購入いただき、かつ、筆者のねらい通りの効果を得られたというフィードバックもたくさん得られました。その一方で、次のような厳しいご指摘もいただきました。

  • DockerやKubernetes全盛のいま、仮想化、コンテナについて触れられていない
  • 実験プログラムがC言語で書かれている時点で読む気が失せる
  • 誤字脱字などの不備が多すぎる*1
  • 全体的に図が素っ気なくて殺伐としている

増補改訂版はこれらすべてが大幅に改善されています。

まず、新コンテンツとして前述した通り、仮想マシンのしくみについて述べた「仮想化機能」の章と、仮想マシンより軽量にアプリケーション実行環境を作る「コンテナ」の章を追加しました。これら二つの章とかかわりの深い、システムのリソース制御について扱う「cgroup」の章も追加しました。さらにカーネルがデバイスを具体的にどのように制御するかについて述べた「デバイスアクセス」の章も追記しました。第一版から存在していた文書も、前のまま残しているわけではなく、出版後にいただいたフィードバックをもとに大幅に加筆修正をしています。おそらく第一版から半分くらいは書き換わっているのではないかと思います。

実験プログラムについては、馴染みのある方が(すくなくともC言語よりは)多いであろうGo言語とPythonでほとんど書き直しました。グラフ化する方法が知りたいという要望も少なからずあったので、実験プログラムの結果をグラフ化するスクリプトも本書に掲載しています。あらためて筆者自身で第一版と第二版を比較してみると、ソースの可読性が大幅に上がったと感じました。サンプルコードのリポジトリはすでに公開しているので、興味のあるかたはごらんください。

誤字脱字などの不備については、不備を可能な限り少なくするために、技術のプロ、および、文書表現のプロにかたがたにあらたに本作りに参加していただきました。技術面では、様々なバックグラウンドを持つ20人以上の技術者のかたがたからのレビューを受けました。文書表現の面では、技術レビューが終わった後に、外部校正のかたに文書を磨き上げていただきました。

図の殺伐感については、第一版はモノクロだったものを今回はフルカラーに生まれ変わったこと、および、デザイナーさんに頑張っていただいて、私が書いた殺伐とした図をかなり図をポップにしていただいたので、見やすさが大幅に上がりました。

終わりに

長々と説明してきましたが、本書のコンセプトや各章のコンテンツに興味のあるかたは、是非本書をお買い求めいただけたらと思います。ご自身はすでに本書を必要としないレベルにOSカーネルのことをご存じのかたも、「この人にカーネルの知識が少しあれば伸びそう」といかたに本書を勧めていただけると助かります。また、第一版から大幅に改善していますので、第一版を読まれたかたにも、ぜひ読んでいただけたらと思います。

販促用動画も作ったので、よろしければこちらもごらんください。おわり。

youtu.be

*1:現在市場に出回っている3刷においては指摘された不備はほぼすべて修正されています

当たり前のことをやっているだけで凄い

IT業界で10年以上過ごしている中で、凄いと思う人達にたくさん出会ってきました。最初はとくに新卒で入社した会社の先輩方が中心でした。ここでいう凄さとは何かというと「仕事を片づけるのが早い」とか「成果物の完成度が高い」などです。当時、こんなふうに自分もなってみたいという思いが強くて必至で真似しようと試行錯誤したのですが、全然うまくいきませんでした。ありていにいえば、表面上の凄さだけを見ていたことが失敗の原因だったかと思っています。早く仕事を片づけようと焦り、結果完成度も下がり…と、さんざんでした。

その後はアプローチを変えて、彼らの日常の何気ない振る舞いなどを観察することにしました。すると、彼らのうちの多くの凄さの源泉は驚異的に頭の回転が速いとか、ほかの誰もが持っていない異能力を持っていたりするわけではなく、世間で当たり前と言われていることを息をするようにやっていることだとわかりました。たとえば以下のようなものがあります。

  • スコープ内のことだけやる
  • 仮説と検証を愚直に繰り返す
  • 記憶より記録に頼る(紙/やPCに状況を記録)
  • 同じ間違いを二度しないための仕組みを作る

これらは聞くだけだと「そりゃそうだ」と思うだけで、「社会人なら全部できて当然」といわれたりすることもありますが、実のところ社会に出てからこれのことができているのは少数派といってよかったです。「当たり前を継続できるのは異能力では?」という考え方もあるでしょうが、後天的に知能を高めたりするよりは現実的かなと思います。何もできないうちから背伸びして人よりも秀でたプラスアルファを求めるよりも、まずは基本に立ち返って、当たり前を実践して、体に定着させるのもよいかなという話でした。そうするとプラスアルファが後からついてくるのではないかと思います。