ネットワークカメラ JPT3815W
安いのに一通りの機能を備えていて、いろいろ遊べそうだったので買ってみました。
日本語マニュアルはありませんが、ホームネットワークを組める知識があれば、設定自体は簡単です。
不要なソフトはインストールしたくないので、付属ソフトを使わずにトライしました。
[条件]
まずは有線で接続
本体の裏にIPアドレスとWeb UIのポート番号、ログイン名などが記載されているので、それに従ってブラウザでログインします。
ネットワーク設定
最低限必要な設定は次の2つ。
Server Push Mode > Device Management
- Basic Network Settings
- Wireless Lan Settings
ちなみに、ログイン後の最初の画面で [Japanese] をクリックすれば、UIが日本語になります。
所感
- 5000円ちょっとで、これだけのことができるとは驚きました。
- 暗い場所での映像は、想像していたよりも鮮明でした。ただ、条件にもよると思いますが、ガラス越しではきれいに映りません。
- 本体の裏側がけっこう熱くなるので、長時間運用するのであれば工夫した方がいいかもしれません。
IE と Firefox で確認しました(IE は ActiveX コントロールのインストールが必要)。Opera では操作も閲覧もできず…。
試してはいませんが、Firefox、Chrome、Safari以外のブラウザで映像を閲覧するには、プラグインが必要らしいです。
*1:インターネットから操作できる機能も魅力の一つですが、今回は使いません
Google Reader API
Google ReaderのAPIの仕様は非公開ですが、個人的に解析されている方もいて、少ないながら資料もあるので、使ってみました。
目的
ニュースサイトのRSSをGoogle Readerに登録して使っています。
カテゴリごとにフィードがあるのですが、複数のカテゴリに属している記事は、複数のフィードに重複して含まれることになります。
それらの重複記事を事前にフィルタし、既読状態にすることが目的です。
あえて載せていませんが、広告などの不要記事を既読にするといった使い方もできます。
手順
- 認証
- トークン取得
- 記事リスト(reading list)取得
- 指定記事を既読にする
1. 認証
# リクエスト設定 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 に 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)取得
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); } }
ちょっとメモ
全然関係ないですが、RubyでSSL接続する際のサーバ証明書についてです。
「IEでGoogleのログインページに行き、証明書をエクスポートする」と解説されているサイトが多かったのですが、これではなぜかRubyがエラーを返してきてしまい、うまくいきませんでした。
もしかすると、エクスポートする際のオプションが間違っていたのかもしれません。
試しにFirefoxでエクスポートした証明書を使ってみたら、問題なく動いたので、それ以上は調べていません。
参考にしたサイト
- GoogleReaderAPI - pyrfeed
- リファレンス形式でわかりやすくまとめられています。少し古いためか、一部、実際と異なる箇所がありました。
- Google Reader APIの認証がまた変わった? - イントレ。
- 認証方法について、参考にさせていただきました。
壊れたExcelファイルのサルベージ
破損するなどして開けなくなってしまったExcelファイルを救出する方法。
※ファイルを修復するわけではなく、中身の一部を見る方法です
ワークシートの内容
セルに入力されている内容は、他のファイルから以下のように数式で参照させることで内容を取り出せます。
='壊れたファイルのパス\[壊れたファイル名]シート名'!セル参照
例:
='C:\[Book1.xlsx]Sheet1'!A1
VBAプロジェクト
ファイル自体は開けるが、VBEを開くと落ちてしまう場合。
フリーのオフィスソフト OpenOffice で開くと、中身を取り出せます。
ただ、こういうケース自体が稀なので、一度しか試したことはありません。
そのときのファイルは、Excel2000 か 2003 のものでした。
必ず取り出せるとも限らないので、VBAプロジェクトのデータは、エクスポート機能を使うなどして*1バックアップしておいた方がいいと思います。
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)
音声ファイルのタグ情報編集ソフトです。
編集リストの中身を直観的に選択・切り貼りできるので、Excelに貼り付け→数式を利用して編集→リストに書き戻す、という使い方をしています。
もちろんソフト自体にも、リストを効率よく編集できる機能が付いているようです。
SoundEngine Free
音声ファイルにエフェクトをかけたりするソフト。
スクリプト機能を使って、フォルダ内のファイルに一括処理できる点が便利。
曲の頭に無音を挿入するために使いました。
テスト
調べたこと、作ったものなどを、メモ代わりに書いていくことにします。