Asteriskで留守電作ったメモ

Asterisk PBXで留守電を受けて、内容をメールで送ってくるようにしたんだけども
まとめてる時間がないのでとりあえず参考にしたURLを列挙しておく。
私はCentOS7に入れた。以前CentOS5でやってたときと比べてあっさり入った記憶。
Brastelの050Freeで受けてます。

Asteriskで050 Freeに留守電を付ける – majishini

バイク野郎のひとりごと: Raspberry Pi 3へAsteriskを構築する — その3

GSMファイルに変換した音声ファイルをAsteriskのIVR音声に使用する – つるながの綴方

WAVをAsterisk用のGSMへ変換する – Qiita

AsteriskによるIP-PBXの構築(SuSE9.3編)

Asterisk cmd VoiceMail – voip-info.org

Asterisk cmd VoiceMailMain – voip-info.org

PC1台をマルチディスプレイで複数人で同時に使用したい

CPUパワーもメモリも余ってたら、マルチディスプレイなんて当たり前だし、
同時に2人や3人ぐらい使ったって良いのでは?
PC Linuxでできたら楽しいのになぁ。

と思ってググってみるが、あまり情報がない。
キオスク端末を2台3台並べたりするのに便利そうなのであとで試してみようというメモ。

Multiseat Configuration — PCの複数席設定、1台のPCを複数人同時利用 – Google グループ
ここが起点。マルチシート(multiseating)って言うんですね。

Build a Six-headed, Six-user Linux System LG #124
2006年時点で6人使ってた例がすでにあり

Configuring multiseat X workstation – lxadm | Linux administration tips, tutorials, HOWTOs and articles
英語で探せばそこそこ見つかりそうなので、そのうちやろう。そのうち。

アメリカで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)にしておけば良いんでしょうね。
(戻って固まるのは同じだが、頻度は減る?)

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