アメリカでh2o wirelessを使った話

机の上を片付けてたらh2o wirelessのSIMの残骸が出てきたので、
そういえばAPNで苦労したんだった!と思い出しましたので検索できるようにメモ。

以前アメリカに渡航したときはAT&Tのショップへ出かけてSIMを買ったのですが、
空港に着いたらすぐ通信したい!という理由で、国内でh2o wirelessのSIMを買っておきました。
なお私は大手キャリアとのデータ通信契約をしてません(MVNO利用)ので、海外ローミングはできません。

アジア圏などはタイのローミングSIMが良いです。

しかしアメリカに対応しているものは、ない or 高い。
そこで今回は国内でKDDIが扱っているh2o wirelessのSIMを調達したわけです。
先にチャージされているパッケージは30日未満だと発売前とか表示されます。なんだそりゃ。

1週間も居なかったので、あとから自分でチャージするSIMのみのパッケージにしました。

あらかじめ国内でwebからアクティベーションとリチャージを行っておきます。
わかりにくいですが
アクティベーション時に Month Plan LTE $30 を購入、
その$30でリチャージ、です。
このへんは成田空港でやっておきました。

アクティベーション

リチャージ

で、出発。機内でSIMを入れ替えて、現地でAT&Tの圏内になるとSMSが送られてきて
APN自動設定が来ます。

しかしこの当時はMoto G5 plusを使っていたのですが、全然通信できない。
受信はできるが送信できないみたいなへんな状態になっており、大変困る。
なんとかWiFiを繋げて■データ通信設定のページの手順に従うも、自動設定と同じ。

そして検索して試すこと数十分
H2O Wireless APN Settings – BestMVNO
ここの設定を試したら、いけた!
自動設定で入ってきたのと全然違うじゃん!

さらに現地で他のh2o wireless使ってる人に聞いたら
H2O Wireless SIMの使用方法
AndroidはAPNに「Prodata」って入れるだけですよ、ですって!なにそれ!
でもSmartSIMによる自動設定は未推奨って書いてありますね(非推奨だと思うけど)。

一応前者の設定をコピーしておきます。

APN Name H2O APN
APN PRODATA
Proxy
Port 80
Username
Password
Server
MMSC http://mmsc.mobile.att.net
MMS Proxy proxy.mobile.att.net
MMS Port 80
MCC 310
MNC 410
Authentication Type PAP
APN Type default,mms,supl,hipri
APN Protocol
APN Roaming Protocol
Bearer
MVNO Type

次は、きっと、大丈夫。

なお、手元のMoto G5 plusおよびEssential Phone PH-1ではテザリングができませんでした。ふさがれてた。

ANAマイルの月別合計を計算するbookmarklet


ANAのマイレージの確認画面(PC)は、現在の残高は表示してくれますが、
月別表示にしても、その月にどれだけたまったのか(減ったのか)は表示してくれません。

なので、bookmarkletで計算するようにしてみました。

void((function(f){
  var s = document.createElement('script');
  s.src = '//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.1/jquery.min.js';
  s.onload = function(){
    var $ = jQuery.noConflict(true);
    f($);
  };
  document.body.appendChild(s);
})(function($, undefined){
  var n=0;
  var q=0;
  $('#meisaitable tbody tr').each(function(){
  	m= parseFloat( $('td',this).eq(8).html().replace(/,/g,'') );
  	p= parseFloat( $('td',this).eq(9).html().replace(/,/g,'') );
  	n += isNaN(m) ? 0 : m;
  	q += isNaN(p) ? 0: p;
  });
  t=$('#meisaitable thead th');
  t.eq(8).append(n);
  t.eq(9).append(q);
}));

これを/packer/でpackして、
javascript:を頭につけてbookmarkletにします。

javascript:void((function(f){var s=document.createElement('script');s.src='//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.1/jquery.min.js';s.onload=function(){var $=jQuery.noConflict(true);f($)};document.body.appendChild(s)})(function($,undefined){var n=0;var q=0;$('#meisaitable tbody tr').each(function(){m=parseFloat($('td',this).eq(8).html().replace(/,/g,''));p=parseFloat($('td',this).eq(9).html().replace(/,/g,''));n+=isNaN(m)?0:m;q+=isNaN(p)?0:p});t=$('#meisaitable thead th');t.eq(8).append(n);t.eq(9).append(q)}));

bookmarkツールバーにでも登録しておきます。

ANAマイレージクラブのマイル残高画面を開いて、このbookmarkletを実行すると、
その画面に表示されている一覧の合計を、タイトル行に表示します。

当然、減算した月はマイナスに。

計算してどうするの、と言われると、
まぁ、月々の動向のチェック…とか…?

bookmarkletもjQueryも久々だったので参考にさせていただきました
いまさらまとめるブックマークレットの作り方 〜 2016年版 〜 – 無駄と文化

POST遷移をやり直したときにiOSのsafariが固まる

PHPで制作中に気づいた。

フォームからPOST遷移で次のページに行ったあと、
そこでリロードしたり、もしくはさらに次のページから戻ってきた場合
「フォームの内容の再送信をするか?」と聞かれます。

再送で同じページが出てくるならそれで良いのですが、
場合によっては再送させたくないので、別ページにリダイレクトしたりする場合があります。

今回は「リロード時のみ別ページに転送したい」ということでやってみたんですが
iOSのsafariだと、「再送しますか?」の画面で固まって、それ以上の操作を受け付けませんでした。

form.php

<?php
session_start();
if($_SERVER['REQUEST_METHOD']=='POST'){
  if(isset($_SESSION['token'])){
    // トークンがあれば正常、トークンは削除
    echo 'success';
    session_destroy();
    exit;
  }else{
    // トークンがなければエラーページへリダイレクト
    header('Location: errer.html'); // デフォルトでは302でリダイレクト
    exit;
  }
}else{
  // 通常アクセスの際にトークンを発行
  $_SESSION['token']=1;
}
?>
<html><body>
<form action="" method="POST"><input type="submit" value="post"></form>
</body></html>

ところで、リダイレクトは
301 Moved Permanently
302 Moved Temporarily
の他にも
303 See Other
307 Temporary Redirect
というのがあるんですね。

本来ならPOSTして302リダイレクトが帰ってきたら、
リダイレクト先にもPOSTしないといけない(らしい)。

302の場合は
「POSTしましたけどー」「うちじゃないよ、転送先を当たってくれ」
なので、転送先にもあらためてPOSTすることを想定してる。

303の場合はPOST後にGETで見せたいなど、
「POSTしましたけどー」「処理は完了した、次にこっちを見てくれ」
という場合に使うんですね。

ブラウザのPOSTリクエストは、リダイレクトさせるとGETに化ける? ::ハブろぐ

なので、もしかしたら303でリダイレクトしてやったらsafariも固まらないのか?と思いまして

header("HTTP/1.1 303 See Other");
header('Location: error.html');
exit;

としてみましたが、やっぱりsafariは固まりました。

となると、本来であればPOST後のページをform.phpで出すのではなく、
その時点でリダイレクトするというPRGパターン(POST-Redirect-GET)にしておけば良いんでしょうね。
(戻って固まるのは同じだが、頻度は減る?)

あとはそもそもリダイレクトしないことだな。

CentOSのコマンドラインから音楽を流す

自宅で仕事中にBGMをかけたいなー、と。

手元のPCでかければいいんですが、たまたまスピーカーが自宅サーバーの隣にあるし、
自宅サーバーといいつつDJ用のmp3が入ってるファイルサーバーなので
そっちのほうがライブラリが豊富。じゃあそのサーバー機で流せないかなー、と。

なお、会社ではTDKのBOOMBOXにChromecast Audioを繋げています。

自宅用にChromecast Audioを買っても良いんでしょうけど、注文しても届くまでの間は聞けない。
ふと自宅サーバーに使っているNEC Express5800 S70/SDを見てみるとオンボードでRealtek ALC262が乗ってる。
裏側を確認したらちゃんとLINE OUTがついてました。
じゃぁこれをスピーカーに繋いだらいいじゃない。

しばらく触ってなかったサーバーなのでyum updateするかーと思ったら、できない。
CentOS5だもんね…
これで解決: 古いLinuxでyumがYumRepo Errorで実行できない場合
これで解決。これはこれで後で入れ替えないとな。

とりあえず aplay hoge.wav してみると、サウンドカードが見つからないと言われる。
/etc/modprobe.conf を見てみると、どうやら認識はされている模様。はて。
あらためて system-config-soundcard を走らせてみても結果が変わっていないようですが、
rootでaplayしたら音が出ました。一般ユーザーから見えないのか。

% alsacard
pen error: No such file or directory
% su -
# alsacard
0
# aplay "all that matters(A)-louise.wav"
再生中 WAVE 'all that matters(A)-louise.wav' : Signed 16 bit Little Endian, レート 44100 Hz, ステレオ

で、調べたら、auidoグループに所属しているユーザーじゃないとダメなんですね。
Express5800/S70 タイプSD + CentOS 6.4で音を出す – コンピュータ/ソフトウェア関連Tips

# usermod -aG audio myusername
# reboot

念のため再起動(alsaのrestartでもよかったかもしれない)

Advanced Linux Sound Architecture – ArchWiki
あんまり必要のないユーザーをaudioグループに入れるな、ともありますが、まぁ使うのは自分一人だし。

そんなわけで無事に再生できた。mp3もOK。

% mpg123 "DRILL KING ANTHOLOGY-01-ドリルキング・アンセム(ドリルキング社歌).mp3"
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
version 1.20.1; written and copyright by Michael Hipp and others
free software (LGPL) without any warranty but with best wishes

Playing MPEG stream 1 of 1: DRILL KING ANTHOLOGY-01-ドリルキング・アンセム(ドリルキング社歌).mp3 ...

MPEG 1.0 layer III, 192 kbit/s, 44100 Hz joint-stereo
Title: ドリルキング・アンセム Artist: ドリルキング社歌
Comment: Album: DRILL KING ANTHOLOGY
Year: 1994 Genre: Unknown

いい感じです。
しかし毎度CLIでaplayやらmpg123やら打ち込むのは大変だし、プレイリスト機能もほしい。
こうなると適当なwebインターフェースとかを持ったプレーヤーが欲しくなりますね…
そういうのないのかな。

いやむしろChromecast Audioのエミュレーターみたいなのがあればいいのか。
cheapcastとかleapcastとかはあったみたいですが続いてないですね。

※追記
VLCにwebインターフェースがあるっぽいですね。さっすがー
Control VLC via a browser – VideoLAN Wiki


関係ないですが、amazonはFire Stickとかを推してるだけあって、Chromecastを売ってないんですねw

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Chromecast Audio
価格:4978円(税込、送料無料) (2017/6/21時点)

Android N(7.0)で時計の秒を表示するも、ズレる

普段からAndroid端末で時刻の「秒」を見たくて、Second Statusというアプリを入れておりました。

SecondStatus(秒数時計) – Google Play の Android アプリ

が、Android N (7.0)のMoto G5 Plusに導入しようとしたところ、表示が固まるように。
レビューを見るとどうも7.0に対応してないようですね。

しかしAndroid標準にUI調整ツールを使うと秒も表示されます。

Android Nではステータスバーの時計で秒まで表示できる! システムUI調整ツールが更に進化 | orefolder.net

通知領域右上の設定ボタン(歯車)を長押し

システムUI調整ツール>ステータスバー>時刻…秒まで表示

しかしこれが、なーんかズレてるんですよ。

00秒のときは合ってるけれども、そこから秒の描画が行われるのが遅れている様子。
見えないよりはマシか、ということで表示はしていますが、
0.5秒ぐらい遅れていることは意識しないといけないですね。