2011/05/21

Project Euler をやり始めてみた

数日前に存在を初めて知ったProject Euler
Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems.
About Project Euler - Project Euler
要は、プログラミングで解く数学パズル、みたいなもの。WEB上に用意された沢山の問題を一つづつ解いていく。ちなみに、他のユーザが書いたコードを見ることもできて、ちょっと勉強になったりもする。
全部で300以上ある問題のうち、まだ10問しかクリアしてないけど、解き方を思いついたり、うまく一発で答えを当てられたときの気持よさはなかなかのもの。少しでもプログラミングできる人は是非お試しを。

さて、プログラミングにはどんな言語を使ってもいいんだけど、僕は結局Javaを選択して少しずつ問題を消化していこうかと。ちょっとだけクラスの設計もしたので、使ってみたかったgithubにリポジトリ作ってみた(こちら)。この設計に基づくと、記念すべき1問目、Problem1を解くSolverはこんな感じになる。
package euler;

public class Solver001 implements Solver
{
  public String solve()
  {
    int sum = sum(3, 1000) + sum(5, 1000) - sum(15, 1000);
    return Integer.toString(sum);
  }

  public int sum(int base, int max)
  {
    int n = (max - 1) / base;
    return base * n * (n+1) / 2;
  }
}
ま、あまり設計とか考えずにmain関数ベタ書きでよかったかも -_-;

まずは25問クリアして"Level1"になるのが目標です。

2011/04/23

iPhoneは基地局の情報を収集していた?

Appleが4/27付けで説明を公開した。
Apple Q&A on Location Data

要は、
  • ユーザの位置情報を収集はしていない
  • iPhoneに記録されている位置情報は、Appleが管理している基地局DBの一部(測位の高速化・高精度化のための端末側キャッシュとして利用)
  • 長期間に亘って記録していたのはソフトウェアのバグによるもので、近々アップデート予定(合わせて、キャッシュの母艦へのバックアップもやらないようにする)
とのこと。
基地局DBのキャッシュか、なるほど、って感じ。
[4/28追記]

iPhoneで知らぬ間に位置情報の履歴が記録されていた、ということが話題になっている。記録された履歴はiPhoneの同期先であるPCに保存され、アメリカの研究者がオープンソースで公開したiPhone Trackerというツールで可視化までできてしまう、というもの。

実際に上記のツールを使って僕のiPhoneで記録された位置情報の履歴を表示すると、こうなる。

個人的には非常に面白いデータで色々いじってみたくなるけど、プライバシ情報の扱い方という観点では改めて怖さも感じてしまう。

ま、ここではとりあえずそのあたりの問題は置いておいて、データを眺めてみる、、、むむ、何となく位置の履歴が自分の直感と合わない。例えば、もっと特定の場所に集中して位置情報が記録されててもいいはず。

そこで、こちらの記事を元にしてperlのコードを書いてみたりしつつ、母艦に保存されたsqliteのデータファイルの中身を確認してみた。見れば見るほど、このデータ、「位置情報の履歴を『逐一』記録したもの」というよりは「iPhoneが見つけた基地局の情報を記録したもの」って感じがしてくる。

というのも、、、
母艦に保存されたデータ(sqliteのデータベース)を開いてみると、位置情報が記録されているWifiLocationとCellLocationというテーブルの定義は以下のとおり。
CREATE TABLE WifiLocation (
MAC TEXT,
Timestamp FLOAT,
Latitude FLOAT,
Longitude FLOAT,
...(略)...
PRIMARY KEY (MAC)
);

CREATE TABLE CellLocation (
MCC INTEGER,
MNC INTEGER,
LAC INTEGER,
CI INTEGER,
Timestamp FLOAT,
Latitude FLOAT,
Longitude FLOAT,
...(略)...
PRIMARY KEY (MCC, MNC, LAC, CI)
);
文字通り、Timestampは時刻、Latitudeは緯度、Longitudeは経度を意味している。
ここで注目すべきは赤字で示したところ。PRIMARY KEY指定されてるWifiLocationのMACとCellLocationの(MCC,MNC,LAC,CI)MACは、おそらくWi-FiアクセスポイントのMACアドレス。一方の(MCC,MNC,LAC,CI)は、ケータイ基地局のIDに該当するようなものではないだろうか。要は、Wi-FiアクセスポイントMACアドレスとケータイ基地局IDは、それぞれのテーブルの中で重複が許されないってこと。

というわけで、これらのテーブルはあくまで「Wi-Fiアクセスポイント」および「ケータイ基地局」のリストを記録するためのもので、これらのテーブルにユーザの位置情報の履歴が全て記録されることはあり得ない。つまり、こういう形で位置情報の履歴を残している目的は、ユーザの位置を追跡するため、というよりは、基地局の位置を収集するため、という方が近いんじゃないかな。

さらに言えば、こうやって取得された基地局リストは、何らかの方法でやっぱりAppleが収集して、skyhookPlaceEngineなどと同じような測位用のデータベースを整備するために使っていた(もしくは、使おうとしていた)んじゃなかろうか。位置情報の履歴が記録され始めた時期(2010年の6月前後?)と、「Appleとskyhookの間の契約が終了→Appleが独自測位技術の利用を開始?」と報じられた時期(2010年の8月あたり)の関係も気になるところ。

ちなみに、見た限り、母艦上のデータに記録されている時刻(Timestamp)は、測位されたときの時刻ではなさそう。なので、ライフログとしてはあまり使えなさそう。あと、僕のデータにはアクセスポイントが15万件以上リストされていた。10ヶ月でそれだけの個数のアクセスポイントに遭遇していたのだとすると、ちょっと驚き。

2011/04/19

閲覧制限したBloggerブログのフィードを公開する方法(改)

以前書いた記事の方法ではあまりにややこしかったので、
もうちょっとだけシンプルな方法を用意してみた。

まず、目的は前回の記事と同じ。
Bloggerには閲覧者を制限する機能があって、プライベートなブログを作るには便利。なんだけど、ちょっとした不便がある。それは『閲覧制限をかけると記事やコメントのフィードが生成されない』というもの。ちょっと古いけど、こんな関連記事もチラホラ見かけられる。本文は特定の人以外に公開したくないけど、記事のタイトルやコメントが付いたことくらいはフィードリーダーで確認できたら便利だなぁ、という人、少しくらいはいそうだ。というより、僕が便利だ!w
Bloggerで閲覧制限したブログのフィードを公開する方法 - cyclic landscape

というわけで、今回用意したのはコレ。
Blogger Feed Creator


使い方は以下の通り。
  1. まず、Blogger Feed Creator ページ右上の"login"をクリックしてGoogleアカウントでログイン。Blogger Feed Creatorを初めて使う場合、Blogger Feed CreatorがBloggerへアクセスすることを許可するかどうか確認するためのページが表示される。内容を了解出来れば"アクセスを許可"。
  2. ログインしたGoogleアカウントで閲覧可能なBloggerブログの一覧が表示される。閲覧制限をかけたブログも一覧に表示されるはずなので、フィードを公開したいもののラジオボタンを"ON"に。
  3. これで、"posts"のURLをブログ記事のフィード(タイトルのみ)、"comments"のURLをコメントのフィード(コメント本文の先頭20文字のみ)として利用できる。
    ちなみに、Googleリーダ(などのPubSubHubbub対応フィードリーダ)でフィードを読む人は、一覧に表示されているメールアドレスを、Bloggerの更新通知先(ダッシュボードの「設定→メールとモバイル」と「設定→コメント」に設定項目あり)として登録しておくと、フィードの更新が早くなって便利。


今回は、slim3を使って作りました。
慣れてくると手放せません。

2010/03/22

Bloggerで閲覧制限したブログのフィードを公開する方法

この記事より簡単な方法を準備してみました。[2011.04.19]
閲覧制限したBloggerブログのフィードを公開する方法(改)


Bloggerには閲覧者を制限する機能があって、プライベートなブログを作るには便利。なんだけど、ちょっとした不便がある。それは『閲覧制限をかけると記事やコメントのフィードが生成されない』というもの。ちょっと古いけど、こんな関連記事もチラホラ見かけられる。本文は特定の人以外に公開したくないけど、記事のタイトルやコメントが付いたことくらいはフィードリーダーで確認できたら便利だなぁ、という人、少しくらいはいそうだ。というより、僕が便利だ!w

というわけで、方法を用意してみた。

やり方は以下の通り。
  1. hook2feedにGoogleアカウントでログインして「create new setting」する。

    「Feed Title」にはブログ名を、「URL」にはブログURLを、がオススメ。
  2. bmail2hookにGoogleアカウントでログインして「create new setting」する。

    「hook point URL」には、hook2feedで生成された「hook point URL」を入力すること。「Trim body?」で、本文をフィードにどれだけ載せるか、を設定できる。まったく載せたくなければ、「yes」「max length = 0」とすればよい。
  3. Bloggerの設定画面の「BlogSendアドレス」に、bmail2hookで生成されたメールアドレスを追加する。
  4. hook2feedで生成された「feed URL」を、使っているフィードリーダに追加する。
これで、設定したブログに記事を追加するとフィードが更新されるようになるので、閲覧制限したブログでも更新情報をフィードリーダで読めるようになると思う。

また、コメントの追加をフィードで知りたければ、同様の手順で作ったメールアドレスをBlogger設定画面の「コメント」→「コメント通知メール」という項目に追加すればいい。

というわけで、ちょっとややこしいけど、僕自身は便利に使えてるので満足ですっ!

2010/03/19

Bloggerの通知メールをWebHookに変換するWEBサービスを作ってみた

hook2feedと同様、これもまた「とある目的」のためにGAE for Javaで作ってみた。

bmail2hook - blogger's notification e-mails to web hooks

Googleアカウントでログイン後、WebHookの送信先URLを指定して「create new setting」すると、専用のメールアドレスが作成される。作成されたメールアドレスは以下のようにして使える。
  • 作成されたメールアドレスを、Bloggerの設定画面で新規記事や新規コメントの通知メール宛先に設定する
  • bmail2hookは、受信した通知メールから、記事のタイトル・URL・本文(の一部)を抽出して、指定したURLに対してWebHookする
これもまたhook2feedと同じく、「とある目的」以外の用途が思い付かない。困った。。。無理やり例を挙げるとするならば、、、HookHubとか経由してtwitterへ転送すれば、リアルタイムなtwitterへのブログ更新通知のできあがり、なんて如何?

ちなみに、bmail2hookとhook2feedで実現したかった「とある目的」については別記事にて。