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秒ぐらい遅れていることは意識しないといけないですね。

ドコモ白ロム+MVNOでA-GPSが使えない問題、dアカウントで解決

docomoのXperia Z3 compact(SO-02G)をMVNOのSMSなしデータプランで運用しております。

これがGPSをすぐ捕捉しない、移動しながら見ていてもカクカク動く、で
あまり使い物になりませんでした。
ポケモンGoとか困るでしょう。

docomoのSIMならあっという間に掴んでいたのですが、
MVNOに乗り換えたらダメというのもなんだかなー、と。
問題自体はわかっていたのですが、こんなに使えなくなるとはな!

ドコモスマホでGPSの測位ができない問題の解決方法 | モバイル@エンジニアの休日
こちらの方法はXperia Z3cではダメでした。
root化も、前はしてましたが、今はしてないので、使えません。

ところが検索して見て回っていると

価格.com – 『Xperia Z3 SO-01G SIMフリーにすればA-GPS改善しますか』 ソニーモバイルコミュニケーションズ Xperia Z3 SO-01G docomo のクチコミ掲示板

こんな、タイトルだけ見たら「できるわけないよ!何質問してんだ初心者が!」とでも言われそうなスレッドにヒントというか解決策の一つが。

別の回線でSPモード契約してるdアカウントを、スマホに登録する。

ええー、それでいいのー?
ということで、私は幸いにも?FOMA契約でSPモードつきの回線を持っていましたので
(ANAマイレージモバイルプラスに加入するため残してあった。パケット定額サービスなし)
そのdアカウントをXperia Z3cに登録してみます。

設定>docomoサービス/クラウド>dアカウント設定
登録後、すぐには改善しなかったので、一応再起動してみると


昔のように追従してくれるじゃないか!

ということで、ドコモ白ロム+MVNOでA-GPSが効かなくて遅い問題、
別のdアカウントがあれば一応解決です…根本的には解決になってないけど
とりあえず現状は使えてるので、まぁ、いいか…