Julia v1.3-DEV の紹介 === <!-- .element: style="font-size: 300%" --> <!-- .slide: data-background-color="rgba(102,130,223,0.3)" --> 2019/06/15 機械学習 名古屋 第20回勉強会 antimon2(後藤 俊介) Note: スポンサー枠(?)LTスライドですっ ---- <!-- .slide: data-background-color="rgba(102,130,223,0.3)" --> ## お品書き + お前誰よ? + 来栖川電算の紹介 + Juliaの紹介 + v1.3-DEV --- <!-- .slide: data-background-color="rgba(102,130,223,0.3)" --> # お前誰よ? ---- <!-- .slide: data-background-color="rgba(102,130,223,0.3)" --> ## 自己紹介 + 名前:後藤 俊介 + 所属:**[有限会社 来栖川電算](https://www.kurusugawa.jp)** + コミュニティ:**[機械学習名古屋](https://machine-learning.connpass.com/)**, **[JuliaTokai](https://juliatokai.connpass.com/)**:new:, [Python東海](https://connpass.com/series/292/), Ruby東海, … + 言語:**[Julia](https://julialang.org)**, Python, Scala(勉強中), Ruby, … + ![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):new: Note: 今日も Julia の話っ --- <!-- .slide: data-background-color="rgba(44,214,221,0.3)" --> # 来栖川電算 Note: スポンサー枠っ ---- <!-- .slide: data-background-color="rgba(44,214,221,0.3)" --> [![有限会社来栖川電算](https://i.imgur.com/8Kuhfel.png) https://www.kurusugawa.jp](https://www.kurusugawa.jp) Note: 見に来てねっ ---- <!-- .slide: data-background-color="rgba(44,214,221,0.3)" --> [![来栖川電算 ホーム Facebook](https://i.imgur.com/IQptAKC.jpg) https://www.facebook.com/kurusugawa.jp](https://www.facebook.com/kurusugawa.jp) Note: 『いいね!』してねっ ---- <!-- .slide: data-background-color="rgba(44,214,221,0.3)" --> <iframe src="//www.slideshare.net/slideshow/embed_code/key/4LidTI9tGbRQAJ" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/youheiyamaguchi/jaws-days-2019" title="JAWS DAYS 2019" target="_blank">JAWS DAYS 2019</a> </strong> from <strong><a href="https://www.slideshare.net/youheiyamaguchi" target="_blank">陽平 山口</a></strong> </div> Note: 2/23 に行われた JAWS DAYS 2019 での弊社山口の発表資料っ ---- <!-- .slide: data-background-color="rgba(44,214,221,0.3)" --> ## 概要 + 設立 2003年(名古屋工業大学発ベンチャー) + 従業員 69人(メイドさんも含めて!) + ここ最近人が増えた Note: 従業員にはバイトも含まれています。 ---- <!-- .slide: data-background-color="rgba(44,214,221,0.3)" --> ## SF 世界の技術を実現し、<br>社会に役立てる + AI 技術のライセンス販売・研究開発・SI + 文字認識,物体認識,動作認識,行動認識 + アプリの企画・制作・運営 Note: マルチっ! ---- <!-- .slide: data-background-color="rgba(44,214,221,0.3)" --> ## 技術者集団 + 最先端の AI 技術 + 文字認識、物体認識、モーション認識 + 限界性能を引き出す実装技術 + 高精度化、高速化、省資源化、並列化、分散化 + 高品質なソフトウェアを実現する技術 + 言語・アーキテクチャ・プロセスに対する深い造詣 ---- <!-- .slide: data-background-color="rgba(44,214,221,0.3)" --> ## ワンストップ開発 + データ収集・アノテーション + AI(認識技術)の研究開発 + アプリの企画・制作・運営 + 自社製実験パイプライン Note: アノテーションツールも自社製っ 基本使用料無料で誰でも使えますっ! ---- <!-- .slide: data-background="https://i.imgur.com/XuAkn8y.png" data-background-color="rgba(44,214,221,0.3)" --> Note: ![体制](https://i.imgur.com/XuAkn8y.png) ---- <!-- .slide: data-background-color="rgba(44,214,221,0.3)" --> ## 製品・サービス + 画像認識API(ライセンス販売) + 物体認識(研究開発→SI) + 走行画像リアルタイム認識、地図生成 + モーション認識 + [毎朝体操](http://maiasa.jp/) + 研究開発支援 + **ANNOFAB(アノテーションツール)** + AHAB(実験スケジューラ) Note: 今回 ANNOFAB について別の者から発表あります! ---- <!-- .slide: data-background="https://i.imgur.com/XaH6sgN.jpg" data-background-color="rgba(44,214,221,0.3)" --> Note: ![事例・製品・サービス](https://i.imgur.com/XaH6sgN.jpg) ---- <!-- .slide: data-background-color="rgba(44,214,221,0.3)" --> ## 求人等 + 研究(認識技術) + 開発(サーバサイド/フロントエンド) + 企画(アプリ/サービス) + デザイナ Note: 学生の皆さん、転職者の皆さん、力を貸してくださいっ ---- <!-- .slide: data-background="https://i.imgur.com/5CbxlN7.jpg" data-background-color="rgba(44,214,221,0.3)" --> Note: ![募集中!](https://i.imgur.com/5CbxlN7.jpg) --- <!-- .slide: data-background-color="rgba(213,99,92,0.3)" --> # Julia の紹介 ---- <!-- .slide: data-background-color="rgba(213,99,92,0.3)" --> [![Julia](https://upload.wikimedia.org/wikipedia/commons/6/69/Julia_prog_language.svg)<!-- .element: style="background:white;max-width:80%" -->](https://julialang.org) ---- <!-- .slide: data-background-color="rgba(213,99,92,0.3)" --> ## Julia とは?(1) + [The Julia Language](https://julialang.org) + 2018/08/08 に正式版 v1.0 がリリース! + 最新 v1.1.1(2019/05/16) + LTS v1.0.4(2019/05/16) + pre v1.2.0-rc1(2019/05/31) + 科学技術計算に強い! + 動作が速い!(LLVM JIT コンパイル) Note: ググるときはなるべく [julialang](https://www.google.co.jp/search?q=julialang) で! ---- <!-- .slide: data-background-color="rgba(213,99,92,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%" --> ---- <!-- .slide: data-background-color="rgba(213,99,92,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(213,99,92,0.3)" --> ## 要するに <!-- .element: style="font-size:300%" --> + 動的言語なのに速い! + 文法も覚えやすい! + 数値計算に強い! <!-- .element: style="font-size:180%" --> Note: 機械学習とかにも持って来いっ! ---- <!-- .slide: data-background-color="rgba(213,99,92,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(213,99,92,0.3)" --> ## 文法・関数 Note: 以降、ほぼ過去スライドからのコピペ。すっ飛ばして先へ進んで戴いてもOKっ ---- <!-- .slide: data-background-color="rgba(213,99,92,0.3)" --> ### 基本的な演算 ```julia julia> 1 + 2 - 3 * 4 # 四則演算(除算以外) -9 julia> 7 / 5 # `整数 / 整数` の結果は浮動小数 1.4 julia> 7 ÷ 5 # `整数 ÷ 整数` の結果は整数 1 julia> 2 ^ 10 # 冪乗は `^` 1024 julia> 123 & 234 | 345 # 論理積 / 論理和 376 julia> 123 ⊻ 234 # 排他的論理和(==`xor(123, 234)`) 145 ``` <!-- .element: style="font-size:46%" --> Note: 整数同士の除算は実数になりますっ 整数除算演算子 `÷` が別に存在します(Python の `//` 相当)っ また冪乗も(`**` ではなく)`^` ですっ `⊻` は `\xor`+<kbd>Tab</kbd> または `\veebar`+<kbd>Tab</kbd> で変換できますっ ちなみに先ほどの `÷` も `\div`+<kbd>Tab</kbd>で(基本的に ${\rm \TeX}$ の書式)っ ---- <!-- .slide: data-background-color="rgba(213,99,92,0.3)" --> ### 配列 ```julia julia> a = [1, 2, 3, 4, 5] 5-element Array{Int64,1}: 1 2 3 4 5 julia> a[1] # Julia は 1-origin 1 julia> println(a[2:3]) # 範囲指定は両端含む [2, 3] ``` <!-- .element: style="font-size:50%" --> Note: 1-origin であることに注意すればあとは普通の配列っ あと `a:b` は範囲(`Range`)の記法。両端を含む(Ruby の `a..b` と同じ)っ ---- <!-- .slide: data-background-color="rgba(213,99,92,0.3)" --> ### 配列の内包表記 (1) ```julia julia> a = [n^2 for n=1:5] 5-element Array{Int64,1}: 1 4 9 16 25 julia> A = [x+10y for y=1:3, x=1:3] 3×3 Array{Int64,2}: 11 12 13 21 22 23 31 32 33 ``` <!-- .element: style="font-size:50%" --> Note: 内包表記の記法は Python に類似っ かつ、`for` にカンマ区切りで複数のイテレータを渡すことで2次元以上の配列も作成可能っ ---- <!-- .slide: data-background-color="rgba(213,99,92,0.3)" --> ### 配列の内包表記 (2) ```julia julia> [(a,b,c) for c=1:15,b=1:15,a=1:15 if a^2+a*b+b^2==c^2] 6-element Array{Tuple{Int64,Int64,Int64},1}: (3, 5, 7) (5, 3, 7) (6, 10, 14) (7, 8, 13) (8, 7, 13) (10, 6, 14) ``` Note: Python と同様に `if` で条件を指定することも可能っ あと Python と同様、`[○ for ○=○]` を `(○ for ○=○)` と書くと配列ではなくて `Generator` が返りますっ ---- <!-- .slide: data-background-color="rgba(213,99,92,0.3)" --> ### ベクトル ```julia julia> x = [1., 2., 3.]; y = [3., 1., 2.]; julia> x + y # `x .+ y` と書いても同じ(elementwise operation) [4., 3., 5.] julia> x .* y # これは `x * y` と書くとNG [3., 2., 6.] julia> using LinearAlgebra julia> x ⋅ y # 内積(dot積、`dot(x, y)` と書いても同じ) 11.0 julia> x × y # 外積(cross積、`cross(x, y)` と書いても同じ) [1., 7., -5.] ``` <!-- .element: style="font-size:50%" --> Note: Julia では実は1次元配列がベクトルの扱いっ `⋅` は `\cdot`+<kbd>Tab</kbd>、`×` は `\times`+<kbd>Tab</kbd>(これらを利用するには `using LinearAlgebra` 必要)っ あとこれらや先ほどの `÷` や `⊻` などのように、ASCIIの範囲を超えたUnicode文字の演算子(そのほとんどが $\TeX$ 由来)が Julia にはたくさんあります(他には例えば比較演算子の `≤` `≥` や、集合の要素 `∈` や包含関係 `⊆` などなど) ---- <!-- .slide: data-background-color="rgba(213,99,92,0.3)" --> ### 行列 ```julia julia> A = [1 2; 3 4] # この記法は MATLAB/Octave 由来 2×2 Array{Int64,2}: 1 2 3 4 julia> A' # `○'` は転置行列の記法(これも MATLAB/Octave 由来) 2×2 LinearAlgebra.Adjoint{Int64,Array{Int64,2}}: 1 3 2 4 julia> transpose(A) # 正確には転置行列はこっち 2×2 LinearAlgebra.Transpose{Int64,Array{Int64,2}}: 1 3 2 4 ``` <!-- .element: style="font-size:50%" --> Note: Julia では2次元配列が行列の扱いっ あと `○.'` という書式は廃止されました(`transpose(A)` 使ってね)っ ---- <!-- .slide: data-background-color="rgba(213,99,92,0.3)" --> ### 行列の演算 ```julia julia> A = [1 2; 3 4]; B = [3 0; 0 6]; julia> A + B # A .+ B でも同様 2×2 Array{Int64,2}: 4 2 3 10 julia> A * B # matrix multiply 2×2 Array{Int64,2}: 3 12 9 24 julia> A .* B # elementwise multiply 2×2 Array{Int64,2}: 3 0 0 24 ``` <!-- .element: style="font-size:48%" --> Note: 行列は `*` で通常の行列積になりますっこれ便利っ ---- <!-- .slide: data-background-color="rgba(213,99,92,0.3)" --> ### ブロードキャスト ```julia julia> sin(0.1) 0.09983341664682815 julia> sin.([0.1, 0.2, 0.3, 0.4]) 4-element Array{Float64,1}: 0.0998334 0.198669 0.29552 0.389418 julia> [0.1, 0.2, 0.3, 0.4] .^ 2 # => [0.01, 0.04, 0.09, 0.16] ``` <!-- .element: style="font-size:50%" --> Note: 関数名と `(` の間に `.` を置くと、普通の関数を配列に拡張してくれる(ブロードキャスト)っ `.^` のように演算子の前に `.` を書いても同様(先ほど出た `.+` `.*` もブロードキャスト)っ ---- <!-- .slide: data-background-color="rgba(213,99,92,0.3)" --> ### 関数定義 ```julia julia> f(x) = x^2 + 2x - 1 f (generic function with 1 method) julia> f(1) 2 julia> f.(1:5) # => [2, 7, 14, 23, 34] ``` Note: 数学のように直感的な記述で関数を定義可能っ `2x` は `2*x` の省略形、曖昧さがなければリテラルと他の識別子が続く場合などに勝手に乗算と解釈してくれるっ またユーザ定義関数も `.` をつけて自動的にブロードキャスト対応っ ---- <!-- .slide: data-background-color="rgba(213,99,92,0.3)" --> ### 有理数・複素数 ```julia julia> 1//2 == 0.5 true julia> 1//2 - 1//3 1//6 julia> 1im ^ 2 == -1 true julia> (1.0 + 0.5im) * (2.0 - 3.0im) 3.5 - 2.0im ``` Note: 有理数・複素数を標準サポート。 `//` は有理数除算(結果は有理数) `im` は虚数単位。 どちらも四則演算も普通に書けますっ --- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> # v1.3-DEV …の、前に。 <!-- .element: class="fragment" --> --- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> # Semantic Versioning Note: 先にこれ説明 ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> <code>v<span><!-- .element: class="fragment highlight-red" data-fragment-index="1" -->**X**</span>.<span><!-- .element: class="fragment highlight-blue" data-fragment-index="2" -->**Y**</span>.<span><!-- .element: class="fragment highlight-green" data-fragment-index="3" -->**Z**</span></code> <!-- .element: style="font-size:360%" --> + <span><!-- .element: style="color:#ff2c2d" -->**`X`**</span>: メジャーバージョン<!-- .element: class="fragment" data-fragment-index="1" --> + <span><!-- .element: style="color:#1b91ff" -->**`Y`**</span>: マイナーバージョン<!-- .element: class="fragment" data-fragment-index="2" --> + <span><!-- .element: style="color:#17ff2e" -->**`Z`**</span>: パッチバージョン<!-- .element: class="fragment" data-fragment-index="3" --> ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ## Semantic Versioning > バージョンナンバーは、メジャー.マイナー.パッチ とし、バージョンを上げるには、 > > 1. APIの変更に互換性のない場合はメジャーバージョンを、 > 2. 後方互換性があり機能性を追加した場合はマイナーバージョンを、 > 3. 後方互換性を伴うバグ修正をした場合はパッチバージョンを上げます。 <!-- .element: style="font-size:65%" --> 引用元:https://semver.org/lang/ja/ (公式日本語訳) <!-- .element: style="font-size:60%" --> Note: メジャーバージョンが同じ → 破壊的な仕様変更はない! マイナーバージョンが上がる → 非破壊的な機能追加がある! パッチバージョンが上がる → バグ修正の他、パフォーマンス改善などもあり! ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ## Julia の <span>メジャーバージョン<!-- .element: style="white-space:nowrap" --></span> <!-- .element: style="font-size:200%" --> + v1.0 で動いたコードは、v1.1 でも v1.2 でも動く! + v2.x では動かなくなるかも<!-- .element: style="font-size:71%" --> <!-- .element: style="font-size:160%;padding-top:20px" --> Note: **基本的には**、という註釈が必要。公開されていないAPIは変更されることがあるので。 ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ## Julia の <span>マイナーバージョン<!-- .element: style="white-space:nowrap" --></span> <!-- .element: style="font-size:200%" --> + v1.1 で動くコードが v1.0 で動くとは限らない! + v1.2 vs v1.1 も同様<!-- .element: style="font-size:80%" --> <!-- .element: style="font-size:160%;padding-top:20px" --> Note: ライブラリの開発等はなるべく下位マイナーバージョンで! ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ## Julia の <span>パッチバージョン<!-- .element: style="white-space:nowrap" --></span> <!-- .element: style="font-size:200%" --> + パッチリリースされたら更新しよう! + バグ修正、パフォーマンス改善!<!-- .element: style="font-size:80%" --> <!-- .element: style="font-size:160%;padding-top:20px" --> Note: 逆に特に今困っていなければパッチ上げないという選択肢もなきにしもあらず。。。 --- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> # v1.3-DEV 改めて。 Note: 改めて。 ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ## なぜ v1.3-DEV ? + v1.0→v1.1、v1.1→v1.2 よりも期待できる機能追加 + スレッド並列 + 令和対応(Unicode) + … Note: 令和対応(Unicode)は、私がプルリクに関与していますっ ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ## スレッド並列 ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ```julia= macro par(expr) thunk = esc(:(()->($expr))) quote local task = Task($thunk) task.sticky = false schedule(task) task end end ``` Note: スレッド並列を実現するためのマクロの定義 ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ```julia=11 function fib(n) if n ≤ 1 return n else return fib(n-1) + fib(n-2) end end ``` Note: 時間のかかる処理の例として、フィボナッチ数の単純再帰バージョン。 ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ```julia=21 const N = 40 const N_TASKS = 128 println("Sequential:") @time [fib(N) for _ in 1:N_TASKS] println("Parallel:") @time fetch.([@par fib(N) for _ in 1:N_TASKS]) ``` ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ```bash $ env JULIA_NUM_THREADS=4 julia-DEV --project par.jl Sequential: 70.100689 seconds (51.92 k allocations: 2.617 MiB) Parallel: 31.864914 seconds (471.06 k allocations: 24.700 MiB, 0.03% gc time) ``` ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ### `Channel` も使える ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ```julia=31 function create_channel() function _producer(channel::Channel{Task}) for i = 1:N_TASKS put!(channel, @par fib(N)) end close(channel) end channel = Channel{Task}(32) @par _producer(channel) channel end ``` ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ```julia=43 using BenchmarkTools println("Sequential:") @btime sum(fib(N) for _ in 1:N_TASKS) println("Parallel1:") @btime sum(fetch, [@par(fib(N)) for _ in 1:N_TASKS]) println("Parallel2:") @btime sum(fetch, create_channel()) ``` ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ```bash $ env JULIA_NUM_THREADS=4 julia-DEV --project par2.jl Sequential: 66.466 s (6 allocations: 112 bytes) Parallel1: 29.698 s (1186 allocations: 93.66 KiB) Parallel2: 29.968 s (1354 allocations: 98.00 KiB) ``` ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> + データのバッチ生成に使える! + [データのバッチ生成 with Julia](https://hackmd.io/@antimon2/r1iFiQXyf)(機械学習 名古屋 第13回勉強会 発表資料)参照 + テンソル計算等も高速化期待できる! Note: マルチプロセス(RemoteChannel)を使わずに出来る! テンソル計算は実装次第?内部的な話になるし… ---- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> ## 次回 + Julia のスレッド並列を有効活用した機械学習関連の何か実例! <!-- .element: style="font-size:200%" --> ※予定は未定ですっ <!-- .element: class="fragment" style="text-align:right;font-size:60%" --> Note: ※予定は未定ですっ --- <!-- .slide: data-background-color="rgba(96,173,81,0.3)" --> # 参考リンク + [julia/NEWS.md](https://github.com/JuliaLang/julia/blob/fd03c24720f5df8e3b86ee61cea2494dbde6c063/NEWS.md)(2019/06/14 18:00 時点の最新) + [Parallel execution](https://gist.github.com/bicycle1885/e3be8a4e0d543c488f2f752eed2b08fa) by [@bicycle1885](https://gist.github.com/bicycle1885) + [データのバッチ生成 with Julia](https://hackmd.io/@antimon2/r1iFiQXyf)(機械学習 名古屋 第13回勉強会 発表資料) + [Semantic Versioning 2.0.0](https://semver.org/) + 公式日本語訳:[セマンティック バージョニング 2.0.0](https://semver.org/lang/ja/) --- <!-- .slide: data-background-color="rgba(170,121,193,0.3)" --> # おまけ ---- <!-- .slide: data-background-color="rgba(102,130,223,0.3)" --> ## JuliaTokai <!-- .element: style="font-size: 360%" --> Note: 姉妹勉強会の簡単な紹介っ ---- <!-- .slide: data-background="https://i.imgur.com/uG5pyZ4.jpg" data-background-color="rgba(96,173,81,0.3)" --> Note: 前回の勉強会の様子 ![前回の勉強会の様子](https://i.imgur.com/uG5pyZ4.jpg) ---- <!-- .slide: data-background-color="rgba(102,130,223,0.3)" --> [![JuliaTokai グループページ - connpass](https://i.imgur.com/jRfbB2E.jpg)https://juliatokai.connpass.com/](https://juliatokai.connpass.com/)<!-- .element: style="font-size: 80%" --> Note: 勉強会の告知・募集サイトっ! ---- <!-- .slide: data-background-color="rgba(102,130,223,0.3)" --> ### 勉強会の内容 + [Julia](https://julialang.org) の東海地方ユーザグループ + Julia に関すること、以外特にテーマは決めない! + 基本、もくもく会 Note: 難しくないよーこわくないよー ---- <!-- .slide: data-background-color="rgba(102,130,223,0.3)" --> ### 次回 + 2019/08/xx(土):第3回開催予定! + 詳細未定 + 場所未定っ Note: 次回も、基本もくもく会の予定っ! ---- <!-- .slide: data-background-color="rgba(44,214,221,0.3)" --> ## 来栖川電算 Note: スポンサー枠っ ---- <!-- .slide: data-background="https://i.imgur.com/5CbxlN7.jpg" data-background-color="rgba(44,214,221,0.3)" --> Note: ![募集中!](https://i.imgur.com/5CbxlN7.jpg) --- <!-- .slide: data-background-color="rgba(170,121,193,0.3)" --> ご清聴ありがとうございます。 Note: ご清聴ありがとうございますっ!
{"metaMigratedAt":"2023-06-14T22:14:48.146Z","metaMigratedFrom":"YAML","title":"Julia v1.3-DEV の紹介","breaks":true,"slideOptions":"{\"transition\":\"slide\",\"theme\":\"league\"}","contributors":"[{\"id\":\"80062a4b-8dad-49ac-95bf-848ce0686e9e\",\"add\":7206,\"del\":3822}]"}
    1212 views