やること: チケット
https://dev.mikutter.hachune.net/
https://dev.mikutter.hachune.net/favicon.ico?1619448608
2024-03-16T03:50:32Z
やること
Redmine
mikutter - バグ #1597 (実装待ち): mastodon の public/unlisted/privete/direct のアイコンファイル名を参照しているプラグインがある
https://dev.mikutter.hachune.net/issues/1597
2024-03-16T03:50:32Z
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp
<p><a class="changeset" title="リファクタリング refs #1575" href="https://dev.mikutter.hachune.net/projects/mikutter/repository/main/revisions/a860fae8667de5cade577287066e421a075872ce">a860fae</a> の <a class="source" href="https://dev.mikutter.hachune.net/projects/mikutter/repository/main/revisions/a860fae/entry/plugin/mastodon_gtk/subparts_status_info.rb">source:plugin/mastodon_gtk/subparts_status_info.rb@a860fae</a> 他の変更で<br />mastodon の public/unlisted/private/direct のアイコンファイルが変更されたため、<br />それらのファイル名を直接指定していたプラグインでアイコン表示ができなくなっています。</p>
<p>具体的にはしばふ氏の mastodon_postbox_visibility<br /><a class="external" href="https://github.com/shibafu528/mikutter_mastodon_postbox_visibility/blob/c0c3b15/mastodon_postbox_visibility.rb#L141-L145">https://github.com/shibafu528/mikutter_mastodon_postbox_visibility/blob/c0c3b15/mastodon_postbox_visibility.rb#L141-L145</a><br />で直接参照していて、 <a class="changeset" title="リファクタリング refs #1575" href="https://dev.mikutter.hachune.net/projects/mikutter/repository/main/revisions/a860fae8667de5cade577287066e421a075872ce">a860fae</a> 以降だと少なくとも private と direct のアイコンが error になります。</p>
<p>ただ、これをどう対処するのが正しいのか(mikutter側で互換を残すのか、プラグイン側を直すのか)がよくわかりません。</p>
<pre><code class="ruby syntaxhl"> <span class="vi">@icons</span> <span class="o">=</span> <span class="p">{</span>
<span class="ss">default: </span><span class="s1">'visibility-default.png'</span><span class="p">,</span>
<span class="ss">public: </span><span class="s1">'etc.png'</span><span class="p">,</span>
<span class="ss">unlisted: </span><span class="s1">'unlisted.png'</span><span class="p">,</span>
<span class="ss">private: </span><span class="s1">'private.png'</span><span class="p">,</span>
<span class="ss">direct: </span><span class="s1">'direct.png'</span><span class="p">,</span>
<span class="p">}.</span><span class="nf">freeze</span>
</code></pre>
mikutter - 機能 #1596 (新規): Ruby 3.3
https://dev.mikutter.hachune.net/issues/1596
2024-03-13T14:16:48Z
toshi_a 初音
toshi.alternative@gmail.com
<ul>
<li>Ruby 3.3をサポートする</li>
<li>mikutter 5.1では、Rubyのバージョン下限を3.2.0にする(過去1バージョンのみ対応)</li>
<li>Ruby 3.0, 3.1, 3.2で追加された要素を使ってリファクタリング</li>
</ul>
mikutter - 提案 #1581 (分類待ち): Color Model
https://dev.mikutter.hachune.net/issues/1581
2022-01-16T03:51:58Z
toshi_a 初音
toshi.alternative@gmail.com
<p>mikutter上で色を表現するデータオブジェクトを標準提供する。</p>
<a name="やりたいこと"></a>
<h1 >やりたいこと<a href="#やりたいこと" class="wiki-anchor">¶</a></h1>
現在、色情報を利用する場面は以下のとおりだが、色の表現方法が異なる:
<table>
<tr>
<th>名前</th>
<th>形式</th>
<th>値の範囲</th>
</tr>
<tr>
<td> UserConfig </td>
<td> RGB </td>
<td> 0..0xffff </td>
</tr>
<tr>
<td> Cairo::Color::RGB </td>
<td> RGBA </td>
<td> 0..1 (Float) </td>
</tr>
<tr>
<td> Gtk::Color </td>
<td> RGB </td>
<td> 0..0xffff </td>
</tr>
<tr>
<td> Gdk::RGBA </td>
<td> RGBA </td>
<td> 0..1 (Float) </td>
</tr>
<tr>
<td> CSS </td>
<td> RGB </td>
<td> 0..0xff </td>
</tr>
</table>
<p>現状だと、色をどこで利用するかによって適切に変換しなければならない。<br />異なるクラスなのは仕方ないにしても、UserConfigからCairoに変換するために、各要素を0xffffで割るみたいな処理を毎回実装しなければならない。</p>
<p>レンダリングを行う層以外ではそういった詳細には立ち入りたくないし、現にGtk3移行のときに変換処理がバグっていたことがあった。</p>
<p>mikutterプラグインの共通の色の表現があると、こういった問題を解決できる。</p>
<a name="インターフェイス"></a>
<h1 >インターフェイス<a href="#インターフェイス" class="wiki-anchor">¶</a></h1>
<p>RGBAの要素のみを要求する。<br />精度は、各要素を8bitで返すインターフェイスと、0-1のFloatやRationalで返すインターフェイスが考えられる。<br />アルファブレンド値自体は、無いと困るケースがあるので、このデータオブジェクトで表現に対応する。</p>
<p>ディスプレイは1677万色の表現能力しか持っておらず、24bit (0-255)で十分表現できる。したがって、現在採用しているほとんどの表現形式が過剰である。<br />また、これは人間の識別精度を十分超えているらしく、mikutterのユーザは今のところ地球人のみであると考えているので、これ以上の精度は不要である。</p>
<p>以上のことから、各8bitでも十分である。</p>
<p>一方で、0-1で表現すると、計算が楽で、何をやっているのかわかりやすいというメリットがある。<br /><pre><code class="c++ syntaxhl"><span class="kt">uint16_t</span> <span class="nf">conv</span><span class="p">(</span><span class="kt">uint8_t</span> <span class="n">c</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">c</span> <span class="o">*</span> <span class="mh">0x101</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">uint16_t</span> <span class="nf">conv</span><span class="p">(</span><span class="kt">float</span> <span class="n">c</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">c</span> <span class="o">*</span> <span class="mh">0xffff</span><span class="p">;</span>
<span class="p">}</span>
</code></pre><br />ん〜どうしよっかな〜</p>
<a name="永続化について"></a>
<h1 >永続化について<a href="#永続化について" class="wiki-anchor">¶</a></h1>
<p>UserConfigは古いバージョンとの互換性のために現在の形式を維持しなければならない。</p>
<a name="表現"></a>
<h1 >表現<a href="#表現" class="wiki-anchor">¶</a></h1>
<p>各データクラスは、異なる方法でデータを保持するが、同じインターフェイスを持っている。</p>
<p>TrueColor (32bit color)<br /><pre><code class="ruby syntaxhl"><span class="no">Color</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="mi">255</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="c1"># red</span>
<span class="no">Color</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="mi">255</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="c1"># red</span>
<span class="no">Color</span><span class="p">.</span><span class="nf">parse</span><span class="p">(</span><span class="s1">'#FF0000'</span><span class="p">)</span> <span class="c1"># red</span>
</code></pre></p>
<p>ContinuouslyColor<br /><pre><code class="ruby syntaxhl"><span class="no">ContinuouslyColor</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="c1"># red</span>
<span class="no">ContinuouslyColor</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="c1"># red</span>
</code></pre><br />同じインターフェイスを実装しColor Modelの要件を満たす独自の実装をプラグインが行うことによって、mikutterの色の表現方法を拡張できるように注意する。</p>
<a name="操作"></a>
<h1 >操作<a href="#操作" class="wiki-anchor">¶</a></h1>
<p>spellを使った場合、結果は必ずPromiseを受け取ることになる。色の操作はリアルタイム性が求められることが多く、spellは不適切である。<br />よくありそうな操作についてはColor Pluginで用意する。</p>
<a name="UserConfigの読み込み書き出し"></a>
<h2 >UserConfigの読み込み、書き出し<a href="#UserConfigの読み込み書き出し" class="wiki-anchor">¶</a></h2>
<p>RGBAの各要素は同じ方法で取得できるため、UserConfigに書き出せるはず。<br />現実的には、今の所UserConfigはあらゆるModelを永続化するような機能はもっていないため、別のところに変換ルーチンを実装しなければならない。<br /><pre><code class="ruby syntaxhl"><span class="n">c</span> <span class="o">=</span> <span class="no">Plugin</span><span class="o">::</span><span class="no">Color</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="mi">255</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="mi">255</span><span class="p">)</span>
<span class="no">UserConfig</span><span class="p">[</span><span class="ss">:color</span><span class="p">]</span> <span class="o">=</span> <span class="n">c</span> <span class="c1"># 理想</span>
<span class="no">UserConfig</span><span class="p">[</span><span class="ss">:color</span><span class="p">]</span> <span class="o">=</span> <span class="no">Color</span><span class="p">.</span><span class="nf">export_to_user_config</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="c1"># 現実</span>
</code></pre><br />一方、読み込みはColor Modelだったらどんなものに復元しても良いため、もう少し直接的になりそう。<br /><pre><code class="ruby syntaxhl"><span class="n">c</span> <span class="o">=</span> <span class="no">UserConfig</span><span class="p">[</span><span class="ss">:color</span><span class="p">]</span> <span class="c1"># 理想</span>
<span class="no">Plugin</span><span class="o">::</span><span class="no">UserConfigColor</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">:color</span><span class="p">)</span> <span class="c1"># こういうのがあってもよい?</span>
</code></pre></p>
<a name="印字変換"></a>
<h2 >印字、変換<a href="#印字変換" class="wiki-anchor">¶</a></h2>
<p>例えばHTML形式で印字したいなど。すべてのColor Modelに実装を要求すると印字形式が拡張できないが、インターフェイスが統一されているのでどうとでもなる。<br /><pre><code class="ruby syntaxhl"><span class="k">def</span> <span class="nf">html_color</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
<span class="s1">'#%02f%02f%02f'</span><span class="p">.</span><span class="nf">format</span><span class="p">(</span><span class="n">color</span><span class="p">.</span><span class="nf">r</span><span class="p">,</span> <span class="n">color</span><span class="p">.</span><span class="nf">g</span><span class="p">,</span> <span class="n">color</span><span class="p">.</span><span class="nf">b</span><span class="p">)</span>
<span class="k">end</span>
</code></pre><br />Cairo::Colorに変換するといった処理は、gtk3プラグインなどが各々提供する。<br /><pre><code class="ruby syntaxhl"><span class="no">Plugin</span><span class="o">::</span><span class="no">Gtk3</span><span class="p">.</span><span class="nf">cairo_color</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
</code></pre></p>
<a name="比較"></a>
<h2 >比較<a href="#比較" class="wiki-anchor">¶</a></h2>
<p>==で比較する場合、RGBA各要素を0-255で表現した値が等しければ等しいとする。<br />Color Modelインターフェイスの精度以上で比較する意味がないからである。</p>
<p>同様に、eql?とhashもすべてのColorModelが同じ計算式で値を算出しなければならない。</p>
<p>大小比較は、多分ソートすることがないので別にいいや</p>
<a name="標準色"></a>
<h2 >標準色<a href="#標準色" class="wiki-anchor">¶</a></h2>
<pre><code class="ruby syntaxhl"><span class="n">c</span> <span class="o">=</span> <span class="no">Plugin</span><span class="o">::</span><span class="no">Color</span><span class="o">::</span><span class="no">RED</span>
</code></pre>
<p>16色とか256色とか用意する。</p>
<a name="備考"></a>
<h1 >備考<a href="#備考" class="wiki-anchor">¶</a></h1>
<p><a href="https://github.com/red-data-tools/red-colors" class="external">red-colros gem</a> は採用しない。<br />目的に対してできることが多すぎるため。<br />あと、色に対する複雑な演算をしたいわけじゃないので、その程度の理由で直接依存を増やしたくない。</p>
<p>Diva::Modelのatomic typeとして追加することも考えたが、wellknownではあるけどatomicではないかな</p>
mikutter - 提案 #1565 (分類待ち): mastodon_restプラグインとmastodon_sse_streamingプラグインの統合
https://dev.mikutter.hachune.net/issues/1565
2021-12-31T09:21:54Z
toshi_a 初音
toshi.alternative@gmail.com
<p><a class="issue tracker-12 status-5 priority-4 priority-default closed" title="提案: 起動時、直近のリプライが読み込まれない (終了)" href="https://dev.mikutter.hachune.net/issues/1427">#1427</a> の派生タスク。<br />この2つのプラグインは、Mastodonからデータを取ってきてデータソースの更新やイベントの発行を行っている。<br />データソースを使うとき、データの取得方法には関心がないので、別々に制御する必要がない。<br />mastodon_sse_streamingのAPI接続の方法としてREST APIの定期アクセスを実装すればシンプルに収まりそうなので、統合を検討してみる。</p>
mikutter - バグ #1558 (実装待ち): mikutter 5.0 AppImage出力ができない
https://dev.mikutter.hachune.net/issues/1558
2021-12-19T14:42:56Z
toshi_a 初音
toshi.alternative@gmail.com
<p>Gtk3になったことで現在のAppImageビルド用のスクリプトが使えなくなったので対応する。<br />また、Ubuntu 16.04のサポートは終わっているため、Ubuntu 18.04でAppImageを作る。</p>
mikutter - バグ #1552 (分類待ち): 設定>表示 で拡大率を変えると、拡大率変更前にレンダリングされたMiraclePainterのユーザアイコンサイズが倍率変更前のままになる
https://dev.mikutter.hachune.net/issues/1552
2021-12-09T12:24:21Z
toshi_a 初音
toshi.alternative@gmail.com
mikutter - バグ #1544 (分類待ち): shortcutkey: クリックに割り当てたコマンドがTLで実行されない
https://dev.mikutter.hachune.net/issues/1544
2021-11-20T07:03:12Z
toshi_a 初音
toshi.alternative@gmail.com
<p>クリック、ダブルクリックなどにコマンドを割り当てることができるが、タイムライン上で呼び出すことができない。</p>
mikutter - バグ #1518 (実装待ち): 「タブにフォーカス」コマンドが動作していない
https://dev.mikutter.hachune.net/issues/1518
2021-10-23T07:36:05Z
toshi_a 初音
toshi.alternative@gmail.com
<p>postboxロールのコマンド「タブにフォーカス」をショートカットキーに割り当てて、そのショートカットキーを入力しても動作していない。</p>
mikutter - バグ #1509 (まだダメ): プロフィール: ヘッダウィジェットの横幅よりMiraclePainterの横幅が短くならない
https://dev.mikutter.hachune.net/issues/1509
2021-10-09T07:15:00Z
toshi_a 初音
toshi.alternative@gmail.com
<p>異様にドメイン名が長いサーバの場合、プロフィールのヘッダの横幅の最小サイズが、ウィンドウより大きくなる場合がある。<br />それによって、ListBoxが影響を受け、MiraclePainterが見切れてしまう。</p>
<p>対応方法としては、ヘッダウィジェットの表の右側については自動改行させるのが良さそう。</p>
mikutter for Android - バグ #1488 (マージ待ち): jcenterの依存をやめる
https://dev.mikutter.hachune.net/issues/1488
2021-04-27T10:37:38Z
あひる 家鴨
<p>バグではないけどトラッカーにバグしかないのでバグです!</p>
<p>jcenterのサポートとサービスが終了することが発表されたため、jcenterから移行する必要があります。<br /><a class="external" href="https://developer.android.com/studio/build/jcenter-migration?hl=JA">https://developer.android.com/studio/build/jcenter-migration?hl=JA</a></p>
mikutter - 提案 #1411 (toshi_aの判断待ち): streaming_connection_status プラグインをGitHubにアップロードしてほしい
https://dev.mikutter.hachune.net/issues/1411
2019-12-22T10:27:46Z
Shibafu Midorino
<p>どうせFilterStreamでしか使い道はないのですが、エラーを確認する手段として一応どこかに残っていてほしいなと思ってのリクエストです。</p>
mikutter - 機能 #824 (実装待ち): 読み込むプラグインの取捨選択機能
https://dev.mikutter.hachune.net/issues/824
2016-02-28T09:13:33Z
Naoto Kawahara
<p>昨今のmikutterの利用の拡充により、特定利用環境化でのmikuter利用が多く行われている。</p>
<p>・https://github.com/mikoto2000/MikutterJFX<br />・https://github.com/nkawahara/nanomiku</p>
<p>野良ユーザから見て、初期にロードされるmikutterの特定のプラグインを選択するのは難しく<br />上記のinstall方法のような、必要そうだろうと思うものをコピーや削除するような方法がしばしばとられている。</p>
<p>mikuterにおいて、プラグインのロードしているものが一覧表示できていたり、読み込むプラグインを引数で暗示的に指定する方法でない<br />機能が追加されると大変うれしいと思っている。</p>
mikutter - 機能 #764 (新規): rake testでテストが実行できるようにする
https://dev.mikutter.hachune.net/issues/764
2015-08-09T08:45:56Z
コスモ 虹川
<p>他のRubyプロジェクトだと[bundle exec] rake testで大抵テストが実行できるようになっています。</p>
<p>mikutterでもRakefileを使ってテストを実行できるようにしてみるとどうでしょう?</p>
mikutter - 機能 #49 (新規): ハッシュタグ、ユーザIDの補完機能
https://dev.mikutter.hachune.net/issues/49
2011-01-08T07:17:28Z
toshi_a 初音
toshi.alternative@gmail.com
<p>#や@を入力したら、ドロップダウンメニューでハッシュタグやユーザ名が補完されるようにする。</p>
mikutter - 提案 #17 (分類待ち): フィルタ条件設定ウィジェットにテスト機能をつける
https://dev.mikutter.hachune.net/issues/17
2010-12-23T09:28:04Z
toshi_a 初音
toshi.alternative@gmail.com
<p>そのフィルタ条件が期待したとおりに動作するかどうかをテストするための機能をもたせる。<br />具体的には、サブフィルタ(条件の集合)ごとに、その下部に「テスト」ボタンを付け、クリックするとタイムラインを含んだポップアップウィンドウを出す。なんらかの方法で選び出されたメッセージ一つひとつに、フィルタの条件に合致したか否かをバッジなどで表示する。<br />タイムラインウィジェットは処理が重いし、そこからリプライなどは必要ないので、リストビューを使うことも検討したほうがいいかも知れない。</p>