そろそろ Julia (仮)
===
<!-- .element: style="font-size: 300%" -->
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
2021/01/23 NGK2021S
antimon2(後藤 俊介)
Note:
っ
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## お前誰よ?
+ 名前:後藤 俊介
+ コミュニティ:**[機械学習名古屋](https://machine-learning.connpass.com/)**, **[JuliaTokai](https://juliatokai.connpass.com/)**, **[NGK2021S](https://ngk2021s.netlify.app/)**, [jl.dev](https://jldev.connpass.com/):new:, [Python東海](https://connpass.com/series/292/), …
+ 言語:**[Julia](https://julialang.org)**, Python, Scala(), …
+ ![Twitter](https://i.imgur.com/HqouMIg.png)<!-- .element: class="plain" style="vertical-align:middle;background:transparent" --> [@antimon2](https://twitter.com/antimon2) / ![Facebook](https://i.imgur.com/01nPd37.png)<!-- .element: class="plain" style="vertical-align:middle;background:transparent" --> [antimon2](https://www.facebook.com/antimon2)
+ ![Github](https://i.imgur.com/yBKtii5.png)<!-- .element: class="plain" style="vertical-align:middle;background:transparent" --> [antimon2](https://github.com/antimon2/) / ![Qiita](https://i.imgur.com/FxHMi64.png)<!-- .element: class="plain" style="vertical-align:middle;background:transparent" --> [@antimon2](http://qiita.com/antimon2) / [<i class="fa fa-file-text"><!-- .element style="font-size:120%" --></i> @antimon2](https://hackmd.io/@antimon2)
Note:
今日も Julia の話っ
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
# NGK2021S
Note:
NGK2021S のスタッフやってますっ
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" data-transition="slide-in fade-out" -->
![LTタイムテーブル](https://i.imgur.com/ZhWnEhq.png)
Note:
LTタイムテーブルの…
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" data-transition="fade-in slide-out" -->
![LTタイムテーブル](https://i.imgur.com/1OkzfWA.png)
Note:
発表順の抽選(シャッフル)をしましたっ
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" data-transition="fade-in slide-out" -->
{%gist antimon2/3ab347b4fdb3f3fdf6e1e21fa5ea69b6 %}
Note:
こんなコード(と言うかnotebook)で Julia で抽選しましたっ
Julia ですっ
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
そろそろみんな Julia の有能さに気付いても良いころ
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
# Julia の紹介
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
[![Julia](https://raw.githubusercontent.com/JuliaLang/julia-logo-graphics/master/images/julia-logo-color.svg?sanitize=true)<!-- .element: style="background:white;width:80%" -->](https://julialang.org)
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## Julia とは?(1)
+ [The Julia Language](https://julialang.org)
+ 最新 v1.5.3(2020/11/09)
+ Upcoming v1.6.0-β1(2021/01/08)
→ 次のLTS!
+ LTS v1.0.5(2019/09/09)
+ 科学技術計算に強い!
+ 動作が速い!(LLVM JIT コンパイル)
Note:
もうすぐv1.6.0出ます!
ググるときはなるべく [julialang](https://www.google.co.jp/search?q=julialang) で!
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## Julia とは?(2)
> + Rのように中身がぐちゃぐちゃでなく、
> + Rubyのように遅くなく、
> + Lispのように原始的またはエレファントでなく、
> + Prologのように変態的なところはなく、
> + Javaのように硬すぎることはなく、
> + Haskellのように抽象的すぎない
>
> ほどよい言語である
<!-- .element: style="font-size:66%" -->
引用元:http://www.slideshare.net/Nikoriks/julia-28059489/8
<!-- .element: style="font-size:71%" -->
Note:
触ってみた人で、こんな感想を言った人がいます。
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## Julia とは?(3)
> + C のように高速だけど、
Ruby のような動的型付言語である
> + Lisp のようにプログラムと同等に扱えるマクロがあって、しかも
Matlab のような直感的な数式表現もできる
> + Python のように総合的なプログラミングができて、
R のように統計処理も得意で、
Perl のように文字列処理もできて、
Matlab のように線形代数もできて、
shell のように複数のプログラムを組み合わせることもできる
> + 超初心者にも習得は簡単で、
超上級者の満足にも応えられる
> + インタラクティブにも動作して、コンパイルもできる
<!-- .element: style="font-size:50%" -->
([Why We Created Julia](http://julialang.org/blog/2012/02/why-we-created-julia) から抜粋・私訳)
<!-- .element: style="font-size:71%" -->
Note:
本家の人も開発ブログでこんなこと言っていますっ
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## 要するに
<!-- .element: style="font-size:300%" -->
+ 動的言語なのに速い!
+ 文法も覚えやすい!
+ 数値計算に強い!
<!-- .element: style="font-size:180%" -->
Note:
機械学習とかにも持って来いっ!
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## 主な機能
<!-- .element: style="font-size:280%" -->
+ [多重ディスパッチ](https://docs.julialang.org/en/v1/manual/methods/)
+ [動的型システム](https://docs.julialang.org/en/v1/manual/types/)
+ [並行・並列処理](https://docs.julialang.org/en/v1/manual/parallel-computing/)、コルーチン
+ [組込パッケージマネージャ](https://docs.julialang.org/en/v1/stdlib/Pkg/)
<!-- .element: style="font-size:160%" -->
Note:
っ
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## 文法・関数
をいつもなら紹介するのですが…
<!-- .element: class="fragment" -->
Note:
5分しかないしNGKなのでっ
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
# Julia の紹介 <span>for 名古屋<!-- .element: class="fragment" --></span>
Note:
名古屋向けの Julia の紹介
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## 型システム
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
```graphviz
digraph TypeTree {
nodesep=1.0
node [fontname=Courier,shape=box,style=filled, fillcolor=gray95]
edge [arrowsize=0.8]
edge [arrowtail="empty" dir=back]
Any -> AbstractString
Any -> Number
Any -> _others
_others [label="...",shape=none,style=none,fillcolor=transparent]
AbstractString -> SomeStringSubtypes
AbstractString -> String
SomeStringSubtypes [label="...",shape=none,style=none,fillcolor=transparent]
Number -> Complex
Number -> Real
Real -> AbstractFloat
Real -> AbstractIrrational
Real -> Integer
Real -> Rational
AbstractFloat -> x1
x1 [label="...",shape=none,style=none,fillcolor=transparent]
AbstractFloat -> Float64
Integer -> Bool
Bool [label="...",shape=none,style=none,fillcolor=transparent]
Integer -> Signed
Signed -> Int
AbstractIrrational -> x2
x2 [label="...",shape=none,style=none,fillcolor=transparent]
Integer -> Unsigned
Unsigned -> x4
x4 [label="...",shape=none,style=none,fillcolor=transparent]
Signed -> x5
x5 [label="...",shape=none,style=none,fillcolor=transparent]
}
```
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
+ Nominative Typing
+ Nominal Subtyping
+ 型階層
<!-- .element: style="font-size:240%" -->
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
```julia
abstract type Point{T<:Real} end
struct Point2D{T} <: Point{T}
x::T
y::T
end
mutable struct MPoint2D{T} <: Point{T}
x::T
y::T
end
```
<!-- .element: style="font-size:70%" -->
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
+ Parametric Type
+ 型制約
+ あと型レベルで immutable/mutable
<!-- .element: style="font-size:244%" -->
Note:
Parametric Type は他言語の総称型(ジェネリクス)相当
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## 多重ディスパッチ
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
```julia
julia> double(x::Number) = 2x
double (generic function with 1 method)
julia> double(x::AbstractString) = x^2
double (generic function with 2 methods)
julia> double(π)
6.283185307179586
julia> double("😄")
"😄😄"
```
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
+ 関数を多重定義
+ 引数に合わせて実装実体を選んで実行
<!-- .element: style="font-size:244%" -->
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
```julia
julia> @code_typed double(1)
CodeInfo(
1 ─ %1 = Base.mul_int(2, x)::Int64
└── return %1
) => Int64
julia> @code_typed double(9.9)
CodeInfo(
1 ─ %1 = Base.sitofp(Float64, 2)::Float64
│ %2 = Base.mul_float(%1, x)::Float64
└── return %2
) => Float64
```
<!-- .element: style="font-size:66%" -->
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
```julia
julia> @code_typed double(π)
CodeInfo(
1 ─ return 6.283185307179586
) => Float64
```
<!-- .element: style="font-size:66%" -->
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
+ 型推論
+ シグニチャの違いによるコード生成
+ 徹底的な最適化
<!-- .element: style="font-size:244%" -->
Note:
+ 引数の型(シグニチャ)の違いで生成されるコードも変わる
+ 可能ならJITコンパイル前に既にインライン化
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
そろそろみんな Julia のことを
もっと知りたくなってきましたよね?
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
# Julia の情報収集
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## julialang.org
[![julialang.org](https://i.imgur.com/saT14Iq.png)https://julialang.org](https://julialang.org)
Note:
本家サイトっ
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
+ https://julialang.org
+ 公式サイト
+ バイナリ配布・ドキュメント・パッケージライブラリ・プレイグラウンド・その他
<!-- .element: style="font-size:151%" -->
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## Discourse
[![discourse.julialang.org](https://i.imgur.com/xBU8ZIL.png)https://discourse.julialang.org](https://discourse.julialang.org/)
Note:
っ
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
+ https://discourse.julialang.org
+ 公式アナウンス
+ Q&A
+ パッケージ公開情報
<!-- .element: style="font-size:160%" -->
Note:
新バージョン公開とうの公式アナウンスもここで。
あとユーザが「パッケージ公開したから見てね」という投稿も。
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## JuliaCon
[![JuliaCon 2021](https://i.imgur.com/exOpLxU.png)https://juliacon.org/2021](https://juliacon.org/2021/)
Note:
Julia のカンファレンスっ
毎年7月末頃に開催
昨年からオンライン開催で無料!
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
+ https://juliacon.org/2021
+ Julia のカンファレンス
+ 毎年7月末頃に開催
+ 昨年からオンライン開催で無料!
<!-- .element: style="font-size:165%" -->
Note:
Julia のカンファレンスっ
毎年7月末頃に開催
昨年からオンライン開催で無料!
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## JuliaTokyo
[![juliatokyo.connpass.com](https://i.imgur.com/t84djGB.png)https://juliatokyo.connpass.com](https://juliatokyo.connpass.com/)
Note:
日本で Julia コミュニティと言えばっ
ここ1年オフライン/オンラインどちらも勉強会開かれていませんがJuliaConとの連携はしている
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
+ https://juliatokyo.connpass.com
+ 日本の元祖 Julia コミュニティ
+ コロナ禍でミーティングなし
+ JuliaCon とは提携している
<!-- .element: style="font-size:150%" -->
Note:
っ
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## JuliaTokai
[![juliatokai.connpass.com](https://i.imgur.com/Ha31g5W.png)https://juliatokai.connpass.com](https://juliatokai.connpass.com/)
Note:
主催勉強会コミュニティ♪
年4回、ほぼ定期的に開催。
かなり初期からオフライン+オンラインで開催、ここ1年は完全オンライン開催♪
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
+ https://juliatokai.connpass.com
+ 私の主催コミュニティ
+ 年4回定期的開催
+ 完全オンライン
+ 次回:2021/02/13 第9回(予)
<!-- .element: style="font-size:165%" -->
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## jl.dev
[![jldev.connpass.com](https://i.imgur.com/ioqwtR9.png)https://jldev.connpass.com/](https://jldev.connpass.com/)
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
+ https://jldev.connpass.com/
+ 隔週でもくもく会(朝会/夜会)開催
+ 次回:2021/02/xx 第2回開発合宿!(予)
<!-- .element: style="font-size:165%" -->
Note:
とにかくJulia で開発したい! というユーザが立ち上げたコミュニティ。
隔週でもくもく会(朝会/夜会)開催(後藤も毎回参加)
たまに開発合宿(1dayハッカソン)開催
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## その他
+ [Julia - Qiita](https://qiita.com/tags/julia)
+ [Juliaの記事一覧 | Zenn](https://zenn.dev/topics/julia?order=latest)
+ 日本語書籍:[1から始める Juliaプログラミング](https://www.coronasha.co.jp/np/isbn/9784339029055/)
+ twitter: [#julialang](https://twitter.com/hashtag/julialang)/[#Julia言語](https://twitter.com/hashtag/Julia%E8%A8%80%E8%AA%9E)
Note:
日本語の情報としてまぁこんなのもありますよ程度
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
# まとめ
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
[![JuliaTokai #09](https://i.imgur.com/INLMNdn.png)
https://juliatokai.connpass.com/event/202413/](https://juliatokai.connpass.com/event/202413/)<!-- .element: style="font-size:0.7em" -->
Note:
次回 JuliaTokai は2021/02/13っ
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
+ Julia 良いよ楽しいよ!
<!-- .element: style="font-size:320%" -->
Note:
っ
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
# おまけ
Note:
時間が余ったらっ
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
## 機械学習名古屋
<!-- .element: style="font-size: 360%" -->
Note:
姉妹勉強会の簡単な紹介っ
----
<!-- .slide: data-background="https://i.imgur.com/v8F7pzK.jpg" data-background-color="rgba(102,130,223,0.3)" -->
Note:
オフラインでやってた頃の勉強会の様子
![オフラインでやってた頃の勉強会の様子](https://i.imgur.com/v8F7pzK.jpg)
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
[![https://machine-learning.connpass.com/](https://i.imgur.com/GEqDaHw.png)https://machine-learning.connpass.com/](https://machine-learning.connpass.com/)<!-- .element: style="font-size:0.7em" -->
Note:
勉強会の告知・募集サイトっ!
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
### 勉強会の内容
+ みんなで手を動かして何か作る
+ みんなやってることを発表する
<!-- .element: style="font-size:150%" -->
Note:
難しくないよーこわくないよー
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
[![機械学習名古屋 第27回勉強会](https://i.imgur.com/25EW4aw.png)
https://machine-learning.connpass.com/event/201902/](https://machine-learning.connpass.com/event/201902/)<!-- .element: style="font-size:0.7em" -->
Note:
次回(本会)は2021/02/03っ
----
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
[![機械学習名古屋 研究会 #35](https://i.imgur.com/Y623oWr.png)
https://machine-learning.connpass.com/event/202294/](https://machine-learning.connpass.com/event/202294/)<!-- .element: style="font-size:0.7em" -->
Note:
次回(研究会)は2021/02/18っ
---
<!-- .slide: data-background-color="rgba(102,130,223,0.3)" -->
ご清聴ありがとうございます。
Note:
ご清聴ありがとうございますっ!
{"metaMigratedAt":"2023-06-15T18:36:57.260Z","metaMigratedFrom":"YAML","title":"そろそろ Julia (仮)","breaks":true,"slideOptions":"{\"transition\":\"slide\",\"theme\":\"league\"}","contributors":"[{\"id\":\"80062a4b-8dad-49ac-95bf-848ce0686e9e\",\"add\":15874,\"del\":17897}]"}