【Android】続・端末標準の電話機能でSIPを使う方法(受信・送信)【GalaxyS7】
この前Nexus5(とZenFone4)でのSIP電話の設定から通話までをまとめたが、Galaxy S7のSIP設定で2時間近く吹っ飛んだので書く。
これを読みにきた人はSamsungに対する何かそのような気持ちを募らせていることと思うが、とりあえずこの前書いたわりと標準的なAndroid端末での記事を読んでからこれを読んでほしい。
description
SMARTalkとかChiffonみたいなサードパーティアプリを使わず、050から始まる電話番号も使わず、Android端末Galaxy S7の電話機能でSIP電話を受ける・かける方法。
スクショはGalaxy S7 (Android 7.0)のものを掲載。
overview
Galaxy S7にSIPアカウントを割り当てる
ZenFone4は親切に、Nexus5も余計なことをせず見せてくれる通話アカウント画面だが、Galaxyシリーズの場合当該Activity(com.android.phone.settings.PhoneAccountSettingsActivity
)を直接叩くことでやっと開ける。
特定のActivityとかServiceを直接起動するアプリはいくつかあるらしい。ここではQuickShortcutMakerを使った方法を紹介する。
- QuickShortcutMakerを起動する
Phone
(com.android.phone)を探すPhone
の中のPhoneAccountSettingsActivity
(com.android.phone.settings.PhoneAccountSettingsActivity)を探すtry
をタップしてActivityを開く
あとは他のAndroid端末と同じ(多分)
参考サイト(英語)
SIPアドレス宛てに電話をかける
他のAndroid端末だと「連絡先(Contacts)」のカードに「SIP」という欄があって、そこからSIP電話をかけることができるんだけどGalaxyシリーズはそれがない。ではどうするかというと普通に電話番号欄にuser@example.com
みたいな文字列を登録する。
で、それをやろうとすると入力制限(数字記号のみ)に引っかかるので、
- コピペするか
- 向こうからかけてもらって登録する
みたいな対応が必要になる。
tl;dr
Samsungの「どうしてもSIPを簡単に使わせたくない」という気持ちが垣間見える。つらい。
ゼロからはじめる ドコモGalaxy S7 edge SC-02Hスマートガイド
- 作者: 技術評論社編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2016/07/08
- メディア: Kindle版
- この商品を含むブログを見る
*.mdファイルを読み込んで整形してHTMLファイルに書き出すスクリプト
*.md
の内容をブロック要素ごとに分けて*.html
として出力するスクリプトを(けっこう前に)書いた。
description
*「利用規約とかライセンスとかのマークアップがアプリのAssetとサーバー上とで違うのdiff確認しづらくない?」
*「そのへんマークダウンで管理したいよね〜」
みたいな雑談が聞こえた後30分くらいで雑に書いた。
usage
npm install
してnpm test
すると、SAMPLE.md
の内容を元にSAMPLE.html
内の{{%}}
を置換するかたちでTEST.html
を生成する。
feature
マークダウンテキストをまるまるhtmlにパースして<body>
に突っ込むのではなく、ブロック要素に分けてパースするようにした。
dependency
- fs: ファイルのReadWriteはNode
- markdown.js: マークダウンテキストのパース
課題
あまりにも雑に書いたので実際に使うならなんかもうちょっと考える必要がある。
そもそもReactなりVueなり使えばいいのでは……と思ったけどそれだとアプリのAssetで使えないのか……
- 作者: David Mark Clements,和田祐一郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/02/23
- メディア: 大型本
- 購入: 2人 クリック: 4回
- この商品を含むブログ (5件) を見る
【QA】QAとして開発チームにお願いした4つのこと
このエントリではゴリゴリの開発者ではない人間が、QAとしてアプリケーション開発チームに参加した後、実際にチームメンバーにお願いした内容を紹介する。
※この記事は以下のエントリ(英語)を和訳・追記したものです
- 前提として
- 1. 開発者の事情は不必要に考慮したくない
- 2. テストの方法や質問への回答を明確に書いてほしい
- 3. フォーマットは守ろう
- 4. 変な質問をするかもしれないけど実装者を責めているわけではない
- 最後に
- tl;dr
前提として
書いた人のスペック
ここ数年仕事としてソフトウェア開発はしてなかったけど、個人的にHTML5+JSベースのツールを公開したりはしていた。
求人票に書かれていた条件は次のような感じで、アプリケーション開発に関する知識は求められていなかった。
- 日本語と英語でコミュニケーションがとれる
- 文章でバグの内容を説明できる
そこへたまたま
- アジャイル&GitHub/カンバン/チャットツールベースのプロジェクトを経験している
- GingerbreadかHoneycombくらいまでの古いAndroidアプリ開発の知識がちょっとある
- テストケースを自分で作れる
- MaterialDesign万歳
みたいなスキルセットで参加したので、1ヶ月ちょっと働いたあたりで「ちょっと待遇面について話そう」ということになった。そのときした話がこのエントリの元になっていて、待遇面の変化についてはまた別に書く。先に言っておくと時給が3割以上上がった。
どういう仕事をしているかというのはこの前別のブログに書いた。
読んでみて欲しい人
このエントリは次のような人にとって役に立つかもしれない。
- チームが大きくなってきてQAを雇いたいなーと思い始めたマネージャー
- すでにQAと仕事をしていて、実機を使ったテストを依頼する開発者
- 元々開発やってて初めてQAとしてプロジェクトに加わる人
1. 開発者の事情は不必要に考慮したくない
当たり前なんだけどユーザーの大半は開発側の事情を知らないし、考慮しようとも思わないので、QAとしてはそういう実際のユーザーの気持ちを尊重していきたい。
例えばバグを報告したときに「KitKatではそのAPI使えなくて〜」とか「実装するのめちゃくちゃ難しくて〜」みたいな開発者側の情報は書いてもいいけど、それよりも先に「バグなのか仕様上しょうがないのか」「直すのか直さないのか」を答えてほしいという気持ちがある。
メンバーに誠実であろうとしてロジックとか閾値とかOS仕様を説明したくなる気持ちはすごく分かる。分かるけど私は読み飛ばしていくからな(後述)。
2. テストの方法や質問への回答を明確に書いてほしい
結果的にたまたま偶然開発知識がある人間が参加してしまったけど、QAとして開発知識を持たない人間を雇う利点は客観的なブラックボックステストができるということだと思う。開発側の事情に忖度して「これ変だけど仕方ないか」って考え始めるともう人の手でわざわざ端末操作して目視で確認する意義がなくなる。
あと本来読まなくていいものを読んだり、確認しなくていいものを確認したりするようになると、限られた時間内で上げられる成果が小さくなるので極力やりたくない。
何人かで協力してバグを修正したり新機能を実装していく中で、「これは他のメンバーのために残しておいたほうがいい」と判断した情報をTrelloのカードに追記するのはすごくいいことなのでやってくれていいんだけど、私がいちいち「誰向けの情報か」を判断せずに読み飛ばせるよう、開発者向けの情報とQA向けの情報は明確に区別して記載してほしいというお願いをした。
3. フォーマットは守ろう
ここまでに挙がったことはフォーマットを守ってコメントを書けば達成できるので全然難しいことじゃない。
- 確認してほしい環境(弊社の場合DeployGateのビルドバージョン)
- 確認してほしい箇所
- どうなっていてほしいか(もしくはその逆)
動作確認に必要な情報って基本これだけなので、開発メンバーの間で共有しなければいけない話は<hr>
とか入れて区切るとかインデント下げるとか2秒でできる工夫をしてほしい。
以前はTrelloのカードにPull RequestのURLが貼ってあるだけみたいなカードでも動作確認していたんだけどあまりにも精神衛生によくないのと、純粋に効率が悪いので「今後はねーから!」宣言をした。これは具体的に言うと
- Pull RequestのMerge元のブランチ名を確認して
- ブランチ名から配布パッケージを探して
- Pull Requestのコメントを読んで再現手順を確認して
- 実機で動作確認をする
という手順で作業をすることになる。最初のステップで既にGitHubを使った開発知識がないと詰むし、PRに再現手順書いてるならそれカードにコピペするだけで私がリンク踏む必要なくなるよね?と念押しした。
ただ弊社環境、CIが止まってビルドされるまで時間がかかることがよくあるので、そういう場合はDeployGateの配布パッケージを書く代わりにブランチ名を書いてもらうようにした。
4. 変な質問をするかもしれないけど実装者を責めているわけではない
「変な質問」というのはほとんどが開発者にとって当たり前であることを確認するような質問で、もちろん実装者を責めているわけではない。実際にあった例でいうと「SMS送信の権限与えてないのにSMSに返信できるのはOKなの?」みたいな話。
人間は良くも悪くも慣れる生き物なので、ずっと同じ機能を実装していると慣れて見落とすことがある。「テスト用の文言を入れたままリリースしてユーザーに指摘される」みたいなミスは最悪だけどいろんな会社のいろんなプロダクトでよくある。そういうミスを防ぐためにPull Requestを送って複数人の目で確認してQAが実機で確認する、というプロセスを踏んでいるので、品質を上げるためだと思ってほしい。
最後に
デザイナーと開発者とQA、なんなら事務方を加えてもいいんだけど、みんな目指すべきゴールは「ユーザーの満足」なので、良いものができるように協力してやっていきましょう。
Android改善プログラミング (SHOEISHA DIGITAL FIRST)
- 作者: TechBooster,mhidaka
- 出版社/メーカー: 翔泳社
- 発売日: 2016/03/15
- メディア: オンデマンド (ペーパーバック)
- この商品を含むブログを見る
- 作者: 瀬戸直喜/株式会社ブリリアントサービス
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/05/25
- メディア: 大型本
- この商品を含むブログ (2件) を見る
tl;dr
この日本語版を書いていて思ったんだけど、
みんな目指すべきゴールは「ユーザーの満足」なので
最後のこの部分を見失いがちなプロジェクトが巷にはすごく溢れているんじゃないだろうか。リーダーとか営業とか役員とかホールディングスとか受注元とかの顔色を窺って「いかに無難にそのプロジェクトを終わらせるか」が目標になってしまうケースは今までたくさん見てきた。
なので、こういう「ゴールを見失わないチーム」にいられることはとても幸せなことだし、できれば世の中の全てのチームが(業種問わず)そうなればいいよねと思う。
もちろんこういう気持ちになれるのは金銭報酬とか拘束時間とかの待遇に納得しているからなので、そういう合意を取らずに綺麗な目標だけ押し付けてくる職場は当たり前だけどよくないと思う。
【Android】端末標準の電話機能でSIPを使う方法(受信・送信)
設定から送信までまとめて日本語で書いてあるエントリがあんまり見当たらなかったので書く。
description
SMARTalkとかChiffonみたいなサードパーティアプリを使わず、050から始まる電話番号も使わず、Android端末の電話機能でSIP電話を受ける・かける方法。
スクショはNexus5 (Android 6.0)のものを掲載。
overview
Android端末にSIPアカウントを割り当てる
Android端末をSIP電話の受信機にするにはSIPアカウントを割り当てる必要がある。
key | value |
---|---|
ユーザー名 | foo |
パスワード | bar |
ドメイン | example.com |
「foo@example.com」宛てのSIP電話を受信するための設定手順はだいたい以下の通り(例外多数)1。
- 「電話(Phone)」を開く
- 連絡先検索バーの「…」をタップ
- 「設定(Settings)」をタップ(→画像)
- 「通話(Call settings)」をタップ
- 「通話アカウント(Calling accounts)」をタップ(→画像)
- 「SIPアカウント(SIP accounts)」をタップ(→画像)
- 「SIPアカウント」一覧のヘッダの「+」をタップ(→画像)
- ユーザー名、パスワード、ドメインを設定して「保存(Save)」(→画像)
- 「通話アカウント」画面で「着信を受ける(Receive incoming call)」をオンにする
SIPアドレス宛てに電話をかける
「foo@example.com」宛てに電話をかける場合「連絡先(Contact)」にアドレスを登録してしまうのが多分一番早い2。
連絡先の「その他の項目(More fields)」に「SIP電話」の項目があるのでそこに「foo@example.com」を登録する。(→画像)
tl;dr
読まなくていい個人的にハマったところ
- ♯SIP ♯とは(→IP電話のプロトコルの一種だよ!)
- ドメインをタイポしまくる(→コピペするか他の人にも確認してもらおう!)
- 「着信を受ける」がオンになってない(→送信はできるけど受信はできないよ!)
- Wi-Fiがオンになってない(→インターネットに繋がってないと使えないよ!)
- 作者: Henry Sinnreich,Alan B. Johnston,阪口克彦
- 出版社/メーカー: オーム社
- 発売日: 2002/10
- メディア: 単行本
- 購入: 1人 クリック: 16回
- この商品を含むブログ (5件) を見る
【MONA】tipmonaを使う方法
仮想通貨界隈が焦げ付いている今日この頃ですが、@tipmonaを使った投げ銭を試してみたのでメモ
tipmonaの使い方
tipmonaはTwitterを使って投げ銭ができる仕組みで、送金以外にも残高参照などもろもろの機能をCIっぽく使うことができますが、TwitterのAPI制限もあるので実質使うのは送金の「tip」だけになりそう。
送金以外の機能はだいたいMonappyからでも可能です。
@tipmona tip @${screen_name} ${value}
@tipmona tip @deepgorikai 0.09 Monappy→tipmonaでの手数料分目べりしちゃいましたごめんなさい(;´∀`)
— wifeofvillon (@wifeofvillon) 2018年1月27日
@wifeofvillon さんから @deepgorikai さんにお届け物ですっ! つ[0.09mona]
— モナコインちゃんbot (@tipmona) 2018年1月27日
他のコマンドは公式ドキュメントを参照のこと。
Monappy⇔tipmona間のMONA移動
今回はMonappyでMONAを貸してくれる人を募り、Monappyで投げ銭してもらったMONAをtipmonaで返してみました。
今回引っかかったのは「Monappyとtipmonaのウォレットは別」という点でした。簡単な図を用意しましたが、Monappyで借りたMONAをtipmonaで返すには
- Monappy上で受け取ったMONAはMonappyのウォレットにプールされる
- Monappyから手数料0.01MONAを払ってtipmonaのウォレットに入金する
- tipmonaでMONAを送金する
という手順を踏む必要があります(必然的に0.01MONA目減りする)。
毎回約7円くらい目減りするというのもアレなので、ウォレット間のMONA移動はある程度MONAが溜まってからの方が良さそうな気がしました。
MONAの入手方法
MONAはbitbank.ccやbitFlyerで購入することもできるのですが、口座開設の身元確認に少なくとも1営業日はかかるので、1MONAくらいなら絵が描ける人はMonappyで投げ銭してもらう方が早い気がします。
↓実装中
macOS High Sierra の「Month 13 is out of bounds」エラーに対処する(β)
NOTE: Mac初心者が成長するためのぼっちアドベントカレンダー・21日目
WIP: このエントリで紹介している内容には開発者向けbeta版の話題を含みます
前置き: 筆者のマシンに起こっていたこと(2017-12-21現在)
今回のエントリを書く背景には大きくふたつの問題があり、今回はひとつめの問題について対処した話をします。
- 大した作業をしているわけではないのにハング→再起動を繰り返す
- 「艦隊これくしょん-艦これ-」と「刀剣乱舞-ONLINE-」を同時にGoogle ChromeでプレイするとCPU使用率がすごく高くなる
macOS High Sierraで起きていた(いる)「Month 13 is out of bounds」エラー
元々「滅多にフリーズしない」と言われているMacをやたらハングさせる筆者ですが、12月上旬は5日に1回ペースだった異常終了がどんどん頻繁になっていき、ついには12月20日の時点でブラウザ上での作業が困難になりました。
Macのログメッセージを確認する
Macでは「コンソール」を使用することでログメッセージを確認することができます。
最初はSystem.logに適当にあたりをつけて再起動直前の状況を知ろうと思っていたのですが、とにかくものすごい勢いで「Month 13 is out of bounds」というエラーが吐かれていることを発見しました。
「Month 13 is out of bounds」エラー
これはCore Foundationに作り込まれているバグらしく、スペックがあまりに低いわけでもない限りそこまで著しくCPU使用率を逼迫させていたわけではないようです。
ただ筆者が使っているマシンがCore i5/メモリ8GBという微妙なスペックであること、常駐アプリが多いこと、Chromeで大量にタブを開いて作業をしていることなどが重なり、頻繁な再起動に繋がったのではないかと考えています。
とりあえずの対応としては以下が挙がっています。
- システム時間を2017年12月以前に戻す
- UserEventAgentをkillする
システム時間をいじるのは影響範囲が大きそうなのでやりたくないのと、UserEventAgentが何をやっているプロセスなのかググってもよくわからなかったのとで、他の対応を取ることにしました
対応1: mdworkerを止める
mdworkerというSpotlight検索のプロセスが、UserEventAgent以外で頻繁にエラーログに出現していたので、元々Spotlight検索をそれほど使っていなかったこともあり、マシン内を検索しないように設定しました。
対応2: メモリを意識的にクリアする
下のエントリでMagicanLiteというアプリを紹介しています。常にCPU/メモリ使用率を意識してチェックするようにし、頻繁にメモリをクリアするようにしたのですが、「艦隊これくしょん」で遠征に出すことすらつらいという状況でした。
あとMagicanLiteがすげー勢いで「Month 13 is out of bounds」を吐く……
対応3: ChromeHelperをできるだけ立ち上げないようにする
Google Chromeを使っているとChromeHelperというプロセスが実行されます。
これがCPUもメモリも食う上にタブの数だけ(?)増えるという状態だったので一部の作業というか、連隊戦イベント絶賛開催中の「刀剣乱舞-ONLINE-」をSafariで実行するようにしました(薄々そんな気はしていたのですが案の定あまり意味はありませんでした。これについては明日書きます)。
また、できるだけタブを開きっぱなしにしないようにしましたがこれもまた限度がありました。
今検索したら良さげなコマンドがあったので明日試そう。
対応4: 「macOS High Sierra 10.13.3 beta 2」をインストールする
タイムリーなことに12月19日に開発者向けbeta版がリリースされていたので、完全に力技なんですけどインストールしました。
夫のアカウントを使ったので確証はないんですけど、以下の条件を満たす必要があるかもしれません。
- Apple Developer Accountを持っている
- メンバーシップを購入している
結論: 正式リリースはよ
とりあえずこれを書いている現状、理不尽な再起動は起こっていませんが、Google Chromeが阿呆ほど重いのと、Beta版なので(「Month 13 is out of bounds」でない)エラーログが尋常じゃない勢いで吐かれています。
はよう正式リリースを頼む。
おわりに
図らずもアドベントカレンダーのネタができてしまったことを嘆く筆者のツイートです。
Macがハングと再起動を繰り返すのでコンソール見たら「Month 13 is out of bounds」っていうJSのDate関数で失敗したみたいなログが大量に吐かれててどう考えてもこれ https://t.co/wAwMT2RBG7
— wifeofvillon (@wifeofvillon) 2017年12月20日
システム日付を11月に戻すとかリスキーすぎてやりたくないんだけどパッチはまだか
— wifeofvillon (@wifeofvillon) 2017年12月20日
図らずもアドベントカレンダーのネタができてしまったな……
— wifeofvillon (@wifeofvillon) 2017年12月20日
macが作業できないレベルで異常終了するの本当無理
— wifeofvillon (@wifeofvillon) 2017年12月20日
UserEventAgent at 100% CPU after security update | Official Apple Support Communities https://t.co/QKSKFiw3nl
— wifeofvillon (@wifeofvillon) 2017年12月21日
>StartCalendarInterval属性を使用したplistファイルを削除して再起動しました。これでOKです。
それ本当にOKなのかな???
Macでフルスクリーン化(最大化)した複数のアプリをひとつのディスプレイに表示させる方法
NOTE: Mac初心者が成長するためのぼっちアドベントカレンダー・20日目
フルスクリーン化(最大化)したふたつのアプリをひとつの作業領域(ディスプレイ)に表示させる
先日、Mission Controlを使って複数の作業領域を使う方法について書きました。
今日は「絶対できること知らない人いるって!」と言われたので、フルスクリーン化したふたつのアプリをひとつの作業領域に表示させる方法を紹介します。
上の表現だと意味不明だと思うんですけど要するにこういうこと(Atom+Trello)
複数のアプリをひとつの作業領域に表示する
実現方法は次の通りです。
- (前提:ふたつのアプリをフルスクリーン表示にする)
- Mission Controlを表示する
- 片方のアプリをもう片方のアプリにドラッグ&ドロップする
解除方法
何気なくやってできたのでちゃんと調べていないのですが、筆者は片方のアプリのフルスクリーン化を一旦解除することで元に戻しています。
余談
これ無限にアプリ追加していけるのかと思ったらそうでもなかった。
おわりに
ちなみにネタ提供者は曲面ディスプレイ使いでした。はぁなるほど
LG モニター ディスプレイ 29UC88-B 29インチ/曲面 ウルトラワイド/IPS 非光沢/HDMI×2、DisplayPort/スピーカー内蔵/高さ調節対応
- 出版社/メーカー: LG Electronics Japan
- 発売日: 2016/03/24
- メディア: Personal Computers
- この商品を含むブログを見る
LG モニター ディスプレイ 38UC99-W 37.5インチ/曲面 UltraWide(3840×1600)/IPS 非光沢/USB Type-C、HDMI×2、DP/スピーカー/高さ調節
- 出版社/メーカー: LG Electronics Japan
- 発売日: 2017/02/10
- メディア: Personal Computers
- この商品を含むブログを見る