Pages

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

2007-09-13

あぼーんフィルタは考え直さなければならないようです

古いね。そう思った。歌手のYUIに関するレスを消したいのにYahoo! UI Libraryに関するレスまで消えてしまった時だけど。

2006-11-14

実はイメージコレクトっぽい機能はプラグインでやろうとしてました

Thausandスレより引用。

709 +2 名前:ooo sage 投稿日:2006/11/12(日) 13:19:35 ID:LxbEOYA+0 (2)
blueスキンのJavaScriptを若干修正しました。
イメージコレクト時に出てくる意味不明なスクロールバーが修正されてます。

うーん、僕もoooさんのスキン使ってるんだけど、古いやつ使ってるからイメージコレクト機能があるなんて知らなかったよ。で、

717 名前:名取 ◆stackZ1xbk (31) sage 投稿日:2006/11/14(火) 10:28:17 ID:CnDTHAvC0 (1)
>>713
実はイメージコレクトっぽい機能はプラグインでやろうとしてました。
PR300でもまだ実装されないですが、スレッドを元にHTMLを吐くプラグイン、というのが
予定されてまして。

と、どうも今後のバージョンアップでイメージコレクト機能を備えたプラグインがThousandに標準装備されそうな雰囲気。

実はイメージコレクトっぽい機能はプラグインでやろうとしてました。かぶった。ということはですね、スレッドインスペクタの次バージョンで実装する予定だった(ていうかもう実装してしまった)画像抽出機能が無駄になってしまったわけです。そうなるとどうなるか?いや、別にどうにもなりませんけど、残念でしたっていうお話。しかも実際使ってみると、oooさんのスキンによる抽出のほうが使いやすいし。ダメじゃん。

ということで、画像抽出機能はやめた。

2006-09-07

スレッドインスペクタのUIを考える

スレッドインスペクタのUIについて考えてみた。

現在のスレッドインスペクタは、複数の機能をパネル上部のタブで切り替えている。ただ、これではバージョンアップを重ねて機能を追加していくとタブの数がどんどん増えていってしまい、扱いにくくなってしまう。(スレッドインスペクタ0.1 スクリーンショット)

つぎに、パネルの形。FinderやXcodeのインスペクタパネルは縦長だけど、スレッドインスペクタのパネルは横長。これはどうも使い勝手が良くないような気がする。先に言った、タブの数が増えすぎるのも、ここに繋がると思う。なんか、縦長の方がすっきりするような感じ。

そこで、ちょっと改良してみた(スレッドインスペクタ開発中スクリーンショット)。まずパネルは縦長に。やっぱりこっちのほうがすっきりする。で、タブをやめてポップアップボタンで機能を切り替えるようにした。これだと無駄に場所をとることはないし、見た目も美しい(?)。

ただ、いままでのタブ方式が1回クリックするだけでよかったのに対し、このポップアップ方式は2回クリックしないと目的の機能に切り替えることができない。そんなに頻繁に切り替えることはないだろうけど、やっぱり不便。アプリケーション本体とバッティングしちゃまずいから、ショートカットキーも付けるわけにはいかない。うーん、むずかしいなあ…

2006-09-01

あー、ガベージコレクションよ、早く来い

今日、「スレッドインスペクタ」が原因でThousandがクラッシュするらしい、と名取さんから連絡をいただきました。スレッドを開こうとするとクラッシュするらしい。クラッシュログも送ってくださったわけなんですが、どうもNSURLDownload絡みのところで落ちてるらしい。よく調べると解放済みのオブジェクトにメッセージを送ろうとしてたらしい。

NSURLDownloadには、3つのデリゲートメソッドがある。次の3つね。

  1. - download:decideDestinationWithSuggestedFilename:
  2. - download:didCreateDestination:
  3. - downloadDidFinish:

デリゲートオブジェクトには、これらのメソッドが順に呼び出されるわけです。ていうかそうだという前提でコーディングしてたわけなんですよ。ところがですね、僕はNSURLDownloadをT2ThreadProcessingの- processThread:appendingIndex:メソッドの中で使ってたんですが、このメソッドはスレッドを1回開く時に2回呼ばれるんですよ。検証してないけど、多分ログを取得する前と後で1回づつ読んでるんでしょうね。で、そうなると先ほどの前提が崩れてしまい、運が悪いと次の順番に呼び出されてしまうわけです。

  1. - download:decideDestinationWithSuggestedFilename: // 1回目の呼び出し
  2. - download:didCreateDestination: // 1回目の呼び出し
  3. - download:decideDestinationWithSuggestedFilename: // 2回目の呼び出し
  4. - download:didCreateDestination: // 2回目の呼び出し
  5. - downloadDidFinish: // 1回目の呼び出し
  6. - downloadDidFinish: // 2回目の呼び出し

こうなると、話がややこしくなる。実は、- download:decideDestinationWithSuggestedFilename:の中であるオブジェクトをretainして、- downloadDidFinish:の中でreleaseしてたんです。でも上の順番で呼び出されてしまうと、最初にretainされたオブジェクトはどこからも参照されなくなり、2回目にretainされたオブジェクトも最後のメソッドが呼ばれる段階ではすでに解放済みなわけです。そしてここで解放済みオブジェクトにメッセージを送ろうとして、クラッシュ。ずいぶんと初歩的なミス

実はこのバグ、v0.1.xだけで発生する問題。v0.2では看板画像の表示を実装する際にこの部分を書き換えたから問題無し。チェックしたらメモリリークがいくつかあったけど、開いた瞬間にクラッシュなんてことはない。でも一応v0.2.1を出しといた。

Javaとかにあるガベージコレクション、よくわからないんだけど、これがあればこういうミスを防げるんでしょうかね。Objective-CもLeopardでサポートされるらしいですから、待ち通しですよ。G4で動くならば。

2006-08-30

「スレッドインスペクタ for Thousand」を公開したわけですが

昨日、Thousand用プラグイン「スレッドインスペクタ」を公開しました。名前のまんまの機能です。インストールすると表示中のスレッドの情報をパネルに表示することが出来るようになります。ついでに板のローカルルール表示機能もつけました。

で、公開直後、「Tigerでローカルルール表示できねーよ!」って怒られたわけです。このプラグインでは、板のhead.txtをWebViewに読み込ませているわけなんですが、お話を聞くとそのWebViewがhead.txtをHTMLとしてパースせずにそのまま表示してしまったようなんです。

head.txtはサーバ側からtext/plainとして送り出されているので、この挙動は正しいわけなんですが、僕の環境(Panther、10.3.9)ではこいつをHTMLとしてレンダリングしてくれていたわけなんですよ。だからそのままリリースしたらTigerではダメだったわけです。

試しにSafari 1.3.2でhead.txtを開いてみると、やっぱりHTMLとしてレンダリングされますよ。だからWebViewはサーバ側が送り出すContent-Typeを無視するもんだと思ったんですけど、Tigerのは違うんですね。しょうがないから一旦head.txtをNSURLDownloadで保存して- loadHTMLString:baseURL:で読み込ませることにした。

で、結局2時間半後にバージョン0.1.1をリリースする羽目になってしまったわけ。

2006-08-28

Leopardであぼーんフィルタも賢く

さて、[EXCLUSIVE] Mac OS X v10.5 "Leopard" Developer Improvements - AeroXperienceなるものを発見したんですが、NDA的には大丈夫なんでしょうかね。一般には知らされていないLeopardの情報が書かれています。8月9日に書かれたようですが、さっき読みました。

で、気になったのが1つ。

Leopard also gives developers access to a 'Latent Semantic Mapping' framework, which is the basis for spam protection in Mail. It allows you to analyze text and train the engine to restrict items with specific content (like spam e-mail for example).

要するに、Leopardでデベロッパは、Mail.appの迷惑メールフィルタの基礎になっているLatent Semantic Mappingフレームワークが使えるようになるらしいのよ。で、このフレームワークを使うとテキストを解析してフィルタエンジンなんかをトレーニングさせることができる、と。

さて、これはあれに使えるではないか。Thousand用あぼーんフィルタ。ユーザがあるレスを選択して迷惑レスに選択すると、フィルタがそれを解析して学習する。そして賢くなれば自動で迷惑レスを判別してあぼーんしてくれる。素晴らしい。Leopardが待ち遠しくなった。

でもPowerMac G4 400MHz。Leopard無理かな……。

2006-08-19

「あぼーんフィルタ for Thousand」公開。

えーと、先日のうぃ〜ラブ団子を改良して、任意のキーワードを含むレスを非表示にするようにしてみた。名前も「あぼーんフィルタ for Thousand」に。ダウンロードはThousand Additionsからどうぞ。abonefilterってのをクリックすればダウンロードできる。

フィルタの対象となるキーワードは複数指定することが可能。入力フィールドに半角カンマ区切りで入力するだけ。んー、簡単。

そのかわり、カンマを含むキーワードは指定できない。区切りと見なされちゃうからな。その辺は改良の余地あり。今回はバージョン0.1ってことにする。

Thousandに期待してみる

さて、Thousandっていう2chブラウザがあります。今のところプレビュー版ですが、僕は個人的に期待しています。なんでかって、その拡張性ですよ。まったり開発情報Blogのコーディングを伴う拡張ってエントリにしっかりとThousandはプラグインによる拡張を前提に設計されているって書かれてるし。これ気に入った。

さて、プラグインが作れるくらいなら他の2chブラウザと変わらないんだ。僕はCocoMonarっていう2chブラウザを使ってたんだけど、これだってプラグイン対応してる。

でも、CocoMonarはプラグインが使えるってだけで、それが第一ってわけじゃない。でもThousandはプラグインによる拡張を前提にしてるらしいじゃない。面白いじゃないの。

で、使ってみたわけよ。まずレスのポップアップ。これいいよ。CocoMonarより使いやすい。でも気になったことが1つ。お団子ちゃんが画面に現れる出ないか。CocoMonarでは自動的にあぼーんしてくれてたので、突然出てきてあらビックリ。Thousand、今のところ自動あぼーん機能は実装されてないみたい。そこでさっきの言葉を思い出す。プラグインによる拡張。

はい、ってことで作りました。その名もうぃ〜ラブ団子。とりあえず、ドキュメントがなかったんで適当に作ってみた。お団子ちゃんを自動的にあぼーんしてくれる。爽快。素晴らしい。欲しい人はどうぞ。http://www3.pf-x.net/~s-take/WeLoveDango.bundle.zip。ダウンロードしたZIPファイルを展開して~/Library/Application Support/Thousand/Plugins/に突っ込む。動作怪しいかも。