AuとUQからPovo2.0へ番号移行

AuからPovo2.0なるオンライン専用プランが発表されその非標準な利用法について考えてみたりした9月29日9:00amから提供開始ということで,珍しくきちんと起きて手続きした。

結局,Auの通常回線契約2本だけではなく,UQ回線契約2本,合計4本移行した。どれも積極的に利用しない回線だったので維持費を抑えることが目的。前者は最近のiPhone SE投げ売りキャンペーンを利用するために作ったもの。後者はキャッシュバック目的に契約しこちらは実際使っていたのだが,ソフトバンクのiPhone SE投げ売りキャンペーンを利用するために作成した回線が別にあり,自分の外出時データ通信のニーズはそれで用が足りてしまう。ソフトバンク回線はブラックリスト入りを避けるため半年維持せざるをえないが,UQ回線の方はPovo2.0移行により維持費を抑えることができ,しかも短期解約扱いにならない(すぐ後で説明),ということで,それを利用することにした。

ただし,最初に手続きしたAuの2回線は問題なく通るだろうが,UQの2回線,いきなり合計4回線になるということもあり,審査が通らない可能性もあると思っている。現時点で最初に申し込んだAu 1回線のみについてSIM発送準備中という連絡が来ている。

それまでに調べたことと実際の手続きを通じて知ったことをまとめておく。

短期解約扱いにならないか?

  • マツモトさん♂@157 9/27 によるとAuの通常契約から乗り換えた場合,元の契約が短期解約されたとは見なされない。
  • UQのチャットでUQも同様だと(右図)。

ただし,Auの契約期間は引き継げないということなので,元の契約は短期解約扱いにならないとしても,Povo2.0の契約を短期で解約すると短期解約扱いになる可能性が高い

SIMの交換

UQからの番号移行でSIMカードの交換が必要なのはいいとして,Au回線から移行した場合はどうかというと, “povo1.0/povo2.0比較表|povo から新プラン povo2.0 がスタート” によればやはりSIMカードの交換が必要とのこと。Povo1.0への移行では必要にならない,ということなので,Povo1.0への移行を間に挟むとSIMカードの交換が回避できるのでは,と考えるわけだが,Povo1.0から2.0への移行時にはやはりSIMカード交換が必要になるとのこと。

元の回線契約での解約月の料金の扱い

UQ, Auとも元の回線契約での解約月の料金は日割り計算になるので特に月末での番号以降に拘る理由はない(UQについては右図)。

初期費用

最後まで気になったのが初期費用。「0円」としつつ,実際には「さしあたり」「当面の間」課金しておいてその分その後の通信費に充当することで精算する形を取る,というのはAuの常套手段。”povo/au/UQ mobile 間の移行に係る提供条件書” なんかを見ると,少なくともPovo1.0についてはそのような措置が取られていたことが伺える。

長く契約を維持し通信量がかさむのであればそれで問題はないかもしれないが,そういうつもりがないときには地味に問題になる。自分もこれにかつてやられた

そもそも基本0円維持が目的だとすると,3,300円なりをトッピングで使用し切るのに時間がかかる。もっとも,いずれAuかんたん決済は利用できるようになるようだから,Au Payプリペイドカードにチャージすることで,Au側のいわば負債分を使い切ればよいのだが。

実際に申し込み過程で初期費用に関して表示されたのが上。結局さしあたり初期事務手数料はかからないと考えてよいのか?

UQからの番号移行

UQからの番号移行に関してはAuからのそれにはない要件があった。

  • MNP予約番号取得が必要 ー UQのチャットではAu/UQ/Povo間の移行でMNP予約番号はいらない,と繰り返し案内されていたにもかかわらず,UQからPovo2.0への移行では要求される
  • eKYCを利用した本人確認 ー 初めての経験。本人確認書類を正面から撮るだけでなく斜め上からも撮るように指示されたり,顔写真を正面からだけでなく,上を向いた状態,左を向いた状態でも撮影するよう求められた。

ちなみに,でんき割の適用を受けていたが,9月分料金にも割引が効くように,SIMカードが仮に今月中に届いても切り替え作業は10月に入ってから,ただしなるたけ早く。UQで解約月料金には割引が入らないので(シラトリさん♂@0120-929-818 9/29 12:20pm)。

留守番電話機能が実現できない

使用端末自身に(簡易)留守番電話機能が用意されてなければ,Povo2.0では留守番電話は実現できない。これはかかってくる電話を受けもらさないことが重要な層には大問題だろう。それはそもそもPovo2.0のターゲット層ではないのかもしれないが。

まず,自分で直接確認していないが,留守電(留守番電話)機能はないとのこと。しかも,着信転送をサポートしていない。転送さえできれば,IP電話番号に電話転送させて留守電代わりにすることができる

Povo2.0の利用法の一つとして考えていたのは,フルのかけ放題が必要な方に利用してもらうこと。しかしこの方にとって留守電機能は必須だろう。端末としてはHuawei Nova Lite 3をご用意したのだが,この端末には一部の機種にあるような簡易留守録機能はなさそうだ…。

その他

  • 同一名義では5回線まで。
  • 以下だそうで,Au IDの統合をしていると面倒なことになっていた。

    <au IDに複数のauまたはpovo1.0の携帯電話を登録されているお客さまへのご注意事項>
    ・同一のau IDから複数の携帯電話をpovo2.0に移行される場合、大変お手数をおかけしますが、2台目以降は、MNP予約番号を取得のうえ「他社から変更」を選択してお申し込みください。

  • ほぼ0円で維持することが目的なので,SIMカードはAuのGratinaガラホに入れるつもりをしていたんだが,公式対応端末にはなぜかKYF37しか入っていない。SIMロック解除済みの他のGratinaガラホでも使えるだろうとは思うがやってみないことにはわからない(参考: “いまさらながらAuガラホGratina 4G KYF31” )。

WebAssembly, or Wasm

WebAssembly, or Wasm (WebAssembly.org) may have started out as an endeavor to speed up Web browsers, it has gone significantly beyond that scope. With the advent of WebAssembly System Interface or WASI, which provides access to non-Web system-oriented functionality, and non-Web standalone Wasm virtual machines such as Wasmer, Wasm, with sandboxing baked in from the start, could eventually replace Docker.

 

Cassowary, A Constraint Satisfaction System for UI, and Its Reimplementation Kiwi

Cassowary /ˈkæs.ə.ˌwɛɹ.i/ is “an incremental constraint solving toolkit that efficiently solves systems of linear equalities and inequalities. Constraints may be either requirements or preferences. Client code specifies the constraints to be maintained, and the solver updates the constrained variables to have values that satisfy the constraints.” “Constraint Cascading Style Sheets for The Web” is the seminal paper.

It “was developed by Greg J. BadrosAlan Borning (his home page at UW) and Peter J. Stuckey, and was optimized for user interface applications. Badros used Cassowary amongst others for implementing Constraint Cascading Style Sheets (CCSS), an extension to Cascading Style Sheets (CSS). CCSS adds support for layout constraints. These allow designers to describe the layout of a web page in a more flexible manner. Cassowary is used to solve these constraints and calculate the final layout.”

UW Cassowary Constraint Solving Toolkit is a dedicated website for Casowary hosted by UW. It urges visitors to visit overconstrained.io as the website for the “current” Casowary Project, but this site seems to be a malicious site.

Casowary has been ported to many languages other than the original Smalltalk, but Kiwisolver, or Kiwi (repository) is a complete re-implementation in C++ with hand-written Python bindings. lume/kiwi is “a fast TypeScript implementation of the Cassowary constraint solving algorithm (soon for AssemblyScript / WebAssembly).”

According to “ConstraintLayout vs Auto Layout: How Do They Compare? – Big Nerd Ranch,” Cassowary is the basis for iOS’s Auto Layout and Android’s ConstraintLayout.

For resources on Auto Layout in Japanese, see “iOSDC Japan 2017で「Auto Layoutのアルゴリズム」について発表しました – Qiita.”

For those coming from iOS development to Web app development, there’s lume/autolayout: Apple’s Auto Layout and Visual Format Language for JavaScript (using cassowary constraints). Discussions on it on Hacker News mentions Grid Style Sheets or GSS, which also uses the Cassowary Constraint Solver. The latest release of GSS was in 2015, and not much development has been going on recently.

Incidentally, as “Popular CSS Preprocessors With Examples: Sass, Less & Stylus · Raygun Blog” explains, CSS preprocessors seem to have proliferated in the early 2010s. The most prominent three are Less, Sass and Stylus, but none has any constraint satisfaction function.

Speaking of cassowaries, see “Cassowary: World’s most dangerous bird raised by humans 18,000 years ago, study suggests – CNN.”

DashでタブをIFSに代入

根本的誤解をしていた。シェルでダブルクオートでくくった文字列中に “\t”, “\n” のようなエスケープシーケンスに見える句があったときにシェルのレベルで置き換えが行われていると思いこんでいたが,そのようなことはDashではされない。以下Dashのマニュアルから。Bashも同様

The backslash inside double quotes is historically weird, and serves to quote only the following characters:

$ ` " \ <newline>

echoコマンド(シェルビルトインのものも,/bin/echoも)が引数の中のエスケープシーケンスの置き換えをやるのを,シェルがやっているものと誤解してしまったのだろう。う~ん。今頃気づくか。ただし,このechoコマンドの挙動は利用できる(後述)。

IFSの値を変えるのはファイルの読み取り時なんかによくやるが,IFS="\t"のように簡単にはできない。BashにはANSI-C Quotingの機能があり他のシェルのサポート状況),IFS=$'\t' で済んでしまう。しかし,Dashにはそのような機能はない。Dashで実現するにはどうしたらいいだろうか。

なぜDashでの実現にこだわるかについては以下参照(Termux環境でのlsの出力):

-rwx------ 1 u0_a87 u0_a87 563684 Jul 15 16:31 bash
-rwx------ 1 u0_a87 u0_a87  75736 Sep 14 00:51 dash
lrwxrwxrwx 1 u0_a87 u0_a87     18 Sep 18 18:24 sh -> dash
-rwx------ 1 u0_a87 u0_a87 250052 May  6 03:07 tcsh

以下の方法があるが,最後の方法がもっともポータブルかと。

  • リテラルを使う — ファイルにリテラル値を埋め込む。思い出してみると以前は確かこうしてた。だがそのときにはなぜそれが必要なのかきちんと理解していなかったのが,今まで誤解を引きずった根源的理由だろう。
  • IFS=$(/bin/echo -en '\t') — Dashビルトインのechoコマンドはコマンドオプション “-en” もプリント対象と解釈してしまうので,代わりに/bin/echoを使う。
  • IFS=$(printf '\t')Dashはprintfをビルトインで持っているし,もっともポータブル?

参照にしたのは以下:

以下の記事を書いたときに疑問に思ってたことが解消した。

シェルスクリプトでパイプ中定義する変数はグローバルではない

以下のコードでIFSのタブ値の代入方法が誤っている。訂正しないが, “DashでタブをIFSに代入” 参照。


久しぶりにシェルスクリプトを書いていて引っかかったこと:(大半のシェルで)パイプ中で定義する変数はグローバルではない。

BashFAQ/024 – Greg’s Wiki” にある通りなんだが気づくのに時間がかかった。パイプ中のコマンドは基本全てサブプロセスで処理される。そこで使われるコマンドがシェルの外部コマンドならその中で定義する・値を代入する変数がスクリプト内でグローバルに反映されることは期待しないが,特にwhile等のループを導入するシェルのビルトインコマンドのときはグローバルに反映されることを期待してしまう。そうはならない,というのがポイント。

具体的には以下だとループ中evalを使って定義する変数PKGN_key(連想配列をシミュレート)がグローバルコンテキストでは見えない。{}here documentとパイプを併用するための細工。こうしないと,cat <<- END_OF_ALIASES | while… と書かなくてはならなくなる。

{
  cat <<- END_OF_ALIASES
    launcher   com.google.android.tvlauncher
    newpipe    org.schabi.newpipe
END_OF_ALIASES
} \
| while IFS=" \t" read -r alias package_name; do
    eval "PKGN_$alias=${package_name}"
  done

今回はパイプを利用せずリダイレクションを利用することで対処した。

while IFS=" \t" read -r alias package_name; do 
    eval "PKGN_$alias=${package_name}"
done <<- END_OF_ALIASES
    launcher   com.google.android.tvlauncher
    newpipe    org.schabi.newpipe
END_OF_ALIASES

Termux環境下でアプリを強制終了

小ネタ。Adbを介してAndroidのアプリを強制終了する方法は, “testing – Stopping an Android app from console – Stack Overflow” によれば,例えばAndroid TVのホームアプリ(Android TV Home com.google.android.tvlauncher)が対象であれば:

adb shell am force-stop com.google.android.tvlauncher

さて,AndroidTV準拠ストリーミング・メディア・プレーヤAmigo 7xJPのホームアプリが固まることがある。Amigo 7xJPには様々な方法で遠隔でアクセスできるようにしようとしているが,TeamViewerを使った画面共有がその一つ。それでアクセスしている最中に固まられると,TeamViewerからは打つ手がなくなる。キーボードのHomeキーを押すことで解消することもあるがそうならないことも多い。

(下に続く)

一つの対処法は,スマートプラグを利用して外部から強制的に再起動すること(スマートプラグについてはいろいろ記事を書いた)。しかしできればそうせずに対処したい。それに上記amコマンドが利用できないか。

PC上のAdbシェルで起動されるamコマンドの実体は以下。

$ adb shell
Amigo7xJP:/ $ which am
/system/bin/am

Termuxのシェルで相対パスで起動されるamコマンドは上と異なる(以下)。

絶対パスで上のamコマンドを起動しようとすると以下のようなエラーになる。

~ $ am force-stop com.google.android.tvlauncher
...(長いエラーメッセージ)...
Error: unknown command 'force-stop'
~ $ which am
/data/data/com.termux/files/usr/bin/am
~ $ /system/bin/am force-stop com.google.android.tvlauncher
cmd: Failure calling service activity: Failed transaction (2147483646)

pkgコマンドで見てみるとこのTermux版amコマンドはtermux-amというパッケージとしてインストールされているようで,リポジトリはここと思われる。Termuxのamコマンドの実体はスクリプトで,内容は以下。リポジトリではam-apk-installedとされているもの

~ $ cat `which am`
#!/data/data/com.termux/files/usr/bin/sh
export CLASSPATH=/data/data/com.termux/files/usr/libexec/termux-am/am.apk
unset LD_LIBRARY_PATH LD_PRELOAD
exec /system/bin/app_process / com.termux.termuxam.Am "$@"

要はTermux環境で普通に起動できるamコマンドはいわば「パチもん」で,Adbを通じて利用できる「本物」と同じではない。後者はforce-stopオプションが利用できるが,前者ではできない。そして,Termux環境下では後者を直接呼ぶことはできない。

Terminal or ADB command to force-stop applications – Android Enthusiasts Stack Exchange” にあるkillallもTermuxのは/data/data/com.termux/files/usr/bin/killallでAdbシェルで使われるのは/system/bin/killall。前者ではホームアプリのプロセスが見えていないようであるし( “com.google.android.tvlauncher: no process found” ),後者は以下のようなエラーを吐き,残念ながら目的が達成できない。

killall: pid 24686: Operation not permitted
killall: com.google.android.tvlauncher: Operation not permitted

一つの解決策はSSHトンネルでを掘ってLAN外部からもリモートAdbを可能にすること。これは可能ではあろうが,完全なパスワードレスでやはり怖い。

気づいてみると,実はTermux自身にandroid-toolsパッケージをインストールすることで,adb等Android開発用ツールが使えるようになる。これでSSHで外部からTermux環境にログインした状態で,システムのamコマンドが利用できる。

~ $ adb start-server
~ $ adb shell which am
/system/bin/am

他にも違いはあり,以下のようにアクティビティを起動しようした場合,違いがないように見えるが,実際には本物のamコマンドでないと起動しない。

~ $ am start -n org.schabi.newpipe/org.schabi.newpipe.MainActivity
Starting: Intent { cmp=org.schabi.newpipe/.MainActivity }
~ $ adb shell am start -n org.schabi.newpipe/org.schabi.newpipe.MainActivity
Starting: Intent { cmp=org.schabi.newpipe/.MainActivity }

シェルスクリプトでパイプ中定義する変数はグローバルではない,ということにハマったが,結論こんな感じ ⇦ ちなみにIFSへの代入方法に誤解があることがわかったので改定。改善点を上げればきりがないが自分がやりたいことは基本達成できた。

今回スクリプトの引数にパッケージ名ではなく,自分がつけたニックネームも許容できるようにしたかった。そのため連想配列を使いたかったが,一方その機能をビルトインで持つが肥大したBashではなく,軽量シェルのDashを使いたかった。そのため,以下にあるような策を採用。

ただ,その過程でシェルスクリプトでパイプ中定義する変数はグローバルではないことになかなか気づけずはまった

 

PythonによるAndroidアプリ開発

PythonによるAndroidアプリ開発に使えるフレームワーク・処理系について調べた。妙に長くなってしまったが本来Pythonに限って調べたかったわけではない。

Kivy

KivyWikipedia)はAndroid, iOS, Windows, Mac OS, Linux全てをサポートするPythonによるアプリ作成フレームワーク。 APIのドキュメントではマルチタッチ・アプリ作成のためのフレームワークだとしている。また,ウェブサイトの<TITLE>アトリビュートでは “Cross-platform Python Framework for NUI Development” と自称している。その割には本文ではNUIについては大きく主張していないが,Natural User Interfaceのことらしい。NUIは今ひとつよくわからないし,マルチタッチとの関係もわからない。ただ,ゲームコントローラからの入力も想定していて,多様な入力方法をサポートすることに力を入れていることは伺える。システム全体のアーキテクチャの概略イベント処理の概要

UIはどうもOpenGL ESで独自に作成するようで,OSネイティブのUIコンポーネントは使用していないもよう。WebアプリにおいてHTML5のcanvasだけでUI全てを構成するようなものか。UIはKv言語 (Kv Language)(”kvlang” や “the kivy language” とも呼ばれる)で静的に指定できる。

AndroidのサポートPython-for-Androidに依存する(以下簡単のため “P4A” )。P4AはPythonプログラムから単独で配布可能なAPKを生成する。P4AはもともとKivyのために開発されたが,現在他の「ブートストラップ」にも対応してるとのこと。

肝心のAndroidのネイティブAPIのアクセスには以下のライブラリが使われる(KivyのドキュメントP4Aのドキュメント):

APKまで変換しなくても,Kivy LauncherアプリでKivyのスクリプトを起動できる

今回この記事の内容について調べたのは,決して「ガチな」アプリ開発をしたかったわけではなく,Taskerの類でできるようなことをtextualにできないかと思ったから。自分はAutomateの有償ユーザだが,極めて簡単なことがグラフィカル・プログラミングでお手軽にできるのは便利なものの,少し複雑になると見通しが悪くてかえって扱いづらい。Windows用AndroidエミュレータBlueStacksを用意してみたのも,スマホの小さい画面ではなくWindows PCの広い画面でやれば多少ましかと思ったから。しかし,Pythonを学んでP4AやKivyで実現する方が長期的には正解かもしれない。P4Aはサービスもサポートしている。自分がやりたいようなことは基本サービスで実現されるようなものなのでこれは重要。

Kivy crash course 12: Using Android APIs – YouTube” が用意されている。

QPython

SL4AことScripting Layer for Androidは2010年頃鳴り物入りで登場したがその後尻すぼみに。が,今もQPython – Python on AndroidSL4A由来のAndroidhelper APIsを用意している。UI作成もカバーしており,それも含めたアプリのサンプルが用意されている

QPython 3.xは要求するパーミッションが異なる3つのフレーバーがありQPython 3L( “L” は “Limited” の意)はPlay Storeから入手できるが,プライバシーに関するパーミッションも要求する QPython 3S ( “S” は “Sensitive” の意)はGithubからZipファイルをダウンロードして手動インストールすることになっている。

QPythonスクリプトを起動するTaskerプラグインが用意されているが,2016年より更新がない上,レビューには不具合が報告されている。

同じQPythonLabによる,同じコンセプトのQLua – Lua on Androidもある。そのウェブサイトとされているものは開けないし,開発努力が続けられているかは疑わしい。 変更なし: 同じQPythonLabによる,同じコンセプトのQLua – Lua on Androidもある。そのウェブサイトとされているものは開けないし,開発努力が続けられているかは疑わしい。

Pythonでのクロスプラットフォーム開発に関しては, “Download Python for Other Platforms | Python.org” に一般的Python処理系として,iOSとiPad OS用のそれも紹介されている。Android用QPythonと組み合わせるなどして,クロスプラットフォームでのアプリ開発もできなくはないだろうが,単独処理系でクロスプラットフォームを曲がりなりにもサポートしているKivyに分があるか。

Povo2.0の非標準な利用法

povo、基本料0円から始まるオールトッピング「povo2.0」を提供開始 | 2021年 | KDDI株式会社” が告知された。ドコモのAhamoの後追いに過ぎなかったPovoを改定して,従来完全にMVNOの守備範囲であった領域にAuがずかずかと踏み込んできた。しかも実に大胆な料金体系を引っさげて。これを眺めていて思いついた非標準的利用法をいくつか。

ちなみに文章中では「Povo 2.0」と,Pは大文字にし,間にスペースを入れるのが筋だと思うが,Auではスペースなしでアルファベットは全て小文字の「povo2.0」という表記。

完全かけ放題

ご高齢の方の携帯電話プランの選択のお手伝いをしている。 “フルのかけ放題必須のご老人の携帯電話プラン” なんかにも書いたように,費用を抑えるには基本的にシニア限定でかけ放題が割り引かれているものを利用するのが今までの常道だったが,Povo 2.0では誰でも1,650円/月で完全かけ放題が使える。それは楽天モバイルのUn-Limit VIを除いて,私の知る限り現在ある完全かけ放題プランでもっとも安い。

もちろんその方は通話だけでなくデータ通信も必要なのだが,DSDV機であるHuawei Nova Lite 3をお使いなので,それは2枚目のSIMカードで補う。自分が所有する小容量プランで全く使わず事実上寝かしている回線契約があるので,それをお使いいただければ実質その分の追加費用はない。DSDV機の面目躍如

ちなみにその方今UQをご利用になっているが,Povoへの番号移行手数料および契約解除料はかからないことになっているのでなおのこと好都合。

Povo2.0単独では留守電機能が実現できないこの方には端末としてはHuawei Nova Lite 3をご用意したが,この端末には一部の機種にあるような簡易留守録機能があるわけでもない。この方には留守電機能は必須なので,これでは残念ながらPovo2.0はご利用いただけない。残念。

イベントでのビデオ配信

イベントなどで長時間ビデオを生配信する場合などデータ通信量を相当食うが,24時間データ使い放題が都度330円。必要があるときだけ「トッピング」すればよい。そのような使い方は,今まではプリペイドSIMカードなどを購入する,モバイルルータを(回線契約つきで)レンタルする,といったようなやりかたでしか実現できなかったし,そういう手を取ったとしてもとてもこの料金ではできなかった。

以前ビデオのライブ配信に興味があって以下のようなことをやっていた:

安価に電話番号維持

極めて安価に電話番号維持できる。電話・SMSの受信が無料であるだけでなく,費用は発生するが発信もできる。通話を発信するには,いつもの30秒あたり20円 (税込22円)がかかるが,安く上げたければ第三者課金サービスを利用するなどすればよい。

ただし完全に0円ではない。こういうことを考えるやつがいることはAuも当然想定していて,「180日間以上有料トッピングの購入などがない場合、利用停止、契約解除となることがあります」という注がちゃんとつけてある。トッピングの最安は24時間使いたい放題の330円だから,これを半年ごとに購入すれば回線は維持できる。60円弱/月,700円弱/年の計算。

⇦ やはりこの維持条件は皆気になるよう。現時点では確かなところはわからない。

⇦ “「povo2.0」、トッピングの有効期限が切れたらどうなる? – ケータイ Watch” で確かなところがわかった(太字は自分)。

KDDIによれば、povoアカウントで最後に購入したトッピングの有効期限の翌日から180日間は、回線の利用を継続できる。その期間中にトッピングの購入がない場合は回線が順次停止されるが、期間内の通話料やSMSの利用料が660円(税込)を超えている場合は、停止の対象にならない。

したがって、180日以内にトッピングを購入するか、通話やSMS送信の660円以上の利用で条件を満たすことになる。ちなみに、最も安いトッピングは1回220円の「smash.使い放題パック」。有効期限は24時間で、1回購入すれば、その終了から180日間は0円のまま回線を利用できる

また、回線が停止されたあと、30日以内にトッピング購入がない場合は、契約解除に至るとのことだ。

なお、回線の停止と契約の解除は、それぞれ事前にpovoアカウントのメールアドレスとSMSあてに通知される。

つまり,最安で40円弱/月で維持できる。回線の停止を事前にメールで連絡してくれるというのはありがたい。自分で期限を気にする必要なく,メールが来てから対処しても間に合うということ。

電話・SMS発信ができない期間が大半,転送電話ができない,といった制約つきでソフトバンクのプリペイドサービス「シンプルスタイル」(旧: プリモバイル)で3,000円で60日+360日間番号が維持できるのだがそれよりも格段に安く使い勝手がよい。

安価に携帯電番号を維持することについては以下の記事を書いた:

低速でデータ通信し放題

トッピングによるデータ容量の追加などがない場合、通信速度は送受信最大128kbpsとなります」ということは128Kbpsという低速で十分な場合(IoT目的などで)はほぼ0円で使用できる。これでデータ通信をし続けた場合制限がかかるかは知らない。

上の項と同様,完全0円とはならない。低速だがデータ通信無制限の携帯プランとして見れば(実際無制限かは知らない),定番ロケットモバイルの「神プラン」よりも安い。もっとも,神プランは上下最大200Kbpsとされているので,そちらの方がいくらかは速い。

回線の目的を柔軟に変えられる

この記事で最初にあげた完全かけ放題回線として使う場合を除き,それ以外の用途は自由に切り替えが利く。これはMVNOを含め,今まで日本であった携帯電話プランにはなかった高い柔軟性と言えるだろう。

Auが本気で攻めてきた。

 

楽天ひかりの9月末での解約申請完了

楽天ひかりの9月末での解約申請が完了したが,簡単ではなかった。

楽天ひかりの解約と違約金を無料にする方法! – インターネット・格安SIMのソルディ” では10日までに解約手続きをしないと,翌月分まで料金を取られるとしていて,そこを注意しなければならないということは承知していた。9/8に相談のため楽天ひかりのカスタマーサービス0120-987-300に連絡すると,ハラダさん♀に宅内撤去工事が必要なければ9/14までに解約手続きすれば月内に解約できると約束された。たまたま9/11にBiglobe eo光の宅内調査が予定されていたので,その結果を待って判断することにした。

宅内調査では最終的にサービスが提供できるかはわからない,とされ,その意味では進歩はなかった。しかし,できるにしろできないにしろ,確かなところがわかるにはまだ時間かかりそうであったので,予定通り楽天ひかりは9月末で解約することに。「メンバーズステーション」なるオンラインカスタマーサビスサイトで解約手続きをしようとすると,下図の表示。10月末までサービスが終了せず10月分料金も取られるような内容。せっかく “楽天ひかりの後の固定光インターネット回線” で今後どうするかいろいろ考えたのに,その大前提が崩れてしまう。

本日12日に再度カスタマーサービスに連絡し,お話したハラさん♀によると,当月末での解約の締め切りは,もともと10日までだったのが,もう少し遅く変更され,さらにそれが今月変更になったと。ハラダさんには最後の変更が伝わってなかったのでそういう案内になったのだろう,と。ともかく,9月末での解約はあっさり受け入れてもらえたのでよかった。

光電話については,NTT西日本からの案内通り,楽天ひかり解約と同時に解約になる,と。

ちなみに,楽天ひかりのカスタマーセンターに電話してもなかなか人に到達できない。自動音声認識に答えると結局Web上のフォームでコンタクトするよう誘導されるからだ。実際そうやって問い合わせたときにもらったメールの返事の一部が以下(太字は自分)。自動音声認識に対してあえて黙り込むことがキーとは,なんだかなぁ。ちなみに,こちらが必要な情報を渡した後,実際に人と話せるようになるのに30分ほど存分に保留音楽を堪能させてもらったこともあった。時間がないときには問い合わせもままならない。

また、本メールでは、通常のお電話での対応より時間を要する可能性があるため、お急ぎの場合やご不明な点等ございましたら、以下弊社カスタマーセンターまでご連絡いただきますようお願い申し上げます。
—————————————-
《楽天ブロードバンドカスタマーセンター》
?電話番号:0120-987-300
?営業時間:9:00~18:00(年中無休)
—————————————-
お電話でのお問い合わせの際、ガイダンスの音声自動認識により、お客様より何か発話されるとWeb上へ誘導するSMSが送られ、オペレーターに繋がらないため、無言でお待ちくださいませ。

 

Play Store装備のWindows用Androidエミュレータは普通にBlueStacksでよかった

Windows用Androidエミュレータを探した。有償アプリが使えるよう,Play Storeやそれに付随したGoogle Mobile Services (GMS)が含まれているものが必要だった。

15 best Android emulators for PC and Mac of 2021 – Android Authority” を見る限り,エミュレータとして動作してGMSをサポートするのは,Android Studioに付属するエミュレータか,VirtualBoxAndroid-x86が用意しているイメージを動かすしかないのか,と思った。が,わかってみると,ド定番のBlueStacks普通にPlay Storeを最初から持っていることがわかり,それで目的が達成できることがわかった。最初からそう書いててくれよぉ…。

自分でもすっかり忘れていたが,そういえば以前NASのVirtualBoxでAndroid-x86を動かすことを試みたことがあった。

GMSなしの機種に後から導入するのは経験があるが( “AuガラホGratinaに開発者サービス導入その1: まぁまぁ成功編,” “同その2: かなり成功編” ),もちろんそんな面倒な手間は省けるのに越したことはない。

How to utilize the different Android versions available on BlueStacks 5 – BlueStacks Support” によればAndroid Nougat (バージョン7.0) とPie (9.0) のβ版を動かすことができるよう。

ちなみに,BlueStacksをインストールし,Play Storeで自分のGoogleアカウントでログインした後,図にあるようにGoogleから新しいGalaxy S20+ 5Gのセットアップを完了することを促すメールが来た。もちろんGalaxy S20+ 5Gのような高価な機種は保有していない。「他人が自分のアカウントを使ってる!」と焦ったが,わかってみるとBlueStacksが該当機種のふりをしているからだった。

なお, “15 best Android emulators for PC and Mac of 2021” でエミュレータとして紹介されているものが,実際はAndroidをベースにした独立したOSであることがありさらに混乱した(仮に原理的にはWindows上で仮想的に動かせるとしても)。例えばPhoenix OSXDA上のフォーラム)。PC用AndroidはBlueStacksを含めゲームをすることが目的に作られていることが多いようだが,Phoenix OSはそれだけではなく,デスクトップPC的使い方ができることも目的にしている。昔話題になったJideのRemix OSと似通っている。PrimeOSも同様(XDA上のスレッド)。Phoenix OSにしろPrime OSにしろ,面白いところを狙っていると思うが,今ひとつ盛り上がりに欠ける印象で現在も開発が続けられているかわからない。 2017年の記事 “Phoenix OSを試してみた - これは完成度が高い!Windowsのように使えて、デュアルブートも楽々なAndroid派生OS(natsuki)” ではPhoenix OSについて好意的に書いており,Android版MS Officeが使えることを利点の一つとしてあげている

ARChonは極めてユニークで,Chromeブラウザ上でAndroidのエミュレーションをするというもの。OS X, Linux, Windows全てで動くことになっているが,アプリごとに事前に変換が必要だったり敷居は高い。しかしそのために必要なツールが,例えばAndroidアプリであれば少なくともPlay Storeでは入手できなくなっている。 “Fix Google Services by sideloading the Google Services apk (working) · Issue #66 · vladikoff/chromeos-apk” のタイトルはGMSを使えるようにできるように読めるが,スレッド内の投稿を見るとうまくいかない,という内容が多い。いずれにせよ最近も開発が続けられているか疑わしい。ちなみに,“archon” は「ギリシア語で『統治者』を意味する語」らしい