Upload
-
View
119
Download
0
Embed Size (px)
Citation preview
Julia 小程式到專案發布之旅JULIA TAIWAN 發起人 杜岳華
Outline
專案的長相 如何組織一個專案 寫測試 用 julia 套件管理系統測試 上 github 註冊
專案的長相 <project name>/
src/: source code test/: test code appveyor.yml LICENSE.md README.md REQUIRE: the requirement modules, including the Julia version
(necessary)
如何產生一個專案 自動產生一個專案
julia> PkgDev.generate("FooBar","MIT")
安裝 PkgDev
julia> Pkg.add("PkgDev")julia> using PkgDev
一些命名規則 別用術語 別用 `Julia` 提供新型別的套件,請用複數, `DataFrames` 套件提供
`DataFrame` 型別 偏好明確而長的套件名稱,而不是短而模糊
一些命名規則 使用非系統性的命名來提供更多樣的實作
在 Julia 中沒有提供一個固定的繪圖套件, Gadfly 、 PyPlot 、 Winston 就提供了多樣的繪圖套件實作 相對, SortingAlgorithms 提供了一致性的介面跟全面性的實作
如果是包裝外部的 library ,請以該套件名稱命名 MATLAB.jl 提供了 Julia 呼叫 MATLAB engine 的介面
你可以在哪裡找到他 Linux
/home/$USER/.julia/v0.5/Foo Windows
C:\Users\%username%\.julia\v0.5\Foo Mac
? < 家目錄 >/.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
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
在開始 commit 之前 設定 git 申請 github 帳號
$ git config --global user.name "FULL NAME"$ git config --global user.email "EMAIL"$ git config --global github.user "USERNAME"
小技巧 在 Julia REPL 中按 `;`
Coding……
按照不同功能分別開成不同的 bar1.jl 、 bar2.jl 除了套件名稱大寫以外,其餘的都小寫 最好可以將功能拆解成
一個型別 ( 或物件 ) 一個檔案 太多的檔案可以用 folder 區隔開來
Best practice
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
記得 export
__precompile__()
module Foo
using ……import ……
export Subject, get, init_task
include(“bar1.jl")include(“bar2.jl")
end
寫測試## 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)
跑測試
Pkg.test(“Foo")
Debug……
目前我還沒碰到比較複雜的邏輯錯誤 比較多是 syntax error 或是 exception 這些都比較好解決
Profiling……
比較好的開發方法都會要求要測效能 我也才剛開專案沒多久 比較沒有效能問題
版本控制 Julia 的專案是預設用 git
$ git add xxxxxxx$ git commit –m “xxxxxxxxxxx"
在 Github 上建立專案 官方的作法 我的作法julia> Pkg.clone("git://github.com/StefanKarpinski/FooBar.jl.git")
$ cd <project directory>$ git remote add origin git://………
註冊
julia> PkgDev.config()julia> PkgDev.register("FooBar")INFO: Registering FooBar at git://github.com/StefanKarpinski/FooBar.jl.gitINFO: Committing METADATA for FooBar
Add tags
julia> PkgDev.tag("FooBar")INFO: Tagging FooBar v0.0.1INFO: Committing METADATA for FooBar
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
CI
Already generated files: `.travis.yml` for Travis `appveyor.yml` for AppVeyor
Thank you for attentionQ & A