jpn_eagle's Blog

プログラミングの覚え書きとかカメラとか趣味の話

Pebble Watchでテレビを制御

 

衝動買いでスマートウォッチデビュー

初代Pebble Watchがかなり安くなっていたので購入。

スマホの通知が転送されるのでLINEやTwitterの簡単なメッセージ確認に便利。スマホを触る時間が確実に減った気がする。

ただ、たまに時間が1~5分ほどずれていることがある。(日本で発売されない理由はこれが原因か?)

腕時計をリモコン替わりにしたい

やはりスマートウォッチということで、普通の腕時計にはできないことをやりたい。

ちなみにフィクションの世界では・・・

・腕時計から麻酔針(バーロー)

・腕時計から強力なレーザー光線(007ゴールデンアイ

・腕時計で爆弾を起爆(N64のほうのゴールデンアイ

 

やっぱり現実的に考えてテレビのリモコンかなぁー。

HDMI-CECを利用する

まずはどうやってテレビを制御するのかを考える。

最近のテレビに搭載されているHDMIには機器間の通信制御にCECと呼ばれる各社共通の規格が採用されているので、今回はこれを利用することにする。

参考にしたサイト
Raspberry Pi のcec 制御とHDMIのオンオフ

全体図としては下記の図のとおり。

テレビ制御用のサーバーはLinuxならなんでも良いが今回はラズパイ。

これならテレビからUSBで電源が確保できる。

f:id:eaglejptattiieagle:20161026002911p:plain

ターミナルでラズパイにログインしてcec-clientをインストール

sudo aptitude install cec-utils

上記サイトのとおり下記コマンドを実行してみる。
echo 'standby 0' | cec-client -s

・・・テレビがほんとうに消えた。
とりあえず、オン/オフの制御ができることを確認したのでこれをHTTPリクエストで実行できるようPHPで簡単なスクリプトを組む。

<?php
//GETでパラメータを投げる(on 起動/off スタンバイ
$data = $_GET['pal'];
if($data == "off"){
       $results = exec('/bin/echo "standby 0" | /usr/bin/cec-client -s -d 1');
        echo $results;
} else if($data == "on"){
        $results = exec('/bin/echo "on 0" | /usr/bin/cec-client -s -d 1');
         echo $results;
}
?>

試しにパソコンのブラウザからURLを叩いてみる。
するとfaild to open vchiq instanceというエラーを吐き出して実行されない。
どうやらパーミッションの問題っぽい。
再びターミナルに戻って次のように入力。パーミッションを変更する。
sudo chmod a+rw /dev/vchiq

そんな感じでとりあえず「テレビをつける」「テレビを切る」という操作はできるようになった。
実際に操作してみるとこんな感じ。


チャンネル替えや音量変更はまた後日やってみる。

コスプレイヤーズアーカイブの画像を右クリック保存する

こんにちは。

カメラが趣味の関係で、たまにコスプレの撮影を依頼されることがあります。その際、参考資料用にコスプレイヤーアーカイブというコスプレSNSを覗くことがあるのですが、ここで一点不満があります。 

写真を右クリック保存ができない

転載防止のためなのでしょうが、掲載されている写真を右クリック保存することができません。「Webページごと保存」など回避策はいくらでもありますし、これじゃあただ使い勝手が悪いだけです。

f:id:eaglejptattiieagle:20161003005654p:plain「名前を付けて画像を保存」がない...

なら自分で作ればいい

仕事でオフコン(死語)向けのプログラムを組むことがあるのですが、Windows向けのアプリケーションを組むということをあまりしたことがありません。勉強がてら・・・ということで、右クリック保存できるIE用のアドインを作ってみました。
ダウンロード先:https://t.co/JOVKYlLDVO
※上記URLをクリックするとMicrosoft OneDriveのページに飛びます

f:id:eaglejptattiieagle:20161003011356j:plain

基本的にダウンロードしたものをインストールするだけですが、粗削りなため、環境によっては動かない可能性があります。特に32bit版Windowsの環境での確認を取っていません。(後述)

以下覚え書き

ここからはこのソフトを作った上での覚え書きです。興味のない方はすっ飛ばして

まず何をするか・・・

まずは何をするかです。「Webページごと保存」で保存できてしまうくらいなので、右クリック保存を禁止するのにそんなに高度な技は使ってないはずです。

HTMLソースを見ます。

http://image7.cosp.jp/ほにゃらら.jpg」という記述が二か所あります。直接アクセスしてみると、片方が縮小版、もう片方(idがimgViewとなっているほう)が高解像度版であることがわかります。

今回はそれを踏まえて、下記の動きをするプログラムを組むこととします。

1.参照元ページからhtmlソースをテキストで取得

2.htmlソースからidがimgViewの取得先URLを取得

3.取得先URLから画像データをダウンロード

とりあえず作る

VisutalStudioを起動してサクサクっと作ります。完成しました。ここまで10分くらいです。
URLを貼り付けてダウンロードボタンを押せばダウンロードできます。
また、コマンドライン引数でURLを投げつけてもダウンロードできます。
何も難しいことはしていません。問題はIEとの連携です。
でも具体的にどうすれば・・・

f:id:eaglejptattiieagle:20161003014451j:plain

レジストリを編集してIEの右クリックメニューに項目を追加する

右クリックメニューの追加の項目を管理しているレジストリの場所は
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt
になります。

ここに新しいキーを追加。ここでは「コスプレイヤーアーカイブ画像をダウンロード」とします。

contextsというREG_DWORD形式で追加し、値のデータを1(オン)とします。
(既定)にはこのボタンが押された時に実行したいファイルのパスを入力します。
ただ、ここにはhtmlファイルのパスしか記述できません。直接exeファイルを実行することができないのです。
なのでhtmlファイルを実行させて、内部のjavascriptからexeファイルを起動する方法を取ります。

javascriptは分からない。立ちはだかるOSのビット違いの問題。

javascriptは全く触ったことがなく、いろんなサイトを参考にしました。
ここで一つ問題が・・・このプログラム、Windows標準のProgram Filesにインストールします。(インストール場所の変更はできません)
ところがProgram Filesの名前はOSの対応ビット数によって変わってきます。

64bit版Windows ・・・ Program Files (x86)
32bit版Windows・・・Program Files

これではexeのパスが環境によって変わってしまいます。どうしたものか・・・

そんな中、javascriptAPIの中でユーザーエージェントの取得ができるということを知り、これで判別できるじゃないかということで、OSのビット数によってファイルパスを変えるようにしました。

f:id:eaglejptattiieagle:20161003022703j:plain


ただ、手元に32bit環境のパソコンがないので試せていません。
おそらく、こんな面倒なことをしなくても他によい方法があるはずなんですが・・・

右クリックでダウンロードできるようになった!

ダウンロードはできるようになりました。
ところがどっこい。レジストリやら何やらをパソコンに入れる度に設定するのは面倒です。なのでインストーラを作る必要があります。

今回は簡単インストーラというソフトを使わせていただきました。

・簡単インストーラ

http://www5a.biglobe.ne.jp/~nobukich/einstall/2/index.htm

f:id:eaglejptattiieagle:20161003023556j:plain

これでレジストリの設定も簡単ラクチン

とりあえず完成・・・か?

とりあえずこれで完成ということで。しょうもないバグとかありそうなので見つかったら手直ししていく感じで。