きりのブログ

パソコン、開発関係の思いつきと作業記録

Android端末への電話・LINEの不在着信をiOS端末へ通知したい

電話だけで良いならIFTTTを使いましょう。


Androidに不在着信があったらiPhoneにプッシュ通知する方法

 

これで十分な人も多いと思います。でも、LINEの通話も使う人なら同様に通知して欲しいですよね。という訳で試行錯誤してみました。

必要なのはPushBulletとTaskerです。LINEの不在着信を通知する方法の概要は、TaskerでAndroidの通知を捕捉してPushBulletを起動し、PushBulletはiOSへ通知を送信。ただし、Taskerは有料アプリなのでご注意。

Taskerの設定は柔軟性がある代わりにちょっと分かりにくいです。

 

不在着信の場合の手抜きな説明。

Profile: Event > Phone > Missed Call

Task: Plugin > Push A Notification (宛先端末やタイトル、文面など設定)

 

LINEの場合は、通知を捕まえる必要があるので別のProfileを作ります。また、事前準備としてAndroidの設定にあるユーザー補助の項目でTaskerを有効にしておきます。

Profile: Event > UI > Notification
  Owner Application: LINE

タスクは不在着信と一緒なので、通知のタイトルや文面を変えたタスクをLINE用に作成して紐付けます。

副作用(?)として、LINEの通話だけでなく、メッセージの着信も通知されます。通知を捕まえるためのProfile(Context)設定にあるTitleをうまく設定すれば、特定の人の不在着信だけ拾うことも出来るので、多くの人とLINEでやりとりしている人でも対応出来ると思います。

 

なんでこんなことをしたくなったかといいますと、Android端末(音声SIMあり)とiPhone5(SIMなし)の2台持ちをしており、通勤時など移動中はAndroid端末はテザリング有効にしてカバンにしまい、ポケットに入るiPhoneを主に使っています。この状態で着信があってもほぼ気づかないので、数時間移動するときは定期的にカバンの中をチェックしていました。これが結構煩わしかったのですが、今回の設定で手近な端末を見れば済むようになり、気分的にも楽になりました。

Xperia Z Ultra + BIC SIMにした話

auで2年契約していたiPhone5の更新月になったので、次をどうするか数ヶ月前から検討してきました。

iPhone6、同Plus、そしてiOS8の発表でサプライズがあればiPhone継続!と思っていたのですが、去年に引き続きあまり心惹かれる新機能・新サービスはなし。このままiPhoneにするか、それともAndroidに乗り換えるか悩ましいところ。新機能がないのは完成した製品の証ともとれますが、iPhone継続の決定力としては弱い。

折しも、8月末にiPhone5バッテリー交換プログラム(いわゆるリコール)が発表され、運良く(?)対象機だったのでバッテリー(というか本体まるごと)新品状態になったばかり。そこで急浮上したのが、このままiPhone5を使い続けるという選択肢。

auの契約をこのまま更新すれば手間ないのですが、月額料金が5,000円を超える計算になります。ちなみに、今までは2,600円/月程度(うろ覚え)だったので、ほぼ倍です。ちょっとこれはキツイ。

そこでau系のMVNOでiPhone運用を考えましたが、mineoはiPhone5s/cしか対応してません。ヒドイ。

このタイミングで、待ってましたとばかりにMVNO各社からデータ増量やら値下げやらのキャンペーンが出てきました。IP電話サービスを使えば音声通話なしの安いプランにすることも出来ますが、保険の意味も込めて音声通話ありのプランを幾つか選定。

安くてそこそこのデータ量があるもの、ということでIIJmioのみおふぉんを選び、au継続した場合と2年間トータルの料金差額を計算しました。

みおふぉんは月額1,600円で、auは月額5,500円とすると、一ヶ月の差額は3,900円。24ヶ月で93,600円です。結構、いやかなりデカイです。これだけ差があると、SIMロックフリーのグローバル版の端末を買っても大抵はペイできちゃいます。

せっかくiPhoneが新品になったので、このまま安く済まそうと継続使用を検討したにも関わらず、新しく端末買ったほうが安いとか訳が分かりません。

一応、docomoSoftbankへの乗り換えも検討しましたが、MNP優遇は既になくなっている上、例の通話定額プランで月額料金もau継続と大差なし。MVNOに比べれば端末代をほぼ負担してくれるので、実質は安いのかもしれませんが通話あんまりしないのにモッタイナイという気がどうしても拭えません。また、下取りプログラムも発表されましたが、新品iPhoneを売る気にはなりません。まだまだWiFi専用のLINE、ゲーム機として余生を送ることもできますし。

というわけで、回線としてみおふぉんを使い、それに対応した端末を手に入れればこれまで通りの金額で維持できる算段となりました。予算は前述の93,600円まで。とはいえ、これより安く端末を調達できれば、それに越したことはありません。この予算ならば、iPhone6だって手が届きます。

しかしながら、今回のiPhone6にはイマイチ魅力を感じなかったので、Androidにしようと決めました。Android端末はこれまで触ったことも調べたこともなかったので、どれにしようか悩みました。

一時期、タブレットが欲しかったことがあり、その際にファブレットについてもちょっと調べたことがあったので、せっかくならとGalaxy Note系、Xperia Z Ultraを候補として比較しはじめました。

Galaxy Noteは新機種が発表されたばかりの最新スペックな上、大きさもちょうど良さそうとなかなか魅力的でした。でもカメラ性能がちょっと不安。
一方のXperia Z Ultraは、国内発売は去年の12月ですが、世界的には去年の6月頃発表されており、1年以上前の端末です。大きすぎるのが気になりますが、カメラ性能はまあまあといったところ。(フラッシュないですが)

いろいろな評価や値段を調べたところ、Z Ultraの評価は上々、価格も3万円代前半と安かったのでこれに決定。最終的にはeXpansysで購入しました。(なんでここまで値崩れしているのかは分かりませんが、気にしないことにします。)

端末が先に手に入ったので、MNPの準備です。
今回は電話でMNP予約番号を取りました。その場で発行してくれます。というか、口頭で番号伝えられたのにはびっくりしました。

つぎにみおふぉんですが、同じサービスをビックカメラが店頭販売しています。これがBIC SIMの音声通話付き。みおふぉんに公衆無線LANのサービスが付加されているのでちょっとだけお得です。

で、MNP手続きですが、まずはじめにBIC SIMをビックカメラで買わなければなりません。これはネットでも買えるようですが、私は急いでいたので店頭で購入。ビックカメラの一部店舗では、その場でMNP手続きが出来ますが、生憎私の行ける範囲の店舗ではやっていないので、自分でネットから行いました。

私の場合、丸一日以上回線がない状態がありましたので、電話が必要な予定のある方は注意が必要です。私は木曜日の深夜に手続きをして、金曜夕方に本人確認完了の連絡を受け、土曜日の夕方にauがオフラインになり、SIMカードが日曜日の夕方届いて開通となりました。土曜日夕方~日曜日夕方まで回線のない状態でした。しかしながら、土日も休まず処理してくれるのはありがたいです。

APN設定をして、すんなり繋がりました。今のところ、回線品質に不安を覚えたことはありません。

Androidにして分かったのは、初期投資が少々必要だということ。Z Ultraのせいもありますが、カバー、保護フィルム、SDカードは最低限必要。できれば、リングストラップもあると安心。なにせデカイので。iPhoneは裸運用してきたので、いっそう気になっちゃいました。

さて、浮いてしまったiPhone5ですが、Z UltraをWiFiテザリングの親にして運用しようと画策中です。ガッツリ調べ物をするときは画面の大きいZ Ultraがが良いのですが、移動中にちょっとネットサーフィンするには小さいほうが便利です。2台持ちだと充電など運用は面倒ですが、適宜使い分けできるメリットと相殺されるはず、と考えています。しばらくこの運用で試してみたいと思います。

SoftEtherを試してみた

これまでリモートアクセスにはQNAP+OpenVPNCiscoルータ+VPN Clientを使っていました。どちらも普通に使えますが、不満な点もあります。

OpenVPNはクライアントの設定に管理者権限が必要な上、テキストベースなのでちょっと面倒です。
Ciscoはクライアントは使いやすいのですが、ドコモの接続ソフトと併用すると不具合を起こすことがありました。
 
サーバーの導入と設定の手間は、どちらもあまり変わらない印象です。
多くの人に使ってもらうには導入の容易なCiscoかな、と思っていたのですが、クライアントソフトがWindows8を正式にはサポートしておらず、私のパソコンでは起動のたびにインストーラが走るなど謎の挙動をするようになってしまうなど、ちょっと信頼性に欠けます。後継のAnyConnectというクライアントはありますが、追加のライセンスが必要みたいです。ついでに、今はIPSec接続するようにしていますが、Androidはネイティブでは対応しておらず、L2TP/IPSec対応するよう設定変更も検討していた上に、ハードウェア更新も考える頃合いでした。
そんなこんなで、Win8AndroidiPhone(iOS)で簡単に安定して使えて、設定が容易で、サーバー側も含めて安価に、さらに長期的に使えるもの、という要件で探したところ、SoftEtherオープンソース版が良さそうだったので試してみることに。
 
サーバー機としては、そこらのPCにUbuntu+NIC2枚の構成でよろしいかと。私はHyper-V上の仮想マシンにしました。(SoftEther Projectとしては、サーバー機としてもWindowsオススメみたいですのでPC余っていればWindowsのが簡単かも)
 
作業はこちらを参考にさせて頂き、行いました。
 
ハマリどころは、2枚目のNIC(eth1)が自動起動してなくて起動できなかったのと、サービスの自動起動。(自動起動は方式が移り変わっていってて、何が正しいのか分からないです。今回はupdate-rc.dでやりましたが)
 
設定はマニュアル通りで問題なさげ。ただ、設定はサーバーでやらずに、Windows用の管理ツールから行うのが普通らしい。サーバーがInternetからアクセスされる状態だと、管理ツールもそこへ接続することになるので、アタックとかちょっと心配。ツールからアクセスすると、初回はパスワード設定もツールから出来ちゃうという、素晴しい配慮というか、やりすぎというか、何かすごい。
 
ルーターなど上流にFWあったらTCP443の穴開け。L2TP/IPSec使う場合は、UDP500,4500も穴開けが必要(Androidから繋ぐ場合とかね)。いくつかのポートで待ち受けてるので、必要ならそれらポートも開けましょう。
 
クライアントへのIP割り振りは、既存LANのDHCPから行われ、間に変なルーティングが入ることもないので至ってシンプル。ルーティングテーブル確認してないけど、クライアントからのトラフィックは全部流れるみたいだし、直接LANに接続しているように使えそう。その分、無用なトラフィックまで流れるだろうから、モバイル環境だとちょっと心配。それ用のオプションやら設定やらあったけども試してません。
 
Windows用クライアントは、パッと見情報が多すぎて、一般ユーザーが使うには身構えちゃうかも。といっても、そこまで複雑じゃないし、直感的には使えます。接続用のショートカット作成機能があるので、普段はこのショートカットでオン・オフしてもらえば問題ないはず。
 
 
かなりの親切設計で素の状態でも問題なく使えるし、複雑なことも十分に出来ると思いました。
 
試していませんが、サーバーをプライベートネットワークに設置することも出来るので、あまり身構えずに構築できるのは良いと思いました。
 
最近のVPNやらリモートデスクトップ系やらの仕組みって、会社のネットワーク管理者からすると使わせないように塞ぐことは出来るけど面倒に感じると思います。何はともあれ、ご使用は計画的に。
 
2014年03月05日(水)追記
稀な構成なんですが、2つのIPセグメントが同一LANに混在している環境(L2レベルで到達可能)で、「AユーザーはXセグメントにアクセス可能」「BユーザーはYセグメントで」という設定は出来ない模様。SecureNAT/DHCP機能が惜しいところまで行ってるんですが、これを実現するにはルーター機能も実装しないと無理かも。またはDHCPリレーエージェントの機能とか。
ただ、ユーザー毎のパケットフィルタリングルール(アクセスリスト)が設定できるので、発想を変えれば対応できるかも。

Google App EngineでPHP

前回の投稿 BlowsingNow!ブックマークレット代替 でBookmarkletPHPでそれっぽいものを作ったんですが、PHPが動く環境がないと使えませんでした。

そんな環境どっかにないかなーと探していたら、Google App EnginePHPが使えることが判明。以前ちょろっと触っただけで完全放置状態だったのですが、今回の用途にはちょうど良さそうだったので、お勉強がてら設置してみることにしました。

参考にしたのはこちら。

Google App Engine for PHPプレビュー版でphpinfoを動かしてみた | Lancork

後は公式ドキュメント。

Introduction - Google App Engine — Google Developers

まずはGAE上でアプリケーションの作成を行い、次にローカルでテストしたりデプロイするための環境(SDK)をインストールして初期設定を済ませます。

PHP用のSDKはここからダウンロード。

Downloads - Google App Engine — Google Developers

これを動かすためにはPython2.7系が必要になりますが、SDKインストーラーの頭でインストールを促されるので、別途ダウンロード&インストールを済ませてから続行します。

これで、SDKGoogle App Engine Launcherがインストールされます。コマンドプロンプトからSDKを叩いて各種操作をしている情報が散見されましたが、Launcherから操作してもできることは変わらない印象でした。

インストールを済ませておいても、なぜかGoogle App Engine Launcherの初回起動時にPythonが見つからないと怒られるので、とりあえず無視して設定画面を開き、Pythonの実行ファイルを指定する必要がありました。

次に、Launcherにてアプリケーションの作成を行います(File - Create New Application)。Application NameにはGAEでアプリケーションを作った際に指定したApplication Identifierの内容を指定します。Parent Directoryはアプリケーション用のフォルダが作成されるパスを指定します。ここにアプリケーション名のフォルダが自動で作成されるため、事前に用意しておく必要はありませんのでご注意を。

作成されたフォルダの中を見ると、設定などを行う最低限のファイルが作られています。アクセス制限やスクリプトのランタイム種別の指定はapp.yamlファイルで行うのですが、PHP用のテンプレートのはずなのに、なぜかruntimeがPython27になっていたりランタイムにphpを指定した時は指定してはいけない(?)使用ライブラリの設定があったりして、もう一声欲しかった感があります。Preview状態なのでそんなものなのかもしれませんが。

このファイルはYAMLの文法で指定するのですが、よくわからないので各所からコピペして試行錯誤しながらとりあえずPHPが動くようにする必要があります。

最終的にはこうなりました。

application: kiri-bween

version: 1

runtime: php

api_version: 1

threadsafe: yes

 

handlers:

- url: /(.+\.php)$

  script: \1

 

- url: /favicon\.ico

  static_files: favicon.ico

  upload: favicon\.ico

 

- url: /

  static_files: htdocs/index.htm

  upload: /

 

- url: /images/(.*)

  static_files: images/\1

  upload: images/(.*)

 

- url: /

  static_dir: htdocs

 

- url: .*

  script: main.app

 

htdocsというフォルダを作ってindex.htmを置いたり、画像用にimagesというフォルダを作ったりしたので、このような形になってます。間違っていたり不足してたりする箇所もあると思いますが、とりあえず動けばいいやってレベルです。

これで、前回作ったPHPファイルとライブラリのファイルを置き、Bookmarklet内のURLを修正してデプロイすれば動くはずだったのですが、GAEではcurlが使えないのでライブラリの修正が必要でした。

こちらを参考に。

【PHP】【GAE】PHPでtwitterBot & GAEにデプロイ - せかいや

話が前後しますが、Googleで2段階認証を設定していると、デプロイ時の認証で怒られます。Launcherが2段階認証に対応していないためです。これは先に紹介したLancorkさんの情報にも書いてあるのですが、ハマるポイントなのでお気をつけを。

こちらの手順でパスワードを発行して、それを指定する必要があります。

Sign in using application-specific passwords - Accounts Help

とりあえず、自分一人で使う分にはこれで完了。ですが、なんだかんだと手間がかかってしまったので、お試しで公開してみることにしました。現在のBookmarkletにはTwitterのアクセストークンなどが埋め込まれているので、公開するにあたってはこのアクセストークン等を埋め込んだBookmarkletを生成する機能が必要です。そもそも、アクセストークンを取得するためには各ユーザーがTwitter上でBweenの使用を許可しなければなりません。

ということで、まずはPHPBookmarkletを生成する方法を調べました。ざっくり言うと、BookmarketのソースとなるJavaScripturi encodeした文字列を、リンクのソースとして指定して、echoで吐き出してやれば良いらしいです(HTMLの<a href="~">のこと)。つまり、Twitterの認証完了時に取得できるアクセストークン等をこのJavaScriptに埋め込んで吐き出してやればいいってことです。

次に、TwitterOAuth認証です。いわゆる、Sign in with Twitter的なリンクを押すと、Twitterのサイトに飛んで認証完了したら、コールバック指定したURLに戻ってくる、というよく見るアレです。

Twitter連携するサービスを作るのは初めてだし、長らくTwitterOAuth認証は触ってなかったので、どういう流れだったかも記憶の彼方。twitteroauthライブラリの説明とTwitterのドキュメント、ライブラリのソースを眺めならが流れを掴みつつ実装しました。

一番参考になったのはこちら。

twitteroauthでOAuth認証を行い、Twitterアプリケーション(Botとか)を作る – part2 « nia.note

セッション使わないとダメなのねーとか、参考になりました。(getAccessToken呼ぶときverifier指定してないのは?でした。ライブラリのバージョンの問題かしら・・・)

使ってみたい方はこちらからどうぞ。

Bween

使うのは自己責任で。使えなくなっても泣かないお約束ってことで一つ。

 

追記

ソースとか。使わせて頂いたライブラリも乗っけちゃってる上、手も入れちゃってるし出展元表記もソース中に無く、ライセンス表記もない。ものすごくお行儀悪いですね。すいません。

kirifeather/Bween · GitHub

後から気づいたけど、config.phpを使うサンプルが本家にありました。こっちの方法にすれば良かった・・・

 

追記(2017年5月17日)

急にエラー吐きはじめてビビった。twitteroauth.phpcURLが使えるか判断して処理切り替えしているところがあったんだけど、数日前にGAE側で環境変わったっぽい。元々使っていなかったので、常時file_get_contentsを使うように慌てて修正しました。それよか、Windowsのデプロイの環境が古くて使えなくなってたのでSDK入れ替えたりapp.yaml修正したりデプロイ手順調べたりする方が大変でした。

BlowsingNow!ブックマークレット代替

今日は@pastakさんが公開して下さっているBlowsingNow!が不調でした。ホストされているWebホスティングサービスの方で問題が出ているっぽいです。急場しのぎということで、BlowsingNow!のChrome拡張版を入れてみたけど認証時に同ホスティングサービスのサーバーを使うため使えず。他の同機能の拡張機能ブックマークレットをいくつか試してみたりしたのですが、しっくり来ませんでした。

何がしっくりこないかって、大抵のものは使用前にTwitterにサインインしておかなければならず、もしテスト用のアカウントなどでログインしっぱなしだったらそちらで投稿されてしまうのです。公式のTweetButtonもありますが、一度Twitterのサイトに飛ばされるのでお手軽感がありません。

そんなわけで、BlowsingNow!が復活するまで自前でそれっぽいのを作って凌ぐことにしました。

ブックマークレットの中身を覗くと、現在のページの情報やプロンプトで入力した投稿内容、アクセストークン/シークレットをパラメータとしてphpを叩いていました。叩くphpのURLとアクセストークン等を変えてやればそのまま使えそうです。

Webサーバーでphpが使えることを確認します。(例:> php -v)

phpからTwitterに投稿できるようにしてやればいいので、方法をググったところ、具体的な方法が書いてあるページが見つかりました。

PHP+OAuthでTwitter - SDN Project

書いてあるとおり abraham/twitteroauth · GitHub というライブラリを設置して、Twitter投稿のサンプルソースをほぼそのまま使わせていただきました。そのままだと、投稿後にTwitterからの応答JSONが生で表示されてしまうので、応答表示部分をカットして元のページに戻るように変えたり、パラメータとして受け取った内容をTwtiter投稿用に整形したりとかちょこっと手を入れたぐらいです。

phpJavaScriptもほとんど触ったことありませんが、なんとかなるものです。

とりあえず急場しのぎ用なのでサービスとして提供するつもりはありません。っていうか、まんまBlowsingNow!なので本家が早く復旧するよう願っています。

 

アレなところは伏せてソース貼っておきます。

Bween

Windows7でタスクバーにピン留めしてたアプリケーションが消えちゃった場合の対処

あるソフトの不具合(?)で、タスクバーにピン止めしたたアプリケーションが綺麗さっぱり消えちゃう現象が起きまして。万人向けの情報ではないので自分用メモとして。

 

原因としては、下記レジストリの情報が初期化されてしまうのが原因っぽいです。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband

 

このレジストリ値はバイナリなんで、手動での操作はできません。このレジストリ値だけ予めバックアップとっておいて戻すとか、コンピューターの復元で戻すとかでも対処は出来るのですが、ちょっと大掛かりになってしまいます。

 

そもそも、ピン留めすると、上記レジストリが更新されるだけではなく、アプリケーションのショートカットファイルが下記に作成されます。

C:\Users\(ユーザー名)\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar

 

ピン留め解除すると、レジストリ値とともにショートカットも削除されるのが正常なんですが、今回のような症状の時はレジストリだけ初期化されショートカットが残る不整合な状態になっています。この状態で以前ピン留めしていたアプリケーションを再度ピン止めすると、「(ショートカット名)(2).lnk」とか出来ちゃいます。気持ち悪いです。

 

対処方法

  1. 一旦このフォルダを複製して退避し、消えてしまったアプリケーションのショートカットファイルを削除
  2. 退避したフォルダ内のショートカットを順次起動してピン留め

以上で元通り。もし、ショートカットのリンク先をカスタマイズしていたら、退避したフォルダ内のショートカットをオリジナルに上書きコピーすればOKなはず。

Firefox21にしたらハマったこと(vimperator)

前回の記事の続編。

予定通りFirefox21になってE4Xが完全になくなりました。

 

で、私が使っているvimperatorのプラグイン2つ(_libly.jsとfeedSomeKeys_3.js)が動かなくなりました。前回は暫定対処としてabout:configから設定変えて逃げたんですが、それももう効きません。ってことで、各プラグインの対応状況をチェックしてみました。

 

https://github.com/vimpr/vimperator-plugins

 

両方とも対応されてます。っていうか、feedSomeKeys_3.jsの方はかなり前に対応済みだったみたいで。

 

ってことで、ファイル入れ替えて完了。