2015年8月24日月曜日

スケジュールの見直し

Windows10を導入してみました。そんなに悪くないと思いました(メンテナンスと称して午前3時に勝手に立ち上がるのには驚きましたが)。

制作の進行状況ですが、タイトなスケジュールで頑張る予定だったのですが、真夏にそんなことができるはずもなく、あまり進んでいません。

働かぬ頭でいろいろ考えた結果、UIを大きく変更することにしました。

それに合わせて、Windows Formは一旦捨てて、新しい環境に以降しようと思います。何度も愚痴ってしまっていましたが、Windows Formのレイアウトルーチンは結局いまだにまともにコントロールできていません。「マウスポインタを乗せるとポップアップする」といったようなアグレッシブなUIを実現するには、かなり低レベルから自分の手でコントロールしないとうまくいかないようです。

そのために大々的に一から書き直すことになりますが、それに合わせて試しにWindows10のストアアプリに以降してみようかと思います。

Windows 10以前のストアアプリは、Windows 8以降でないと動かず、タブレット用に全画面表示が強制され、操作がタッチ前提の上、見慣れぬUIという4重苦のような環境でした。ですがWindows10は無償アップグレードということで、これからユーザーが増えてくると思いますし、またWindows10では普通のデスクトップアプリもストアに置いていいらしいので、「マイクロソフトのお墨付きがある安全な普通のアプリが簡単に手に入るよ」みたいなことで、ストアも使い物になるかもわかりません。

とにかく「お金がない」という絶対的危機的状況を解決するめどが全然立っておらず、マネタイズのプランが「ビットコインで寄付してもらう」という現実味のないものなので(洗練されたヘビーユーザーの中では当たり前の行為なのかもしれませんが、洗練された世界のことがよくわからないので判断できません)、もっとまじめに取り組もうと思います。Windowsのストアに置いて、マイクロソフトの審査に通ったアプリとして、マイクロソフトの提供するアプリ内課金を使って、課金してもらおうと思います。

今までのスケジュールは

PC版で基本機能完成→マルチプラットフォーム化→英語版へのローカライズ→スマホの狭い画面、タッチ操作への対応→スマホ版完成!

スマホ版完成によりはじめてまともにマネタイズが可能になってお金が入ってくる、かなり気の長いプランでした。しかしこの夏をグダグダに過ごしたことで、悠長すぎるこのスケジュールは見直しを余儀なくされました。

(現在ある中途半端なアルファ版)→英語版へ→ストアアプリへ→機能の追加→ストア版完成→スマホの狭い画面、タッチ操作への対応→スマホ版完成

英語版を作ってから、言語だけを日本語にするのは、日本人である私には簡単です。ただ日本語版を英語にするのは大変なので、もう最初からアメリカ人のMS審査部門に向けて英語で作り、その後で日本語版にしようと思います。特に日本のユーザーに向けてつくろうとすると、スタンプやガクブルや名前の匿名化など、難しいものからほとんど不可能なものまでいろんな機能に対応しなければいけなくなります。日本RedditのCSSの凝り具合を見ると、独自描画ルーチンで日本人にまともに使える専ブラを作るのは不可能ではないかとも思えてきます。

一旦メインユーザーに海外を想定して、日本向けの特殊な機能は後回しにし、とにかく急場をしのごうと思います。

2015年8月2日日曜日

沖縄移住計画

夏は暑く、あまり調子は上がりません。しかし暑いのは8月いっぱいぐらいですし、積極的に午睡したり、涼しい時間に活動したりすることでそれなりにやっていくことができます。

ほんとうに恐ろしいのは冬です。冬は12月下旬くらいから3月上旬ぐらいまで、耐えられないほど寒い期間が3ヶ月ほどあり、また寒すぎればキーボードが打てず暖かくすると眠くなるという逃げ場のない状況がずっと続きます。

とにかく冬はダメなので、冬が来る前に沖縄に移住したいという、夢とも妄想ともつかない願望をここ数ヶ月持ち続けています。スマホ版がうまいこといって、お金を得られたら、もしかしたらできるのではないかと思っています。

2015年7月31日金曜日

休みの予定

いろいろ試した結果、3週間働いて、3日休む、というペースがよいのではないかという結論に達しました。それにあわせて3週間おきに新しいバージョンを出していこうと思います。3週間&3日を1イテレーションとして

1イテレーション:一般公開
2イテレーション:正式版
3イテレーション:スマホ版
4イテレーション:予備

4イテレーションで大体3ヶ月になります。4イテレーション経過後1ヶ月休もうと思います。

英語の勉強がしたいのですが、いろいろ実験した結果プログラミングとは両立できず、一週間程度の休みでは十分な勉強ができないということがわかりました。一ヶ月ぐらい英語漬けにしたらレベルアップできるのではないかと思います。

4ヶ月中一ヶ月と9日休むことになりますが、結局週に1日でも2日でも休んでしまうと、集中が切れて取り戻すのに2日ぐらいかかってしまうので、1週間のうちまともに稼動できるのは3日ぐらいになってしまいます。休みを3週間に1度にすることで、その無駄が排除でき効率が上がることがわかりました。その代わり休みなくやるためには1日6時間ぐらいが限界のようです。

おそらく1イテレーションでは一般公開には間に合わないのですが、おばあちゃんから一万円もらったので、8月も乗り切れる可能性が高く、寄付を求めて急がなくても大丈夫かもわかりません。それとは別にイテレーションごとに新バージョンは出していこうと思っています。

2015年7月28日火曜日

Windows.Formsの問題

アクティブフォーム上に置いて、一度でも表示されたことがないとコントロールは正しく配置されないんですが、プログラム上でShowするだけでなく、Showした結果として実際に画面に表示されないとそのフラグが立たないようです。この問題にあらゆるタイミングで引っかかりまくっているのですが、いまだにどう御せばいいのか分かりません。基本的にコントロール配置は表示前にやるので、まともにやると解決不能です。

DockとかFlowLayoutPanelのようなものを使わずに、全て手動配置にすればおそらく解決できるんですが、ウインドウサイズ変更を手動で反映するのはかなり手間です。メインフォームに関しては隠しコントロールを作らずに、最初は全てVisible=trueにして、Control.Loadイベントか何かで隠したいものをVisible=falseにしても解決可能のようですが、メインでないフォームではどうもうまく行きません。

休み

3週間休まなかったので休んだほうが良いかと思い、1週間休んでみました。2日以上休んでも体感的に違いがわからず、意味があったのかはよく分かりません。次からは連続2日以上休まないことにします。

2015年7月22日水曜日

ロードマップ

一応公開にはこぎつけましたが、よく考えるとまだ全く危機を脱したわけではありません。多少タイムリミットは伸ばせたとはいえ、一刻も早く公開して寄付を求めて実際に寄付が集まらないと破産してしまうことに違いはありません。

「なんでこんなアタリマエのことが出来ないんだこのクソブラウザ!」と言われない、出来て当たり前の最低限をひと通り実装して、一般公開する、というのが次の目標になります。使っててストレスを与えないところまで持って行きたい。そのために必要なことを書き出してみます。

ブラウザのようにスレとサブレのタブを一ペインにまとめる。
背景色、文字色を変更可能に。
タブをドラッグして移動できるようにする。
コメントのテキストをドラッグで選択してコピー
RedditのURLをクリックした時に、専ブラ内で開けるものは開く。
いろんなところで右クリック出来るようにする
スタンプの実装
板一覧に登録されてるサブレディットを最新のものに
マウスを使ったショートカット
スレ立て
板一覧メニューがクソ以下なので根本的に直す。更新できるようにする。
プライベートメッセ ージ(返信)を使えるようにする。
書き込んだコメントの評価一覧を見れるようにする
画像サムネマウスオーバーで画像を見たい

↑ここまでが一般公開までに最低限やらなければならないこと


書き込みプレビュー
注目フィルタを正しく動かす
コメントを開いたり閉じたり出来るようにする
NG機能
スレの全コメントの取得(ある程度スレが進むと省略されてしまうので、省略されたコメを全て取得する。新着、ベスト200件に出てこないコメの評価も全部更新出来る)
購読サブレの全解除(デフォルトの英語サブレ対策)
評価値、カルマを保存してグラフ化する
実況(?)
スレやコメントの検索
公開後に出てくるであろう私が気づいていない様々な不満に対応する

↑ここまでが正式版までにやりたいこと

正式版といってもパイロット版の正式版、P1.0ということになります。

パイロット版では直せないことがいくつかあります。

・大きいコメントのちらつき(並列処理時の謎例外で一瞬ちらつきます。解決法が何も思いつきません)
・ソース先読み(スレを開いた時に、ソースを裏で先に読みこんでおこうとすると、なぜかUIスレッドもガクガクになるので、先読みをやるのはパイロット版では諦めることにします)

現バージョンはWinFormという古い、Win32APIのラッパーを利用してやっているので、いろいろガタが来ています。
正式版ではMono&GTK#に移植して、MacやLinuxでも動かせるようにする予定なので、その時に治せるんじゃないかと考えています。また、GTKにはテーマというのがあるらしく、それを使えば見た目を根本的にカスタマイズ出来るとかいう話なので、それを使ってダサい見た目もなんとか出来ればと考えています。

一般公開まで2週間ちょっと、おそらく実装2週間とデバッグ少々で間に合うと思います。正式版は一般公開後どのくらい修正しなければならないか次第になります。

2015年7月20日月曜日

ここまでのまとめとアプリの公開

昨日の夜はだいぶデバッグが進んだような気がしたのですが、今日動かしてみるとけっこうガタガタです。ただ公開するすると言ってきてずっと出来ていなかったので、今回は出します。今までとは違って出せるものがないわけではないのです。ガタガタなだけで、やろうとしてること、コンセプトぐらいは伝わるのではないかと思います。

ただよく考えれば、昨日今日動きだしたばかりのバグだらけのアプリを公開するというのは正気ではありません。アニメ第一話の試写会を色も塗らず原画のまま中割りもせず動きもガクガクの状態でやるようなものです。

早く寄付を求めなければお金がなくなるという思いが先に立って、焦ってやってきましたが、寄付を求めるような思い上がったことが出来るようなところまで完成度を上げられていません。また、昨日親から一万円借りて、クレジットカードの未払いを払ったので、当座の危機は解消されたのではないかと思います。ここでクレジットカードが解約になってしまうと、もう一生クレジットカードが持てない可能性も高いので、ここが凌げたのは大きいです。インターネット代金5000円くらいも未払いのはずなのですが、未払いの督促状が見当たらないので、多分大丈夫だと思います。

ここ3週間ぐらい休みなくやってきたのですが、疲れが出たのか現在全く頭が働いていません。少し休む必要があるようです。

このアプリが何をしているかの説明を書き、現在把握している不具合とか、今後のロードマップ等、公開するにあたっていろいろ書きたいのですが、体力が残っていません。

公開しますが、出来ればこれで判断はしないでいただければと思います。今回はブログ限定で公開します。このブログのここまでのグダグダを見て、なおまだ見ているという方、いるかどうか分かりませんが、そういう方がいたとすれば、アプリがガタガタでもそこまで気にしないような、専ブラに対する情熱と忍耐を持っている方ではないか、という希望的観測で行動してみようと思います。

とりあえずバグや機能不足を除いても、大きな不満になりそうな要素がまだたくさん残っています。大きな不満になる要素を全て取り除き、大半の人がそんなに不満なく使えるレベル、そこまでもっていって、一般公開を可能にするのが次の目標です。これが一ヶ月後を予定しています。できればそこまでは、アプリに対する評価を留保していただければと思います。

また、今回、このブログやアプリに対するリンク、宣伝等は、是非とも控えていただければと思っております。このアプリはまだ人前に出せる段階にはありません。「なら公開しなければいいだろう」という至極もっともな声が頭のなかに響いてきますが、出すといったからには出さねばならないとも思います。どうかよろしくお願いいたします。

https://drive.google.com/file/d/0BzP_9LiaNnm1YVBRYThEbTJLU0k/view?usp=sharing

動作条件:Windows Vista以降。Windows8ではうまく動かない可能性(?)

アプリの最低限の説明:自動ダウンロードについて

これらの数字は、仮のものです。最終版では変更されると思います。

現在タブとして開かれている、購読、マルレ等を含む全てのサブレは、1分間に1回、一括で新着25件が自動取得されます。なぜ1分に25件かというと、デフォルトの購読英語サブレ全部合わせて新着が1分に多くて15件くらいだったので、25あれば大丈夫だろうという判断です。25はデフォルトの表示数でもあり、キャッシュが効きやすいんじゃないかとも考えました。

現在表示されているスレが有る場合は、1分に1度、アクティブでないタブのスレは、5分に1度、新着が取得されます。

新着の取得は、まずスレの情報だけを取得しコメント数を調べ、コメント数に変化があった場合、新着コメ200件を取得します。200なのはデフォルトなのでキャッシュが効きやすいだろうという判断です。

サブレのタブは5分に1度、Hot順に100件を取得し、評価値などの変化を追います。アクティブなスレは5分に一度、そうでないスレは50分に1度、Best順200件を取得し評価値などの変化を追います。

タブがどれだけ開かれていても、自動ダウンロードは3秒に1回までです。APIへのアクセスは1秒1回までとされていますが、自動ダウンロード以外でもアクセスされることがあるので余裕を見ています。

アプリの最低限の説明2:未読フィルタ

未読ボタンを押すと、未読コメだけが表示されます。画面に表示したことがあるコメントは既読になります。また、スクロールで一気に飛ばした場合も、飛ばされたコメントは表示されていなくても全て既読になります。

今後について:

しばらくは機能追加を控えてデバッグに専念しようと思います(どうしても入れたい機能「スレタブの結合」と「背景色、文字色の変更」を除きます)。一週間ぐらいデバッグすればだいぶまともになっているんじゃないかと思います。

2015年7月19日日曜日

進捗

デバッグはほとんど終わったと思うので、あとは謝辞を作って(BSDライセンスのものを使いまくっているので謝辞がないとライセンス違反になってしまうはずです)、細かいところを直して、明日公開できそうです。

2015年7月18日土曜日

進捗

だいぶ動いてきてはいるのですが、まだバッグバグのバグだらけです。

バグが全部取れて、1日動かしてみて、新しいバグが見つからなければ、「デバッグをしました」と主張することが可能になると考えています(バグが無くなったということではなく、バグを取る努力をある程度やりました、と主張しても怒られないといったくらいの意味です)。なのでそれができたら公開しようと思います。

だいたいバグが取れてから1日ぐらいは動かさないと、ユーザビリティがどうなっているのか、予定通りの使い勝手になっているのかも分からないままです。「使いやすいアプリになりました」と主張できるのも1日使ってみてからの話だと思います。

目標は明日中にバグを取って、明後日は1日いろいろ確認して、公開という感じで考えています。

2015年7月15日水曜日

進捗

9割9分出来たと思います。

まだ動かしてないので、「動かしてみたら全然動かない→設計ミスだった」という流れになって、またドツボにはまる可能性も無きにしもという感じではあるのですが、9割9分は実装できました。あとは最後の1分を実装して、デバッグして、動くようになったら、ひっそりと公開するという流れです。そんなに時間はかからないと思います。

2015年7月8日水曜日

進捗

1週間で終わらせると息巻いてから1週間経ってしまいました。しかし全然終わっていません。

作りたい機能があと2つあったのですが、1週間かけてもそのうちの1つも終わりませんでした。再設計が必要になって、動いている部分にもかなり手を入れたのでどちらかと言えば後退しているかもしれません。

コーディングやデバッグは手を動かしていればいずれ終わる、頭をつかう部分はありながらも、ひたすらパズルを解き続けるただの作業といえなくもないようなもので、何日作業すれば終わるかもだいたい分かるんですが、再設計となると、脳内に作った回路を破壊し、再構築する、脳の再プログラミングが必要になります。これはどれだけかかるのか分かりません。やりたいことを理解し、どうすれば実現できるか理解していれば、あとは実現するだけですが、理解が不十分で、実現のための方法論が困難すぎたため、再度やりたいことを正確に定義し、理解しなおし、道筋を考え直す必要があります。

感覚的にはあと2週間ぐらいかかりそうです。いままでで学習出来たことは、「死ぬほど頑張れば1週間で出来る」といって目標を1週間にして自分にハッパをかけたつもりになっても、あふれるようにパワーが湧いてこなければ、結局死ぬほど頑張ることも出来ないし1週間で作ることも出来ません。そしてあふれるようにパワーが湧いてくることは滅多にありません。

なのでこの目標は、いつものペースで、普通にやって2週間です。インターネットやクレジットカードの未払の督促状が来ていて、払い込まないとクレジットカードは解約でインターネットも止まることになります。そのデッドラインはおそらく今月末のはずです。本当の本当にデッドラインです。いままでデッドラインと言ってきたものは自分にハッパをかけるための幻のデッドラインでしたが、今回は本物です。

デッドラインに辿り着くまでに、なんとかまともに動く実用的なものを作りたかったのですが、そのはるか手前、最低限自分のやりたい機能が動くだけの、実用もへったくれもないパイロット版に悪戦苦闘している有り様です。しかしパイロット版が終わり、一番難しい、一番やりたい機能が作れれば、あとの部分は惰性でコーディングとデバッグをしていけば作れるはずです。もっと難しい機能を作りたくならない限り、ですが。

2015年7月1日水曜日

進捗

とうとう7月になりました。

夏になるとバイオリズムがめちゃくちゃになってあまり進まなくなると思うので、梅雨のうちにかたをつけてしまいたいところです。

前回の進捗で入れたい機能があと6つあるという話をしたんですが、この1週間で3つ消化出来ました。そして1つ諦めたのであと2つです。

いい感じのペースだと思います。しかし残った2つは最高レベルの重要な機能だと思っているもので、実装もなかなか大変だと思います。そして大手を振って人前に出すためにはそれなりにデバッグしてまともに動かせるところまではやらないといけません。

ここから一週間としばらくはペースをいけるところまで上げていこうと思います。それでバッチリ公開できるでしょう。

2015年6月29日月曜日

System.Drawing.Graphicsのマルチスレッド非対応問題

Graphics.DrawImageはマルチスレッド対応していない。

http://tiltcorrector.seesaa.net/article/249984715.html



この時点でも驚愕の情報なんですが、DrawImageとDrawStringが並列処理でかちあうと例外が飛んでくるようなのです。Paintイベント時のGraphicsと、ビットマップから取り出したGraphicsでどこにかち合う要素があるのか全くわからないのですが。本当に、本当におかしなライブラリですWindows.Formsは。昔使ってた時は簡単にいろんなことが出来るなあと思いましたが、複雑なことは出来ないようです。複雑なことに使ったことがなかったので気付かなかったのですが、本当に全く困りました。これでは満足なパフォーマンスが出せそうにありません。

まあWinForm版はパイロット版という位置づけに自分の中でいつの間にか変わっていたので、パフォーマンスがそこまででなくてもいいような気もしますけれど。

しかも「InvalidOperationException オブジェクトは現在他の場所で使用されています」という例外で、MSDNにも記述がない上、私はいつも例外スロー時点でデバッグ中断する設定なのですが、InvalidOperationExceptionではあまりにも一般的すぎて例外スロー中断の例外に設定するわけにもいきません(結局設定しました。自分で投げてたInvalidOperationExceptionは全部他の例外に変えました。もっといい方法がないものでしょうか)

2015年6月24日水曜日

進捗

 前回25日までに仕上げたいといって、そしてもう25日にならんとしてるところですが、まだあと少しかかります。

 あと6個ぐらい機能を追加できれば、実用的に使えるとまではいかないまでも、プラグインで拡張したブラウザで見るのと比べてどう便利にできるのかを感じ取ってもらえるレベルまで進められると思います。そこまでいければソフトウェアサブレあたりでひっそりと公開して、フィードバックをもらったり、寄付を募ったりも出来るようになるはずです。

 インターネット代金未払の督促状がだいたい毎月5日あたりにくるので、その辺をデッドラインとして、それより前に仕上げないといけないので、あと1週間と考えて、1日1個機能を実装できればうまくいきます。1週間なら限界を振りきって1日10時間ぐらいやっても、燃え尽きずにやれるはずです。しかし急ぎすぎてコードの品質を下げてしまうのはもうコリゴリなので、品質を下げないでやりたいところですが、普通にやると2日で機能1個ぐらいのペースになってちょっと間に合いません。

 やや急ぎながら、コードの品質は下げずに、一週間ちょっとで燃え尽きるぐらいのペースでやっていこうと思います。

2015年6月13日土曜日

今後の予定

 ようやく全体的な再設計が出来ました。私はコードを書きながら設計するので、実装も大体終わった感があります。

 あとはデバッグして機能を追加して出すだけですが、口で言うのは本当に簡単です。しかし設計のために悩み苦しむフェーズが終わったので、ここから一気にスピードアップして、うまくいく可能性も、かなりあるような、楽観的観測をしています。

 来月までにお金が入らないと死んでしまうので、ベータ版を出して寄付を募って、実際に寄付が集まるまでの時間を考えると(本当に集まればいいんですが)、25日ぐらいには出さないといけないでしょう。そこから逆算して取捨選択して、どの機能を実装していくか決めていく必要があります。

 ベータ版を出した後の予定ですが、デバッグしながら英語版を準備し、さらに間に合わなかった機能を追加していき、デバッグと機能追加が終わったら、Mono&GTK#環境に移植して、マックやLinuxでも動くようにしようと思っています。今やっているWindows Form環境だとどうしても描画がカクつくのが直せないらしいのです。

http://dobon.net/vb/dotnet/control/doublebuffered.html
>フォームに大量のコントロールを配置している時のちらつきには別の理由があり、上記の方法では解決できません。

>このようにすると、一部のコントロールが正常に表示されなくなったり、最小化ボタンなどのアニメーションが無効になったり、Aeroを有効にしていると機能しなかったりなど、様々な問題があるようです。よって、できれば使用しない方が良いでしょう。


 変な設定を入れるとかなり描画がスムーズになるのですが、その設定がバグだらけでいろいろとおかしくなるということです。しかしこれ以外に頼れるものがないので今回はこれでいきます。

 バグだらけの設定に頼るのは一時的にして、最終的には全てのベースになる、ちゃんとしたPC版を作らなければならないように思います。いずれはスマホにも移植しようと思っていますが、ベースがしっかりしていなければ難しいでしょう。

 スマホ版はXamarin.Formsを使ってAndroid/iPhone両対応にする予定ですが、いきなりクロスプラットフォームにするのは難しいので、これに合わせて一旦Windows/Mac/Linuxのクロスプラットフォーム版を作ることにしました。オブジェクト指向のテクニックを使ってWindows FormとGTK#、.NetとMonoに両対応させます。UIをブラックボックス化して入れ替えられるように設計しなおしたので、おそらくうまくいくでしょう。

 実際はGTK#を使ったことがないので、カクつかずうまく描画できるか、そもそもまともに動かせるのか、といったことはやってみないとわからないのですが、まあ何をするにもわからないことだらけです。楽観的にいこうと思います。

2015年5月28日木曜日

今後の予定

 本当にお金が全然なくなってしまったので、とにかく可及的速やかにそれなりに動くものを作って、寄付を求めたいと思います。6月中に出せなければ完全にアウト、インターネットが繋がらなくなるのでこのプロジェクト自体が破綻してしまいます。寄付が集まらなくてもアウトですが、そこは今は考えないようにします。(最後の手段として親に土下座するというのもありますが、そこも今は考えないことにします)。

 進捗状況を言うと、現在全くまともに動いていないような状態です。ただ、今はひたすら最終形を目指して作っているので、動くようになった段階で、いきなり最終形に近い、機能がそれなりに揃った状態のものが出てくる予定です。

 いつの頃からか、最終形を目指して全面的に書き直すことになっていました。意識的にそう決断したわけではなく、目の前にあるコードが考えている最終形とあまりにも違いすぎるので、衝動的に書きなおし始めてしまったというのが実際のところです。

 本当はそれが出来た後にどうするかを書こうと思って書き始めたのですが、あまりにも取らぬ狸の皮算用すぎるので、やめます。まともに動く最初のバージョンを作らないことには、その先の予定を言っても虚しく響くだけになってしまうでしょう。とにかく早くまともに動く専ブラを出したいと思います。

2015年5月22日金曜日

進捗

内部動作を全部作り直して、その過程でいろいろな部分が壊れてしまいましたが、どうにか再び動き出しました。大手術でしたがなんとか生還できたようです。

http://i.imgur.com/n8nfhMW.png

ちょっと頑張れば元の機能は戻せるでしょうし、もうちょっと頑張ればいろいろな機能を付け加えて、そこそこちゃんと動く専ブラになると思います。

2015年5月3日日曜日

進捗

こんな初心者みたいなことを報告したくはないのですが、やってもやってもコンパイルエラーのまま進みません。

マークダウンの実装のためにしばらく時間を置いていた間に私の考えているアプリの動作が今まで書いてきたコードと全然あわなくなってしまっていて、変更範囲がものすごく広範囲に及んでいて全部書き直したほうが早いんじゃないかという気さえします。

あまりコンパイルエラーを出したくないので変更を最小限にとどめようとして、旧仕様と現在の共通点を見つけようとする作業が、ほとんど共通点自体が無いため冷静に考えてみるとものすごく無駄が多く、また元のコードを新しい仕様のコードに置き換えていくたびに記憶も上書きしていかねばならず、旧仕様を忘れる→新仕様を覚える と忘れる作業が入る分ただ書くより辛い感じがします。

いい加減な考えで適当に書いていた旧仕様を一気に新しくしようとして、いろんな泥沼に飲み込まれている感じがありますが、決して諦めて投げ出して進まなくなっているわけではありません。どこかを直すたびに他の部分と齟齬が出てコンパイルエラーの数は一向に減りませんが、最終的に必要なところを全部書き直せば終わるはずです。

2015年4月24日金曜日

進捗

本当はゆっくり一つ一つやっていけば問題なかったことでも、一度に行うと混乱して収集がつかなくなることもままあります。

「テキストボックスに表示していたのを自作マークダウン表示ルーチンに変更してテスト」
「自動スクロールに任せていたのを自作部分描画ルーチンに変更してテスト」
「問題のある動作を新バージョンに置き換えてテスト」

とやっていけばそんなに問題はなかったと思うのですが、そ全部を一度にやりつつ適当にイケてない設計を直したり、よくわからない処理をコメントアウトしたり、ミドルウェアのRedditSharpに依存しないように書きなおしたりした結果、まともに動かなくなりました。もちろんそれ自体は一時的なことのはずです。

特にRedditSharpにはいろいろな問題があり、置き換えたいと思っていたのですが、置き換えようと参照を切った瞬間にものすごい数のコンパイルエラーが発生し大改修が必要になりました。遅かれ早かれやらなければならなかったのですが、今やらなくても別に良かったはずなのですが、やってしまったので、RedditSharpがやっていたことを置き換えるためにしばらく時間が必要になりました。

RedditSharpの問題というのは、gzip圧縮を受け入れていなかったり、コメント取得時に全体のコメント数が取れなかったり、IDだけあればダウンロードできるデータを取得するのにオブジェクト全体を要求されたり、コメントが編集済みかどうかわからなかったりmoreが取れなかったりなど色々あるのですが、軽い気持ちで参照を切った瞬間にそのありがたみをヒシヒシと感じることになりました。

全く気合が足りていません。とにかくまともに生活するためにはソフトを作ってなんとかしてお金を得るしか今はありません。とにかく頑張らなければなりません。
 

2015年4月20日月曜日

頭を切り替える時の現象

一つのことをやっていると短期記憶が全部そのことで染まって、そのことをやっている分には効率がいいですが、さて別のことをしようとなるといろいろな不都合が起こります。長期間ひとつの作業をやって、それを終えてまた元の作業に戻るような場合には、一つのことをやっている間に忘れてしまったことを一つ一つ思い出しては短期記憶を上書きしていき、元の作業用に染め直さなければなりません。そして今がどういう状況で何をしたらいいのかを理解しなおす必要があります。

プログラミングでは、よほど小さなソフトでない限り一度に把握できるのはソフトウェアの一部だけで、深く理解しなければコードをいじることは出来ません。書いた直後はよく覚えていても、しばらく放っておけば忘れてしまいます。忘れたらまたコードを読んで理解して記憶し直すしかありません。

自分が書いたものなので理解するのはたやすいはずですが、なぜこんなにも辛かったり眠かったりするのか。一旦記憶が切れてしまうと、記憶を全部上書きしなおして本調子に戻るまでにずいぶん時間がかかってしまいます。その間中、頭が痺れるような感じになったり、ハイになったり眠くなったりします。この現象が一体何なのか、知りたいのですが検索しても出てきません。他の人からも聞いたことがありません。

2015年4月19日日曜日

部分描画とスクロールバーの問題

テーブルタグも引用タグもその他全部のタグもとりあえずの実装は出来ました。本格的なデバッグは出来ていないので完成というのはまだ無理ですがマークダウンの実装は一区切りつきました。

この後はマークダウン表示ルーチンをアプリに組み込まなければいけないのですが、ずっとマークダウンのことばかりやっていたのでアプリの実装の詳細をかなり忘れてしまいました。組み込みにもまだ大きな問題が残っています。

いろいろ思い出さなければいけないので、なぜこんなにもマークダウンをズルズルとやる羽目になったのかちょっと書き出してみようかと思います。

もともと不具合がありました。これはWindowsの16bit時代からの名残か何かで、全体の高さが32767ピクセルを超えるとスクロールバーがそれ以上スクロールしなくなるというものです。300コメントを超えた当たりでこれが実際に起きるようになり、これへの対応に追われ続けて、まだ対応が終わっていないという状況です。

スクロールの範囲を広げるだけならスクロールルーチンを自作するだけなので別に難しいことはないのですが、問題は「300コメントを30000ピクセルに渡ってズラッと表示した後に、スクロールバーでスクロールする」というのが非常に動作が遅いというところにあります。それは私が「コメントに対してテキストボックスを作成し、300コメントなら300個のテキストボックスを縦に並べてズラッと表示する」という恐ろしいほどの手抜き実装をしているのが原因です。つまりこれは不具合というよりも、私の手抜きに対して必然的に生じた当然の帰結というべきものです。不具合というのは手抜きでもバグでもオブラートに包んで表せる便利な言葉ですが、それを隠れ蓑にするべきではありませんでした。まったく申し訳ないです。

300個のテキストボックスを並べるのは動作が非常に遅いです。それはテキストボックスというものが300個並べられることを想定して作られていないというようなことが原因だろうと思います。これを解決するためには部分描画が有効です。つまり必要な部分、たとえば132番目のコメントから描画を初めて、140番目のコメントで画面が全て埋まったらそこで描画をやめる、といったように画面に表示される部分だけ描画処理を行えば、全体がどんなに大きくても描画量を一定にすることが出来ます。この場合なら描画用アイテムは132から140までの9個で済みます。

そこからスクロールするのも簡単です。上に10ピクセルスクロールしたとしたら、131番目のコメントの下から10ピクセル分から描画を開始すればいいわけです。スマホのようなインターフェースであれば指でスクロールするだけなのでそれで問題ないのですが、この時問題になるのはスクロールバーです。

スクロールバーはスクロールできる全体の範囲を知っていることを前提にしたUIです。「これを描画した結果全体が何ピクセルになるか」を知っていないと正しく動かすことが出来ません。描画した結果何ピクセルになるかを知るためには描画に等しい負荷がかかることも多く、このスクロールバーの存在が原因で、大半のテキストエディタは1MBといったような、現代のCPUであれば二次キャッシュに乗ってしまうような小さな容量のテキストファイルを表示しただけでまともに動かなくなりますし、そうでないエディタは文字幅が一定のフォントを用い改行ケタ数を指定することでどうにか動かそうとします(それでもまともに動かないことも多いです)。

しかしスクロールバーはPC用アプリに必須のものなので削除することは出来ません。問題は「いかに効率よく描画後のサイズを知るか」というところにあります。そのためには「描画せずに描画後のサイズを知る」処理が必要になり、なかなか面倒です。しかしHTMLのテーブルタグを綺麗に配置しようとすれば、描画後の大きさをあらかじめ知ることが必須になりますので、どうせマークダウンのためにテーブルタグを実装するなら最初からマークダウンの処理を書いてしまえば良い、ということで作り始めたというのがあらましになります。

そして七難八苦があり、描画後の大きさを効率よく知ることが出来るルーチンが書けたように思います。ただ、まだ動かしていないのでわかりません。私がやったのは、動かす前に速く走るコードを書こうとする「事前最適化」と呼ばれるもので、プログラミングの世界では最も愚かな人間がやることとされています。「このコードは速く走るのか」ということを考えながら書くと普通に書くのの何倍も時間がかかりますし、普通に書いて実際にコードが遅くなるのか、その遅くなる原因はなにか、というところまで突き止めてからでないと、ほとんどの最適化の努力は空回りに終わります。現代のハードウェアでは、プログラマが思ったとおりにコードが実行されることは稀で、速く走るコードを書いたつもりで普通に書くより遅くなっているというのは非常によくあることです。

ただこの処理がボトルネックになるだろうというのは私なりの確信があります。「オバマ大統領だけどなにか質問ある?」といったサブミの2万ぐらいのコメントをストレスなく表示するためには、描画後の大きさをものすごい速さで計算することが必須になるでしょう。

そしてこれを「部分描画ルーチン」に組み込まなければなりません。部分描画ルーチンもマークダウンの実装を始めるより前の大昔に軽いテストしかしておらず、正しく動くかは分かりません。実際かなりややこしい処理になります。これがうまく動けば、とりあえずのブログ限定公開にこぎつけることが出来ると思います。

2015年4月15日水曜日

進捗

 HTMLの禁則処理が難しくかなり苦戦しています。が多分出来たんじゃないかと思います。

 マークダウンが出来上がるまでまだ少しかかりそうです。

2015年4月13日月曜日

マークダウン

 Redditのマークダウンはタグの直接入力が出来ませんし、綺麗なXHTMLデータがもらえるので解析に苦労することはありません。

 マークダウン自体に幾つか温情があり「Tableは入れ子にならない」「Tableの中にリストも引用も作れない」「リストの中にTableも引用も作れない」といった形になっています。入れ子になるのは引用とリストだけですがリストの入れ子はほとんど何も出来ません。問題は引用の入れ子で、引用の中にはTableも入れることが出来ます。といっても引用は入れ子になってもインデントが深くなるぐらいの効果しかないので別に複雑になりません。Tableが入れ子にできたら終わりでしたがギリギリ致命傷は免れたと思います。

 これはマークダウンを解析して専ブラをつくろうという人に対しては有用な情報かもしれません。といっても仕様を見ればわかるので無用かもわかりません。いちおう備忘録として残しておきます。

2015年4月9日木曜日

進捗

前回マークダウン対応とブラッシュアップを一週間でやるといっていました。そして一週間が過ぎ、現在マークダウン対応の半分ぐらいしか進んでいないという状況です。

おそらく1日16時間ぐらいやれば目標通りのスケジュールで出来たと思うのですが、そこまでは出来ないにしても1日8時間ぐらいやっていけばマークダウンぐらいは終わるだろうと思っていたのですが、思っていたよりかなり難しく、全然終わりませんでした。申し訳ないです。

気合も足りていません。しかし難易度が高いと気合ではカバーしきれない部分もあります。マークダウンといっても簡易HTMLブラウザの表示部分をちょこっと作るだけだと思ったのですが、禁則処理などよく理解できない部分が多く、まだマークダウンの底が見えたのかも自信がありません。

とりあえずあと4日ぐらいでマークダウンを完成させて、もういろいろ考えるのが面倒なのでその後公開しようと思います。

2015年4月2日木曜日

今後の予定

 自分の中で公開へのハードルが上がっていき、「マークダウンもツリー表示もできていない現状では公開は不可能」という確信が芽生えてきました。不具合を直してブラッシュアップして公開してしまう、という予定は自分の中では無理な感じになりました。

 「不具合を直すついでにマークダウンへの対応もしてしまいたい」という、関連する作業をまとめてやってしまいたい願望があり、またデバッグやブラッシュアップをそろそろやってしまわないと、自分で動かしていても快適に便利に動いているかどうかはブラッシュアップしてみるまでわからず、またデバッグは放っておくほどに入り組みながら記憶が薄れていき直すのが大変になっていくというのもあるので、不具合を直してブラッシュアップするのは公開と関係なくしなければならないように思います。

 不具合を直してブラッシュアップしてるのに公開しないというのはやるせないものがあります。近い時期に目標を立てていかないとやる気を継続するのが難しい部分もあるので、不具合を直し、ブラッシュアップして、マークダウンへの対応も行い、その上であまりおおごとにならないようにひっそりと公開しようと思います。これの目標を一週間後とします。

 そこからさらに一週間かけて、ツリー表示と、それに付随するいろいろなアイデアの実装を行って、正式なベータ版として公開したいと思います。結局最近考えていたいろいろな機能が、ツリー表示と連動させないとイマイチ意味不明の謎機能にしかならないので、私の考えているレディット専ブラを世に問えるのはツリー表示導入以降ということになりそうです。

 まとめると、1週間後に2ch専ブラ風のレディットブラウザを作り、2週間後にレディット専ブラの最初のまともなベータを作る、そういう予定で進もうと思います。

2015年4月1日水曜日

体調不良

体調不良のため2日間休んでしまいました。休むと取り戻すのに時間がかかります。

非常に悪い流れです。なんとかしないといけません。どうすればいいのかはよく分かりませんがとにかく頑張ります。

2015年3月29日日曜日

公開について

今日は疲れきっていて少ししか進みませんでした。

公開について書いてみたいと思います。私の公開に対する考え方はここ最近の間にずいぶん変わり、専ブラ公開へのハードルがどんどん高くなっています。

専ブラを公開した時に、最高の結果は「この専ブラはいいな。ブラウザで見るのをやめて専ブラで見よう」であったり、「この専ブラはいい。2chはやめてRedditに移動してこれを使おう」といった感じだと思います。

悪い結果の方はといえば「何だこの専ブラは。二度と使うか死ね!」となってしまうことです。そして今の段階ではどちらかというと悪い結果の方に近いことを招くんじゃないかと考えています。

私の専ブラはまだ絶対に必要な機能がいくつか足りていません。この段階で公開して不満や要望を求めた場合、当然「必要な機能をはよ実装せえ」というところに集中することになります。それならばまだ良いのですが、今は専ブラが求められているので、おそらくは気を使って、誰もがこの「当然の機能をよこせ」といいたくなるところをグッとこらえて、当り障りのない応援メッセージをいただいたりすることになります。

新機能実装に心を注いでいる結果、不具合の方は見て見ぬふりも多く、不具合報告を頂いても後回しにしてしまったりしてきました。これもまた心苦しいことですし、アプリに対する印象を一番大きく損なうのもその不具合という部分になると思います。

専ブラ開発を応援して頂いていて、自ら不具合のあるアプリを実行してくださる方がいる一方で、そうでない、普通に専ブラを求めている方もいらっしゃいます。そういった方は不具合だらけで機能が足りない物を見せられたら、当然不満に思い、完成後にもう一度実行してもらうチャンスもなくなってしまうかもしれません。

ちょっと調べれば分かる不具合はそんなに時間をかけずに直せることが多いですし、アプリの使い勝手の大半は細かい部分で決まることが多く、そこは細かい作業を積み重ねればかなり改善できます。機能が足りないというのは一朝一夕ではなかなかうまくいかないのですが、そういったブラッシュアップは少しの時間で出来ます。最低限それは公開の前に行う必要があると思っています。

そして最低限「まだ実用にはならないけれど、この専ブラは面白いな。機能が揃ってきたらもう一度試してみよう」と思ってもらわなければいけません。ここまで辿り着けなければ、公開はマイナスの結果になると思います。そのために、そんなに時間はかからず実装できて面白い機能をチョコチョコ入れることにしました。

ただそれでもその最低ラインに到達できる自信は今のところあまりありません。出来ればもっと機能が揃うまで公開を避けたいくらいですが、わざわざこんな僻地にまでブログをチェックしにきてくださる方もいらっしゃいます。そういった方には進んでますよというところをお見せしたいと思っています。

しかしそのために、ブログ限定でも公開してしまえば、Redditの方でブログソースで記事にしたりも自由にできますし、それをやめてくださいといえるような立場では私はありません。アプリ作者としてアプリの事を紹介してもらうのはそれ自体は大変ありがたいことです。ただそれによって、多くの人が専ブラを試し、結果として私の専ブラに対する失望が生まれてしまうのは避けたいところです。

なのでブログ限定でも公開する場合はある程度ブラッシュアップした状態で出したいと思っています。今取り組んでいる不具合の根がかなり深く、解消までかなりの作業が必要になるので今日明日というわけにはいかないかもしれませんが、少しお待ちいただければと思っております。

2015年3月28日土曜日

進捗

大きいサブミになってくると不具合が噴出してきてなかなかヤバいです。今朝方気づきましたが、大きいサブミでは評価の低いコメントが省略されますが、これはAPIからも取れないようです。一つ一つ「省略されたコメを読む」みたいなのを探索していく処理をAPIを使って書けば取れますが、「並列で複数箇所から取らないように」とAPIドキュメントで注意されてるのでゆっくりバックグラウンドで一つ一つ取っていくぐらいしか実質取る方法はなさそうです。

大変そうなので今のところは省略されたコメには手を付けられそうにありません。

2015年3月27日金曜日

進捗

既読管理はうまく動いてるような気がしますが既読情報の保存がまだ出来ません。それと、わざわざRedditで専ブラを使う大きな理由の一つになればいいなと思っている機能が入れられそうです。デバッグがすんなりいけば明日公開できます。

2015年3月26日木曜日

進捗

既読関係の実装は出来たのですがバグだらけでまともに動いていません。

おそらくもうちょっと頑張れば終わらせられるのですが、身の丈を超えた頑張りがよい結果に結びつかないのはもう十分身にしみました。肛門をいたわりながらやっていく必要があるように思います。

痔の方は痛みも腫れもなく、ただ出っ張っているだけなのでもうほとんど治ったんじゃないかと思います。ご心配をお掛けして申し訳ないです。ジットリとした疲労はありますが、よく食べよく寝てプログラミングに集中できているので体調は良いと言っていいんじゃないかと思います。

2015年3月25日水曜日

ダメでした

絶対に今日中と言っていましたが、ドツボにハマってしまい確実に終わらない情勢です。コメが消されたり復活したりするRedditの未読という概念は2chよりだいぶ難しいようです。全く読み違えていました。

3/25 今日の目標

「絶対に」今日中に公開する

昨日のうちに未完成、バグありのまま放置する部分と作る部分を峻別しておいたので、妥協の上での公開を目指そうかと思います。

2015年3月23日月曜日

出来たところまで β5.1

https://drive.google.com/file/d/0BzP_9LiaNnm1U241Y01tMGNHYmc/view?usp=sharing

ようやく配置変更と記憶が出来るようになった、ように思います。

あとずっと言われていた「板ソート時にスクロールしていると結果がズレる」というバグを更新時のことだと勘違いして放置してしまっていたのですが、今回直せたんじゃないかと思います。話をきちんと聞いておらず非常に申し訳なく思っております。

とりあえずソースウインドウに戻る進むぐらいはつけないといけませんし、タブは右クリックから閉じられた方がいいと思いますし、いろいろやることはあるのですがあと少しで公開出来るはずです。

2015年3月22日日曜日

今日の進捗

分割切り替えできてそうなところまでは出来ました。しかし板一覧画面の格納がまだ出来てません。

もうここができたら贅沢言わずにとりあえずサブレ作って公開したいです。

http://i.imgur.com/62ZqH2I.png

今日の目標

痔も痛くなくなったのでガンガンやっていこうと思います。

今日は
板一覧の格納
設定画面追加
配置変更
配置を覚える(配置設定、スライダーの具合、ソースウインドウの位置)
新着コメ数、未読コメ数の表示
ageのシミュレーション
マウスのショートカット

ここまでやってredditchanサブレを立てて公開が目標です


あとやはり書き込み画面の分離もやりたいです

2015年3月21日土曜日

出来たところまで β0.5

https://drive.google.com/file/d/0BzP_9LiaNnm1YWp6YjNmSDhzTVU/view?usp=sharing

とりあえずタブが閉じられるようになり、ソースの位置を変えられるようになりました。

あと細かい修正点:

ポップアップに枠を付けた
ソース表示中にポップアップしてソースを消さないようにした
Youtube等がソースを消しても止まらない不具合を修正?

既知の不具合:

ソースとしてasahi.comを開くと軽くフリーズする


雑記:
なかなか進みません。

今日の目標

痔も小ぶりになってきたと思うのでそろそろエンジンをかけていきたいです。

今日中に
ageシミュレーション
タブをちゃんと閉じられるように、順番入れ替えられるように
ソースブラウザの位置を変えられるように、その位置を覚えられるように
板一覧の格納、画面配置を変更できるように、覚えられるように
マウスを使った便利なショートカットを入れる

ここまでやって公開と同時にredditchanサブレも立てたいと思っています。

痔がかなり酷いです。体力が落ちると吹き出物が出来たりイボ痔が出来る体質なのですが、このところの無理がたたって盛大に膨れ上がってしまいました。

今回はボラギノールも効かず、治りそうもなかったので肛門科への通院も考えたのですが、イボ痔を肛門で挟み込んで括約筋で締め付けたところ潰れたようでそれからは小康状態です。おそらくニキビとかと一緒で潰せば治るのではないかと思います。やったことがないので分かりませんが。

この治療法が成功すればアプリの開発ペースが上がると思います。

出来たところまで β0.4

https://drive.google.com/file/d/0BzP_9LiaNnm1dzFud0NiVU1jUDQ/view?usp=sharing

2chの調子が悪いということでこれは更新のチャンスだと思いましたが、うまく進みませんでした。
スレ立ても面倒なのでブログでひっそりアップしてみます。

そもそもredditchanサブレを立ててそこにスレを立てるという予定だったのですが、せっかくサブレを立てるならもうちょっとまともなアップデートで立てたいところです。

やったことはこのあたりです。

タブブラウザ化 ソースとスレの同時読み込み&表示

ポップアップの修正(バグなくなった?)
サブレディット内のサブミ一覧表示でスクロール中に更新すると位置がずれるバグの修正。
サムネポップアップを修正


ただ致命的な欠陥があってまだタブを閉じられません。
板一覧の格納ボタンも付いているのですが動きません。

2015年3月18日水曜日

マークダウンについて

今日はずっとマークダウンについて考えているのですが、もう忘れて実装に移らないといけないので一旦書き出します。

最近はかなりReddit慣れしてる方が増えてきて、マークダウン記法もよく出てくるような気がします。私のアプリは全くマークダウン記法に対応できていません。

専ブラは、HTMLを出来合いのブラウザで表示しながらその上に機能を拡張するタイプか、自分で描画するタイプかに分かれます。私はブラウザで描画せず自前で描画したいと考えています。自前描画のほうが自由に出来る部分が大きくなります。

ただ自前描画でマークダウンに正しく対応するのはなかなか面倒です。β1の後に少し立ち止まってデバッグを行い正式版に移行しようと思うので、その時のついでにでも地道にやろうかと思っています。

追記:やっぱり正式版の前にはマルチレディット対応が必要になると思い直しました。

もう一度バグ修正(3b0)

報告を頂いた再認証がまだ出来てないということと、スレッドの最初が途切れる問題、それに勢いの数値を直したバージョンになります。
 https://drive.google.com/file/d/0BzP_9LiaNnm1NE05RmNhUHFDNzg/view?usp=sharing

2015年3月17日火曜日

バグ修正

バグ報告を頂いた、再認証時のメッセージボックス出現バグと日付がおかしいというバグを直したバージョンを作りました。

https://drive.google.com/file/d/0BzP_9LiaNnm1UDVYNWZJWURHYlk/view?usp=sharing

β1の予定

ようやく体調が戻りました。

作る内容と予定を宣言しないと動けない体になってしまったのでとりあえず宣言したいと思います。

急遽作ったバージョンはβ0ということにして、次がβ1ということになります。

β1では、 タブブラウザ化 ソースとスレの同時読み込み&表示 板一覧画面を格納可能に 画像サムネ 画像のアプリ内表示
ageのシミュレーション 未読レス数の表示 終了時の画面の状態を覚える

といったあたりを作っていこうと思います。普通に作ると4日かかるところですが、3日で終わらせようと思います。

RedditのOAuthは一時間ごとの認証が必須ではなかった

必須ではなかったということです。教えて頂いた方ありがとうございます。

インストールするアプリはウェブアプリとは違ってパスワードみたいなものをアプリに埋め込むと漏れてしまうので、そういうものは与えない、ということが書いてあってそれはそうだと思ったのですが、その意味するところは「パスワードが空白でも認証が通る」という意味だったようです。確かにそういったことは書いてあったのですが、英語なので「まさかそんなことはあるまい、何かの誤読だろう」と思ったのですが、本当に空白でも通るという話を聞き、ものすごく驚いています。改めて自分は何も分かっていないと思い知りました。

雑記

昨日はニュー速Rがreddit運営に選ばれて?トップページにリンクが載ったとかで外人さんがたくさん来て、私も浮かれて外人さん用にちょっとredditchanを英語にしたバージョンを作ってアピールしてみたりしました。

しかし、奇妙な英語を話す怪しい奴が薦めてくる変なブラウザを起動する人は稀のようで、かなりいい評価も一部ではいただけましたので良かったのですが、浮かれて作った自分の期待値はさすがに上回りませんでした。

外人さんが押し寄せてくるのを見て急遽頑張って(朝の四時までかけて)作ったのですが、その頃には外人さんもあまりいなくなってました。急遽作ったという割に、OAuth対応というセキュリティ上ものすごく重要なアップデートも行っていて、それがredditchanの新バージョンであることも言わずに変な英語で外人さんだけに向けてアピールされていて、、なんだかちぐはぐな感じがしたので日本語でも投稿しなおしてみましたが、あまり反応もなく、何事も浮かれてやってはうまくいかぬものだと認識しなおしました。

昨日頑張りすぎたためか今日は指一本動かせないぐらいぐったりと疲れてしまっていたのですが、少し回復してきました。1日に頑張って12時間やって次の1日ぐったりしながらやってることがブログ更新だけだというなら、1日に8時間ずつやっていったほうが良いということなのだと思います。

2015/03/16の投稿2(外国の方に向けてRedditchanのβを公開しました)

newsokurに外国の方が大勢来るということで、予定にはなかったのですが公開してみました。インターフェースが一部英語になっていますが、一時的なことになるのではないかと思います。日本の方に向けても公開しておくべきかと思い、こちらにも書かせて頂きます。 http://www.reddit.com/r/newsokur/comments/2z5h2i/hi_guys_this_is_a_reddit_browser_i_created_its_a/ http://i.imgur.com/PpwyyJ9.png  
a1からの変更点
OAuth認証に対応、接続が高速化し安全になりました。(前バージョンのフォルダにログイン情報(system1.dat)のファイルが残っている場合は削除をお勧めします)
サムネ画像が見つからない場合に前の画像が残っていた問題を修正
画像のメモリが解放されていなかった問題を修正
マウスホイールが正しく動くように修正
削除されたレスをアンカとして数えないように修正
更新ボタンを追加、読み込み中に進行状況を表示するように変更
ポップアップが正しく動くように修正(まだ不具合あり)
ソースボタンを追加
高評価順にレスを表示する機能を追加
マークダウン記法を追加
レスのUV,DVの実装
https://drive.google.com/file/d/0BzP_9LiaNnm1UVpwWHlNNFdrMm8/view?usp=sharing

2015/03/16の投稿(Hi guys! This is a Reddit browser I created. It's a Japanese style. Try it!)

http://i.imgur.com/PpwyyJ9.png
https://drive.google.com/file/d/0BzP_9LiaNnm1UVpwWHlNNFdrMm8/view?usp=sharing
Vista or later.
This is beta version. Run RedditCh.exe please.
日本人の方へ a1からの変更点
OAuth認証に対応、接続が高速化し安全になりました。(前バージョンのフォルダにログイン情報(system1.dat)のファイルが残っている場合は削除をお勧めします)
サムネ画像が見つからない場合に前の画像が残っていた問題を修正
画像のメモリが解放されていなかった問題を修正
マウスホイールが正しく動くように修正
削除されたレスをアンカとして数えないように修正
更新ボタンを追加、読み込み中に進行状況を表示するように変更
ポップアップが正しく動くように修正(まだ不具合あり)
ソースボタンを追加
高評価順にレスを表示する機能を追加
マークダウン記法を追加
レスのUV,DVの実装

2015年3月15日日曜日

スケジュールを大幅に変更し、次のバージョンでOAuth2に対応します

連日Reddit用専ブラが現れるというすごい(私からすると複雑な)状況になってきました。そしてOAuth2認証に対応する方もいて、使ってみるとものすごくアクセスが早いです。これは対応する他ないと考えを改めました。

自分のアプリにブラウザを埋め込んでOAuth2認証をするアプローチだと、普段使っているウェブブラウザに処理を投げる場合と違って、入力されたパスワードをアプリ側が見ることが出来ないという特徴はなくなってしまうと思うのですが、普段使っているウェブブラウザとアプリを連動させるためにはレジストリの書き換えが必要となることもあり、どちらを選ぶかという問題になります。

OAuth2の仕様によれば埋込み型ブラウザを使うべきではないというのはSHOULDとなっておりMUSTにはなっていないですし、ユーザーIDとパスワードを打ち込ませる今のスタイルはセキュリティ上最悪で、Redditからも8月からは禁止と通達されている方法なので、今よりはベターになります(一時間おきの再認証のためのボタンクリックを除けば、ですが)。一時間おきのクリックで今のアクセスの遅さから解放されるのであれば充分なトレードオフになりうるのではないかと考えています。

 一時間おきに認証用ページに飛ばされてクリックをお願いされるのは、もちろん不満に思われる方も大勢いらっしゃると思いますが、今の仕様だとご容赦をお願いする以外にできることはないと思われます。どうかよろしくお願いいたします。

コメント返し

Q.パスワードが平文のまま保存されている

A.暗号化します。

ただ、私が書いているC#ではソースが公開されているようなものなので、暗号化されたデータを復号する方法も丸見えになっています。悪意のあるプログラムが実行されて、もし私のプログラムが狙い撃ちされたら、ファイルを複合してパスワードを取得し、自分のサーバーまで送るのは簡単です。

Q.名前にRedditを使ってはいけないのではないか
http://www.reddit.com/r/redditdev/comments/2ujhkr/important_api_licensing_terms_clarified/

この辺に詳しく書いてあるのですが、

we're asking API clients to not use the word "reddit" in their name except in the phrase "for reddit", e.g., "My cool app for reddit"

となっています。コメントでは Reddit News や Reddit 2 Go は変更の必要があると言われていますが、"redditor"のようなredditが名前に含まれるものに対しては運営側の方は良いとも悪いとも返答していないようです。

自分勝手な考えではありますが、redditというワードを使わなければ基本的にはOKなのではないかという気がしています。RedditChanならば公式アプリと見間違われることもないでしょう。何か言われたら即座に変更します。

Q.ログインにパスワードではなくOAuthを使うべきではないか

上記のスレッドにこれも書いてあるのですが、現在のユーザー名とパスワードを用いたログインは8月以降使えなくなります。しかしRedditで使われているOAuth2を動かすためには「レジストリを書き換えるしっかりとしたインストーラ」や「一時間おきにブラウザを表示して認証ボタンを押してもらう」などパスワード入力よりも受け入れられなさそうなハードルがあり、また難易度も高くとても一週間では間に合わなくなってしまうため最初のバージョンでは諦めました(ちなみにこれを確認するために丸2日かかったので作業時間が実質5日間になりました)。正式版までには対応します。

Q.Windows XP、Mac、Linuxへの対応は?

おそらくないと思われます。大変申し訳ございません。

Q.実行しようとするとノートン先生が怒るので実行できない

誰が作ったのかもわからない、掲示板から拾ってきたソフトで、通信までしていますから、怒るのもしかたないのではないかと思います。地道に作業を続けていけば、シマンテック社も「安全確認」を出してくれて、問題なく実行できるようになるかもしれません。

Q.書き込み後にテキストがテキストボックスから消えない

ClearText, ResetText, Text = ""などいろいろやってみたのですが、なぜか消えなかったため放置してしまいました。申し訳ありません。いまだに原因はわかっていませんがなんとかしたいと思います。

Q.板一覧とは何か

最初に板一覧用のマルチレディットを、newsokurの説明書きにあるものをコピーして作りました。
http://www.reddit.com/user/RedditChanSakusha/m/japanese_subreddits

私のアプリではこれを読み込んで板一覧にしようと思っていたのですが、使っているミドルウェアになぜかマルチレディットの取得方法がなく、また時間もないので直接コピペしたファイルを読み込むようになっています(itainfo.txt)

このテキストファイルを編集すれば板一覧も変えることが出来ますが、編集に失敗すると起動しなくなると思うので注意してください。

これに乗っていない板がある場合は、newsokurの説明書きに乗っていなかったか、単純に見落としたかということです。板一覧に乗せたいという板がある場合はコメントを下さい。

2015年3月14日土曜日

Redditと2ch型掲示板の比較

私自身まだ完全にRedditのことを理解出来ていないので、比較するには適切ではないのですが、わからないなりにもどう進むべきか考えなければなりません。

まずは単純に大雑把に考えてみます。

Redditの長所はなんといっても良コメが上にくるシステムにあるように思います。短所はといえば、良コメが上に来るデフォルトの「ベスト」で見ていると、新着コメが最下層に沈んでしまうということです。

新着コメを見てもらえないということは、評価してもらえないということであり、評価してもらえないということは見てもらえないということ、というこのネガティブフィードバックは書き込む人の意欲を削いでしまうように感じます。

2ch型の場合は新着レスを誰もが読みます。これは書き込む人に非常にフレンドリーなシステムですが、その結果として荒らしだらけで居心地の悪い場所になってしまっている場合が多いように感じます。荒らしレスを排除し良レスだけを読みたいという希望に答えた結果、2chを転載するだけのブログが広告で大金が手に入る一大産業のようになっているのも現実としてあります。

(余談ですが、2chの場合は被アンカ数で良レス度合いがある程度判断できるように思うので、公式でアンカ数フィルタを導入したらどうかと某外国人に提案したことがあります。過去ログもただ置いておくのではなく、勢い等から人気スレのランキングを生成して紹介するなどし、良レスを抽出してアンカツリーを読みやすく加工して表示できれば転載ブログのユーザーを獲得でき、広告料を得られたはずです。過去ログでない通常の公式Web表示でも、良レス抽出やアンカポップアップなどを導入すれば、専ブラを使わない普通のユーザーでも読みやすいサイトになり、Web表示から広告料を得られたはずです。アクセスの大多数はROMであり、ROMの大半は専ブラを使っていないので、専ブラに広告表示を強制したところで誰も得しないのではないかと思います。2chのシステムにはそれ以前にやるべきことがいくらでもあったように感じています)

ツリー型とフラット型の比較をしてみます。

外人さんの話を聞いてみるとフラット型掲示板は時代遅れで、何のメリットもないものという評価を目にします。海外のフラット型と比べればツリーのほうが良いでしょうけれど、専ブラによって拡張された2ch型掲示板はアンカポップアップによってレスの構造が読み取りやすくなっています。

ツリー型の場合は一つの返信から長大なやりとりが始まる場合があり、その下にあるもう一つの返信を見る頃には何の話だったかわからなくなっていることがよくあります。子コメントの中から良コメを見繕って見ていこうと思っても、間に膨大な関係ないコメが挟まって親子関係がどうなっているのかわからなくなってしまいがちです。

親コメント、子コメントを即座にポップアップできる2ch型専ブラのシステムが読みやすさの点で劣っているようには思わず、むしろ優れているのではないかと感じています。しかし、ただフラットに時系列でレスを置いておき、話を追うためにはポップアップが必要という形では、良レスを探すために膨大な時間がかかるため、読む人にとっては辛いものがあります。

専ブラ形式のポップアップはフラット型掲示板でないと使えないわけではないので、ツリー表示でも孫コメを含まず子コメだけをポップアップしたり、膨大な兄コメの後の弟コメでは親コメをパパッとポップアップして見返したり出来れば、ツリー表示の弱点はなくなるように思います。Reddit式ツリー+専ブラ式ポップアップ の表示モードはぜひ作りたいです。

それに対して2ch型専ブラ表示はRedditの新着順表示の上位互換になれるのではないかと思います。特にRedditの新着では、別のコメに対する返信だとコメントしても新着のトップに来ないこともあり、新着で見ている人にすら読まれないコメというのも生まれてきてしまいます。返信を表示するためにツリーを出せば表示が圧迫され他の新着が見られなくなることに対する配慮ではないかと思いますが、ポップアップ式にすれば場所を取らないため問題なくすべての新着が取れます。

Redditは良コメを志向し、良コメが上に来る分、新着コメは見難くなります。多くの人が上にある好評価コメを読んでUVや返信して満足し、下のコメは読まれません。高評価が高評価を生む構造ですが、新しく書き込む人には厳しいものがあります。おそらく書き込む人にとってのスレッドの寿命は3時間ぐらいではないかと思います。それに応えるかのように、出来てから3時間以内のスレッドにコメントすればカルマがもらえるという特典もあるそうです。

いち早く新スレを見つけ、高評価されるコメを書く。上が高評価コメで固まる前にそれを行わなければ見てもらえません。それが新スレに対する貪欲さ、また良いコメを書こうというモチベーションになり、コメやスレの高い質に繋がってきます。またスレッドの陳腐化の早さは、Redditの重要な格言「総合スレじゃなくサブレディットを立てろ、レスする感覚でスレを立てろ」にも繋がってきます。

それとは別に、掲示板のユーザーには、高い質のコメをしようという気はあまりなく、そこにコミュニケーションしに来ているという人たちもいます。DISQUSというツリー掲示板はそこに特化していて、2chのように新着をメインに取得していきますが、リアルタイム性が高く「誰かがタイピング中」というところまで表示され、返信を取得するとリアルタイムでツリーがどんどん伸びていきます。新ツリーも新着順にどんどん立てられていき、現在あるツリーは下の方にどんどん流れます。現在上のほうにあるツリーに書き込まないと誰にも見られないコメントになってしまいます。後から読みに来る人のことはほとんど考慮されていないようですが、この掲示板も高い人気があります。

コメの質なのか、コミュニケーションなのかという問題は、おそらく二項の対立関係だと思います。見る人のことを考えるか、書く人のことを考えるかという違いでしょうか。2chの場合はどうだったかといえば、正気を失う前の元管理人はこんなことを言っていました。

「最初に「2ちゃんねる」が流行った頃は「ロビー」って掲示板が流行ってて,そこはいろんな情報をみんなが持ち寄って流行らせていたわけです。
 ところがそのうち,属人的な,要はハンドルを持っている人が会話をし始めて雑談が増え,そこにいたい人はそのままいた。でも,その場にいたい人の話って,面白くないんですよ。今日何食ったとかそんな話だから。そうすると他人から見て面白くない情報が多いので,新しい人が入ってこなくなって,新しい情報が少なくなって,廃れていくんですよ。」
http://www.4gamer.net/games/015/G001538/20080301003/

この経験則は古い時代には真実だったのかもしれませんが、雑談ばかりのVIP板が長年書き込み数トップだったりなど今となっては通用しないもののように思います。管理人本人としては質を重視してそこにいたい人は排除したかったようです。ただレスを評価するシステム等がなく、専ブラがないとまともに読むことすら出来なかったため、見る人は転載ブログへと流れていき、書く人は転載されるようなレスを書くために踊る鵜飼いの鵜のようになってしまいました。それが居心地が良いという人もいるのかもわかりませんが、見る人のための場所でも、書き込む人のための場所でもなく、情報の質も低くコミュニケーションもないよくわからない場所へと変わってしまったように思います。

とりとめのない話になってしまいました。結論を出せるようなしっかりとした考えはまだありません。今後も考え続けていきたいと思います。

とりあえず評価の高いコメを上から順に表示していき、ポップアップで話の流れをつかむようにすれば、無駄に膨大なツリーを見る機会を減らしながらも、自分のみたいコメの流れだけを追っていくことで便利にでき、またツリー表示モードを作らなくても出来るので手間もかかりません。そのモードはβ1で実装したいと思います。

α1と今後

昨日は最初のバージョン、RedditChanバージョンα1を公開することが出来ました。αは未完成の意です。

βは機能が揃ってデバッグを残すのみという意味だったと思いますが、最近はずっとベータ版のまま開発していくスタイルも一般的です。私もしばらくはβのまま機能を増やしていこうかと思っています。

次のバージョン、β1についての予定は先ほどの投稿の中に乗せました。今後やっていきたいこと、山ほどあってどこから手を付ければいいのかわからないほどですが、大体のイメージを書いてみようと思います。

β2では、とりあえずタブブラウザにする予定です。タブブラウザ化とともにやりたいのが、タブの自動更新です。1分か、5分か、どのくらいにするかまだ決めていませんが、サブレの状態を定期的に取得することで、レス数の推移を保存していき、直近のレス数に基いた勢いを算出したいと思っています。勢いの総数自体は2chと同じぐらいになるようにしながらも、直近1時間についたレスの重みとそれ意外の重みを5:1ぐらいにして、直近1時間のレス数に5倍の重みをかけた数値にしたいと思っています。

さっきまでは盛り上がっていたけれど話が終わって今はレスがついていない、というような状態のスレがずっと勢い上位にいたり、スレが立ってある程度時間が立ってから急に会話が盛り上がりだしたりといった状況が捉えきれないという不満があり、この新しい勢いはそれを解決できるんじゃないかと思っています。

α1は勢いの数字がメチャクチャになってしまっています。勢いの定義を変えたいと思いながら勢いの数値のバグを直さずに放置していたところ忘れてそのまま公開してしまいました。

また、自動更新にすることで時間の掛かり過ぎるサブレの読み込み時間を緩和できるのではないかと考えました。

α1で一番問題だと思っているのは、サブレの読み込みにものすごく時間がかかることです。Hot順200スレを一度に読み込んでいるのですが、読むだけで3.5秒ほどかかっています。

この200という数字はいわゆる腰だめで決めた数字で、200あれば2ch的に使うには十分なのではないかと思ったのですが、ニュー速Rでは最大で23時間前に立ったスレしか補足出来ませんでした。Redditは基本的に、最近立ったスレ以外は一覧に表示しないスタイルなのだと思います。

3.5秒は長すぎるので、100スレにしてみたのですが、それでも2.8秒ぐらいかかりました。「たいして変わらないようだから200の方がいいかな」という安直な考えで200スレの読み込みにしましたが、次のバージョンでは読み込み数を選択できるようにします。

推移の記録ということでいえば、他にもカルマ数の推移をプロットしてグラフにしたり、自分の書いたレスの評価を時系列でプロットしたり、立てたスレについたコメント数もプロットしてみたいです。そのためにも基盤になるのは自動更新システムです。

また、起動時に購読している板を取得しているのですが、これにも2秒ほどかかります。購読板をローカル保存して、自動更新の巡回中に隙間を見て更新するような形にすることで起動時間を短縮できます。

それとβ2でやりたいことは、ソースのアプリ内表示、画像サムネイル、画像のアプリ内表示です。画像サムネが表示できればようやく専ブラらしくなってきます。いちいちソースを見に行くのが面倒なので、URL部分のクリック時にスレと同時にソースを開いて、左側はソース、右はスレといった感じで出したいと思っています。今のバージョンでもそれに近い感じにしようと思ったのですが、左側にブラウザを設定しておいてやればうまくいくかなと思ったのですがそうもいきませんでした。

β2ではなんとか最低限専ブラらしく出来ればと思っています。目標はこれも1週間後としておきます。

そしてその先のために考えておかなければならないのは、Reddit的なるものをどう取り込むかです。これは別のエントリーにします。

2015/03/14の投稿

RedditChanSakusha    投稿
dat廃止に無理に合わせてみました。いろいろ至らない点が多く、バグも多いと思いますが、アンカポップアップやみたままの書き込みも実装できたのでギリギリ実用になるかもしれません。
人柱になりたい方、よろしくお願い致します。
tps://drive.google.com/open?id=0BzP_9LiaNnm1RWl0UUdEOUpLdDA&authuser=0
公開時にミスをしていたので新バージョン(release2a1)に変えました (旧バージョンはポップアップ時に変な影が出ます https://drive.google.com/open?id=0BzP_9LiaNnm1ei1fSjh0ZFJBMUk&authuser=0
使用感や方向性に対する意見、不具合報告や要望などいただければと思っております。
追記:
次のバージョンはβ1になる予定です。アプリとしての最低限の体裁を整えるため、
板の読み込みスレッド数を設定可能に(少なくすることで高速化可能に)
2chのageのシミュレーション(勢いのあるスレに重みをつけてランダムに上に)
ウインドウを閉じた時の大きさや位置、スライダーの位置などを覚えておく
コメに対するUV,DVの実装、勢いの数値を直す、書き込み成功時にテキストボックスを空白に
読み込み中のプログレスバーを表示
既読コメ数を記録し新着レス数を赤く表示できるように  書き込み時やスレを開き直した時のスクロール位置を正しく
スクロールをスムーズに、ホイールがクリックしなくても効くように
といったことを3日後をメドにやりたいと思っています 忘れていること、ご意見等ありましたらよろしくお願いします
なお次のバージョンからはRedditChanのサブレを立ててそこにスレを作るつもりです。
よろしくお願い致します。

2015年3月12日木曜日

進捗状況

一週間で作ると宣言してからそろそろ一週間になるので進捗状況を書いてみようかと思ったのですが、今確認したところ1時間後に2chのdatが廃止されるということで、衝撃を受けています。今月中と聞いていたのですが、思ったよりものすごく早かったです。

結局間にあいませんでした。明日の終わりまでならなんとか公開できるかもしれないという希望が見えてきたところだったのですが、かなりガックリ来ています。

とにかく可及的速やかに2ch風に使える専用ブラウザとしての最低限を実装して公開したいと思います。

2015年3月8日日曜日

コメント返し

最低限の説明責任は果たすべきだと思うのですが、どういう形でやっていくのが良いかわかっていません。

スレッドでコメント返しをする、というのは難しいように思います。私はコミュニケーションに問題があり、書き込みを考えるのに時間がかかるので、会話が続いてしまったりすると、それに時間が取られて開発が進まなくなってしまいかねません。

実験的に、こちらでひっそりとコメント返しをしてみたいと思います。

Q.一週間で動くものを作って公開するというのは気負いすぎではないか

これにはいくつか理由があります。

・3月中とされている2chのdat廃止に間に合わせたい
・動くものを作って見せる以外に、これが冗談や妄想でないことを証明する手段がない
・自分にハッパをかけたい

Q.寄付は受け付けるのか、ソースは公開するのか

寄付は受け付けたいと思っています。とりあえず動くものを作って、使ってもらい、これになら寄付をしても良いという方がいたら寄付してもらおうと思っています。受付先はビットコインを予定しています。

ソースを公開する予定は今のところありません。ただC#で書くので逆アセンブルでソースは復元できます。私が行方不明になって開発が継続不能になったりなどした場合は、復元したソースを利用して改造版を作って頂いて構いません。また、復元されたソースを見てバグやセキュリティ面の問題を指摘して頂いても結構です。

願望を口にさせてもらえば、出来ればこのソフトで食べていけたらと思っています(無理だとは思いますが)。なのでソースを公開した場合、「誰かの無償の仕事を使って私がお金儲けする」という状態に陥ってしまいます。それを積極的に勧めることになるため、ソースの公開は出来ません。

どういった形でお金を稼ぐかということについて考えていることがいくつかあります。

今の段階でお金の話をするのが適切なのかという問題はありますが、どういう考えをもっているかあらかじめ知っておいてもらえればと思っています。

PC版では寄付以外のお金は頂きません。
将来的にスマホ版を作り、英語版も作り、Wikipediaのように積極的に寄付を要求する仕様にして無料で公開し、それで目標月額20万円に届かなければ、スマホ版に有料オプションを付ける、あるいはスマホ版を有料で売るという形を取ってみたいと考えています。

積極的に寄付を要求するというのは、1ヶ月に一度くらい、起動時にダイアログが出て寄付をお願いするような形を考えています。使用の邪魔にはならないようにしたいです。

まだPC版もない段階でスマホ版の話をしても取らぬ狸で、現段階ではただの願望でしかありません。今はスマホ版のことは考えず、PC版をしっかりしたものにした後、余裕ができたらスマホ版を作りたいと考えています。

Q.どういったソフトにするのか

はじめは思い切り2chに寄せた形にする予定です。複数のアンカをつけたレスが出来ないといった制限はありますが、ほとんど2chと同じように使えるように出来ればと思っています。Redditの良い所は後から皆様の意見をいただきながら付け加えていければと思っています。

2015年3月7日土曜日

2015/03/07の投稿

PC用の2ch風Reddit専用ブラウザを作ろうと思います。 できれば一週間ぐらいでベータ版を出したいです。
要望等あればお願いします。

 
追記:
たくさんのご要望ありがとうございます。
初めは最低限の機能しか実装できず、皆様のご要望に応えられるのはその後になってしまうとは思いますが、
実装するべき機能を想定しながら優先順位をつけて作っていけるので大変助かっております。
 
できるだけ早く動くものを用意して皆様の期待に応えられるよう全力を尽くします。

RedditChan Blogについて

 RedditChanというRedditを2ch風に表示する専用ブラウザの開発ブログです。

 アナウンス等はRedditにあるスレのコメントを編集して行うつもりですが、時系列に沿ったアナウンスの記録も必要になると思うのでこちらにも書いていきます。

 スレの方がメインになるのではないかと思いますが、こちらにコメントして頂いても構いません。