NVMe ストレージの揮発性内部キャッシュ

TL;DR
HDD 同様、NVMe ストレージも nobarrier するなら内部キャッシュを無効化したほうがいいケースがあります。

分かる人向けに端的に書くと、NVMe 仕様には volatile write cache の有無と、有効化/無効化切り替え、および有効な場合にデータが消失するケースが明記されています。手持ちの NVMe デバイスの情報を確認して、ファイルシステムに nobarrier つけたいなら、確実に無効化しておきましょう。

以下は詳細。

続きを読む

SRE 本は二度以上読む価値がある

@tamagawa_ryuji 氏からこの度和訳して発売された「SRE サイトリライアビリティエンジニアリング」をご恵贈いただきました。

英語の原本は昨年発売されており、Google のサービス運用について実践的な知見が得られる貴重な書籍ということで、去年のうちに英語版を社内で購入し、輪講しています。今回和訳本を頂きましたので、二度目となりますが早速拝読しました。

SRE (Site Reliability Engineering) という言葉を聞きなれない方のために簡単に解説しておくと、Google において古典的なシステム管理者の概念に代えて導入された、システムとその上のサービスの信頼性に責任を持つエンジニアとその仕事のやり方の体系的な概念です。

初めて読んだ際は、SRE とそれにまつわる Toil や Postmortem といった概念や SLO の定義の仕方について Google の知見を学ぶのに精一杯でした。二度目となる今回ですが、以下のような点で読む価値が確実にあると感じた次第です。

続きを読む

iOS でクライアント証明書認証

長年 Android を使っていたんですが、最近 iPhone にしまして。

cybozu.com にリモートからアクセスする際、クライアント証明書で認証する「セキュアアクセス」という機能があるのですが、Safari で使うには証明書を読み込ませておかねばなりません。

Android では PKCS#12 形式のファイルを選択するだけで読み込めたのですが、iPhone だとユーザーインタフェースがないのですね。 調べてみると、会社の iPhone をまとめて設定するために使う「構成プロファイル」という機能があり、この一機能でクライアント証明書を設定できるようです。

構成プロファイルは .mobileconfig という拡張子の XML ファイルで、以下のように自作できます。

続きを読む

http.Response を返すような関数は作らないのが賢明

Go 1.7 から本体に入った context パッケージは便利、というより今や必須の道具です。以下のように書くことで、一定時間で処理をキャンセルできたりします。

func slowOperationWithTimeout(ctx context.Context) (Result, error) {
    ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond)
    defer cancel()  // releases resources if slowOperation completes before timeout elapses
    return slowOperation(ctx)
}

defer cancel() とありますが、このようにしないとリソースリークするので context 使うときはこう書くのがパターンです。

さて、以下のプログラムですが、返ってくるデータが小さいうちは問題なく動きますが、大きなデータになると resp.Body の読み込みで必ずエラーが返るようになります。

続きを読む

「みんなの Go 言語」は忙しいプログラマこそ読むべき本

@songmu 氏からご恵贈いただいた「みんなの Go 言語」(みんGo)、早速拝読しました。

書評としてはタイトル通り、なのですがそれではあんまりなのでもう少し。

本書でも述べられている通り、Go 言語は早ければ一日で大体学べてしまう学習効率の良さが魅力です。最大の魅力と言っていいかもしれません。コンパクトな言語仕様に実務で必要な周辺ツールが揃っているため、初学者から歴戦のプログラマまで活用範囲が非常に広いのです。

さて、その Go 言語をさらに活用するための本書。お手に取ってみればわかりますが 150 ページ弱で薄い本です。読むのに半日あれば十分でした。本の内容も余計なことは書かれておらず、「こんな便利な機能があるよ」くらいなあっさり風味で淡々と役に立つ情報が並べられています。

ああ、わかっているなと。

Go 言語の最大の魅力と思う学習効率の高さを、文字通り形にした本、それが「みんなの Go 言語」です。

私はかなり Go を使いこなしているプログラマです。社外に公開している Go のプロジェクトだけでも 7 つあり、社内でもさらに多くのツールを Go で作成しています。つまり一通り Go に関する知識を持っている状態で「みんGo」を読んだのですが、本書の四分の一くらいは新規に知るツールやテクニックでした。逆に言うと四分の三は日々実践で使っている知識なわけで、有用度合いが非常に高いです。

知らなかった四分の一についても、すぐに試してみたいものがたくさんありました。特に第2章「マルチプラットフォームで動作する社内ツールの作り方」は知らない知識の山でした。Windows でビルドしてこなかったもので(ごめんなさい mattn さん)。。

最後に、第三章を執筆した @fujiwara さんにぜひ拙作の cybozu-go/cmd をお試しいただけると嬉しいなと思いました。この章のテーマであるログ、タイムアウト、シグナル、goroutine の停止を Go 1.7 の context で解決するツールですので。宣伝失礼。

素晴らしい本をありがとうございました!