OUCCにうごめくbot達
この記事はOUCC Advent Calendarの記事として書かれました.
はじめに
前年度我が部ではミーハーな副部長とミーハーなサーバー係が揃ったおかげで部内に様々なツールが導入されました. その一つが部内チャットツールのslackです. 今年度は現役部員の多くに加入してもらったため平常時の雑談の他, 学祭などイベントでの意思疎通に有効活用されていました.
さて、slackといえばBOTの作りやすさ、そしてそれによるクソBOTの量産が有名です. 例にもれずOUCCのslackでも暇な部員が作った大量のbotがうごめいていています. この記事ではbotおよび開発環境の紹介をしたいと思います.
続きを読むそう、matplotlibならね。
この記事はPython Advent Calendar 2015の記事として書かれたものです.
はじめに
ASCIIしか表示できない環境でもグラフを描画したい,そんな機会はいつどこでも誰にでも巡ってきます. 相手がテキストメール原理主義者であったり, 家にVT100しかなかったり… そんなときでも使い慣れた言語とライブラリでグラフが描ける.そう,matplotlibならね.
続きを読む30年前のキーボードをUSBキーボードとして復活させる
この記事はOUCC Advent Calendar 2014の18日目の記事のはずでした。
作ったもの
父親が30年前に会社から拾ってきたらしいPC-8801のキーボードをUSB HID化した。
続きを読む
Rubyが切り開く科学の未来
この記事はRuby Advent Calendar 2014の13日目の記事です。
初めに
Rubyを教育・研究に使おうという試みはRubyの黎明期からありました。 この時期の有名なパッケージとしてはバイオインフォマティクスのBioRubyや地球科学の電脳Rubyプロジェクトが有名です。
先述のBioRubyやGPhys(電脳Rubyの成果物)は現在も更新が続けられており、多数の利用者を抱えています。 しかし全体として見た場合、科学の分野で使われるLL言語としてRubyはPythonやRの後塵を拝している印象があります。
科学計算における均質化、あるいはなぜPythonが着実に他言語のシェアを奪っているか
記事のようにこの分野ではPythonコミュニティが非常に活発で、機械学習など新しい技術は真っ先にPythonで実装されるようになっています。
しかし最近Rubyでも少しずつですが環境が充実してきており、実際にPythonから乗り換える人もいるようです。
I hail from the world of Python
この記事では2つの簡単な例を通してgemを紹介しながら、科学研究の分野にRubyが切り込む可能性を探ってみたいと思います。
続きを読む近況報告
アウトプットをしないといけないという強迫観念に駆られてのポスト。
10月前半
U-22プログラミング・コンテストで経済産業大臣賞を受賞しました。 ネタはRuby製プロットライブラリのNyaplot。githubはこちら、日本語の紹介記事はこちら。
病気で控え室に引きこもっていて他の人の発表をほとんど聞けなかったのがとても残念。 他の人の発表についてはLV.4さんの記事が詳しいと思います。
プレゼンの後に症状が悪化して逃げ帰ってしまい多方面にご迷惑をおかけしました。 小渕大臣から手渡し?で賞状を貰えるはずだった授賞式にも欠席する羽目になり涙目です。 本当に体調管理には気を付けないといけないなあと思いました。
色々な人に祝っていただいてとても思い出深い賞になりました。
10月半ば
2014年度Rubyアソシエーション助成金の審査に通りました。 ネタはNyaplot::DataFrameの機能拡充・分離による解析機能と可視化機能の分離です。 応募した書類はこちらで公開しています。 相談に乗っていただいた@kozo2さん, @ngotogenomeさん, @uwabamiさん, @katsyoshiさんに感謝します。
10月後半
人体の運動を主に扱っている研究室でしばらく遊ばせてもらえることになりました。 扱うネタはここら辺です。
非線形システムの解析の用語でうってなるので体を慣らす作業からです。 全然知らない分野の論文読んでふむふむするのは楽しい。
以上、近況報告でした。
新しいRuby向けプロットライブラリNyaplot
はじめに
Google Summer of Code 2014にSciRubyの学生として参加していました。 3か月の期間が無事終了し、ちゃんとした成果物ができたので記事にします。 Nyaplotについて、コードや詳しい使い方はこちらをご覧ください:
あーなんか余裕なかったなあとかGSoCの感想みたいなのはまた落ち着いてから書こうかと思います。
概要
IRuby notebook上で動作する、plotのためのgem。
すごいところ
インタラクティブな/インタラクティブにplotができる。
IRuby notebook上で対話的にプロットを作ることができます。また標準で用意される様々なモジュールがユーザーの対話的な操作を支援します。
作ったプロットはSVGやWebGLを使いブラウザ上に表示でき、マウスやタッチパネルで触れることができます。 この例のように複数ペイン間でデータのフィルタリングを行うこともできます。
公開もnotebookをDropboxやgistに張り付けてnbviewerのリンクを送るだけです。 こんな感じでコードにmarkdownで簡単な説明を付けてgistで公開、みたいなことがすぐにできます。
色んなプロットができる。
基本的な2Dのグラフから3Dプロット, 地図上でのプロット, circos風の環状プロットまで様々なものをこのgemだけで作ることができます。 JavaScriptとRubyですぐに拡張が作れるので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
Nyaplot::Plotがプロットの基本となるクラスで、Plot#add
で新しい図を追加できます。add
はNyaplot::Diagram
のインスタンスを返し、このオブジェクトが持つメソッドを呼び出すことで図の設定を変えることができます。
例えば色を変えるには以下のようなコードを書きます。
color = Nyaplot::Colors.qual sc.color(color)
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']})
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
雑感
かなり使えるやつなので是非お試しください。 問題や提案などあればGitHubのIssueかpull-reqでお願いします。
真空管USBメモリを3Dプリンタで作った
はじめに
SFの中にスチームパンクというジャンルがあります。
(参考:スチームパンク - Wikipedia)
蒸気機関が小型化・発展して19世紀の空気そのままに文明が発展した現代/未来を描くジャンルです。
最近読んだ中では「ペルディード・ストリート・ステーション」(チャイナミエヴィル, ハヤカワ文庫)などがスチームパンクに含まれます。
(参考:ペルディード・ストリート・ステーション (上) (文庫) 感想 チャイナ ミエヴィル - 読書メーター)
真空管がスチームパンクに入るかどうかはかなり怪しい気がしますが(電気使ってるし…)一応スチームパンク風のUSBメモリを作ってみました。
動作中は橙色に光ります。
ヒーターを点けるのはUSB給電では難しく、コンデンサを使った残光回路もあまりうまくいかなかったので一番単純に、書き込みや読み込みのタイミングでLEDが点灯するようにしました。
またここで紹介されているように一度真空管を切断してヒーターのあった部分にLEDを付けるのも楽しいと思います。
(参考:真空管風 デジタルオーディオアンプ製作への道のり1)