Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Pythonのじゃないけれど 本を書いた話
Search
GOTOH Shunsuke
July 08, 2023
Technology
0
380
Pythonのじゃないけれど 本を書いた話
Pythonのじゃないけれど
本を書いた話
GOTOH Shunsuke
July 08, 2023
Tweet
Share
More Decks by GOTOH Shunsuke
See All by GOTOH Shunsuke
あなたの知らない(概ね知らなくても良い)Juliaの世界 for JuliaLangJa 年末 LT 大会 2024
antimon2
0
48
Julia 新 LTS v1.10 解説 for JuliaTokai #20
antimon2
1
170
夏休みの(最後の)宿題 for JuliaTokyo #12
antimon2
1
190
Julia クイズ ~API編~ for JuliaTokai #19
antimon2
1
150
Julia でどうしても super().hoge みたいなことしたい人へ for JuliaTokai #18
antimon2
1
350
『実践Julia入門』 で 割愛したネタ for JuliaTokyo #11
antimon2
2
580
勉強会を主催したら 本を出して技術顧問になった話 for NGK2024S
antimon2
0
290
Julia本を書いたら技術顧問になった話 for JuliaTokai #17
antimon2
0
560
Juliaってどんなことができるの? for JuliaTokai #16
antimon2
1
620
Other Decks in Technology
See All in Technology
ガバメントクラウドのセキュリティ対策事例について
fujisawaryohei
0
530
PHPからGoへのマイグレーション for DMMアフィリエイト
yabakokobayashi
1
170
MLOps の現場から
asei
6
630
LINE Developersプロダクト(LIFF/LINE Login)におけるフロントエンド開発
lycorptech_jp
PRO
0
120
なぜCodeceptJSを選んだか
goataka
0
160
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
150
.NET 9 のパフォーマンス改善
nenonaninu
0
770
2024年にチャレンジしたことを振り返るぞ
mitchan
0
130
複雑性の高いオブジェクト編集に向き合う: プラガブルなReactフォーム設計
righttouch
PRO
0
110
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
520
Amazon VPC Lattice 最新アップデート紹介 - PrivateLink も似たようなアップデートあったけど違いとは
bigmuramura
0
190
[Ruby] Develop a Morse Code Learning Gem & Beep from Strings
oguressive
1
150
Featured
See All Featured
The Invisible Side of Design
smashingmag
298
50k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Automating Front-end Workflow
addyosmani
1366
200k
The Language of Interfaces
destraynor
154
24k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Building Your Own Lightsaber
phodgson
103
6.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Thoughts on Productivity
jonyablonski
67
4.4k
Transcript
Pythonのじゃないけれど 本を書いた話 2023/07/08 Python東海 第43回勉強会 antimon2(後藤 俊介)
お品書き • お前誰よ? • Juliaの紹介 • 書籍を執筆しました! • 経緯 •
公開サンプルコードに JupyterLab を採用した 理由
お前誰よ?
自己紹介 • 名前:後藤 俊介 • 所属:有限会社 来栖川電算 • コミュニティ:🌟機械学習名古屋, 🌟JuliaTokai,
⭐Python東海, ⭐jl.dev, … • 言語:Julia, Python, Scala(勉強中), … • SNS等: (@antimon2) • SNS等(2): (@antimon2.jl) • Julia 本 執筆しました!🆕
https://www.kurusugawa.jp
https://twitter.com/antimon2/status/1632998963505938432
簡単な Juliaの紹介
None
Julia とは?(1) • The Julia Language • 最新 v1.9.2(2023/07/05) ◦
LTS:v1.6.7(2022/07/19) ◦ 次期:v1.10.0-α1(2023/07/06) • 科学技術計算に強い! • 動作が速い!(LLVM JIT コンパイル)
Julia とは?(2) • Rのように中身がぐちゃぐちゃでなく、 • Rubyのように遅くなく、 • Lispのように原始的またはエレファントでなく、 • Prologのように変態的なところはなく、
• Javaのように硬すぎることはなく、 • Haskellのように抽象的すぎない ほどよい言語である 引用元:http://www.slideshare.net/Nikoriks/julia-28059489/8
Julia とは?(3) • C のように高速だけど、 Ruby のようなダイナミズムを併せ持っている • Lisp のような真のマクロを持ちながら、
MATLAB のような直感的な数式表現もできる • Python のように総合的なプログラミングができて、 R のように統計処理も得意で、 Perl のように文字列処理もできて、 MATLAB のように線形代数もできて、 shell のように複数のプログラムを組み合わせることもできる • 超初心者にも習得は容易でありながら、 ハッカーの満足にも応えられる • インタラクティブな動作環境もあって、コンパイルもできる (Why We Created Julia から抜粋・私訳)
要するに • 動的言語なのに速い! • 文法も覚えやすい! • 数値計算に強い!
Julia の主な特徴 • 多重ディスパッチ • 動的型システム • 並行・並列処理、コルーチン • 組込パッケージマネージャ
2020/07/10
発端 • 突然編集者の方から Twitter DM が届く • Qiita や Twitter
で Julia の 記事書いたり質問に答えていた のが目にとまった(らしい)
企画概要(当初の先方からの提案) • Juliaの入門的解説書。日本語でまとまった情報があまり提供されていない Juliaの仕様や特徴を理解してもらう。 • 前半ではリファレンス的に基本的な文法の解説をして、Juliaの仕様やコンセプ トを理解してもらう。 • 後半では数値計算や機械学習などをJuliaの長所を活かせる活用例を題材に、 効率的・実践的なコードの書き方を解説する。
• 「実は標準関数を使えば一発で解決できる問題に、面倒臭い書き方で対応して いる」ということがよくあるので、書籍全体を通じてそうした 誤解を解く知識 を随所に織り交ぜていく。
こちらからの逆提案 • Juliaの入門的解説書。日本語でまとまった情報があまり提供されてい ないJuliaの仕様や特徴を理解してもらう。(ここまでは同意) • 3部構成: ◦ 入門編:Juliaの仕様やコンセプトを理解してもらい、基本的な文法 の解説をして「Julia を使える」ようになってもらう
◦ 基本編:Julia の標準ライブラリ関数や固有の機能を詳解(>紹介) し、Julia を Juliaらしく使いこなす ことを目指す ◦ 実践編:実際の応用として執筆時点でホットな話題に着目し、より具 体的で実用的な実践への発展を目標とする
なんやかんや • 2023/03/15 刊行! https://twitter.com/antimon2/status/1635765451220459520
本日の本題はここから…
サンプルコード公開 • 刊行直前頃に、作り貯 めておいた Jupyter Notebook 形式のサ ンプルコードを Github で公開
https://github.com/antimon2/JuliaBook2023Samples.jl
サンプルコード公開 • 刊行直前頃に、作り貯 めておいた Jupyter Notebook 形式のサ ンプルコードを Github で公開
• (『“py”がつく』実績解除) https://github.com/antimon2/JuliaBook2023Samples.jl
JupyterLab • ご存じ Python ベースの Notebook 環境(IDE) • 言語カーネルを追加することで Python
以外の言語も扱える • もちろん Julia 用のカーネルも 存在(IJulia.jl) • てか Jupyter は 「Julia」+「Python」+「R」 から命名されたのは有名な話 ◦ “t” と “r” の間の “e” はどこから来 たの? 突っ込むところまでがセット w https://jupyter.org/
Pluto.jl • Pure Julia の Notebook 環 境 • シンプル・軽量を謳っている
• Julia の本だからこっちでも良 かったんじゃないの? ◦ というツッコミが入る可能性も当然 あったのですが… https://plutojl.org/
公開サンプルコードに JupyterLab を 採用した理由
JupyterLab vs Pluto.jl (1) JupyterLab (Jupyter Notebook) • セルごとの実行もできる(REPLと同じ感 覚)し、一括で実行もできる
• セルタイプを「Code」「Markdown」など と切り替えができる • 多機能で、多くの機能がキーボードショート カットでも操作できる 個人的にはセルのコピー機能が重宝してい る • ファイル形式は .ipynb 形式(各種メタ情報 や出力結果なども保持するJSON形式) Pluto.jl • セルの変更が、依存する他のセルに影響し 自動で再実行される (ノートブックを開いた直後は全て再実行が 走るので重い処理が書いてあると重い) • セルはJuliaの有効な式が入力できるだけ、 ただし `md”~”` で markdown を入力 できる(markdown文字列オブジェクト) • シンプルすぎてセルのコピー機能すらない (自分が知らないだけかもしれない…) • ファイル形式は .jl 形式(普通のJuliaソー スファイル形式、メタ情報はコメントとして 埋め込まれる) 基本機能の比較
JupyterLab vs Pluto.jl (2) JupyterLab (Jupyter Notebook) • セルの実行結果が特殊なオブジェクトの場 合は適切なレンダリング(例:画像(グラフプ
ロット含む)、表形式、Markdown等) • セルの先頭文字によって特殊入力(“?” で ヘルプ、“]” でパッケージモード等) • 『REPL でできることはほぼなんでもでき る』環境 ◦ module 定義できる ◦ ソフトスコープ(だったと思う、要確認) ◦ 複数行入力等 Pluto.jl • セルの実行結果が特殊なオブジェクトの場 合は適切なレンダリング(例:画像(グラフプ ロット含む)、表形式、Markdown等) • 特殊入力システムはない(“using XXX” 等 としたときそのパッケージが未導入なら勝 手に導入してくれる便利機能はあり) • 色々制限あり: ◦ module 定義できない ◦ ハードスコープ(だったと思う、要確認) ◦ 複数行入力したかったら明示的にブロック (begin~end)を記述する必要あり Julia の実行環境としての機能比較
JupyterLab vs Pluto.jl (3) • module が定義できない ◦ Julia の入門書として「module」の定義は当然必要になってくるがそれがサン
プルコードとして提供できない • 標準出力が直感的に表示できない(できなかった) ◦ 執筆時点 ◦ こちらは昨年辺りのバージョンで改善され普通に `println()` の結果がセル の下に表示されるようになった • REPL との感覚があまりに違いすぎる ◦ 書籍内のコードはほぼ全て「REPL に打ち込んで動かしてみる」という体で記述 していたのでそれに全く合わない Pluto.jl を採用しなかった決定的な理由
JupyterLab vs Pluto.jl (4) • REPL との感覚の差があまりない ◦ 書籍内のコードはほぼ全て「REPL に打ち込んで動かしてみる」という体で記述
していたのでそれとかなりよくマッチする • プレイグラウンドも充実している ◦ MyBinder、Google Colab、Studio Lab 等でオンラインで実行できる ◦ MyBinder と Studio Lab についてはリポジトリトップに launch ボタンも ◦ (なお Pluto.jl 形式のノートブックも MyBinder で実行できる) • REPL で実行する用の .jl ファイルも簡単に出力できた ◦ jupytext を利用 JupyterLab を採用した建設的な理由
結論 • Jupyter notebook (JupyterLab) やっぱよくできてる • 今回の要件には Jupyter notebook
形式が最適
補足(弁護) • Pluto.jl も「実験結果の共有」には便利だよ ◦ ノートブック編集画面の見た目そのままHTML化 ◦ HTML 形式で出力すると 元の
.jl ファイル (Pluto.jl ノートブック形式)のダウンロードもでき る • 要は目的による使い分け・棲み分け
まとめ
まとめ • Jupyter 良い! • Julia も良いよ!
おまけ
数学と物理における Juliaの活用 • 7/10-12 九州大学(福岡)に 行ってきます • Julia のチュートリアル講演して きます(3コマのうち後ろ2コマ、
約2時間(!)) • オンライン視聴できる(まだ申込 受け付けている)そうなので、ご 興味があればぜひ! https://akio-tomiya.github.io/julia_imi_workshop2023/
実践Julia入門 • 2023/03/15 刊行! • ご興味があればぜひ! https://twitter.com/antimon2/status/1635765451220459520
ご清聴ありがとうございます。