AREKORE

daikikatsuragawaのアレコレ

Python Kansai #03 with Mix Leap Study #74の振り返り

先日、Python Kansai #03 with Mix Leap Study #74に登壇者として参加してきました。

kansai-python.connpass.com

本記事はその記録です。

Python Kansai #03 with Mix Leap Study #74とは?

Python Kansai #03 with Mix Leap Study #74とは、Python Kansai*1というPythonに関する関西でのコミュニティおよびイベントとMix Leap Study*2というLINEヤフー主催のLINEヤフー大阪オフィス大阪オフィスで開催される勉強会の共催となっています。

以下の日時、場所で開催されました。

  • 日時:2024年4月17日 19時から21時
  • 場所:LINEヤフー株式会社 大阪グランフロントオフィス

個人的には、Python KansaiとMix Leap Studyのどちらも初めての参加でした。関西のPythonを使うエンジニアとしては親和性の高い(と勝手に感じている)イベントになります。また、しばらく関西に住んでいる身としては、グランフロント大阪が会場というのはとても良いと感じますね…

ブラウン(大阪版)

トーク

ありがたいことにスピーカーとして参加させていただき、「Polars入門」というタイトルで発表しました。2024年以降、個人的にPolarsを使い始めたのですが、その決断の経験に基づく「Polars入門」したくなるような話をしました。当日のスライドは公開されているため、気になった方は見ていただけると幸いです。

speakerdeck.com

当日、会場の方々にPandas、Polarsをそれぞれの使用経験を伺いました。目視でざっくりと数え上げた結果は以下でした。

  • Pandasの使用経験がある方:95%
  • Polarsの使用経験がある方(Pandasの使用経験がある方も含む):5%

つまり、Polarsの使用経験がある方がほとんどいなかったです。念の為、運営してくださっていた小川さんのXのポストも添えさせていただきます。

この現状を把握できたのは最も大きな収穫でして、まだまだPolarsの魅力の伝え甲斐があるなと感じられました。このインタラクティブなやり取りができるのはオフラインでの開催の良さですね。

他の方の発表も聞いていたんですが、どなたも基礎というよりは応用的な内容で興味深かったです。

その他

この機会に対する雑多な話を以下に記録しておきます。

資料の作成において、以下のスライドを参考にして、ChatGPTと二人三脚で作成しました。少なくとも目次の作成や初動はとても早くなりますね。

speakerdeck.com

挿絵についてもChatGPTにより、DALL-E 3を使って画像を作成しました。明確な目的を持って使った初めての経験だったので良かったです。ちゃんとそれっぽいものが出力されますね。

当日は緊張もあってかバタバタしてしまい、ステッカーをもらったり、看板の写真を撮れず、ちょっと後悔しています…軽食も用意してあり、とてもありがたかったです。ただ、こちらもバタバタしてしまい、(モラルの範囲内で)十分にいただけなかったなと後悔しています…余裕のある人間になりたい。

資料中にTypoがチラホラあるので、なんとかしたいですね…対策を考えています。

まとめ

そんな様子でPython Kansai #03 with Mix Leap Study #74に参加してきました。運営の方々、本当にありがとうございました。様々な観点で、とても学びの多い機会になりました🙋次回以降のPython KansaiもMix Leap Studyも参加したいと思います。

ノートブックをキレイにするためのTips

「PyCon APAC 2023」のPoster Sessionにおいて発表した「ノートブックをキレイにするためのTips」を記事として書き起こしたものになります。

2023-apac.pycon.jp

ポスターは以下から閲覧が可能です。

speakerdeck.com

概要

Jupyter NotebookやGoogle Colaboratoryなどのノートブックは、データ分析などの目的で使用されるインタラクティブにコードの記述や実行が可能な開発環境です。作成したノードブックを他者や未来の自分が改めて閲覧や実行をする可能性がある場合、実装の意図を伝えるために可読性を高く、意図した振る舞いを担保するために堅牢性を高くすることが大事です。ただし、ノートブックはそれ自体がソフトウェアとして実装されるものではないことから、可読性や堅牢性を向上させるメリットとコストのトレードオフを特に注意する必要があります。本発表では、ノートブックの可読性や堅牢性を向上させる(キレイにする)ために、可能な限りコストをかけずにメリットを得る方法(Tips)を紹介します。ご自身の管理されているノートブックの状況に合わせて、採用を検討してください。

管理コストの低いパラメータの扱い方

調整の可能性があるパラメータは、様々なセルに記述するのではなく、可能な限り少ないセルに集約すると、見通しが良く、管理コストが低くなります。そして、ノートブックの冒頭にあると、さらに見通しが良いです。実行毎に指定する値は、実行者が入力する仕組みにすると、その旨を伝えられます。

パラメータの集約

# 乱数の種
RANDOM_SEED = 2023
# PyCon APAC 2023のセッション数
NUMBER_OF_SESSIONS = 5

実行者が入力する仕組み

email_address = input("Eメールアドレスを入力してください: ")
Eメールアドレスを入力してください: 

コードに残さないセキュアな情報の扱い方

他者への共有が望ましくないパスワードなどのセキュアな情報は、漏洩するリスクから、コードでの管理が望ましくありません。実行者に入力させる仕組みにするか、環境変数として管理をすると、その旨を伝えられます。

実行者が入力する仕組み(入力内容をマスク)

from getpass import getpass
password = getpass("パスワードを入力してください: ")
パスワードを入力してください: 

環境変数として管理

import os
password = os.environ.get("PASSWORD")

意図を伝えるための変数と定数の定義

変数や定数を定義する際は、型ヒントやデータクラスにより、どんな内容を意図しているのかを示すことができます。

型ヒントによる意図の表現

conference_name: str = "PyCon APAC"
conference_year: int = 2023

データクラスによる意図の表現

from dataclasses import dataclass
@dataclass
class Conference:
    name: str
    year: int
conference = Conference(name="PyCon APAC", year=2023)

マジックナンバーの防止

マジックナンバーになり得る値は列挙型で定義をしておくことで、以降のコードにおいてマジックナンバーを防止することができます。

列挙型によるマジックナンバーになり得る値の定義

from enum import Enum, unique
@unique # 重複を防止
class Prefecture(Enum): # ※一部省略
    TOKYO = 13
    OSAKA = 27
print(f"PyCon APAC 2023の開催地:{Prefecture(13).name}")

後続処理への影響を避けるバリデーション

後続処理が期待していない値を検知するために、可能な限り早期にバリデーションをすると良いです。また、データのバリデーションを実現するライブラリであるpydanticを活用することで、パラメータや変数(定数)を容易かつ早期に検知することが可能です。

早期のバリデーション

FIRST_YEAR = 2010
assert conference_year > FIRST_YEAR

早期のバリデーション(pydantic)

from pydantic.dataclasses import dataclass, Field
FIRST_YEAR = 2010
@dataclass
class Conference:
    name: str
    year: int = Field(ge=FIRST_YEAR)
conference = Conference(name="PyCon APAC", year=2023)

関数の振る舞いを伝える簡易なテスト

doctestを使うことで、関数の振る舞い伝える簡易なテストの実現ができます。それに加えて、テストであることによって関数が意図した振る舞いであることを担保できます。

doctestを使った簡易なテスト

def add_year(year):
    '''
    >>> add_year(2023)
    2024
    '''
    return year + 1
import doctest
doctest.run_docstring_examples(add_year, globals())

セル内の冪等性を担保した変数の扱い方

特定のセルを複数回実行した場合であっても、後続処理に意図した値を伝えるために、セル内の冪等性を担保した変数の扱い方をすると良いです。例えば、変数を使いまわさない(変数の再代入をしない)ことが挙げられます。

変数を使いまわさない(変数の再代入をしない)

year = 2023
# year = year + 1
next_year = year + 1 # 冪等
# print(year)
print(next_year) = year + 1 # 冪等

その他

  • テキスト(Markdown)のセルによる説明の追加
  • 適度なセルの分割
  • 適度なファイルへの分割
  • フォーマッターの導入
  • リンターの導入
  • Gitの導入
  • 「すべてのセルを実行」で問題なく実行されることを確認
  • CI(継続的インテグレーション)の導入
  • コードレビューの実施(意図が伝えられていない箇所の洗い出し)
  • 「出力をすべて消去」した上で管理(オプション)

技術カンファレンスにおけるポスター発表の準備(備忘録)

先日、PyCon APAC 2023という技術カンファレンスにポスターセッションのスピーカーとして参加してきました。

2023-apac.pycon.jp

ポスターセッションでの発表(以下、ポスター発表)では、スライドを使った発表とは異なる準備が必要でした。本記事はそんなポスター発表の準備の備忘録です。今後、PyConに限らず、技術カンファレンスにおいて、ポスター発表をする方々の参考になれば幸いです。

参考までに作成したポスターは以下です。

speakerdeck.com

準備

前提として、用意していただける展示パネルのサイズは90.0cm×180.0cmでした。せっかくなので1枚のポスターを用意したい、その上でなるべくポスターのサイズを大きくしたいと考え、A0(84.1cm×118.9cm)を選択しました。

ポスターを作成するために使用するツールは「Google Slides」を選択しました。

www.google.com

Google SlidesでA0のポスターを作成するためにページ設定を84.1cm×118.9cmに変更しました。

デザインや様式については「学生・研究者のための伝わる! 学会ポスターのデザイン術」を参考にしました。

印刷はラクスルさんを利用しました。

raksul.com

他社さんとの比較が十分にはできていませんでしたが、よく名前を知っていたのが決め手で選択しています。用紙の種類について、今回印刷するポスターは画像がなく、文字が多かったため、半光沢紙を選択しました。PDFで入稿しました。

半光沢紙(オンデマンド印刷専用紙)

・特徴

オンデマンド専用の紙種です。 フォト光沢紙よりも光の反射を抑えた仕上がりで、文字が多いデザインにおすすめです。

引用:用紙の種類ガイド(ポスター印刷) | ご利用ガイド|印刷のラクスル

ありがたいことにかなりキレイに印刷していただきました。

ポスター

持ち運びはDAISOの「書類ケース 大」を使いました。

書類ケース 大jp.daisonet.com

ポスターが届く時の段ボールでも良さそうだったんですが、値段も「300円(税込330円)」安くオススメです。久しぶりに使ってみると、フタが取れたりしていたので、養生テープなど貼ったりして安定させることが良さそうです。

その後

Speaker Deckにて公開しました。

speakerdeck.com

まとめ

本記事をベースラインとして捉えていただいて、技術カンファレンスのポスター発表に興味のある方にとって参考になれば幸いです。

PyCon APAC 2023の振り返り

先日、PyCon APAC 2023にポスターセッションのスピーカーとして参加してきました。

2023-apac.pycon.jp

本記事はその記録です。

カンファレンス感

トーク

当日に会場で、後日にYouTubeで視聴しました。特に印象に残った3選を挙げます。

好きとか嫌いとかはいい、練習してテストを書けるようになるんだ

ftnext.github.io

テストコードの一歩目として非常にオススメです

引用:好きとか嫌いとかはいい、練習してテストを書けるようになるんだ

自分の発表でも言及していたのですが、低コストで導入できる「better than nothing」な打ち手として、doctestがオススメなんですよね・・・

docs.python.org

Pythonで スナップショットテスト

speakerdeck.com

スナップショットテストとは?


● 前回成功時の結果との一致を確認するテスト 


引用:Pythonで スナップショットテスト/ pyconjp2023 - Speaker Deck

そもそも「スナップショットテスト」を初めて知りました。選択肢という点で得られるものがありました。

業務で使える一歩進んだPython使いになるために

speakerdeck.com

すごく大事だと思っているテーマがまとまっています。

● インデントが深すぎると脳への負荷が高すぎる → 複雑度をツールで計測したり、for 文になったら分割。とにかく小さくする。

引用:業務で使える一歩進んだPython使いになるために / To become an advanced user of Python that can be used at work - Speaker Deck

複雑度や凝縮度を計測するツールとしては、以下などが考えられますね🤔

個人的には、複雑度や凝縮度を改善させるためのリファクタリングを実施するにあたって「ツールを活用した目標の設定と評価の導入*1」は必要だと考えています。それぞれがどのような使い勝手なのかを確認し、どのように活用できそうか考えてみたいところです。

スポンサーブース

「この会議を実現するためにスポンサーしていただいている企業の方々とは話さないといけないな」という考えのもとで9割ほどの企業とお話しさせていただきました。ノベルティも沢山いただきました。特に気に入っているのは、Findyさんからいただいた「タイポ用心」のお守りです!

技術カンファレンスではありますが、技術軸でさまざまな企業が取り組む事業を認識したり、解像度を高められたりしたので、良い時間を過ごせたとは思います。

ポスターセッション

ポスターセッションにて、「ノートブックをキレイにするためのTips」というタイトルで発表しました。

speakerdeck.com

ポスター発表では課題に共感いただいたり、打ち手に納得してもらえたり、フィードバックをいただいたりと、良い時間となりました。本発表では、ノートブックにおけるセキュアな情報の扱い方を紹介していましたが、タイムリーなことに、Google Colaboratoryではシークレットを管理する機能がリリースされたようです。とても便利そうですね。

また、これまでオンラインで参加していたコミュニティ(飛騨高山Pythonの会 - connpassはんなりプログラミングの会 - connpass)の方々とも初めてオフラインで挨拶したりとしました。

前回は最後から2番目が発表だったこともあり、それまで物理的にも気持ち的にもバタバタしていたため、発表以外の行動が十分ではなかった気がしています。今回は逆にインタラクティブな発表であったためかバタバタせず、割といろんな行動ができたと思っています。そのため、全体としてとてもいい時間を過ごせたと思っています。

アフターパーティーには参加していなかったのですが、そこでも展示していただいたようです。少しでも話の種になっていたらうれしいです。

その他

スプリントについて、昨年は参加したものの、今回は参加しませんでした。雰囲気が公開されていたのですが、会場や特にランチが良さそうで後悔しています。

発表においてノートパソコンは不要だったことと、荷物の制約もあり今回は持参していませんでした。iPhoneで十分でした。たまにはそんな参加もいいかもしれないです。

改めてですが去年も発表していました。

daikikatsuragawa.hatenablog.com

この一年で、去年の発表やその資料を見てくださって話してくださる方が数人いました。そのときに、あらかじめ自分の考えを理解してもらえていて、一度の発表がジワジワと恩恵をもたらしてくれるんだと実感しています。今回も会期は終えたものの何かにつながればいいなと淡い期待を抱いています。

まとめ

そんな様子でPyCon APAC 2023に参加してきました。運営の方々、本当にありがとうございました。様々な観点で、とても学びの多い機会になりました🙋今年は結果的にスポンサーブースに重心を置いていましたが、「社会の課題に対して、技術を使ってどのように解決するのか(しているのか)」と言った話を伺えたことが、よかったです。…それでは、来年もよろしくおねがいします🙇

次回のPyConJPは2023年9月らしいですね。

2023年1月〜6月のアレコレ

これは何?

2023年1月〜6月のアレコレを記録します。最近思ったことや思い出したことも書きます。ただし、殴り書きのままこの日(6月末)を迎えてしまったのでじわじわと追記する形式とします…

LLMな時代

昨年末頃からですがLLM(大規模言語モデル)な時代になりましたね。自分もChatGPTサブスクリプションプラン(ChatGPT Plus)にしてしまうほど使っています。アプリケーションとして公開されていることもあり誰でも使えるのがとてもいいですね。これからも使いこなしていきたい。活用方法を模索していきたい。

ポケモンの大会に挑む選手の方々がカッコイイ

最近、改めてポケモンが流行っていることもあり、アンテナを張っています。大会の動画を観戦したり、大会出場者のブログを読んだりしています。先日(2023年6月10日〜11日)はPJCS2023(ポケモンジャパンチャンピオンシップス2023)という大会がありました。

www.pokemon.co.jp

戦略的な奥深さも感じますが、各選手が各試合に対して振り返っていたりして、試合に挑む姿勢についても参考にもなります。

「PJCS2023ポケモンカードゲーム部門マスターリーグ」で優勝した方はルーティーンとしてご飯や願掛けなどにもこだわっているようで、自分もいざという時のルーティーンを決めておきたいと思いました。

note.com

自分も何かしらの大会に本気で挑みたい。

“願掛け”といえば

自分もいざという時のルーティーンを決めておきたいと思いました。

直前でこんなことを言っていましたが、最近の「ここぞ!」という時は以下のようなことをしていました。

  • 髪を切る&整える
  • 服をクリーニングに出す
  • 家族の物を見る&身につける

定めたい。

夏休みの自由研究

実家で掘り返す機会があり、中学生の頃の夏休みの自由研究を見返しました。仮説を立てた上でそれを検証するというフォーマットに従っていることや、1年目で発覚した課題に対して2年目で挑むという点で、大学以降で実施していた学術研究に通づるものがあるなと思い、我ながら感心した。その頃から大切なことを身につけていたのかもしれない。おそらく助言をくれたであろう両親、ありがとうございます。

「面白い話に昇華できる日々を送ること」

地元の家族や友人からするとちょっと珍しい人生を送っているのでそのネタを仕込む意識で過ごしていました。しばらくその意識がなくなっていましたが、仕事関係の方にも「面白い話(成否に関わらず何かしら挑戦した話)を用意しておけ!」と言われ、改めて意識しようと思っています。

フォトスキャン by Google

限られた時間でいくつかの写真をスキャンしスライドショーを作るという任務がありました。個人的にはちゃんと?スキャンしたい派なのですが、時間が限られているのでそうもいかず…そんな時、これがとても便利でした。大抵うまくいく。

www.google.com

ITは幸せな社会に貢献している。

未経験を経験し続ける

未経験を経験すること(0→1)はハードルが高いですが、経験してしまえば学びも多く、2回目、3回目のハードルは低い。意図して未経験を経験し続けます。

「逃げたら一つ、進めば二つ」

引用:機動戦士ガンダム 水星の魔女 公式サイト

心がけたい。

ちょっと贅沢なジュース

「アラン・ミリア」、ここぞという時に飲んでいます。

youtu.be

実は…

社会人としての転換期です。明日からも頑張ります💪

2023年

あけましておめでとうございます。

今年はこんな感じで頑張ろうと思います。

alu.jp

アドベントカレンダー作成記2022

これは何?

2019年以降、Qiitaのアドベントカレンダーに参加していました。今年はある機械学習ネタを公開したいと思っていたのですが、マッチングするテーマがありませんでした。そこで「機械学習」というテーマのアドベントカレンダーを作成しました。是非、ご覧ください。

qiita.com

私としてはテーマを作ること自体が初めてだったので、諸々を振り返ります。

振り返り

まずは全体について数字で結果を振り返ります。以下、2022年12月26日時点での数値です。

項目 件数
参加者 3
購読者 43
いいね(合計) 21
記事数 6

提示した数値がそれぞれ0ではなく、少なくとも意味のあるアドベントカレンダーを作成ができたとは思っています。Better than Nothingです。関わってくださった皆様、ありがとうございます🙇‍♂️。

ただし、アドベントカレンダーという企画を想像すると、記事数が25件を超えなかったことは残念ではあります。理由は以下だと思っています。

  • 作成日が遅かった(11/23)
  • 自分に影響力がない
  • 最悪自分が埋められる状態にない

一回やってみたので次回は色々と作戦を立てられるかと思いました。来年リベンジしたく思います。

ちなみに・・・

冒頭でこんなことを記載していました。

今年はある機械学習ネタを公開したいと思っていたのですが、

実はこれは間に合わず断念しました・・・これは後に本ブログにて公開したく思っています。