ひっそり NYSOL:Mコマンドがバージョンアップしてた件について

一部の界隈ではとても人気のあるNYSOL：Mコマンドですが、実はVersion3が最近ひっそり公開されています。

注意
~~※10月6日の段階ではMacでかつXcode9では、ビルドが通りません。Xcode8ではビルドが通ります。
どうしても更新したい場合は、Xcode8にダウングレードしてみてください。~~
開発者に対応いただき、少し手を加えることで、Buildが通るようになりました。
対応方法は「Xcode9でうまくビルドできない場合」を確認ください。

# NYSOLって何
NYSOLはCSVデータの高速加工と大学の先生方が考えた最先端のアルゴリズムを無償提供するコマンド群です。
幾つかのパッケージに分かれています。
- 松（Mコマンド） : 前処理に関わるコマンド群です。 
   [データサイエンティスト必見！M\-1グランプリ](https://www.slideshare.net/SatoshiKitajima2/m1-38513054)に速度比較が上がっていますので参考にしていただければと思います。
- 竹 : バスケット分析などに使われるパターン抽出プログラムなどをまとめたパッケージ
- 零 : 高速に経路列挙するアルゴリズムであるZDDを使用するためのライブラリ
  （ZDDについてはこちらを見てください[『フカシギの数え方』 おねえさんといっしょ！ みんなで数えてみよう！ \- YouTube](https://www.youtube.com/watch?v=Q4gTV4r0zRs)）
などがあります。その他にもパッケージが有りますので詳しくは[NYSOL HP](http://www.nysol.jp/)を見てください。

# 最新版はどこにあるのか
GitHubにあります。↓
https://github.com/nysol/mcmd

# 何が変わったのか？
[リファレンスマニュアル](https://github.com/nysol/mcmd/files/1332817/mcmd.pdf)によるとv3はGitHub登録とのこと。
その他の改訂としては以下が在るようです。（詳しくはリファレンスマニュアルを見てください。）
- 幾つかのコマンドのパラーメーター仕様の変更
- `-params`パラメータ（各コマンドのパラメータリストの出力）の追加
- `mdformat`でミリ秒対応
- 幾つかのコマンドの追加
- bugfix


# インストール方法
GitHubのREADMEを見ていただくか（英語）、READMEの日本語版である[Home · nysol/mcmd Wiki](https://github.com/nysol/mcmd/wiki)を
見ていただければ、インストールできるようになっていますので、そちらを参照いただきたい。
ざっくり、前提となるライブラリ（c++boost, lib2xml）などが導入されていれば

```bash
git clone https://github.com/nysol/mcmd.git
cd mcmd

aclocal
autoreconf -i
automake --add-missing
./configure
make
sudo make install
```

で、導入できます。
## Xcode9でうまくビルドできない場合
10月6日の段階ではMacでかつXcode9では、ビルドが通らず

```
kgwindow.lo kgxml2csv.lo ../../src/kgmod/libkgmod3.la -lboost_filesystem -lboost_system -lboost_regex -lpthread
libtool: link: g++ -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o .libs/libmcmd3.1.dylib  .libs/kgaccum.o .libs/kgarff2csv.o .libs/kgavg.o .libs/kgbest.o .libs/kgbucket.o .libs/kgcal.o .libs/kgcat.o .libs/kgchgnum.o .libs/kgchgstr.o .libs/kgchkcsv.o .libs/kgcombi.o .libs/kgcommon.o .libs/kgcount.o .libs/kgcross.o .libs/kg2cross.o .libs/kgcsv2arff.o .libs/kgcsv2json.o .libs/kgcsvconv.o .libs/kgcut.o .libs/kgdata.o .libs/kgdformat.o .libs/kgdelnull.o .libs/kgdsp.o .libs/kgduprec.o .libs/kgfldname.o .libs/kgfsort.o .libs/kghashavg.o .libs/kghashsum.o .libs/kginput.o .libs/kgjoin.o .libs/kgkeybreak.o .libs/kgmbucket.o .libs/kgmseldsp.o .libs/kgmvavg.o .libs/kgmvsim.o .libs/kgmvstats.o .libs/kgnewnumber.o .libs/kgnewrand.o .libs/kgnewstr.o .libs/kgnjoin.o .libs/kgnormalize.o .libs/kgnrcommon.o .libs/kgnrjoin.o .libs/kgnullto.o .libs/kgnumber.o .libs/kgpadding.o .libs/kgpaste.o .libs/kgproduct.o .libs/kgrand.o .libs/kgrjoin.o .libs/kgminput.o .libs/kgsed.o .libs/kgsel.o .libs/kgseldsp.o .libs/kgselrand.o .libs/kgselstr.o .libs/kgselnum.o .libs/kgsep.o .libs/kgsep2.o .libs/kgsetstr.o .libs/kgshare.o .libs/kgshuffle.o .libs/kgsim.o .libs/kgslide.o .libs/kgsplit.o .libs/kgstats.o .libs/kgsum.o .libs/kgsummary.o .libs/kgtab2csv.o .libs/kgtee.o .libs/kgtonull.o .libs/kgtra.o .libs/kgtrafld.o .libs/kgtraflg.o .libs/kguniq.o .libs/kgvcat.o .libs/kgvcommon.o .libs/kgvcount.o .libs/kgvdelim.o .libs/kgvjoin.o .libs/kgvnullto.o .libs/kgvdelnull.o .libs/kgvreplace.o .libs/kgvsort.o .libs/kgvuniq.o .libs/kgwindow.o .libs/kgxml2csv.o   -L/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/lib -lxml2 -lz -licucore -lm ../../src/kgmod/.libs/libkgmod3.dylib -lboost_filesystem -lboost_system -lboost_regex -lpthread  -g -O2   -install_name  /usr/local/lib/libmcmd3.1.dylib -compatibility_version 2 -current_version 2.0 -Wl,-single_module
ld: file not found: /usr/lib/system/libsystem_darwin.dylib for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libmcmd3.la] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all-recursive] Error 1
```
~~というエラーが出ることがわかっています。
情報お持ちの方いれば連絡ください。~~
なお、Ubuntu,Xcode8ではビルドが通ることは確認できています。

開発者に対応いただき、ビルドが通るようになりました。
開発者いわくlibxml関係でうまくリンクできなかったとのこと、

MAC, Xcode9の方は最新のものをクローンし直して、以下のように`configure`のオプションを変更してみてください。

```
git clone https://github.com/nysol/mcmd.git
cd mcmd

aclocal
autoreconf -i
automake --add-missing
./configure --with-libxml2header=/usr/include/libxml2 --with-libxml2=/usr/lib
make
sudo make install
```

当方の環境で場ビルドができました。

### boostの最新版を導入する場合
[Boost C\+\+ Libraries](http://www.boost.org/)より最新パッケージをダウンロードし、

```bash
wget https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.gz # 2017-10-5時点最新
tar zxvf boost_1_65_1.tar.gz
cd boost_1_65_1
./bootstrap.sh
mkdir $HOME/local
./b2 install --prefix=$HOME/local   #prefixは適宜変更してください

```
詳細なビルドオプションなどは[Boostライブラリのビルド方法 \- boostjp](https://boostjp.github.io/howtobuild.html)を参考にすればいいと思います。

# その他
Mコマンド以外の対応はまだ終わってないようにも聞いていますし、一部のコマンドの仕様が変わっていますので、v2を使っている方が乗り換えるのがいいのかどうかは、それぞれの状況次第かなとは思います。
面白い取り組みとしては、[Pythonとバインディングするライブラリ]
(https://github.com/nysol/nysol_python)が登録されていることでしょうか、Ruby同様にPythonを通して実行できる日がやってきました。
今後が楽しみですね。