あれ
あれ
Web Prowlerの推薦性能を改善する方法が見えた。
ユーザーのベクトル化であるUser Embeddingを計算して、User EmbeddingとリンクのSentence Embeddingの類似度でクロールすれば良い。
推薦も今見ているページのSentence Embeddingを使って良きようにする。
User Embeddingは操作に応じて随時修正する。
User Embeddingの初期状態は、ブラウザに保存されたお気に入りや、履歴から計算すれば良い。ローカルで動作して情報が外には出ないので、こういった情報を安全に取り扱える。
Web Prowlerに大規模言語モデルを導入
- ウェブサイトを大規模言語モデルで評価する
- 閲覧履歴を記録して問い合わせ可能にする
Web Prowlerの設定対応
正直、以前から悩んでいる問題。ProsConsを上げてみる
設定画面をつくるProsCons
Pros
- 実装が楽
- 開発時の設定が楽になる
Cons
- 設定だけがずらずら並んでいる設定画面は体験が悪い。何がどこにあるかわからない。メイン画面から自然に設定が変更可能にしたい。オブジェクト指向な設定変更が可能にしたい。
- 設定が増加した時の対応が面倒
設定項目は定数として括りだしてあるので、作るだけならそこまで苦労はしないだろう。ひとまずは開発者用機能として設定だけを変更可能な画面があってもいいかもしれない。その後、理想の設定変更方法に近づけていくと良い。
履歴やブックマークの読み込みも、設定画面などから利用者が自発的にできた方が良いのだろう。インストール時に勝手に読み込まれるのは気味が悪いはずだ。
Web Prowlerでうまくいかなかったこと
- 結果の質が低かった。リンクを大量に貼り付けた質の低いサイトばかり表示されるようになってしまった
- サイドバーの表示が勝手に切り替わると集中力を乱されて良くなかった(サイドバーに関連ページを出すと視界の端でチカチカしてうるさい)
- 動作が遅かった
Web Prowlerの検索エンジン化作業
- 拡張機能の名前を付ける
- 検索結果を良くする
- アイコン作成
- Pageオブジェクトを使いまわしてメモリー消費を抑える
- リンクをトークン化しない
- クローラの高速化
- accounts.google.com/をクローラでアクセスしない
✓右クリックメニューから検索可能にする
✓ショートカットキー設定
✓起動時読み込みの高速化
✓ポップアップ作成
✓文字列入力欄の作成
✓メモリにページを保存せず、ストレージに保存する
✖indexedDBのラッパーを、localforageからjsStoreに乗り換える
✖検索エンジンに設定できるようにする
Web Prowlerの検索エンジン化案
レコメンデーションシステムとしてのWeb Prowlerはあまり満足のいくものにはならなかった。方針転換して検索エンジンにしてしまうのも良いかもしれない。そうすればChrome addon化も可能になり利用者数増大を狙うこともできる。
- 利点
- 実装が楽しい
- 秘匿情報(企業内の情報、ブックマーク、履歴)が扱える
- 欠点
- 実現可能性が低い。
- 実装がめんどくさい。今のデータ構造だと扱えるデータ量に限界がある。
- Google, Mozillaから嫌がられる。彼らの収益を毀損してしまう。
あれ
多数の人がローカルでクローラを回すと、DDoSみたいにならないかが不安。
動画よりは帯域を食わないとは思うが、念のために計算しておいたほうが良さそう?
Web Prowlerのクローラ機能の取り外し案
重たさの原因になっている。推薦の算出対象をお気に入りと履歴だけにすれば、極めて軽量にできるはずだ。10年ほどして、一般的なPCの性能が上がったらまたクローラ機能を入れればいいだろう。
- 利点
- 実現性が高い
- 欠点
- 作るのが面白くない
- あまり便利でない
あれ
しばらく雨続きだったが、明日は雨が降らないようだ。久々に散歩に出よう。ついでにBookOffに行って本を買うのも良い。
週末は特にやりたいこともなく、Web Prowlerの改修意欲もなく、相当のんびりした週末になりそうだ。ひたすら散歩するのもいいだろう。まあそれも気温次第だが。昼間暑ければ夜歩くというのも妥当だろう。とにかく散歩と食事が数少ない楽しみだ。たまに本が読めるぐらい。
あれ
22:00就寝、6:00起床。7.5時間ほど寝た。頭がはっきりしている気がする。SNSに投稿した後、動画の変換を始める。PCのファンが回り始める。6.5時間ほどかかるらしい。
着替えて朝食を外へ買いに出る。湿度が高い。道中、自転車に乗った高齢男性と、タクシー運転手の高齢男性が話しているのを見かける。口論に身構えたが談笑しているだけだった。ファミリーマートに着く。おにぎり2個、ファミチキ、コーヒー。店員が別の若年女性に代わっていた。研修中らしい。前よりも愛想が良い。そのままファミリーマートを出る。粗大ごみに張る券があるか見忘れる。三度目だろうか。「ついで」は大体忘れてしまう。
7:50ごろに眠気。冷たいシャワーを浴びる。頭が痒くなった。熱いシャワーのほうが良い。そのまま寝間着を洗濯する。
少し趣味のプログラム(Web Prowler)を書く。不要なページを削除する機能が遅くなっている。高速化のためにメモリー上にデータがあるページだけを削除の対象とするように書き換えた。動作確認を始めるが時間がかかる。単体テストの自動化が必要だ。
肩が凝ってきたので少し首を回す。目の下もヒクつき始めている。やはり暖かいシャワーで温めた方がずっといい。みずのさんのヘッドレスト付きの椅子がうらやましくなる。ヘッドレストがあれば首を休めたまま作業できるのかもしれない。次に買うときはヘッドレストが欲しいが、果たして何年後になることやら。
9:00に勤怠をつける。急かされるような気持が湧いてくる。急いだところで何も変わらないはずなのに。頼まれた仕事はほとんどないはずなのに。落ち着いて目の前の仕事に集中したほうがよほど良い結果になるはずなのに。落ち着いて勉強でもしている方がよほど充実した1日になるはずなのに。
英語のメールが届いている。自社の翻訳システムにかける。いつまでたっても翻訳されない。社内システムにはガッカリさせられっぱなしだ。会社が従業員を選んでいると同時に、従業員が会社を選んでいるという意識が必要だろう。劣悪な社内システムは従業員の満足度が下がる。
久々にKJ法をまじめにやった。頭を使いすぎて調子がおかしくなる。集中しすぎて呼吸を忘れてしまっていたのだろう。強制的に呼吸させる機械でもあれば集中が長続きするだろうか。休憩のために洗濯ものを干し、お好み焼きを作って食べた。
あれ
新しい技術を勉強して使いたい。例えばWeb WorkerやWebassemblyだ。しかしなかなか使う機会が無い。どちらも調査と検証は進めている。何もせずにこまねいているわけではない。ただ、Web Prowlerに使うには利用状況がうまく嵌ってくれない。
ウェブからのデータ取得にWeb Workerを使おうとしたが、DOMParserがWeb Workerでは使うことができなかった。DOMParserを除いた部分をWeb Workerで動かそうと考えたが、そこまで重たい処理でもない。DOMParserが一番CPUに負担がかかる処理だ。
Webassemblyで分かち書きを高速化しようとしたが、どうもTinySegmenterをWebassemblyで動かしても処理が遅くなるだけのようだ。それよりもTinySegmenterをBigramに置き換える方が速い。トークンの数は増えてしまうが、検索結果の精度向上につながるだろう。
web prowlerのcrowlerをweb workerで動かす
スレッドが分かれるので、推薦のレスポンスがよくなるはず。
DOMParserがWeb Workerでは使えない。終了。DOMParser以外の部分を何とかできるなら何とかする
推薦結果の視認性が低い
見ていて疲れる。デザインの問題かもしれないし、推薦と文字の相性が悪いのかもしれない。ひとまず文字のサイズを大きくして様子見。Ctrl+スクロールで文字サイズが大きくできる。
CSSをいじってタイトルだけを大きくした。デライトの輪郭の表題とサイズが似てきた。影響を受けているのだろう。
WebProwlerのページ取得処理をWeb Workerに切り替える
重い処理を別のスレッドで処理したい
リンク数と文字数の比率でページを評価
Web Prowlerの学習機能がうまく機能していない
リンクを多く張ったサイト、長々としたタイトルのサイト が推薦されやすくなっている。これらのサイトは検索エンジンに対して最適化されているから、必然的にWeb Prowlerでも同じ問題を抱えてしまう。
より複雑で高機能な学習機能を組み込めば解決できるかもしれないが、一人でやるには手間がかかりすぎる。何とかして簡易な方法で問題を回避したい。
どうやらページ削減機能が悪かったらしい。アクセス時刻が古いものを削除するようにしていた。アクセス時刻が新しいものが生き残るため、文字数が多いページが生き残りやすい状況になっていた。ページのスコアが低いものを削除するように変更して様子見中。これでうまくいきそうだったらアップデートをリリースしよう。
ダメだった。SNSの文体と、文字数が多いページの相性が良すぎる。質問回答サイトもやたらと表示される。もっとこう、、、個人サイト的な素朴なサイトが多く表示されてほしい。味付けの濃いサイトは表示されすぎてほしくない。ドメイン毎に表示するサイト数を制限した方が良いのだろうか。
Web Prowlerの利益化が収益化につながる
Web Prowlerは仕事での調べものでの利用を目的としている。そのため、仕事の効率が上がるなら利益が無いわけではない。これで仕事の給料が上がるなり、仕事にかかる時間が短くなるなりすればそれはそれで利益といえば利益だ。むしろその段階まで引き上げることができないならば、Web Prowler自体の収益化は不可能だろう。
今のところは、たまにWeb Prowlerが引っ張ってくる妙な情報を楽しめているぐらいだ。当意即妙な情報探査には至っていない。検索結果の品質に問題がある。学習機能がうまく機能していない。
それでも、ブックマークの管理からは解放されるはずだ。なんと私のブックマークは2700もある。項目数が2700のツリーだ。地獄である。もはやフォルダ整理は手間がかかって仕方がない。この方向で機能を深めていった方が良いのかもしれない。しばらく検討だ。
あれ
うすうす感じていることだが、Web Prowlerの今の在り方を進めていっても、時間の削減はできない。サイドバーにおすすめが出てきたとしても、レコメンドのデススパイラルに叩き込んでしまうだけだ。暇は潰せるだろうが、余暇は増えない。
もしかしたら、それでもいいのかもしれない。暇つぶしがこそが人類に残される最大の問題だ。
Tokenが文字列で保存されているのを、IDが保存されるようにする
プログラム全体を書き換えないといけなくなるため、いったん中止する
JavaScriptのMapは、100万項目入れても大丈夫
南牛球の気象にり粉て(1)
ダークモード対応
対応したい。が、Firefoxのダークモード判定が先に必要。
Firefoxのダークモードはテーマによって設定されている。
アドオンの設定画面が開けない
設定項目がないのか,それとも実装されていないのか分からないけど,アドオンの管理画面で「設定」画面を開くと「moz-extention://...にはファイルが見付かりませんでした」と表示される。
https://addons.mozilla.org/ja/firefox/addon/web-prowler/reviews/1718097/
あれ
仕事しながらよくよく趣味開発ができるものだなと自分ながら思う。今のところ1円の収益にもなっていない。そもそも利用者もそんなにいない。サーバーは持っていないので経費がかかっていないことだけは幸いだ。
Web Prowlerの収益化を考えている。何か新規性のある収益化の方法が無いか模索している。広告をつけるのは避けたい。Googleの後追いになってしまって面白みがない。Googleは一つあれば十分だ。思いつくまでは、寄付リンクをつけてもいいかもしれない。
Web Prowler1.31をリリース
https://addons.mozilla.org/ja/firefox/addon/web-prowler/
- 推薦ページのタイトルを短く切り詰めて表示
- メモリーリークを修正
- XMLHttpRequestからFetchに変更。
- 高速化
- PageのtokensをArrayからSetに変更
- 推薦ページの計算中は、ページが登録されないように変更
Web Prowler再起動時に、Firefoxが落ちる
①Bookmarkの再読み込みが起きている。データがある場合にはブロックする処理を突き抜けている。なんでや。
②Bookmark再読み込み際に、以上にメモリーを消費する。pages_registerの作りが悪い。一度すべてをメモリーに読み込んでから処理している。大体において再起動時にはPageのデータが増えているので、BookmarkされているPageをすべてメモリーに読み込むとすごいことになる。
上記二つを改善しなければいけない。②から先にやった方が良いだろう。①を治す前の方が現象の確認がしやすい。
②データ並列の範囲を広げた。登録まで一気通貫。一個流しは大正義。計測はしていないが、早くなった気がする。
Web Prowlerを走らせていると、Firefoxが落ちる
メモリが90%台のところに来ると落ちている。indexedDBか、localforageがメモリーリークしてる?
保存している量というよりは、読み書きの回数な気がする。要検証。一度ローカルへの保存を止めてみよう
→XMLHttpRequestがメモリリークしていた。XMLHttpRequestの処理をpanel.jsへ移動させて、推奨ページを表示する際に更新がかかるようにすれば、強制的にメモリーを解放させられるはず
→ダメだった。メモリー消費は変わらず、サイドバーが重たくなっただけだった
→Fetchに置き換えたら治ったっぽい。メモリーの増減が安定している。
→ダメだった。メモリーの消費は抑えられたが相変わらず落ちる
→気が付かない間にメモリーが消費されていた。動画などの大きいデータを取ってきてしまうと、メモリーに直撃してしまうので、クローラがHTMLだけを取りに行くようにする。
Acceptにtext/html,application/xhtml xml,application/xml;を設定した。よくわかってないがこれでHTML,XHTML,XMLだけが取られてくるようになるはずだ。
Assertも追加した。取ってきたファイルサイズがAMAZONの欲しいものリストの100倍以上の時にエラーを出してくれる。これでどういったデータで問題が出ているかがわかるようになる。最悪停止するから調査ができる。アンドンだ。
→トイレでうんこしてる間にFirefoxが落ちた。文字通りの>クソ<アドオンである。ログをファイル出力しないと、調査もままならない。Firefoxにログのファイル出力機能が見つからない以上、Web Prowler自身にそういうスクリプトを組むしかない。
→やめた。ファイル出力したとしても、エラーをハンドルしなければいけないので無理だった。
→pages_register_on_messageに排他制御を入れたらメモリー消費が劇的に減った。同時に実行するとだめらしい。
page_delete_from_token
tokenと紐づくpageのSetから、引数で与えられたpageを削除するメソッド
Web Prowlerのpage_delete_from_tokenのバグ取り
引数にpageを入れるところに、urlを入れていた。url_delete_from_tokenを作成して入れ替えて置いた。assertも先頭に置いておいた。これでここについてはバグったらすぐにわかるようになる。
あれ
案の定、ガベージコレクションで2秒ほどかかっていた
オブジェクト生成を抑制する
Firefoxの開発ツールでガベージコレクション時に回収されているオブジェクトを確認できないだろうか?
とりあえずエスパーしてオブジェクトの生成を減らしたらましになったっぽい
東洋医学なのでなんだかなぁという感じはする
科学的にできた方がエンジニアっぽい
まあ良くなったからいいか
Web Prowlerを24時間程度動かすと、Firefox自体が重たくなる
XMLHttpRequestが悪さしてそうな気がする。
どうやってテストしたものかな。
localhostにアクセスするのが安全だろうか。
先にfirefox開発ツールのperformanceを一度見た方が良さそう
ガベコレが頻発していたら、そのオブジェクトの生成を抑制すればいい
あれ
Web Prowlerもレコメンドのデススパイラルを引き起こす問題を抱えてることに気付いた。
特に、文字の入力に追従して関連ページを表示するのはかなりまずい。
せっかく生産的なことに時間を使っているのに、他のことに気を持っていかれてしまう
あれ
いろんなウェブアプリを使っていると、情報が散逸しがちだけれど、このアドオンを使えば複数のウェブアプリにまたがって情報を探し出すことができる(はず)
いろんなウェブアプリを使っていると、情報が散逸しがちだけれど、このアドオンを使えば複数のウェブアプリにまたがって情報を探し出すことができる(はず)
閲覧履歴起点の検索エンジン
検索結果が、自分にとって良いものになりやすいのではないか
日本人であれば、日本語のページが重点的にクロールされる
技術者であれば、技術サイトが重点的にクロールされる
閲覧履歴からのホップ数でページランクをつけてもいいかもしれない
検索エンジンをブラウザエクステンションで実装するアイデア
ブラウザの閲覧履歴を元にウェブをクロールする
検索実施時にクロール結果から検索する
クローラーはブラウザエクステンションで常駐させる