ネットワークカメラ JPT3815W

安いのに一通りの機能を備えていて、いろいろ遊べそうだったので買ってみました。
日本語マニュアルはありませんが、ホームネットワークを組める知識があれば、設定自体は簡単です。
不要なソフトはインストールしたくないので、付属ソフトを使わずにトライしました。

[条件]

  • とりあえず、無線LANのアクセスポイント(以降 AP)経由でアクセスできるようにする
  • インターネット側からはアクセスしない *1
  • 付属ソフトはインストールしない

まずは有線で接続

本体の裏にIPアドレスとWeb UIのポート番号、ログイン名などが記載されているので、それに従ってブラウザでログインします。

ネットワーク設定

最低限必要な設定は次の2つ。

Server Push Mode > Device Management

  • Basic Network Settings
  • Wireless Lan Settings

ちなみに、ログイン後の最初の画面で [Japanese] をクリックすれば、UIが日本語になります。

補足

DDNSがデフォルトで有効になっていますが、今回の目的では不要なのでOFFにします。

動体検知の感度は 1〜10 の範囲で設定できます。日本語UIには「1が最高感度」、CDに入っていたマニュアルには「10が最高感度」とあります。どうやら後者が正解のようです。

MACアドレスは本体には記載されておらず、設定画面からも確認できません。
無線APでMACフィルタをかける場合は、あらかじめMACアドレスを調べておく必要があります。
(間違って有線のMACを設定してしまってハマった…)

(例)

  • 一時的にMACフィルタをはずし、AP側のUIから確認する
  • PCとアドホック接続して、arpコマンドで確認

なんとなく不安なので、AP側の設定で、JPT3815WとWAN側との通信を遮断しておきました。

所感

  • 5000円ちょっとで、これだけのことができるとは驚きました。
  • 暗い場所での映像は、想像していたよりも鮮明でした。ただ、条件にもよると思いますが、ガラス越しではきれいに映りません。
  • 本体の裏側がけっこう熱くなるので、長時間運用するのであれば工夫した方がいいかもしれません。

IEFirefox で確認しました(IEActiveX コントロールのインストールが必要)。Opera では操作も閲覧もできず…。
試してはいませんが、FirefoxChromeSafari以外のブラウザで映像を閲覧するには、プラグインが必要らしいです。

*1:インターネットから操作できる機能も魅力の一つですが、今回は使いません

Google Reader API

Google ReaderAPIの仕様は非公開ですが、個人的に解析されている方もいて、少ないながら資料もあるので、使ってみました。

目的

ニュースサイトのRSSGoogle Readerに登録して使っています。
カテゴリごとにフィードがあるのですが、複数のカテゴリに属している記事は、複数のフィードに重複して含まれることになります。
それらの重複記事を事前にフィルタし、既読状態にすることが目的です。
あえて載せていませんが、広告などの不要記事を既読にするといった使い方もできます。

手順

  1. 認証
  2. トークン取得
  3. 記事リスト(reading list)取得
  4. 指定記事を既読にする

1. 認証

  • 認証用URIに、gmailのメールアドレス、パスワード等をPOSTします。
  • 成功するとAuth、SID、LSIDが返されます。以降のリクエストには、これらの値を設定します。
# リクエスト設定
my %req = (
  service  => 'reader',
  Email    => $email,
  Passwd   => $password,
  source   => 'test_reader',
  continue => 'http://www.google.com/',
);

# 認証URI に POST
my $ua = LWP::UserAgent->new;
my $res = $ua->post('https://www.google.com/accounts/ClientLogin', \%req);
die $res->status_line if $res->is_error;

# 受け取ったパラメータを次回以降のリクエストのヘッダに設定
my $content = $res->content;
my ($auth) = $content =~ /Auth=(.+?)\n/;
$ua->default_header( 'Authorization' => "GoogleLogin auth=$auth" );
my ($sid) = $content =~ /SID=(.+?)\n/;
$ua->default_header( 'Cookie' => "SID=$sid" );

2. トークン取得

  • データを変更するためには、書き込み用トークンというものをあらかじめ取得する必要があります。変更の必要がなければトークンは不要です。
  • 取得用URIにリクエストすると、トークンが返されます。
# トークン取得URI に GET
$res = $ua->get('http://www.google.com/reader/api/0/token');
die $res->status_line if $res->is_error;

# 受け取ったパラメータを保持
$content = $res->content;
my ($token) = $content =~ m!//(.+?)$!;

3. 記事リスト(reading list)取得

  • 1回のリクエストで、いくつかの記事エントリがリストとしてまとまって落ちてきます。
  • 次のリストを取得するには、リストに含まれている「continuation文字列」を指定して再度リクエストします。
my $continuation = "";
my $loops = 0;

while ($loops++ < 100) {
  # 大量のリストを要求するので、少し間をあける
  sleep 1;
  
  # entry のリストを要求する。
  # 前回の続きを要求するときは、前回の continuation (/feed/gr:continuation/text()) を
  # クエリ文字列に設定してリクエストする。
  $res = $ua->get('http://www.google.com/reader/atom/user/-/state/com.google/reading-list'
       . '?c=' . uri_escape($continuation));
  die $res->status_line if $res->is_error;
  $content = $res->content;

  # feed を XML パーサで解析する。
  my $feed = XMLin($content, ForceArray => ['entry', 'category'], KeyAttr => [], ForceContent => 1);

  ...

  # 続きを要求するために、continuation を保存
  if ($feed->{'gr:continuation'}{content}) {
    $continuation = $feed->{'gr:continuation'}{content};
  } else {
    last;
  }
}

4. 指定記事を既読にする

  • 記事エントリには「ID」が付けられており、記事に対する操作を行うときは、対象記事のIDを指定します。
  • 記事エントリには、0個以上のラベルおよびステートが付けられています。エントリに既読ステートを追加することにより、その記事を既読状態にすることができます。
  • 記事エントリに付けられたラベルにより、フィードが属するフォルダを判別することもできます。以下の例では、「news」フォルダ以外の記事は処理しないようにしています。
# <entry> を全部処理
entries:
foreach my $entry (@{$feed->{entry}}) {
  my $isnews = 0;
  
  # <entry> 内の <category> を全部処理
  foreach my $cat (@{$entry->{category}}) {
    if ($cat->{term}) {
      if ($cat->{term} =~ m!/state/com.google/read$!) {
        # 既読アイテム
        next entries;
      } elsif ($cat->{term} =~ m!/label/news$!) {
        # news フォルダのアイテム
        $isnews = 1;
      }
    }
  }
  next if !$isnews;
  
  # <entry> 直下の <title> のテキストを取得
  my $title;
  if ($entry->{title} && $entry->{title}{content}) {
    $title = $entry->{title}{content};
  } else {
    next;
  }
  
  my $ismulti = 0;
  
  # title/text() が重複する news アイテムは、既読にする。
  # title/text() を %entrytitles に登録していくことで、重複を検知する。
  if ($entrytitles{$title}) {
    $entrytitles{$title}++;
    $ismulti = 1;
  } else {
    $entrytitles{$title} = 1;
  }
  
  if ($ismulti) {
    # 指定アイテムを既読にする
    
    my %req = (
      i => $entry->{id}{content},
      a => 'user/-/state/com.google/read',
      T => $token,
    );

    $res = $ua->post('http://www.google.com/reader/api/0/edit-tag', \%req);
  }
}

ちょっとメモ

全然関係ないですが、RubySSL接続する際のサーバ証明書についてです。

IEGoogleのログインページに行き、証明書をエクスポートする」と解説されているサイトが多かったのですが、これではなぜかRubyがエラーを返してきてしまい、うまくいきませんでした。

もしかすると、エクスポートする際のオプションが間違っていたのかもしれません。
試しにFirefoxでエクスポートした証明書を使ってみたら、問題なく動いたので、それ以上は調べていません。

参考にしたサイト

GoogleReaderAPI - pyrfeed
リファレンス形式でわかりやすくまとめられています。少し古いためか、一部、実際と異なる箇所がありました。
Google Reader APIの認証がまた変わった? - イントレ。
認証方法について、参考にさせていただきました。

壊れたExcelファイルのサルベージ

破損するなどして開けなくなってしまったExcelファイルを救出する方法。
※ファイルを修復するわけではなく、中身の一部を見る方法です

ワークシートの内容

セルに入力されている内容は、他のファイルから以下のように数式で参照させることで内容を取り出せます。

='壊れたファイルのパス\[壊れたファイル名]シート名'!セル参照

例:

='C:\[Book1.xlsx]Sheet1'!A1

VBAプロジェクト

ファイル自体は開けるが、VBEを開くと落ちてしまう場合。
フリーのオフィスソフト OpenOffice で開くと、中身を取り出せます。

ただ、こういうケース自体が稀なので、一度しか試したことはありません。
そのときのファイルは、Excel2000 か 2003 のものでした。
必ず取り出せるとも限らないので、VBAプロジェクトのデータは、エクスポート機能を使うなどして*1バックアップしておいた方がいいと思います。

*1:編集中に異常がなくても、一旦閉じると開けなくなるということがあるので、Excelファイルごとバックアップするだけでは安心できません。エクスポートされるファイル(*.bas、*.clsなど)はプレーンテキストなので、壊れる心配はありません。

WMA変換+α

Windows Media 8 Encoding Utility

http://www.microsoft.com/en-us/download/details.aspx?id=2446

コマンドラインでWAVからWMAに変換するソフト。
変換するだけなら下手なGUIよりも使いやすいです(タグ情報は後で別途追加するということで)。

バージョン9はWindows 7に対応していませんが(インストールできない)、バージョン8なら使用できます。

普通にMicrosoftのページに飛ぶと、「Windows Media」というページに飛ばされてしまい、なぜかたどり着けないので、Googleの検索オプションで「英語のみ」を選択してダウンロードしてきました。

使い方:

WM8EUTIL -input "in.wav" -output "out.wma" -profile a128

a128は「オーディオ128kbps」の意味。
プロファイルの一覧はヘルプファイルに記載されています。

参考にしたサイト:
WAVファイルをWMAに変換その3

SuperTagEditor改 Nightmare (STEP) 改造版 (STEP_M)

Mimura's Homepage

音声ファイルのタグ情報編集ソフトです。
編集リストの中身を直観的に選択・切り貼りできるので、Excelに貼り付け→数式を利用して編集→リストに書き戻す、という使い方をしています。
もちろんソフト自体にも、リストを効率よく編集できる機能が付いているようです。

SoundEngine Free

SoundEngine Free 製品情報

音声ファイルにエフェクトをかけたりするソフト。
スクリプト機能を使って、フォルダ内のファイルに一括処理できる点が便利。
曲の頭に無音を挿入するために使いました。