プログラマになりたい

おっさんになっても、プログラマでありつづけたい

Apple TVを中心としたホームシアター・オーディオ環境の一例

 何度かブログに載せていますが、過去5年ほど家庭の映像・音楽関係の視聴環境を試行錯誤してきました。その間に、結婚したり子供が産まれたりと、いろいろとメインの利用者が変わっています。一度、ここで整理してみたいと思います。

前提としての主な視聴者



 最近、家でテレビや音楽を聞くのは、3歳の息子です。見聞きする内容は、もっぱらYoutubeの電車の映像と、子供向けの童謡やジブリ・ディズニーのテーマ曲です。後は毎週テレビでやっている機関車トーマスとチャギントンです。それ以外は1歳の娘向けに、オルゴールメロディやNHKのいないいないばあをつけるくらいです。またDVDで子供向けのタイトルが幾つかあるのですが、基本操作が面倒くさいので見ていません。嫁さんについては、Huluで映画をたまに見るくらいで、私に至っては息子に強制的に見せられるYoutubeの映像を見るくらいです。

家庭内の視聴環境



 そんな我が家の視聴者のニーズを満たす環境は、次のとおりです。

  • 東芝REGZA Z7 + タイムシフト
  • SONY ホームシアターシステム HT-CT660
  • Apple TV + Hulu
  • Mac mini
  • iPad

 接続形態は、このような形です。

f:id:dkfj:20150125170526p:plain

 図を見て貰うと解るように、いろいろな機器の連携の中心にApple TVがいます。Apple TVの便利なところは、TVとオーディオのどちらでも出力できるところと、Apple系製品から画面転送やiTunesライブラリの参照ができるところ、更にHuluの機能を組み込んでいるので文句なしです。欲を言えば、メディアサーバの機能も欲しいところですが、9割の人間には不要なのでこのままで良いでしょう。
 REGZA Z7ですが、タイムシフトというか録画機能が欲しくて、先代のテレビが壊れたタイミングで買い替えました。基本的にはテレビはみないのですが、予想以上に便利です。定期予約やタイムシフトから、子供向けの番組をちょっと見せるという芸当は、子育て世代には想像以上に便利です。忘れず録画するとか、毎回同じ時間に見るということが中々できないですからね。また、ほぼ同時期に買ったSONYのホームシアターシステムですが、イメージ的にはアンプとスピーカーが一体型になっているものです。Apple TV経由で聞いていますが、iPhoneやiPadからブルートゥースで直接音楽を流し込むということも出来ます。いずれにせよ、手軽に簡単に音楽を楽しめます。
 iPadは、ほぼ子供のYouTubeリモコンになっています。AppleTV単体でもYoutubeをみれるのですが、UI的に使いにくいので子供はもっぱらiPadを使ってYoutubeを見ています。iPadでみると姿勢が悪く近いところで見がちなので、AppleTV経由でテレビに転送して見せるようにしています。最後にMac Miniです。これは、我が家のメディアサーバとして活躍しています。(それ以外にも、ホームサーバとして活躍していますが割愛。)音楽も全部これに入れているのですが、AppleTV経由で使えば、Rometeを使えばiPhoneをリモコンとして選曲できるので便利です。iPhone/iPadのを直接流すという手もありますが、子供向けの曲などは、入れてなかったりします。
f:id:dkfj:20150125205526p:plain

家庭内の視聴環境



 改めて見直すと、マニアックな構成になっております。しかし、実際のところ視聴時間という意味では、あまり無かったりするので、単なる利便性を追求する趣味なのかもしれません。これが正解というものはないですが、また面白いものを考えてみたいですね。Mac miniがホームサーバとして常時動いているので、これにIoTの機器を何かつけて近未来の家を目指してみるのも面白いかもしれません。Enjoy!!

See Also
Mac miniを買ったった! (Late 2014 MGEN2J)
Apple TVでNAS上の動画・音楽を再生する方法
AirPlayを使って、AppleTV+AVアンプでホームオーディオ・システムを構築する話
Hulu(フールー)の契約したった。或いはAppleTVとの連携について
笑える程の凄さ!未来のテレビがここに Apple TV

Apple ハイビジョン対応 Apple TV MD199J/A

Apple ハイビジョン対応 Apple TV MD199J/A

SONY ホームシアターシステム HT-CT660

SONY ホームシアターシステム HT-CT660

5分で何となく解るAmazon Cognito

 年末年始でじっくり調べてみようと思っていたのがCognitoです。先日ようやく時間が取れて、何となく解ってきたので簡単にまとめてみます。Cognitoは、モバイル向けに設計されたユーザーアイデンティティおよびデータ同期のサービスです。主な機能としては、以下の3点です。

  • FacebookやGoogleなどのOpenID ConnectベースのIdentity Providerを利用して認証できる
  • Cognito Syncで、同一ユーザの複数の端末のデータを同期できる
  • 認証/未認証のユーザにIAM Roleを利用して、AWSリソースのアクセス制御

 上記の説明を聞いても、Cognitoの良さはさっぱり解らないと思います。私もCognitoの説明を読んでも、Facebookで認証できるのかぁくらいにしか感じませんでした。Cognito Syncの同期機能も、ほーっと思ったけど必要とする場面はどれくらいあるのだろうなぁと思いました。

Cognitoの重要性



 しかし、Cognitoのユースケースが出始めることで、ようやくCognitoの重要性が解ってきました。Cognitoの重要な機能は、安全簡単にAWSリソースのアクセス制御ができることなのだと思います。モバイル・アプリの場合、サーバサイドのプログラムのようにアクセスキーとシークレットアクセスキーを埋め込むことはできません。配布するために、アプリ内からキーを取り出される可能性があるからです。かといって、インスタンスのようにIAM Roleを発行するということも出来ません。モバイルからAWSのリソースを利用しようとすると、従来であればSecurity Token Service(STS)とToken Vending Machine(TVM)を利用して一時的な認証と認可の仕組みを構築する必要がありました。
 これ非常に面倒くさいですよね。ということで、どういうアーキテクチャが主流だったかというと、下の図のような形だと思います。

f:id:dkfj:20150119232504p:plain

 いわゆる三層構造(3Tier Architecture)です。AWSのリソースの制御はEC2側でやってしまって、モバイル側には結果をJSON等で返すだけという形です。この構成だと、当然全てのリクエスト・レスポンスがEC2を通ることになるので、この部分の性能と可用性が重要になります。必然的に、ELBやAutoScalingを利用することになります。EC2は、直接的な利用料がAWSサービスの中でも比較的高いことや、構築運用監視に人手が必要なため、コストが高くつきます。

Cognitoがもたらすアーキテクチャの変化



 では、Cognitoを利用するとどう変わるのでしょうか?EC2を経由せず、モバイルから直接AWSのリソースにアクセスする構造を簡単に実現できます。2Tier構成です。

f:id:dkfj:20150119233617p:plain

 CognitoはIAM Roleを利用して、認証/未認証のユーザにそれぞれアクセス認可を与えることができます。この未認証ユーザにもというところが味噌で、これのお陰でモバイル・アプリに簡単安全にアクセス認可する仕組みとして利用できます。事実、CognitoのIdentity Poolを作成する時に、実はIdentity Providerの設定は必須ではありません。実装面では、Cognitoの設定をしておけば、後はSDKを取り込んで少しコードを書くだけで、簡単に利用可能です。従来のようにSTS+TVMを使って独自の認証認可の仕組みを実装する必要はありません。Cognitoのウリは、安全簡単に認可の仕組みを組み込めるので、アーキテクチャすら変える力があるということです。

まとめ



 ということで、ここ最近Cognitoについて考えてきたことをまとめてみました。Cognitoは、2Tierアーキテクチャの要になると思います。ただ、まだドキュメント読んだりサンプルコードを動かしているレベルなので、今後本格的にアプリを開発し運用してみると考え方は変わるかもしれません。しかし、Lambdaが出てきたこともあり、AWSはシステムのアーキテクチャ自体を変えるような何かを考えているのではと思います。今年はそこを見極めてみたいですね。たぶんそのうちに、Node.js向けのCognito SDKもでるでしょうし。ツッコミどころあれば、ご指摘頂ければ幸いです。

See Also:
Lambdaで作るクローラー/スクレイピング
S3のイベント通知機能(S3 Event Notifications)に対するユースケースを考える


Amazon Web Servicesクラウドデザインパターン設計ガイド

Amazon Web Servicesクラウドデザインパターン設計ガイド

Amazonの在庫数とランキングの関係

 以前、「Amazonのランキングの不思議」ということで、順位付けのアルゴリズムを分析している本の紹介をしました。最近、拙著「Rubyによるクローラー開発技法」が、在庫20冊以下になり残数が表示されるようになりました。そこで、順位と在庫数を15分おきに取得して、その関係を見てみました。

生データ



 生のデータを、そのまま置きます。興味がある人は、考察してください。
データの収集には、KimonoLabsを利用しています。使い方は、こちらを見てください。

Version Date 順位 在庫 増減
2 Fri Jan 09 2015 22:25:40 GMT+0000 (UTC) 3657 16
3 Fri Jan 09 2015 22:42:26 GMT+0000 (UTC) 3763 16
4 Fri Jan 09 2015 22:58:40 GMT+0000 (UTC) 3763 17 1
5 Fri Jan 09 2015 23:14:45 GMT+0000 (UTC) 3763 17
6 Fri Jan 09 2015 23:30:43 GMT+0000 (UTC) 3888 17
7 Fri Jan 09 2015 23:46:42 GMT+0000 (UTC) 3888 17
8 Sat Jan 10 2015 00:02:55 GMT+0000 (UTC) 3888 17
9 Sat Jan 10 2015 00:18:50 GMT+0000 (UTC) 3888 17
10 Sat Jan 10 2015 00:35:19 GMT+0000 (UTC) 4118 17
11 Sat Jan 10 2015 00:51:38 GMT+0000 (UTC) 4118 17
12 Sat Jan 10 2015 01:07:24 GMT+0000 (UTC) 4118 17
13 Sat Jan 10 2015 01:23:33 GMT+0000 (UTC) 4118 17
14 Sat Jan 10 2015 01:39:34 GMT+0000 (UTC) 4474 17
15 Sat Jan 10 2015 01:55:31 GMT+0000 (UTC) 4474 17
16 Sat Jan 10 2015 02:11:40 GMT+0000 (UTC) 4474 17
17 Sat Jan 10 2015 02:27:57 GMT+0000 (UTC) 4943 17
18 Sat Jan 10 2015 02:44:21 GMT+0000 (UTC) 4943 17
19 Sat Jan 10 2015 03:00:33 GMT+0000 (UTC) 4943 17
20 Sat Jan 10 2015 03:15:48 GMT+0000 (UTC) 4943 17
21 Sat Jan 10 2015 03:31:45 GMT+0000 (UTC) 5574 17
22 Sat Jan 10 2015 03:48:01 GMT+0000 (UTC) 5574 17
23 Sat Jan 10 2015 04:04:00 GMT+0000 (UTC) 5574 17
24 Sat Jan 10 2015 04:19:48 GMT+0000 (UTC) 5574 17
25 Sat Jan 10 2015 04:35:55 GMT+0000 (UTC) 6262 17
26 Sat Jan 10 2015 04:52:17 GMT+0000 (UTC) 6262 17
27 Sat Jan 10 2015 05:08:22 GMT+0000 (UTC) 6262 17
28 Sat Jan 10 2015 05:24:27 GMT+0000 (UTC) 6262 17
29 Sat Jan 10 2015 05:40:43 GMT+0000 (UTC) 6968 17
30 Sat Jan 10 2015 05:56:21 GMT+0000 (UTC) 6968 16 -1
31 Sat Jan 10 2015 06:12:35 GMT+0000 (UTC) 6968 16
32 Sat Jan 10 2015 06:28:41 GMT+0000 (UTC) 6968 16
33 Sat Jan 10 2015 06:44:53 GMT+0000 (UTC) 7691 16
34 Sat Jan 10 2015 07:00:59 GMT+0000 (UTC) 7691 16
35 Sat Jan 10 2015 07:17:06 GMT+0000 (UTC) 7691 16
36 Sat Jan 10 2015 07:33:07 GMT+0000 (UTC) 5121 16
37 Sat Jan 10 2015 07:48:59 GMT+0000 (UTC) 5121 16
38 Sat Jan 10 2015 08:04:57 GMT+0000 (UTC) 5121 16
39 Sat Jan 10 2015 08:21:10 GMT+0000 (UTC) 5121 16
40 Sat Jan 10 2015 08:37:13 GMT+0000 (UTC) 5684 16
41 Sat Jan 10 2015 08:53:20 GMT+0000 (UTC) 5684 16
42 Sat Jan 10 2015 09:09:26 GMT+0000 (UTC) 5684 16
43 Sat Jan 10 2015 09:25:22 GMT+0000 (UTC) 5684 16
44 Sat Jan 10 2015 09:41:33 GMT+0000 (UTC) 6362 16
45 Sat Jan 10 2015 09:57:37 GMT+0000 (UTC) 6362 16
46 Sat Jan 10 2015 10:13:41 GMT+0000 (UTC) 6362 16
47 Sat Jan 10 2015 10:29:38 GMT+0000 (UTC) 7055 16
48 Sat Jan 10 2015 10:45:41 GMT+0000 (UTC) 7055 16
49 Sat Jan 10 2015 11:01:49 GMT+0000 (UTC) 7055 16
50 Sat Jan 10 2015 11:17:40 GMT+0000 (UTC) 7055 16
51 Sat Jan 10 2015 11:35:49 GMT+0000 (UTC) 7708 16
52 Sat Jan 10 2015 11:52:01 GMT+0000 (UTC) 7708 16
53 Sat Jan 10 2015 12:08:08 GMT+0000 (UTC) 7708 16
54 Sat Jan 10 2015 12:24:04 GMT+0000 (UTC) 8361 16
55 Sat Jan 10 2015 12:39:56 GMT+0000 (UTC) 8361 16
56 Sat Jan 10 2015 12:56:05 GMT+0000 (UTC) 8361 16
57 Sat Jan 10 2015 13:12:12 GMT+0000 (UTC) 8361 18 2
58 Sat Jan 10 2015 13:28:49 GMT+0000 (UTC) 8361 18
59 Sat Jan 10 2015 13:44:49 GMT+0000 (UTC) 9160 18
60 Sat Jan 10 2015 14:00:52 GMT+0000 (UTC) 9160 18
61 Sat Jan 10 2015 14:16:54 GMT+0000 (UTC) 9160 18
62 Sat Jan 10 2015 14:33:25 GMT+0000 (UTC) 10228 17 -1
63 Sat Jan 10 2015 14:49:24 GMT+0000 (UTC) 10228 17
64 Sat Jan 10 2015 15:05:42 GMT+0000 (UTC) 10228 17
65 Sat Jan 10 2015 15:21:31 GMT+0000 (UTC) 10228 15 -2
66 Sat Jan 10 2015 15:37:26 GMT+0000 (UTC) 11318 14 -1
67 Sat Jan 10 2015 15:53:18 GMT+0000 (UTC) 11318 14
68 Sat Jan 10 2015 16:09:18 GMT+0000 (UTC) 11318 15 1
69 Sat Jan 10 2015 16:25:08 GMT+0000 (UTC) 7420 15
70 Sat Jan 10 2015 16:43:41 GMT+0000 (UTC) 7420 15
71 Sat Jan 10 2015 16:59:34 GMT+0000 (UTC) 7420 15
72 Sat Jan 10 2015 17:15:48 GMT+0000 (UTC) 7420 15
73 Sat Jan 10 2015 17:31:51 GMT+0000 (UTC) 5328 15
74 Sat Jan 10 2015 17:47:53 GMT+0000 (UTC) 5328 15
75 Sat Jan 10 2015 18:03:56 GMT+0000 (UTC) 5328 15
76 Sat Jan 10 2015 18:19:23 GMT+0000 (UTC) 5328 15
77 Sat Jan 10 2015 18:35:25 GMT+0000 (UTC) 5678 15
78 Sat Jan 10 2015 18:51:21 GMT+0000 (UTC) 5678 16 1
79 Sat Jan 10 2015 19:07:34 GMT+0000 (UTC) 5678 16
80 Sat Jan 10 2015 19:23:38 GMT+0000 (UTC) 5884 16
81 Sat Jan 10 2015 19:39:28 GMT+0000 (UTC) 5884 16
82 Sat Jan 10 2015 19:55:36 GMT+0000 (UTC) 5884 16
83 Sat Jan 10 2015 20:12:03 GMT+0000 (UTC) 5884 16
84 Sat Jan 10 2015 20:28:12 GMT+0000 (UTC) 5994 16
85 Sat Jan 10 2015 20:44:04 GMT+0000 (UTC) 5994 16
86 Sat Jan 10 2015 21:00:15 GMT+0000 (UTC) 5994 16
87 Sat Jan 10 2015 21:16:22 GMT+0000 (UTC) 5994 16
88 Sat Jan 10 2015 21:32:57 GMT+0000 (UTC) 6086 16
89 Sat Jan 10 2015 21:49:44 GMT+0000 (UTC) 6086 16
90 Sat Jan 10 2015 22:06:21 GMT+0000 (UTC) 6086 16
91 Sat Jan 10 2015 22:22:34 GMT+0000 (UTC) 6086 16
92 Sat Jan 10 2015 22:38:34 GMT+0000 (UTC) 6192 16
93 Sat Jan 10 2015 22:54:31 GMT+0000 (UTC) 6192 17 1
94 Sat Jan 10 2015 23:10:38 GMT+0000 (UTC) 6192 17
95 Sat Jan 10 2015 23:26:41 GMT+0000 (UTC) 6322 17
96 Sat Jan 10 2015 23:42:44 GMT+0000 (UTC) 6322 17
97 Sat Jan 10 2015 23:58:42 GMT+0000 (UTC) 6322 17
98 Sun Jan 11 2015 00:14:45 GMT+0000 (UTC) 6322 17
99 Sun Jan 11 2015 00:31:06 GMT+0000 (UTC) 6562 17
100 Sun Jan 11 2015 00:47:02 GMT+0000 (UTC) 6562 17
101 Sun Jan 11 2015 01:03:29 GMT+0000 (UTC) 6562 17
102 Sun Jan 11 2015 01:19:27 GMT+0000 (UTC) 6562 17
103 Sun Jan 11 2015 01:35:26 GMT+0000 (UTC) 6977 17
104 Sun Jan 11 2015 01:51:29 GMT+0000 (UTC) 6977 17
105 Sun Jan 11 2015 02:07:36 GMT+0000 (UTC) 6977 17
106 Sun Jan 11 2015 02:23:48 GMT+0000 (UTC) 6977 17
107 Sun Jan 11 2015 02:39:44 GMT+0000 (UTC) 7632 17
108 Sun Jan 11 2015 02:55:41 GMT+0000 (UTC) 7632 17
109 Sun Jan 11 2015 03:11:57 GMT+0000 (UTC) 7632 17
110 Sun Jan 11 2015 03:28:05 GMT+0000 (UTC) 8493 16 -1
111 Sun Jan 11 2015 03:44:10 GMT+0000 (UTC) 8493 16
112 Sun Jan 11 2015 04:00:06 GMT+0000 (UTC) 8493 16
113 Sun Jan 11 2015 04:16:15 GMT+0000 (UTC) 8493 16
114 Sun Jan 11 2015 04:32:10 GMT+0000 (UTC) 9467 16
115 Sun Jan 11 2015 04:48:08 GMT+0000 (UTC) 9467 16
116 Sun Jan 11 2015 05:04:08 GMT+0000 (UTC) 9467 16
117 Sun Jan 11 2015 05:20:37 GMT+0000 (UTC) 9467 16
118 Sun Jan 11 2015 05:36:32 GMT+0000 (UTC) 6006 16
119 Sun Jan 11 2015 05:52:28 GMT+0000 (UTC) 6006 16
120 Sun Jan 11 2015 06:08:36 GMT+0000 (UTC) 6006 16
121 Sun Jan 11 2015 06:24:48 GMT+0000 (UTC) 6006 16
122 Sun Jan 11 2015 06:40:52 GMT+0000 (UTC) 6697 16
123 Sun Jan 11 2015 06:56:40 GMT+0000 (UTC) 6697 16
124 Sun Jan 11 2015 07:12:39 GMT+0000 (UTC) 6697 16
125 Sun Jan 11 2015 07:28:39 GMT+0000 (UTC) 6697 16
126 Sun Jan 11 2015 07:44:41 GMT+0000 (UTC) 7468 16
127 Sun Jan 11 2015 08:00:46 GMT+0000 (UTC) 7468 16
128 Sun Jan 11 2015 08:16:51 GMT+0000 (UTC) 7468 16
129 Sun Jan 11 2015 08:32:50 GMT+0000 (UTC) 8278 16
130 Sun Jan 11 2015 08:48:58 GMT+0000 (UTC) 8278 16
131 Sun Jan 11 2015 09:05:01 GMT+0000 (UTC) 8278 15 -1
132 Sun Jan 11 2015 09:21:21 GMT+0000 (UTC) 8278 15
133 Sun Jan 11 2015 09:37:41 GMT+0000 (UTC) 9218 15
134 Sun Jan 11 2015 09:53:58 GMT+0000 (UTC) 9218 15
135 Sun Jan 11 2015 10:10:25 GMT+0000 (UTC) 9218 15
136 Sun Jan 11 2015 10:26:20 GMT+0000 (UTC) 9218 15
137 Sun Jan 11 2015 10:42:27 GMT+0000 (UTC) 5988 15
138 Sun Jan 11 2015 10:59:05 GMT+0000 (UTC) 5988 15
139 Sun Jan 11 2015 11:15:12 GMT+0000 (UTC) 5988 15
140 Sun Jan 11 2015 11:31:20 GMT+0000 (UTC) 6705 15
141 Sun Jan 11 2015 11:47:14 GMT+0000 (UTC) 6705 15
142 Sun Jan 11 2015 12:03:20 GMT+0000 (UTC) 6705 15
143 Sun Jan 11 2015 12:19:20 GMT+0000 (UTC) 6705 15
144 Sun Jan 11 2015 12:35:30 GMT+0000 (UTC) 7456 15
145 Sun Jan 11 2015 12:51:37 GMT+0000 (UTC) 7456 16 1
146 Sun Jan 11 2015 13:07:34 GMT+0000 (UTC) 7456 16
147 Sun Jan 11 2015 13:23:33 GMT+0000 (UTC) 7456 16
148 Sun Jan 11 2015 13:39:53 GMT+0000 (UTC) 8291 16
149 Sun Jan 11 2015 13:55:52 GMT+0000 (UTC) 8291 16
150 Sun Jan 11 2015 14:12:09 GMT+0000 (UTC) 8291 15 -1
151 Sun Jan 11 2015 14:28:38 GMT+0000 (UTC) 9329 15
152 Sun Jan 11 2015 14:44:25 GMT+0000 (UTC) 9329 15
153 Sun Jan 11 2015 15:00:26 GMT+0000 (UTC) 9329 15
154 Sun Jan 11 2015 15:16:51 GMT+0000 (UTC) 9329 14 -1
155 Sun Jan 11 2015 15:33:02 GMT+0000 (UTC) 10570 14
156 Sun Jan 11 2015 15:49:02 GMT+0000 (UTC) 10570 14
157 Sun Jan 11 2015 16:05:13 GMT+0000 (UTC) 10570 14
158 Sun Jan 11 2015 16:21:24 GMT+0000 (UTC) 10570 14
159 Sun Jan 11 2015 16:37:27 GMT+0000 (UTC) 7222 14
160 Sun Jan 11 2015 16:53:43 GMT+0000 (UTC) 7222 14
161 Sun Jan 11 2015 17:09:52 GMT+0000 (UTC) 7222 14
162 Sun Jan 11 2015 17:25:57 GMT+0000 (UTC) 7222 14
163 Sun Jan 11 2015 17:42:17 GMT+0000 (UTC) 7853 14
164 Sun Jan 11 2015 17:58:23 GMT+0000 (UTC) 7853 14
165 Sun Jan 11 2015 18:14:25 GMT+0000 (UTC) 7853 14
166 Sun Jan 11 2015 18:30:42 GMT+0000 (UTC) 8284 15 1
167 Sun Jan 11 2015 18:46:49 GMT+0000 (UTC) 8284 15
168 Sun Jan 11 2015 19:02:59 GMT+0000 (UTC) 8284 15
169 Sun Jan 11 2015 19:18:59 GMT+0000 (UTC) 8284 15
170 Sun Jan 11 2015 19:35:11 GMT+0000 (UTC) 8521 15
171 Sun Jan 11 2015 19:51:16 GMT+0000 (UTC) 8521 15
172 Sun Jan 11 2015 20:07:31 GMT+0000 (UTC) 8521 15
173 Sun Jan 11 2015 20:23:40 GMT+0000 (UTC) 8521 15
174 Sun Jan 11 2015 20:39:44 GMT+0000 (UTC) 8633 15
175 Sun Jan 11 2015 20:55:43 GMT+0000 (UTC) 8633 15
176 Sun Jan 11 2015 21:11:51 GMT+0000 (UTC) 8633 15
177 Sun Jan 11 2015 21:28:43 GMT+0000 (UTC) 8639 15
178 Sun Jan 11 2015 21:45:39 GMT+0000 (UTC) 8639 15
179 Sun Jan 11 2015 22:01:47 GMT+0000 (UTC) 8639 15
180 Sun Jan 11 2015 22:19:06 GMT+0000 (UTC) 8639 15
181 Sun Jan 11 2015 22:36:19 GMT+0000 (UTC) 8695 15
182 Sun Jan 11 2015 22:52:26 GMT+0000 (UTC) 8695 15
183 Sun Jan 11 2015 23:08:39 GMT+0000 (UTC) 8695 15
184 Sun Jan 11 2015 23:24:53 GMT+0000 (UTC) 8695 15
185 Sun Jan 11 2015 23:40:51 GMT+0000 (UTC) 8735 15
186 Sun Jan 11 2015 23:56:57 GMT+0000 (UTC) 8735 15
187 Mon Jan 12 2015 00:13:08 GMT+0000 (UTC) 8735 15
188 Mon Jan 12 2015 00:29:17 GMT+0000 (UTC) 8735 15
189 Mon Jan 12 2015 00:45:16 GMT+0000 (UTC) 8931 15
190 Mon Jan 12 2015 01:01:36 GMT+0000 (UTC) 8931 15
191 Mon Jan 12 2015 01:17:50 GMT+0000 (UTC) 8931 14 -1
192 Mon Jan 12 2015 01:33:52 GMT+0000 (UTC) 9403 14
193 Mon Jan 12 2015 01:49:55 GMT+0000 (UTC) 9403 14
194 Mon Jan 12 2015 02:06:07 GMT+0000 (UTC) 9403 14
195 Mon Jan 12 2015 02:22:23 GMT+0000 (UTC) 9403 14
196 Mon Jan 12 2015 02:38:30 GMT+0000 (UTC) 10241 14
197 Mon Jan 12 2015 02:54:33 GMT+0000 (UTC) 10241 14
198 Mon Jan 12 2015 03:10:31 GMT+0000 (UTC) 10241 14
199 Mon Jan 12 2015 03:26:29 GMT+0000 (UTC) 10241 14
200 Mon Jan 12 2015 03:42:41 GMT+0000 (UTC) 6380 14
201 Mon Jan 12 2015 03:59:01 GMT+0000 (UTC) 6380 14
202 Mon Jan 12 2015 04:15:11 GMT+0000 (UTC) 6380 14
203 Mon Jan 12 2015 04:31:12 GMT+0000 (UTC) 7348 14
204 Mon Jan 12 2015 04:47:29 GMT+0000 (UTC) 7348 14
205 Mon Jan 12 2015 05:03:18 GMT+0000 (UTC) 7348 14
206 Mon Jan 12 2015 05:19:10 GMT+0000 (UTC) 7348 14
207 Mon Jan 12 2015 05:35:07 GMT+0000 (UTC) 8244 14
208 Mon Jan 12 2015 05:51:10 GMT+0000 (UTC) 8244 14
209 Mon Jan 12 2015 06:07:10 GMT+0000 (UTC) 8244 14
210 Mon Jan 12 2015 06:23:14 GMT+0000 (UTC) 8244 14
211 Mon Jan 12 2015 06:39:29 GMT+0000 (UTC) 9200 14
212 Mon Jan 12 2015 06:55:36 GMT+0000 (UTC) 9200 14
213 Mon Jan 12 2015 07:11:31 GMT+0000 (UTC) 9200 14
214 Mon Jan 12 2015 07:27:44 GMT+0000 (UTC) 9200 14
215 Mon Jan 12 2015 07:43:44 GMT+0000 (UTC) 10237 14
216 Mon Jan 12 2015 07:59:51 GMT+0000 (UTC) 10237 14
217 Mon Jan 12 2015 08:15:55 GMT+0000 (UTC) 10237 14
218 Mon Jan 12 2015 08:31:53 GMT+0000 (UTC) 11335 14
219 Mon Jan 12 2015 08:48:00 GMT+0000 (UTC) 11335 14
220 Mon Jan 12 2015 09:03:54 GMT+0000 (UTC) 11335 14
221 Mon Jan 12 2015 09:19:49 GMT+0000 (UTC) 11335 14
222 Mon Jan 12 2015 09:36:02 GMT+0000 (UTC) 12556 14
223 Mon Jan 12 2015 09:52:33 GMT+0000 (UTC) 12556 14
224 Mon Jan 12 2015 10:08:25 GMT+0000 (UTC) 12556 14
225 Mon Jan 12 2015 10:24:45 GMT+0000 (UTC) 12556 14
226 Mon Jan 12 2015 10:41:12 GMT+0000 (UTC) 13886 14
227 Mon Jan 12 2015 10:57:18 GMT+0000 (UTC) 13886 14
228 Mon Jan 12 2015 11:13:44 GMT+0000 (UTC) 13886 14
229 Mon Jan 12 2015 11:30:01 GMT+0000 (UTC) 15020 14
230 Mon Jan 12 2015 11:45:58 GMT+0000 (UTC) 15020 14
231 Mon Jan 12 2015 12:01:47 GMT+0000 (UTC) 15020 14
232 Mon Jan 12 2015 12:18:07 GMT+0000 (UTC) 15020 14
233 Mon Jan 12 2015 12:34:18 GMT+0000 (UTC) 16087 14
234 Mon Jan 12 2015 12:50:17 GMT+0000 (UTC) 16087 14
235 Mon Jan 12 2015 13:06:19 GMT+0000 (UTC) 16087 14
236 Mon Jan 12 2015 13:22:19 GMT+0000 (UTC) 16087 14
237 Mon Jan 12 2015 13:38:41 GMT+0000 (UTC) 17478 14
238 Mon Jan 12 2015 13:54:45 GMT+0000 (UTC) 17478 14
239 Mon Jan 12 2015 14:11:04 GMT+0000 (UTC) 17478 14
240 Mon Jan 12 2015 14:26:58 GMT+0000 (UTC) 17478 14
241 Mon Jan 12 2015 14:43:16 GMT+0000 (UTC) 19333 14
242 Mon Jan 12 2015 14:59:24 GMT+0000 (UTC) 19333 14
243 Mon Jan 12 2015 15:15:30 GMT+0000 (UTC) 19333 14
244 Mon Jan 12 2015 15:31:38 GMT+0000 (UTC) 21418 13 -1
245 Mon Jan 12 2015 15:47:48 GMT+0000 (UTC) 21418 13
246 Mon Jan 12 2015 16:03:47 GMT+0000 (UTC) 21418 13
247 Mon Jan 12 2015 16:19:55 GMT+0000 (UTC) 21418 13
248 Mon Jan 12 2015 16:35:50 GMT+0000 (UTC) 23082 13
249 Mon Jan 12 2015 16:52:10 GMT+0000 (UTC) 23082 13
250 Mon Jan 12 2015 17:08:32 GMT+0000 (UTC) 23082 13
251 Mon Jan 12 2015 17:24:25 GMT+0000 (UTC) 23082 13
252 Mon Jan 12 2015 17:40:27 GMT+0000 (UTC) 23988 13
253 Mon Jan 12 2015 17:56:32 GMT+0000 (UTC) 23988 13
254 Mon Jan 12 2015 18:12:32 GMT+0000 (UTC) 23988 13
255 Mon Jan 12 2015 18:28:53 GMT+0000 (UTC) 24181 13
256 Mon Jan 12 2015 18:45:05 GMT+0000 (UTC) 24181 13
257 Mon Jan 12 2015 19:01:22 GMT+0000 (UTC) 24181 13
258 Mon Jan 12 2015 19:17:10 GMT+0000 (UTC) 24181 13
259 Mon Jan 12 2015 19:33:13 GMT+0000 (UTC) 23793 13
260 Mon Jan 12 2015 19:49:16 GMT+0000 (UTC) 23793 13
261 Mon Jan 12 2015 20:07:33 GMT+0000 (UTC) 23793 13
262 Mon Jan 12 2015 20:24:01 GMT+0000 (UTC) 23793 13
263 Mon Jan 12 2015 20:40:14 GMT+0000 (UTC) 23193 13
264 Mon Jan 12 2015 20:56:15 GMT+0000 (UTC) 23193 13
265 Mon Jan 12 2015 21:12:19 GMT+0000 (UTC) 23193 13
266 Mon Jan 12 2015 21:28:33 GMT+0000 (UTC) 22496 13
267 Mon Jan 12 2015 21:46:02 GMT+0000 (UTC) 22496 13
268 Mon Jan 12 2015 22:04:38 GMT+0000 (UTC) 22496 13
269 Mon Jan 12 2015 22:20:33 GMT+0000 (UTC) 22496 12 -1
270 Mon Jan 12 2015 22:37:15 GMT+0000 (UTC) 21877 12
271 Mon Jan 12 2015 22:53:46 GMT+0000 (UTC) 21877 12
272 Mon Jan 12 2015 23:10:02 GMT+0000 (UTC) 21877 13 1
273 Mon Jan 12 2015 23:26:10 GMT+0000 (UTC) 21512 13
274 Mon Jan 12 2015 23:41:28 GMT+0000 (UTC) 21512 12 -1
275 Mon Jan 12 2015 23:56:37 GMT+0000 (UTC) 21512 12
276 Tue Jan 13 2015 00:11:58 GMT+0000 (UTC) 21512 12
277 Tue Jan 13 2015 00:27:06 GMT+0000 (UTC) 21512 12
278 Tue Jan 13 2015 00:43:27 GMT+0000 (UTC) 9852 12
279 Tue Jan 13 2015 00:59:29 GMT+0000 (UTC) 9852 12
280 Tue Jan 13 2015 01:14:52 GMT+0000 (UTC) 9852 12
281 Tue Jan 13 2015 01:30:16 GMT+0000 (UTC) 5918 12
282 Tue Jan 13 2015 01:45:50 GMT+0000 (UTC) 5918 12
283 Tue Jan 13 2015 02:01:19 GMT+0000 (UTC) 5918 12
284 Tue Jan 13 2015 02:17:30 GMT+0000 (UTC) 5918 12
285 Tue Jan 13 2015 02:33:41 GMT+0000 (UTC) 6536 12
286 Tue Jan 13 2015 02:49:50 GMT+0000 (UTC) 6536 12
287 Tue Jan 13 2015 03:05:55 GMT+0000 (UTC) 6536 12
288 Tue Jan 13 2015 03:21:51 GMT+0000 (UTC) 6536 12
289 Tue Jan 13 2015 03:38:03 GMT+0000 (UTC) 7348 12
290 Tue Jan 13 2015 03:54:04 GMT+0000 (UTC) 7348 12
291 Tue Jan 13 2015 04:10:09 GMT+0000 (UTC) 7348 12
292 Tue Jan 13 2015 04:26:16 GMT+0000 (UTC) 7348 12
293 Tue Jan 13 2015 04:42:13 GMT+0000 (UTC) 8247 12
294 Tue Jan 13 2015 04:58:13 GMT+0000 (UTC) 8247 12
295 Tue Jan 13 2015 05:14:17 GMT+0000 (UTC) 8247 12
296 Tue Jan 13 2015 05:30:12 GMT+0000 (UTC) 9214 12
297 Tue Jan 13 2015 05:46:06 GMT+0000 (UTC) 9214 12
298 Tue Jan 13 2015 06:02:17 GMT+0000 (UTC) 9214 12
299 Tue Jan 13 2015 06:18:25 GMT+0000 (UTC) 9214 12
300 Tue Jan 13 2015 06:34:27 GMT+0000 (UTC) 10271 12
301 Tue Jan 13 2015 06:50:23 GMT+0000 (UTC) 10271 11 -1
302 Tue Jan 13 2015 07:06:24 GMT+0000 (UTC) 10271 11
303 Tue Jan 13 2015 07:22:33 GMT+0000 (UTC) 10271 11
304 Tue Jan 13 2015 07:38:28 GMT+0000 (UTC) 11385 11
305 Tue Jan 13 2015 07:54:37 GMT+0000 (UTC) 11385 11
306 Tue Jan 13 2015 08:10:48 GMT+0000 (UTC) 11385 11
307 Tue Jan 13 2015 08:27:43 GMT+0000 (UTC) 11385 11
308 Tue Jan 13 2015 08:43:38 GMT+0000 (UTC) 6939 11
309 Tue Jan 13 2015 08:59:37 GMT+0000 (UTC) 6939 11
310 Tue Jan 13 2015 09:15:47 GMT+0000 (UTC) 6939 11
311 Tue Jan 13 2015 09:31:39 GMT+0000 (UTC) 7724 11
312 Tue Jan 13 2015 09:47:41 GMT+0000 (UTC) 7724 11
313 Tue Jan 13 2015 10:03:33 GMT+0000 (UTC) 7724 11
314 Tue Jan 13 2015 10:19:35 GMT+0000 (UTC) 7724 11
315 Tue Jan 13 2015 10:35:53 GMT+0000 (UTC) 8539 11
316 Tue Jan 13 2015 10:52:07 GMT+0000 (UTC) 8539 11
317 Tue Jan 13 2015 11:08:03 GMT+0000 (UTC) 8539 11
318 Tue Jan 13 2015 11:24:13 GMT+0000 (UTC) 8539 11
319 Tue Jan 13 2015 11:40:18 GMT+0000 (UTC) 9390 11
320 Tue Jan 13 2015 11:56:28 GMT+0000 (UTC) 9390 11
321 Tue Jan 13 2015 12:12:26 GMT+0000 (UTC) 9390 11
322 Tue Jan 13 2015 12:28:09 GMT+0000 (UTC) 10353 11
323 Tue Jan 13 2015 12:44:30 GMT+0000 (UTC) 10353 11
324 Tue Jan 13 2015 13:00:30 GMT+0000 (UTC) 10353 11
325 Tue Jan 13 2015 13:16:22 GMT+0000 (UTC) 10353 11
326 Tue Jan 13 2015 13:32:49 GMT+0000 (UTC) 11539 11
327 Tue Jan 13 2015 13:48:56 GMT+0000 (UTC) 11539 11
328 Tue Jan 13 2015 14:04:52 GMT+0000 (UTC) 11539 11
329 Tue Jan 13 2015 14:20:47 GMT+0000 (UTC) 11539 11
330 Tue Jan 13 2015 14:37:06 GMT+0000 (UTC) 13108 11
331 Tue Jan 13 2015 14:52:47 GMT+0000 (UTC) 13108 11
332 Tue Jan 13 2015 15:08:54 GMT+0000 (UTC) 13108 11
333 Tue Jan 13 2015 15:24:53 GMT+0000 (UTC) 13108 11
334 Tue Jan 13 2015 15:40:49 GMT+0000 (UTC) 14851 11
335 Tue Jan 13 2015 15:59:02 GMT+0000 (UTC) 14851 11
336 Tue Jan 13 2015 16:15:00 GMT+0000 (UTC) 14851 11
337 Tue Jan 13 2015 16:31:00 GMT+0000 (UTC) 16445 11
338 Tue Jan 13 2015 16:47:19 GMT+0000 (UTC) 16445 12 1
339 Tue Jan 13 2015 17:03:16 GMT+0000 (UTC) 16445 12
340 Tue Jan 13 2015 17:19:13 GMT+0000 (UTC) 16445 12
341 Tue Jan 13 2015 17:35:33 GMT+0000 (UTC) 17500 12
342 Tue Jan 13 2015 17:51:37 GMT+0000 (UTC) 17500 12
343 Tue Jan 13 2015 18:07:52 GMT+0000 (UTC) 17500 12
344 Tue Jan 13 2015 18:23:43 GMT+0000 (UTC) 17500 12
345 Tue Jan 13 2015 18:40:09 GMT+0000 (UTC) 17895 12
346 Tue Jan 13 2015 18:56:07 GMT+0000 (UTC) 17895 12
347 Tue Jan 13 2015 19:12:24 GMT+0000 (UTC) 17895 12
348 Tue Jan 13 2015 19:28:10 GMT+0000 (UTC) 17911 12
349 Tue Jan 13 2015 19:44:35 GMT+0000 (UTC) 17911 12
350 Tue Jan 13 2015 20:00:52 GMT+0000 (UTC) 17911 12
351 Tue Jan 13 2015 20:17:11 GMT+0000 (UTC) 17911 12
352 Tue Jan 13 2015 20:33:18 GMT+0000 (UTC) 17748 12
353 Tue Jan 13 2015 20:49:19 GMT+0000 (UTC) 17748 12
354 Tue Jan 13 2015 21:05:36 GMT+0000 (UTC) 17748 12
355 Tue Jan 13 2015 21:22:11 GMT+0000 (UTC) 17748 12
356 Tue Jan 13 2015 21:38:45 GMT+0000 (UTC) 17477 12
357 Tue Jan 13 2015 21:55:01 GMT+0000 (UTC) 17477 11 -1
358 Tue Jan 13 2015 22:11:14 GMT+0000 (UTC) 17477 11
359 Tue Jan 13 2015 22:27:47 GMT+0000 (UTC) 17276 11
360 Tue Jan 13 2015 22:43:59 GMT+0000 (UTC) 17276 11
361 Tue Jan 13 2015 23:00:04 GMT+0000 (UTC) 17276 11
362 Tue Jan 13 2015 23:16:06 GMT+0000 (UTC) 17276 11
363 Tue Jan 13 2015 23:32:15 GMT+0000 (UTC) 8058 11
364 Tue Jan 13 2015 23:48:00 GMT+0000 (UTC) 8058 11
365 Wed Jan 14 2015 00:04:06 GMT+0000 (UTC) 8058 11
366 Wed Jan 14 2015 00:20:08 GMT+0000 (UTC) 8058 11
367 Wed Jan 14 2015 00:36:24 GMT+0000 (UTC) 8525 11
368 Wed Jan 14 2015 00:52:32 GMT+0000 (UTC) 8525 11
369 Wed Jan 14 2015 01:09:16 GMT+0000 (UTC) 8525 11
370 Wed Jan 14 2015 01:25:46 GMT+0000 (UTC) 8525 11
371 Wed Jan 14 2015 01:41:39 GMT+0000 (UTC) 9207 11
372 Wed Jan 14 2015 01:57:26 GMT+0000 (UTC) 9207 11
373 Wed Jan 14 2015 02:13:40 GMT+0000 (UTC) 9207 11
374 Wed Jan 14 2015 02:29:51 GMT+0000 (UTC) 10123 11
375 Wed Jan 14 2015 02:45:48 GMT+0000 (UTC) 10123 11
376 Wed Jan 14 2015 03:19:15 GMT+0000 (UTC) 10123 11
377 Wed Jan 14 2015 03:35:18 GMT+0000 (UTC) 11319 11
378 Wed Jan 14 2015 03:51:06 GMT+0000 (UTC) 11319 11
379 Wed Jan 14 2015 04:07:24 GMT+0000 (UTC) 11319 11
380 Wed Jan 14 2015 04:23:17 GMT+0000 (UTC) 11319 11
381 Wed Jan 14 2015 04:39:23 GMT+0000 (UTC) 12585 11
382 Wed Jan 14 2015 04:55:48 GMT+0000 (UTC) 12585 11
383 Wed Jan 14 2015 05:12:22 GMT+0000 (UTC) 12585 11
384 Wed Jan 14 2015 05:28:27 GMT+0000 (UTC) 13925 11
385 Wed Jan 14 2015 05:44:25 GMT+0000 (UTC) 13925 11
386 Wed Jan 14 2015 06:00:25 GMT+0000 (UTC) 13925 11
387 Wed Jan 14 2015 06:16:45 GMT+0000 (UTC) 13925 11
388 Wed Jan 14 2015 06:32:33 GMT+0000 (UTC) 15208 11
389 Wed Jan 14 2015 06:48:27 GMT+0000 (UTC) 15208 10 -1
390 Wed Jan 14 2015 07:04:35 GMT+0000 (UTC) 15208 10
391 Wed Jan 14 2015 07:20:30 GMT+0000 (UTC) 15208 10
392 Wed Jan 14 2015 07:36:19 GMT+0000 (UTC) 16501 10
393 Wed Jan 14 2015 07:52:21 GMT+0000 (UTC) 16501 10
394 Wed Jan 14 2015 08:08:18 GMT+0000 (UTC) 16501 10
395 Wed Jan 14 2015 08:24:18 GMT+0000 (UTC) 16501 10
396 Wed Jan 14 2015 08:40:10 GMT+0000 (UTC) 8673 10
397 Wed Jan 14 2015 08:56:41 GMT+0000 (UTC) 8673 10
398 Wed Jan 14 2015 09:12:28 GMT+0000 (UTC) 8673 9 -1
399 Wed Jan 14 2015 09:28:31 GMT+0000 (UTC) 8673 9
400 Wed Jan 14 2015 09:44:42 GMT+0000 (UTC) 9655 9
401 Wed Jan 14 2015 10:00:27 GMT+0000 (UTC) 9655 9
402 Wed Jan 14 2015 10:16:26 GMT+0000 (UTC) 9655 9
403 Wed Jan 14 2015 10:32:08 GMT+0000 (UTC) 10706 9
404 Wed Jan 14 2015 10:48:08 GMT+0000 (UTC) 10706 9
405 Wed Jan 14 2015 11:04:15 GMT+0000 (UTC) 10706 9
406 Wed Jan 14 2015 11:20:13 GMT+0000 (UTC) 10706 9
407 Wed Jan 14 2015 11:36:25 GMT+0000 (UTC) 6790 9
408 Wed Jan 14 2015 11:52:17 GMT+0000 (UTC) 6790 9
409 Wed Jan 14 2015 12:25:00 GMT+0000 (UTC) 6790 9
410 Wed Jan 14 2015 12:41:19 GMT+0000 (UTC) 7548 9
411 Wed Jan 14 2015 12:57:17 GMT+0000 (UTC) 7548 9
412 Wed Jan 14 2015 13:13:01 GMT+0000 (UTC) 7548 9
413 Wed Jan 14 2015 13:29:13 GMT+0000 (UTC) 8557 9
414 Wed Jan 14 2015 13:45:02 GMT+0000 (UTC) 8557 9
415 Wed Jan 14 2015 14:01:08 GMT+0000 (UTC) 8557 9
416 Wed Jan 14 2015 14:17:16 GMT+0000 (UTC) 8557 9
417 Wed Jan 14 2015 14:33:31 GMT+0000 (UTC) 9816 9
418 Wed Jan 14 2015 14:49:32 GMT+0000 (UTC) 9816 9
419 Wed Jan 14 2015 15:05:36 GMT+0000 (UTC) 9816 9
420 Wed Jan 14 2015 15:21:32 GMT+0000 (UTC) 9816 9
421 Wed Jan 14 2015 15:37:45 GMT+0000 (UTC) 11332 9
422 Wed Jan 14 2015 15:53:45 GMT+0000 (UTC) 11332 9
423 Wed Jan 14 2015 16:09:52 GMT+0000 (UTC) 11332 9
424 Wed Jan 14 2015 16:25:39 GMT+0000 (UTC) 11332 9
425 Wed Jan 14 2015 16:41:54 GMT+0000 (UTC) 12733 9
426 Wed Jan 14 2015 16:58:01 GMT+0000 (UTC) 12733 9
427 Wed Jan 14 2015 17:13:51 GMT+0000 (UTC) 12733 9
428 Wed Jan 14 2015 17:29:55 GMT+0000 (UTC) 13714 9
429 Wed Jan 14 2015 17:45:41 GMT+0000 (UTC) 13714 9
430 Wed Jan 14 2015 18:01:31 GMT+0000 (UTC) 13714 9
431 Wed Jan 14 2015 18:17:30 GMT+0000 (UTC) 13714 9
432 Wed Jan 14 2015 18:33:54 GMT+0000 (UTC) 14293 9
433 Wed Jan 14 2015 18:49:54 GMT+0000 (UTC) 14293 9
434 Wed Jan 14 2015 19:07:22 GMT+0000 (UTC) 14293 9
435 Wed Jan 14 2015 19:23:17 GMT+0000 (UTC) 14293 9
436 Wed Jan 14 2015 19:39:13 GMT+0000 (UTC) 14293 9
437 Wed Jan 14 2015 19:55:07 GMT+0000 (UTC) 14293 9
438 Wed Jan 14 2015 20:11:38 GMT+0000 (UTC) 14293 9
439 Wed Jan 14 2015 20:27:50 GMT+0000 (UTC) 14587 9
440 Wed Jan 14 2015 20:43:55 GMT+0000 (UTC) 14587 9
441 Wed Jan 14 2015 21:00:01 GMT+0000 (UTC) 14587 9
442 Wed Jan 14 2015 21:15:53 GMT+0000 (UTC) 14587 9
443 Wed Jan 14 2015 21:32:27 GMT+0000 (UTC) 14518 9
444 Wed Jan 14 2015 21:50:25 GMT+0000 (UTC) 14518 9
445 Wed Jan 14 2015 22:06:19 GMT+0000 (UTC) 14518 9
446 Wed Jan 14 2015 22:22:18 GMT+0000 (UTC) 14518 9
447 Wed Jan 14 2015 22:39:35 GMT+0000 (UTC) 14491 9
448 Wed Jan 14 2015 22:55:37 GMT+0000 (UTC) 14491 9
449 Wed Jan 14 2015 23:11:33 GMT+0000 (UTC) 14491 9
450 Wed Jan 14 2015 23:27:27 GMT+0000 (UTC) 14491 9
451 Wed Jan 14 2015 23:43:33 GMT+0000 (UTC) 14662 9
452 Wed Jan 14 2015 23:59:36 GMT+0000 (UTC) 14662 9
453 Thu Jan 15 2015 00:15:49 GMT+0000 (UTC) 14662 9
454 Thu Jan 15 2015 00:31:50 GMT+0000 (UTC) 15165 9
455 Thu Jan 15 2015 00:48:01 GMT+0000 (UTC) 15165 9
456 Thu Jan 15 2015 01:03:55 GMT+0000 (UTC) 15165 9
457 Thu Jan 15 2015 01:19:42 GMT+0000 (UTC) 15165 9
458 Thu Jan 15 2015 01:35:50 GMT+0000 (UTC) 15921 9
459 Thu Jan 15 2015 01:51:49 GMT+0000 (UTC) 15921 9
460 Thu Jan 15 2015 02:08:00 GMT+0000 (UTC) 15921 9
461 Thu Jan 15 2015 02:23:49 GMT+0000 (UTC) 15921 9
462 Thu Jan 15 2015 02:39:48 GMT+0000 (UTC) 17038 9
463 Thu Jan 15 2015 02:55:56 GMT+0000 (UTC) 17038 9
464 Thu Jan 15 2015 03:12:06 GMT+0000 (UTC) 17038 9
465 Thu Jan 15 2015 03:27:51 GMT+0000 (UTC) 18520 8 -1
466 Thu Jan 15 2015 03:43:48 GMT+0000 (UTC) 18520 8
467 Thu Jan 15 2015 03:59:52 GMT+0000 (UTC) 18520 8
468 Thu Jan 15 2015 04:15:59 GMT+0000 (UTC) 18520 8
469 Thu Jan 15 2015 04:32:03 GMT+0000 (UTC) 18520 8
470 Thu Jan 15 2015 04:48:01 GMT+0000 (UTC) 20107 8
471 Thu Jan 15 2015 05:04:15 GMT+0000 (UTC) 20107 8
472 Thu Jan 15 2015 05:20:03 GMT+0000 (UTC) 20107 7 -1
473 Thu Jan 15 2015 05:35:57 GMT+0000 (UTC) 10032 7
474 Thu Jan 15 2015 05:52:05 GMT+0000 (UTC) 10032 6 -1
475 Thu Jan 15 2015 06:08:20 GMT+0000 (UTC) 10032 6
476 Thu Jan 15 2015 06:24:21 GMT+0000 (UTC) 10032 6
477 Thu Jan 15 2015 06:40:04 GMT+0000 (UTC) 11254 6
478 Thu Jan 15 2015 06:56:25 GMT+0000 (UTC) 11254 6
479 Thu Jan 15 2015 07:12:23 GMT+0000 (UTC) 11254 6
480 Thu Jan 15 2015 07:28:21 GMT+0000 (UTC) 4304 6
481 Thu Jan 15 2015 07:44:25 GMT+0000 (UTC) 4304 6
482 Thu Jan 15 2015 08:06:30 GMT+0000 (UTC) 4304 6
483 Thu Jan 15 2015 09:03:10 GMT+0000 (UTC) 4966 6
484 Thu Jan 15 2015 09:22:45 GMT+0000 (UTC) 4966 5 -1
485 Thu Jan 15 2015 09:38:57 GMT+0000 (UTC) 5655 5
486 Thu Jan 15 2015 09:55:39 GMT+0000 (UTC) 5655 5
487 Thu Jan 15 2015 10:15:15 GMT+0000 (UTC) 5655 5
488 Thu Jan 15 2015 10:31:12 GMT+0000 (UTC) 6384 5
489 Thu Jan 15 2015 10:47:28 GMT+0000 (UTC) 6384 5
490 Thu Jan 15 2015 11:03:28 GMT+0000 (UTC) 6384 4 -1
491 Thu Jan 15 2015 11:21:10 GMT+0000 (UTC) 6384 4
492 Thu Jan 15 2015 11:37:37 GMT+0000 (UTC) 4623 4
493 Thu Jan 15 2015 11:53:55 GMT+0000 (UTC) 4623 4
494 Thu Jan 15 2015 12:10:04 GMT+0000 (UTC) 4623 4
495 Thu Jan 15 2015 12:26:17 GMT+0000 (UTC) 5225 4
496 Thu Jan 15 2015 12:41:46 GMT+0000 (UTC) 5225 4

見えてくるもの



 観察時間である、日本時間の2015年01月10日 07時25分から01月15日 21時41分までで、在庫数は22個減って、10個増えています。単純に考えると、在庫の減は売れた数で、増は入荷した数だと思います。ただ、在庫の増については、キャンセルも考えられます。そのあたりの事情は外から見えないので、検討の対象外とします。
 そしてデータを見ていると、次の傾向が解ります。

  • 在庫の更新は、リアルタイム
  • 順位の更新は、1時間ごと。また、直前の1時間前のデータではなく、2時間前のデータが反映される
  • 休日夜間等の時間帯によって、ランクの増減幅が異なる
  • 一日に1〜2冊程度の売上で、10,000〜20,000位くらい

感想



 今回は、1冊の本を対象に在庫とランキングの関係をみていました。対象を広げて、Amazonの上位10万冊くらいのデータを定期的に取得すれば、もっと見えてくるものがありそうです。ただし、15分おきに5日ほど取得したとすれば、10万×96×5と4,800万回の取得が必要です。間違いなく怒られそうなので、自重しておきます。一度解析すれば、マーケティングデータを取得する際の推定とかに使えそうな気がしますね。

See Also
Amazonのランキングの不思議
プログラミング・レスで5分でサックリWebスクレイピング「kimonolabs」
『Rubyによるクローラー開発技法』を書きました

Amazonランキングの謎を解く: 確率的な順位付けが教える売上の構造 (DOJIN選書)

Amazonランキングの謎を解く: 確率的な順位付けが教える売上の構造 (DOJIN選書)

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

2015年の注目技術

 2015年の技術的な展望というか、どの辺りを注力するかのメモです。もっと簡単に言うと、やりたいことです。

 インフラ面で言うと、2014年はクラウドやChefの台頭でもやもやしてたのが、Immutable Infrastructureという概念で方向性がはっきりしてきたと思います。それに加えて、Dockerあたりがブレイクスルーだったのではないでしょうか。
 では、2015年は何か?最近、IoTなどよく聞きますが、本質的には2000年くらいからずっと進んできた、何でもインターネットにつながる世界が低コストで実現できる状態になっているのだと思います。
 そうなるとインフラのあり方も、また少し変わってくると思います。従来はクラウドだAWSだといっても、オンプレの延長で移行していたケースが多かったと思います。それがよりクラウドネイティブな作り方に変わってくるのではないでしょうか。具体的に言うと、EC2のインスタンスを立ち上げてゴニョゴニョするというやり方はコスト的にもスピード的のも見合わないというような状況になると思います。
 その辺りを考えると、注目の技術はAWSで言うとLambdaやDynamoDB・S3のように、フルマネージドのコンピュート・リソースになります。またそれらのリソースをクライアント側から直接扱う為の認証・認可の仕組みです。CognitoであったりIAM Roleの使い方ですね。その辺りのアーキテクチャを見てると、モバイル関係が先行しているしヒントになることが多いです。
 インフラのあり方が根本的に変わる、その動き始めの年になりそうな予感です。今年は、もう一度モバイルを切り口に、じっくり今後のアーキテクチャを考えてみようかと思っています。ということで、Cognitoで遊びだしています。

2015年の目標

 忘れないように2015年の目標をメモっておきます。去年は、書いて1ヶ月で忘れました。

本を1〜2冊出版する

 1冊は、現在執筆中。可能であれば、もう1冊くらい出したいです。一人で書くと負担が大きすぎるので、チームで書くことを前提です。

Kindle本を書く

 出版社からの本とは別に、個人でKindle本を書いてみようと思います。分量としては40ページくらいで、好きなテーマで書いてみたいです。書きたいテーマとしては幾つかあるので、夏くらいに時間を作る予定です。

モバイル・アプリ再入門

 CogniteやAppStream,LambdaなどAWSの動向をみていると、今年はモバイル・アプリの作り方が根本的に変わりそうな気がしてきています。いい機会なので再度モバイル・アプリ開発に挑戦して、アーキテクチャを考えてみます。

資格試験

 AWSの資格試験がいろいろ新設されたものの、全然受けていないので夏くらいまでには全部とりたいです。あとRubyのお作法をちゃんと学ぶためにも、Rubyも受けてみようとおもいます。

ワークバランス

 仕事・家庭・個人ワークのバランスがとれていません。それぞれ適正な形にできるように工夫してみます。具体的にいうと仕事の時間減らすしかないので、質を高めてアウトプットの総量が変わらないよう目指します。

ワイン・エキスパート

 申し込みが6月まで、1次試験8月、2次試験9月。まずは申し込みから!!

記録をしっかり

 ワインや本の感想など、少しは残せないと後で振り返れません。毎年宣言しているものの、実現できていないので、今年こそは仕組み見なおして改善します。

英会話

 今年こそはRe:Inventに行こうと思うので、英会話を練習して現地の人と議論できるようにしたいです。Skype講座でも受けてみようかと思います。

 犬飼いたいです。問題は住居になるので、方策考えます。

まとめ



 忘れないように目につくところに貼っておきます。別途、Googleのスプレッドシートで管理しているものもあるのですが、それは定期的に見返しているので意外に実現してたりします。

See Also:
2014年の目標

2014年の日記の振り返り

 2015年になったので、日記の振り返りです。トータルのアクセス数、328,411件です。2013年に比べると、なんと半減です。直接的な理由としては、はてなダイアリーからはてなブログ+独自ドメインに変更したことにより、検索エンジン経由のアクセスが激減したことです。平均して700〜800くらいあった検索経由の流入が、150程度に減りました。ちょっと不可解なこともあるので、そのうちに調査してみようと思います。
f:id:dkfj:20150102132843p:plain

ブログのエントリー数と人気エントリー



 2014年に書いたエントリー数は82件で、2013年の134件に較べて4割減です。昨年は初めての執筆をしてたということもあり、とにかく時間がなかったです。しかし、時間がないなりのアウトプット術もあるので、その辺りを今年の課題にしたいとおもいます。


 

順位 タイトル 掲載日 ブックマーク数
1 手動でサーバの設定をすることを禁ずる。入門Chef Solo 2013年3月17日
2 Excel VBA+IEでのスクレイピング 2014年12月28日
3 作って覚える転置インデックス、「検索エンジン自作入門」 2014年9月22日
4 何故JSONPでJavaScriptのクロスドメイン通信ができるのか? 2013年11月10日
5 メモリー増設の参考に!!Dellのモデル別、最大搭載メモリー一覧 2012年6月5日
6 AWSのアカウント管理の話 2014年12月7日
7 クローラーとAWSが出会ったら?第3回Webスクレイピング勉強会@東京 2014年10月28日
8 4,000円でMacbookのバッテリーを交換するの話。或いはMacbookの交換バッテリー一覧 2012年6月22日
9 Lambdaで作るクローラー/スクレイピング 2014年12月24日
10 Mac miniを買ったった! (Late 2014 MGEN2J) 2014年10月19日

 検索経由の閲覧が激減したことにより、上位に出てくるのは今年の記事が多くなりました。特に2位の「Excel VBA+IEでのスクレイピング」なんて、書いたのが2014/12/28で3日間のみでこの結果です。バズ効果が凄いのか、今までの検索経由の効果が凄いのか判断に迷うところです。結論としては、昨年は1万ヒット超えがゴロゴロしてたのが、今年は全然ないのでアクセス低迷の結果にはてなブックマーク効果が見えやすくなったというところでしょう。

 ちなみに検索語については、このキーワードがダントツでした。「moneytree 危険」
リンク先のページについては、この「金融機関の口座集約アプリの危険性について」なのですが、記事中に一言もmoneytreeさんの名前を出してないのに検索結果に出てくるというところに、Googleの恐ろしさが垣間見えます。特定のサービスではなく、口座集約アプリ全般に関して危険だなぁと思っているだけです。便利なのは解っているので、スクレイピングではなくシステム連携したサービスを出してほしいものです。

まとめ



 石の上にも三年ではないですが、何事も続けていれば思いもかけないようなことを引き寄せることもあるようです。私の場合は、執筆の依頼でした。また勉強会でも、たまにブログ読んでいますと言ってくれる人もいます。そんな訳で、自分のペースでゆっくり続けていきたいと思います。
 しかしまぁ、検索順位低下については調べて対策うたねばなぁという状態です。それについても、どっかでまとめて公開します。自著である「Rubyによるクローラー開発技法」が、全く検索上位に出てこないのだけは何とかしたいです。

Excel VBA+IEでのスクレイピング

 書くと宣言しながら、すっぽかしていたクローラー/スクレイピング Advent Calendar 2014の11日目です。ExcelのVBAで、IEの操作が出来ます。またその中の機能にDOM操作があります。この二つがあれば、Excelだけでスクレイピングできますよという話です。
 何を隠そう、私が初めてスクレイピングに手を染めたのはこのExcel VBAスクレイピングでした。毎月定期的に所定のデータを観測するという仕事があって、面倒くさくて仕方がない私は記録用のExcelを魔改造して勝手に取得するようにしました。1時間くらい掛かってた作業も、ボタンポチになったので随分楽になったと記憶しています。(結局、ボタンを押すのも面倒くさくなって、毎日サーバサイドで動かすようにしましたが)
 スクレイピングの手始めにピッタリのExcel VBAスクレイピングです。環境の用意が簡単なので、ノンプログラマーでも何とかなるのではとおもいます。

Excel VBA+IEスクレイピングでの主要な機能



 Excel VBAでスクレイピングする場合は、下記のクラス・メソッドを利用します。一部バージョンによってサポートしていないので、ご注意ください。

  1. InternetExplorerクラス

 名前の通りInternetExplorerを操作するクラス。Excelから実行で、IEがポコっと立ち上がる

  1. HTMLElementCollection

 InternetExplorerクラスのドキュメントを扱うプロパティ?

  1. getElementsByTagName

 タグ名からエレメント・コレクションを取得するメソッド

  1. getElementsByClassName

 クラス名からエレメント・コレクションを取得するメソッド
 (XP等では、未サポート?)

  1. getElementById

 ID名からエレメントを取得するメソッド
 (XP等では、未サポート?)

Excel VBA+IEスクレイピングの下準備とサンプルソース



次のライブラリを参照設定します。参照設定、懐かしいなぁ。

  • Microsoft HTML Object library
  • Microsoft Internet Controls

f:id:dkfj:20141227172806p:plain

サンプルソース
手抜きですが、タグ名で取得しています。

Option Explicit
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private objIE As InternetExplorer

Sub main()
    Set objIE = New InternetExplorer
    Dim url
    url = "http://www.hatena.ne.jp"
    objIE.Visible = True
    objIE.Navigate2 (url)
    
    '読み込み完了待ち
    While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True
        DoEvents
        Sleep 100
    Wend
    Sleep 100
    
    Dim objDoc As HTMLElementCollection
    Set objDoc = objIE.document
    Dim element As IHTMLElement
    For Each element In objDoc.getElementsByTagName("a")
            MsgBox (element.innerText)
    Next element
    
    objIE.Quit
    Set objIE = Nothing
End Sub

 Excel VBAなので、取得結果をExcelのシートに格納するなどに、絶大な威力を発揮します。Excel VBAなどで検索すると色々でてくるので、ぜひ見てください。

まとめ



 自分としては、もはやExcel VBAでスクレイピングすることはないと思います。しかし、プログラムの実行環境がないよという場合には、Excel VBAという選択肢も良いのではないでしょうか?世の中には、VBAを極めている人は多数いるので、身近な人に聞けるというメリットもあります。ノンプログラマでも、ちょっと頑張れば何とかなると思うので、挑戦してみてはいかがでしょうか?
 また、スクレイピングやクローラーの作成手順を一から知りたい人は、Rubyだけどこの本読むとよいですよ。

See Also:
プログラミング・レスで5分でサックリWebスクレイピング「kimonolabs」
『Rubyによるクローラー開発技法』を書きました

参照:
クローラー/スクレイピング Advent Calendar 2014
IE自動操作コード一覧(ExcelVBA / VBScript) - Qiita

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例