やること: チケット
https://dev.mikutter.hachune.net/
https://dev.mikutter.hachune.net/favicon.ico?1619448608
2016-10-28T15:06:02Z
やること
Redmine
mikutter - バグ #923 (新規): Service#scan で止まっているスレッドが大量にできる
https://dev.mikutter.hachune.net/issues/923
2016-10-28T15:06:02Z
rhen ium
<p>添付のファイルはこのコードで書き出しました。</p>
<pre>
require "pp"
File.write("/tmp/threads.txt",Thread.list.map{|x|[x.status, x.backtrace]}.pretty_inspect)
</pre>
<p>起動後約 30 分弱の状態で、880 個のスレッドが生成されていました。スレッドのスタックトレースを見る限りでは Service#scan で詰まっているようです。</p>
<p>mikutter は develop ブランチにいくつかの勝手パッチ<sup><a href="#fn1">1</a></sup>が当たったものなのと、いくつかプラグインも入っているので、それらがなにかぶっこわしているのかもしれませんが、一応報告しておきます。</p>
<p>[1]: <a class="external" href="https://git.rhe.jp/mikutter.git/log/?h=5335132ecc82dfa8c158e44a60ec8c92065dcc3e">https://git.rhe.jp/mikutter.git/log/?h=5335132ecc82dfa8c158e44a60ec8c92065dcc3e</a></p>
mikutter - バグ #912 (終了): Streaming API の read_timeout を伸ばす
https://dev.mikutter.hachune.net/issues/912
2016-10-09T17:35:33Z
rhen ium
<p>0a51370a95a4 で Net::ReadTimeout が握り潰されるようになりましたが、そもそもタイムアウトするのがおかしいです。</p>
<p>Twitter のドキュメントには、30 秒おきに空行は送信するけどタイムアウトは 90 秒に設定しておけ、みたいなことが書かれてますが、</p>
<p><a class="external" href="https://dev.twitter.com/streaming/overview/connecting">https://dev.twitter.com/streaming/overview/connecting</a></p>
<p>oauth gem の OAuth::Consumer#http の返す Net::HTTP インスタンスではなぜか read_timeout として 30 秒が設定されているようです。</p>
<p><a class="external" href="https://github.com/oauth-xx/oauth-ruby/blob/e397b3e2f540faaebd7912aeb2768835d151f795/lib/oauth/consumer.rb#L341">https://github.com/oauth-xx/oauth-ruby/blob/e397b3e2f540faaebd7912aeb2768835d151f795/lib/oauth/consumer.rb#L341</a></p>
<p>手元の環境では、read_timeout を 90 秒に上書きしたところ、Net::ReadTimeout は起こらなくなりました。</p>
<pre>
diff --git a/core/lib/mikutwitter/api_shortcuts.rb b/core/lib/mikutwitter/api_shortcuts.rb
index 56ddd2a..f05c9ee 100644
--- a/core/lib/mikutwitter/api_shortcuts.rb
+++ b/core/lib/mikutwitter/api_shortcuts.rb
@@ -221,6 +221,7 @@ module MikuTwitter::APIShortcuts
parsed_url = Addressable::URI.parse(url)
stream_access_token = access_token("#{parsed_url.scheme}://#{parsed_url.host}")
http = stream_access_token.consumer.http
+ http.read_timeout = 90
http.ssl_version = 'TLSv1'
consumer = stream_access_token.consumer
request = consumer.create_signed_request(:post,
</pre>
<p>ところで、関係ないですが、TLS 1.0 を強制するのは無意味です</p>
<pre>
diff --git a/core/lib/mikutwitter/api_shortcuts.rb b/core/lib/mikutwitter/api_shortcuts.rb
index f05c9ee..0495a9c 100644
--- a/core/lib/mikutwitter/api_shortcuts.rb
+++ b/core/lib/mikutwitter/api_shortcuts.rb
@@ -222,7 +222,6 @@ module MikuTwitter::APIShortcuts
stream_access_token = access_token("#{parsed_url.scheme}://#{parsed_url.host}")
http = stream_access_token.consumer.http
http.read_timeout = 90
- http.ssl_version = 'TLSv1'
consumer = stream_access_token.consumer
request = consumer.create_signed_request(:post,
parsed_url.path,
diff --git a/core/mui/gtk_web_image_loader.rb b/core/mui/gtk_web_image_loader.rb
index 803e273..6f86d22 100644
--- a/core/mui/gtk_web_image_loader.rb
+++ b/core/mui/gtk_web_image_loader.rb
@@ -262,8 +262,7 @@ module Gdk::WebImageLoader
Net::HTTP.new(host, port || 80)
when 'https'.freeze
Net::HTTP.new(host, port || 443).tap{|_h|
- _h.use_ssl = true
- _h.ssl_version = 'TLSv1' } end
+ _h.use_ssl = true } end
http.open_timeout=5
http.read_timeout=30
pool << http
</pre>
mikutter - 致命的 #908 (終了): display_requirements が有効なとき、(あん)ふぁぼられると落ちる
https://dev.mikutter.hachune.net/issues/908
2016-10-07T13:24:20Z
rhen ium
<p>display_requirements プラグインを無効にして起動していたらこんな例外で落ちました</p>
<pre>
/home/k/mikutter/core/plugin/display_requirements/display_requirements.rb:90:in `block (2 levels) in <top (required)>': no implicit conversion of URI::HTTPS into String (TypeError)
[Thread 0x7fffbfd7d700 (LWP 28756) exited]
from /opt/ruby/lib/ruby/gems/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/listener.rb:25:in `call'
from /opt/ruby/lib/ruby/gems/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:97:in `block (2 levels) in call_all_listeners'
from /opt/ruby/lib/ruby/gems/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:96:in `each'
[Thread 0x7fff97dfd700 (LWP 24180) exited]
from /opt/ruby/lib/ruby/gems/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:96:in `block in call_all_listeners'
from /opt/ruby/lib/ruby/gems/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:95:in `catch'
from /opt/ruby/lib/ruby/gems/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:95:in `call_all_listeners'
[Thread 0x7ffff154a700 (LWP 24178) exited]
from /opt/ruby/lib/ruby/gems/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:45:in `block (2 levels) in call'
from /opt/ruby/lib/ruby/gems/2.4.0/gems/delayer-0.0.2/lib/delayer/procedure.rb:24:in `run'
from /opt/ruby/lib/ruby/gems/2.4.0/gems/delayer-0.0.2/lib/delayer/extend.rb:58:in `run_once'
from /opt/ruby/lib/ruby/gems/2.4.0/gems/delayer-0.0.2/lib/delayer/extend.rb:30:in `run'
from /opt/ruby/lib/ruby/gems/2.4.0/gems/delayer-0.0.2/lib/delayer.rb:43:in `method_missing'
from /home/k/mikutter/core/plugin/gtk/delayer.rb:10:in `block in boot'
from /home/k/mikutter/core/plugin/gtk/mainloop.rb:10:in `main'
from /home/k/mikutter/core/plugin/gtk/mainloop.rb:10:in `mainloop'
from ./mikutter.rb:65:in `boot!'
from ./mikutter.rb:94:in `<main>'
</pre>
<p>Message#perma_link が URI を返すようになった(?)影響のようなので、とりあえず文字列化してやれば動くようにはなります</p>
<pre>
diff --git a/core/plugin/display_requirements/display_requirements.rb b/core/plugin/display_requirements/display_requirements.rb
index f9c4369..7493749 100644
--- a/core/plugin/display_requirements/display_requirements.rb
+++ b/core/plugin/display_requirements/display_requirements.rb
@@ -87,7 +87,7 @@ Plugin.create :display_requirements do
activity(:like, "#{message.user[:idname]}: #{message.to_s}",
description:(_("@%{user} がいいねいいねしました") % {user: user[:idname]} + "\n" +
"@#{message.user[:idname]}: #{message.to_s}\n"+
- message.perma_link),
+ message.perma_link.to_s),
icon: user[:profile_image_url],
related: message.user.me? || user.me?,
service: service)
@@ -97,7 +97,7 @@ Plugin.create :display_requirements do
activity(:dont_like, "#{message.user[:idname]}: #{message.to_s}",
description:(_("@%{user} があんいいねしました") % {user: user[:idname]} + "\n" +
"@#{message.user[:idname]}: #{message.to_s}\n"+
- message.perma_link),
+ message.perma_link.to_s),
icon: user[:profile_image_url],
related: message.user.me? || user.me?,
service: service)
</pre>
mikutter - バグ #842 (終了): OpenSSL::Cipher#key= に長すぎるキーを指定しないようにする
https://dev.mikutter.hachune.net/issues/842
2016-05-26T09:57:40Z
rhen ium
<p>以前は OpenSSL::Cipher#key= に長すぎる文字列を渡した場合、勝手に(bf-ecb なら)16 バイトに切り詰められていたのですが、RDoc にも言及がなくどう考えても不自然な挙動なので、2 日前に r55146 (<a class="external" href="https://github.com/ruby/ruby/commit/ce635262f53b760284d56bb1027baebaaec175d1">https://github.com/ruby/ruby/commit/ce635262f53b760284d56bb1027baebaaec175d1</a>) で弾かれるように変更しました。<br />mikutter では SecureRandom.hex(= 32 バイト)を直接渡しているため、この影響を受けてしまっています。これは mikutter 側で修正するべきだと思うのですがどうでしょうか。</p>
<pre>
diff --git a/core/service_keeper.rb b/core/service_keeper.rb
index cdf18fa..fc4775e 100644
--- a/core/service_keeper.rb
+++ b/core/service_keeper.rb
@@ -15,7 +15,8 @@ class Service
@@service_lock = Monitor.new
def key
- UserConfig[:account_crypt_key] ||= SecureRandom.hex end
+ key = UserConfig[:account_crypt_key] ||= SecureRandom.hex(8)
+ key[0, 16] end
# 全てのアカウント情報をオブジェクトとして返す
# ==== Return
</pre>
mikutter - 機能 #808 (終了): Enumerable#to_hash を定義しないようにする
https://dev.mikutter.hachune.net/issues/808
2016-01-09T15:19:23Z
rhen ium
<p>core/utils.rb で Enumerable#to_hash が定義されているため、Ruby 2.2 以降でオプション引数とキーワード引数を組み合わせた以下のコードが奇妙な挙動をします。</p>
<pre>
def test(x = 1, y: 2)
p x
end
test(["abc"]) # => {"a"=>"b"}
</pre>
<p>(この影響で Ruby 2.4.0dev で mikutter が起動しなくなりました(OptionParser#parse! がキーワード引数を受け付けるようになった))</p>
<p>るりまによると暗黙的に変換されても構わない場合のみ定義するべきだそうなので、Enumerable#to_hash は削除するべきだと思います。<br /><a class="external" href="http://docs.ruby-lang.org/ja/2.3.0/method/Object/i/to_hash.html">http://docs.ruby-lang.org/ja/2.3.0/method/Object/i/to_hash.html</a></p>
<p>とりあえず、私の環境では Enumerable#to_hash をそのまま削除しても正常に動作しているように見えます。</p>
mikutter - バグ #770 (終了): 複数のアカウントを使うとき、1 つのアカウントへの(からの)follow イベントに全ての UserStream が反応する
https://dev.mikutter.hachune.net/issues/770
2015-09-02T11:14:13Z
rhen ium
<p>例えば @A, @B が mikutter に登録されているとき @X が @A をフォローすると、Service A, Service B それぞれで followers_created が発生してしまいます</p>
<p>パッチを添付します</p>
mikutter - 機能 #769 (終了): activity プラグインの show_once の判定
https://dev.mikutter.hachune.net/issues/769
2015-09-02T11:13:15Z
rhen ium
<p>現状だと<br /><pre><code class="ruby syntaxhl"><span class="n">show_once</span><span class="p">(</span><span class="ss">:a</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="c1">#=> true</span>
<span class="n">show_once</span><span class="p">(</span><span class="ss">:a</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="c1">#=> true</span>
<span class="n">show_once</span><span class="p">(</span><span class="ss">:a</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="c1">#=> false</span>
</code></pre><br />となりますが、3 つ目も true になるべきかと思います</p>