WindowsでOCamlを学ぶ環境を作るメモ

前々からやろうと思っていたOCaml学ぶ環境を整えました.WindowsOCamlはつらいという話をよく聞きますが,入門する程度には問題ないでしょう.
ちなみに読もうとしている本はプログラミング in OCamlです.
プログラミング in OCaml 〜関数型プログラミングの基礎からGUI構築まで〜 | Gihyo Digital Publishing … 技術評論社の電子書籍

僕の使っているEmacsはGnuPack11.00のものなのですが,windows側で設定されたパスをうまく引き継いでくれません.いくつかのパスを手で設定してやる必要がありましたので,メモしておきます.

処理系のインストール

ここでインストーラをダウンロードできます.インストール時にはcygwinをインストールするか聞かれますが,僕はインストールしませんでした.
The OCaml installer for Windows

Emacsの設定

tuareg-modeというのが良く使われているそうです.
GitHub - ocaml/tuareg: Emacs OCaml mode

インストールした後は以下の記事を参考に設定しました.
Emacsでocamlを書く設定 - 雑記

(add-to-list 'auto-mode-alist '("\\.ml[iylp]?" . tuareg-mode))
(autoload 'tuareg-mode "tuareg" "Major mode for editing OCaml code" t)
(autoload 'tuareg-run-ocaml "tuareg" "Run an inferior OCaml process." t)
(autoload 'ocamldebug "ocamldebug" "Run the OCaml debugger" t)

基本的な設定が済んだら.mlファイルを開いた状態でC-c C-s (tuareg-run-ocaml)でOCaml toplevel to runというプロンプトでコマンドを聞かれた後にREPLが起動します.
パスが通っていない場合はそのまま動かないので以下の設定のうちどちらかを加えます.

;;パスに加える.
(add-to-list 'exec-path "path/to/OCaml/bin/")
;;プロンプトの初期値を設定する.
(setq tuareg-interactive-program "/path/to/OCaml/bin/ocaml")

起動後にexception typetexp.errorといったエラーが出る場合は恐らくライブラリへのパスが通っていませんので環境変数を設定してやります.

(setenv "OCAMLLIB" "C:/tools/OCaml/lib")

一応環境が整いました.
f:id:soma_arc:20160406133936j:plain

TokyoDemoFest2016に参加しました

2月20-21日に行われた日本で唯一のデモパーティ,Tokyo Demo Festに参加してきました.GLSLのFragment Shaderでグラフィックスを表示するGLSL Graphics Compoに"Indra's Bubbles"という作品を出して二位をいただきました.


作品の様子
f:id:soma_arc:20160222164759p:plain

Shadertoyに投稿したコード,動くものはこちら
Indra's Bubbles

デモとの出会い

元々,デモシーンにはレイマーチングを通じて出会いました.sphairahedronの高速な描画にレイマーチングを用いて物体同士のブール演算を用いて描画する方法が適していることがわかったため,これに用いるためにレイマーチングを学びました.次にMandelboxやPseudo-Kleinianの存在です.フラクタルアーティスト界隈でよく使われるそれらのフラクタル図形にはクライン群に見られるような特徴をみることができることに気付きました.
www.youtube.com
これらはクライン群関連の論文でも見たことがありませんでしたので調査を始め,結果としてデモで使われるようなテクニックを用いて本物のクライン群の高速描画アルゴリズムを指導教員と共に開発することができました.

作品について

中央に正八面体の頂点に配置した球で構成される群によるクライン群とその周囲にPseudo-Kleinianの式で構成されるフラクタル図形を配置したものです,クライン群とPseudo-Kleinianの一部は鏡面反射されるようにいじってあり,特に立方体の隅や特定の一面は全てが反射されています.鏡面反射する部位については,Orbit trapを行って計算していますが,Orbit trapそのものの理解が不十分であり,他の人の作例を見て,実験的につけたものです.
個人的には完全な球形とその次の形が良い感じに反射してくれてお気に入りです.
しかし,中央のクライン群の描画アルゴリズムありきの作品であり,レンダリング技術やエフェクト等がなっていません.特にフォグの実装が駄目なのか,低い解像度だとノイズが目立ちます.レンダリング技術を極め,より綺麗な映像にしたいところです.
中央のクライン群の可視化アルゴリズムについては,近いうちにまとめた文章を出す予定です.

イベントについて

初めてのデモパーティーでしたが,会場の雰囲気としては,ぎっちりとイベントが詰まっているわけではなく,適度に空白の時間があり,その間はパソコンに向かって作業する,もしくは他の人と交流するような感じになっていました.今回はセミナーをおこなう場所が分かれており,聞きたい人が聞きにいく感じになっていました.チョコレートや寿司,ピザ,ビールを振舞っている人もいて,パーティーという感じでしたね.ただ,イベント会場のArts Chiyodaの体育館は寒かったです.

おわり

どのデモも非常に面白く,素晴らしいリアルタイム生成のグラフィクス作品を見ることができました.このような作品があるのならば,自分の頭の中にある理想もどうにか作品にすることができるのではないかと,少しだけ希望を持つことができました.
来年もどうにか,クライン群,フラクタルのリアルタイムレンダリングを極めて作品を出したいと思います.また,Combined demo compoは音楽が必要なのでどうにかゴアトランスを作れるようになりたいところ…
それでは,Demoscenerの皆様の一年がより良きものでありますように.

Clojure (overtone + quil)によるコーディングとコードを音楽にするライブコーディング環境の試作

www.youtube.com
github.com

Parensymphonyはコーディングとコードが音楽になるライブコーディング環境の試作品です.ある授業の課題として作り,パフォーマンスをしました.動画を見ていただけるとわかるように,コーディングの操作に音がつきます.また,評価されたコードの構造からフレーズを生成していき,最終的に重なった音楽になります.動画中では,書いたコードで太鼓のパターン生成も行っています.つまり,コードが楽譜とプログラム二つの意味を持っていることになります.
ちなみに名称の由来はCommon LispJavaScriptトランスレータライブラリであるParenscriptからいただきました.恐らくParenthesisとscriptからつけられた名称だと思います.

なぜつくったのか

ライブコーディングで音楽をする作品には色々な環境,作品があります.Clojure(overtone)を用いたものには以下のような作品,ユニットが存在しています.
Sam Aaron - Hacking Overtone - Live @ Arnolfini on Vimeo
Repl Electric - Live Coding
しかし,これらはLispコードを評価し,その結果として音楽や映像が出力されるものです.コーディング過程やコードそのものが映像,音楽表現になるものを見たことがありませんでした.僕はLispのコードを初めて来たときにこのプログラミング言語はなんと格好良いのだろうと思っておりましたので,Lispコードが主役のものを見てみたかったのです.丸括弧を入力するとジャーンと和音がなって格好良く括弧が現れるというものが僕が最初に夢想したものです.
また,S式は構文木を表しているわけですけれども,そこから音楽的な構造にならないかとも考えました.詳しくは分かりませんが,実際に楽譜を木構造としてみる音楽理論が存在するようです.(CiNii 論文 -  音楽理論GTTMに基づく木構造を用いたメロディ生成手法
Lispのコードはprogramとしてもdataとしても解釈できます.そこでprogram = data = scoreを目指しました.

環境

今回はClojureで作りました.SuperCollider,Processingのラッパーであるovertoneとquilを使用しています.
Overtone - Collaborative Programmable Music
quil/quil · GitHub

ちなみにCommon Lispにもcl-colliderというSuperColliderのクライアントが存在するようですね.ただ,グラフィクス等を扱う良いライブラリがないのでClojureを使うことになりました.
byulparan/cl-collider · GitHub

実装

エディタ

エディタ部分は実装する知識,時間がなかったので,一つのフレームにつき,一つのS式を編集するという簡単なものです.ここに関しては,Emacsを用いてグローバルキーフックをかけるという方法も考えられましたが,ちょっと面倒そうなのと,やはり映像表現を自由に行いたかったので,quilの上に作りました.
ただ,結局コードを用いた映像表現に関しては文字のアニメーション表現等は経験がなく,今回は実装できませんでした.無理に実装してもゴタゴタしてつまらないだけでしょうし,各フレームが音に合わせてフラッシュするという単純なものにしました.

overtoneのチュートリアルで紹介されているplucked-stringのみを使用しています.フレーズはペンタトニックスケールを用いて構成されています.
括弧やスペース,タブを入力すると和音,その他のキーは単音が鳴ります.単音はフレーズが設定されており,入力するごとに順番に鳴り,スペースが入力されると別のフレーズに切り替わります.和音は完全にランダムです.本来はコード進行をつけようとしていたのですが,ペンタトニックスケールに合うような進行がよくわかりませんでした.
音が重なって聞こえにくくならないようにエディタの各フレームでは音の高さが変えられています.例えば,左上のフレームの単音はC2がルートのペンタトニックスケールで構成され,和音はその一つ上の高さになっています.

フレーズの生成

弦楽器でペンタトニックスケールは何でも合って凄いですね.
まず,スケールの山を作ります.

 (let [penta (scale :c3 :pentatonic)]
    (concat penta (reverse penta)))
-> (48 50 53 55 57 60 62 65 65 62 60 57 55 53 50 48)

そこからランダムに歯抜けにした無限シーケンスを作ります.

;;たとえば2つごとに抜きます.
(cycle (take-nth 2 notes))
-> (48 53 57 62 65 60 55 50 48 53 57 62 65 60 55 50  ...)

最初のいくつかを切り捨てて完成です.

;;例えば三番目以降を取得.
(nthrest phrase 3)
-> (62 65 60 55 50 48 53 57 62 65 60 55 50 48 53 57  ...)

途中にreverseを仕込んで反転させても面白いのですが,統一感がなくなったりしたのでやめました.このようにして生成されたフレーズがキー入力で鳴ったり,コードからの自動生成時に使用されます.

コードから音楽の生成

式の要素を順番に見ていき,文字列の長さ分だけフレーズを割り当てます.フレーズは各要素ごとにランダムに選びなおされます.要素の間には休符が入れられます.コードは以下のような感じ.

(defn gen-pattern [key-index n]
  (cond
    (or (number? n) (symbol? n)
        (keyword? n) (char? n)) (take (count (str n)) (get-phrase key-index))
    (empty? n) nil
    :else (concat (gen-pattern key-index (first n))
                  '(rest)
                  (gen-pattern key-index (rest n)))))

現状では要素の文字の長さとS式の構造によって休符をつけることのみしかしていません.もっとコードの情報をうまく使えると良いですね.

パフォーマンス

どのようなプログラムを書くか

環境自体が完成しても,パフォーマンスができなければ意味がありません.当初は競技プログラミングや4Clojureの簡単な課題を解くことも考えたのですが,音楽に全く関係ありませんし,4つコードでできることも限られています.また,Lisp(Clojure)についての事前知識がなければ何をやっているかわかりません.
今回はFizzBuzz(FibBuzz FibBuzz in Clojure · GitHub)から太鼓のフレーズを生成してみたところ,非常にいい感じになったのでこれを使いました.FizzBuzzならば,プログラミングを行っている人ならばわかる人も多いでしょう.
今回は非常にうまくはまってくれましたが,これ以外のものを考えるとなると難しいです.
overtoneを用いた作曲アプローチとしてleipzig(ctford/leipzig · GitHub)といった作曲ライブラリのようにノートのシーケンスを用いる方法があります.音の長さ,や高さをリストで与えることで演奏します.[1/3 1/3 1/3]のような感じで音符を与えるなどするのですが,このようにリストを書くようなプログラムは見ていてあまり面白くありません.
今回のように,なんらかのアルゴリズムを記述し,そのアルゴリズムを用いて生成された音楽に新たな要素を加えるというようなものが一番面白いと思います.書いたアルゴリズムがどんなに美しくてもそれが音楽として面白いかはまた別の話ですけれども…
竹内関数による音楽生成は非常に面白い例ですね.
竹内関数で音楽生成 - aikeの日記

タイピング

タイピングすることによって音楽ができるようにもなっていますが,自動演奏されるフレーズとの兼ね合いを考えてタイピングの速度を変える必要があります.あんまり早いと焦ってしまうので遅い方が良いのではないかと思います.

今後の課題

きちんとしたエディタを実装する

言わずもがな.Emacsキーバインド,Pareditあたりは必須です.

一般化

現在のParensymphonyは一つのパフォーマンスのために作られたものになっています.より一般化し,様々なパフォーマンスに対応できるようなフレームワークにすることが最終的な目標になるのだろうと思います.

コードを用いた映像表現

Lispコードをより格好良く見せる.

音楽知識の習得

言わずもがな.より良いフレーズの生成のために.

ゴアトランスを作りたい.

DTMで作れるようになってから.

シンセサイザーに関する知識の習得

自分の欲しい音が作れるようにならないと話になりません.サンプルを探してみてもなかなか欲しいものにはたどり着けませんでした.

非同期制御

お気づきだと思いますが,コードを評価するたびに.音楽が一度止まっています.ここら辺を改良するには,Clojureの非同期的な制御を行わなければならないのですが,僕が学習できていなかったのと,安定性を考えて一度止めて再度再生するようにしています.
かなり気になる部分ですので,改良は必須です.

感想

Clojure自体は初めてでしたが,楽しい言語でした.無限シーケンスが音楽的なことをするのに非常に便利でした.overtoneができるのも分かりますね.しかし,Clojureは関数型的な特性が強くて,そこら辺に手間取る事が多かったです.Common Lispで実装することも考えています.
音楽の知識,経験が足らず,大変でしたが,最終的にLispならではのものができたと思います.どのくらい時間がかけられるかわかりませんがより進化させたいとは思っています.なんにせよ,まずは知識不足を埋めることが一番の課題でしょうか.日々精進あるのみですね.

インドラの真珠の紹介

この記事はMath Advent Calendar 16日目の記事です.
www.adventar.org
僕は二年ほど前に自分でフラクタルを描きたいと思っていた時,大学の図書館でインドラの真珠という書籍に出会いました.
インドラの真珠: クラインの夢みた世界
2002年に出版されたIndra's Pearlsという書籍の邦訳です.表紙が目に入ってこれだと思いました.以来,クライン群に関するグラフィクスを描画したり,関連事項を勉強するなどしています.
tumblrに少しだけまとめてあるので興味があればご覧ください.
Kleinian groups
円や球が連なるようなものや,らせん状のねじれが特徴です.

インドラの真珠は双曲幾何学の分野におけるクライン群を可視化するということに重きを置いた書籍です.一応行列から解説してくれるので,基本的なプログラミングの知識と,高校数学の知識があれば一応読み進めていけるようになっています.
ただし数学を勉強している人にとっては数学的に厳密な話は少し足りないようです.

僕も一応全て読みましたが,理解の至らないところは多く,この本に載っている全ての図を描画できたわけではありません.日々精進あるのみですね.
図に興味を持った方は手に取ってみてはいかがでしょうか.

ビルドツールninjaのスクリプトを書いてみたメモ.

Ninja, a small build system with a focus on speed
素早いビルドが可能と話題のninjaを試してみました.しかし,僕自身巨大だったり,クロスプラットフォーム対応だったりするC++プログラムを書いたことがないので,実際の運用というのがいまいちわかりませんね…

参考にしたのは以下のエントリです.
ninja build tools使い方メモ - 北海道日記
Wonderlands in Usagi's brain: さすがNinja素速い…(気がする)

手に入れる

Releases · ninja-build/ninja · GitHub
GitHub releasesで取得します.zipファイルを解凍すればninja.exeが手に入ります.

スクリプトを書く

VCのコンパイラを用いてARToolKitを用いたプログラムをビルドするスクリプトを書いてみました.コンパイラ,リンカをフルパスで指定しているのは良くないと思うのですが,あらかじめパスを通したclが64bit版であり,32bit用にビルドされたライブラリであるARToolKitを使用するために32bit版clを使用するためです.

compile_command = cl
compile_options =
link_command    = link
link_options    =
libs            = libAR.lib libARgsub_lite.lib libARgsub.lib libARgsubUtil.lib libARMulti.lib libARvideo.lib
cl_dir          = c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin

rule compile
  command =  $cl_dir\$compile_command $compile_options $in $libs

rule link
  command = $cl_dir\$link_command $link_options $in $libs

build main.obj  : compile main.cpp
build main.exe  : link main.obj

build.ninjaという名前で置いておき,ninjaを実行すればビルドが走ります.
make cleanに値するものはninja -t cleanで行えます.

TODO

  • 複数ファイルの指定はどうするか.

例えば,同じディレクトリにある.cuファイルすべてを用いてnvccでビルドするmakefileは以下のようになります.

main.exe: main.obj
	nvcc -arch=sm_30 -lglew64 -lglut64 -lAntTweakBar64 -o $@ $^
%.obj: %.cu
	nvcc -arch=sm_30 -dc $^ -o $@
clean :
	rm *.obj

存在するすべてのファイルに対してbuild hoge.obj : compile main.cppなどと書くのは面倒です.ninjaで%のような指定はどうするのか調べる必要があります.(あまり正しい使い方ではない気もしますが…)

  • ライブラリファイルの指定が微妙な気がする.
  • Linux+gcc用の記述を追加してみる.

AppVeyorで自動デプロイを試したメモ

AppVeyorはWindowsのための継続的デリバリーシステムです.ビルド,テスト,デプロイまで行えるようです.GUIによる設定がわかりやすく,あまり迷うことはないと思います.
Continuous Integration and Deployment service for Windows developers - Appveyor
AppVeyorについては以下の記事が非常に参考になります.
AppVeyorを使ってCI環境構築してみた - 亀岡的プログラマ日記
前回(travisCI + Bintrayによる自動デプロイを試したメモ - 心鏡曼荼羅)同様glslangをデプロイしてみます.

ビルド

windowsでのビルドはcmakeを走らせた後にVisualStudioのプロジェクトファイルが生成されるのでそれを用います.ALL_BUILD.vcxprojからglslangに含まれる全てのものをビルドすることができます.
ちなみにwindowsでglslangValidatorを動かすにはVS2015のランタイムコンポーネントが必要です.
Download Visual Studio 2015 の Visual C++ 再頒布可能パッケージ from Official Microsoft Download Center

AppVeyorの準備

GitHubアカウントでログインした後はNew Projectからプロジェクトをインポートします.GitHubの他にもBitBucketなどからもインポートできるようです.
その後はSETTINGから設定を行います.どうやらymlファイルでも設定を記述できるようですが,今回はGUIから設定していきます.

Build設定

とりあえずいじる項目はBuildでしょうか.
設定は以下のような感じ.
f:id:soma_arc:20151204155125p:plain
f:id:soma_arc:20151204155132p:plain
今回はVisualStudioのプロジェクトファイルからビルドを行います.プロジェクトファイルは自動検出されますが,複数のファイルがあるとエラーが出ます.cmakeによって複数のプロジェクトファイルが生成されてしまうので,どれを用いてビルドを行うのか指定する必要があります.
また,Before build Scriptの項目からcmakeを走らせるコマンドを記載しておきます.WindowsPowerShellも使えるようですが,僕は使ったことがないのでcmdです.

Artifacts設定

成果物のアップロードはArtifactsで設定します.PATH TO ARTIFACTで指定したディレクトリ以下がzipで固められます.glslangはmake installでinstall以下に成果物がまとめられるのですが,VSのプロジェクトファイルからビルドするとそれぞれのディレクトリに成果物が分かれてしまいます.成果物それぞれを指定するのも面倒ですし,とりあえずbuildディレクトリ以下を全てアップロードするようにしてしまいました.
ちなみにルートディレクトリはC:\projects\project-name\になります.
f:id:soma_arc:20151204161449p:plain

Test設定

glslangにおけるテストスクリプトWindowsではそのまま動かないようなので動かしていません.
テストは自動検出もされるようですが,VisualStudioにおけるテストがどのように実行されるかはわからないので何もしていません.

成果物の取得

AppVeyorの実行は手動でも行うことができます.
f:id:soma_arc:20151204154551p:plain
f:id:soma_arc:20151204154648p:plain

終わり

AppVeyorはビルドからテスト,デプロイまでできるのが便利ですね.
しかし,今回はテストのスクリプトが動かせませんでした.また,本来は成果物のみを取り出したいのですが,MSBuildの結果,ばらけてしまったため,buildディレクトリ自体をアップロードするようにしてしまいました.ここら辺はきちんとした設定が必要ですね.
自分のリポジトリではないのでしょうがないのですが,全てのプラットフォームにおいて継続的デリバリーを行うには特にWindowsに気を使う必要がありますね.

travisCI + Bintrayによる自動デプロイを試したメモ

Bintrayはソフトウェア配布のためのサービスです.これを利用して,travisCIを使ってテストを行った後に自動でデプロイできるような仕組みを構築します.
今回デプロイしようとするソフトウェアはこれです.
KhronosGroup/glslang · GitHub
GLSLのリファレンスコンパイラです.BSDライセンスで配布されています.こちらをフォークしてテストを回し,デプロイしてみます.

ビルドしてみる

まずはこちら側でビルドしてテストを行ってみます.Linux環境の場合はSetupLinux.shを実行するだけです.ビルドにはC++11が動くコンパイラとbisonというパーサジェネレータが必要です.windowsの場合はリポジトリに最初から含まれているbison.exeでも良いはず.windowsの場合,cmakeを走らせた後にVisualStudioのプロジェクトが生成されるのでそれを用いてビルドします.テストはTestディレクトリに移動した後にruntestsを実行します.シェルスクリプトっぽいのでコマンドプロンプトでは動かないみたいです.

Bintrayの準備

Bintrayの概要については以下の記事等が参考になります.
GradleでBintrayにアップロードする手順 - Qiita
Bintray - Download Center Automation & Distribution w. Private Repositories
Bintrayはアカウントの下にいくつかのタイプのリポジトリが存在し,その下にPackageとしてソフトウェアを置きます.mavenrpmなど6種あります.今回はどれでもないので最初からあるgenericを使います.
GitHubアカウントでログインした後はOwned Repositoriesからgenericを選択し,Import from GitHubから使いたいリポジトリを選択します.これで,Bintray上にPackageが作成されます.
また,後で使用するのでEdit your profileからAPI Keyも確認しておきます.

travisCIで自動テストを回す.

travisCIのテスト環境はUbuntuらしいのですが,デフォルトではc++11が使えるgccが入っていません.そこでgccをアップデートする必要があります.
c++ - Travis CI with Clang 3.4 and C++11 - Stack Overflow
上記の回答を参考にします.新しいgccを入れた後はパスの設定も変更しなければcmakeが新しいgccを用いてビルドしてくれません.今回はg++4.8.1を入れます.
自動テストを回す.travis.ymlは以下のようになりました.

sudo: required
language: cpp
compiler:
    - gcc
script:
  - ./SetupLinux.sh
  - cd Test
  - ./runtests
before_install:
  # g++4.8.1
  - if [ "$CXX" == "g++" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi
  - sudo apt-get update -qq
install:
  # g++4.8.1
  - if [ "$CXX" = "g++" ]; then sudo apt-get install -qq g++-4.8; fi
  - if [ "$CXX" = "g++" ]; then export CXX="g++-4.8"; fi

sudoが必要なければキャッシュが使えるのですが,sudoなしにする方法はわからないのでこのままです.これでテストは回るはずです.

Bintrayへの自動デプロイ

次に,Bintrayへのアップロードを行う処理を記述していきます.
Bintray Deployment - Travis CI
公式の手順に従います.genericへのアップロードは以下のようにcurlでも行えるようですが,travisが指示する方法が良いと思います.

curl -T <FILE.EXT> -usoma-arc:<API_KEY> https://api.bintray.com/content/soma-arc/generic/<YOUR_COOL_PACKAGE_NAME>/<VERSION_NAME>/<FILE_TARGET_PATH>

bintrayのAPIキーをtravis encryptで暗号化して.デプロイ用の記述を追記します.

deploy:
  provider: bintray
  file: "/home/travis/build/soma-arc/glslang/bintray.desc"
  user: "soma-arc"
  key: $BINTRAY_API_KEY
env:
  secure: "hogehoge"

fileにはbintray用のdescriptionファイルを指定します.ここにデプロイ用の情報が記述されます.拡張子をどうしたら良いかわからなかったので,bintray.descにしておきました.
上述のURLに記載されているテンプレートを埋めて作成します.あらかじめbintrayにパッケージを作っていれば最小の構成は以下のようになると思います.

{
    "package": {
        "name": "glslang", // Bintray package name
        "repo": "generic", // Bintray repository name
	"subject": "soma-arc"
    },
    "version": {
        "name": "0.1"
    },
    "files":
        [
        {"includePattern": "/home/travis/build/soma-arc/glslang/build/install/bin/(.*)", "uploadPattern": "bin/$1"},
	{"includePattern": "/home/travis/build/soma-arc/glslang/build/install/lib/(.*)", "uploadPattern": "lib/$1"}
        ],
    "publish": true
}

filesでアップロードするディレクトリを決めています.ここはRuby正規表現で指定するようです.SetupLinux.shを実行した後はglslang/build/installに成果物がまとめられるので,そこを指定してやればその中身がアップロードされます.
以上の作業を行うことでtravisCIでテストが行われた後にデプロイすることができます.
f:id:soma_arc:20151204132956p:plain

おわり

今回はtravisCIとBintrayでビルド済み成果物をデプロイすることを試しました.
バージョンの指定方法について.gitHubでのタグとの関連,タグ打ちやバージョンの番号に関する話はいつか勉強しないといけませんね.また,バージョンが上がるたびに手動でdescriptionファイルをいじるというのも面倒な話です.そこらへん,実際に運用するにはどうするのか,調べる必要があります.実際に使っている人のリポジトリの設定ファイルを見るのが近道なのでしょうか…
また,travisCIは新しい事を試そうとするには何度も.travis.ymlをリポジトリにプッシュする必要があります.非常に面倒くさい上,履歴も汚れるので,よろしくありません.そろそろCircleCIも試したいところです.
同様のデプロイをWindows用にAppVeyorでも試したので次の記事にします.