27
Julia 小小小小小小小小小小 JULIA TAIWAN 小小小 小小小

20170217 julia小程式到專案發布之旅

  • Upload
    -

  • View
    119

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 20170217 julia小程式到專案發布之旅

Julia 小程式到專案發布之旅JULIA TAIWAN 發起人 杜岳華

Page 2: 20170217 julia小程式到專案發布之旅

Outline

專案的長相 如何組織一個專案 寫測試 用 julia 套件管理系統測試 上 github 註冊

Page 3: 20170217 julia小程式到專案發布之旅

專案的長相 <project name>/

src/: source code test/: test code appveyor.yml LICENSE.md README.md REQUIRE: the requirement modules, including the Julia version

(necessary)

Page 4: 20170217 julia小程式到專案發布之旅

如何產生一個專案 自動產生一個專案

julia> PkgDev.generate("FooBar","MIT")

Page 5: 20170217 julia小程式到專案發布之旅

安裝 PkgDev

julia> Pkg.add("PkgDev")julia> using PkgDev

Page 6: 20170217 julia小程式到專案發布之旅

一些命名規則 別用術語 別用 `Julia` 提供新型別的套件,請用複數, `DataFrames` 套件提供

`DataFrame` 型別 偏好明確而長的套件名稱,而不是短而模糊

Page 7: 20170217 julia小程式到專案發布之旅

一些命名規則 使用非系統性的命名來提供更多樣的實作

在 Julia 中沒有提供一個固定的繪圖套件, Gadfly 、 PyPlot 、 Winston 就提供了多樣的繪圖套件實作 相對, SortingAlgorithms 提供了一致性的介面跟全面性的實作

如果是包裝外部的 library ,請以該套件名稱命名 MATLAB.jl 提供了 Julia 呼叫 MATLAB engine 的介面

Page 8: 20170217 julia小程式到專案發布之旅

你可以在哪裡找到他 Linux

/home/$USER/.julia/v0.5/Foo Windows

C:\Users\%username%\.julia\v0.5\Foo Mac

? < 家目錄 >/.julia/< 版本 >/< 套件 >

Page 9: 20170217 julia小程式到專案發布之旅

Source code

src/ Foo.jl bar1.jl bar2.jl …

__precompile__()

module Foo

using ……import ……

export <lots of functionalities>

include(“bar1.jl")include(“bar2.jl")

end

Page 10: 20170217 julia小程式到專案發布之旅

Test code

test/ runtests.jl bar1.jl bar2.jl …

using Foousing Base.Test

tests = [“bar1", “bar2"]println("Running tests:")

for t in tests println(" * $(t)") include("$(t).jl")end

Page 11: 20170217 julia小程式到專案發布之旅

在開始 commit 之前 設定 git 申請 github 帳號

$ git config --global user.name "FULL NAME"$ git config --global user.email "EMAIL"$ git config --global github.user "USERNAME"

Page 12: 20170217 julia小程式到專案發布之旅

小技巧 在 Julia REPL 中按 `;`

Page 13: 20170217 julia小程式到專案發布之旅

Coding……

按照不同功能分別開成不同的 bar1.jl 、 bar2.jl 除了套件名稱大寫以外,其餘的都小寫 最好可以將功能拆解成

一個型別 ( 或物件 ) 一個檔案 太多的檔案可以用 folder 區隔開來

Page 14: 20170217 julia小程式到專案發布之旅

Best practice

Page 15: 20170217 julia小程式到專案發布之旅

Example ## Subject#

immutable Subject <: Functor valueend

function get(subject::Subject) return subject.valueend

function init_task(f::Function, args::Vararg) x = @task f(args...) consume(x) return xend

Page 16: 20170217 julia小程式到專案發布之旅

記得 export

__precompile__()

module Foo

using ……import ……

export Subject, get, init_task

include(“bar1.jl")include(“bar2.jl")

end

Page 17: 20170217 julia小程式到專案發布之旅

寫測試## Subject#

a = Subject(10)b = Subject(30)@test get(a) == 10@test _map(a, x -> x + 2) == Subject(12)@test _filter(a, x -> x > 2) == a@test _filter(a, x -> x > 20) == Subject(nothing)@test _reduce(a, b, (x, y) -> (x + y)/2) == Subject(20.0)

Page 18: 20170217 julia小程式到專案發布之旅

跑測試

Pkg.test(“Foo")

Page 19: 20170217 julia小程式到專案發布之旅

Debug……

目前我還沒碰到比較複雜的邏輯錯誤 比較多是 syntax error 或是 exception 這些都比較好解決

Page 20: 20170217 julia小程式到專案發布之旅

Profiling……

比較好的開發方法都會要求要測效能 我也才剛開專案沒多久 比較沒有效能問題

Page 21: 20170217 julia小程式到專案發布之旅

版本控制 Julia 的專案是預設用 git

$ git add xxxxxxx$ git commit –m “xxxxxxxxxxx"

Page 22: 20170217 julia小程式到專案發布之旅

在 Github 上建立專案 官方的作法 我的作法julia> Pkg.clone("git://github.com/StefanKarpinski/FooBar.jl.git")

$ cd <project directory>$ git remote add origin git://………

Page 23: 20170217 julia小程式到專案發布之旅

註冊

julia> PkgDev.config()julia> PkgDev.register("FooBar")INFO: Registering FooBar at git://github.com/StefanKarpinski/FooBar.jl.gitINFO: Committing METADATA for FooBar

Page 24: 20170217 julia小程式到專案發布之旅

Add tags

julia> PkgDev.tag("FooBar")INFO: Tagging FooBar v0.0.1INFO: Committing METADATA for FooBar

Page 25: 20170217 julia小程式到專案發布之旅

Publish

julia> PkgDev.publish()INFO: Validating METADATAINFO: No new package versions to publishINFO: Submitting METADATA changesINFO: Forking JuliaLang/METADATA.jl to StefanKarpinskiINFO: Pushing changes as branch pull-request/ef45f54bINFO: To create a pull-request open:

https://github.com/StefanKarpinski/METADATA.jl/compare/pull-request/ef45f54b

Page 26: 20170217 julia小程式到專案發布之旅

CI

Already generated files: `.travis.yml` for Travis `appveyor.yml` for AppVeyor

Page 27: 20170217 julia小程式到專案發布之旅

Thank you for attentionQ & A