Whisper AIを触ってみた

こんにちは、Yumihikiです。

最近GPT-4の勢いが凄いですね。 今日も起きたらGitHub Copilot Xの発表が流れてきて、今一番HOTだなと思います。

github.blog

そのGPT-4が作っているWhisper AIを触ってみました。

openai.com

以前、 @nikkie-frnext さんが記事を書かれていたのを覚えており、触りたいなと思っていたところでした。

nikkie-ftnext.hatenablog.com

動かすまでの手順も非常に簡単で、面白かったです。

実行環境

  • macOS Big Sur 11.6.4
  • Python3.10

ffmpegのインストール(未インストールの場合)

brew install ffmpeg

※環境に合わせて下記のGitHubのReadmeから選んで実行してください。

Python実行環境の準備

mkdir whisper-study
cd whisper-study
python3.10 -m venv venv
source venv/bin/activate
export PYTHONPATH=$PWD
pip install -U openai-whisper

サンプルファイルの作成

say 吾輩は猫である。名前はまだない。 -o sample.wav --data-format=LEF32@16000

サンプルコードの作成・記述

touch main.py
vi main.py

以下を貼り付け

if __name__ == "__main__":
    import whisper

    model = whisper.load_model("base")
    result = model.transcribe("sample.wav", fp16=False)
    print(result["text"])

出力結果

python main.py
わがはいは、ネコである、名前はまだない。

バッチリ出ましたね。 文字起こしが非常に簡単にできるので、色々と活用していけば便利になりそうだと思いました。 個人的にはZoomを使った後の会話とか、もっと便利に文字起こししたいなと感じているので。

最近こうやって技術を勉強する時間が取れてきたので、引き続き色々と触っていきたいと思います。

補足

以下のリポジトリのサンプルコードを基にしています。 fp16=False を指定しない場合、以下のWarningが出るので付与しました。

UserWarning: FP16 is not supported on CPU; using FP32 instead
  warnings.warn("FP16 is not supported on CPU; using FP32 instead")

github.com

PyneconeというOSSフレームワークを触り始めました

こんにちは、Yumihikiです。
久しぶりに技術面の学習が再開出来たので、今日は気になったフレームワークについて紹介します。
その名もPyneconeです。

リポジトリ
https://github.com/pynecone-io/pynecone

今話題のOpenAIによるGPT-4の発表の中でPyneconeについて触れられており、Twitterで初めてこのフレームワークの存在を知りました。
https://twitter.com/pynecone_io/status/1635751500826939393?s=20

Pyneconeはフルスタックフレームワークと紹介されており、Djangoなどと比べて個人的にはPythonのコードでフロントエンドをガシガシ書けるのが面白いなと思っています。Viewとかではなく、Pythonのコードに1remとかを書いたりしていて、Pythonなの!?と思いながら今日触ってみていました。

内部的にはNext.jsをラッピングしてPythonで動くようにしているような感じで、どのように実現しているかまではまだソースを追えていませんが、非常に興味深い。。

以下、公式リファレンスからの引用ですが、サンプルコードです。

import pynecone as pc


class State(pc.State):
    count: int = 0

    def increment(self):
        self.count += 1

    def decrement(self):
        self.count -= 1


def index():
    return pc.hstack(
        pc.button(
            "Decrement",
            color_scheme="red",
            border_radius="1em",
            on_click=State.decrement,
        ),
        pc.heading(State.count, font_size="2em"),
        pc.button(
            "Increment",
            color_scheme="green",
            border_radius="1em",
            on_click=State.increment,
        ),
    )


app = pc.App(state=State)
app.add_page(index)
app.compile()

生成されるもの(これに+-1のカウントが出来ちゃいます!)
Image

引用元
https://pynecone.io/docs/getting-started/introduction

現在はまだPublic Bata版のようでまだまだ開発中ですが、今かなりHotな印象を受けました。
こういうフレームワークがグングン伸びている状況に立ち会えるのが初めてなので、今後どうなっていくのか非常に楽しみです。

自分も早速サンプルのリポジトリがあったので、ローカル環境でうまく動かないものがあったためプルリクを立ててみたのと、Discordにも参加してみました。
Discordには行動規範的なものも書かれており、こういうものに加わるのは初めてですがしっかりしている印象を受けました。

tailwindが使えるように検討中だったり、質問など結構活発な印象を受けたので自分もこれからWatchして何かしら貢献していきたいなと思います。

命名:考

先日、開催中の勉強会「ミノ駆動本_読書py」で11章「コメント」を読みました。

pythonista-books.connpass.com

コメントそのものではなかったですが、メソッド名の話をした時に面白い学びがありました。

参加者の方から以下の投げかけをしてもらいました。

  1. こんな処理をする文字列のメソッドを何と命名しますか?

文字列を、単語ごとに大文字から始まり、残りの文字のうち大小文字の区別があるものは全て小文字にする

ここで私は・・・考えた挙句、直ぐに浮かばないのでChatGPTに尋ねました。

ChatGPTへの質問

文字列を、単語ごとに大文字から始まり、残りの文字のうち大小文字の区別があるものは全て小文字にする を英語で命名してください

Capitalize the first letter of each word and make the rest of the characters lowercase.

文字列を、単語ごとに大文字から始まり、残りの文字のうち大小文字の区別があるものは全て小文字にする を関数名にしてください "TransformWordsToTitleCase" or "ConvertToTitleCase"

1つ目はメソッド名にはなりませんでしたが・・・これは振る舞いを丁寧に説明しすぎたよくないケースです。 ここまで説明すると、冗長ですよね。

実はこちら、元ネタがあり。Pythonのstr.title()の説明だったそうです。

https://docs.python.org/ja/3/library/stdtypes.html#str.title

海外にはTitleCaseというWordがあり、この一言で説明できるのは概念を把握しているかどうかだと考えます。 これはどちらが正しいかというと正解は無いと思いますが、こうやって説明できるかどうかは「知識」だなと。 抽象レベルで「これをなんて説明したら良い?」と理解出来ているかどうかで良い命名も変わってくるので、裏側に潜む概念をしっかりと理解することが大事だなと感じた勉強会でした。

少なくとも、capitalize_the_first_letter_of_each_word_and_make_the_rest_of_the_characters_lowercase というメソッド名は定義しないように気をつけようと思います(絶対やらない)。

エンジニアと人生コミュニティと私の1年

エンジニアと人生コミュニティと私の1年

こんにちは、Yumihikiです。

この記事はエンジニアと人生アドベントカレンダー#1の3日目の記事です。

adventar.org

明日は米本剛士さんです!

はじめに

今回、どうしても書きたいことが2つあったので2つをまとめた記事にすることにしました。

1つはエンジニアと人生コミュニティに所属して良かったこと・ありがたいこと。 もう1つは自身のエンジニアとしての1年間のふりかえりです。

という訳でエンジニアと人生コミュニティに所属して良かったことから書かせて頂きます。

エンジニアと人生コミュニティに所属して良かったこと・ありがたいこと

私は2月27日にエンジニアと人生コミュニティに加わりました。

community.camp-fire.jp

入った動機としては、次のようなものを抱いていました。

  • 1人でもくもくと学習するのがしんどい
  • コミュニティに所属することで周りの方と楽しんで活動したい
  • 発信活動など注力していそうだったため気になった

中に入られている方はどんな方がいらっしゃるのか調べずに入りました*1が、実際入ってみて自分のtimesの投稿に対して絵文字をつけてリアクションしてくださる方や、時にコメントをくださる方もいらっしゃってワイワイ楽しくと過ごさせてもらっています。

時には私のネガティブな投稿について励ましていただけることもあり、ポジティブネガティブを気軽に投稿させてもらっているので私にとっては欠かせない居場所になっています。

元々イメージしていた発信活動についてもコンスタントに発信されている方もいらっしゃり、刺激をもらうことも多いです。

最近私は参加できていませんが、朝活というイベントに参加して毎日雑談する機会を持てていたこともあり。 そのほか色んな時間帯に様々な活動がされているのでお世辞抜きに馴染みやすいと思います。

どんなことをしているのか、という活動内容はこちらの堤さんのTwitterの投稿が参考になると思います。

過去に別のコミュニティに所属していたこともあったのですが、イベントがいつも夜開始で自分の時間と合わなかったり 馴染めず退会してしまった経験もあるので、そうした方にもおすすめだなと思います(今から思うと、そう思うなら自分で開けば良いじゃないかという話ですが・・・!)。

ちなみに、そのイベント開催について個人的に凄いなと思うポイントがあり。 有志の方々による活動として開催されており、いわゆる運営側が設定している訳ではありません。 相互扶助のような精神で成り立っており、貴重なコミュニティだなと感じています。

そして、そのような環境にて過ごさせてもらえるコミュニティに入ることが出来て良かったな、ありがたいなと思っています。

というのはコロナ禍の影響もあり、ここ数年の私は「家庭」「職場」の2軸が主たる活動範囲でした。 それまでは「友人たち」も含まれていましたがやはりコロナ前のような活動はなかなか出来ず*2。 そうすると、居場所が少なくってどうしても苦しい場面というのはありました。

それがエンジニアと人生コミュニティに所属することによって、自身の居場所が「家庭」「職場」「エンジニアと人生コミュニティ」の3つになり、良い意味で頼れる場所が増えたので心の支えになっています。 そんなありがたいコミュニティに、私も可能な範囲で貢献していこうと思います!

エンジニアとしての1年の振り返り

そして、上記で述べたようにコミュニティに支えてもらったこともあり。 今年はこれまでやれていなかったことを出来るようになった年でした。 それらをつらつらと書いていこうと思います。

今年できたこと

まずは・・・OSSへのコントリビュートを出来ました! github.com

FastAPIというPython製のフレームワークのドキュメント修正のため、Issueの解決など技術的な貢献では無いですが。 OSSに自分も何か貢献出来たのかな、ということでちょっと自信を持てるようになりました。

また、勉強会を共同で運営するようになりました。 良いコード/悪いコードで学ぶ設計入門ー保守しやすい 成長し続けるコードの書き方という書籍、通称ミノ駆動本という本を題材にしたミノ駆動本_読書pyという勉強会です。

pythonista-books.connpass.com

最初は「やってみるの楽しそうだな」という気持ちで結構勢いで開催することになりましたが、開催する中で勉強会を運営することの大変さや参加してくれる人のありがたさを感じられるようになり、今までと別の視点を持つことが出来ました。

もちろん書籍そのものに対する学習も1人だと理解していなかったことが理解できるようになってきており「開いて良かった〜!」と思っています。 こちらについてはお誘いいただいたid:nikkie-ftnext さん(nikkieさんはTwitter上のつながりです)に大変感謝しています。 来年も引き続きよろしくお願いします!

そうそう、このイベントを開くことになった流れなど話したLTが次のスライドになります。PyConJPのAfter PartyにてLTもすることができたの貴重な経験でした・・・!

www.docswell.com

社内でもLT会をやってみようと呼びかけてみるようになったり、プライベートでも昨年より学習が出来るようになってきたりと、エンジニアとして歩みは遅いながらコツコツと成長は出来ているんじゃ無いかなと思います。

その他発信系ではないですが、自社ではパーソルスピリット賞という賞を受賞しました。 2年前の自分はかなりポンコツでしたが、コツコツと頑張ってきた取り組みが認めて頂けると嬉しかったです。 また、チームリーダーを務めさせて頂くことになり、色々と今までと違うことも体験させてもらっています。

という訳で1つずつ語ると長くなるのでまとめると以下のようなことを出来ました(所属しているエンジニアと人生コミュニティでもLTをする機会をいただけました!)。

  • 勉強会の共同運営 ミノ駆動本_読書py - connpass
    • 12/2で合計11回開催
  • 自社内LT会開催
    • 合計3回(現在は休止中・・・)
    • うち2本発表
  • 社外LT発表
    • エンジニアと人生コミュニティ1本
    • 勤務先で1本
    • イベント2本

www.docswell.com

YouTubeはこちら! youtu.be

www.docswell.com

Suggestions for readability by Yumihiki · Pull Request #5 · huideyeren/anshitsu · GitHub

GitHub - Yumihiki/weather_report

  • Qiitaの記事5本

qiita.com

qiita.com

qiita.com

qiita.com

qiita.com

  • チームリーダーとしての勤務開始
  • エンジニアと人生コミュニティからのつながりでmattyさんがされていらっしゃるポッドキャストにも出演させてもらいました

anchor.fm

今年出来なかったこと

と、出来たことばかり言いましたが。 やろうと思っていたけど出来なかったことをいくつか紹介しておきます。

まずは発信活動がもっと出来たら良かったな、というのが率直な気持ちです。 最初は毎週1本発信する、と思いつつも結局それは全然叶わずだったので・・・。

また、技術者としてもっと草を生やすことやアーキテクチャなど学んでいきたかったのですが それらにまでは至れていませんでした。 アルゴリズムの学習、競技プログラミングOSSフレームワークを使った学習、Reactの学習なども全然できておらず。 これらは今年の残り及び、次年度の課題にする予定です。

こうしてみるとやっぱり出来ていないこともたくさんあるので、頑張らないと駄目ですね(何を学ぶのかちゃんと目標を定めることも重要だと思いますが・・・!)。

終わりに

という訳で、やれなかったこともやれたこともたくさんある1年でした。

3年前はエンジニアになりたい人生。

2年前はエンジニアとして働き始めた人生。

1年前はエンジニアらしく少しずつ仕事ができるようになってきた人生。

そして今は(ちょっとだけですが、リーダーとして)エンジニアを支える人生にもなってきています。

こうして振り返ると、来年は自分がどんなエンジニアと人生を過ごすのか楽しみになってきました。 来年は今年できなかったことに向き合い、さらにエンジニアとしてスキルアップしていけるような1年にします!

最後まで読んでいただき、ありがとうございました!

*1:代表の堤さんの事は未経験からエンジニアになられてご活躍されていた方、という認識は持っており、選んだ動機の1つでした。

*2:コロナ以前は毎月1回スイーツを食べに行っておりました

PyConJP2022参加記事

PyConJP2022参加記事

2022/10/14-15(16)に開かれたPyConJPに参加してきました!

2022.pycon.jp

※正確には16日はスプリントです。

今回私は初めての東京のカンファレンスに参加しました。 勢いが凄く、セッション・スポンサーブース・パーティと楽しませてもらいました。

遠方支援制度も利用させて頂き、私は大阪・東京間の新幹線代を出していただきました。 ええ年した社会人ではありますが、「YouTubeで見られるし金銭的にもなぁ・・・」という気持ちがあったので 悩んでいたのですが、非常に助かりました。ありがとうございました。 分断させないという考え方の元、こうやって支援下さっていて非常に素敵だなと思いました。 何か別の形でもっとコミュニティに貢献したいなと思います。

セッションを聴講してて全体的に「あ〜そうだよね、わかるわかる!」ではなく、「全然知らないことばかりや・・・」と 思ったのでそういう意味でも非常に刺激になりました。 また、Pythonの話ができる・聞ける、という点でも普段できない体験だったので非常に楽しかったです。

それでは以下につらつらと書いていきます。

DAY1 10/14

The challenge of speeding up Python

Keynote(基調講演) Mark Shanonnさん

英語での発表でしたが、なんと同時通訳で日本語でも聞けました。 PyConJPすごい。

Pythonの歴史から始まり、JITコンパイラの話が多く「知らない世界だ!」と思いながら聞いてました。 いろんな種類があるんですね。。 PyPy, Hotpy, Jython, IronPython... 途中からちょっと追いきれなくなりました。 2000年にPython2.0が出て、そのころはまだ遅かったそうですがPython3.11では非常に高速化されているとのこと。

セッションの内容に直接的な関係はありませんが、銀の弾丸は無いと言うニュアンスで「魔法の杖はありません」と 言っていてちょっと笑いましたw

C APIっていう単語についても言及があり。聞き馴染みがありませんでしたが、おそらくこちらですかね。

Python/C API リファレンスマニュアル — Python 3.10.6 ドキュメント

また、CPythonのソースを読むためにということでにゃんだーすわんさんが以下のツイートをされていて参考になりそうでした。

FasterCPythonに関わるのは難しそうですが、こうやってPythonが作られているんだなと学べる良い機会でした。 JavaScriptが比較対象?として最初話に挙がっていたと思うのですが、投資されて最適化が進んでおり、 Pythonもそういう意味で我々も投資していかないといけないのかな、など考えるようになりました。

github.com

youtu.be

詳解 print("Hello, world")

Rei Suyamaさん

docs.google.com

Python実践入門の著者の方でした。私は実は最初にPythonについて学ぶ際に買った書籍がPython実践入門だったので勝手に非常に嬉しくなりました。

gihyo.jp

print("Hello, workd")の裏側で何をされているのか・・・ということで抽象構文木(これまで私はちゅうしょうこうぶんもく)や 読んでいたのは秘密。ちゅうしょうこうぶん'ぎ')プログラム実行時の流れを丁寧に解説していただいており、 抑えておきたいセッションでした。

CPythonのビルド手順やデバッグビルドの手順も発表されており、実際にPythonがprint("Hello, world")を するまでに何が裏側で起こっているのか?わかる素晴らしい発表でした。 ふりかえってスライドを見直していると、手を動かしたくなってきたのでまた手を動かして。学んでいきます。

youtu.be

Pythonアスタリスク 🐍🌟💫🐍🌟💫

nikkieさん

ftnext.github.io

我らがミノ駆動本_読書py共同主催者のnikkieさん。

感想の途中ですが一緒に開いているミノ駆動本_読書pyはこちらです。

pythonista-books.connpass.com

スライド170枚という量の多さ、のっけの挨拶「うぃっす」から始まりPythonアスタリスクについてたくさん 語っていただきました。 良い意味で「アニメノモトネタオオスギテワカラナイヨー」っていうスライドでしたw (最初、さかなー🐟の元ネタがわかっていませんでしたw リコリス・リコイルの4話ですね。)

アニメネタ以外だと、Pythonの処理の裏側のことも追える良セッションでした。 例えば二項算術演算子の乗算・べき乗で呼ばれている特殊メソッド __mul__, __pow__ といった存在など Pythonの何気なく動いている裏側には特殊メソッドというものがあるんだよね、ということに触れてもらっていて 初心者の方に聞いて欲しいなと思いました。

アスタリスクがこんなに好きな人を始めてみたので、にっきーさんにみてもらうコードにはimport * を多用して 喜んでもらおうと思います(駄目です)。

youtu.be

Pythonに上級テクニックは要らない(そして正しい付き合い方)

清原弘貴さん

slides.hirokiky.org

Shodoを運営されている清原さん。私もShodoを使ってブログ記事の添削をしてもらったことがありますが 「あ!これだめなんだ!」っていう学びがありました。

shodo.ink

セッションの中身について、自分には刺さることが多いセッションでした。 どうしても覚えた技術をすぐに使いたくなっちゃうことが多いですが、それを戒めてくれるという点で響きました。 自分にとって良いコードでも、他人にとって良いコードかどうかはまた別問題なので。

BeProud時代に実は一度、問い合わせ対応をしていただいたことがあり迅速丁寧な対応をいただいて「この方すごい」 と思っていたり、Make組ブログの記事から勇気をもらったことがあります。

blog.hirokiky.org

使わない方が良いコードの中にabcが挙げられており、抽象基底クラスも使えるなら使った方が良いかなと思ってはいたので、 自分なりに「なぜだろう?」という点は学び直して、適切に取捨選択していこうと思いました。

セッションが始まるまでの場繋ぎのトーク(当初予定していたブースが使えなくなったので)

youtu.be

実際にセッションが始まった時のトーク

youtu.be

AST(Abstract Syntax Tree)に入門する

安本雅啓さん

speakerdeck.com

詳解 print("Hello, world")にも続いて、ASTについて入門するためのセッションでした。 astって本当、名前はよく聞く(?)気がするのですが、ちゃんと理解できていないので学びたく聴講しました。

セッション中に教えていただいたinstavizを早速手元で動かしてみましたが、こんな風になっているのかと 驚きました・・・!!

instavizを動かしてみた

と言ってもまだ理解できていないので、ASTについてもっと理解していきたいなと思いました。

ちなみに紹介されていたLibCSTのGitHubリポジトリはこちら。

github.com

pytestなどの裏側でこうして動いているんだな、とわかって自分の世界がまた1つ、広がりました!

youtu.be

DAY2 10/15

基調講演 統計家 西内啓によるPythonの使い方

西内啓さん

めちゃくちゃ面白かったです。 データ分析とか、今のところ特に馴染みないしなぁ・・・と最初少し思っていたのですが、 喋りが非常にお上手で面白く引き込まれました。

ちなみに「統計学が最強の学問である」の著者様でした。

www.diamond.co.jp

セッションの中で個人的に非常に刺さったのは、データサイエンティストは何に一番時間を使っているのか、という アンケートの結果のグラフがあったのですが、これは置き換えれるなと。 「xxは何に一番時間を使っているのか?」という問いを投げかけることで、課題解決のためのプロセスに役立てそうだと感じました。

実際にその課題解決をするためのdataDiverということで、データ分析をしたいけどそこまでなかなか・・・ という痛みがあったらdataDiverを紹介・あるいは利用したいなと思いました。

(司会者による経歴紹介からStart)

youtu.be

Fast API と学ぶ WebRTC

Takayuki Kawazoeさん

docs.google.com

Web RTCってなんだろ?って聞き馴染みが無かったので興味本位で聴講しました。 リアルタイム通信に適したプロトコルを組み合わせた技術なんですね。 スライド中にもあったのですが、リアルタイム通信ってこれからのWebだと重要な技術だなと自分も 思うので色々な技術がある、そして(今の自分にはまだ)わからん!ということを知れてよかったです。

シグナリング・データのやり取り・再送制御・・・ ネットワークとも少しずつ仲良くなっていきたいですね。

紹介されていたサンプルコード。

github.com

youtu.be

お前はまだ本当のDjango ASGIを知らない。

denzowさん

speakerdeck.com

Djangoは過去勉強してちょっとしたWebサイトをherokuにデプロイする程度なのでどうしようかなと思いつつ、 WSGIは聞いたことがあるけどASGIってなんだろう?って思っていたので聴講しました。

WSGIは同期ですが、ASGIは非同期・・・ということでシンプルな違いながら、Fast API と学ぶ WebRTCのセッションでも話が挙がったように これからのWeb開発には非同期的なものが重要になってくると思うので、Djangoに限らず抑えていこうと思いました。

ASGI Documentation — ASGI 3.0 documentation

youtu.be

コーディング規約自動化: Pylintのカスタムルールを作ろう

Takayuki Hirayamaさん

ここでもASTの話が出てきました!今回のPyConJPで一番共通して挙がったテーマが実はASTではないだろうか?

astroidというライブラリを利用して説明がされつつ、 モジュール検索パスという普段意識していない概念や PylintのVisitorパターン(エキスパートPythonプログラミング 改訂3版にも記載があったそう)など紹介もあり勉強になりました。

github.com

スコープの管理のくだりがまだ理解・頭の中に落とし込めていないので勉強していこうと思います。

speakerdeck.com

youtu.be

続・絵を読む技術 Pythonで読むイラストの心理戦略

ひろさじ / Hirosajiさん

speakerdeck.com

今話題のAI絵師のことにも触れられていました。

魅力的なキャラクターの構成要素に 最も代表的な定石としてコントラポスト、最も原始的な定石として性戦略が挙げられていました。 コントラポストは体重の多くが片脚にかかった姿勢とのこと、だそうで私が質問したのですが「ジョジョ立ち」もコントラポストと言えるそうです。

例えばこのコントラポストを検出するためにPython(3D姿勢推定モデルのSMPL)を利用しており、 普段Webアプリケーション以外のPythonには馴染みないのですが「すげー!面白い!」って思いました。

キャラクターの好みについて、「なぜ」「どうして」といった理由を説明しつつPythonを使って実証?することで 非常に興味深いセッションでした。 referenceも多く、まさに論文では・・・と思われるすごいスライドでした!

本題とは全く関係ないですが、スライドの構成も非常にみやすくて「わかりやすく伝えるためのスライド」では こちらを周りの方に紹介しようと思いました。

ちなみに2021年のPyCon JPで発表があったのはこちら。

www.slideshare.net

youtu.be

アフターパーティへの参加とLTをしました

コロナの抗原検査も無事陰性だったのでアフターパーティに参加しました。 お寿司やアルコール類が出される姿、、、コロナ前の勉強会が戻ってきたみたいで懐かしくなりました。

当時私が未経験だった頃はラクスさんの勉強会に毎月顔を出させてもらっていたな、とか 懐かしい気持ちになっていたところ・・・(当時はPHPを勉強していました)

なんとLTの抽選があたり、発表しました。 盛り込んで5分ギリギリ・早口になったのですが楽しかったです。

スライドはこちら。

docs.google.com

nikkieさんには感謝の意を伝えていましたが、あそこで声をかけてもらって?一緒に始めたことから PyConJP2022に参加も繋がっていると思ったので。本当に感謝しています。

ちなみに、スライド自体は大枠を14日の朝の新幹線に作成していたので、日の目を見ることになってよかったなと思いましたw

他にも気になった発表

イベント駆動アーキテクチャについて

Masataka Araiさん

Pythonアスタリスク 🐍🌟💫🐍🌟💫と同時刻だったため聴講しておらず。 Araiさんとはスポンサーブースでお話しさせてもらってから登壇していたことを知ったのですが、 手続き型の上から順に処理が実行されるプログラミングではない技法とのことで、知らない概念を知ることができました。

speakerdeck.com

youtu.be

DAY3 10/16

Anshitsuのスプリントへ参加

コミュニティスプリント(他コミュニティでいうところのハッカソン)に参加しました。 正直自分にできることって何かあるかな?と思っていたのですが、ここはノリと勢いでそのまま参加しました。

どんなツールなんだろう?と思って話を聞いてみて、そのまま一緒に加わらせて頂きました。 今思い返すと微妙かな・・・ と思ってはしまうのですが、自分の書いたコードをMergeしてもらって、 OSSに技術でcontributeするという経験を得ることができました(Type Hintsがダメだったので修正してもらいましたが・・・)。

加わらせてもらったのはこちらのanshitsuです。

github.com

ちなみに身体が1個しかないので参加できませんでしたが、 Python Boot Campのスプリントや Python製ノーコードツールStreamlitなども活動されており、ちょっとStreamlitは中身が気になるので ソースを少しみてみようと思います。

github.com

最後に

今回、PyConJP2022に参加してみて、全然Pythonのことを知ってないなと思いました。 もちろんCPythonの中身の実装が分からずともPythonが書けるように、詳細に内部まで知る必要性・必然性まではないのですが・・・。 それ自体は別に決して悲観することでもないなと思いつつも、自分が目指しているのは言語の仕様も理解し 楽しめるようなエンジニアなので、もっともっと強く・成長していきたいなと痛感させられました。

また、これは直接PyConとは関係ないですが、私が未経験エンジニア時代に憧れていたKawamataRyoさんともお話しする機会があって 非常に嬉しかったです。

普段、周りでPythonの話がしっかりと出来ているわけでもないので非常に刺激的な3日間を過ごすことが出来ました。 次はTechの話で登壇できるように1つずつ、学んでいこうと思います。

札幌旅行記

札幌旅行記

2022/9/17-21の間、北海道は札幌に滞在していました。 次に行く時の自分の備忘録としての目的がメインですが、記録しておきます。

なんで行ったの?

大学時代の友人の結婚式に参加するために行きました。 同じ学部の友人で、試験前には自分が苦手な数学のことを教えてもらって、彼のおかげでなんとか単位も取れた・・・という今でも忘れられない思い出があります。 新婦さんとは仕事の転勤で札幌に行った時に出会ったそうでした。 本題の結婚式については、知り合いが新郎しかいないという蓋を開けてみたらびっくりしたパターンですが、非常に楽しかったです。

まとめ

自分の中で覚えておきたいなと思うポイントをいくつか書いておきます。

  • Peachでバリューピーチを抑えておけばOK
    • 手荷物7kg, 預入(キャリー)10kgまでいけてぼちぼち安い
    • 便の変更などもOK
    • 3連休なので安い時間で16000円程度だった
    • 逆に高いと30000円程度かかる
    • 飛行機は90分前からチェックイン可能
  • ホテル
    • 大体7500円前後を判断基準とすれば良さそう
    • 繁忙期はもっと高くなるけど、その場合1万円程度ならよしとしておけば良さそう
  • 海鮮のお土産は市場に行って買うべき
    • さっぽろ朝市というところに行けば良い
    • 外市場、というのもあるけど一番安いのはさっぽろ朝市(場外市場は観光客向けメインなので少し高い)な感じ
    • カニ(毛蟹)は当時、1000円/100g前後の値段で売買されていた
    • 9月中旬でもカニは買える
    • あとは発送費で2000円、箱代で500円程度かかる
  • 個人的札幌で行くべきお店

1日目

16:40発-18:40着のフライトで旅立ちました。 より正確にいうと、最寄駅を14時頃出発する電車で15:22に関西空港に到着。

自分が乗ったpeachは第二ターミナルからの発着なので、駅についてからも無料送迎バスで10min程度かかるのでちょっと焦った。バスに乗ってから約15分で手続き完了しました。 とはいえ混んでいないという前提にはなるが、1時間前くらいに着けば問題なく乗れることがわかったので次回以降の参考に。 この時間は搭乗者も少なく、手続きも並ぶことなく進みました。 降りた後の預入荷物の受け取りも10min程度待って受け取れました。

新千歳空港も札幌の近く、ということでそこから40min程度、JRの快速エアポートという電車に乗りました。 電車は大阪のものと若干違う特徴があるのでその辺りは驚きました。

  • JR札幌のドアは1つ
    • 関西は2つあったはずだけど何が違うのか
  • 車両内にゴミ箱もある
  • 端っこの席のところに仕切りとしてガラスが付いてる
    • たまーに席の隣で立ってる人(でイメージつくやろか)の荷物が当たってしまうこととかあった
    • けど、これならそんなことはない

結局ホテルにチェックインしたのが20時過ぎ。 そこから晩飯を探して一幻というところに到着したのが21時過ぎ。

tabelog.com

30minちょい並んで21:50ごろようやく晩飯にありつけました。

敬老の日と繋がった連休ということもあり、結構人は並んでいましたが、他のお店よりは駅から離れているからか人が少なかったです。 食事後はお勧めされたすすきのにある雪風の場所を把握しつつ、歩いてホテルまで戻りました。 ちなみにホテルは北海道大学植物園近くのスーパーホテル北5条通りを抑えたので、30min程度歩いています。

2日目

朝食はホテルのバイキングを食べました。 何気なく飲んだ牛乳が美味しかったです。

そしてメインイベントの友人の結婚式に参加。 今日は誰が来るのかな〜と思ったら、まさかの誰も知り合いがいなかった。 食事の時のテーブルの人が私と新郎の高校時代の友人の計2人でお互い「誰も知り合いがいねぇw」と笑って仲良くなりました。

ちなみになんと妻の友人と新郎は同じ学校出身だったみたいで、「そういえばxx大学だったらyyがいるよね」と言われて思わぬところで共通点があるものだと非常に驚きました。

そこから二次会に参加し、新郎側は5人参加したけど、うち4人は初対面という状態でみんな「根回し!!! 全然知り合いいないw」と笑っていました。そこも含めて非常に楽しめました。

三次会で高校の友人が見つけてくれたBarに行ってみんなでワイワイ。人生初テキーラ一気飲み。 四次会で後輩の方が見つけてくれた海鮮居酒屋に行き、最後は締めのラーメン。 雪風というところに行きました。 帰宅して寝る頃には2時前だったけど、ずっと笑って(最後の方は眠たかったけど)過ごしました。

普段こんなにはしゃぐことは無いのだけど、楽しく過ごしました。 改めて結婚おめでとう。彼曰く、家に来て私が畳んでいない洗濯物を見てたたみ始めた思い出がとても印象的だったそうでしたw 言われて思い出したけど、特徴的だなと確かにちょっと笑いました。 もう大学にいた時の記憶がぼんやりとし始めているところもあるけど、こうやって久しぶりに呼んでもらって会えたのは非常に幸運でした。

3日目

この日は札幌で食い倒れの旅を満喫しました。 早起きして(というか2時に寝たのに6時に目が覚め)場外市場に行き、岩本林蔵商店というところでカニを試食させてもらい。 おにーちゃん何探してるの?って言われて、「朝ごはん探してんねん」と言ったらオススメのお店を教えてもらった。

そこが、めし屋さん。

人生で食べた海鮮の中で一番美味しかった。 ウニ・カニ・大トロ・サーモン・いくら。 どれにしようかと悩んでいたら、始めてだったら1800円の海鮮丼が良いよ、ということでそれに。 800円プラス?でウニがつけれるとのことで、ウニをつけてもらった。

食べた瞬間、うま過ぎて笑いが止まらなくなって、食べ終わる頃には心が浄化された。 お釣りをもらうのを忘れて出ようとしてしまったくらいに・・・

その後、祖母にカニ、同居している叔母に鮭を手配して市場を旅立ちました。 特に考えてなかったけど、タラバガニを送っていました。毛蟹を送ったものとばかり思っていた・・・

そこから歩いてトリトンへ行って美味しいお寿司を食べた。

tabelog.com

トリトンも美味しかった。 サーモンハラスの脂でちょっと苦しくなるほどに。 鮑はコリコリ感が非常に強くってちょっと笑っていた。

そうしていたら雨が土砂降りになってきて、これはもう歩けない!と思い、歩いて。

それと何かしようと思って勢いのままクラーク博士像のある羊ヶ丘へ。 雨の中他にも写真を撮っていた人に撮ってもらい過ごす。

その後、札幌に戻り札幌時計展望台へ。 がっかりスポットと言われ、確かに「え、これ!?」とはなったけど中にある時計はすごかった。どういう仕組みなのかめちゃくちゃ面白かった。

ちなみにここでもクラーク博士がいたので写真を撮ってもらった。

そしてスープカレーのGARAKUを訪れる。 スープカレー、美味しかった。スパイスもしっかり効いている感じが良かった。

tabelog.com

そうして次はみなさまオススメのだるまを訪れた。 1時間以上、なんだかんだで並んだかな? GARAKUで既にお腹もある程度膨れていたのであまり食べれずだけど、美味しかった。

tabelog.com

気分は孤独のグルメ

そしてお土産を買いに。 買いに来たのはこちら。

www.tanukiya.co.jp

めちゃくちゃ悩んだけど、父にはサッポロクラシック鮭とば・ホタテを、母には小樽ビールと鮭とばを購入。 妻リクエストのピンクのブラックサンダーを購入し、会社にはマルセイバターサンドを購入。

そうしてホテルに戻ってゆっくりと過ごした。 とはいえ流石に4食は食べすぎたのでお腹いっぱいだった。

4日目

この日、人生でなかなかできない体験を1つしました。

この日もまず朝は市場へ。

www.asaichi-maruka.jp

そもそも実は3日目に市場へ行く予定はなかったのだけど、GoogleMapでやっていそうな気配だったので行ってみたという感じ。美味しい海鮮丼を食べれたので結果オーライ。

朝5時過ぎに目が覚めて、そこからタクシー捕まえて市場に行ってみた。 ぶっちゃけそんなに朝早くに行く必要はなかったw 5時半とかの時間はまだ全然市場も準備できていないので、行くなら7時ごろとかでも良いかもしれない。

また、聞いた話、土日明けは向こうも営業していない分売れ残りとかもある・・・とのことだったので、次は土日明けじゃないタイミングで行けるなら行ってみようかな、とは思います。ちょっと難しいけど。

3日目の段階で義母が蟹好きだったことを思い出し、妻にも連絡して蟹を仕入れ。 マルタカフーズさんというところで仕入れました。

その後、ホテルに戻ってチェックアウトし。観光案内所で「今日帰るんだけど何かある?」と相談した結果、小樽に行ってきました。所要時間30min程度。 小樽で小樽ビールを呑みましたが、フェストという期間限定のビールが非常に美味しかった。 苦味をあまり感じさせないビールでスルスル飲めて、これは本当に美味しいなと。 ルタオとかブラブラみて回りましたが、滋賀の長浜(黒壁スクエア)とどことなく同じ雰囲気を感じました。

そして13時に小樽発で新千歳空港に戻り、最後のお土産を物色しつつ帰るかと飛行機のチェックインを始めたところ、事件は起こりました。 搭乗時刻の90min前になったにも関わらず、チェックインできず。 あれ?おかしいな〜と思ってよく周りを見たら運行情報がなんと欠航していました。 しかもまさかの機体調整のため。台風が直接的な影響ちゃうんかい・・・!

なので払い戻しか振替なんですが、当日空いている便はANAプレミアムしか無かったようで帰れないことがわかりました。台風14号の影響で昨日の人は当日に振り替えており、割りを食うた形に。 慌てて会社とお客様先に連絡し、アテもないまま札幌に戻り。

道中でマリオットが5000円で予約できたのでチェックインしたあと、ビールを求めてふらふらと歩いていたらサッポロパーフェクトビールが呑めるとあったのでBRACERIA BAR BRIOというお店に。

tabelog.com

そして、まだせっかくだし楽しみたいなと思って探したお店、北海道産酒BARかま田にお邪魔しました。 地酒をどうせなら呑みたいなと思ってでしたが、ここでの時間が非常に楽しかった。

tabelog.com

1杯目は十勝の本醸造を頂き、肴盛り?、そば茶、エゾシカのソーセージ、そしてご好意で札幌村という、建設会社の方が米から作った非常にレアな日本酒をいただき・・・

数年ぶりに訪れた常連の皆様とも仲良くなりFacebookを交換するまでに。 オーナーも非常に面白い方で、札幌に住んでたら結構な頻度で来るだろうな、と思う名店でした。

このお店に入ったのが19時だったのですが、帰る時にはなんと24時になってました。 飛行機が欠航していないと入れなかったと思うと、非常に運が良かった。

終わったあと、にぎりめしというところでおにぎりを食べ。

tabelog.com

そして自販機で売っていたケーキを買って食べ。 札幌には締めパフェという文化があるらしいので。

Parfaiteria beLというお店のシールが貼ってありましたが、大阪にも系列店があるみたいなので次は行ってみよう。

risotteria-gaku.net

そうして4日目も終わり。

5日目

北海道延長戦。 マリオットで朝食バイキングを食べて少しのんびりしつつ、札幌市内を観光しようと 百合が原公園とサッポロさとらんどを訪れました。

yuri-park.jp

www.satoland.com

百合が原公園は正直、普通の大きな公園かな・・・?という感じ。 もちろん花が咲いていると綺麗なんだけど、あまり咲いている訳でも無かったので。

サッポロさとらんどはレンタサイクルを借りて公園内を散策しました。 コロナの影響でどうぶつと触れ合えるコーナーが閉まっていたのが非常に残念。 でも久しぶりの自転車でめちゃくちゃ楽しみました。

そしてオータムフェストが開催されていたので、覗きつつ大通公園の焼きもろこしを買って、4日目に買っていた小樽ビールのフェストを会場の外のベンチで食べ呑みしていました。

そうこうして、19時過ぎのフライトで北海道を経ち、家に帰ったのは23時半。 非常に楽しい旅行になりました。

Re:ミノ駆動本_読書py[6]参加記事

Re:ミノ駆動読書py[6]参加記事

先日、id:nikkie-ftnextさんと共同主催しているミノ駆動本_読書py[6]を開催しました。 pythonista-books.connpass.com

今回は第4章不変の活用を読みました。ミノ駆動本はJavaで書かれていますが、Javaでいう不変を定義できるfinalはPythonには存在しておらず落とし込むのが難しい場所です。 しかし、勉強会で色々話を伺って色々活用できそうなポイントがいくつかありました。まだ全て理解しきれている訳ではありませんが、いくつかご紹介します。

dataclassのfrozen=Trueの実装箇所(何をどうやっているのか)

私の中で最初に浮かんだ疑問です。 FrozenInstanceErrorというエラーを出力している箇所は見つけたので「ここじゃん」というのは分かりつつ、実装内容がイマイチわかってはいませんでした。

そのことを書いたところ、id:nikkie-ftnextさんが教えてくださりました(ありがたや、ありがたや・・・!)。同じように疑問を抱かれて、読まれたことがあったとのこと。

ソースは以下です。

github.com

詳しくは以下のScrapboxに書いてくださっていますが、

object.__setattr__

という属性の代入が試みた時に呼び出される(通常の代入時の動作と理解)ダンダーメソッドを用いているようです。

docs.python.org

scrapbox.io

scrapbox.io

scrapbox.io

field(default_factory=list)だと毎回デフォルト引数のインスタンスを生成してくれる

Pythonの引数って変な動きをしますよね?私も以前記事を書いたことがあるのですが、意図しない動きをするよね、という話題から挙げていただきました。

qiita.com

デフォルトファクトリ関数 field() に default_factory を指定した場合、そのフィールドのデフォルト値が必要とされたときに、引数無しで呼び出されます。 これは例えば、リストの新しいインスタンスを作成するために使います:

mylist: list = field(default_factory=list)

あるフィールドが (init=False を使って) init() から除外され、かつ、 default_factory が指定されていた場合、デフォルトファクトリ関数は生成された init() 関数から常に呼び出されます。 フィールドに初期値を与える方法が他に無いので、このような動きになります。

docs.python.org より引用。

これを使うことによってメソッドを呼び出した際に毎回意図せずに同じものを流用してしまう(結果、毎回インスタンスが作成されるのではなく、追加されてしまう)ことを防げる、ということでした。

カリー化

カリー化について昔、無職やめ太郎さんの次の記事を読んだ記憶はあったんですが何のことか覚えておらず、改めての勉強になりました。

qiita.com

私が理解できた範囲でいうと、1回で引数をまとめてドーン!と渡すのではなく分割して渡すことができる = 意味合いを分割できる、という点が良いなと思いました。 あとは引数を1回しか設定できなくなるので、setterが不要になる(setterってどこでも呼べちゃうので値が変わっちゃう恐れがありますよね)。ということは、これもまさにPythonで不変を実現できるポイントの1つなのかと理解しました。いわゆるDI(依存性の注入)チックなことが出来るとのことで学んで活用していきたいです。

良い型ヒントの書き方

こちらについては以下のリンクに詳しく書いていただいています(紹介していただきました)。

gihyo.jp

多重構造のlist, dictが入れ子になった時、型ヒントが分かりにくい状態になりますがその対策方法を教えてもらいました。 型ヒントを全く利用できていないのが正直なところですが、この記事を参考にしていきたいなと思いました。

おわりに

いや〜、勢いでブログ記事を書いたけど、全然理解できていないことばかりです!でも焦らず一歩ずつ学んで自分の血肉にしていこうと思います!!