OUCCにうごめくbot達

この記事はOUCC Advent Calendarの記事として書かれました.

はじめに

前年度我が部ではミーハーな副部長とミーハーなサーバー係が揃ったおかげで部内に様々なツールが導入されました. その一つが部内チャットツールのslackです. 今年度は現役部員の多くに加入してもらったため平常時の雑談の他, 学祭などイベントでの意思疎通に有効活用されていました.

さて、slackといえばBOTの作りやすさ、そしてそれによるクソBOTの量産が有名です. 例にもれずOUCCのslackでも暇な部員が作った大量のbotがうごめいていています. この記事ではbotおよび開発環境の紹介をしたいと思います.

続きを読む

そう、matplotlibならね。

この記事はPython Advent Calendar 2015の記事として書かれたものです.

はじめに

ASCIIしか表示できない環境でもグラフを描画したい,そんな機会はいつどこでも誰にでも巡ってきます. 相手がテキストメール原理主義者であったり, 家にVT100しかなかったり… そんなときでも使い慣れた言語とライブラリでグラフが描ける.そう,matplotlibならね.

続きを読む

Rubyが切り開く科学の未来

この記事はRuby Advent Calendar 2014の13日目の記事です。

初めに

Rubyを教育・研究に使おうという試みはRubyの黎明期からありました。 この時期の有名なパッケージとしてはバイオインフォマティクスBioRubyや地球科学の電脳Rubyプロジェクトが有名です。

先述のBioRubyGPhys(電脳Rubyの成果物)は現在も更新が続けられており、多数の利用者を抱えています。 しかし全体として見た場合、科学の分野で使われるLL言語としてRubyPythonやRの後塵を拝している印象があります。

科学計算における均質化、あるいはなぜPythonが着実に他言語のシェアを奪っているか

記事のようにこの分野ではPythonコミュニティが非常に活発で、機械学習など新しい技術は真っ先にPythonで実装されるようになっています。

しかし最近Rubyでも少しずつですが環境が充実してきており、実際にPythonから乗り換える人もいるようです。

I hail from the world of Python

この記事では2つの簡単な例を通してgemを紹介しながら、科学研究の分野にRubyが切り込む可能性を探ってみたいと思います。

続きを読む

近況報告

アウトプットをしないといけないという強迫観念に駆られてのポスト。

10月前半

U-22プログラミング・コンテストで経済産業大臣賞を受賞しました。 ネタはRuby製プロットライブラリのNyaplot。githubこちら、日本語の紹介記事はこちら

f:id:domitry_h:20141017080648j:plain

病気で控え室に引きこもっていて他の人の発表をほとんど聞けなかったのがとても残念。 他の人の発表についてはLV.4さんの記事が詳しいと思います。

プレゼンの後に症状が悪化して逃げ帰ってしまい多方面にご迷惑をおかけしました。 小渕大臣から手渡し?で賞状を貰えるはずだった授賞式にも欠席する羽目になり涙目です。 本当に体調管理には気を付けないといけないなあと思いました。

色々な人に祝っていただいてとても思い出深い賞になりました。

10月半ば

2014年度Rubyアソシエーション助成金の審査に通りました。 ネタはNyaplot::DataFrameの機能拡充・分離による解析機能と可視化機能の分離です。 応募した書類はこちらで公開しています。 相談に乗っていただいた@kozo2さん, @ngotogenomeさん, @uwabamiさん, @katsyoshiさんに感謝します。

10月後半

人体の運動を主に扱っている研究室でしばらく遊ばせてもらえることになりました。 扱うネタはここら辺です。

非線形システムの解析の用語でうってなるので体を慣らす作業からです。 全然知らない分野の論文読んでふむふむするのは楽しい。

以上、近況報告でした。

KC3でD3.js勉強会をやった話

関西情報系学生団体交流会(KC3)でD3.js勉強会をやってきました。

KC3立命館大学コンピュータクラブ(RCC)が主催する交流会です。今年も例年通り丹波口京都リサーチパークを会場として使わせていただきました。

参加者17人と多くの人に参加していただき、楽しく終えることができました。

続きを読む

新しいRuby向けプロットライブラリNyaplot

はじめに

Google Summer of Code 2014にSciRubyの学生として参加していました。 3か月の期間が無事終了し、ちゃんとした成果物ができたので記事にします。 Nyaplotについて、コードや詳しい使い方はこちらをご覧ください:

あーなんか余裕なかったなあとかGSoCの感想みたいなのはまた落ち着いてから書こうかと思います。

概要

IRuby notebook上で動作する、plotのためのgem。

すごいところ

インタラクティブな/インタラクティブにplotができる。

IRuby notebook上で対話的にプロットを作ることができます。また標準で用意される様々なモジュールがユーザーの対話的な操作を支援します。

作ったプロットはSVGWebGLを使いブラウザ上に表示でき、マウスやタッチパネルで触れることができます。 この例のように複数ペイン間でデータのフィルタリングを行うこともできます。

公開もnotebookをDropboxやgistに張り付けてnbviewerのリンクを送るだけです。 こんな感じでコードにmarkdownで簡単な説明を付けてgistで公開、みたいなことがすぐにできます。

色んなプロットができる。

Extensions

基本的な2Dのグラフから3Dプロット, 地図上でのプロット, circos風の環状プロットまで様々なものをこのgemだけで作ることができます。 JavaScriptRubyですぐに拡張が作れるのでJavaScriptの教養があれば自由にプロットを追加できます。

使い方が簡単

私感ですがmatplotlibやBokehのようなMATLAB風のAPIを備えたソフトウェアは、簡単なプロットのときはいいのですがちょっと複雑なプロットを作ろうとすると行数が爆発する傾向があると感じます。 Nyaplotではこの例のように、気象データの可視化のような複雑な課題でもプロット部分はわずか数行ですみます。 IRuby上では補完も効くのでいちいち使い方を調べる必要もありません。

使い方

gem install nyaplotでインストールできます。 gemのディレクトリの中のexamples/rb/*にサンプルコードがいくつか入っているので実行するとプロット結果がhtmlで出力されます。

Nyaplot単体でも動くのですが、IRuby notebookを一緒にインストールすることをお勧めします。 IRubyはブラウザ上で動く対話的なRubyの実行環境で、NyaplotはIRuby上で動作するように設計されています。 上の動画もIRuby上での動作を録画したものです。 インストール方法がやや煩雑なので別途Qiitaに書いた記事を参考にしてください。

API(一部)

以下ではNyaplotの機能のほんの一部しか紹介していません。詳しくはチュートリアルドキュメントをご覧ください。

以下のコードで散布図を作ることができます。

plot = Nyaplot::Plot.new
sc = plot.add(:scatter, [0,1,2,3,4], [-1,2,-3,4,-5])
plot.show

Scatter

Nyaplot::Plotがプロットの基本となるクラスで、Plot#addで新しい図を追加できます。addNyaplot::Diagramインスタンスを返し、このオブジェクトが持つメソッドを呼び出すことで図の設定を変えることができます。 例えば色を変えるには以下のようなコードを書きます。

color = Nyaplot::Colors.qual
sc.color(color)

Nyaplot::Colors

Colors.qualは質的(qualitative)データのプロットに最適な色のセットをランダムに返します。IRuby上ならば上のようにその場で色を確認することができ、何度か実行して好きな色を選択することができます。

出来上がったプロットは以下のコードで確認できます。 Plot#export_htmlに引数を渡すと出力されるhtmlファイルの名前を指定することができます。

plot.show # show plot on IRuby notebook
plot.export_html # export plot to the current directory as a html file

上のサンプルはとてもシンプルなものですが、Nyaplot::DataFrameを使うことでより複雑なプロットを作ることができます。

df = Nyaplot::DataFrame.new({a: [0,1,2,3,4], b: [-1,2,-3,4,-5], type: ['a','b','a','a','b']})

Nyaplot::DataFrame

Plot#add_with_dfを使ってDataFrameを元にプロットを作ることができます。 Diagrams::Scatter#fill_byの引数に行(column)の名前を指定することでその行の値にしたがって各点の色を塗り分けることができます。

sc = plot.add_with_df(df, :scatter, :a, :b)
sc.fill_by(:type)
plot.show

Nyaplot::Colors

雑感

かなり使えるやつなので是非お試しください。 問題や提案などあればGitHubのIssueかpull-reqでお願いします。

真空管USBメモリを3Dプリンタで作った

はじめに

SFの中にスチームパンクというジャンルがあります。
(参考:スチームパンク - Wikipedia)

蒸気機関が小型化・発展して19世紀の空気そのままに文明が発展した現代/未来を描くジャンルです。
最近読んだ中では「ペルディード・ストリート・ステーション」(チャイナミエヴィル, ハヤカワ文庫)などがスチームパンクに含まれます。
(参考:ペルディード・ストリート・ステーション (上) (文庫) 感想 チャイナ ミエヴィル - 読書メーター)

真空管スチームパンクに入るかどうかはかなり怪しい気がしますが(電気使ってるし…)一応スチームパンク風のUSBメモリを作ってみました。

f:id:domitry_h:20140224165217j:plain

動作中は橙色に光ります。
ヒーターを点けるのはUSB給電では難しく、コンデンサを使った残光回路もあまりうまくいかなかったので一番単純に、書き込みや読み込みのタイミングでLEDが点灯するようにしました。
またここで紹介されているように一度真空管を切断してヒーターのあった部分にLEDを付けるのも楽しいと思います。
(参考:真空管風 デジタルオーディオアンプ製作への道のり1)

続きを読む