Posts for: #Bizpy

バーで会食

4時に寝て10時に起きた。昨日は体調悪くて夕方仮眠して、体調よくなった22時頃から作業を再開したので3時ぐらいまでやってた。

ストレッチ

今週もあまりストレッチができなかったものの、今日の開脚幅は開始前172cmで、ストレッチ後170cmだった。特別なことは何もしてないのだけど、数値がよくなった。開脚の仕方によって3cmぐらいは変わってきたりするのかな。開始前に測ったときに172cmになった理由もよくわからなかった。太もも後ろの張りは先週よりよくなっていたものの、腰の疲労は溜まっていて毎週毎週コンディションが違うなというのを実感する。

会員制バーでふりかえり

先日 予約した会員制バー へ行ってきた。バーとか連れられてしか行ったことないので慣れる意図もある。bizpy の機械学習勉強会 のふりかえりも兼ねてわたなべさんと行ってきた。ビジネスパーソンという対象者の属性や前提知識などを確認したり、コンテンツの細分化や進め方、次回の予定など幅広くわいわいやってた。

バーについては思ったより店内は広くて10席ほどのカウンターのみだけど、幅広の椅子が置かれているのでパーソナルスペースが広くてゆったり過ごせる空間な気がした。19時に行ったら他のお客さんは誰もいなくて21時までいて誰も他のお客さんは来なかった。貸し切りみたいな感じだった。オミクロン株が流行も関係しているのだろう。うちらにしたら他のお客さんがいないから感染リスクが減ってよかったと思う。コース料理を頼んでいた。一品一品凝った感じの料理で接待にはちょうどよい。普通の晩ご飯に食べるにはお洒落過ぎて私には無用のものだと思う。量がたくさんあるわけでもないけど、1品ずつ出てきて2時間かけて食べるので割とお腹はいっぱいになって満足した。それなりの値段もするので当然おいしかった。

最初のフォロワー

0時に寝て4時に起きた。1時間ほどだらだらして1時間ほどドラクエタクトして6時半にバッチの初動監視をしてた。

bizpy 勉強会

Python で機械学習をやってみる勉強会 を開催した。わたなべさんに講師を務めていただいた。スタッフが2人いると、1人は勉強会が円滑にまわるようにサポートに注力できる。1人だと、講師として説明するのに精一杯で質問を拾い上げたり、わかりにくい説明を補足したりするといったことがリソース制約上できない。今回は私がサポート役だったので随時、質問をしたりしていた。

今回の勉強会は質問がたくさん出た。いつもは1-2人が数個といった回数なのに、今回は5-6人から十数個の質問がでて、口頭でもいくつものやり取りが発生した。あとで振り返って考えると、おそらくこれは私が質問をぽんぽんしていたからだと考えられる。

TED に デレク・シヴァーズ 「社会運動はどうやって起こすか」 がある。最初のフォロワーが重要という話が出てくる。静かな勉強会で最初に質問するのは勇気がいる。質問して他の人の邪魔にならないか?講師から質問を嫌がられないか?質問が的外れだったら恥をかかないか?など、最初に質問する人が躊躇する理由はたくさんある。私が簡単な質問や的はずれな質問、講義をぽんぽん止めているのをみているうちに、そういうことをやっても大丈夫な勉強会であることが参加者へ自然と伝わる。その結果として参加者から多くの質問が出るような勉強会になったのではないかと考えられる。

質問が多くでる=コミュニケーションが活発だとコミュニティの価値も上がると思う。今後もサポート体制のようなものはうまく仕組み化して勉強会に取り入れていきたい。

スクラム本を読了

0時に寝て6時に起きてだらだらしてて8時に起き上がった。

ストレッチ

今週もお仕事に注力してた。ストレッチは2-3日/週かな。普通ぐらいの頻度。夜は寒くなって外に出掛けるのが億劫で1日ウォーキングしたかなぐらい。今日の開脚幅は開始前169cmで、ストレッチ後170cmで、久しぶりに170cm台に戻した。いい感じ。右股関節の不可動領域がよくなっているのが実感できるようになってきているので調子はよさそう。今日は全体的に右半身 (太もも後ろ、腰、大胸筋) と張りがあって疲労もやや溜まってそうに思えた。基本的に週末もなにかしら作業していて疲労が蓄積していないのは毎週のストレッチの効果も大きいと考えている。

次の bizpy 勉強会

1月の bizpy 勉強会のイベント、Python で機械学習をやってみる勉強会 を公開した。次回はわたなべさんに講師をやってもらう。このイベントページも作っていただいた。運営が2人になったのでお互いの忙しいときは分担しながらコミュニティを運営していける。本当にありがたい。わたなべさんが担当している間に私も次のネタの下調べや仕込みをする余裕がもてる。メタバースの勉強会やってもいいなとは考えているけど、私だけではコンテンツが弱くて、よそから詳しい人を招いてこないといけない。どうしたものか。

アジャイル開発とスクラム 第2版

読了した。全12章の後にもコラムと対談があって、この内容も読み応えがあっていくつも示唆を与えられるものだった。

  • コラム 野中理論とスクラム
  • スペシャルトーク 野中氏と平鍋氏の対談
    • イノベーションに必要なのは、対話を通じて共振・共感・共鳴する実践知リーダーシップであり、それがスクラムの心だ
  • おわりに

12章で出てきた実践知について、実践知とは何か、実践知リーダーシップとはどういうことかというのが対談の中でも繰り返し出てきてその理解が深まった。私の中では暗黙知と実践知の境界が曖昧だったが、暗黙知と形式知を行ったり来たりすること、そして身体性を伴っているというのが実践知であること。そこには「もの」や「こと」の目に見えない関係性を洞察しながら判断し、本質を考え抜く知力が必要であると述べられていた。昔は 知行合一 と言ったらしいが、90年代以降の日本は分析過多、計画過多、コンプライアンス過多になってしまったという。また時間のあるときに所感をまとめようと思う。

師走入り

1時から1時間ほど仮眠をとって2時から4時過ぎまで作業して帰ってお風呂に入ってそのまま6時から 【三宮.dev オンライン】リモート朝活もくもく会 の朝活に参加した。30分ほど雑談して眠くなって7時過ぎから9時前まで寝てた。

dapr の pubsub の dead letter サポート

お仕事で dapr を触っている。pubsub で dead letter queue の仕組みを導入しようとしているが、PubSub’s DeadLetter Topic #2217 によると v1.6 (2022年1月20日リリース予定) のマイルストーンになっている。本当にその予定ならそろそろベータ版が実装されていて、開発ブランチあったらテストしようかと考えていた。調べてたら rabbitmq はすでに v1.5 で dead letter のサポートがマージされているのを発見した。

たまたま、いま使っている pubsub も rabbitmq だった。ドキュメントをみたら確かにその設定が追加されている。

dapr RabbitMQ

FieldRequiredDetailsExample
enableDeadLetterNEnable forwarding Messages that cannot be handled to a dead-letter topic. Defaults to “false”“true”, “false”
maxLenNThe maximum number of messages of a queue and its dead letter queue (if dead letter enabled). If both maxLen and maxLenBytes are set then both will apply; whichever limit is hit first will be enforced. Defaults to no limit.“1000”
maxLenBytesNMaximum length in bytes of a queue and its dead letter queue (if dead letter enabled). If both maxLen and maxLenBytes are set then both will apply; whichever limit is hit first will be enforced. Defaults to no limit.“1048576”

enableDeadLetter=true に設定して、適当にエラーが発生しそうなリクエストを作って dead letter にメッセージが入るかどうかを検証してた。ひとまず dead letter にメッセージが入ること自体は確認できた。

bizpy 勉強会

Python で Slack のインテグレーションをやってみる勉強会 #3 を開催した。月曜日から2時間もあればできる資料作成をだらだら先送りしていて夜中に作った。なんか体調を崩しているのかもしれない。たまたま勉強会の前にせらさんから激励のコメントをいただいて嬉しかった。

今日の分も含めコンテンツ拝見しましたが、素晴らしいですね

私見だけど、slack インテグレーションで調べものをしているとせらさんの記事や issue のやり取りをみかけることが多い。twitter で slack インテグレーションに関してつぶやくと100%せらさんからレスポンスがある (個人の経験談) 。過去に私は外資の ISV で働きたいと思って活動したこともあったけど、せらさんをみていて自分のレベルでは無理だったなと得心がいった。なにがすごいって、bizpy の勉強会のようなところにもわざわざやってきて、講師にコメントしたりアドバイスしてくれるんだからね。

2ヶ月に渡り、slack インテグレーションのチュートリアルレベルの記事を実際に設定してみて、サンプルコード書いてみて、動かしてみて、slack でどんなことができそうかの理解を深めることができた。今回の内容はビジネスパーソン向けではなかったのでちょっと敷居が高かったかもしれないが、全3回でやり切ることができてよかった。終わってから運営に新たにわたなべさんが加わったことを参加者に紹介しつつ、次回の企画について雑談していた。次回はわたなべさんから機械学習入門のような勉強会をしてもらうことに決まった。

slack ペイロードの response_url にはまった

1時に寝て8時に起きた。昨日は喋り倒して疲れてよく眠れた。午前中は溜まった日記を書き殴って、お仕事でやっているカスタム github actions で気になったコードを修正して、午後から bizpy の勉強会の準備を始めた。なんか気乗りせずにだらだらやって最終的には出来上がった。たいていだらだらやるときは頭の中ではもう出来上がってて集中したら2-3時間でできるのを脳が把握していて、まだ時間に余裕があるから怠けるみたいなときがある。そういうときは作業やめて散歩に出掛けるようにしている。

bizpy 勉強会の資料作り

次の Python で Slack のインテグレーションをやってみる勉強会 #3 のサンプルコードの実装をしていた。内容はだいたい次の通り。あとは資料をまとめるだけ。

  • slash command の設定と実装
  • ephemeral メッセージ (本人だけみえるメッセージ) の実装
  • block kit でモーダルダイアログに入力した情報を使ってチャットに書き込む

たまたまモーダルダイアログを取り上げただけなんだけど、モーダルダイアログを submit したときにチャットに書き込むのは、そのままではできなくて、なんらかの特別な処理が必要になって、そこにはまってた。response_url の扱いはわりとややこしいみたい。

低空飛行

3時に寝て7時半に起きた。昨日2時まで呑んだくれてたので水曜日の朝活はお休み。完全に忘れてたし寝坊した。やや2日酔いでしんどかったけど、朝にはちゃんと起きれたので体調はよい。お仕事では会議体の見直しがあって、私が必要な会議に invite されてなくてバタバタしてた。

bizpy 勉強会

Python で Slack のインテグレーションをやってみる勉強会 #2 を開催した。10人ほど参加してくれた。資料は作ってあったし、内容も難しくないものだったので管理画面の設定とコードをみながら1時間ほどで説明して、30分ほど質疑応答や雑談をしながら8時半には勉強会を終えた。前日の睡眠不足でしんどかったので早く終えて帰りたかったのもある。あと一回 Block Kit の開発をやって slack インテグレーションの勉強会は終えようと思う。次は12月1日なので年内はそれで終わりでいいかな。いまのうちに忘年会やりたい気持ちがあるけど、神戸だと人が集まらんやろなぁ。

普通の休日の翌日

5時に寝て10時に起きた。昨日は夕方に2-3時間寝てたのでその分、夜に調べものをしていた。休みたい気持ちもあるけど、調べるものが多過ぎて全然時間が足りない。

bizpy 勉強会の資料作り

昨日 の続き。昨日サンプルコードを実装したので、その設定や要点を 資料 に作成した。現時点で Python で Slack のインテグレーションをやってみる勉強会 #2 の参加者は10人。連続シリーズは回を重ねるごとに減っていくものなのでこんなもんかな。あともう1回やったら終わりにする。

udemy: Kubernetes入門

友だちから udemy の k8s のコースがよいと聞いたんだけど、そのコースはいまは提供されていなくて、せっかくなので適当に検索してヒットした Kubernetes入門 を受講することに決めた。本当は英語の本格的なコースを受講した方がよいのだろうけど、余裕のあるときはそれでいいけど、いま数日で概要を把握して使えるようにしたいので日本語のコースにしてみた。

昨日インストールした minikube のクラスターを使って「Kubernetes入門」のセクション1からセクション5までやった。だいたい半分ぐらい。所感としては、全く何も知らない人には要点をかいつまんで教えてくれるのと、最初に覚えるとよい基本的な CLI のコマンドとその振る舞いや設定を紹介してくれるのでよかった。初めて k8s に挑戦する自分にとってはちょうどよいレベル感だった。全体像の概念を捉えてコンテキストに沿って順番にハンズオン形式で学習していくスタイル。nakamasato/kubernetes-basics を使って自分でも CLI でコマンドを打ちながら進めてみた。yaml ファイルを定義するのもこれはこれで面倒だけど、この辺は慣れの問題かな?とも思う。いくつか学んだことを整理しておく。

セクション1 Introduction

k8s には2つのコンポーネントがあり、これを k8s クラスターと呼んでいる。

  • Control Plane (API サーバー)
  • 複数の Worker (Kubelet)

yaml で設定する Desired State (理想状態) と呼ばれる設定が登録されると、Control Plane の API サーバーと Worker の kubelet が通信してそれを実現しようとする。pod とは k8s のデプロイの最小単位となる。コンテナ、ポート、レプリカ数などを設定する。pod をそれぞれの Worker にデプロイしたり、Worker がダウンしたときに別の Worker で起動させたりする。

セクション2 Kubernets 概要

k8s はコンテナ化したアプリケーションのデプロイ、スケーリング、管理を行うためのオープンソースのコンテナオーケストレーションシステムである。

  • コンテナ
    • 独立した環境でアプリケーションを実行する仕組み
    • コンテナの実態はプロセス
    • Kernel Namespaces を利用し、プロセスID、ネットワークインターフェース、リソースなどを分離してコンテナ間で干渉しない
    • ホストマシンへの依存度を最小化してアプリケーションをどこでも実行可能にする
      • 従来のやり方の最大の違いはライブラリがホストマシンにインストールされるのではなく、コンテナの内部にインストールされる
  • オーケストレーション
    • デプロイ、スケーリング、管理などの仕組み

1つのアプリケーションは複数のマシン上で動かすことで可用性を高めたいが、コンテナを動かすために考えることが増えていくと管理コストも増えていく。コンテナオーケストレーション機能により次のようなシステム管理者が行っていたことが自動化される。

  • デプロイメント
  • スケジューリング
  • オートスケーリング
    • 負荷に応じてコンテナ数やマシン数を増減させる
  • ネットワーク
  • リソースマネジメント
  • セキュリティ
    • ネットワークポリシーやリソースの権限定義

k8s クラスターの構造は次になる。

  • Control Plane
    • api: kubelet と通信するサーバー
    • etcd: 設定などを格納するキーバリューストア
    • shed: kube スケジューラー
    • c-m: コントロールマネージャー
    • c-c-m: クラウドプロバイダと api 連携する
      • ローカルで使うときは必要ない
  • Worker ノードはコンテナランタイムをいインストールしておく必要がある
    • kubelet は Control Plane と通信するためのエージェントとして動作する

一番需要なこととして、k8s は理想状態と現実状態を比較して、理想状態に近づけようとする。app.yaml の理想状態を kubectl を用いて api サーバーを介して etcd に格納する。現実状態は kubelet から api サーバーを介して etcd に格納される。c-m は理想状態と現実状態のチェックを行い、異なっていれば理想状態に近づけることをしていく。

セクション4 kubectl

minikube で最初に起動しているのは Control Plane を起動していることが理解できた。

$ minikube start
$ kubectl config current-context
minikube

同時に ~/.kube/config に kubectl の設定も追加される。minikube という名前でクラスター、ユーザー、コンテキストが設定される。

リソース一覧の確認。

$ kubectl api-resources

出力フォーマットも様々。例えば、デフォルトの表示は次になる。

$ kubectl get node
NAME       STATUS   ROLES                  AGE     VERSION
minikube   Ready    control-plane,master   7m21s   v1.22.2

$ kubectl get node -o wide
NAME       STATUS   ROLES                  AGE     VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
minikube   Ready    control-plane,master   8m38s   v1.22.2   192.168.49.2   <none>        Ubuntu 20.04.2 LTS   5.11.0-38-generic   docker://20.10.8

より詳細な情報をそれぞれのフォーマットで表示する。

$ kubectl get node -o json
$ kubectl get node -o yaml

namespace を確認する。

$ kubectl get namespace
NAME              STATUS   AGE
default           Active   10m
kube-node-lease   Active   10m
kube-public       Active   10m
kube-system       Active   10m

namespace を指定して pod 一覧を取得する。

$ kubectl get pod --namespace kube-system
NAME                               READY   STATUS    RESTARTS      AGE
coredns-78fcd69978-qxqbn           1/1     Running   0             11m
etcd-minikube                      1/1     Running   0             11m
kube-apiserver-minikube            1/1     Running   0             11m
kube-controller-manager-minikube   1/1     Running   0             11m
kube-proxy-g55hg                   1/1     Running   0             11m
kube-scheduler-minikube            1/1     Running   0             11m
storage-provisioner                1/1     Running   1 (10m ago)   11m

グローバルな CLI のオプションを確認する。

$ kubectl options

ノードの詳細を表示する。

$ kubectl describe node

describe は名前の接頭辞を指定できるので namespace ならこんな感じに実行できる。

$ kubectl describe namespace kube-

セクション5 Kubernetes リソース

pod とは k8s 上のデプロイの最小単位である。

  • 1つまたは複数のコンテナをもつ
  • ネットワークやストレージを共有リソースとしてもつ
  • コンテナの実行方法に関する仕様をもつ

pod が使えなくなった場合に他のノードにデプロイされることもある。1つのアプリケーションを複数の pod でデプロイすることが多い。なるべく複数のアプリケーションを1つの pod に入れない。個別の pod を直接操作しない。

共有コンテキスト

  • 同一 pod 内のコンテナは同じストレージにアクセスできる
  • 同一 pod 内のコンテナは ip アドレスとポートを含むネットワーク名前空間を共有する

k8s オブジェクト

  • クラスタの状態を表現する
  • 2つのフィールドをもつ
    • spec: 理想状態 (desired status)
    • status: 現実状態 (current status)

pod の作成は k8s オブジェクトを作成している。オブジェクト作成時の必須フィールドが4つある。

  • apiVersion
  • kind
  • metadata
  • spec

namespace は同一クラスター上で複数の仮想クラスターの動作をサポートする。

  • 仮想クラスターとは、物理的には同じマシンで動いているかもしれないが、仮想的に環境を分離している
    • 1つのクラスターを論理的にわける
    • チームや部署ごとにわけて使い分けたりすることも多い

namespace を使うメリットは次になる。

  • pod やコンテナのリソースの範囲設定
  • namespace 全体の総リソース制限
  • 権限管理

初期の namespace として4つあるが、初心者は最初の2つだけをまず覚えておく。

  • default:
  • kube-system:
  • kube-public:
  • kube-node-lease

namespace と cluster の違い。

  • Namespace-scoped リソース
    • namespace に属しているリソース
  • Cluster-scoped リソース
    • クラスター全体で使われるもの

次のコマンドで確認できる。

$ kubectl api-resources --namespaced=true 

namespace の作成

$ kubectl create namespace my-namespace

ワークロードリソースとは複数の pod を作成・管理するためのリソース。ワークロードリソースは pod テンプレートを使って pod を作成する。

  • ReplicaSet
    • 常に指定したレプリカ数の pod を保つ
  • Deployment
    • ローリングアップデートやロールバックなどのアップデート機能を提供
    • ReplicaSet のロールアウト
    • 不安定な場合の前のバージョンへロールバック
    • 使用頻度が高い
      • ほとんどのアプリケーションは Deployment で管理
  • Secret
    • 機密情報を保存・管理し、Pod から参照可能
    • 主な使用方法としてコンテナの環境変数の設定
      • アプリケーションの DB のパスワードなどに使う
  • Service
    • pod の集合を抽象化して公開する
      • pod の集合に対する DNS 名
      • pod の集合に対する負荷分散

bizpy 再開

2時に寝て6時に起きた。前日の夜にウォーキングしたせいか、よく眠れた。朝活を終えてから朝ご飯を作って食べてそのままオフィスに出社した。6時起きを日課にした方が生活のリズムがよい。夕方に眠くなって1時間ほど昼寝した。

朝活: ミクロ経済学入門の入門

【三宮.dev オンライン】リモート朝活もくもく会 で第4章の供給曲線を読んだ。需要曲線の逆からの視点なので考え方は同じで図の形が異なる。用語がいくつか出てきたのでまとめる。

  • 収穫逓減 (しゅうかくていげん): 製品をより多く生産するのにかかる経費が増大していくこと
    • 生産活動において2倍の生産量を生み出すには2倍以上の経費がかかる
  • 費用関数: 生産量と費用との関係をあらわす
  • 限界費用: 追加的に1単位生産する費用
    • 3個を生産する費用は、1個目の限界費用 + 2個目の限界費用 + 3個目の限界費用
      • 個数が増えるごとに費用は高くなっていく
    • 費用を図示するときは限界費用に分解した方が視覚的にわかりやすい
  • 限界費用逓増: 生産するごとに限界費用が高まっていくこと

」という漢字は「つぎつぎ」や「だんだん」という意味をもつ。

  • プライステイカー: 自分の生産量が価格に影響を与えられない
    • 減産により希少価値を高め価格を吊り上げる市場操作ができない
  • 独占企業: プライステイカーの反対。
  • 利潤: 売上 - 経費
  • 最適解: 利潤を最大化する生産量
    • あと1個追加して生産すると利益がマイナスになるところ
  • 生産者余剰: すべての企業の利潤の和
  • 供給曲線: すべての企業の限界費用をヨコに足し合わせた曲線

データ指向アプリケーションデザイン

昨日の続き。8.4 を読んで8章分散システムの問題を読み終えた。全体としても学びになったけれど、とくに 8.3 信頼性の低いクロックの節が全く開発・運用で意識したことがなかったので私にとっては学びになった。

分散システムにおいて発生する厄介な問題がある。

  • ネットワーク経由でパケットを送信しようとした場合、そのパケットはロストしたり、どれほど遅延するか分からない。同様に、レスポンスもロストしたり遅延したりするので、レスポンスを受け取れなかった場合には元々のメッセージが到達したかどうかも分からない

  • ノードのクロックは他のノードと大きくずれているかもしれない(できる限りの努力をして NTP をセットアップしたとしても)。クロックは急に進んだり戻ったりするかもしれず、たいていはクロックの誤差をうまく計る方法がないので、クロックに依存するのは危険

  • プロセスは処理中にいつどれほどの長さ一時停止するかもしれず(おそらくはstop-the-worldガベージコレクタのため)、他のノードから落ちていると見なされた後に自身に一時停止があったことを理解しないままに復活するかもしれない。

こういった 部分障害 が生じうるのが分散システムの特徴と言える。ソフトウェアが他のノードが関わる何かをしようとした場合、それは時おり失敗したり、ランダムに速度が落ちたり、まったくレスポンスが返されない(そして最終的にはタイムアウトする)といった可能性がある。分散システムでは、部分障害への耐性をソフトウェアに組み込み、システムの構成要素が一部破損していてもシステム全体としては機能し続けられるようにする。

フォールトに耐えるための最初のステップはフォールトを 検出 することだが、それさえも難しい。多くのシステムは、ノードに障害が生じていることを検出する正確な仕組みを持たないので、ほとんどの分散アルゴリズムはリモートノードが生きているかどうかを判断するのにタイムアウトに頼る。しかし、タイムアウトはネットワークの障害とノードの障害を区別できず、ネットワークの遅延変動のために間違ってノードがクラッシュしていると誤検知することもある。弱っているものの落ちてはいないノードは、きれいに落ちているノードよりもさらに扱いが難しくなる可能性がある。

フォールトが検出されたとして、システムがそれに耐えられるようにすることも簡単ではない。マシン間にはグローバルな変数も、共有メモリも、共通の情報やその他何らかの共有された状態もない。ノードは現在の時刻についてさえ合意できず、ましてやもっと重大なことに合意することなどできない。あるノードから他のノードへ情報を流せる唯一の方法は、その情報を信頼できないネットワークを通じて送ることだけである。重要な判断は単一のノードだけで安全に下すことができないので、他のノードの助けを得てクオラムが合意に至るようにするためのプロトコルが必要となる。

同じ操作をすれば決まって同じ結果を返してくれるような、単一コンピュータにおける理想化された数学的な完全さの中でソフトウェアを書くのに慣れていると、分散システムの雑然とした物理的な現実への移行はちょっとしたショックを伴う。一方、分散システムのエンジニアは、しばしば単一のコンピュータ上で解決できる問題を簡単なものだと見なすが、実際のところ今日では単一のコンピュータがこなせる仕事量はかなりのものになっている。単一のマシンでシンプルにことを済ませられるなら、概してそうする価値はある。

分散システムを利用する理由はスケーラビリティだけではない。耐障害性や低レイテンシ(地理的にユーザーの近くにデータを置けることによる)も同様に重要な目標であり、こういったことは単一ノードでは実現できない。本章ではネットワーク、クロック、プロセスの信頼性の低さが避けがたい自然の法則なのかも調べた。安全ではなく、クリティカルではないシステムの多くでは、高価な高信頼性よりも安価な低信頼性が選択される。また、信頼性の高いコンポーネントを前提としているスーパーコンピュータも取り上げました。スーパーコンピュータはその前提が故に、コンポーネントに障害が生じてしまった場合には完全に停止させて再起動することになる。これに対し、分散システムはサービスレベルでは中断することなくいつまでも動作し続けられる。これは、少なくとも理論上はすべてのフォールトやメンテナンスはノードレベルで処理できるためである。

お昼ご飯

気分でスーパー寄って買いものして家に帰り、お昼ご飯を作って食べた。前に適当に作った かぼちゃの煮物 がおいしかったので再挑戦してみた。今度は圧力鍋を使っていろいろ具材を入れてみた。過去に作っておいしかった料理のレシピを evernote に書いたりしていたけど、もういまは書いてないので気が向いたら日記に書くようにする。

材料

  • A
    • 水 900cc
    • めんつゆ 100c
    • 醤油 適量
  • B
    • かぼちゃ 1/4切れ
    • なす 3個
    • にんじん 2本
    • 玉ねぎ 1個
    • しめじ 1パック
  • C
    • 卵 2個
    • 豆苗
    • せみ餃子

作り方

  1. 圧力鍋に A を入れて火にかける
  2. B の野菜を切りながら圧力鍋に入れていく
  3. 圧力鍋に B をすべて入れたら圧をかける (高圧30秒)
  4. 圧が下がったら蓋をあけて C を入れる
  5. C に火が通るまで2分ほど煮込む

所感

圧力が強過ぎたのか、かぼちゃが煮汁に溶け出してしまって原形がなくなってしまった。スープとして飲んでもおいしいけれども、水を入れ過ぎたのかもしれない。肉の代わりに餃子を使ってみた。水餃子っぽくなるので焼き餃子で油使うよりヘルシーな気持ちになっておいしい。

bizpy 勉強会

Python で Slack のインテグレーションをやってみる勉強会 #1 を開催した。半年以上開催してなかったので億劫になってしまっていたけど、再開できてよかった。10名ほどが参加してくれた。用意したコンテンツを話し終えたら8時半ぐらいで時間もちょうどよかった。初参加者も数人いた。slack インテグレーションの調査も兼ねてあと2-3回は集中的にやっていきたい。

BizPy 再始動

BizPy 再始動

昨日は晩ご飯食べてからのんびりしていた。寝て起きての繰り返しだったので何時に寝たのかよくわからない。夜、本を読もうと思っていたのにダラダラ過ごしてしまった。朝は7時半に起きた。朝起きたら Python で Unicode 正規化 NFC/NFD の文字列を扱う がはてブでホットエントリ化してた。昨日、書評を書いたからその記事かと期待したけど、なぜか2年ほど前に書いた古い記事だった。なんかがっかり。そして、その理由は全くわからない。1日経って夜の時点ではてブが82個ついている。昔は10個もついたら嬉しかったものだけど、いまは100個ぐらいついてもなんとも思わない。

fin-pyコードリーディング会に発表準備

fin-pyコードリーディング会#4 に参加することにした。過去にオブジェクトストレージの開発に関わっていたからデータストアやストレージに関することは興味がある。たまたまツールの store.py を題材にしていたので読んでしまった。簡単にコードを読んで気になったところをイベントの hackmd に記載した。やっていることの詳細をよくわかっていないので、コードレビューみたいになってしまった。

BizPy のコミュニティ活動を再開

前にやってたお仕事がうまくいかなくて他のことに時間を費やす余裕がなくてお休みしてた。本当はもっと早く再開してもよかったんだけど、新しいことに挑戦しているときにあまり他のことに注意を取られたくないという考えもあって少し保留していた。新しいことへの活動も一段落して方向性や展望もみえてきたので BizPy も再開することにした。ちょうど Slack のインテグレーションを調べようと思ったところだったので弾みを付ける意図でも都合がよい。複数の意味でタイミングがよかった。また参加者が戻ってきてくれると嬉しい。

プロコンの続き

ネットで話題になったせいか、当事者同士で話し合う場が設けられたという公式発表が行われた。

これ以上、外野がとやかく言う必要はないと思うけど、一方で立場の強い人が有利になってしまうため、運営はハラスメント行為を行った審査員へ然るべき措置をすべきといった意見もみられた。一理あるかもしれないが、そこまでするほどの問題かというのは個人的に思う。タイムラインを眺めていると、ハラスメントを問題視する人は、その背景や経緯や意図はすべて横に置いておいてハラスメント的言動や態度を糾弾する。この人たちと背景も考慮して整理しようとする人たちとは全く議論が噛み合わない。ハラスメントは絶対許すまじという社会の変化や誤った人への行き過ぎたキャンセルカルチャーに私はやや圧倒される。

そう思っていると、私のタイムラインでは「まさかりを投げる」という表現そのものや行為のハラスメントの是非の議論も巻き起こっていた。あまり最近はまさかりを投げるという表現は見かけないんだけど、「マウント禁止」というのをちょくちょくみかける。ハラスメントと根っこは同じで悪気の有無に関係なく発信側が責めを負うようになったんだなと感じる。