secretbase.log

.NET/C#/Pythonなど

PowerShell で FizzBuzz

コマンドプロンプト(バッチファイル)より、PowerShell が充実していることは確かなので少しずつ使えるようになりたい。
そこでまずは FizzBuzz を実装してみた。

エディタや実行環境は、Visual Studio 2012 (Expressではない) に PowerShell Tools For Visual Studio をインストールした環境を準備*1

コードは以下*2

% で ForEach が書けます。$_ で要素がとれます。PowerShell 力が少し上がりました。


【改訂新版】 Windows PowerShell ポケットリファレンス

【改訂新版】 Windows PowerShell ポケットリファレンス

*1:2012 を使った理由はギョームで使っているからで深い理由はない。2013のほうがよいです。

*2:はてなブログは、PowerShellシンタックスハイライトに対応してないので、Gists経由で貼り付け

Git for Windows/msysgit で ユーザー名、パスワードの入力頻度を下げる

複数のリポジトリを clone する必要があり、一発 clone するスクリプト書いた。

社内の認証がhttpによる認証のため、毎回user/passwordを入力するのがだるい。
そこで、 http://$user:$password@example.co.jp/git/reponame
みたいな感じで、URL に埋め込んだら動いた。

しかし、git remote -v で URLに平文で丸見え。だめである。
調べたら、cache する仕組みがあるようだ。

環境

結論

まず、結論を。
wincred を用いる。wincred は Git に同梱されている。

$ git config --global credential.helper wincred

  
 
 
 
いくつかの方法を試したので記録として残しておきます。

credential cache を用いる(Linux)

$ git config --global credential.helper cache

で設定が可能。Linux(debian)上では動作した。

しかし msysgit 上ではエラーになってしまった。

git: 'credential-cache' is not a git command. See 'git --help'.

$ git fetch origin master
git: 'credential-cache' is not a git command. See 'git --help'.
..

git-credential-winstore を使う (Git for Windowsの場合)

ぐぐると、stackoverflowに。
http://stackoverflow.com/questions/11693074/git-credential-cache-is-not-a-git-command

○手順

  • ダウンロードする

http://gitcredentialstore.codeplex.com/
ここから git-credential-winstore.exe をダウンロードする。現在の安定版は 1.2 。

  • 実行する
  • 設定する

$ git config --global credential.helper winstore

下記のようなダイアログが出現しユーザー名とパスワードが一時的に保存されます。
f:id:cointoss1973:20140521130545p:plain

実行

社内

$ time git fetch origin master
..
real 0m21.099s
user 0m0.000s
sys 0m0.015s

社外 (bitbucket)

$ time git fetch bb master
..
real 0m43.869s
user 0m0.015s
sys 0m0.015s

めっちゃ遅い。。

1.4 Beta

$ time git fetch bb master
..
real 1m23.322s
user 0m0.015s
sys 0m0.062s

$ time git fetch origin master
..
real 1m0.874s
user 0m0.000s
sys 0m0.015s

もっと遅い。



git-credential-wincred

git-credential-wincred.exe を試してみる。
こちらは、Git同梱。

$ git config --global credential.helper wincred

社内

$ time git fetch origin master
..
real 0m0.403s
user 0m0.015s
sys 0m0.000s

社外

$ time git fetch bb master
..
real 0m7.669s
user 0m0.015s
sys 0m0.000s

これでいこう。

フリーのプログラミング関連の書籍やサイトのまとめ

Github の最近ついたスターのリポジトリをつらつらとみていたら面白そうなリポジトリを発見。フリーのプログラミング関連の書籍やサイトのリンク集がMarkdownで書かれています。




プログラミング作法

プログラミング作法

プログラミング言語 Julia で実装された将棋ソフトメカ女子将棋で遊ぶ

プログラミング言語Juliaで実装されている将棋ソフトウェア メカ女子将棋Ubuntuにインストール、動作させてみましょう。

f:id:cointoss1973:20140113223421p:plain


インストール手順は、下記に詳細があります。
http://mechawooser.blogspot.jp/2014/01/blog-post.html
注意点は、 OS は 64-bit のLinux上で動作確認をされているとのことです。

環境

ビルドおよび実行環境の準備(インストール)

mono と git*1 を入れましょう。

$ sudo apt-get install mono-devel
$ sudo apt-get install git
$ sudo apt-get install build-essential

インストール (将棋所)

次に、将棋所をいれましょう。

適当なディレクトリで展開しましょう。

$ wget http://www.geocities.jp/shogidokoro/download/Shogidokoro.zip
$ unzip Shogidokoro.zip

インストール (Julia の最新版)

Julia は開発速度が速いので、Github に登録されている最新版のJuliaを用います。ビルドする手順です。

$ sudo apt-get install gfortran
$ git clone git://github.com/JuliaLang/julia.git
$ cd julia
$ make

gfortran だけでなく m4 など必要になるかもしれません。ビルド時にエラーが出た場合にエラーメッセージをよく読んで必要なパッケージを適宜追加インストールしてください。
make すると依存関係のパッケージのダウンロード、ビルドなど相当時間がかかりますのでしばらく待ちましょうヽ(´ー`)ノ
make -j4 として並列実行してもよいでしょう。
make が終わりましたか?

/usr/local/bin の配下にシンボリックリンクを貼っておくと良いでしょう(このあたりはお好みで)

$ cd /usr/local/bin
$ sudo ln -s $(HOME)/work/julia julia
$ julia --version
julia version 0.3.0-prerelease+842

現時点バージョンでは上記バージョン表記となりました。

インストール (メカ女子将棋)

$ git clone https://github.com/kimrin/WCSC23
$ cd WCSC23
$ make sharedlib
g++ -shared -g -Wall -O3 -fPIC -I. -I/usr/include -I./src ./src/Main.cpp -o lib/libMJ.so.1.0 -lm 
ln -s libMJ.so.1.0 ./lib/libMJ.so.1

準備

メカ女子将棋は,Bonanza が提供している fv.bin を用いているので別途ダウンロードしましょう。
(ライセンスの関係で、同梱していないとのこと。Bonanzaソースコードは公開しているがオープンソースでは無いため。)

$ wget http://gi.cs.uec.ac.jp:10140/bonanza_v6.0.zip
$ unzip bonanza_v6.0.zip
$ cp bonanza_v6.0/winbin/fv.bin WCSC23/

fv.bin を WCSC23配下にコピーしておきましょう。



動作確認 (WCSC23/Julia)

では動作確認していきましょう。

WCSC23/Juliaディレクトリで、$ ./Main.jl してみます。何も出なければ多分動いています。エラーが出る場合は何らかの修正が必要です。

$ cd WCSC23/Julia
$ ./Main/jl
bash: ./Main.jl: /home/kimura/julia/julia: 誤ったインタプリタです: そのようなフ ァイルやディレクトリはありません

おっと、shebangを修正しましょう。

$ sed -i.bak -e 's\#!/home/kimura/julia/julia\#!/usr/bin/env julia\' Main.jl 

修正しましたので再度実行しましょう。

$ ./Main/jl

10秒くらいなにも出力されなけければOKなので、Ctrl+Cで停止。

$ cat inputdata | ./Main/jl
id name Mecha Jyoshi Shogi 0.5
id author Sayuri TAKEBE, Mio WATANABE, Rieko TSUJI and Takeshi KIMURA
option name BookFile type string default ./Joseki.db
option name UseBook type check default true
usiok
readyok
info time 67 depth 1 nodes 30 score cp 52 nps 450 pv 2h1h
info time 194 depth 2 nodes 155 score cp 4 nps 800 pv 2h1h 5a4b
info time 353 depth 3 nodes 1513 score cp 21 nps 4282 pv 2h1h 8b6b 4g4f
info time 594 depth 4 nodes 5850 score cp 2 nps 9849 pv
info time 1195 depth 4 nodes 17540 score cp -6 nps 14681 pv 4g4f 8b9b 2h4h 5a4b
info time 5707 depth 5 nodes 122243 score cp 19 nps 21418 pv 9g9f 3c3d 2g2f 8b9b 4i5h
bestmove 9g9f

こんな感じが出力されればOKです。



エンジンの登録

将棋所に登録しましょう。まずはsocketをインストールしましょう。
ここではsocketを用いた方法で行います。

$ sudo apt-get install socket

4091.regist.sh の shebang を #!/usr/bin/env julia に変更します。
次に下記コマンドにてコピーします。

$ cp -p 4091.sh 4091.sh.org
$ cp -p 4091.regist.sh 4091.sh

将棋所を起動し、エンジンとして 4091.sh を登録します。
f:id:cointoss1973:20140107092350p:plain
f:id:cointoss1973:20140107092358p:plain


下記コマンドを実行し、4091.sh を元に戻しておきましょう。

$ cp -p 4091.sh.org 4091.sh

遊び方

4091ポートで待ち受けるように下記コマンドにて起動します。

$ socket -sqv -p ./Main.jl 4091
$ cd Shogidokoro
$ mono Shogidokoro.exe

f:id:cointoss1973:20140113223421p:plain

起動しました!

*1:以前は git-core というパッケージ名でしたが現在は git というパッケージ名になったようですね

プログラミング言語Julia ~Ubuntu 編~

先日Windowsにインストールしてみた Julia ですが、Ubuntu のパッケージが用意されています。対象のUbuntuは 12.04, 12.10, 13.04, 13.10 があります。ここでは Ubuntu 12.04.3 (LTS) にインストールします。

Ubuntu にパッケージのリポジトリを導入

公式サイトの手順に沿って、実施します。依存関係パッケージは別ppaのためそちらも追加します。

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

インストール

julia という名前のパッケージをインストールします。

$ sudo apt-get install julia

REPL

julia でREPLが起動できます。
f:id:cointoss1973:20140103211022p:plain

スクリプト起動時間の比較

どうも起動時間が遅いようですね。Hello World を表示するスクリプトをいくつかのプログラミング言語と比較してみました。

言語 時間
Python 0.065s
Ruby 0.013s
Julia 3.786s

測定

tkondou@zion:~$ time python ~/work/playground/py/hello.py 
Hello, World!

real    0m0.065s
user    0m0.016s
sys     0m0.020s
tkondou@zion:~$ time ruby ~/work/playground/ruby/hello.rb 
Hello, World!

real    0m0.013s
user    0m0.000s
sys     0m0.008s
tkondou@zion:~$ time julia ~/work/playground/julia/hello.jl 
Hello, World!

real    0m3.786s
user    0m3.424s
sys     0m0.052s
tkondou@zion:~$ 

Julia Studio で始める Julia 入門

f:id:cointoss1973:20140102212844p:plain

julia とは

ハイレベルでハイパフォーマンスの動的プログラミング言語です。文法は他の言語と似ているようです。
去年くらいからたまに話題にならないレベルで、周りでも話にも聞かないレベルですが、将棋の電王戦のあるプログラムが juliaで実装されているという話を聞いて興味を持ちました。

R は新しいExcel。 Python は新しいR。julialang は新しい Python とかいうつぶやきもあり、あまり話題に上がらないけど、ベンチマークとかみると非常に優秀なので気になっていた julialangを少し触ってみることにしましょう。*1

Julia Studio

インストール

Julia Studio をダウンロードして入れましょう。Qtで実装されているようなので、Windows, Mac, Linux があります。ここでは Windows で進めますね。

f:id:cointoss1973:20140102211904p:plain
f:id:cointoss1973:20140102211909p:plain
f:id:cointoss1973:20140102211914p:plain
f:id:cointoss1973:20140102211918p:plain
f:id:cointoss1973:20140102211922p:plain
f:id:cointoss1973:20140102211930p:plain
Finish。これといって問題なし。

julia studio を入れると、julia 自体も下記インストールされるようなので、これ一本でとりあえず julia を始めることができます。
インタプリタの設定もできますので、別に入れた julia のバイナリを指定することもできます。
現時点の 0.4.3 を入れると、julia の 0.2.0 (最新)が入ったのでひとまずこれでOK。

起動

では、Julia Studio を起動してみましょう。
ふむ、Packages とかいろいろあるようですねぇ。
f:id:cointoss1973:20140102212019p:plain
Githubからメタパッケージらしきものをひっぱってきて、どうやらパッケージリストを作成してくれるみたいです。これはJulialangとしてサポートしている機能なんだろうか、それとも Studioの機能なんだろうか... いきなりIDEから入る弊害ですね。あとで調べてることにして先にいきます。

チュートリアル

julia studio に チュートリアルのページ があるので実行してみる。

Hello World

println("Hello, World!")

をhello.jl というファイルで新規作成すればOK。 console (いわゆる REPL)があるので、そちらに入力してもOKですが、まぁチュートリアルに従ってみます。
f:id:cointoss1973:20140102212033p:plain
F5 を押すと実行されます。F5 で Run って個人的に身体に馴染んでいていい感じです。

fizzbuzz

さて、チュートリアルは続きますが英語を読むのも飽きますね。
ということで、文法もよくわからぬまま、fizzbuzz を実装してみます。
Julia Documentation — Julia Language 0.2.0 documentation この辺に、ドキュメントがあります*2

関数定義は、function で始まり、 end までのようですね。
条件分岐は、if else elseif end ですね。
演算子 は、だいたいPythonと一緒ですね

さくさくとエディタに書いてみます。
もっともベタな実装で、こんな感じですね。

f:id:cointoss1973:20140102212231p:plain
インデントは 8 タブなんだけど、これが標準なんだろうか。ちょっときもい*3

なかなか手軽で性能が良いのであれば良さそうですね。
Pythonなみのコミュニティやライブラリが充実するような流れになれば主流になるかもしれませんね*4

環境

  • Windows 7 64-bit
  • Julia Studio Version 0.4.3 (Julia 0.2.0)

*1:2014年も始まり、なにか新しいことをやってみたいですよね

*2:お、Sphinxで記述されているようですね

*3:Python の 4スペースがいいなぁ

*4:卵ニワトリのような関係かもしれませんね

2013年ふりかえり

2013年大晦日ということで簡単にふりかえっておきます。

ふりかえり

  • 今年の前半は、OSC2013にmercuriap-users.jpで出展をしたり、OSPN Pressに寄稿 したりと少し活動をしていましたが、プライベートが忙しくなり3月くらいから時間があまり割けなくなってしまいした。
  • 後半は、WiXでインストーラーをつくったり、社内でWPF/MVVM入門の発表をしたり(このスライド)を大幅に加筆したもの)した程度で主にマイクロソフト寄りな技術方面の勉強になりました。

その他

  • 出会いがあり別れがありました。気持ちの同期をとることが難しいですね。
  • SPEC クローズの後編(爻ノ編)をみるタイミングを逸したのが心残りです。

2014年

やりたいことをいくつか

  • currypy 2回しか開催できなかったので定期的に開催したい
  • 忘年会でつかった鼎(かなえ)が予想以上に美味しかったのでまたいきたい
  • プライベートの活動記録を残す
  • (下書き状態で放置が多いので) blog としてまとめる
  • WPF でなにかアプリケーションをつくる