gashirar's blog

ウイスキーがすき/美味しいものがすき/k8sがすき

Kubernetesの勉強方法メモ

はじめに

Kubernetesの勉強ってどうすればいい?どうやってた?」という質問を受けたので、どういう資料をあたっていたのかを忘備録的にまとめておきます。
初学者向けです。

記事を書いた人について

  • OJT
    • OpenShift3.11の構築
    • オンプレ環境におけるKubernetesの構築(主にkubeadm)
    • YAMLおじさん、ほか諸々の球拾い
  • Off-JT
    • Certified Kubernetes Administrator ( Score: 92% )
    • Certified Kubernetes Application Developer ( Score: 89% )

「とりあえずCKA/CKADくらいはとってる人なんだな」と思っていただければ。
OperatorとかCI/CDとかをがっつりやっている人ではないので、下記にもあまり出てきません。

K8s環境を準備する

まずは作業する環境を用意しましょう。

と紹介していますが、自分の状況に合うもので選べばよいです。
プロジェクトですでにManaged K8sを使うのであれば対応するものを、オンプレ上に作る必要があるのであればkubeadmを、
プロジェクトなどは決まってないけどとりあえず無料で小さく始めたいならMinikube/Kindをどうぞ。

Managed Kubernetes

お金をかけられるよ、という人はマネージドサービスを使うのが一番手っ取り早いです。
お金かけたくない人でも無料枠である程度の期間はできると思います。

Minikubeまたはkind

Welcome! | minikube

kind

触ってみて好きな方を使えばいいと思います。
自分が勉強しはじめたころはMinikubeしかなかったのでMinikube使うことが多いです。

Kubeadm

kubeadmを使用したシングルコントロールプレーンクラスターの作成 | Kubernetes

オンプレ上にクラスタを作りたい人はまずここから始めると勉強になります。
実際のプロジェクトであればkubesprayなどを使うのがベターなんじゃないでしょうか。

学習のためのコンテンツ

書籍

Kubernetes完全ガイド

本書を読み終わった頃にはCKADの資格取得が容易になっていることでしょう。一方CKAに関しては、Kubernetesクラスタを手動で構築できる知識が必要なため、少しだけ追加で学ぶ必要があります。

とあるように、「Kubernetesの上でどのようにアプリケーションを動かすか」に重きを置いている本です。「Kubernetesをどう作るか」は別の方法で学ぶと良いです。
まずはこの本を一通り読めばよいと思います。

Kubernetes実践ガイド

こちらもオススメ。

Webで読めるドキュメント

Kubernetes Document

Kubernetes Documentation | Kubernetes

最近は日本語に翻訳されている項目も増えてきているので読みやすくなっています。
ページによっては日本語の情報が古いこともあるので、英語でも確認するようにしましょう。

日本語訳についてはコントリビュートチャンス。

Kubernetes API Reference

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/

specがわからなくなったときにお世話になるところ。
kubectl explain <resource>でもみられます。

(おまけ) CIS Benchmark for Kubernetes

https://www.cisecurity.org/benchmark/kubernetes/

自分たちでKubernetesクラスタを組むぞというインフラエンジニア向けのセキュリティベンチマーク一覧。
マネージドサービスを使う方は上記ではなく各マネージドサービス向けCIS Benchmark準拠状況をみてみた方がよいです。

(おまけ)RedHat OpenShift Documentation

access.redhat.com

自分は3.11を利用していたので上記のドキュメントとずっとにらめっこしていました。どちらかというとインフラエンジニア向け。
OpenShift独自の部分とKubernetesの部分の判断がつかないうちに読むと混乱するので初学者にはオススメできませんが、上記の書籍である程度理解した上で読むと勉強になります。Day2 Operationなど、Kubernetesの運用の考え方が身につくかも。 (ちょっと情報は古いです。OpenShift 4系のドキュメントはしっかり目を通してないのでわかりません。)

触って動かすサンプル

Kubernetes The Hard Way

GitHub - kelseyhightower/kubernetes-the-hard-way: Bootstrap Kubernetes the hard way on Google Cloud Platform. No scripts.

CKAを受験する人が一度はお世話になるであろうリポジトリです。
KaaS使わずにKubernetesやるぞというインフラエンジニア向けです。KaaSを使う方にとってはそこまでやる優先度は高くないと思います。

Istio Bookinfo

Istio / Getting Started

とりあえずなんか動かしたい人向け。自分はKubernetes上で動くちょっとしたサンプルが欲しい時によく使います。
本来はIstioのGetting Started用です。

日々の情報収集

Kubernetes Blog

Kubernetes Blog | Kubernetes

定期的に見ておきましょう。アップデート情報などいろいろ盛りだくさん。

Kubeweekly

KubeWeekly

週一金曜日に更新されています。下記ブログで日本語訳がまとめられていますのでそちらもどうぞ。(ありがたい)

運び屋 (A carrier(forwarder) changed his career to an engineer)

Sysdig Blog

Blog | Sysdig

Kubernetesというよりはコンテナ全般の記事が多いですがオススメ。

Banzai Cloud Blog

Banzai Cloud Blog · Banzai Cloud

Istioの情報あさってると大体でてくるところ。

トラブルシューティング

Kubernetesのissue

Issues · kubernetes/kubernetes · GitHub

とりあえず何かハマったら検索するところ。
大体答えが出てくる気がします。

利用はしていないが有用そうなの

Kubernetesのslackチャンネル

一時期見ていたのですが、最近は忙しくて見れていません。

Katakoda

Learn Kubernetes using Interactive Browser-Based Labs | Katacoda

すごくたくさんあるけど触れていないです。アプリケーションエンジニア向けな気がします。

まとめ

主観的ですが、新人さんの教育をするならまずは上記に上げた書籍のどちらかを動かしてもらうのが最初なんじゃないでしょうか。
他の情報収集については読みたい人だけ読めば良いと思います。

最後に

Kubernetesだけでも範囲が広いですね。
他にもエコシステム全体でいろんなものがあるので正直追うのしんどいです。上記にOperator周りとか入ってないですし。

まとめておいてなんですが、どちらかというと「こういうコマンド使うと調査がしやすいよ」みたいなのをまとめておいた方が良い気がしてきました。また時間があるときにまとめておこうと思います。。

ウイスキーあれこれスクラップ20201004号

ウイスキー関連ニュース

ハイランドパークのオフィシャルにカスクストレングスが登場!

thewhiskeywash.com

オークニー諸島で作られる「北の巨人」ことハイランドパークのオフィシャル品のカスクストレングスシリーズが追加されるようです。
ハイランドパークカスクストレングスリリースNo.1は63.3度で瓶詰めされ、750ml90ドル前後で販売されるとのこと。日本で飲めるのが楽しみですね。
テイスティングノートは下記の通り。

  • 色合い
    • 自然であたたかなゴールド
  • 香り
  • 味わい
    • とろけたトフィー、日を浴びて熟した柑橘系の果物
  • フィニッシュ
    • 長く続くピートの煙

最近飲んだもの

THE ABSOLUTE CHOICE CAOL IRA 1984 33yo

f:id:gashirar:20201004173806j:plain

RUDDERの「THE ABSOLUTE CHOICE」シリーズの第二弾、カリラ33年です。
第一段のピティヴェアック(ピティヴァイク)1988に次ぐ第二弾として1984年蒸留、34年のカリラをいただきました。

THE ULTIMATE SPIRITS

公式にもあるようにオレンジのような柑橘系のフレーバーとアイラモルトらしいピート感が合わさった逸品。
このボトルを税込み5万円で提供するのはすごい。

グレンスコシア [2008-2019] 1stフィル バーボンバレル#466 FOR SHINANOYA

f:id:gashirar:20201004173718j:plain

香りはおどろくほどのイチゴキャンディ感、なのに味わいはキャンベルタウンらしい潮らしさという面白い変化のあるボトルでした。
値段も1万円くらいとのことで手をだしやすいかかくたいなのも良いですね。

信濃屋|SHINANOYA NET SHOP|グレンスコシア [2008-2019] 1stフィル バーボンバレル#466 FOR SHINANOYA

マッカラン Edition No.5

f:id:gashirar:20201004173857j:plain

先日発売されたEditionシリーズの第5弾です。No.4にくらべて甘い印象。
個人的にはNo.4の方が好みでしたが、こちらも美味しいので見かけたら是非。来年はシリーズ最後のEdition No.6が発売されるかと思います。

「ザ・マッカラン エディション No.5」数量限定新発売 2020年8月4日 ニュースリリース サントリー

ニッカセッション

f:id:gashirar:20201004174315j:plain

ベンネヴィス、宮城峡、余市、+αで構成されたブレンデッドモルトです。
非常に香りが華やかですね。最後のあたりは若干ビター。
自分はあまりわからなかったのですが、余市感もしっかりあるとのコメントもありました。

定価で買えるなら十分ありなんじゃないでしょうか。
供給量も多そうなので、サントリー碧のようにそのうち店頭で見かけるようになりそうです。

気になるもの

ウェポンズ オブ レジェンド シリーズ

伝説の武器をラベルにあしらった下記4本が発売されています。

【楽天市場】グレンロセス 7年 2011 ロンギヌス ウエポンズ オブ レジェンド 58.5度 700ml:お酒のちゃがたパーク 楽天市場店

【楽天市場】グレンエルギン 9年 2010 グングニル ウエポンズ オブ レジェンド 59.9度 700ml:お酒のちゃがたパーク 楽天市場店

【楽天市場】カリラ 7年 2012 デュランダル ウエポンズ オブ レジェンド 57.8度 700ml:お酒のちゃがたパーク 楽天市場店

【楽天市場】オード 7年 2012 ゲイ ボルグ ウエポンズ オブ レジェンド 58.6度 700ml:お酒のちゃがたパーク 楽天市場店

10年以下熟成でどれも1万円前後。4本すべてあつめられない値段でもないところがうまいことやってますね・・・。
ネット上の画像を見る限りはモリソン&マッカイ社が手掛けたボトルのようですが、それ以上の情報はあまり得られず。

そういえば「エクスカリバー」なんていうブレンデッドもありましたね。

【特別価格】 エクスカリバー 1972年 | 酒が好き!人が好き! 武蔵屋

kubeletの--protect-kernel-defaultsをtrueにする際のkernel tuning

はじめに

kubeletの--protect-kernel-defaultsをいじっていたときにいろいろみたことのまとめです。

事の起こり

  • kubeadmで構築したKubernetesクラスタを対象にKubernetes CIS Benchmarkの確認中、下記項目を見つける。

    4.2.6 Ensure that the --protect-kernel-defaults argument is set to true

  • とりあえず--protect-kernel-defaultstrueにして起動してみたが、kubelet自体がエラーで立ち上がらない。

  • kernel tuningすればよさそうだが、ドキュメントにどれ直せばよいかがなかったのでソース読んで調べてみることに

--protect-kernel-defaultsとは

github.com

動きは下記の通り

  • false
    • kubelet起動時にkernelパラメータの変更処理を行う。
  • true
    • kubelet起動時にkernelパラメータのチェックを行い、想定と異なっていた際はエラーを出力して終了

「じゃあkubeletが想定するパラメータってなんじゃい」というのが調査対象です。

調査

setupNode

とりあえずProtectKernelDefaultsで検索。
それっぽい部分が見つかりました。

https://github.com/kubernetes/kubernetes/blob/release-1.19/pkg/kubelet/cm/container_manager_linux.go#L447

func (cm *containerManagerImpl) setupNode(activePods ActivePodsFunc) error {
    f, err := validateSystemRequirements(cm.mountUtil)
    if err != nil {
        return err
    }
    if !f.cpuHardcapping {
        cm.status.SoftRequirements = fmt.Errorf("CPU hardcapping unsupported")
    }
    b := KernelTunableModify
    if cm.GetNodeConfig().ProtectKernelDefaults {
        b = KernelTunableError
    }
    if err := setupKernelTunables(b); err != nil {
        return err
    }

setupKernelTunablesにもぐってみます。

setupKernelTunables

https://github.com/kubernetes/kubernetes/blob/release-1.19/pkg/kubelet/cm/container_manager_linux.go#L408

func setupKernelTunables(option KernelTunableBehavior) error {
    desiredState := map[string]int{
        utilsysctl.VMOvercommitMemory: utilsysctl.VMOvercommitMemoryAlways,
        utilsysctl.VMPanicOnOOM:       utilsysctl.VMPanicOnOOMInvokeOOMKiller,
        utilsysctl.KernelPanic:        utilsysctl.KernelPanicRebootTimeout,
        utilsysctl.KernelPanicOnOops:  utilsysctl.KernelPanicOnOopsAlways,
        utilsysctl.RootMaxKeys:        utilsysctl.RootMaxKeysSetting,
        utilsysctl.RootMaxBytes:       utilsysctl.RootMaxBytesSetting,
    }

    sysctl := utilsysctl.New()

    errList := []error{}
    for flag, expectedValue := range desiredState {
        val, err := sysctl.GetSysctl(flag)
        if err != nil {
            errList = append(errList, err)
            continue
        }
        if val == expectedValue {
            continue
        }

        switch option {
        case KernelTunableError:
            errList = append(errList, fmt.Errorf("invalid kernel flag: %v, expected value: %v, actual value: %v", flag, expectedValue, val))
        case KernelTunableWarn:
            klog.V(2).Infof("Invalid kernel flag: %v, expected value: %v, actual value: %v", flag, expectedValue, val)
        case KernelTunableModify:
            klog.V(2).Infof("Updating kernel flag: %v, expected value: %v, actual value: %v", flag, expectedValue, val)
            err = sysctl.SetSysctl(flag, expectedValue)
            if err != nil {
                errList = append(errList, err)
            }
        }
    }
    return utilerrors.NewAggregate(errList)
}

desiredStateの項目についてsysctl.GetSysctlで取得した値とを比較して同じであればcontinue、異なっていたらエラーを返しているようです。

utilsysctl

https://github.com/kubernetes/kubernetes/blob/release-1.19/pkg/util/sysctl/sysctl.go#L26

ありました。このパラメータ通りにkernel tuningをしたうえで--protect-kernel-defaultstrueにすれば良いでしょう。

const (
    sysctlBase = "/proc/sys"
    // VMOvercommitMemory refers to the sysctl variable responsible for defining
    // the memory over-commit policy used by kernel.
    VMOvercommitMemory = "vm/overcommit_memory"
    // VMPanicOnOOM refers to the sysctl variable responsible for defining
    // the OOM behavior used by kernel.
    VMPanicOnOOM = "vm/panic_on_oom"
    // KernelPanic refers to the sysctl variable responsible for defining
    // the timeout after a panic for the kernel to reboot.
    KernelPanic = "kernel/panic"
    // KernelPanicOnOops refers to the sysctl variable responsible for defining
    // the kernel behavior when an oops or BUG is encountered.
    KernelPanicOnOops = "kernel/panic_on_oops"
    // RootMaxKeys refers to the sysctl variable responsible for defining
    // the maximum number of keys that the root user (UID 0 in the root user namespace) may own.
    RootMaxKeys = "kernel/keys/root_maxkeys"
    // RootMaxBytes refers to the sysctl variable responsible for defining
    // the maximum number of bytes of data that the root user (UID 0 in the root user namespace)
    // can hold in the payloads of the keys owned by root.
    RootMaxBytes = "kernel/keys/root_maxbytes"

    // VMOvercommitMemoryAlways represents that kernel performs no memory over-commit handling.
    VMOvercommitMemoryAlways = 1
    // VMPanicOnOOMInvokeOOMKiller represents that kernel calls the oom_killer function when OOM occurs.
    VMPanicOnOOMInvokeOOMKiller = 0

    // KernelPanicOnOopsAlways represents that kernel panics on kernel oops.
    KernelPanicOnOopsAlways = 1
    // KernelPanicRebootTimeout is the timeout seconds after a panic for the kernel to reboot.
    KernelPanicRebootTimeout = 10

    // RootMaxKeysSetting is the maximum number of keys that the root user (UID 0 in the root user namespace) may own.
    // Needed since docker creates a new key per container.
    RootMaxKeysSetting = 1000000
    // RootMaxBytesSetting is the maximum number of bytes of data that the root user (UID 0 in the root user namespace)
    // can hold in the payloads of the keys owned by root.
    // Allocate 25 bytes per key * number of MaxKeys.
    RootMaxBytesSetting = RootMaxKeysSetting * 25
)
パラメータ kubeletを動かす上での設定値
vm/overcommit_memory 1
vm/panic_on_oom 0
kernel/panic 1
kernel/panic_on_oops 10
kernel/keys/root_maxkeys 1000000
kernel/keys/root_maxbytes root_max_keys * 25

まとめ

マネージドK8sはこのあたりを気にする必要がないので良いですね。

おまけ

kubelet fails to start when set --protect-kernel-defaults=true. · Issue #66241 · kubernetes/kubernetes · GitHub

cat > /etc/sysctl.d/90-kubelet.conf << EOF
vm.overcommit_memory=1
kernel.panic=10
kernel.panic_on_oops=1
EOF
sysctl -p /etc/sysctl.d/90-kubelet.conf

上記ではovercommit_memory/panic/panic_on_oopsを修正すればいいよとのことですが。 調べた結果と比べるとpanic_on_oom/root_maxkeys/root_maxbytesについては言及がない様子。

気になったのでこれについても調べてみたところ、どうやらkubeletの要求値とデフォルトが一緒だから問題になっていなかったようですね。

https://www.kernel.org/doc/Documentation/sysctl/vm.txt

https://www.man7.org/linux/man-pages/man7/keyrings.7.html

ウイスキーあれこれスクラップ20200923号

ウイスキー関連ニュース

スピリッツの専門家が「ウイスキーバイブル」中の"性差別"的な品評に対して非難を表明

www.thespiritsbusiness.com

Jim Murray氏の「ウイスキーバイブル」が最近発売されたのですが、その中でのウイスキーの説明に使われた用語について議論が起こっている模様。

ウイスキーの味わいや特徴、印象に対していわゆる「性的な表現」がされているとのことで、Our Whiskeyの共同創設者であるBecky Paskin氏はJim Murray氏を非難、それに対してJim Murray氏は「An attack on free thought.(表現の自由に対する攻撃だ)」と反論。

この手の話題は最近いろいろなところで起きている気がしますね・・・。

ラガブーリン22年がアイラ島ジャズフェスティバル向けに限定発売!

www.thespiritsbusiness.com

アイラジャズフェスティバルが始まって今年で22年ということで、22年モノのラガブーリンとのことです。2,004本限定でアルコール度数52.6%!
お値段は約526ドル、人気蒸留所なのですぐに売り切れてプレミアがつくでしょうね・・・飲んでみたい。

今年はコロナの影響もあるため、ジャズフェスティバルはオンライン開催だそう。気になる方はどうぞ。

オクトモア11の3種が10月1日に発売

www.thespiritsbusiness.com

上記に加えて2020年版のオクトモア10年も発売されるそうです。

ブルイックラディ Black Art 8.1登場

www.whisky.com

詳しい発売時期や値段は不明ですが、ブルイックラディ Black Artの新作がでるようです。26年物はめずらしい。
以前のシリーズは楽天などにも売ってました。3~4万円と長期熟成にしては意外と良心的なお値段。

item.rakuten.co.jp

最近飲んだもの

ウィスキーファインド 希少な動物シリーズ カワウソ / ブレアアソール11年 54.4%

f:id:gashirar:20200923154710j:plain

ラベルがかわいい。

Kingmen Lutraというもともと台湾に生息していたカワウソの一種がモチーフのようです。
Kingmen Lutraで検索してもあまり情報がなかったのですが、綴りを見る限り台湾金門県に生息するカワウソのことでしょうか。

www.excite.co.jp

かわいい。

カワウソ、ということで野生のカワウソが周囲に住んでいるブレアアソール蒸留所が選ばれたんだとか。

テイスティングノートでは香り味わいともにモルティということで、たしかにモルティさがわかりやすい一杯でした。

ウイスキーあれこれスクラップ20200914号

ウイスキー関連ニュース

漫画「ベルセルク」がウイスキーとコラボ!

whiskymew.jp

おなじみ「ウイスキーミュウ」が新たにお送りするのは漫画「ベルセルク」とのコラボボトル。主人公であるガッツのラベルと、ガッツとグリフィスの2人をあしらったラベルが発売されます。


ガッツラベルの方はベン・ネヴィス1996(23年熟成)、ガッツ&グリフィスラベルの方はシークレットスペイサイド1993(26年熟成)となっているようです。お値段も2万5千円前後なので手を出せないこともないかも・・・・。

余談ですが、漫画「ベルセルク」の開始は「月刊アニマルハウス1989年10月号」からとのことなので、上記ボトルの樽詰めよりも漫画の方が先に生まれていることになりますね。

ウイスキーミュウ1周年記念のオンラインセミナーもやるようなので、気になる方はどうぞ。

whiskymew.jp

ゴードン&マクファイルが「The Last Cask」シリーズを発表!

thewhiskeywash.com

ゴードン&マクファイルは1895年創業のインディペンデントボトラーです。
今年2020年、創業125周年記念ということでかなりのレアものが「The Last Cask」シリーズとして提供されます。

第一弾はコールバーン蒸留所。スペイサイドにあった蒸留所で、現在は閉鎖されています。 コールバーン | 蒸溜所一覧 | SMWS

現在のところ363本のみが発売される予定で、アルコール度数は62.4%、価格は1500ポンド(約2,000米ドル)です。

ジェムソンの日本限定ボトルが発売!

prtimes.jp

2018年から続く日本限定ボトルのシリーズ第二弾です。
前回のラベルとくらべて「東京」や「ジェムソン」などの文字があり、より日本を意識したデザインになっています。
お値段もお手頃2千円ちょっと。ラベルのようにみんなでワイワイ飲める日が早く来ると良いですね。

2018年のボトルはこんなのでした。↓
ジェムソン ジャパン リミテッド 2018 数量限定発売 - お知らせ - ペルノ・リカール・ジャパン

最近飲んだもの

土屋守テイスティングセミナー2020【第9回】

f:id:gashirar:20200914194708j:plain

飲んだ銘柄は下記の通り。

どれも美味しかったのですが、「アイリッシュシングルモルト2002 16yo」は非常にトロピカルでまた飲みたくなる逸品でした。蒸留所自体は非公開なのですが、そこは土屋守氏による解説でほぼほぼ明らかに・・・非常に勉強になるセミナーなので、気になる方は是非。

もう一つはウイスキーではないのですが「トンプソンブラザーズ ハンプデン2000 17年 for bar tre」が非常に良かった!
自分はもともとラムはあまり飲まないのですが、これは美味い。

国内138本限定ということでほぼ出回ってないのですが、もしあったら1本欲しい。
甘い香りだけでなく、どこか硫黄っぽいというか危険な薬品的な香りが自分好みでした。
参加者の方が「ガソリンのようで自分には合わなかった」とおっしゃっていたのですが、確かにかなり人を選ぶ味わいです。

ウイスキーあれこれスクラップ20200906号

ウイスキー関連ニュース

2020年上半期ウリドキ買取高価査定ランキング、トップ10のうち9種がウイスキー

prtimes.jp

詳しいランキングは上記サイトへどうぞ。
内訳ですがほとんどジャパニーズウイスキーですね。マッカラン25年が結構な値段になってますが、現行品でこの値段はいかなさそうなのでオールドボトルでしょうか。

3位にランキングされている「エイジ・アンノウン」は初耳だったのですが、サントリーの初代社長で2代目マスターブレンダーの佐治敬三氏の勲一等瑞宝章を受章した際の祝賀パーティで配布されたもののようです。

くりりん氏のテイスティングレビューはこちら。

whiskywarehouse.blog.jp

ディアジオ スペシャルリリース2020発売!

www.whisky.com

「Rare by Nature(レア・バイ・ネイチャー)」シリーズはどのボトルもカスクストレングス。より重厚な味わいがたのしめそうです。

ラインナップはこちら。(赤字は前回からの追加銘柄、すでにある銘柄もスペックが変わっていたりします。)

prtimes.jp

前回のリリースでは下記のラインナップでした。

サントリー山崎の構成原酒シリーズ5種、11月4日発売!

CROSSROAD LABさまのYoutubeをどうぞ。 ↓↓↓

www.youtube.com

最近飲んだもの

アスタモリス Japan Tour 2019 ベンリアック10年(2008)

Asta Morris Japan Tour 2019 Six Bars Joint Bottle Benriach 2008 10yo ex-Bourbon Rasta Morris Rum finish

f:id:gashirar:20200906183028j:plain

ベルギーの新興ボトラーである「アスタモリス」と日本国内の下記の6つのバーのジョイントボトルです。(ボトル裏時計回りの順番)

  • whisky Bar Shanty Shack
  • The Bar Tirtha
  • Scottish Gastro Pub wyvern
  • c-shell
  • BAR KAGE
  • BAR BARNS

このアスタモリスはラムも取り扱っており、その名前が「ラスタモリス」。このボトルのフィニッシュで利用されています。
ラムカスク由来の甘くねっとりとした濃厚な香り。まだ開けたばかりとのことですが、もう少し時間がたってくるとまた変わった味わいになりそうで楽しみなボトルでした。

小ネタ

楽天市場商品検索APIをつかって遊ぶ

楽天市場検索APIをつかってウイスキーの更新情報をすぐに見られるページを作ったり。

楽天ウェブサービス: 楽天商品検索API(version:2017-07-06) | API一覧

f:id:gashirar:20200906184207j:plain

APIに投げるときに値段であったりNGワードであったりではじいたりしていますが、「〇〇12本入り30,000円!」とかだとはじけないもどかしさ。スタンダードなボトルも見飽きているので、上手いことフィルタリングしてボトラーズのみにするとかやりたいですね。
あと楽天市場のWebでは「新着順」で並び替えできるのですが、APIだと上手くできなさそうな雰囲気。

Yahoo ショッピングとかも統合してまるっと眺められると良い感じです。今後のTODO。

コマンドラインからDellのディスプレイの入力切替をする

はじめに

家の作業環境はこんな感じです。

f:id:gashirar:20200902191410j:plain

もともと仕事をする際は左のEIZO端末にのみ接続しており、切り替えについてはEIZOのディスプレイについてくるリモコンで行っていました。
のですが、左側を向きつつ仕事するにはキーボードの場所だったり腕を置くスペースだったりが微妙なので真ん中のDELLのPCにもつなぐことに。

DELL U2415はディスプレイ本体の切り替えボタンを4回もタッチしないといけないので非常にめんどくさい。ソフトウェア側でコントロールできないかな?というのが本記事の主旨です。

Dell Display Manager(GUI)

DELLから提供されている「Dell Display Manager」を利用します。

f:id:gashirar:20200902220022p:plain

ググってみるとモノによっては「Input Manager」のタブがあるのでそこからできそうなのですが、U2415では利用できなさそうです。 そこで、Dell Display Managerのバイナリファイルを利用してコマンドラインから切り替えることにします。

Dell Display Manager(CUI)

インストール先のディレクトリにddm.exeがあるはずなので、それを利用しましょう。
自分の場合は下記のコマンドを記載したbatファイルを用意しておいて、ランチャソフトからすぐに起動できるようにしました。

"C:\Program Files (x86)\Dell\Dell Display Manager\ddm.exe" /SetActiveInput HDMI1

インプットの指定について、疎通確認したのはHDMI1HDMI2のみですがDPVGAも使えるみたいです。