rbenv を使った bundler のインストール
$ rbenv exec gem install bundler $ rbenv rehash
上記 bundler を使った gem のインストール
$ rbenv exec bundle install --path vendor/bundle
実行
$ bundle exec ruby *.rb
自分のブログを遡って見たら、どうやらはじめてのOSCは2013年のOSC名古屋だったみたいです。
2013年に一般来場者として初参加し、2014年に Eject Command UG として展示側で参加しました。
そして今年は初めて実行委員の一人として参加しました。
これは Eject Advent Calendar 2016 24日目の記事です。
(☝ ՞ਊ ՞)☝ういーん
Eject AC 始まってから、なかなか記事書く時間が取れず残念な感じでしたが、24日目にギリギリ間に合いました。
今回はEject工作におけるクライアントとしてSlackのbotを作成したので、それの紹介をしたいと思います。
ネタ的には今年のOSC名古屋で出してました。
Ejectコマンド工作において、一番面倒なのはクライアントの用意です。
外部からアクセスできるようにして、適当にUI作ってetc…
また、工作ごとに作っていては埒があきません。(専用で作った方がいい場合も多々ありますが)
そこで、簡単に楽にを目標にSlackをクライアントを使ったBotを作成してみました。
とりあえずソースはこちら↓ github.com
これはSlackでBotに対して特定のワードを打ち込むと反応するというものです。
今回は eject /dev/cdrom
というワードに反応するようにしました。
ワードに引っかかったら、子プロセスで実際にejectコマンドを実行するようにしました。
展示用にワードを設定しているので、かなり面倒なワードですが、実際に使う時はもっと短いといいでしょう。
一応上記機能と同様の実装で、デバイスの検索やドライブの開閉状態の確認なども実装しています。
使用言語はnode.jsで、botkitというライブラリを使って作りました。
実装はいたって簡単で、 controller.hears()
の第一引数で反応するワードを正規表現で書き、
第二引数で反応するメッセージタイプを設定します。
あとは function(bot, msg)
内で実行したい処理を書いてあげればクライアントの完成です。
ちなみに実行方法は token=BOTのトークン node app.js
です。
簡単でしょう?
これでクライアントのことを気にせずにEject工作が捗るぞ〜(☝ ՞ਊ ՞)☝
終わり
これはwhywaita Advent Calendar 2016の14日目の記事です。
whywaita ACってなんなんだ…(哲学)
whywaita AC何書けばいいのかわからんって言ってたら、その日の飯でもいいとのこと。
ならば適当に飯屋の情報でも書いとくか。
名古屋の栄で一番好きな店。
本店は三重県らしいね。>>東洋軒
ちなみに栄店は名古屋三越の9階にある。
洋食屋でおそらく一番人気なのはブラックカレーだろうか
ブラックカレーパンとかはお持ち帰りもできるのでオススメ。
最近東洋軒で食べたもんの写真はこんな感じ。
たしかメニューは東洋軒ランチかなんかだったような(うろ覚え)
写真のはメインのハンバーグステーキとデザートのキャラメルのババロア。
以上、人権飯情報でした。
これは mikutter Advent Calendar 2016 の3日目の記事です。
こんにちは、あひる焼きです。
この記事は mikutter AC の記事の中では珍しくておくれてないタイプの記事です。
本当はプラグインとか作って投稿したかったのですが、なかなかすぐにはできそうになかったので代わりのネタです。(ておくれてない)
ちなみに前提条件として、display_requirement プラグインを導入済みということで進めます。
みなさん、mikutterのショートカット機能はご存知だと思います。
上のスクショの様に設定画面から様々なショートカットを登録できます。
では、ショートカットのキーバインドでダブルクリックやトリプルクリックが設定できるのはご存知でしょうか?
そんなもん使ってどうすんねんと思うかもしれませんが、結構便利です。
トリプルクリックを実行すると、実行中にダブルクリックの判定が行われダブルクリックとトリプルクリックの両方が実行される仕様です。 当たり前かもしれませんが、ダブルクリックが優先して実行されます。 つまり、ダブルクリックにクリック対象からフォーカスが外れるような操作(ユーザー画面を開く等)を設定していた場合、トリプルクリックの判定がされなくなってしまうので注意が必要です。
この仕様を使うことで、mikutterには標準搭載されていない ふぁぼってRT が実行できる様になります。
Button 1 Double Click
にふぁぼを割り当て Button 1 Triple Click
にRTを割り当てると、トリプルクリック実行時にふぁぼとRTが実行されるといった具合です。
最初はプラグインを作ってしまおうかなと思っていましたが、ショートカットを設定するだけで実現できるのは楽です。
おわり
明日は最近ひよわ焼きで絶賛炎上中(語弊の塊)の 京橋 ひよわさん です!
これは d250g2 Advent Calendar 2日目の記事です。
こんにちは
最近毎日燃えてるあひるです。
炎上という点で親近感を感じたので、本ACに投稿させていただきます。
An image could not be created from the given input
どうやらconcrete5が使ってるモジュールのバグを踏んだっぽいです。
12/2 00:20 頃
あまり時間もないし、リブートしたら直ってくれということで一旦リブートしてみることに。
リブート後
( ՞ਊ ՞)…
12/2 00:30 頃
どうしようもなくなる
執筆現在
. ☝
՞
_人人人人人人_
> ( ) < ☞
 ̄YYYYYY ̄
՞
ਊ
まさか執筆ネタを作ろうとしたら、サイトが炎上するとは思いませんでした。
炎上の地はこちらになります >> yakuna.ahiru3.net
今日も1日焼かれたぞい…
. ∞
∫
,';:☜;.`,ਊ,,;';,;☞,.՞
՞
お わ り
明日はておくれの総本山にして御本尊の @toshi_a 氏です
本記事はmikutterのあひる焼くなプラグインの大枠を使って, いろんなておくれに使ってもらうことを目的としている.
あひる焼くなプラグインにコミットしていただいた方々に感謝します.
ちなみに本投稿を書いている時はOSC明けで脳みそがておくれてる状態であるため, いつもに増して読解力が試される日本語である可能性が高いことに注意していただきたい.
なお自分に対する覚書でもあるので, 見ればわかるようなことまで言葉にしていますが悪しからず.
わからん
あひる焼きエバンジェリストに聞いてくれ -> しまだぁ氏 & しか焼き氏
「あひる焼き」「Ahiruyaki」「扒家鸭」に反応して, 様々なリプライをランダムに返すmikutterプラグインです.
最近では時間帯によって飯テロ画像を返す場合があるようです.
ソースコードはGitHubで管理されています.
github.com
plugin └── ahiru_yakuna ├── README.md ├── ahiru240.jpg ├── ahiru_yakuna.rb └── replydic ├── chinese.yml ├── default.yml ├── joya.yml ├── meshitero.yml ├── stein.yml └── yakiome.yml
.mikutter.yml
このファイルはプラグインの基本的な設定ファイルになります.
ファイル内の plugin:
に設定している [streaming]
によって, CLIモードでもストリーミングに対して反応できるようになります.
CLIモードに関しては後ほど書きますが, これがないとCLIモードのmikutterを起動すると直後に終了してしまいます.
ahiru_yakuna.rb
これが本体のソースになります.
その他の .yml ファイル
リプライ辞書です. ahiru_yakuna.rb
はこれらのリプライ辞書を起動時にロードし, yml内からランダムに選んでリプライを取得します.
YAML.load_file
でリプライ辞書の読み込みを行っています. この際に読み込み対象の辞書(ymlファイル)が存在しなかった場合は終了するようになっています.
on_appear
やら ms.each
やらは飛ばします.
さて, ms.each do |m|
のループ内では何をしているかを簡単に説明します.
if m.message.to_s =~ /あひる焼き|Ahiruyaki|扒家鸭/ \ and m[:created] > DEFINED_TIME \ and !m.retweet?
ここではまずメッセージに反応するかを判定しています.
上記のコードではメッセージに「あひる焼き」等が含まれているか, アプリ起動後に受信したメッセージであるか, リツイートでないかをそれぞれ見ています.
それ以下の条件分岐に関しては, それぞれ時間を見て飯テロ辞書に切り替えたり, 受信したワードによって辞書を変えたりしています.
reply = default.sample
のように最初に読み込んだymlに対して sample
というものをつけていますが, これは読み込んだymlの中からランダムに一つ取得するというものです.
最後に,
Service.primary.post(:message => "@#{m.user.idname} #{reply}", :replyto => m) m.message.favorite(true)
でリプライを返してファボって終わりです.
なお, 本プログラムでは自分のツイートにも反応するようになっていますが, 自分には反応して欲しくない場合は, 上記のifに and !m.user.is_me?
でも追記すればいいのではないでしょうか.
現在あひる焼くなプラグインはWindows 10で動いていますが, 自分もTLを見たいということでGUIであひる焼くなを起動しています.
ただし今後は検証をしつつ, botプラグインはサーバ上でCLIで実行に移行していきたいと思います.
本プラグインをCLIで動かすには以下のコマンドを叩けば動きます(動いて). (ただし本プログラムが ~/.mikutter/plugin/
に設置されている前提です)
$ ruby mikutter.rb --plugin=ahiru_yakuna
--plugin=プラグインのスラグ
で, そのプラグインのみをロードしてmikutterが起動してくれるため, GUIに依存していない限りCLIでの実行が可能なようです.
本プラグインは streaming
が必要なので, プラグインの .mikutter.yml
内にすでに streaming
を指定していますが, もしymlに書いていない場合は,
$ ruby mikutter.rb --plugin=ahiru_yakuna,streaming
でも動きます.
なお, ymlにも実行オプションにも streaming
を指定しない場合は, mikutterの実行直後に終了します. ておくれ作者曰く, streamingなどのイベント取得系のものを読み込んでやらないと, イベントが発生しないので終了していいよね〜ってことで終了するらしい(うろ覚え)
以上のような仕組みであひる焼くなプラグインは日々焼いてくる者共に報復をしているわけであります.
残念なのは飯テロのつもりで実装した時間限定の飯テロモードが, 本日の飯占いとやらに使われており, 本来の役目を果たせていないことでしょうか. 訓練された焼き勢ほど厄介かつヤバイものはいないということですね. (怖い)
本プログラムはmikutterのプラグインとして初めて作ったものであると同時に, 作成にあたって多くのておくれに力を貸していただきました.
ありがとうございます.
さて, あひる焼くなの仕組みを参考にbotを作りたいというヤバイ話を聞いたので, あひる焼きにチューニングされた部分を削ぎ落としたものをサンプルとして作成し, GitHubに公開しました. 自分もmikutterでbot運用したいという方は参考にしてみてください.(参考になるとは言っていない)
May The Teokure Be With You…