ラベル Mikutter の投稿を表示しています。 すべての投稿を表示
ラベル Mikutter の投稿を表示しています。 すべての投稿を表示

2016/12/24

Windows 10 に mikutter 3.4.8 をインストールした

わけあって moguno/mikutter-windows に頼らずに windows にインストールしてみたいと思い、実際やってみたので作業を記録する。

環境まとめ

  • OS: Windows 10 Pro
  • Ruby: 2.3.3

Ruby 入手

  • RubyInstaller Downloads
    • Ruby 2.3.3 (x64) をダウンロード
      • パスを通す設定をしてください
    • DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe をダウンロード

mikutter ソースコード入手

git インストール済みなのでクローンする。

git clone git://toshia.dip.jp/mikutter.git

mikutter に必要な gem たちのインストール

DevKit を展開してできた msys.bat を実行。

cd /PATH/TO/mikutter
gem install bundler
bundle install --path vendor/bundler

mikutter 実行

bundle exec で起動。

cd /PATH/TO/mikutter
bundle exec ruby mikutter.rb

ショートカット作成

まずはスタート用のバッチファイルを作る。

cd /PATH/TO/mikutter
echo start rubyw mikutter.rb> mikutter.bat

作成したバッチファイルへのショートカットをデスクトップに作る。

TODO

  • display_display_requirements
  • 別窓で画像開くやつの画像が表示されない
  • 音を出す
    • 今は音が鳴らない moguno/mikutter-windows のサウンドプラグイン単独配布してくれないかなぁ...。
  • アイコン
    • ショートカットアイコンに png 指定できないの辛い

音とアイコンについては moguno/mikutter-windows で実現されているので、真似して作業していく。

2015/11/10

[作業記録]Mikutter on JRuby on Debian 環境構築手順メモ

目次

環境

  • OS: Debian 8 minimal インストールから、ssh, sudo をインストールした状態。

手順

### 必要なパッケージのインストール
sudo aptitude update
sudo aptitude install git default-jdk

### jruby の準備(apt のパッケージが古くて?gem install に失敗するため、新しいのを持ってくる)
mkdir develop
cd develop
wget https://s3.amazonaws.com/jruby.org/downloads/9.0.3.0/jruby-bin-9.0.3.0.tar.gz
tar zxfv jruby-bin-9.0.3.0.tar.gz
PATH=$PATH:~/develop/jruby-9.0.3.0/bin/

mkdir -p ~/project
cd ~/project
git clone git://toshia.dip.jp/mikutter.git
cd mikutter

### プラグイン調整開始
cd core/plugin

# 不要なプラグインを削除
rm -rf achievement activity alsa aspectframe bitly bugreport change_account command console direct_message display_requirements extract followingcontrol gtk gui home_timeline image_file_cache libnotify list list_for_profile list_settings mentions notify openimg photo_support profile proxy ratelimit saved_search search set_input set_view settings shortcutkey skin smartthread sound user_filesystem_cache

# CUI で streaming が有効になるように、依存関係から gui を外す
sed -e "s/  - gui//g" streaming/.mikutter.yml > streaming/.mikutter.yml_; mv streaming/.mikutter.yml_ streaming/.mikutter.yml

# CUI 用のプラグインを入れる
mkdir -p ~/.mikutter/plugin
cd ~/.mikutter/plugin
git clone git://github.com/mikoto2000/mikutter_stdout.git stdout
git clone git://github.com/mikoto2000/mikutter_cui_account_register.git cui_account_register

### 実行
cd ~/project/mikutter
jruby -S gem install bundle
jruby -S bundle install --path=vendor/bundle
jruby -S bundle exec jruby mikutter.rb

2014/10/03

[Mikutter] mikutter の change_account プラグインの interactive 機能を使ってみる

mikutter で、クリック一発でイベント発行出来る方法無いかなぁと考えていたら、 mikutter-adventure を思い出したので、参照しながらボタンクリックでイベント発火の練習をしてみる。

こんな感じでメッセージ内に表示されたボタンに応じたイベントを発行できるようだ。

多分コマンドでも代用できるけど、いちいち右クリックして選択とかしたくない・させたくない場合に使えそう。 (多用してボタンが並ぶとちょうどよいタイミングで画面がスクロールしてひどいことになったりしそうですが...)

タスク管理プラグイン作って、完了ボタンを押すとみくったーちゃんが褒めてくれる感じのプラグインなんてどうだろうか?

参考文献

mikutter-adventure/mikutter-adventure.rb at master · moguno/mikutter-adventure

2014/09/19

[Mikutter] UserConfig に連想配列を格納して、設定画面から変更できるようにしたい

UserConfig に連想配列を格納して、設定画面から変更できるようにしたかったので挑戦してみた。

実現方針は下記。

  • 設定画面の設定値を連想配列に紐付ける
  • 連想配列に変更があったら UserConfig を更新する

設定画面の設定値を連想配列に紐付ける

Settings の各関数にリスナを渡せるので、リスナ内で連想配列に出し入れするよう頑張ってもらう。

select は、 3.0.5 の時点ではリスナを渡せない。 3.0.6 くらいでフィックスされるのではないだろうか。

連想配列に変更があったら UserConfig を更新する

UserConfig[key] で取得できる値はコピーなので、 格納した連想配列に変更があった場合には連想配列自体を入れ替える。

上述のリスナの set 処理の最後に、連想配列をごっそり入れ替える処理を入れる感じ。

コードと、その結果の設定は下記の通り。

設定項目がゴチャッとしてきたらそれなりにわかりよくなるのではないでしょうか。

書きながら思ったけど、何かやるたびに連想配列全体のコピーが走るんだな、これ。 性能が気になる場合は、更新・取得にさらなる工夫が必要ですね。

参考文献

2014/08/14

[Mikutter, 作業記録] mikutter を Windows8 にインストールした

Windows8 に mikutter をインストールしたい

まずは ggr.

MikutterInstallBattleForWindows - mikutter Wiki(http://yuzuki.hachune.net/wiki/MikutterInstallBattleForWindows)

ふむ。やるか。

ruby のインストール

wiki の指示通りに rubyinstaller-2.0/0-p481.exe をダウンロードしてインストールした。

mikutter のダウンロード

都合のよいことに、すでに git 導入済みだったので、リポジトリからクローンして とってきた。

vimshell% mkdir develop
vimshell% cd develop
vimshell% git clone git://toshia.dip.jp/mikutter.git
!!!Cloning into 'mikutter'...!!!
!!!Checking out files: 100% (672/672), done.!!!

windows 用パッチブラグインの展開

こちらも git で。

vimshell% cd ~/develop/mikutter/plugin
vimshell% git clone https://github.com/moguno/mikutter-windows.git mikutter-windows

セットアップスクリプトの実行

vimshell% cd ~/develop/mikutter/plugin/mikutter-windows/
vimshell% c:/Ruby200/bin/ruby.exe ./setup.rb

...何も起きなかった。さすがにだめか。普通にダブルクリックする。おぉ、bundler のフェッチとインストールがはじまった。

コマンドプロンプトが閉じないと思っていたら、ショートカットできてた。コマンドプロンプトは開きっぱなしなのかな? 反応なし。コマンドプロンプトで「ruby mikutter」やってみたら gem が足りないって怒られた。やはりあれは途中だったのか...。しまった。 setup.rb をやり直す。

今度はちゃんと complete って表示されるまで待ったよ。

そのあと、「ruby mikutter.rb」でできました。

デスクトップにできたショートカットでも問題なし。

2014/08/12

[Mikutter] データソースを作ってみたい!

データソースの作成がしてみたいので、ホームタイムラインと同じ物を表示するだけのデータソースを定義してみる。

そもそもデータソースって何?

「抽出タブ」で選択できるデータの取得元。抽出タブの設定でチェックを入れると、そのデータソースのメッセージがタブに表示されるようになる。

「抽出タブ」を全く使っていなかったので、自分にとって「得体のしれない何か」であったが、今回の勉強でこんなもんかと解った気がしますわ。

「抽出タブで対応できないような特定のツイートを抽出する」、「外から情報撮ってきて表示する」ような機能はデータソース使うのがスマートっぽいですね。

じゃあ作ってみる

はい、やっていきましょう。

前準備

勉強用プラグイン作成。

cd ~/.mikutter/plugin/
mikutter.rb generate study_datasource
mikutter.rb spec study_datasource

コーディング

データソースを作成するにあたり、最低限必要な作業は下記の通り。

  1. 提供するデータソースの宣言(登録)
  2. 1 で宣言したデータソースにメッセージを追加する

これだけ。以下、今回作った具体的なコード。

.mikutter.yml

---
slug: :study_datasource
depends:
  mikutter: 3.0.4
  plugin: []
version: '1.0'
author: 
name: study_datasource
description: データソースの勉強するよー

study_datasource.rb

# -*- coding: utf-8 -*-
# mikutter datasource の勉強。
# ホームタイムラインのクローンデータソースを作成する。
#
# データソース作成手順としては、
#     1. filter_extract_datasources で、「こんなデータソースを作るよー」と宣言
#     2. データソースにメッセージを追加したいタイミングで
#        「:extract_receive_message」を呼ぶ。
#         その際、引数に「データソースに紐付くシンボル」を渡す。
# という感じ良いみたい。
#
# 既存タイムラインからの抽出でない場合は、
#     1. 自前でデータ取得ループ作成
#     2. 自前でメッセージ作成
#     3. 「:extract_receive_message」を呼ぶ
# となる感じですね。

Plugin.create(:study_datasource) do
    DATASOURCE_NAME = 'clone_home_timeline'

    # このプラグインが提供するデータソースの定義を組み立てて返却
    def datasources
        ds = {clone_home_timeline: "ホームタイムラインのクローン".freeze}
        ds[DATASOURCE_NAME.to_sym] = DATASOURCE_NAME
        ds
    end

    # 提供するデータソースの登録
    # 登録は、このプラグインで定義したデータソースを
    # 引数で渡ってきたデータソースにマージすることで行う。
    filter_extract_datasources { |ds|
        p "Add My Datasources"
        [ds.merge(datasources)]
    }

    # データソースにメッセージを追加
    # on_update で受け取ったメッセージ全てをデータソースに突っ込んでいる。
    on_update do |service, messages|
        messages.each do |message|
            p "Add message to #{DATASOURCE_NAME}"
            Plugin.call(:extract_receive_message, DATASOURCE_NAME.to_sym, [message])
        end
    end
end

参考文献

2014/07/30

[Mikutter] イベント定義を試した

イベントを定義したい

リストに所属している人のツイートがあった場合に発火するイベントが欲しくなったので、勉強がてら作って見る。

イベント定義の手順

  1. defevent で下記項目を定義
    • イベント名
    • 優先度
    • 引数の型
  2. Plugin.call(イベント名, 引数) でイベント発火

これだけ。

確認用コード

.mikutter.yml

---
slug: :studyEvent
depends:
  mikutter: 3.0.3
  plugin: []
version: '1.0'
author: 
name: studyEvent
description: イベントの勉強。

studyEvent.rb

# -*- coding: utf-8 -*-

Plugin.create(:studyEvent) do
    defevent :list_tweet_receive,  priority: :routine_passive, prototype: [UserList, Message]

    onboot do |service|
        Open3.capture3("echo 'start' > ~/tmp/ttt.txt")
    end

    # リストのツイート受信毎に list_tweet_receive イベントを発行する
    on_appear do |messages|
        messages.each{ |message|
            Plugin[:list].timelines.each{ |slug, list|
                if list.related?(message)
                    Plugin.call(:list_tweet_receive, list, message)
                end
            }
        }
    end

    # イベント発火をトリガに処理を行う
    on_list_tweet_receive do |list, message|
        Open3.capture3("echo '#{list.user}/#{list[:name]}' >> ~/tmp/ttt.txt")
        if list.user === 'mikoto2000' && list[:name] === 'News' then
            Open3.capture3("echo '#{message}' >> ~/tmp/ttt.txt")
        end
    end
end

イベント発火の部分だけ抜き出すと以下な感じか?

# -*- coding: utf-8 -*-

Plugin.create(:studyEvent) do
    defevent :list_tweet_receive,  priority: :routine_passive, prototype: [UserList, Message]

    # リストのツイート受信毎に list_tweet_receive イベントを発行する
    on_appear do |messages|
        messages.each{ |message|
            Plugin[:list].timelines.each{ |slug, list|
                if list.related?(message)
                    Plugin.call(:list_tweet_receive, list, message)
                end
            }
        }
    end
end

「リストイベントを追加するプラグイン」として単体で提供して、 このイベントが欲しかったら依存関係に入れろみたいな感じでどうか?

依存関係に入れなくても、プラグインが入っている時だけリスト系の機能が使えます的な使い方できるか?

-> 公開した。

mikoto2000/mikutter-list-event : https://github.com/mikoto2000/mikutter-list-event

2014/07/21

[Ruby, Mikutter] mikutter プラグイン「ゆかりが読む」を作った

mikutter プラグイン「ゆかりが読む」を作った

mikoto2000/mikutter-yukari : https://github.com/mikoto2000/mikutter-yukari

requirements 厳しすぎるけどまぁそれはそれ。

とりあえず自分の環境で動いたので公開。 ツイートを、音声配信サーバに投げて音声化し、再生します。

音声配信サーバとしては「VOICEROID+ 結月ゆかり」がインストールされた Windows7 端末を想定。

TODO

  • 先頭の twitter id とか末尾のハッシュタグとかは、読み上げ的には必要ないので無視するのがよいかなぁ。
  • ニュースツイート(nhk_news とか) のリンクは、リンク先をスクレイピングして読みあげたい。

mikutter plugin tips

本プラグインを作るにあたって、設定のデフォルト値の指定方法について調べたのでメモ。

プラグインのデフォルト値

プラグインのデフォルト設定値を作りたい場合、「on_boot」内で空チェックして、空ならデフォルト値設定とするのが良いようだ。

参考資料

VLC の曲名を nowplaying できる mikutter プラグイン書いた - polamjaggy : http://polamjag.hatenablog.jp/entry/2013/11/18/035402

2014/07/19

[Ruby, Mikutter] Mikutter プラグインを作ってみる。

はじめに

プラグインの書き方解説ページの「5 STOT 形式でコピー」を写経。

参考資料

Writing mikutter plugin : http://toshia.github.io/writing-mikutter-plugin/#sec-5

$ cd ~/.mikutter/plugin
$ mikutter.rb generate stot
$ mikutter.rb spec stot/
$ cd stot
$ vim stot.rb

...で、こんな感じ。

$ cat .mikutter.yml
---
slug: :stot
depends:
  mikutter: 3.0.3
  plugin: []
version: '1.0'
author: 
name: stot
description: Copy to clipboard with STOT format.
$ cat stot.rb
# -*- coding: utf-8 -*-

Plugin.create(:stot) do
  command(:copy_as_stot,
    name: 'STOT形式でコピー',
    condition: Plugin::Command[:HasOneMessage],
    visible: true,
    role: :timeline) do |opt|
      message = opt.messages.first
      screen_name = message.user[:idname]
      Gtk::Clipboard.copy("#{screen_name}: #{message.to_s} [https://twitter.com/#{screen_name}/status/#{message.id}]")
  end
end

つぎに

ツイートの本文を外部プログラムに渡すプラグインを作ってみる。

探せば有りそうと考えてはいけない。

参考資料

Rubyから外部プログラムを起動 - None is None is None : http://doloopwhile.hatenablog.com/entry/2014/02/04/213641

$ cd ~/.mikutter/plugin
$ mikutter.rb generate runWith
$ mikutter.rb spec runWith/
$ cd runWith
$ vim runWith.rb

...で、こうなる。

$ cat .mikutter.yml 
---
slug: :runWith
depends:
  mikutter: 3.0.3
  plugin: []
version: '1.0'
author: 
name: runWith
description: ツイートの内容を外部プログラムに、実行する。
$ cat runWith.rb 
# -*- coding: utf-8 -*-

require "open3"

Plugin.create(:runWith) do
  command(:run_with,
    name: 'echo to ~/tmp/echo.txt',
    condition: Plugin::Command[:HasOneMessage],
    visible: true,
    role: :timeline) do |opt|
      message = opt.messages.first
      Open3.capture3("echo '#{message.to_s}' > ~/tmp/echo.txt")
    end
end

とりあえず echo で試した。 あとはコマンドと引数を変更すればよいだけ。 外部プログラムが呼べてしまえば、もう何でも出来ますね!