2012年05月04日
Twitterアプリ『Which is Hot?』リアルタイム・ランキングの方法

【サイトURL】Which is Hot?
http://WhichisHot.in/
【ブログ記事】
このカテゴリ記事一覧
前回に続きまして、今回はリアルタイム・ランキングついて書きたいと思います。
大勢のプレイヤーが同時にアクセスして遊ぶゲームでは現在自分が何位なのか、ポイントを獲得して今何位に変わったのか、というように、順位をリアルタイム知ることでより面白味が増していきます。プレイヤーが100人程度であれば、単純に100人の得点をソートして順位付けすれば簡単に順位が求められます。しかしプレイヤーが100万人いたらどうでしょう?それだけのデータをリアルタイムに集計していたら、待っている間にカップラーメンが出来てしまいそうです。
Which is Hot?ではTwitterのユーザーを対象にしていますから、1億4千万ユーザーの順位をリアルタイムに集計できるようにしなければなりません(1億4千万も集まるのかというのはまた別の話で)。そこでどうやったら高速且つ簡単にリアルタイムランキングが可能か調べていたところ、以下の記事を見つけました。
gumi Engineer’s Diary
15行で書くソーシャルゲームのリアルタイム・ランキング
この発想は目から鱗です。ものすごく詳しく解説されているので、詳しい仕組みは↑この記事を読んでみてください。変化前の得点の順位を+1するだけです。
最初の時点
| <ユーザー別の得点データ> ・Aさんの得点:0点 ・Bさんの得点:0点 ・Cさんの得点:0点 | <得点別の順位データ> ・0点の人:★☆☆☆☆ (1) ・1点の人:☆☆☆☆☆ (0) ・2点の人:☆☆☆☆☆ (0) |
Aさんが得点を入れた場合
| <ユーザー別の得点データ> ・Aさんの得点:1点 ・Bさんの得点:0点 ・Cさんの得点:0点 | <得点別の順位データ> ・0点の人:★★☆☆☆ (2) ・1点の人:★☆☆☆☆ (1) ・2点の人:☆☆☆☆☆ (0) |
Bさんが得点を入れた場合
| <ユーザー別の得点データ> ・Aさんの得点:1点 ・Bさんの得点:1点 ・Cさんの得点:0点 | <得点別の順位データ> ・0点の人:★★★☆☆ (3) ・1点の人:★☆☆☆☆ (1) ・2点の人:☆☆☆☆☆ (0) |
Aさんが得点を入れた場合
| <ユーザー別の得点データ> ・Aさんの得点:2点 ・Bさんの得点:1点 ・Cさんの得点:0点 | <得点別の順位データ> ・0点の人:★★★☆☆ (3) ・1点の人:★★☆☆☆ (2) ・2点の人:★☆☆☆☆ (1) |
いかがでしたでしたでしょうか。2〜3件の程度のデータを更新するだけで、簡単に順位が求められました。これならどんなにデータ件数が多くても高速に処理が可能です。
【順位の求め方】現在の得点は何点? → ○点の順位は何位?
デメリットと言えば、得点が1点ずつ増えていくときは良いが、一気にたくさん増えると効率が悪いというところです。もし一気に100点増えた場合は100回繰り返さなくてはなりません。幸いWhich is Hot?は1点ずつ増えていく仕組みになっていますから、この方法がぴったりだったのです。
さて、これで「誰が何位か?」がわかるようになりました。しかし逆に「何位は誰か?」はこの方法ではわかりません。たぶんこの仕組みに+αでできると思いますが、Which is Hot?では、面倒だったのでオーソドックスな集計方法のままいきました、
【順位別のユーザー一覧の求め方】
$ cat logfile | sort | uniq -c | sort -nr
投票されたIDをログファイルに記録していき、それをcronで定期的に集計しているだけです。投票回数が増えれば破綻する方式ですが、破綻しそうになったらちゃんと考えようと思います。中途半端ですいません。
ということで、今日はここまで。
次回はサーバーのハードウェア構成について書いていきたいと思います。
Which is Hot?http://WhichisHot.in/
2012年05月02日
Twitterアプリ『Which is Hot?』MemcachedとTokyo Cabinetの使い分け

【サイトURL】Which is Hot?
http://WhichisHot.in/
【ブログ記事】
このカテゴリ記事一覧
前回に続きまして、今回はKey-Value型データストアであるMemcachedとTokyo Cabinetの使い分けについて書きたいと思います。
Which is Hot?ではメモリ上にデータを保存するMemcachedと、ディスク上にデータを保存するTokyo Cabinetを使用しています。使い分け方としては、消えても回復できるデータはMemcachedに、消えたら困るデータはTokyo Cabinetに保存しています。
Memcachedに保存するデータ
- セッションデータ
- Public Timelineの情報
- ユーザー情報
- 全体の投票回数(表示用)
- ランキングの集計結果
- 重複投票のチェック用データ
Memcachedに保存するデータ
- 全体の投票回数(復元用)
- ユーザー毎の総投票回数
- ログインしたユーザーのユーザー情報
- ユーザーのFriendsのIDリスト
- ユーザーのFollowersのIDリスト
- ランキング用:ユーザー毎の投票回数(週替わり)
- ランキング用:順位データ(週替わり)
表示用のアイコンURLやスクリーンネームなどのデータはTwitter APIを通して取得できるのと、頻繁に大量のデータの読み書きを行うため、Memcachedで保存しています。一方、誰が何回投票されたかという情報は消えては困るため、Tokyo Cabinetに保存しています。ベンチマークの結果を見ればTokyo CabinetもMemcachedに匹敵するくらい早いですから、全部Tokyo Cabinetにしちゃってもいいかもしれません。ただし書き込みが多いとかなりディスクに負荷がかかるので、書き込みが多い場合はやはりMemcachedと使い分けた方がよいでしょう。
参考:MemcachedとTokyo Cabinetの比較・ベンチマーク結果
さて、この中で1つ例外的なものがあります。それはユーザーのFriends/FollowersのIDリストをTokyo Cabinetのほうに保存している点です。これは再取得できるデータですからMemcachedでいいのですが、Memcachedは保存できるデータ量に上限があるため(たしか2KB)、10000件のID情報を保存することができません。そこで大量のデータ(2MBまでは確認)を保存できるTokyo Cabinetに保存することにしました。そのまま保存すると大きなディスク容量を消費してしまうので、gzdeflate()で圧縮して保存するようにしています。
あまり詳しい解説になってないですが、今日はここまで。
次回はランキングの方法について書いていきたいと思います。
2012年05月01日
Twitterアプリ『Which is Hot?』のシステムの概要について

【サイトURL】Which is Hot?
http://WhichisHot.in/
【ブログ記事】
このカテゴリ記事一覧
前回に続きまして、今回はWhich is Hot?のシステムの概要を説明していきたいと思います。
このサイトでは2種類のデータストアを使い分けています。1つはMemcached、もう1つはTokyo Cabinet(Tokyo Tyrant)です。
Memcachedはオン・メモリのKey-Value型データストアで、メモリ内で処理するので非常に高速です。ただし電源を切ればデータは消えてしまいます。
Tokyo Cabinetはオン・ディスクのKey-Value型データストアで、Memcached並の高速な処理性能を持ちつつデータをディスクに保存するため、電源を切ってもデータは残っています。
これらの特性を生かし、高速なアクセスが必要で再構築が可能なキャッシュ用のデータはMemcachedに、永続的な保存が必要なデータはTokyo Cabinetを使用しています。小規模なサイトならRDMBSでやってもじゅうぶんでしょうけど、Key-Value型データストアは構造が単純で扱いやすいというメリットもあります。
そしてもう1つ、Tokyo CabinetのインターフェースであるTokyo TyrantはMemcachedと互換性があるのが特徴です。Memcachedのホスト名/ポート番号をTokyo Tyrantのホスト名/ポート番号に変更すれば、そのままのアクセスできてしまうので開発も容易です。
【Which is Hot?のシステム概要】(クリックで拡大)

Twitter内のデータにアクセスするにはTwitter APIにアクセスして、データを取得しなければなりません。Which is Hot?ではfriendsとfollowersのIDの一覧と、個々のユーザーの情報(スクリーンネーム、アイコンのURL等)を利用します。人によっては何十万人もフォローしていたりフォロワーがいたりすることも珍しくありませんが、Twitter APIで一度に取得できる件数は限られています。そこでデータの取得はWWWサーバー側では行わず、バックグラウンドで取得することにしました。
<Twitter APIの仕様>
・friends/followersのID一覧の取得 5000件毎
・指定IDのステータス 最大100件/1リクエスト
WWWサーバーとTwitter APIの通信はOAuthによるログイン処理のみを行い、ログインに成功するとキュー・マネージャーにバックグランド処理を指示します。
friends/followers取得プログラムはすでにデータが取得済みでないか(キャッシュ有効期限内か)調べ、Twitter APIにまずID一覧取得のリクエストを送信します。10000件に達したらそれ以上は読み込みません。次にユーザー情報が取得済みでないか(キャッシュ有効期限内か)調べ、ユーザーの情報を100件取得します。
以上の処理を1セットとし、何回か繰り返します。
もしfriends/followersがそれぞれ1万人いる人の場合、ID取得が4回、ユーザー情報の取得が200回必要となります。1リクエストに3秒かかるとすると10分以上かかることになりますから、このようなバックグラウンドでの処理が必要だったのです。
さて、さきほど「何回か繰り返します」と曖昧な事を書きました。これは全部のデータを一気に読み込まず、必要に応じて読み込むようにしているからです。やってみたけど1回アクセスしただけで去ってしまう人もいるかもしれません。おそらくほとんどの人がそうかも!?(^^;) それなのにずっとデータを読み込み続けてるのは無駄ですし、1時間350リクエストまでというTwitter APIのリミット値を消費してしまいます。
そこで、少し読み込んだら一時中断します。一時中断している間に再びアクセスがあれば、再度データを取得しにいきます。つまり繰り返し遊んでくれる人のデータは、遊んでいる間にどんどんとデータを読み込んで構築されていき、途中で投げ出した人はそれ以上読み込まないという仕組みです。
ということで、今日はここまで。
次回はデータストアの詳しい使い分けについて書いていきたいと思います。
Which is Hot?http://WhichisHot.in/
2012年04月27日
Twitterアプリ『Which is Hot?』作りました!


Twitter APIの勉強を兼ねて、Twitterアプリで『Which is Hot?』というアプリ(サイト)を作ってみました。このアプリは表示される2つのアイコンのうち、"Hot" だと思った方をひたすら選んでいくだけのアプリです。ただひたすら見ているだけでも結構楽しいです。ぜひやってみてください!
Which is Hot? http://WhichisHot.in/
このブログでは、”特に”技術的な部分について、このカテゴリで記事を書いていきたいと思います。どんなAPIを使ってるかとか、高速に処理するためにどんなことをやってるかとか、サーバー構成などを何回かにわたって書いていくつもりです。
『Which is Hot?』の "Hot" というのは、好き、綺麗、美しい、素晴らしいといったポジティブな意味を込めて "Hot" と呼んでいます。元ネタとなったのは昔流行った写真をHot or Not?で評価するサイトで、このサイトは1枚の写真をHot(良い)かNot(悪い)か投票するサイトでした。私はNotという評価をさせたくなかったので、2枚比べてどっちがHot(良い)かを投票する方式にしました。
メニューの ALL は、Public Timelineから直近のユーザーをランダムで表示します。ランダムのため同じ人が表示される場合もあります。
メニューの FRIENDS は、自分のfriends/followersの中からランダムで表示します。はじめてアクセスする場合は「連携アプリを認証」する必要があります。このアプリはデータを読み込むだけですので、勝手につぶやきを送信することはありません。
メニューの RANKING は、10分おきに集計したランキングの結果です。重複投票のチェックは1時間経過となっていますので、最後の投票から1時間たてばまた投票できます。ランキングは毎週日曜日の朝にリセットされます。
対象は、スマートフォンではiPhone、Andoroid、PCではFirefoxとSafariです。おそらく最近のブラウザなら大丈夫だと思いますが、デザインが崩れたりするかもしれません。ガラケーは対応の予定は無いです。ブラウザ判定を行っていますので、お使いの端末に合ったページレイアウトで表示されると思います。もし判定がうまく行かない場合は、HELPメニューからデフォルトのスタイルを選択してみてください。
次回の記事は、システム構成について書く予定です。
Which is Hot? http://WhichisHot.in/
2012年04月03日
ソフトバンクを解約し、WiMAXモバイルルーターを2ヶ月間使ってみた感想
WiMAXモバイルルーターMobile Cubeを使い始めて2ヶ月半が経ちました。そしてソフトバンクを解約し、WiMAXルーターにiPhoneを接続して使うようになって2ヶ月。WiMAXに変えて良かった点、悪かった点などを書いてみたいと思います。
iPhoneは白ロム状態なのでこのように圏外の表示となっていますが、WiFiで問題無く通信することができています。メールはGmailに変更。電話についてはガラケーとの2台持ちなので、iPhoneはネットさえ繋がればいいんです。
前回使って1週間の感想を書きましたが、そのときより満足度は落ちてしまいました。その理由はやはり屋内に入ると繋がりにくいということ、地下は壊滅的だということです。そして肝心な秋葉原で繋がらなくなることが頻発しました。電波強度は中くらいだったので、電波が弱いというわけではなさそうです。ちなみに、ソフトバンクを解約したことによる不便は特にありませんでした。
私はMacBook Airも使っているので、同じWiFiでiPhoneもMacBook Airも使えるというのはやはり便利です。iPhoneでテザリングをするにはハードルが高く、海外の白ロム+ドコモのSIMを使っても結構コストがかかってしまいます。コストパフォーマンスを考えれば、WiMAXも悪くないかなと思いました。
2012年02月05日
MacBook Airの電源コネクタを汎用化してみた
小さくてハイスペックなMacBook Air。普通にメインマシンとしても使えるんじゃないかってくらい速いのですが、唯一バッテリーの持ち時間が短いという欠点があります。3〜4時間くらいは使えるので、実際そんなに困るような場面は少ないのですが、やはり必要な時に使えなくなってしまったらどうしようかと心配になります。そこでまず考えたのが、エネループでMacBook Airが動かせないか?ということ。MacBookはMagSafeという特殊なDCプラグを使用しているため、まずはMagSafeコネクタの準備からはじめます。
Apple純正のACアダプタを加工してもいいのですが、必要なのはMagSafeコネクタなのでそれはもったいない…。ということで中古や互換品を安く入手しましょう。続いてコネクタの加工。様々なバッテリーやACアダプタが取り付けられるよう、変換コネクタ方式にします。片側はMagSafe、もう片側は内径2.1φ、外径5.5φの一般的なDCコネクタにしておけば、あとは自由に付け替えが出来ます。
次に用意したのがエネループ。MacBook AirのACアダプタは出力14.5V、エネループは1本1.2V、12本なら14.4Vになるのでちょうどいいと考えました。4本を1セットにしてUSBコネクタで接続させてるのは、エネループモバイルバッテリーを3台直列に接続して使うことを想定してのことです。そして配線も終わり、出力電圧を測ってみるとまさかの16V越え…。ちょっと心配になりつつも、MacBook ProのACアダプタ(18.5V)を接続しても大丈夫なので、思い切って接続してみると・・・、だめでした。充電されません。
もしかして出力電流が大きすぎて電圧降下してるのかと思って調べてみたところ、16.4V。エネループを1本減らして11本にしてみたところ、15.1V、60mAと、どうやら全く給電が行われていないようです。ACアダプタを接続したときは14.5V、2.5Aくらい流れたので、明らかに何かがおかしいです。(中には5年くらい前に買ったエネループもあるのでそれが原因の可能性も否定できませんが…)
電流を計っていて気付いたのですが、ACアダプタを接続してもいきなり2.5A流れるのではなく、はじめは数百mAから徐々に電流が上がっていきました。はじめに接続している電源の能力を調べ、使用可能かどうか判断しているのかもしれません。そう考えるとエネループの場合、最初のテストに合格しなかったために使用されないようになった、という可能性もあります。なぜACアダプタはOKで、エネループがだめなのかはよくわかりません。
さて、今回の企画は失敗に終わったのですが、せっかくなので余っていたTOSHIBA dynabook用のACアダプタ(15V)のDCプラグを同じタイプのに交換して、MacBook Airに接続してみました。こちらは問題なし。dynabook用のACアダプタの方が50gくらい軽くてコンパクトなので、持ち歩きように使えそうです。
電源を取れない場所で長時間使えるようにというのが目的だったので、近いうちに外部バッテリーHyperJuice (60W)を入手して、MacBook Airに接続してみたいと思います。
次回へつづく
追記:1台をエネループモバイルバッテリーにしてみたところ、460mA流れて給電状態となりました。すぐに元に戻ってその後再現しなくなってしまいましたが、出力可能な電流が関係しているのですかね。でもエネループは1Aや2Aくらい流せたはず…。うーん、よくわかりません。
ちなみに単3エネループ12本の重量は約300g、HyperJuice 60Whは358g。エネループの容量は約27Wh(1.2*1.9*12)、HyperJuiceは60Wh。重量あたりの容量ではHyperJuiceの方が遙かにいいですね。実際にHyperJuiceで充電できている事例もあるようなので、素直にHyperJuiceにした方がいいかもしれません。(^^;
2012年01月31日
iPadをMacの仮想プリンタにしてしまう「ACTPrinter」を試してみた
わざわざ印刷するほどのような書類でないにしても、保管して取っておきたいときってありますよね。別の所に持ち運んで読みたいというときも。そんなときはPDFで保存して、EverNoteやDropBoxなどのクラウド上に保存しておくと便利なのですが、それすら面倒くさい、そこまで必要ないという人にぴったりの方法を見つけました。【CNET JAPAN】PC/Mac上のドキュメントをiPad/iPhoneに出力できる「ACTPrinter」
ACTPrinterというアプリを使うと、iPadがそのままMacのプリンターとなってしまうスグレモノです。
このアプリはMacの仮想プリンタドライバ(正確にはPDFを転送するソフト)と、iPad上のプリントデータ受信&ビューワーの2つで構成されています。Mac上で印刷するときに、PDFメニューの「Print using ACTPrinter」を選択すると、送信するドキュメントと送信先の選択画面が現れます。
OKボタンを押せば、あら不思議。iPad上にプリントしたドキュメントが表示されます。Wi-FiでLAN内で接続されているので、USBケーブルを接続することなくMacからiPadに送信される仕組みになっています。難点としては、iPad上でACTPrinterを起動していないといけない(バックグラウンドではNG)、ACTPrinterアプリはビューワーのみで、ドキュメントに書き込みができないという点です。個人的には印刷してペンで書き込めるような使い方ができたら便利だったのですが、ほかにそうゆうアプリがあったら教えていただけると嬉しいです。
ちなみにiPadのACTPrinterから、インストールされている各種PDFアプリに送信することができます。私のiPadではEverNote、GoodsReader、Kindle、iBooksが選択できました。GoodsReaderはPDFに書き込む機能もありますので、プリントして書き込むという作業をペーパーレス化するときはGoodsReaderで可能ですね。
2012年01月23日
[メモ] MacBook Airでネットワーク機器のシリアルコンソールに接続する方法
2012年01月22日
WiMAXモバイルルーターMobile Cubeを1週間使ってみた感想
WiMAXモバイルルーターMobile Cubeを使い始めて1週間が経ったので、良かった点、悪かった点などを書いてみたいと思います。利用方法としては、Wi-Fiで接続しているiPhoneは3Gのデータ通信をOFFにして、データ通信はWi-Fiのみにしました。
【良かった点】
・電車で移動中でもほとんど途切れない(途切れることを感じない)
・スピードが(softbankに比べて)格段に速い
・電車に乗りながらyoutubeも普通に見れる
・アプリもすぐにダウンロードできる(3Gだと容量制限があるので)
・バッテリーの持ちが良く一日持ち歩いても不自由しない
【悪かった点】
・地下は壊滅的
・屋内でも大きな建物内は圏外になることが多い
・WiMAXの電波強度が現在どのくらいかiPhone上で一目で分からない
一長一短という感じです。私は地下鉄に乗ることは少ないので、地下鉄の駅や車内ではそれほど不便を感じませんでした。ただ屋内でも奥の方に入ってしまうと電波が入らないのはちょっと不便でした。
バッテリーの持ちがいいので電源は常時ONで使ってます。いちいちON/OFFするのも面倒くさいので、充電時もずっとONにしたまま、買ってからOFFにしてません。(笑)
私は月額980円で3G回線が使用できるサービスイオン専用b-mobileSIM AプランのWi-Fiルーターもバックアップ用として常に携帯しているので、どうしても使いたいときはこっちで接続してます。b-mobileSIM Aプランはスピードは遅いですがsoftbankと体感的には大して変わらないですし、FOMA回線だからどこでも繋がります。【まとめ】
WiMAX:速い、高速移動中も可、地上で使うぶんには問題なし
b-mobileSIM A:どこでも繋がる、遅い、安い
2012年01月15日
WiMAXモバイルルーターMobile Cubeによる山手線スピード調査
UQ WiMAXのモバイルルーターMobile Cubeを入手したので、山手線圏内でどの程度スピードが出るか、電波の途切れ具合はどうか、などを調査してみました。
測定日時:1月15日(日) 夕方
乗車車両:JR山手線 内回り 真ん中よりやや前位置
測定方法:WiMAXルーターにiPhoneからWi-Fi経由で接続し、speedtestアプリで測定
【結果】
山手線内では駅停車中で平均 4.6Mbps、走行中で平均 3.3Mbps ほどのスピードが出ていました。走行中は電波強度が瞬間的に弱くなったり圏外になることがあったので、そこで基地局が切り替わったのだと思います。しかしこの際に通信が途切れてエラーになったり、長時間繋がらなくなるようなことはありませんでした。
山手線内でSoftBankのiPhoneを使っている方はわかると思いますが、帰宅ラッシュの時間帯などはなかなか電波が入らず、圏外になってから次の駅まで全く通信できなくなることもしばしば。これがけっこうイライラするんですよね。でもWiMAXなら基地局間の切り替え時間が早いので、切り替わったことが気にならないかもしれません。なかなか快適です。
【測定結果詳細】
詳細はこちらに続きます→続きを読む
測定日時:1月15日(日) 夕方
乗車車両:JR山手線 内回り 真ん中よりやや前位置
測定方法:WiMAXルーターにiPhoneからWi-Fi経由で接続し、speedtestアプリで測定
【結果】
山手線内では駅停車中で平均 4.6Mbps、走行中で平均 3.3Mbps ほどのスピードが出ていました。走行中は電波強度が瞬間的に弱くなったり圏外になることがあったので、そこで基地局が切り替わったのだと思います。しかしこの際に通信が途切れてエラーになったり、長時間繋がらなくなるようなことはありませんでした。
山手線内でSoftBankのiPhoneを使っている方はわかると思いますが、帰宅ラッシュの時間帯などはなかなか電波が入らず、圏外になってから次の駅まで全く通信できなくなることもしばしば。これがけっこうイライラするんですよね。でもWiMAXなら基地局間の切り替え時間が早いので、切り替わったことが気にならないかもしれません。なかなか快適です。
【測定結果詳細】
詳細はこちらに続きます→続きを読む
UQ WiMAXでPPTP接続ではまった
今までBIC WiMAXの1 dayプランを利用していたのですが、1分でも24時間でも1回使えば1日600円かかってしまうということで、利用をためらってしまうことが多々ありました。ちょっと精神衛生上よろしくないなーってことで、10時間連続駆動が可能なUQ WiMax端末、Mobile Cubeを契約しました。設定といってもセキュリティ関連の設定をするだけで、普通に使うぶんにはとても簡単に使えたのですが、PPTPサーバーに接続すると数十バイト程度のページにはアクセスできても、数百バイトとかデータ量の多いページにアクセスできないことがありました。この現象・・・MTUっぽい症状だな。ということでMTUがらみじゃないかとあたりをつけてPPTPサーバーの /etc/ppp/options.pptpd のmtu値をいろいろといじってみたところ、正常に表示されるようになりました。
ところがそれでも表示されないサイトとかが少しあるんですよね。どんどんMTUを小さくしていってもだめ。2時間ぐらいずっと格闘して、こちらの記事を発見しました。そうか、MRUも変更しないといけないのか。
/etc/ppp/options.pptpd を以下のように設定したところ、今まで表示されなかったサイトもちゃんと表示されるようになりました。
nopcompいい感じです。
noaccomp
mtu 1350
mru 1350
これから山手線周辺でのスピードテストをしてこうかと思います。(笑)
2012年01月12日
Kindle 4を入手したので自炊PDFの余白をカットして入れてみた


iPadを電子書籍リーダーとして使うには重すぎる…、ということでKindle 4を買ってみました。まだ使い方もよく理解できてないのですが、とりあえずUSBで接続してPDFファイルをコピーしてみたら、余白が多く、文字がかすれてしまってとても読めたものではありません。
そこで今回はPDFDietというソフトを使って、Kindle用にPDFを変換してみました。1枚目の画像がオリジナル、2枚目が変換後。かなり読みやすくなりました。PDFDietのすごいのは、上下左右の余白だけでなく、中の部分の空白まで圧縮してくれることです。そのため本文から離れた位置にあるもの(ノンブルとか)の距離を縮めてくれます。著者が意図したレイアウトではなくなってしまうので、場合によっては不自然な形になってしまうこともありますが、限られた狭いスペースで表示するという目的のためには、とてもよい機能だと思いました。
2011年12月20日
Macで使える家計簿ソフトJumsoft Money、でも0日で挫折(>_<)
最近本気で金の使い方を改めないとやばいと思って、家計簿を付けようと思いました。Macで使える家計簿ソフトで且つ、iPhoneで使えて同期が出来るもの(外出先で入力→家で整理とか)を探してたら、いくつか良さそうなソフトが見つかりました。
まずはiCompta。
とても評判が良いみたいなので体験版を試してみたのですが・・・無理。こんなに細かいのいらん。いつ何をいくらで買ったかだけ整理できればいいので、iComptaは高機能すぎました。(>_<)
続いてSquirrel。
ユーザーインターフェースもシンプルでいい感じ!と思ったら動作環境がMac OS 10.7以上でした。うちのMacは10.6。リスのくせにライオンか(>_<)
そして最後にたどり着いたのはJumsoft Money 4。
こここれはシンプルで見やすく使いやすい!Wi-Fiで繋がっていればiPhoneとも同期してくれます。ということでさっそくデータを入力。直近の現金、クレジットカード、銀行口座の履歴を入力していき、これなら使えるという気がしました!
しかしここで問題が!?
SUICAの入力めんどくせー。(>_<)
そうなんです。基本、買い物は電子マネーなので…、電車も、食事も、お菓子も、ジュースも…可能な限りおサイフケータイ。だから1日に何件もあるし、あーもうこんなの毎日入力なんてやってられません。単調な繰り返し作業が耐えられない性格なので(=どうやったら効率化できるか考えちゃう)、1つ1つ家計簿を付けるという行為自体が私には無理でした。(笑)
【Jumsoft Moneyの良いところ】
・シンプルで見やすい
・iPhoneと同期できる
【Jumsoft Moneyのだめなところ】
・日付の入力が面倒(常に当日なので過去データを入力するときは毎回日付の入力が必要)
・iPhone版は数字のテンキーの配列がキーボードと逆なので迷う
ネットから自動的に取り込んで、自動的に仕分けしてくれるようになれば便利なのになー。
まずはiCompta。
とても評判が良いみたいなので体験版を試してみたのですが・・・無理。こんなに細かいのいらん。いつ何をいくらで買ったかだけ整理できればいいので、iComptaは高機能すぎました。(>_<)
続いてSquirrel。
ユーザーインターフェースもシンプルでいい感じ!と思ったら動作環境がMac OS 10.7以上でした。うちのMacは10.6。リスのくせにライオンか(>_<)
そして最後にたどり着いたのはJumsoft Money 4。
こここれはシンプルで見やすく使いやすい!Wi-Fiで繋がっていればiPhoneとも同期してくれます。ということでさっそくデータを入力。直近の現金、クレジットカード、銀行口座の履歴を入力していき、これなら使えるという気がしました!
しかしここで問題が!?SUICAの入力めんどくせー。(>_<)
そうなんです。基本、買い物は電子マネーなので…、電車も、食事も、お菓子も、ジュースも…可能な限りおサイフケータイ。だから1日に何件もあるし、あーもうこんなの毎日入力なんてやってられません。単調な繰り返し作業が耐えられない性格なので(=どうやったら効率化できるか考えちゃう)、1つ1つ家計簿を付けるという行為自体が私には無理でした。(笑)
【Jumsoft Moneyの良いところ】
・シンプルで見やすい
・iPhoneと同期できる
【Jumsoft Moneyのだめなところ】
・日付の入力が面倒(常に当日なので過去データを入力するときは毎回日付の入力が必要)
・iPhone版は数字のテンキーの配列がキーボードと逆なので迷う
ネットから自動的に取り込んで、自動的に仕分けしてくれるようになれば便利なのになー。
2011年11月27日
デスクのまわりをスッキリ!100円でACアダプタ収納BOXを作る方法



携帯の充電やスマホの充電、モバイルバッテリーの充電など、今や電源用としてUSBはあちこちで大活躍。しかしデスクの上は充電用のACアダプタだったり、ノートPCのACアダプタだったりと、気付けばケーブルでぐちゃぐちゃになってしまったりもします。
そこで大量のACアダプタを整理して散らかって見えないようにしつつ、使い勝手は失わないよう、スマートなACアダプタ収納BOXを作ってみました。使用したのは100円ショップで売っているクラフトボックス。紙製なのでカッターで簡単に加工ができます。表面と裏面にケーブルの取り出し口を作ってフタをするだけ!とっても簡単です。
この小さな箱の中にUSB ×4ポート(Mini USB、Micro USB、iPod、USB-A)、エネループモバイルバッテリー用ACアダプタ、AC出力 ×1、無線マウス用充電器、HUB用ACアダプタが入っています。紙製なので発熱などによる火災には要注意。スイッチ付きのテーブルタップなどを使って、席を離れるときは電源を切れるようにしておくとよいでしょう。
ごちゃごちゃしていたケーブルがすっきりして、さらにその上にも物が置けてとっても便利です。
2011年11月18日
iPadでリラックスできるサウンドを組み合わせて再生できる環境音アプリRelax Melodies HD


以前にもこのブログで紹介したことがあるのですが、お気に入りのアプリの1つなのであらためてご紹介します。「Relax Melodies HD」は風の音や川の流れる音、鳥がさえずる音など、様々な”環境音”を組み合わせることができるアプリです。iPad版では画面が広くなり、サウンドの選択もやりやすくなりました。
有料版は350円で82種類、無料版は41種類のサウンドが使えます。
私がお気に入りなのは雨です。雨だけでも色々な種類があって、弱い雨から激しい雨まで。鳥のさえずりなどと組み合わせると、どこか山奥にでも行った気分になれます。あと自然の音ではないですがBrown Noiseも入れるとリラックスできますね。それぞれに音量を設定できるので、たとえば鳥のさえずりの音量を小さくして、遠くで鳴いているような演出もできます。
個人的には、サウンドの選択がカテゴリー毎にまとまっていてくれていると便利なんですが、Relax Melodiesの各サウンドの配置はぐちゃぐちゃです。あえて整理しないところに(このアプリとしての)意味があるのでしょうね。
サウンドを組み合わせてお気に入りのサウンドが出来上がったら、この組み合わせを保存しておきましょう。保存した組み合わせはあとから呼び出すことができるので、使いたいシチュエーション毎に作っておくと便利ですね。
欲をいえば、この”組み合わせ”を他のユーザーとシェアできるようになったらいいと思いました。自分が作ったサウンドを公開したり、人が作ったサウンドを取り込んだり。きっと世の中には素晴らしい組み合わせを見つけた人がいるはずです。ぜひお気に入りをインポート・エクスポートできる機能を追加してほしいです。
2011年08月31日
PGP Whole Disk EncryptionでMacのHDDを暗号化してみた(2)
前回に引き続き、別の環境でハードディスク暗号化ソフトウェアPGP Whole Disk Encryptionを試してみました。
【動作環境】
・本体 MacBook Pro (mid 2010) 17" Core i7 2.8GHz / Memory 8GB
・SSD crucial m4 256GB (3Gbでリンク)
・MacOS 10.6.8
【ベンチマーク結果】Xbench

前回のテストではPGP WDEを使うと激しく性能低下が起こったのですが、(Read 256Kをのぞいて)今回はそれほど大きな低下もなく、これなら実用範囲かと思いました。
当初搭載されていたHDDからcrucialのSSD m4シリーズに交換したら凄まじく高速になりました。高速化したいならとにかくSSDにするということですね。
■起動時のクルクル
HDD PGPなし 11.5回 PGPあり 20回
SSD PGPなし 0回 PGPあり 1回
■起動時間(条件:ログイン時にFirefoxを起動、ジャーンからFirefox起動までの時間)
HDD PGPなし 30秒 PGPあり 71秒
SSD PGPなし 15秒 PGPあり 18秒
元々はPGP WDEの評価が目的でしたが、結論としてはSSD恐るべしです!
【動作環境】
・本体 MacBook Pro (mid 2010) 17" Core i7 2.8GHz / Memory 8GB
・SSD crucial m4 256GB (3Gbでリンク)
・MacOS 10.6.8
【ベンチマーク結果】Xbench

前回のテストではPGP WDEを使うと激しく性能低下が起こったのですが、(Read 256Kをのぞいて)今回はそれほど大きな低下もなく、これなら実用範囲かと思いました。
当初搭載されていたHDDからcrucialのSSD m4シリーズに交換したら凄まじく高速になりました。高速化したいならとにかくSSDにするということですね。
■起動時のクルクル
HDD PGPなし 11.5回 PGPあり 20回
SSD PGPなし 0回 PGPあり 1回
■起動時間(条件:ログイン時にFirefoxを起動、ジャーンからFirefox起動までの時間)
HDD PGPなし 30秒 PGPあり 71秒
SSD PGPなし 15秒 PGPあり 18秒
元々はPGP WDEの評価が目的でしたが、結論としてはSSD恐るべしです!
2011年08月25日
PGP Whole Disk EncryptionでMacのHDDを暗号化してみた
ハードディスク全体を暗号化できるというPGP Whole Disk Encryptionを使い、どの程度の速度低下があるのかベンチマークしてみました。MacはMac Pro 2.26GHz Quad-Core x2、DISKはOCZのSSD Vertex 3 60GBです。

起動時のクルクルが3倍くらいになったので嫌な予感はしていたのですが、xbenchの結果でも如実に性能の低下が見られました。半分どころではありませんね…。たしかに別のHDDから起動しても暗号化したHDDは見えませんでした。ブート時もパスフレーズを入力しないと起動すらしないので、セキュリティ面ではかなり良いと思います。性能を犠牲にするか、セキュリティを取るか、どこに重点を置くか次第でしょうか。
ベンチマークの速度と体感速度は違いますから、とりあえず30日間は試用できるので、試してみて耐えられる速度なら導入するのもよいでしょう。インストールする前にはくれぐれもバックアップをお忘れなく。
→この記事の続き

起動時のクルクルが3倍くらいになったので嫌な予感はしていたのですが、xbenchの結果でも如実に性能の低下が見られました。半分どころではありませんね…。たしかに別のHDDから起動しても暗号化したHDDは見えませんでした。ブート時もパスフレーズを入力しないと起動すらしないので、セキュリティ面ではかなり良いと思います。性能を犠牲にするか、セキュリティを取るか、どこに重点を置くか次第でしょうか。
ベンチマークの速度と体感速度は違いますから、とりあえず30日間は試用できるので、試してみて耐えられる速度なら導入するのもよいでしょう。インストールする前にはくれぐれもバックアップをお忘れなく。
→この記事の続き
2011年08月08日
広域イーサネクストのスループットを計ってみた
フレッツのIPv6 IPoE網を利用してVPNを構築できるソフト「広域イーサネクスト」でスループットを測定してみました。
センター側(サーバー側)
フレッツ光ネクスト ファミリー・ハイスピードタイプ
ブランチ側(クライアント側)
フレッツ光ネクスト マンションタイプ 光配線方式
【測定結果】
・ダウンロード 46 Mbps
・アップロード 30 Mbps
まあまあでしょうか。本当はもっと出て欲しかったですけど、本当にリモートのLANが普通にLANケーブルで繋がっているかのように使えます。VMwareで実行する場合はプロミスキャスモードをONにする必要があります。
センター側(サーバー側)
フレッツ光ネクスト ファミリー・ハイスピードタイプ
ブランチ側(クライアント側)
フレッツ光ネクスト マンションタイプ 光配線方式
【測定結果】
・ダウンロード 46 Mbps
・アップロード 30 Mbps
まあまあでしょうか。本当はもっと出て欲しかったですけど、本当にリモートのLANが普通にLANケーブルで繋がっているかのように使えます。VMwareで実行する場合はプロミスキャスモードをONにする必要があります。
2011年08月05日
広域イーサネクストをUSBメモリから起動する方法
フレッツのIPv6 IPoE網を利用してVPNを構築できるソフト「広域イーサネクスト」はセンター側(サーバー)とブランチ側(クライアント)の2枚のCD-ROMで提供されています。CD-ROMから起動するだけで設定も操作も不要という素晴らしいものなのですが、小型化しようとするとどうしてもCD-ROMドライブが邪魔になってきます。そこで今回、広域イーサネクストをUSBメモリから起動できるようにしてみました。【おおまかな手順】
1.CD-ROMから起動してUSBメモリにインストールする
2.USBメモリに必要なファイルをコピーする
3.起動スクリプトを修正する
【準備】
1.広域イーサネクストの登録を済ませてISOファイルをダウンロード、CD-Rに焼いておく。
2.USBメモリはFAT16かFAT32でフォーマットしておく
【USBメモリにインストールする】
1.CD-ROMから起動し、最初の画面が現れたらTABを2回押します。起動オプションの設定画面になるので、半角スペースに続けて single と入力してENTERを押します。これはシングルモードで起動させる方法です。
2.起動したらCD-ROMとUSBメモリのデバイス名を調べます(dmesgやfdiskコマンドなどで)
仮に以下のデバイス名として説明していきます
・CD-ROM: /dev/sdb
・USBメモリ: /dev/sr0
※デバイス名は環境によって異なります。間違えると本当に大変なことになるので気をつけてください。意味がわからない場合は作業を中止してください。
3. /run/initramfs/live/LiveOS/ に移動します。
4.以下のコマンドを実行してUSBメモリに書き込みます。
# ./livecd-iso-to-disk /dev/sr0 /dev/sdb1
(エラーが出るけどそのまま続行してたぶんOK)
5.終わったら電源を切ります。
【USBメモリの設定】
1.Windowsを起動して、USBメモリとCD-ROMを接続します。
2.USBメモリのsyslinux/syslinux.cfgを開き、「LANG=**」という箇所があったら消して保存します。
3.CD-ROMの ve/ フォルダをUSBメモリの LiveOS/ 内にコピーします。
【起動スクリプトを修正する】
ここからが大変です。起動システムはsquashfsという圧縮ファイルシステム(/run/initramfs/live/LiveOS/squashfs.img)に納められているのですが、この中の起動スクリプト(/etc/rc.local)の中でCD-ROMを参照するようになっています。そのためCD-ROMが無ければ正常に起動しません。そこでこの起動スクリプトを修正して、CD-ROMからではなく、USBメモリを参照するように変更します。
1.USBメモリから起動し、最初の画面が現れたらTABを2回押します。起動オプションの設定画面になるので、半角スペースに続けて single と入力してENTERを押します。
2.何か書き込みが可能なファイルシステムをマウントします。
以下の例では /mnt/usb に外付けドライブをマウントしたと仮定します。
3.squashfsのファイルを解凍します
# cd /mnt/usb
# unsquashfs -d image /run/initramfs/live/LiveOS/squashfs.img
4.イメージをマウントします
# mkdir /mnt/image
# mount image/LiveOS/ext3fs.img /mnt/image
5.起動スクリプトを編集します
# vi /mnt/image/etc/rc.local
mkdir /mnt/live
mount /dev/cdrom /mnt/live
という行を以下に変更する
ln -s /run/initramfs/live/LiveOS/ve /mnt/live
これはCD-ROMをマウントしていたところを、さきほどコピーしたve/フォルダの方を参照するようにするための変更です。/run/initramfs/live/LiveOS/ というディレクトリが起動したシステムから参照することができるフォルダのようです。
6.編集が終わったらイメージをアンマウントします
# umount /mnt/image
7.squashfsのファイルを再構築します
# mksquashfs image squashfs.img
8.このファイルを何らかのデバイスにコピーしておき、もう一度Windowsを起動します。
9.USBメモリの LiveOS/ フォルダを開き、squashfs.imgファイルを適当にリネームます。次に先ほど作成した squashfs.img ファイルをコピーします。
【完了!】
以上です。これでUSBメモリから広域イーサネクストが起動できるようになりました。
ちなみにセンター側のCD-ROMとブランチ側のCD-ROMで違うのは、ve/ フォルダの vedata.txt ファイルだけです。このファイルによってセンター側として起動するか、ブランチ側として起動するかが決まります。2つファイルをコピーしておいて必要に応じて差し替えるという手もありますね。後から書換が出来るというのがUSBメモリのメリットです。
いや〜、結構めんどくさいですね。他に簡単な方法をご存じでしたら教えてください。
2011年07月27日
OCZ Vertex3 60GBのベンチマークをしてみた
OCZのSSD Vertex3シリーズの60GBモデルを手に入れたので、CrystalDiskMarkでベンチマークをしてみました。
カタログスペックでは読み込み最大 550MB/s、書き込み最大 495MB/sになっています。あとから気付いたのですが、代理店のサイトに掲載されているベンチマーク結果で理論値に近い値が出ているのは、書き込みパターンが0x00の場合なんですよね。実使用では0x00しか書き込まないということはないので、このSSDの本当の実力はランダムパターンの数字だといえます。
【アスクのベンチマーク結果】書き込みパターン:ランダム
240GBモデル:ライト 292MB/s
120GBモデル:ライト 169MB/s
60GBモデル:掲載なし
この結果を見ると、容量が大きいモデルの方がライト性能が高いことがわかります。今回買った60GBモデルは掲載されていませんが、シーケンシャルライトは 80MB/sくらいだと想像できます。
【テスト環境】
M/B: SuperMicro X8-DTU-F
CPU: Xeon E5620
Memory: 4GB
RAID: Adaptec 6805(キャッシュが512MBなので2GBで測定)
【テスト結果】SSD単体、書き込みパターン:ランダム

【テスト結果】SSD単体、書き込みパターン:0

実測値が理論値と異なるのは仕方ないとしても、実使用ではありえないような条件で測定した値を公称値として出すのはどうかと思いました。たしかに60GBモデルはかなり手頃な価格で入手できますが、過度な期待をしないほうがいいかもしれません。結構しょぼーんです。予算に余裕がある場合は容量が大きいモデルを買った方がよいでしょう。
【テスト結果】RAID 0、書き込みパターン:ランダム

【テスト結果】RAID 0、書き込みパターン:0

いずれにしても十分高速ですけどね。
カタログスペックでは読み込み最大 550MB/s、書き込み最大 495MB/sになっています。あとから気付いたのですが、代理店のサイトに掲載されているベンチマーク結果で理論値に近い値が出ているのは、書き込みパターンが0x00の場合なんですよね。実使用では0x00しか書き込まないということはないので、このSSDの本当の実力はランダムパターンの数字だといえます。
【アスクのベンチマーク結果】書き込みパターン:ランダム
240GBモデル:ライト 292MB/s
120GBモデル:ライト 169MB/s
60GBモデル:掲載なし
この結果を見ると、容量が大きいモデルの方がライト性能が高いことがわかります。今回買った60GBモデルは掲載されていませんが、シーケンシャルライトは 80MB/sくらいだと想像できます。
【テスト環境】
M/B: SuperMicro X8-DTU-F
CPU: Xeon E5620
Memory: 4GB
RAID: Adaptec 6805(キャッシュが512MBなので2GBで測定)
【テスト結果】SSD単体、書き込みパターン:ランダム

【テスト結果】SSD単体、書き込みパターン:0

実測値が理論値と異なるのは仕方ないとしても、実使用ではありえないような条件で測定した値を公称値として出すのはどうかと思いました。たしかに60GBモデルはかなり手頃な価格で入手できますが、過度な期待をしないほうがいいかもしれません。結構しょぼーんです。予算に余裕がある場合は容量が大きいモデルを買った方がよいでしょう。
【テスト結果】RAID 0、書き込みパターン:ランダム

【テスト結果】RAID 0、書き込みパターン:0

いずれにしても十分高速ですけどね。

