眠気.jl

投稿=不定期

JuliaのPlot(backend=gr())がtoo many file openで落ちるとき

結論

GR.inline("png")

を追記しよう

動機

Juliaでフレームを増やすと落ちるときがある
例えばこの記事のコードでanim=@animate for i = 1:5000
とすると次のようなエラーが起こる

socket: Too many open files
GKS: can't connect to GKS socket application
Did you start 'gksqt'?

解決策 (してなかった)

mp4にしてみる
gifの部分をmp4にするとうまくいく場合もある
いかない場合もある
(描画できる量は gif<mp4のようだが,どれぐらいまで大丈夫なのかわからなかった)

解決策

GR.inline("png")

を追記したら

anim = @animate 1:5000

落ちることなく最後まで描画できた(mp4,gif共に)
(詳しくはURLを)

最後に

これで突然ランダムウォークを5000歩ぐらい見たくなった時も安心ですね

参考URL(ほぼこのまま)

github.com

github.com

JuliaのPlot(backend=gr())がtoo many file openで落ちるとき

結論

GR.inline("png")

を追記しよう

動機

Juliaでフレームを増やすと落ちるときがある
例えばこの記事のコードでanim=@animate for i = 1:5000
とすると次のようなエラーが起こる

socket: Too many open files
GKS: can't connect to GKS socket application
Did you start 'gksqt'?

解決策 (してなかった)

mp4にしてみる
gifの部分をmp4にするとうまくいく場合もある
いかない場合もある
(描画できる量は gif<mp4のようだが,どれぐらいまで大丈夫なのかわからなかった)

解決策

GR.inline("png")

を追記したら

anim = @animate 1:5000

落ちることなく最後まで描画できた(mp4,gif共に)
(詳しくはURLを)

最後に

これで突然ランダムウォークを5000歩ぐらい見たくなった時も安心ですね

参考URL(ほぼこのまま)

github.com

github.com

vimrcをターミナルでリロードする(vim -c ':source ~/.vimrc | quit')

動機

.vimrcだけを少しだけ書き換えてターミナルでsource ~/.vimrcを実行するとエラーが出た(それはそう,vim起動中にするべき)

vimを(見た目的には)起動せずにやってみる

このようにvim -cでvimコマンドを実行すれば良いと思ったが

vim -c ':source ~/.vimrc'

上記のコマンドだとvimを閉じる処理をしていないので、下記のようにパイプで終了させる

vim -c ':source ~/.vimrc | quit'

エラー無し+ロードに時間がかからなければ見た目的にはvimが起動していないように見える

vim -c ':source ~/.vimrc | sleep 5 | quit'

等で遅延させると開いていることがわかる

感想

面倒くさがらずdotfilesの方でinstall.sh走らせればこんなことには

同じミスをしている方を見つけて勝手に親近感を覚えました

ryutamaki.hatenablog.com

tmg0525.hatenadiary.jp

JuliaでD次元正方格子上のランダムウォークを見る(D=2)

動機

下記のpdfの3/17ページのような正方格子上のランダムウォークを見たくなったので

注意

リントしてないので汚いです
反射壁,吸収壁は考えていません
1辺200の正方格子の中心から300歩やったので奇跡的にはみ出す可能性があります

方針

mutable structとしてParticleを作成して,x座標,y座標,次の方向をもたせる
次の方向=rand(1:4)として→↑↓←を割り振りました,もう少しいい方法もある気がしてます

使うライブラリ

Plotで,Backendはgr()を使う
∵スピード,3D,GUI,を重視したいときはBackendをgr()にすることがおすすめされているので
インタラクティブ性を重視したいとき,速さ重視のとき,綺麗さを重視したいときetc...
結局どうすればいいんだ!早く結論だけ言え!!というせっかちな人のための図があります(For the impatient)
f:id:julialangisthebestlang:20190802194348j:plain

やってみる

using Plots

gr()

ONESIDE = 100

mutable struct Particle
    x::Int8
    y::Int8
    next_direction::Int8
end


particle = Particle(0,0,0)

function assign_direction(Particle)
    Particle.next_direction = rand(1:4)
    return Particle
end

function step(Particle)
    if Particle.next_direction == 1
      Particle.x = Particle.x-1
      return Particle
    elseif Particle.next_direction == 2
      Particle.y = Particle.y-1
      return Particle
    elseif Particle.next_direction == 3
      Particle.y = Particle.y+1
      return Particle
    elseif Particle.next_direction == 4
      Particle.x = Particle.x+1
      return Particle
    else
      return Particle
    end
  end


#300枚のanimを作る
anim = @animate for i = 1:300
    scatter([particle.x],[particle.y],color="blue",xlims=(-ONESIDE,ONESIDE),ylims=(-ONESIDE,ONESIDE),legend=false)
    step(assign_direction(particle))
end

# fps=1秒あたりに見せるフレーム数
gif(anim, "file_name_you_want.gif", fps=20)

結果

f:id:julialangisthebestlang:20190802194520g:plain
random walk

おまけ

scatter!で重ねて書けるので,2個以上の粒子を考える場合はscatter以降をscatter!にする必要がある
意図的にscatter!だけを使ってpathを全部プロットするとこうなる

f:id:julialangisthebestlang:20190802194652g:plain
random walk with path
蛇みたいでかわいい

D=1,2の格子ランダムウォークは原点を無限回訪問するが,D>=3から突然成立しなくなることはよく知られていて例えばD.Williams本にも載ってます
Plot完全理解者になってD=3も可視化したいです

参考

1
オープンコア講座
ランダムウォークと確率論
熊谷 隆(京都大学理学部数学教室)
http://www.kurims.kyoto-u.ac.jp/~kumagai/Open-core-TK.pdf
2
Probability with Martingales(D.Williams)
3
plotのbackendに関して
https://docs.juliaplots.org/latest/backends/

Ubuntu18.04にMeCabとCabochaのインストール

動機

メモ

Mecab

sudo apt install mecab
sudo apt install libmecab-dev
sudo apt install mecab-ipadic-utf8

(Pythonからも使う場合は)

sudo pip3 install mecab-python

Cabochaのインストール

GoogleDriveから,cabocha-0.69.tar.bz2,CRF++-0.58.tar.gzをダウンロード

先にCRF++をインストール

tar -zxvf CRF++-0.58.tar.gz
cd CRF++-0.58/
./configure
make
sudo make install
sudo ldconfig

Cabocha

tar -jxvf cabocha-0.69.tar.bz2 cabocha-0.69/
cd cabocha-0.69/
./configure --with-mecab-config=`which mecab-config` --with-charset=UTF8 
#mecab設定
make
sudo make install

Juliaで話題のGen/チュートリアルの環境構築

Genとは

A general-purpose probabilistic programming system with programmable inference.
DLに限らないgeneral-purposeな確率的プログラミングを目指しているのでGenという名前(リンク先参照)
The name 'Gen' comes from the system's purpose to fill a gap in "general-purpose" probabilistic programming, according a paper by MIT researchers. probcomp.github.io GenTF
TensorFlow plugin for the Gen probabilistic programming system
GenViz
可視化のためのなにか

触ってみる

公式のGetting Startedでは2通りのやり方が書いてある
1 . Juliaのpackage managerから入れる

pkg> add https://github.com/probcomp/Gen

2 . Dockerを使う

Dockerでやってみる

The easiest way to run the notebooks is using Docker.
らしいのでDockerの方のチュートリをやってみる

$ git clone https://github.com/probcomp/gen-quickstart.git
$ cd gen-quickstart
$ docker build -t gen:v0 .
$ docker run -it --name gen -p 8080:8080 -p 8090:8090 -p 8091:8091 -p 8092:8092 gen:v0

デカいので時間かかった(1.95GB)

f:id:julialangisthebestlang:20190701195453p:plain
docker_size

localhost:8080にアクセス

f:id:julialangisthebestlang:20190701200611p:plain
Gen

環境構築できた

チュートリアルの中身を見てみる

全体 Gen Quick Start.ipynb

f:id:julialangisthebestlang:20190701203442p:plain
tutorial

例えば tutorials/Reasoning About Regenerate.ipynb

Genの使い方,特にget_choicesで取りうる値がtreeコマンドの様に見れるのが印象的だったので載せておく

f:id:julialangisthebestlang:20190701210847p:plain
measurable_func
f:id:julialangisthebestlang:20190701210850p:plain
tree_view

参考

Gen公式

Q#のインストールとJupyterカーネルへの追加(Ubuntu 18.04)

動機

現在の流行は機械学習だと思っていて,待を歩くと殆どの人がAndrewNgの機械学習講座をやっていて, PRML, Convex Optimization, MurphyのML本, GoodfellowのDL本, 渡辺ベイズ, 園田D論, MLPシリーズ, ハムかず本, (敬称略)etc...等を読んでいるような印象がありますが
逆張りをしていきたいので,まだ流行していなそうなQuantum Computingやっていきたいなと思いました

最近Brilliant(米国の学習サイト,Courseraっぽい)でMicrosoftとAlphabetが協力した講座brilliant.orgのQuantum-Computingが出たのでそれをやっていきます

Quantum Computingブームが来たとき,いずれはこの講義もスタンダードになるんじゃないかと個人的には思います(まだ途中までしかやってませんが)
章ごとにQuizがあって、その後詳解や参照が表示される形式です
Courseraとの違いは無期限で回数無制限でテストを受け直せるところです

この講座だとおそらくQ#を手元にインストールする必要はないのですが(GUIで擬似プログラミングできる機能が用意されてしまっているので),追試してみたいので入れてみました

やってみる

Q#の公式を見ると,まずは .NET Core SDK (2.1 or later)を入れろということなので入れます https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install このページの選択でUbuntu18.04を選んでそのままコード打っていく
Register Microsoft key and feed

wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

Install the .NET SDK

sudo add-apt-repository universe
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.2

これでdotnetのインストールはできたので
再びQ#の公式を見て

dotnet tool install -g Microsoft.Quantum.IQSharp

インストール完了,アプデは次のコマンドらしい

dotnet tool update -g Microsoft.Quantum.IQSharp

インストール済みでも再インストールされるらしい,次のメッセが出る

dotnet tool update -g Microsoft.Quantum.IQSharp
ツール 'microsoft.quantum.iqsharp' が安定した最新バージョン (バージョン '0.7.1905.3109') で再インストールされました。

jupyterカーネルに追加

公式だと

dotnet iqsharp install

とあるが,iqsharpが見つからないとエラーが出た
公式チュートリアルのDockerfileから見つけた次のコマンドで追加できた

dotnet iqsharp install --user --path-to-tool="$(which dotnet-iqsharp)"

Q#の動作確認

MSのQuantumの公式レポをクローンして遊びます

git clone git@github.com:microsoft/Quantum.git
cd /Quantum/Samples/src/Teleportation
dotnet build
ビルドに成功しました。                                                                                │
    0 個の警告                                                                                        │
    0 エラー                                                                                          │
                                                                                                      │
経過時間 00:00:22.75

build終わったことを確認して

dotnet run

警告なく終了!

Q#の特徴

Q#公式 によると,C#っぽく;,{}を使っていてifC#っぽいとのこと
独特なのはデフォルトだと値がimmutableで,letでmutableに

参考

.NET turorial