κeenのHappy Hacκing Blog | Lispエイリアンの狂想曲

2016年注目していきたい技術

2016年個人的に注目したいというか力を入れたいというか成行を見守りたいというか、そんな技術達を書き連ねていく。ものによっては「何を今更」と思うかもしれないがあくまで私にとって、だ。

順不同。

Apache Drill

公式。様々なデータソースに対してANSI SQLでクエリを投げれるやつ。 ビッグデータの時代にETL無しで迅速にデータを分析出来るようにするために開発されてるらしい。

様々なデータソースというのは本当に凄くて、CSVとJSONをJOIN出来たりする。 あるいはTSVの生ログとRDBにあるマスタデータをJOIN出来たりする。 個人的にはデータベースから抽出したCSVにクエリを投げたい時に便利かな、と思って注目してる。viewや一時テーブルを作る権限がないデータベースだってある。

あるいは、Zookeeperを使って分散モードで実行も出来るのでBigQueryみたいなのをオンプレ環境で動かすのにも使えるようだ。 その時はデータフォーマットはParquetで保存すると速いらしい。

Rust

公式。言わずもがな。去年の5月に1.0が出て、今年で一周年を迎える。そろそろ安全なシステムプログラミング言語としての地位を築いて欲しい。 今までは安全なシステムプログラミング言語が不在で、不適切にも関らずJavaで代用されることが多かったように思える。

やっぱりGCがあると安定性に心配が残るし、フルマネージングなランタイムシステムを持ってると他のランタイム、例えばlibuvなんかと相性が悪い。

かといってC++やCだと安全でない。システムが巨大になった時にデバッグがつらくなる。

Rustには是非Javaより速くて実行が安定しててC++よりも安全でCよりも抽象力があってマルチスレッドを使い始めても開発効率が落ちない言語として活躍して欲しい。

Kafka

公式。「ただのキュー」と言ってしまえばそれまでだが高トラフィックを捌ける信頼性の高いキューだ。 OSのキャッシュを上手く使ってるだとかJavaだからといって富豪的プログラミングをしてないだとか分かってる人が作った感じがしてすごくいい。

fluentdとかでデータを流すにしてもバックプレッシャーをやりたい、流す先が落ちてた時の事を考えたい、バッチじゃなくてストリーム(ミニバッチでもいいけど)でやりたい、とかの要望に応えてくれる。

floki

Github。Rustで作られているキュー。 kafkaに言及しているがRedisプロトコルをベースとしていて、色々コマンドがあるようなのでkafkaとは少し毛色が違いそう。

別にこれが次世代キューだ!なんて思ってる訳ではなくてRustで作られたミドルウェアがどうなっていくのか興味があるので観察対象に入っている。

RobotS

Github。RustのActor System。ほぼakkaの移植みたいだ。

Rustにアクターシステムが必要かは置いておいて、アクターシステムをRustの上に作るのは正解だと思ってる。 何故ならJVMや.NETのようにStop The Worldはないし、Erlangとは比べものにならないくらい速い。 さらに、もしかしたらだが、Rustなら所有権があるのでうまくすればメッセージを送るのにメモリコピーが起きないかもしれない。 まあ、Go使えばいいじゃんと言えばそれまでである。

Redox

公式。Rustで開発されているOS。まだまだ開発途上だがゆくゆくはMINIXくらいの地位は築いて欲しい。 コマンドは全然ないのにGUIは動いていたりZFSをサポートしていたりする。開発者は「本気でやってる」と言っていたのでそれなりのものは出来るんだろうと期待している。

コマンド群は、Rustでcoreutilsを書き直そうというcoreutilsというプロジェクトがある。それを使えると面白いんじゃないかと思っている。 こういう時ってまずはRustのコンパイラの移植をしないといけないのかな?よく分かってない。

ATS2

公式。線形型が肌で感じられる体になりたい。そのために修行したい。

SML likeなシンタックスなので学習コストが低い。依存型の部分もCoqに似てる気がするのでそこも学習コストが低い。つまり線形型の学習に集中出来る。 ほとんど実用ではなく修行のために学習したい。もしかしたらアプリケーションくらい作れるのでは、とも思っている。 あとCとの相互連携が出来るのも良い。

R

公式。最近データを扱うことが多くなった。そういう時に簡単に可視化が出来るこの言語は素晴しい。 まだほとんどコピペでしか動かしてないが、ちょこっとした分析くらいなら自分の手で書けるようになりたい。

異常検知

機械学習というとぼんやりしてるので絞ってみる。時系列データにスパイクがあったり、集団から外れた値があるのを検出する。 これが出来れば職人が手作業で検査していたものを自動化出来る。こういうのをやってみたいなぁとぼんやり願ってはいるがまだ遠い。

Coq

公式ソフトウェアの基礎をずっとやっていたが、ProofGeneralのバグなのか、とある証明を食わせるとProofGeneralがフリーズするようになって以来途絶えている。 バグを直すか回避策を見付けるかして先に進みたい。こちらが終わったら次はCoqArtがある。 #readcoqartにも行く行く詐欺をしてるので行かねば。

Isabelle

公式。SMLユーザとしてはCoqをやるならIsabelleもやらないとな、と思っている。 ここによるとCoqとはまた違った証明のやりかたらしいのでそういう意味でもやる意味あるのかな、とか。 Coqが終わってさらに手が空いてたら、くらい。

Prolog

修行の1つとしてPrologをやりたい。というか、作りたい。その前にまずはPrologを書けるようになりたい。 少しやってみているが、GNU PrologもSWI PrologもただのPrologとしか呼ばれていなくて情報を見付けるのに苦難している。 Lispみたくそれっぽい見た目と挙動をしていたらPrologを主張出来るのだろう。

今気になっているのは制約ソルバとPrologの関係。 もし制約ソルバでPrologを実装出来るなら実装をサボれるし制約ソルバを触ってみれる。ただ、制約ソルバがチューリング完全な気がしないので使えるとしても部分的な気がする。

Fortran

神託の言語。

まあ、ベクトル計算楽そうだし機械学習の手習いついでにアルゴリズムを実装してみるのも悪くないのかな、と思えてきた。


思ったより言語の話題が多かった。

Written by κeen