Hatena::ブログ(Diary)

まめめも このページをアンテナに追加 RSSフィード

2014-12-21

Quine-relay Advent calendar Day 21: Julia

(これは Quine-relay Advent calendar 21 日目の記事、兼、Julia Advent Calendar 2014 の 21 日目の記事です)

21 日目の今日は、Julia を追加しました (97 言語目、コミット) 。Julia はわりと若い言語ですが、最近よく名前を聞きます。

Quine リレーでは、残念ながら print するだけ。


Julia Advent Calendar の記事を読みに来た人へ

まず、自分は完全に Julia の素人です。そして、この記事は完全なジョーク記事です。期待して読みに来た人は残念でしたすみません。

上記の通り、Quine リレーに Julia を追加した、という内容です。以上。なお、Quine リレーとは、プログラミング言語の曼荼羅のようなジョークプログラムのことです。詳しくはリンク先を見てください。

以下、Julia を Quine リレーに組み込む上で出会った問題について余談を語っていきます。


余談1: Ubuntu 14.10 で Julia を起動する 2 つの方法

Julia Advent calendar 2014 の 3 日目の記事

という発言が引用されていました。実際インストールはできるのですが、起動しない *1 という重大な問題があります。

$ julia
ERROR: could not open file /home/mame//home/mame//etc/julia/juliarc.jl
 in include at boot.jl:238

juliarc.jl を読みにいってるパスがあきらかにおかしい……。

ここで、「何でもいいからとにかく動かしたい」という場合の方法。

  1. ルートディレクトリで起動する
  2. -f をつけて起動する

いずれもどうかと思う解決策ですが、とりあえず動きます。

$ cd /
$ julia
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: http://docs.julialang.org
   _ _   _| |_  __ _   |  Type "help()" to list help topics
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.2.1 (2014-02-11 06:30 UTC)
 _/ |\__'_|_|_|\__'_|  |  
|__/                   |  x86_64-linux-gnu

julia>

まあ、0.2.1 とか古すぎて、どのみち実用に耐えない気はしますが。

参考:


余談2: Ubuntu 12.04 で Julia と Octave を同居させる方法

または、Travis CI で Julia と Octave を同時にインストールする方法。Julia と OctaveScilab には「配列インデックスが 1 から始まる」という共通点がある *2 ので、同時に使いたくなる人は多数いるでしょう。いるに違いありません。

3 日目の記事にもあるように、Ubuntu 12.04 で Julia をインストールする方法としては、ppa を使うのが定石のようです。

$ sudo add-apt-repository ppa:staticfloat/juliareleases
$ sudo add-apt-repository ppa:staticfloat/julia-deps
$ sudo apt-get update
$ sudo apt-get install julia

しかしこうすると、Octaveインストールできなくなります。

$ sudo apt-get install octave3.2
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 octave3.2 : Depends: libarpack2 (>= 2.1+parpack96.dfsg) but it is not going to be installed
             Recommends: libatlas3gf-base but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

逆に、octave インストール済の状態で julia をインストールすると octave が削除されます

$ sudo apt-get install julia
Reading package lists... Done
Building dependency tree       
Reading state information... Done
(略)
The following packages will be REMOVED:
  libatlas3gf-base octave3.2
(略)
After this operation, 85.7 MB of additional disk space will be used.
Do you want to continue [Y/n]? 

Julia 怖い。

要するに依存関係の問題(octave は古い atlas を期待するけど julia は新しい atlas を期待する)だと思いますが、まじめに解決するのは難しそうでした。

試行錯誤で見つけた簡単な解決は、octave も ppa を使うことです。

$ sudo add-apt-repository ppa:octave/stable
$ apt-get update
$ apt-get install julia octave

これで無事両方入るようです。

しかしまだ問題があり、Julia と OctaveScilab を同時にインストールしようとすると依存関係で文句を言われます。(なお Scilab配列が 1 から始まる系)

$ sudo apt-get install julia octave scilab
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 julia : Depends: libopenblas-base but it is not going to be installed or
                  libblas3 but it is not going to be installed or
                  libatlas3-base but it is not installable
         Depends: liblapack3 but it is not going to be installed or
                  libatlas3-base but it is not installable
         Depends: libcholmod1.7.1 but it is not going to be installed
         Depends: libumfpack5.4.0 but it is not going to be installed
         Depends: libarpack2 but it is not going to be installed
 octave : Depends: libarpack2 (>= 2.1) but it is not going to be installed
          Depends: libcholmod1.7.1 (>= 1:3.4.0) but it is not going to be installed
          Depends: liboctave2 (= 3.8.1-1ubuntu1~octave1~precise1) but it is not going to be installed
 scilab : Depends: scilab-cli (>= 5.3.3-6) but it is not going to be installed
          Depends: scilab-full-bin but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

apt-get が悪いのか julia が悪いのか octave が悪いのか scilab が悪いのかさっぱりわかりませんが、とりあえず、libblas3 を明示的にインストールしてやるとクリアできるようです。

$ apt-get install julia octave scilab libblas3

なにそれ、という感じですが。

また、同時にインストールするのではなく、1 つずつインストールするのでも問題は起きないようです。(インストール順によるかもしれないけど、未確認

$ sudo apt-get install julia
$ sudo apt-get install octave
$ sudo apt-get install scilab

これは FUD ですが、julia の ppa を使うときは、julia 専用環境にする覚悟をしたほうがよさそうです。julia を動かすために必要なパッケージをてきとーに突っ込みまくって他パッケージとの相性とか考えてないみたいなので、他にも相性問題を引き起こす予感がすごくします。


まとめ

Ubuntu と Julia の不幸な現状にハマった話でした。早くこなれるといいですね。

あと Julia プログラムを 1 行も載せない記事ですみません。

*1:正確に言うと、REPL が起動しません。ファイルを引数に与えて実行することは普通にできます。

*2:どちらも MATLAB 由来。

2014-12-20

Quine-relay Advent calendar Day 20: haXe

ref: https://github.com/mame/quine-relay

20 日目の今日は、haXe を追加しました (96 言語目、コミット) 。haXe は、JavascriptJava の融合したような見た目の言語です。Javascriptコンパイルしたり、Flashコンパイルしたり、NekoVM 用のバイトコードコンパイルしたりできる点が特色だと思います。

Quine リレーでは print するだけ。

2014-12-19

Quine-relay Advent calendar Day 19: Gri

ref: https://github.com/mame/quine-relay

19 日目の今日は、Gri を追加しました (95 言語目、コミット) 。Gri は科学的なグラフィックプログラミング言語だそうです。グラフとか描画できる系。

この言語において、文字列の扱いはほとんどおまけです。エスケープ周りが動くんだか動かないんだかよくわかりません。ダブルクォートを単体で出力できないような気がする。Gri で出力できる文字列となるよう、次段の Groovy 側のコード表現を工夫して、よくわからないけどかろうじて動いている状態にしています。言語リストを見直すことがあれば、真っ先に取り外したい。

2014-12-18

Quine-relay Advent calendar Day 18: G-Portugol

ref: https://github.com/mame/quine-relay

18 日目の今日は、G-Portugol を追加しました (94 言語目、コミット) 。G-Portugol は、ブラジルポルトガル語によるプログラミング言語です。別に難解プログラミング言語というわけではありません。C の関数名や識別子がポルトガル語になっているような感じで、教育用だそうです。

自国語でのプログラミング言語」というのはよくあるネタで、日本語でもひまわりとかなでしことかありますが、 なぜか Windows 限定なんですよね。deb として利用可能にしてくれてるようなのは、これと ZhPy (Python の識別子を中国語にしたもの) くらいだと思います。たいへん残念。

Quine リレーでは imprima (ポルトガル語で print) するだけ。

2014-12-17

Quine-relay Advent calendar Day 17: Gnuplot

ref: https://github.com/mame/quine-relay

17 日目の今日は、Gnuplot を追加しました (93 言語目、コミット) 。Gnuplot は、みんなご存じグラフ描画ツールですが、プログラミングもそれなりにできるらしいです。

set print "-" とすれば標準出力に print できるようになるということで、Quine リレーではそれだけ。