Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Julia本を書いたら技術顧問になった話 for JuliaTokai #17
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
GOTOH Shunsuke
December 10, 2023
Technology
710
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Julia本を書いたら技術顧問になった話 for JuliaTokai #17
JuliaTokai #17 LT資料
GOTOH Shunsuke
December 10, 2023
More Decks by GOTOH Shunsuke
See All by GOTOH Shunsuke
JuliaTokaiとしてはこれが最後かもしれない(仮) for NGK2026S
antimon2
0
310
JuliaでApp(仮) for JuliaTokai #23
antimon2
0
190
関数型まつりレポート for JuliaTokai #22
antimon2
0
310
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
1.6k
FP in Julia « SIDE: J » for JuliaTokai #21
antimon2
1
280
JuliaTokaiとJuliaLangJaの紹介 for NGK2025S
antimon2
1
410
あなたの知らない(概ね知らなくても良い)Juliaの世界 for JuliaLangJa 年末 LT 大会 2024
antimon2
0
230
Julia 新 LTS v1.10 解説 for JuliaTokai #20
antimon2
1
480
夏休みの(最後の)宿題 for JuliaTokyo #12
antimon2
1
330
Other Decks in Technology
See All in Technology
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
270
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
1
1.1k
大阪オフィスに Unitree Go2 がやってきたので Physical AI やってみた
dafujii
0
240
IR Today: Theory, Practice, and Agents
dtunkelang
0
330
Codex概要
ymiya55
0
240
AWS DevOps Agent スキルをつかいこなそう / Master AWS DevOps Agent Skills
kinunori
2
670
SDDの運用にめげずに向き合った話
sansantech
PRO
0
110
GitHub Agentic Workflows を触ってみる
htkym
2
920
The seven pitfalls of AI (revised version)
ufried
0
210
AIに攻撃される前に、AIに攻撃させる
tsuchikazu
0
120
生成AIと進める探索的データ分析(2026.10.03 第122回Tokyo.R勉強会)
tatamiya
2
1.2k
あなたの知らないAmazon VPC Route Server/Amazon VPC Route Server you don't know about
masakiokuda
2
210
Featured
See All Featured
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
860
What's in a price? How to price your products and services
michaelherold
247
13k
sira's awesome portfolio website redesign presentation
elsirapls
0
430
Building Adaptive Systems
keathley
44
3.2k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
430
Deep Space Network (abreviated)
tonyrice
0
350
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
550
Leo the Paperboy
mayatellez
10
2.3k
Writing Fast Ruby
sferik
630
63k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
330
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
310
Transcript
Julia本を書いたら 技術顧問になった話 2023/12/10 JuliaTokai #17 antimon2(後藤 俊介)
お品書き • お前誰よ? • 簡単な Julia の紹介 • Julia本 発刊から約9ヶ月
• Juliaでお仕事!
お前誰よ?
自己紹介 • 名前:後藤 俊介 • 所属:有限会社 来栖川電算 • コミュニティ:🌟JuliaTokai, 🌟機械学習名古屋,
⭐Ruby東海, ⭐Python東海, ⭐jl.dev, … • 言語:Julia, Python, Ruby, … • SNS等: (@antimon2) • SNS等(2): (@antimon2.jl) • 著書:実践Julia入門
https://www.kurusugawa.jp
https://twitter.com/antimon2/status/1635765451220459520
簡単な Juliaの紹介
None
Julia とは?(1) • The Julia Language • 最新 v1.9.4(2023/11/14) ◦
LTS:v1.6.7(2022/07/19) ◦ 次期:v1.10.0-RC2(2023/12/03) • 科学技術計算に強い! • 動作が速い!(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 の主な特徴 • 多重ディスパッチ • 動的型システム • 並行・並列処理、コルーチン • 組込パッケージマネージャ
Julia本 発刊から約9ヶ月
https://www.amazon.co.jp/o/ASIN/4297133504
https://www.amazon.co.jp/product-reviews/4297133504/ref=c m_cr_dp_d_show_all_btm?ie=UTF8&reviewerType=all_reviews
¾年で変わったこと、イベント
研究集会に呼ばれた • 2023/07/10-12 • Juliaチュートリアル講演 2コマ担当 • アーカイブ(動画): ◦ 型と多重ディスパッチ
◦ スレッド並列の基礎 https://joint.imi.kyushu-u.ac.jp/post-9030/
印税 • 2023/06 最初の振込 ◦ 最低保証部数分 ◦ +電子版の売上分 • 2023/12
2回目の振込(まだ) ◦ 電子版の売上分 • ※詳細割愛
Juliaの仕事(10月~) • 会社に案件打診 • 10月から開始 • この後詳しく…
Juliaでお仕事!
Julia の (もしくは一般的なプログラミングの) お仕事 • 受託開発 ◦ 特定の環境で動くシステムのプログラミング、など • 研究開発
◦ 最新技術等を用いて課題を解決する業務、など • (サイエンス) エンジニアリング ◦ 数値計算や各種データ分析手法を用いた分析・提案など • etc… 今回は…
技術顧問
経緯 (0) お客さま側の経緯 (before first contact)… • ある大規模データを扱うプロダクトを Julia で開発中
• 共同開発者 もしくは 技術顧問 的な人員を探していた • 拙著 『実践Julia入門』 を参考書の1つとして読んでいただ いていた • 奥付の著者(私)の所属会社名を ググってコンタクト
経緯 (1) こちら側の経緯 (after first contact)… • 所属会社のお問い合わせフォームにてコンタクトあり • 概要を聞いて
「ぜひ協力したい!」 と返答 : (メール および オンラインミーティングでのやり取り) • 正式に契約!
契約内容 • コンサル(技術顧問) っぽい 契約 ◦ 共同開発という形ではない ◦ 作業内容としては技術面 (およびJulia言語的側面)
でのレビュー およびアドバイス (コンサルティング) • 契約形態としては 請負契約 ◦ (お客さま側の) 都合により コンサル契約(準委任契約) できず ◦ 成果物として指摘内容等をまとめたものを納品すればOK • 期間 ◦ 2023/10~12
レビュー (アドバイス) 基準 的なもの • 見る点 ◦ Julia における 効率の良いコード・悪いコード
◦ 特に マルチスレッド 関連 (あまり経験がない) ◦ その他、一般的なコーディング技術面 (下記を除く) • 見ない点 ◦ コードフォーマット (お客さま独自規約のためスルー) ◦ 命名規則 (お客さま独自規約のためスルー)
指摘・提案例 (1) スレッドの競合 • マルチスレッドで期待 通りに動作しない箇 所の発見 • ⇒「ロック機構 (排他
制御) 使いましょう」 という指摘・修正提案 例→ q = Vector{DataFrame}() count = 0 some_proc(args...) do ts1, t2, t3 t1 = read_table(ts1) push!(q, t1, t2, t3) count += 1 end q = Vector{DataFrame}() count = 0 spinlock = Threads.SpinLock() some_proc(args...) do ts1, t2, t3 t1 = read_table(ts1) @lock spinlock begin push!(q, t1, t2, t3) count += 1 end end
指摘・提案例 (2) スレッドによる非同期動作 • マルチスレッドで非同 期で動作するために テストがこける • ⇒無理矢理にでも同 期を取って順序を保
つテクの提案 例→ q = Vector{DataFrame}() count = 0 spinlock = Threads.SpinLock() some_proc(args...) do ts1, t2, t3 t1 = read_table(ts1) @lock spinlock begin push!(q, t1, t2, t3) count += 1 end end q = Vector{DataFrame}() count = 0 spinlock = Threads.SpinLock() some_proc(args...) do ts1, t2, t3 wait_by_read_air(ts1) # ここで同期を取る t1 = read_table(ts1) @lock spinlock begin push!(q, t1, t2, t3) count += 1 end end
指摘・提案例 (3) ユーザ定義型の等価性 • パフォーマンス面でよ ろしくないコード • ⇒生成関数 を利用し て半自動化かつパ
フォーマンスの良い コードの提案 例→ @generated function _equals(a::T, b::T) where T _cmp(name) = :(getfield(a, $(QuoteNode(name))) == getfield(b, $(QuoteNode(name)))) mapfoldr(_cmp, (x,y) -> :($x && $y), fieldnames(T), init=true) end # 無駄なアロケーション発生しない速い Base.:(==)(a::Hoge, b::Hoge) = _equals(a, b) getfields(obj) = [getfield(obj, name) for name in fieldnames(typeof(obj))] _equals(a,b) = getfields(a) == getfields(b) # ←↑無駄なアロケーション発生するし遅い Base.:(==)(a::Hoge, b::Hoge) = _equals(a, b)
指摘・提案例 (4) マルチスレッド時のメモリ消費問題 • 「スレッド数は増やしたいけれど、闇雲に増やすとその分比 例してメモリ消費するんですよね…」 ◦ ⇒Base.Semaphore() というのがあります! ◦
FoldsThreads.jl の TaskPoolEx を利用すれば、件 数/スレッド (basesize) と スレッド数/処理 (=セマ フォ、ntasks) 両方指定できます • ※コード例なし(提案を受け先方で検討中)
指摘・提案例 (5) その他… • パイプライン演算子(|>)や @chain による「全て計算してから次の計 算に渡す」ような実装になってしまっている箇所の発見・指摘 ◦ ⇒遅延リスト(ジェネレータ)
や any() 関数の適切な使用による パフォーマンス向上案を提案 • ifelse() 関数の問題点の指摘 (第2・第3引数がともに評価(≒実 行)されてしまう) ◦ ⇒普通に 三項演算子 (~ ? ~ : ~) 使いましょう • プロファイリング や @code_warntype とか見た方が良いかも? ◦ 残りの契約時間で可能な限り実施
お客さまの反応 • 上々! ◦ ※詳細割愛
個人の感想 • 超楽しい!! ◦ こういう仕事がしたかった♪
言いたかったこと… • 仕事の形には色々ある。 • 自分の強み・知識が活かせてお客さまにも 喜んでもらえる、そんな仕事ができている 幸せ♪
結論
結論 • 書籍の執筆 ⇒ 夢が一つ叶った♪ • Julia でお仕事 ⇒ もう一つ夢が叶った♪
• Julia 楽しいよ! • Julia でやるお仕事楽しいよ!
参考
参考文献・リンク等 • 実践Julia入門(拙著) • julialang.org(Julia 本家サイト)
ご清聴ありがとうございます。