へぼいいいわけ このページをアンテナに追加 RSSフィード

2014年07月23日

unkarを閉鎖します

もう疲れました。

だいたい8年間くらい運営していたようです。


個人用途で嫌儲とかを見るためにめっちゃ使っているので、過去ログを表示できない作りにしてwebアプリ形式の2ちゃんねるブラウザとしては続けようと思います。


unkarで動作していたソースコードを公開しますのでご自由にお使い下さい。


unkarに保存している全てのdatファイルをダウンロードできるようにしたいと思いますが、転送量が大変なことになるので考え中。

2013年11月10日

unkarにNewRelicを導入してみた&Go言語で書きなおした感想

NewRelicとかいうものが便利そうなのでunkarが稼働している鯖に導入してみました。

導入方法は以下を参考にしてスタンダードプランを無料で利用しています。

NewrelicでAWS環境のメトリクスをカジュアルに共有してみる


NewRelicを導入してみた

unkarGo言語で書いている*1ため、NewRelicのプラグインを適当に眺めている時に発見したGo言語プラグインgorelicを組み込んで様子を見てみました。

unkarではAmazon EC2を使っているので、新しくAmazon-Linux201309でインスタンスを立ち上げました。Amazon-Linux201309だとデフォルトrubyが1.8.7なようで、最初にrubyの1.9.2以上を新しく入れないといけないようです。間違えて進めると後から色々なツールのruby1.9版を入れないといけなくなって面倒だったので注意した方がいいです。


ちなみに現在のunkarの規模は一日30〜40万PV、月間1000万PV程度です。


unkar全体の様子

f:id:heiwaboke:20131110203803p:image

Goroutines(スレッドみたいなもの)の数が100〜250くらいの間で動作しているみたいです。

本物のスレッドは28で安定している模様。負荷に応じて段階的に増えて、一度増えたら減らないっぽい?


メモリの様子

f:id:heiwaboke:20131110203804p:image

apache+PHPで動作していた頃と比べるとメモリ使用量が10分の1くらいになった気がする。

今のunkarは200MB程度の空きメモリがあれば十分動作するみたい。


システムメモリ?の様子

f:id:heiwaboke:20131110203805p:image

起動した後の数時間で一気に呼び出している。起動時に一気にメモリ確保して後は使いまわしているということ?


ガベージコレクションの様子

f:id:heiwaboke:20131110203806p:image

右側のグラフが無尽蔵に伸びまくっているのが気になるけど、動作が重くなっている感じはしないので、たぶん大丈夫なんでしょう。


ここまでNewRelicのグラフを色々と貼り付けてみましたが、こうやってグラフで出力されると楽しいですね。正直なところ、今まで鯖監視系のツールを全く使ったことが無かったので、グラフで可視化されるだけでお腹いっぱいです。


unkarをGo言語で書きなおした感想

unkarの利用者からすると非常にどーでもいい話でしかも今更な話だと思いますが、unkarは08月17日頃からGo言語で書いた一つの実行ファイルで動作しています。webサーバ部分から全て書いているので、unkarの動作している鯖ではapacheとかnginxとかは動作していません。

一部URLPHPが残っていますが、中身は全部Go言語になっています。


Go言語を採用した理由としては、元々使っていたPHPに飽きたことと、たまたま自分が書ける言語の中で比較的簡単にサイトが作れそうで、動作させるところまで行けそうだったからです。

Go言語を採用したおかげで、前は普段使っているWindows上にunkarの環境を作るのが面倒で、ちょっと弄る度に本番環境でデバッグしていたのがWindows上でもそのまま動作するようになって捗るようになりました。


Go言語というと、自分にはGoogleが作ったお気楽なコンパイル言語ってイメージがあって、一応コンパイル言語なので、インタプリタ言語なPHPで書いていた時よりも高速に動作してCPU使用率が下がるんだろうなーとか思っていましたが、別に大差ありませんでした。たぶん正規表現を使いまくった作りだったこととか、元々2chとの通信に時間がかかっていたのが原因だと思います。


上でNewRelicのグラフを貼った時に書いていますが、メモリの使用量はたぶん劇的に減少しました。たぶんというのは、PHPで動作していた時の状態をちゃんと測ったことが無いためで、PHPの時はピーク時にapacheが300プロセスくらい動作していたので、かなりのメモリを使用していたと思います。

Go言語で書き直したから簡単にメモリ使用量が減ったわけではなく、書きなおした後の2ヶ月間くらいはメモリリークが酷く、一週間動作するとメモリを3GBくらい(鯖に載っているメモリの半分程)消費していました。そこまでメモリを使うと、GCにアホみたいに時間がかかるみたいで、10秒ごとに1秒くらいプログラムの動作が停止する状態でした。

特定のURLにアクセスするとメモリのプロファイリングを行うようにして、なんとか今のメモリリークしていないように見える状態まで持っていくことが出来ました。pprof.WriteHeapProfile関数がなかなか便利でした。


メモリリークをチマチマ直して様子を見ていたおかげで分かったことですが、なんでもかんでも「defer」を使う作りにするとメモリを食うようなので、Go言語を書く人は気をつけたほうがいいと思います。*2


unkarくらいのAPI叩いてちょっと整形して出力する程度のサイトなら、Go言語で書きなおすのは悪く無いと思います。

でも、webサーバーまでGo言語で書いたのはちょっと失敗だったかなと思っています。パスによるルーティングとか、IPアドレスによるアクセス制限とか、ログの出力など、webサーバが標準で装備している機能を実装するのが、できる限りGo言語の標準ライブラリに任せても大変でした。まあ全部Go言語で書いたからこそ、Windows環境でも手軽に動作させられるので、価値が無いわけではないんですが。


だらだらと色々書いてみましたが、適当にWEBを眺めている感じだと、Go言語でツールを作った、勉強会に参加したという話は結構あるっぽいのに、サイトを作ったという話が妙に少ない気がするので、このどーでもいい感想が何かの役に立てばと思います。

*1:unkar.org以下全て。search.unkar.orgは今のところapachePHP

*2:プロファイルングすると「newdefer」とか言う奴にめちゃくちゃメモリが使われているのが分かります。

2013年02月10日

うんかーJSでdatファイルを表示できるようになりました

ここに書いておかないと誰も存在に気が付かないような機能をうんかーJSに実装しました。


datファイルのドラッグ表示

ブラウザでうんかーJS*1を表示して、その上にdatをドロップするとそのdatを読み込んで表示できるようになりました。

ドロップしたdatはサーバなどにアップロードせずにローカルで全部処理しています。

現時点で最新のfirefoxとchromeでは読み込めることを確認しています。IE9、IE6では無理でした。

html5のFileAPIとかいうものを使っているのですが、それそのものではドロップされたファイルがdatであるか分からないので、ファイル名がdatファイルっぽいことを確認してから読み込んでいます。具体的には今のところ「/^\d{9,10}\.dat$/」なファイル名をdatファイルとみなしています。

うんかーJSでは元から生のdatを解析して描画していたので、簡単に表示できるようになりました。もっと前からやっておけばよかったかも。

ちなみに、datをドロップするとURLが割り当てられますが、一時的なものになるので、ブラウザを更新すると無効になります。

どーでもいい情報ですが、chromeでは平均的なdatファイルを一気に10000ファイル*2ほどドロップすると6000ファイルくらいは快調に読み込めるのですが、その後は猛烈に重くなるためやめておいたほうが良いです。どうも1つのタブで使用するメモリが1GBに近づくとメモリ使用量が激しく変動するので多分GCが動いているんだろうと思います。ウェブアプリを作る際はメモリを1GB使わないようにしたほうが安全かもしれません。


URLのドロップ

URLのドロップにも対応しました。2chっぽいリンクをうんかーJSにドロップするとうんかーJSで読み込みます。複数のタブでうんかーJSを開いてしまった時に、うんかーJSのタブをドロップしてスレッドを移動させられるので便利かもしれません。

ちょっと前まではハッシュでページの移動記録を管理していたので、うんかー同士ならイベントを仕込まないでも勝手にリンクのドロップでページを移すことができていたのですが、このごろハッシュを使用しないようにしたので、わざわざ別途に実装しました。


忘れそうなのでメモ

html5のFileAPIでdatファイルを読み込んでいるのですが、そのエンコーディングの指定をしっかりしないとブラウザごとで差が出るみたいなので書いておきます。

var reader = new FileReader();

// 読み込み完了イベント登録
reader.onload = function(ev){
	// 完了
};
// IANA名じゃないと読み込んでくれない。firefoxとか
reader.readAsText(file, 'Shift_JIS');

datファイルは普通「Shift_JIS*3」なので、FileReaderのreadAsTextにエンコーディングの指定を行う必要があるんですが、ここを「sjis」とか適当に指定するとfirefoxでは読み込みが行われないみたいです。実はfirefoxではエンコーディングの指定しないでも文字化けせずに読めるので、firefoxだけを対象とするなら指定は要らないのですが、そうするとchromeで文字化けしてしまいます。

上のコードに書いてありますが、firefoxでもchromeでも読めるようにするには「sjis」の正式名称である「Shift_JIS」を指定する必要があるみたいです。


最近のうんかー

すべてのスレッドタイトルに「unkar@板名」を入れるようにしたら、うんかーをまるごとコピーして生成しているウェブサイトのタイトルにも全部unkarという文字が入るようになったみたいです。そういう自動生成ツールでページを量産するのならせめてコピー元のサイト名くらいは削るようにした方がいいと思います。

というか色々とややこしいので削って下さい。

*1:うんかーを開いてヘッダーの「うんかーJSモード」をクリック

*2嫌儲のタイムスタンプ1350000000〜1350999999のうんかーに保存されていた10904ファイル(250MB程度)

*3:細かいことを言うとCP932?

2013年01月14日

2012年のunkarまとめ

どうもこんにちは。2012年のunkarを振り返ってみました。

お暇ならこちらもどうぞ


アクセス数

総合

f:id:heiwaboke:20130114210509p:image


7月と10月にGoogleのアルゴリズム変更があり大きくアクセス数が減少していますが、それ以外はあまり変化が無く、各検索エンジンがグルになってアクセスを一定値で制限しているんじゃないかと思うくらい安定しています。

7月と10月の変化が無ければ、今年は6億ページビューくらいになっていたと思われます。

Googleのさじ加減で数億PV程度なら簡単に変わってしまうところが恐ろしいと感じました。


2010、2011年と比較すると以下のようになりました。

訪問数ページビュー数
2010年203,001,140293,965,984
2011年277,036,539438,115,202
2012年238,894,094448,626,684

2012年は上記のような大きなアクセスの変化があったにもかかわらず、ページビュー数のみに限れば、2011年よりも1000万程度多くなりました。(ちょっと間違っているかもしれないです。詳しくはスマートフォンの様子の方に記載しています)

ちなみに、年間で最も訪問数があった日は、4月30日の「1,011,880」で、PVがあった日は5月6日の「1,863,095」でした。


ブラウザ

f:id:heiwaboke:20130114210510p:image


2011年はIEの割合が大体60%くらいでしたが、2012年で20%ほど減少して40%になりました。

一応フルJavaScriptで描画しているうんかーJSの方でもIE6までなら普通に使えるように作っているつもりですが、IE6はIE全体の4%まで落ちているため、あまりIE6のことを考える必要はないのかもしれません。


スマートフォンの様子

f:id:heiwaboke:20130114210511p:image


携帯端末の情報訪問数訪問別ページビュー訪問時の平均滞在時間新規訪問の割合直帰率
Apple iPhone32,149,8602.1900:01:4221.40%9.15%
(not set)6,015,4382.2200:01:0140.98%10.19%
SonyEricsson LT15i Xperia Arc4,567,7342.2600:00:5627.03%5.09%
Apple iPad4,292,2892.1200:01:0127.88%14.79%
Apple iPod Touch3,000,6902.3200:01:2425.16%11.02%
Samsung SC-02C Galaxy S II SC-02C for DoCoMo2,980,3502.2000:00:4415.18%4.30%
SonyEricsson IS11S Xperia acro SO-02C for DoCoMo1,864,4982.2700:00:5917.87%3.75%
SonyEricsson SO-01C Xperia arc SO-01C for DoCoMo1,716,9502.2500:01:0414.27%4.31%
Sharp A01 INFOBAR A01 for KDDI au iida1,504,9092.2900:01:0215.41%4.02%
SonyEricsson SO-02C Xperia acro1,498,9072.2500:00:5914.03%4.66%

直帰率がとても少ないですが、これはスマートフォンの場合、JavaScriptでページを描画している都合で2重にカウントされている可能性が高いです。

最初にページをロードした時に一回カウント(この時点ではページは真っ白)、データをサーバから取得して解析して描画し終えたら一回カウント、みたいな感じです。

つまり、スマートフォンの8900万PVのうち、4000万PVくらいは水増し状態(?)です。別にPV数を広告業者などに提出することもないのでとりあえず放置していましたが、やっぱり気になるので先ほど直しました。

これからはページの描画が終わってからカウントするようになるため、描画が終わる前にページから離脱された場合はカウントされなくなります。


収入

  • 収入の合計 4,869,119円

収入は去年の900万超えの状態と比べると激減していますが、アクセス数が激減したり、マイクロアドが無くなったり、amazonアフィリエイトの仕様変更があったり、何かと色々あったのにも関わらず、500万円近い値になっているので運が良かったなあと思っています。


詳細
マイクロアドマイクロアド2amazonその他
1月395,221116,66860,027
2月397,720105,79956,875
3月362,278147,81465,849
4月273,99276,16958,990
5月502,50068,63248,040
6月419,82662,82246,496
7月271,14360,89441,072
8月246,92869,84223,817
9月176,58991,98519,5982,576
10月57,560134,78718,781
11月11,214148,5259,780
12月1204,92913,380
合計3,114,9721,288,866462,7052,576
  • マイクロアド

そろそろ無くなるマイクロアドの広告です。

今年もぶっちぎりで一番多くの収入をマイクロアドから得ることが出来ました。


  • マイクロアド2

無くならない方のマイクロアドです。

一度描画した広告の中身をJavaScriptを使って引っこ抜いて他の場所に描画したり、ページに埋め込むタイプの項目を無理やりフローティング広告と同じように表示していたりしますが、特に怒られないある意味自由な広告です。*1

スマホのうんかーJSでは設定で広告の表示を消せるのですが、多分気がついている人は一人も居ないと思われるので、そのうち気が向いたら設定の方法を紹介しようと思います。


いつものamazonさんです。仕様変更とアクセス激減が重なって、収入も激減しています。


  • その他

その他アフィリエイト会社からの収入です。具体的にはホットココアさんからの収入です。2012年の間はどこにも貼っていないつもりでしたが、たぶんキャッシュか何かで表示された分が支払われたものと思われます。


クリック率とか

無くなる方のマイクロアドを画像で用意しました。

f:id:heiwaboke:20130114210512p:image


クリック率が1%とか夢のまた夢ですね。


支出

  • 支出の合計 4,243,037.8円(1ドル80円計算)

去年よりも80万くらい増えています。収入は大きく減っているのに、支出は増えているって相当宜しくないですね。


Amazon EC2

現在は17台のインスタンスを借りています。

マイクロインスタンスが16台でハイCPUエクストララージインスタンスが1台です。

amazonその他
1月1,819.88
2月1,826.45
3月1,932.07
4月1,862.63
5月2,380.24
6月2,404.53
7月2,439.52
8月2,536.55
9月2,471.07
10月2,302.51
11月1,913.32
12月1,693.643,450
合計25,582.413,450

※表は全部ドルです。

  • 合計 29032.41ドル(2,322,592.8円 1ドル80円換算)

5月くらいにマイクロインスタンスを16台追加して、ついでにスレッド検索用データベースサーバを無駄にスペックの良い奴に変えた影響でサーバ代金が増えています。

10月にアクセスが激減したのを受けて、この構成だとやっていけないと思い、スレッド検索用のサーバを安いインスタンスに変えた影響で11月以降は減っています。実は安すぎるインスタンスに移してしまったため、検索が集中した際にスワップが発生してデータベースが死ぬ状況になったため、結局はAmazon EC2を諦めて日本のサーバで検索を行なっています。

12月に3,450ドル払っているのは、円安がものすごい勢いで進んでいるのを見てビビって10台ほどリザーブドインスタンス*2を契約したせいです。

おかげで、サーバ構成が変わってないのに1月からは1000ドル以下の料金で済みそうな感じです。Amazon EC2は2009年から使っているけど、なんでもっと早くリザーブドインスタンスを契約しなかったんだろう。。


さくらインターネット
さくらインターネット
1月183,620
2月172,840
3月372,740
4月142,857
5月140,540
6月116,510
7月146,764
8月124,934
9月128,930
10月128,930
11月132,850
12月128,930
合計1,920,445
  • 合計 1,920,445円

3月にさくらインターネットのメモリが64GBある新しい専用サーバをノリで借りてみました。初期費用が20万円(月額12,800円)くらいで、その影響で3月の支払額が激増しています。

新しいサーバは激しく*3使っていたらRAIDコントローラーとHDDが一緒に死んで、すぐに直してもらったのに使う気にならなくて放置していたのですが、10月のアクセス激減を受けて11月くらいからスレッド検索サーバとして動作しています。

あと、不要なサーバの解約手続きを進めているので、2013年の3月くらいからサーバ代金は3万円程度になる予定です。契約時はネットからできるのに、解約するためには書類を郵送する必要があってかなり面倒です。


収入と支出の差

  • 収入(4,869,119円) - 支出(4,243,037.8円) = 差額(626,081.2円)

2011年は差がプラス400〜500万円くらいあったような気がしますが、2012年は60万円くらいでした。

2013年はマイナスになる可能性もあるので、金銭に関わる情報はしっかりと集めてなるべく早めに行動するように心がけたいです。

今のところは、この円安がどこまで行くのか注目しないといけないなと思っています。まだ、円安で鯖代がヤバイみたいな話は聞いたことがありませんが、このまま円安が進むとAmazon EC2等の海外サーバを借りて結構なデータ量を扱っている方たちが、サイトを閉鎖するしかない状況になりそうで怖いです。


2012年のunkar(主な出来事)

  • 7月にアクセス数が大きく減った
  • 10月にアクセス数が大きく減った
  • ドメインのレジストラが変わった
  • URL構成が変わった

今年はアクセス数の減少以外特に何もなかったです。メールで脅迫してくる人とかもあまり居ませんでしたし、ドメインのレジストラから怒られてレジストラの移管をすることにはなりましたが、前にもあったことで慣れていたので、ストレスが貯まることの少ない平和な一年だったように感じます。

夏くらいにコピペブログの騒動があってニコニコ大百科にunkarの項目を作ってみたり、「●」の不正使用の騒動があったりしましたが、両者ともunkarとしては特に影響が無かった*4です。

ちなみに、URLの構成が変わったというのは、unkarの分散したURLを一つにまとめましたや、スレッド検索のURLが「unkar.org/2ch/search.php」→「search.unkar.org/2ch」に変わったことを指しています。


感想

2012年はunkarの6年間くらいの歴史の中で初めてのアクセス数が減った年になります。

今まで一年間程安定していたアクセス数が、こちらは特に何もしていないのに大きく減ってしまうなんて普通は体験できないことだったと思います。

おかげでサイトが無限に大きくなるような前提で適当に考えていた金銭的な部分の見直しを進めることができ、unkarをもっと長い期間続ける準備を進めることができました。


unkarが金銭的に弱っていたため、夏以降はとりあえず鯖代が関係ないうんかーJSというJavaScriptのビューアの強化に力を入れてみたんですが、やっている内に面白くなってきて、最近はずっとうんかーJSを弄っています。

外見では正直よく分からないと思いますが、スレッドの差分取得や、個別レスのみの表示ができるようになりました。また、URLも通常のunkarと同じものに統合され、少しずつですが使いやすくなってきていると思います。

2013年も、基本的にはうんかーJSの強化を進めようと思っているのですが、特にこれといった目標はありません。とりあえずはChromeやfirefoxのプラグインで動く2chブラウザがうんかーJSと機能的に似ているので、真似できるところは真似しようかなと考えています。


unkarのような2ちゃんねるのログ保存を行うサイトは長い間運営しないと意味が無い部類になると思うので、これからも出来る限り続けていくつもりです。

2013年もunkarを宜しくお願い致します。


おまけ

microadの一部が無くなるということなので最終的な結果を晒します。

f:id:heiwaboke:20130114210513p:image


microadには2006年からお世話になっていて、今まで自分が運営してきた各サイトに貼らせてもらっていました。今はもう一種類の方のmicroadに切り替えています。

単一の広告サービスでここまでの収入を得ることは今後は無いんじゃないかと思います。


リンク

*1:担当者の方に一応の許可は取りました。

*2:最初に固定額支払うことで割引を受けることが出来る制度

*3:unkarに保存してあるスレッドの全てのレスの書き込み時間(50億以上)を適当に立てたMySQLサーバにインサートする行為を何度も繰り返していた

*4:実際にはその時期にちょうどDNSの変更をミスってサイトが消えて話題になっていましたが。。

2012年12月14日

unkarの分散したURLを一つにまとめました

unkarは今まで以下のようにURLが分散していました。

  • unkar.org/r/poverty/1352020971 (PC)
  • unkar.org/read.html#!/poverty/1352020971 (PC用うんかーJS)
  • sp.unkar.org/r#!/poverty/1352020971 (スマホ用うんかーJS)

他にも、クローラー向けの_escaped_fragment_付きURLや旧unkarのURL等があり、ひとつのスレッドを示すURLが複数存在する状態になっていました。


URLが分散することで、ひとつのスレッドが複数のURLで検索エンジンに登録され、ユーザーが様々な端末でアクセスする度に各端末用のURLへのリダイレクトが発生し、ソーシャルで拡散されるURLも分散してしまい特に良いことが無かったので、今回、全てのURLを「http://unkar.org/r」以下の一つにまとめました。


クライアントサイドでページを生成するうんかーJSも通常のうんかーのURLと全く同じものを利用できるようになっています。「http://unkar.org/r」以下のヘッダーにある「うんかーJSモード*1」をクリックすることでうんかーJSが使用できるようになります。

うんかーJSの動作としては、cookieの有無で最初にアクセスした際のサーバーサイドでのページの生成を最小限に止めて、後はクライアントサイドでHTML5のHistoryAPIを使用してURLを弄りつつ必要な情報のみを読み込んで描画するようにしています。

HistoryAPIが使えない環境でうんかーJSが使えなくなるのはもったいないので、HistoryAPIが使用できない環境に限っては、従来のようなハッシュによるURLの書き換えでも動作するようにしてあります。結局URLが分散しているけど気にしないで下さい。


cookieの有無でサーバーサイドのページ生成を変更するようにしたので、スマホでもPC用のサーバーサイド生成のページが見られるようになりました。

スマホでアクセスした際ににょろっと出てくるフッターの「切」ボタンで動作を変えることができます。*2

今までスマホでアクセスすると必ずクライアントサイドでページを生成するなかなかの糞仕様にしていたため、JavaScriptをOFFにしていたり、処理能力の低い端末でunkarを見ると大変なことになっていたと思われますが、今後はそういう心配?も無くなります。


Googleのアルゴリズム変更でアクセス数が激減してしまいましたが、当分は閉鎖しなくてもなんとかなりそうになったので、これからもunkarを色々と改造していくつもりです。

これでGoogle先生の評価が変わってアクセス数が増えたらいいなあ。

*1:名前は変わるかも。

*2:クライアントサイドでのページ生成が今でもデフォルトです。