てっく

2015年4月17日 (金)

Tampermonkey と jQuery

元々 Firefox を使ってたけど、Chrome の方が良くなってきて、でも Firefox 使ってるのは Greasemonkey が動くからだったんだけど、Chrome にも Tampermonkey ってのがあるから、だんだんそっちに寄りつつある。
Tampermonkey - Chrome ウェブストア

ちょっとした自動ログイン的なのとか、テレビ番組表からHDRに予約メール飛ばすとか、よく見るサイトのうざい広告消したりレイアウト変えて読みやすくしたりとか、色々便利なのですがね。

で、今日はとあるツールを Tampermonkey で書いていて Greasemonkey と違う気がするなぁと思ったので備忘録。そこそこ面倒だったので。きちんとテストページとテストスクリプト書いて調査したわけではない。

最初にハマったのが、Tampermonkey はレンダリング後のDOMというかHTMLというかを相手にするらしいこと。div に style:none とかすると Tampermonkey では見えないのでアクセス出来ないという事案が発生した。これ結構ハマって色々やってみたけど結局どうしようもなかった。Greasemonkey なら間違いなく、読んできたソースのHTMLに対して操作することになると思うんだけど。

んでまぁ、ボタンを押すと上記の隠されてる div が出てくる仕掛けになっていたので、そのボタンに $('.button').click(); とか $('button').trigger('click'); とかしても何も起こらない。もちろんマウスでクリックすれば開くのだけど。
こういうもんなのかな、と思ったんだけど、下記で動いた。

var clickEvent  = document.createEvent ('MouseEvents');
clickEvent.initEvent ('click', true, true);
this.dispatchEvent (clickEvent);

jQuery では何故か上手く行かないらしい。最後の this は $(this) ではないぞ。jQuery オブジェクトでは無く、飽くまで基本のエレメントとして扱わなきゃいけないのでね。

他にもダッシュボード自体が不安定だったりするので、Tampermonkey はもう少しってところかなぁ。

| | コメント (0) | トラックバック (0)

2015年3月13日 (金)

Yosemite遠隔Update

OSのアップデートって、やっぱある程度枯れてからの方が良いわけで。とはいえ、もう半年近いので、家の MacBook Pro はアップデートした。その前に、予備用の Air をアップデートしたら Mavericks より速くなったような気がしたのに驚いたのだけど。
よく考えたら新しいOSを入れたら動きが重くなるって進化じゃない気がするのだよね。

で、問題は職場に置いてる Air の方で、これは勤務中はずっと使ってるのでアップデートする時間がなくて。ダウンロードから更新からで数時間かかる、かつインタラクティブなUIなので放置して置いても解決しない。帰る前にダウンロード開始して、次の朝来たら「再起動します」とかで止まってて、結局そっから2時間仕事出来ないとかだと困るのですよ。

そこで、こないだ導入した Chrome の Remote Desktop で何とかならんかな、と。先日の Chrome のアップデートでタブではなくウインドウとしての起動も出来るようになって、ショートカットとかも使いやすくなったし。
ということで、帰る前にダウンロードスタート。ジムによって帰宅してから家から繋いで見ると「再起動ボタン押せ」というダイアログが。押して切断。朝起きて繋ぎ直したらログイン画面が出てたのでログインして見たら、そっから動かない。まぁOSアップデート後ありがちだな、と思ってオフィスについたら iCloud の設定画面が他の入力をブロックしていただけだった。

大した苦労も無くアップデートが完了し、問題なく使える。特に軽くなった気もしないけど重くなった気もしない。iPhone 繋ぐ度にイメージキャプチャが起動するようになったけど、これは左下の設定から変更。
で、使ってたんだけどプリントが出来ない。むーんドライバかー、と思ってドライバを最新のに入れ替えても繋がらない。ううううう、と思ってたら WiFi がゲスト用のルータに繋がってた。あ、優先順位リセットされるのね。

これで万事OKと思っていたら、Apache が起動しない。configtest したら so が無いとか何とか。あれ?と調べたら Apache 2.4 になってるのね。テスト環境作り直しですよ。

| | コメント (0) | トラックバック (0)

2014年11月19日 (水)

Google Calendar API v3

やりたくなくても過去の遺産のメンテナンスが必要なこともあるもので。

以前、管理画面作るのが面倒なので、Google Calendar を使ってちょっとした予定を入れて貰って、それを XML読み込みして JSON にして社内システムに表示する、ってのを作った。さっきデータ見たら2006年ぐらいの送別会とか入ってたから思えば遠くへ来たものだ。
やっつけ仕事だったので、XMLを取ってJSONに、という部分は PHP で書いていたのだけど、その会社の人からメールが来て「カレンダーが表示されません」と。

んご?と思って調べたら

This API is a subject to the Deprecation Policy and will be shutdown on November 17, 2014. Please use APIv3 instead.

ドンピシャですね。

今まではカレンダーの設定画面からキーの付いたXMLを発行すれば、そこにアクセスするだけでRSSぽくデータを取れたのだけど、何か認証が必要になったらしい。それも、PublicじゃないカレンダーデータにはAPI Key じゃなくて OAuth 使えと。
これが色々探してもドキュメントが少ないのよねぇ。Web サービス系で、一旦Googleに認証を振ってからリダイレクトで戻ってきてToken貰って…というのはあるんだけど、サーバから取りに行く、みたいなのがあんまない。オイラの探し方が悪いのか。

Google Calendar API - Google Calendar API — Google Developers
Google APIs Client Library for PHP — Google Developers

とりあえず、Google Developers Console なるものにアクセスして APIs で Calendar API を ON に、Credentials で OAuth の Client ID を作って p12 ファイル(key_file)を保存しておく。

んで、サンプルの OAuth 2.0 Service Account Authentication って奴を手がかりに認証部分を組むんだけど、メールアドレス入れるところがあって、そこにカレンダーのオーナーの GMail アドレス入れたらダメで、ここは Developers Console で Client ID 作ったときに吐き出される長ったらしいメールアドレスだった。

次にイベント一覧取るぜ、ってことで Events: list - Google Calendar API — Google Developers ここのサンプルに従ってやったら空のリストが帰って来た。calendar_id を primary にしてあるのがマズいのかな、と思って、カレンダーオーナの GMail アドレスを入れたら「そんなの無い」だかのエラー。前は calendar_id ってオーナーの GMail アドレスだったんだけどな。ここでかなりハマった。

結局、オイラの勘違いかも知れないんだけど、飽くまで primary っていうのは認証時に入れた長ったらしいメールアドレスに紐付いたカレンダーの primary であって、Developers Console にログインしたユーザに紐付くカレンダーでは無いみたいだ。どういうロジックか分からん。
とりあえず、イベント取りたいカレンダーにログインして、共有設定で長ったらしいアドレスでも見えるようにして、calendar_id を見せたいカレンダーのオーナーの GMail アドレスにしたらやっと取れましたよ。

半日かかった。まぁでも管理画面やDBやら作る代わりに8年に一度半日ぐらい仕事するならいいとしよう。Google様々。

$client = new Google_Client();
$client->setClientId('Developers Console で作ったID');
$client->setApplicationName("適当な名前");
$key = file_get_contents("p12 ファイルへのパス");

$cred = new Google_Auth_AssertionCredentials(      "長ったらしいメアド",
           array('https://www.googleapis.com/auth/calendar.readonly'),      $key      );
$client->setAssertionCredentials($cred);

$service = new Google_Service_Calendar($client);

// 日付絡み省略
$max = date(DATE_ATOM, mktime(0,0,0,$m,$d+32,$y));
$min = date(DATE_ATOM, mktime(0,0,0,$m,$d,$y));

$opt = array('orderBy'=>'startTime', 'timeMax'=>$max, 'timeMin'=>$min, 'singleEvents'=>true);

$events = $service->events->listEvents($calendar_id, $opt);
//後は好きにする

| | コメント (0) | トラックバック (0)

2014年7月16日 (水)

IRKit

「外出先からエアコンを制御したい」

もう何年も前からそう思ってた。でも、一般の学習リモコン系ではエアコンのリモコンは学習できないとか、プログラマブルな感じのは下手したら数万円したりとか、なによりゴツかったり、気になる度に調べてたんだけど理想的なものがなかった。

つい1ヶ月ほど前にも「外出先からエアコンを制御したい」欲がムラムラとこみ上げてきて調べてたら IRKit というものに辿り着いた。
IRKit - Open Source WiFi Connected Infrared Remote Controller

なんか細かい事は良く分からないけど、エアコンをコントロールしてる人がいるらしい。ということで、Amazon から購入。決して安くないけど、これまで調べてきたプロダクトに比べれば半値以下のようなものだ。

で、届いたら本体だけ。後は紙が2枚。Mac Address と SSID が書いたものと、もう1枚はなんだったかな。USBでの給電が必要なのだけど、そのケーブルも付属しないという味気なさ。で、仕方なく上記のページを見に行くんだけど、そもそもの始め方が分からないのよね。


暫定でエアコンに向けるために額に引っかける

答えとしてはスマホでアプリダウンロードして家の中のWiFiに繋げることで全てが始まる。まぁゴリゴリと curl とかで WiFi の情報を書き込む方法もあるけど。
で、これで iPhone を使ってテレビのON/OFF とかエアコンの ON/OFF が出来るようになるんだけど別にそんなことがしたいわけじゃ無い。ちなみに、テレビは同じ信号で ON/OFF 出来るけど、エアコンは ON と OFF で別信号なのね。少なくともうちの機種は。

ということで、今度は外部の GateWay を使ってアクセスするために IRKit のIPアドレスを取得する。
MacBook Pro をWiFi に繋ぎ、

% dns-sd -B _irkit._tcp

を実行すると暫くして Instance Name が帰ってくるので(搭載されてるアクセスポイントの名前と同じ?)、今度はその Instance Name で

% dns-sd -G v4 IRKitXXXX.local

みたいに「Instance Name」.local を探すとIPアドレスが分かる。これで IRKit に搭載されている HTTP サーバを叩ける。後は外部からアクセスするためのIDとKeyを取得。Bonjour 使ってるから Windows の人は知らん。どうにかなるんだろう。

% curl -i "http://10.0.1.2/keys" -d ''

HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/1.3.0.182.gaf86b44
Content-Type: text/plain

{"clienttoken":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}

% curl -i -d "clienttoken=XXXXXXXXXXXXXXXXXXXXX" "https://api.getirkit.com/1/keys" HTTP/1.1 200 OK
Server: ngx_openresty
Date: Tue, 07 Jan 2014 08:46:06 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 94
Connection: keep-alive
X-Content-Type-Options: nosniff

{"deviceid":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","clientkey":"XXXXXXXXXXXXXXXXXXXXXXX"}

これで準備完了なので、後は door コマンドでインターネットと繋がっていることを確認(略)。

で、こっからが真骨頂でリモコン情報を学習します。

curl -i "https://api.getirkit.com/1/messages?clientkey=XXXXXXXXXXXXXXXX&clear=1"

HTTP/1.1 200 OK
Server: ngx_openresty
Date: Tue, 07 Jan 2014 09:03:59 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 481
Connection: keep-alive ETag: "-19571392"
X-Content-Type-Options: nosniff

これで待機状態になるので、IRKit に向けてリモコンをピッとやると、コンソールにドバババっと JSON が出るので記録。
で、このJSONを使って

curl -i "https://api.getirkit.com/1/messages" \
-d 'clientkey=XXXXXXXXXXXXXXXXXXXXXXXXXX' \
-d 'deviceid=XXXXXXXXXXXXXXXXXXXXXXXXXXX' \
-d 'message={"format":"raw","freq":38,"data":[6881,3341,904,815,904,2537,904,815,…]}'

ってやると、リビングで(エアコンはリビング)ピッと鳴ってエアコン起動。やりましたよ。

一応社外のサーバから同じコマンド叩いてみて成功。後は、適当な Web サーバに適当なHTML置けばよろし。JSONだし気軽なのでオイラは jQuery で $.post するようにしましたが。
これで家に近づいたら iPhone で当該HTML開いてボタン押せばエアコンが付きます。逆に切り忘れた!と思っても地下鉄の中からOFF出来るし。ON/OFFがトグルじゃない(信号が違う)ので、不安なときもとりあえずOFF押せば良いよね。
IFTTTと連動とか色々やり方はありそうですが、とりあえず目的が達せられたので満足です。

ま、上に書いたように人を選ぶデバイスですけどね。エアコン以外にも何か出来そうな気がしますが、テレビとHDRぐらいしかないからなぁ。テレビ付けても嬉しくないし。HDRは WiTV で制御できるしなぁ。

ちなみに今年は台風接近で窓を開けられなかった先週木曜しかエアコン使ってませんが。

| | コメント (0) | トラックバック (0)

2014年5月19日 (月)

WiTV

以前、実家に帰ったときに回線業者がくれたポイントが余ってるので何か欲しいものに交換するが良い、と言われた。前にもそんなことがあって、そんときは Eye-Fi にしたら案外使えて今でも愛用している。

今回は何にしようかねぇ、iPod とか要らないしねぇ、と思いながらツラツラ見てたら変なものを見つけた。外から家の中のHDRの録画が見られます、みたいなの。何か怪しさ満点だけど、ポイントなんだから身銭切るわけじゃなし、ということで申し込んでみた。

しばらくしてやってきたのは直径20cmほどの円盤。SLINGBOX みたいなのかと思ってたら、メッチャ安っぽい。残念なことにRCA端子しか刺さりません(HDMIって何?)が、とりあえず配線してみる。

何が怪しいって、このどこかで見たことのあるロゴですよ。例の大陸の国では無くて、そのちょっと手前の飛び出したところの国のプロダクトでございますニダ。後はEtherをルータに繋いで、iPad にアプリ(無料)を落としてパスワード入力で繋ぐと映りましたね。後、リモコンの設定も出来るので(リピータみたなのがついてる)、iPad から HDR のチャンネル切り替えたり再生/停止したりできる。

怪しくて安っぽいけど、まぁ見られますよ。遅延が数秒有るけど。で、iPhone にもアプリいれて外に行ってみたけど、競馬中継とかストレス無く見ることが出来た。もちろん電波状態が不安定なところだと画像も不安定だけど、それはWebサイトとか閲覧するのと同じよね。

ということで、案外使えるし、3000円ぐらいらしいので結構CP いいものかもしれない。もちろん Android でも使えるみたいだし、WindowsでもOkなのかな?OSX用のアプリは無かった。
HDR や TV に限らずコンポジット信号出てれば何でもリモートで見られるので、お犬さま監視とか牛丼屋のアルバイト監視とかにも使えるのかもね。

ま、うちの HDRのコンポジット出力が480i設定の時しか出ないってのに気がつかずに、あーだこーだ1時間ぐらい格闘していたのは内緒だ。

| | コメント (0) | トラックバック (0)

2014年5月16日 (金)

OSX (Mavericks) でメールのルールが効かない

掲題の現象が起こったわけですよ。
全然効かない訳でも無く、一部効かない。例えば、めーらーでーもんさんからのメールは daemon フォルダに移すようにしてるんだけど、それが効かないから inbox にエラーメールが入ってくる、というように全く使えない訳では無いけど何かイライラする状態。
環境設定からルールを確認するとちゃんと存在している。編集して適用しても効かない。

こないだ調子が悪いからゴミ箱とかのメールボックスを再構築したからかなぁ、とか、設定ファイル壊れてるのかなぁと思って ~/Library/Mail/V2/MailData/SyncedRules.plist の中身見たりしたけど壊れているようには見えない。

うーん、iCloud でメールの保存はしてないしなぁ…

で、ふと思い出したことが。

GPX Binder というステキなGPSログViewer(Editor) があるのですよ(ステマ)。
Mac App Store - GPX Binder

で、こないだ Simple Logger という iPhone 用のステキGPSロガーが出まして(ステマ)、これがGPX Binder と連携できるんですね。
iPhone、iPod touch、iPad 用 Simple Logger

連携できるって言うんだけど、連携する方法が分からない情弱だったんですが、試行錯誤してOSXのシステム環境設定から iCloud の「書類とデータ」で連携させればいいらしい。普段 iCloud なんてアドレスブックぐらいしか使わないから分からなかった。

こうすると GPX Binder から目出度くログデータを読み込めるわけです。

閑話休題、メールの振り分けがおかしくなったのはこの作業を行って以降なんじゃないか、ということで、連携を切ってルール編集したところ、問題なく振り分けされるようになりました。

で、色々探してみたところ、こんなページが。
Mail (Mavericks): ルールを使ってメッセージを管理する

iCloud の「書類とデータ」を使用する場合は、iCloud の「書類とデータ」が入になっているほかの Mac コンピュータ(OS X v10.8 以降)でも、ルールを利用できます。

うーん、てことは家のPC(昔仕事で使ってた)のルールとごっちゃになったのかなぁ。Syncさせる前と後で変わったかどうかなんて分からないから何とも言えないけど。てか、「書類とデータ」には「Mail.app のルール」だけの項目とか無いので、ルールは Sync させたくないけどドキュメントデータは使いたいって時に不便だよなぁ。

もし、OSXのメールの振り分けルールが効かなくて困ってたら試す価値はあるかも。

| | コメント (0) | トラックバック (0)

2014年4月23日 (水)

幻想

IFTTTで位置情報 で書いて、その後何度もテストしているけど、ちゃんとメールが届く。自宅に近づくと携帯にメールが飛んでくる。

それに気づくのは家に帰って携帯出した時だ。あんま意味ない。家に帰る前に気づいてクリーニング取りに行ったりしたいのに。

やっぱ電話が鳴り続けるとかじゃないと気づかないかなぁ。ヘッドホン経由で音出してくれると一番いいんだけどなぁ。

IFTTTにも Phone Call ってあるんだけど、USのみってこと。てか、費用負担はどうなってんだろ。

ってことで、エリアに入ったらメールを飛ばしてPOPサーバに cron でチェックかけてメールが届いてたらATコマンドでモデム経由で発呼して…ってとこまで幻想した。今でもATコマンドって使うのかな。モデムとか随分つかってないなぁ。

ネット上のFAXサービスとかで上手く何とかできんかな。月額無料のサービスとかないかしら。電話にでなけりゃ通話料かからないわけだし。

| | コメント (0) | トラックバック (0)

2014年4月18日 (金)

IFTTTで位置情報

IFTTT って「いふと」って読むの? ifthisthenthat ってことで、何かをトリガに何かをしてくれる仕組みを作れる便利ツールだけど、正直これまでは特定メールの転送とか位にしか使ってなかった。
iPhone で写真撮ったらどっかに投稿とか、そういう怖いことオイラしないから。

こないだ iPad 版が出たとかで、久々に見てみたら「iOS Location」って Trigger が増えてた。昔からあったのかもしれないけど。つまり、iPhone(もしくは iPad とか iPod touch とか)持って特定の場所に行くと、何かすることが出来るらしい。

iOS には「リマインダー」って標準アプリがあって、これも特定の場所に入ったら、もしくは出たら通知してくれる、っていうことなんだけど、実際設定してみてもイマイチ上手く動かないのよな。オイラの設定が悪いのか。リマインドしてくれるときとしてくれないときがある。

ということで、この IFTTT に期待して設定してみた。家の近所に帰ってきたら SMS を送るってのはどうか。SMSは設定しようとしたら、最初に確認のSMSを送るから云々という手続きがある。まぁ、異国のサービスだし無理だろうなとダメ元で電話番号を入れてみたら、見事に届いたので設定出来た。

後はiPhone でレシピを作って意気揚々と自宅に帰ってみたんだけど何も起こらない。
あ、そうそう iOS Location を使うには iOS でIFTTT アプリのバックグラウンド更新をONにしなきゃなんない。もちろん設定してから実験したけど。

おっかしーなー、とレシピの内容を確認したら、自宅に設定したつもりのポイントが太平洋のど真ん中に設定されていた。どうも、iPhone 上でドラッグして場所を指定してもダメみたいで、住所をいれて検索して設定しないとダメみたいだ。

ということで、翌日、今度こそと帰宅したんだけどやっぱり飛んでこない。この後何度も色々やってみたけどなしのつぶて。やっぱリマインダーと同じく位置情報関連はダメなんだろうか。
で、SMS の代わりに GMail を設定して、自分にメールを送るように設定してみたら、届きましたよ。
忘れた頃にポケットでブリブリと振動したので取り出したら、しっかりとメールが。

オイラの場合は家の近所にクリーニングを取りに行くのを忘れるってのが多いので、これがあれば随分と解決されそうな気がする。果たして今後もきちんと鳴ってくれるかどうか。

Put the internet to work for you. - IFTTT

| | コメント (0) | トラックバック (0)

2014年3月19日 (水)

変換キーではまる(OSX)

日本語入力の変換キー、オイラはスペースの横の「変換」キーを使っている。
MacBookAir に Windows 用のJISキーボードを繋いで使っているので、KeyRemap4MacBook と PCKeyBoardHack を入れている。
KeyRemap4MacBook - OS X用のソフトウェア
PCKeyboardHack - OS X用のソフトウェア

細かいところはかなり昔のブログに書いた。今とは少し違ってきていると思うけど。
KeyRemap4MacBook: 戯言

んで、これで「変換」キーでATOKの入力を英数<=>かなとトグルしていたのだけど、近頃動かなくなることが頻発して。

オフィスの若い衆に「ダメだ変換キーいかれた。キーボード余ってたっけ?」と聞いてキーボード替えたんだけどやっぱりダメになる。キーイベント見てみたら、確かにキー自体は反応してるので、物理的にキーボードがやられた訳じゃ無さそうだ。疑って悪かった。ただ、キーを押したときのイベントがおかしい。
うーん、オイラ何かしたっけ?したなぁ。Mavericks に上げたんだった。

で、これが問題かと思ったんだけど、世の皆様は Mavericks に上げても特に困っていないようで。おかしいなぁ。
自作でXML作ってみてもダメ出し、むー、と思い悩んでいたらこんなページを見つけた。
Mavericksで起動後しばらくするとIMEのトグルができなくなる不具合? - Google グループ

お、おう。で、つらつらとスレッドを眺めていくとありました。

KeyRemap4MacBookやEventViewerは、現在のInput Sourceを取得するために NSDistributedNotificationCenterという仕組みを使って IMが変化したときに通知を受け取っているのですが、 この通知まわりの処理がうまく動いていないようですね。  distnotedというのがNSDistributedNotificationCenterによる 通知を司っているのですが、このプロセスが暴走していたり、 このプロセスを手動で止めていたりといった心当たりはありますでしょうか? (暴走しているかどうかはアクティビティモニターで確認できます。)

そうそう、Emacs使ってると何か知らんが Mavericks に上げてから、知らないうちに distnoted ってのがメモリ食いまくって色々と重たくなるので定期的に killall していたのであった。

ということで、今後は「重たくなったら killall distnoted」→「落ち着いたら KeyRemap4MacBook 再起動」ってことになるのかなぁ。面倒だけど仕方が無い。
これが Mavericks の不具合なのかどうか。Emacs のパッチでてるみたいだけどなぁ。入れ直すと挙動変わったりすると難儀なので、仕事落ち着いてから入れ直すかなぁ。

| | コメント (0) | トラックバック (0)

2014年3月 7日 (金)

OSXの日本語入力

今更、という話。

マカーになって(戻って)何年になるか分からないけど、メール書く→ターミナルに移る→「ls」とか全角で打ってイラッとする→日本語入力を切る、ってのを何度となくやっていた。USBを逆に刺して刺し直すぐらいイラッとしながら何度となくやっていた。

ちょいとATOK周りをみてたら、システム環境設定の「キーボード > 入力ソース」に「書類ごとに入力ソースを自動的に切り替える」という謎の文言が。

チェックしてみたら、思い通りの動きのような。アプリ毎に入力モードを覚えて置いてくれるのかしら。これで少しは快適に暮らせるかしら。
どうでもいいけど月額で使ってるATOK、これまで税込み300円だったのが、4月から309円になるそうで。美しくないなぁ。

日本語入力がらみで行くと、相変わらず腐ってるM$社のブラウザとIME.

IE 11 で ime-mode:active のフォームで半角カナになってしまう - マイクロソフト コミュニティ

何が困るって、Webサイト側では何の対処も出来ないし、ユーザにはいけてないサイトだと思われてしまうことだよなぁ。みんな Chrome とか使って欲しい。ってかM$は大人しく手を引いて欲しい。

| | コメント (0) | トラックバック (0)

より以前の記事一覧

その他のカテゴリー

cycle | あばうと | てっく | ラグビー | 寝言 | 戯言 | | 智慧袋 | 甲州街道