Posts for: #2023/07

定例会議のプラクティスとプロダクト

昨日も1時過ぎまで飲んでいて3時に寝て8時に起きて午前中はだらだらしていてお昼からオフィスへ出掛けて行って調べものをしていた。

課題管理の雑談会へ向けての準備

先日の準備 の続き。

先日は私が関心をもっていることの資料を整理し直して先方に提示した。今日は コパイロツト さんのプロダクトの1つである SuperGoodMeetings にアカウント登録していろいろ触っていた。その過程で Project Sprint プラクティカルガイド を読んだりもしていた。

SuperGoodMeetings は Project Sprint という考え方で定例会議をうまくやるためのプロダクトにみえる。アプリケーションの完成度も高いしよく出来ていると思う。私からみたら課題管理システムのサブセットにみえる。会議のアジェンダが個々の issue に相当して詳細に管理できる。ui も最近の課題管理システムのそれに近い。一方でこのプロダクトは開発者向けのツールではないため、このツールだけでシステム開発を管理することは想定していないのではないか?と推測される。その辺りの話しも来週、出張したときに中の人に聞いてみようと思う。

アイディアは移動距離に比例する

23時に寝て2時に起きて5時に起きて7時に起きた。

ストレッチ

旅行へ行ってきてからなぜか首の筋を痛めている。寝違えたわけでもないのに気がついたら急にある筋が痛いなと思うようになった。今日の開脚幅は開始前157cmで、ストレッチ後160cmだった。今週もわりと忙しかったり暑かったりして負荷はまぁまぁ高かった。先週からの疲労を加味するとややバテた。すねの外側の筋、右のおしりの一点、腰の張り、肩から首にかけての張りなど、全身あちこち痛いところいっぱいみたいな状態だった。来週は東京出張でまたバタバタするが、帰ってきたら週末休んでもいいんじゃないかと思うぐらいにはしんどい感じ。

カフーツさん訪問

お昼はずっと作業をしていて、それが一段落した後に17時半ぐらいから ブログJelly Vol.133 に参加してきた。他の参加者はいとうさんとながいさんの2人だった。いとうさんはお仕事が忙しいということでずっとお仕事をされていた。私はながいさんとあーでもないこーでもないといった、いろんな話題の雑談をしてきた。

アイディアは移動距離に比例する

なにかのきっかけでこういう言葉があることを知った。家を持たず、デジタルノマドのように地域に縛られずに移動しながら働く人たちは優位性があるといった話題になった。quora でも同じような Q&A がある。

今回は だいやめ を持っていった。いつも通り翌1時過ぎまで飲んで酔っ払ってしまった。飲み過ぎた。歳のせいか、お酒に弱くなっているので摂生も考慮してもうちょっと控えるようにした方がいいかもしれない。

七夕と願い

23時に寝て2時に起きて6時に起きた。旅行から帰ってきてから最近はこのパターンになってきた。

google のロゴが Tanabata 2023 になっていて七夕だと気付いた。もう私にとって願いというのは健康を祈るぐらいしかない。残された寿命を使い切る前にいまやっていることをやり切りたい、もしくはその結果をみたいと思っていて、そのために必要なことは健康ぐらいかなと。

隔週の雑談

顧問のはらさんと隔週の打ち合わせ。今日の議題はこれら。

他社の社員旅行へ同行してみての所感として学ぶことは多々あった。

  • 強制参加にはしない (断ってもよい)
  • 仕事だけではない人間関係の構築という価値観を大事にしている
  • 上下関係がフラットなので参加者が自由に行動したり話したりできる
  • 経営陣や上司に忖度しないメンバーがいることでフラットな関係性を共有できる
  • チーム単位で行動できるので組織の全体行動を強制される感覚が緩和される

野中郁二郎先生は業務外での暗黙知を共有する「場」づくりが大事だと説いている。会社が危機のときやしんどいお仕事をこなすとき、最後は経営者やリーダーの人生観や価値観がモノを言うという考え方がある。そんなときにこういった価値観の共有は役に立つのかもしれない。「社員旅行」という単語自体が古い価値観をイメージしてネガティブに聞こえる。いまだったらワーケーションと呼ぶ方がよいかもしれない。

過去にスタートアップで働いていたとき、会社が M&A で売却して、私にとってはあまりメリットがなかったので即断で辞めると伝えた。即断できたのは経営者に理念がなかったからというのも大きな要因の1つだといまになって思える。時期の差はあれど、私以外の主要メンバーもその後に全員辞めた。要はそういうこと。

go の generics 勉強会の準備

水曜日から資料を作っている。昨日はほぼまる一日コードレビューをやっていた。午前中の半日を費やしてようやく完成した。この資料は一般の go 勉強会でも使えるなと思ったのでお手伝い先のプロダクト開発に関するところを取り除いた資料を別途公開した。資料の中でその内容を検証するサンプルコードも次のリポジトリで公開している。

コードレビューで1日が終わる日

0時に寝て2時に起きて6時半に起きた。旅行から帰ってきて睡眠の質が上がってきた気がする。

コードレビュー

週明けから毎日ずっとコードレビューをしているわけだけど、今日は scim の id 連携の実装ができたのでそのコードレビューを半日以上やっていた。変更内容は2000行弱ぐらい。以前にも scim の調査 について少し書いた。

担当者は前マイルストーンのときから調査していて、今マイルストーンで初期実装は入れてしまおうという話しを昨日の 1on1 でしていた。また qa レベルのテストは来月末ぐらいでやるので詳細を作り込むよりもまずは大きな機能として入れておきたい。いまマイルストーンの期間を2週間に設定している。調査も含めて実装まで2つのマイルストーンを費やそうとしている。理想的にはどんな機能であっても、メンバーには2週間で完了する粒度で issue を分割して作業できるようになってほしいという狙いがある。

それは過去にどんな新機能を作っていても2週間を超えることはなかったという私の経験則でもある。これは2週間でどんな機能でも完成するという意味ではなく、2週間でマージできないような区切りのつかない機能開発はないという意味だ。機能実装のような issue でマイルストーンをまたぐ開発をしていると、進捗が不透明になったり、開発がダレると私は考えている。ダレるというのは短い期間に集中して開発した方が効率も品質もよいものができるのではないか。記憶の仕組みからは理屈上そうだと言える。開発のメリハリをつけるという働き方に範を示していきたい。

go の generics 勉強会へ向けての準備

0時に寝て6時に起きて7時に起きた。週明けから忙しくて余裕ない。それでもよく眠れていることが幸い。

go の generics 勉強会の準備

今週末の金曜日に勉強会をする想定で作り始めた。generics は難しいのでなかなか本腰を入れて取り組めていなかった。基本的には tenntenn さんの プログラミング言語Go完全入門 15章ジェネリクス(型パラメタ) の資料をベースに、自分で理解できるように調査したり、サンプルコードを書いたり、自分で理解した内容を補足したりして資料を作り始めた。go 1.18 のジェネリクスで導入された概念は次になる。これらのキーワードに関するところをそれぞれ調べることにした。

  • 型パラメーター
  • 型引数
  • インターフェースによる制約 (Type constraint)
  • 型セット (Type sets)

ldap プロトコルの persistent search

0時に寝て5時に起きて6時半に起きた。朝から大鼓方を調べたりしていた。

persistent search あれこれ

ldap プロトコルの文脈でクライアントがサーバーに接続して、エントリーの更新を検出して更新があったエントリーのみを取得することを persistent search (永続検索) と呼ぶ。メッセージキューで言うところの pubsub の consumer に相当する機能。フィルター条件に合致したエントリーのみを取得するという側面では検索と言える。

ietf のワーキンググループに次のような仕様がある。

go-ldap で過去に Add Persistent search control + PersistentSearch() #80 で実装を追加しようとしたのもあったので調べてみた。しかし、この機能に openldap は対応していないようだ。

以前から調べている openldap の syncrepl も persistent search を実現する機能の1つと言える。ldap に詳しくないと用語と機能と実装の切り分けができなくて困惑する。syncrepl はもともとレプリケーションのための仕組みではあるが、pubsub の consumer としても使える。そういうときに syncrepl を使って “persistent search” を行うと言ったりする。このときに先の ietf に提案されている persistent search とはまったく関係ない。だから混乱する。

lopenldap サーバー同士で syncrepl の provider の機能は次の overlay モジュールによって提供される。逆に syncrepl の consumer の機能は openldap の組み込みの機能で提供される。なんらかの歴史的経緯があるのだろう。

overlay syncprov

ldapsearch コマンドで persistent search (syncrepl consumer) を実行するには次のようにする。

$ ldapsearch -x -H "ldap://localhost:389" -b "dc=example,dc=com" -D "cn=Manager,dc=example,dc=com" -w "secret" -E '!sync=rp'

ldap プロトコルの文脈で persistent search を行うといった場合、クライアントから pubsub で言うところの consumer を用意するといった意味だけで、その実装や通信方法はいくつか実現方法があるということを学んだ。

サイトデザイン最終レビュー

19時からデザイナーさんとはらさんと打ち合わせ。少し前に用意してくれた サイトデザインのサンプルページ の最終レビューを行った。全体としては気に入っているので概ね ok なのだけど、詳細の気になったところやデザインの機微のようなところをはらさんと一緒にデザイナーさんとやり取りして共有した。

デザインだけをみてこちらで想定していたことも、デザイナーさんの意見や視点を伺ってみると発見があっておもしろかった。逆に言えば、デザインだけでデザイナーさんの意図を伝えるのはとても難しいということもわかった。背景の説明を受けると論理的だったり合理性があったりするものの、なにも情報がない状態でそのことに気付くのは難しい。これはコードリーディングにおいても同じで、作者に意図の説明を受けながらソースコードを読むと簡単に理解できたりする。そして、デザイナーさんもうちらの意見から考え方を見直すこともあった。ウェブデザインのようなものを1人で完全に気付きを得るのは難しそうだ。

はらさんにレビューに入ってもらっていてとても助かる。私は ui/ux については素人なので、要件やレビューする視点の重要なところにツッコミを入れてくれるので気付くことも多い。私がコードレビューで設計やプログラミングについて指摘しているのも、別の人の視点からみるとこういうみえ方をするんだろうなと思いながら聞いていた。「餅は餅屋」とはよく言った言葉だ。自分がよくわからない分野のお仕事を依頼もしくは話すときは、自分たちの立場でそういった外部の専門家を雇うことの重要性も同時に理解できた。私は課題管理の専門家としてそういうポジションを作っていきたい。

リフレクションにはまった半日

23時に寝て5時に起きて6時半に起きた。ストレッチで伸ばしたせいか、いつもよりよく眠れた。先週は主に旅行へ行っていて非日常でリフレッシュした。今朝は朝ご飯に野菜サラダを作って食べて7時半には家を出れた。

非同期の ldap 検索の api

先日送った go-ldap の pr を完了した。送ったときはチャンネル用いた検索 api だったのだけど、それから設計を議論して非同期検索を主とした api として生まれ変わった。レビューに1ヶ月を要したものの2人のメンバーから approve をもらって無事にマージされた。

この一歩は大きくてこの機能を突破口にうちらの要件に足りない機能を実装していく。プロトコル部分の修正が過去の draft 実装から参考にできるのであれば今週中にはまた pr を送りたい。

mongodb の unmarshal 実装

mongodb-driver での bson の marshal/unmarshal を実装する。mongo-driver/bson に unmarshal について2つの interface が紹介されている。

type Unmarshaler interface {
	UnmarshalBSON([]byte) error
}

type ValueUnmarshaler interface {
	UnmarshalBSONValue(bsontype.Type, []byte) error
}

bson の byte 列を unmarshal するにあたり、構造体そのものには UnmarshalBSON() を、構造体のメンバーには UnmarshalBSONValue() を使う。これでうまくいきそうに思えたのだけど、interface を介したデコード処理で意図した振る舞いにならないことに気付いた。mongodb-driver は decode/unmarshal 処理を reflect を使って実装している。要件の詳細は省く (interface を使いたい背景がある) が、再現コードが次になる。

type MyInterface interface {
	MyFunc() error
}

type MyType struct {
}

func (t *MyType) MyFunc() error {
	return nil
}

var tMyInterface = reflect.TypeOf((*MyInterface)(nil)).Elem()

func some(v reflect.Value) {
	f := v.Convert(tMyInterface).MethodByName("MyFunc")
	fmt.Println("got", f)
	fmt.Println("=========")
}

func main() {
	t1 := &MyType{}
	some(reflect.ValueOf(t1))
	// the zero value of an interface is nil
	var t2 MyInterface
	some(reflect.ValueOf(&t2).Elem())
}

このコードを実行すると次のエラーになる。

panic: reflect: Method on nil interface value

ドキュメントにも interface の nil の値を呼び出すと panic するよと書いてある。

Method returns a function value corresponding to v’s i’th method. The arguments to a Call on the returned function should not include a receiver; the returned function will always use v as the receiver. Method panics if i is out of range or if v is a nil interface value.

https://pkg.go.dev/reflect#Value.Method

敦盛を観てきた

18時半に寝て22時過ぎに起きて、もう今日は無理やと諦めてまた寝て、6時に起きて8時に起きた。車移動の旅の疲れか、いつもよりよく眠れた。

能: 敦盛

13時から 第四回《真花演能会》能『敦盛』カフーツのいとうさんとながいさん と一緒に観に行ってきた。結論から書くと、私にとってはとてもよかった。前に1度能を観た体験 があるのでその前回の体験との相対比較で観ることもできた。前回は能を2つ、狂言を1つ観たことで時間がかかった。今回は狂言と能を1つずつのセットで観た。初心者は観ていて疲れるのでこのぐらいの規模で十分に思えた。

一番よいSS席が8,000円と、前回よりも少し高い価格設定となっている。その価格差からサービスレベルの違いも伺えた。お客さんの入りは会場のキャパシティに対して7割程度といったところかな。

  • スマホとイヤホンで能の解説が聞けるアプリを提供
    • イヤホンをもっていなかったので聞いてないが、、、
  • 朝原さんの解説が丁寧でわかりやすかった
    • この解説もスマホから英語で聞けると話されていた
  • 資料は英語併記で当日のアナウンスも日本語の後に英語で行っていた
  • 詞章 (ししょう) という、能の台本が資料に添付されていた

詞章があることで演者が何を言っているのか把握しやすい。例えば、次のような台詞を能の独特の謡の表現で聞き分けるのは素人にはなかなか難しい。というのは現代語ではないという点と、明確な1文になっていなかったり、単語の区切りがよく分からなかったりするから。次の台詞から「に」「の」とかで終わっている文章があることがわかる。

ワキ: さては其夜の御遊びなりけり城のうちに。さも面白き笛の音の。よせ手の陣まで聞こえしは
シテ詞: それこそさしも敦盛が。最後まで持ちし笛竹の
ワキ: 音も一節を唄ひ遊ぶ

必ずしもこの台詞通りに謡をしているわけでもないことがわかった。少し飛ばしたり、書いていない内容を謳うこともあった。あくまでこれは参考程度のもののようだ。感覚的には8割ぐらい資料の沿って進んでいた気がする。

前回はちょくちょく寝落ちしてしまっていた。今回は詞章をみながら能を観ていたのでずっと集中して観ることができた。詞章ばかり目で追っていると演者の動きをみれないのでそのバランスも大事だと理解できた。本当はこの内容を暗記して観るのが正しいのだろう。寝落ちしたのは中盤の、詞章がなかった地元に住む男との会話の部分だけだった。

後半は囃子方の演奏とシテの演者の舞いが盛り上がっていって、最後の最後は場面が変わって少し落として終わったように思える。そこら辺はよくわからなかったけど、後半の盛り上がりにかけての、蓮生 (熊谷次郎直実) と敦盛との和解の雰囲気が表れていた。敦盛は2番目物の修羅能にカテゴライズされる。このカテゴリは修羅道に落ちた苦しみを描く作品が多い中、敦盛を討った蓮生が供養し、敦盛が成仏していく?ような終わり方になっていてよい結末のような話しになる。内容も後味がよいものだった。

狂言: 雷

能と狂言をセットにして 能楽 と呼ぶ。日記での紹介は前後しているが、現代では狂言を演じてから能をするという順番になるらしい。狂言は20-30分、能は1.5時間程度といった時間配分になる。現代に当てはめると、狂言はコメディ、能はシリアスなドラマといった演目になる。

雷 (神鳴) という狂言をみた。狂言は演劇に近いので詞章がなくてもだいたい雰囲気はわかるし、笑えるところもわかる。腰痛を治してもらった雷神が医者にお礼を求められ、持ち合わせがなかったことから「近日眷属を連れてそなたの住処に落ちて礼をする」と言うが、医者は「それは迷惑でござる。」と言い放った瞬間が一番受けていた気がする。一緒に行ったながいさんは狂言の方がわかりやすくてよいと話されていた。

大鼓方

太鼓 (たいこ) じゃなくて大鼓 (おおつづみ)、漢字が似ているのでたまに間違う。

前回に能を観に行ったときも 谷口正壽 さんが大鼓を演奏されていた。おそらく関西圏で活動されているのだと推測する。前回はパンフレットに囃子方の名前がなかったけれど、今回は囃子方の演者も記載されていたので名前を確認して調べてみた。観終わった後にいとうさんも谷口さんの演奏について言及しているのを聞いて、私も前回初めて聴いたのに囃子方すごいと印象に残ったのは谷口さんの技量の高さによるものだとわかった。素人が聴いていてもこの人は別格のように感じた。ホームページのプロフィールによると昭和54年 (当時10歳) から能楽石井流大鼓方に入門とあるので40年以上のキャリアになる。

谷口さんが大鼓で出演している能を探したら次がヒットした。前に菊慈童 の動画を見返したときも感じたが、臨場感が全然違う。動画だと谷口さんの凄さは霞んでしまう。生で聴いた大鼓と掛け声の聴こえ方とは異なる。

能楽と郷土を知る会

能楽を演じる前に30分ほど予備知識や背景などを解説する時間がある。今回は 朝原広基 さんという能楽研究家が演目の解説を行った。肩書きの通り、当時の時代背景や風習などをとても丁寧に解説してくれてわかりやすかった。

パンフレットに入っていたチラシをみて 能楽と郷土を知る会 というイベントを運営されているようだ。まさに私が関心のある内容なので今度遊びに行ってみようと思う。

ストレッチ

土曜日は旅行へ行っていたので日曜日の夜にストレッチへ。首が痛いとトレーナーさんに伝えたら、いつもはやらない首のストレッチもやってくれた。感謝。体調の悪いところを伝えるとそこもストレッチしてみてくれるのが助かる。車を運転する姿勢はどうしても前傾姿勢になるのと、運転は意識を集中しないとできないことからデスクワークよりも上位の負荷がかかるらしい。神戸から高知まで何時間もかけて運転しているし、移動の時間は車に乗せてもらうことも多かったので全身あちこちに張りがあって、とくに上半身が全般的に硬かった。今日の開脚幅は開始前151cmで、ストレッチ後154cmだった。いつもとは違う状況での計測なので数値は悪化した。

最終日の移動

0時に寝て3時と6時に起きて7時に起きた。まぁまぁ眠れたと思う。

朝食バイキング

昨日はスマホもってなくて写真を撮れなかったが、今日はもってきてちゃんと撮ったよ。朝ご飯がめっちゃよかった。さすが高級旅館。朝からこんな贅沢が許されるのか (言い過ぎ?) という種類の食材とおいしさの朝ごはんだった。私は普段から外食が多いため、食生活がよくない。野菜をたくさんとれることに大きな価値をおく。あとサラダが大好き。いろんな野菜をとれてよかった。写真に写っている10倍ぐらいの食材があって、オムレツのような簡単な料理はシェフにお願いすれば作ってくれるらしい。和と洋の両方の食材があったと思う。地元の特産品もたくさんあった。団体だとみんなどんな朝ご飯をトッピングしているか、どういう組み合わせにしているかをみて次の参考にできたりもして楽しめた。

バイキングの食材をどう組み合わせるのかというのも創作の1つに思えた。

桂浜へ

高知と言えば桂浜、桂浜と言えば坂本竜馬かな。お約束の竜馬像を見に行ってきた。残念ながら雨だったので桂浜のあちこちを散策しようという雰囲気ではなかった。

当初の予定では 桂浜水族館 へ行くといった話しもあったんだけど、時間の都合で見送られた。私は水族館が大好きなので昨日に続いてもう1つ行けると期待していたのに残念だった。

ドライブイン 西村食堂 という、近くの食堂で少し早めのお昼ご飯を食べる。朝ご飯のバイキングをがっつり食べた人にはややきつそうだった。お刺し身定食が山盛りで出てくる感じの食堂でよかったと思う。私の記憶では高知で食べたお刺身の中ではこの食堂に出てきたものがもっとも鮮度がよくておいしかったと思う。次の高知へ来たときはお腹を空かせて山盛りのお刺身定食を頼んでみたいと思う。私は海鮮丼という普通サイズの、お刺身が4種のった丼ぶりを注文した。これもコスパよくて十分においしかった。

ここで12時をまわっていたので私は社員旅行から離脱して帰路に入ることにした。

海洋堂スペースファクトリー南国の寄り道

帰路の途中だったので 海洋堂スペースファクトリー南国 にも立ち寄ってみた。1F と 2F は無料で見学できて写真も撮ってよいと教えていただいた。有償のガイドツアーのようなものもやっていて関心はあったけど、時間もないので断念した。30分ほどささっと見て回った。アニメや漫画が好きな人には楽しめそう。

車移動

12時55分に海洋堂さんを出発して13時53分に 吉野川サービスエリア で休憩した。雨降りの視界の悪さ、トンネルの多さなどもあって疲労と眠気で運転はかなり辛かった。2-3回ぐらいは車体が揺れて車道にある線をオーバーしそうになった。休むと一時的に眠気はしゃきっとするものの、30分ほど走っているとまたすぐにどんよりしてきて辛かった。私にとってはトンネルを走るのがとても疲れたように思えた。1人だから気楽に運転できたけど、人を乗せていたら怖い運転だったと思う。

14時13分に吉野川サービスエリアを出て、15時16分に淡路島の実家に着いた。高速道路でガーッと走っていたので高速道路を降りた後の実家までの道のりもわりとスピードを出してしまっていた。疲労もあって感覚が狂ってしまっていた。実家には誰もいなかったので30分ほど横になって休んでいた。このままいると寝てしまいそうだったので起き上がって16時7分に実家を出発した。

休息したのと、ここから神戸まで帰る道のりはよく知っている道筋で慣れているせいか、四国を走っていたときよりも頭も眠気も冴えて集中して帰ってくることができた。知らない道を走るというのも疲れるのかもしれないと思えた。17時37分に神戸のマンションへたどり着くことができた。

休憩も含めて5-6時間あれば高知市から神戸市まで車で移動できることもわかった。こうやって移動時間の記録を残しておけば、また何かのイベントのときに役立つかもしれない。