Posts for: #Python

出張帰りにオフィスに寄って開発する

18時19分の新幹線に乗って21時前に新神戸駅に着く。この時間帯で帰ってくるのが楽な気がする。新神戸駅についたらいつもそこからタクシーで帰りたいと思う。いまうちの会社は全然儲かってないのでそんなことできないけれど、いつか余裕ができたら出張帰りの電車乗り継ぎをやめてタクシーで直帰してよいルールにしたい。

go 1.21 への移行

昨日 Go 1.21 is released! されたことを知った。自分の作業を中断して早めに移行して問題があれば検出できるしておきたかったので 1.20 から 1.21 への移行をしていた。もっとも大きな移行としてログ出力をすべて log/slog へ移行した。もともと cybozu-go/log という標準の log パッケージに近いものを使っていたので移行そのものは大きな課題にはならなかった。一方で変更することによって運用にどういった影響が出るかは実際に動かさないと気付かないこともあるだろうという視点で早く移行したかった。昨日の夕方に 1.21 で一通りは動くようにして、今朝から細かいところの修正は他のライブラリとして slices/maps といった新規に追加された標準ライブラリを使うように変更していった。リポジトリが数個あるので単純に労力だけの問題。ついでに go-ldap の ci 環境の設定も変えておいた。

github-api-tools 再び

帰りの新幹線の中でてらださんとやり取りしていた。issue 検索に llm の技術を使ってサンプルアプリケーションを作るというアイディアが進んでいて、公けの github issues のデータを使えばいいという話しをした。実際に学習データにするには、一定の前処理したテキストとメタデータが必要になる。github issues からあるプロジェクトの情報を一括で取得する方法はないか?という相談を受けて、github の rest api などを使って取得するのがよいのではないか?と提案した。

私も過去に github での作業時間の検証のために github-api-tools というツールを作っていた。21時半頃にオフィスに戻ってきて、せっかくなので試しにやってみるかと翌1時過ぎぐらいまでコードを書いていた。過去にも issues の機能も作った方がよいよねという課題は残してあった。

python のコードを滅多に触る機会がなくなってしまったので勘所を思い出したりするのにやや手間取った。それでも自分が過去に作ったものなのですぐにできた。

openapi-ext-tools をまた使う日がきた

0時に寝て4時に起きて7時に起きた。わりとよく眠れた。

ストレッチ

トレーナーさんと月曜日の日本対クロアチア戦の感想を話したりしていた。今日の開脚幅は開始前153cmで、ストレッチ後156cmだった。先週は疲弊と疲労で散々な数値になっていたものが復調してきつつある。今週も毎日8-22時はオフィスで缶詰め状態だった。たくさん座っている (同じ体勢でいる) 時間が増えると筋肉にはよくない。まだまだ右腰と右太もも周りの張りは強く復調にはもう少し時間がかかるようにみえる。一方で忙しさのピークを越したと思うので今週以降は少しペースダウンしながら体作りをしていく。いまお手伝いしている開発は12月にすべての集中力を費やしてもよいと考えている。残りは期間はメンバーに委譲するような体制になるとベストかもしれない。そのための体力づくりは重要。

openapi-ext-tools 再び

github pages ならぬ gitlab pages がある。ふと web api のドキュメントを作るために openapi のスキーマを定義したら gitlab の ci/cd と連携できていいんじゃないかと思い付いた。スキーマがあればフロントエンドのクライアント生成や e2e テストコードの自動生成などに使えるかもしれないし。過去に作った openapi-ext-tools を oss にしておいたからいまも使える。oss 万歳。先のことはわからない。redoc を使ってちゃっちゃと実装した。

pages:
  only:
    changes:
      - schema/*
  stage: deploy
  image: alpine:latest
  before_script:
    - apk --no-cache add python3 nodejs npm
    - python --version
    - python -m ensurepip
    - pip3 --version
    - node --version
    - npm --version
    - npm install --global redoc-cli
    - redoc-cli --version
    - pip3 install openapi-ext-tools
    - pip3 freeze openapi-ext-tools | grep openapi
  script:
    - openapi-spec-cli --spec-path schema/openapi.yml
    - |+
      redoc-cli bundle bundled_openapi.yaml \
        --output index.html \
        --options.expandResponses=all \
        --options.requiredPropsFirst=true \
        --options.jsonSampleExpandLevel=10 \
        --options.hideLoading=true \
        --options.pathInMiddlePanel=true      
    - mkdir -p public
    - mv index.html public/
  artifacts:
    paths:
      - public

久しぶりに触ったら openapi-ext-tools が依存ライブラリの変更で動かなくなっていたので直した。

SECI モデルのワークショップに参加した

0時に寝て、2時、3時、5時に起きて7時に起きた。夜中何回も起きる。

データ移行スクリプト

あるテーブル間のデータ移行のために久しぶりに python のスクリプトを書いた。python の文法を忘れるぐらい最近は書かなくなってしまっていた。1時間ほど書いていると興がのってきてそれなりに書けた。書いていれば体が覚えているので自然に動く的な。dump データ (insert 文) から json 文字列を含むデータを移行しないといけなかった。json 文字列を1つのカラムの値としてパースするのが思ったより難しかった。とはいえ python だとこういう煩雑な文字列操作は得意なので1-2時間で実装して移行作業を完了できた。

SECI モデルのワークショップ

たまたま twitter でフォローされたアカウントのタイムラインでみかけた ゲームで体感!SECIモデル~チームビルディングの瞬間に迫る!~ に参加した。SECI モデルとは野中郁次郎氏と竹内弘高氏の論文で提唱された知識創造のフレームワークの1つ。私は実践知の本で知って、スクラム本でも紹介されていたのでよく覚えていた。

暗黙知と形式知がぐるぐるまわるんだよという頭だけで理解していて、違和感もなかったし、普通に理解していたつもりだった。SECI モデルを学ぶことを意識したワークショップに実際に参加してみると、知識で理解していた概念と実際に行動 (ワークショップを通してチームで学ぶ) を通して得たフィードバックのようなものがあって、参加前の私は SECI モデルを誤解していたことにも気付いた。単純に知識創造だけのことを言っているわけではなく、チームビルディングや人間関係も知識創造には影響を与えている。私が他人にあまり関心をもたない人間だから人間関係や多様性が知識創造にどういった影響を与えるかを軽視していたと思う。

このワークショップは有償なのもあるだろうけど、2時間で SECI モデルとチームビルディングを組み合わせた要点が学べるようによく練られたものになっていたと思う。チームビルディングの3要素として、目的・関係性・多様性をあげていた。SECI モデルは個人、チーム、組織、環境の集合の要素としてモデル化されていた。個人よりも大きい集合 (チーム、組織) の重要性を私は軽視していたから気付きが多かったという話し。SECI モデルで提唱されていることは、多寡はあっても開発者は普段の業務で普通にやっている。受講後に SECI モデルで実践していることをよりエンパワーメントする仕組みを課題管理もしくは課題管理システムの文脈でできないだろうかと考えたりもしていた。ふらっと参加したのに私にとって気付きが多かったのでこのワークショップを運営しているコミュニティのイベントに今後も継続的に参加してみようと思う。

gihtub-api-tools の拡張

5時に寝て9時過ぎに起きた。昨日は久しぶりに夜更ししてコードを書いてた。

github actions のいろいろな時間の算出

以前作った github-api-tools を拡張して github actions の実行履歴の分析するための機能を作っている。

ひとまずワークフローの実行履歴からジョブのステップの実行時間を積み上げた時間を算出してみた。いくつか API を調べているうちに課金時間は直接 API から取得できることに気付いた。この3つの時間は全然別の意味をもっていて、それぞれの時間は一致しない。

  • ステップ実行時間: ジョブのそれぞれのステップの実行時間の合計
  • 課金時間: 課金対象として数えられている時間の合計
  • ワークフロー実行時間: アクションのワークフローの実行にかかった時間

github actions は public リポジトリに関しては課金対象ではないんやね。private リポジトリ且つ github-hosted ランナーを使っている場合のみ課金対象となるみたい。

BizPy 再始動

BizPy 再始動

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

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

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

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

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

プロコンの続き

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

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

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