LINEのビデオ通話における非互換問題(映像が映らない)
最近の高性能スマホA、1年前のミドルレンジスマホB、数年前のスマホCがあって、それぞれでのLINEビデオ通話の互換性に問題が生じていた。
A-B間、B-C間は問題ないが、A-C間でビデオ通話するとCの映像がAに映らない問題が起きた。
また、A-C間でグループビデオ通話をすると問題は起きず、スマホCに紐づいたアカウントを使ってPCのLINEにログインし、A-PC間でビデオ通話することも可能であった。さらに、Cと同機種のスマホC'(Cとは別アカウント)をつかってA-C'間のビデオ通話をしても問題が発生した。
つまり、アカウントの設定にかかわる問題ではないこと、スマホC(の機種)に問題がありそうだと推測された。
「ビデオ通話時に映像が表示されない」という事象についてググったものの目ぼしい解決策は見当たらず困っていたが、LINEの設定を眺めていると、「端末の動画コーデックを使用」という、いかにも怪しい設定があるのを発見。スマホCのLINEでその設定のチェックを外すと解決した。
ここからは予想だが、LINEのビデオ通話を開始するときに、端末間で使える動画コーデックのネゴシエーションのようなことをしていて、最近の高性能スマホであるAはより最新のコーデックを使えるが、数年前のスマホCだと使えるコーデックが少なく、本来であれば、きちんとネゴシエーションして双方で使えるコーデックを選択しないといけないところ、それがうまくいかず結果として映像が出なくなってしまった、という感じかもしれない。
グループビデオ通話だと影響がなかったのは、「端末の動画コーデックを使用」が効かないという理由があるのかもしれない。B-C間で問題がなかったのも、BとCで使えるコーデックに差がなかったから、とかかもしれない。
この問題、最近(2021/2頃?)発生し始めたようで、「端末の動画コーデックを使用」というキーワードでググっても10件程度しか見つからない状態。そのため、単に映像が映らないという症状でググっても適切な情報を探し出すのは困難。
地方のタクシーにおけるキャッシュレス
地方のタクシーで連続してキャッシュレス決済する機会があったのでメモ。
①クレジット決済
運転手が端末(タブレット+カードリーダー)の準備をする(1分)。
決済操作をするも、時間がかかった挙句タイムアウト(1分)。
再試行すると決済完了したが、レシート用紙が切れてて印字できず。しかもそのことに運転手が気付いてくれず、エラーメッセージを見た私が「用紙切れてませんか?」と声をかけてやっと気づいてくれたが、替えの用紙はなかったようで、結局レシートはもらえず。
1回目の決済がエラーになってて二重で決済が完了した疑いもあるので仕方なくタブレットの売上完了メッセージを写真に撮って控えとした。(5分)
②PayPay決済
クレジット決済をしようとしたら「クレジットですか!?」という反応をされたので、前回の記憶が蘇り、「もしかしてPayPayの方が楽ですか?」と聞いたところ、そうして欲しいと言われたのでPayPayで決済した。MPMタイプのQR決済は初めてだったし、PayPayで支払う準備をしておらずアプリの起動をするところから始めたが、事前にある程度調べてたこともありスムーズに決済完了。(1分)
ただ、自分で決済金額を入力するのが非常にプレッシャーがあった。間違った場合取り消しはできるだろうけど、その操作を運転手がスムーズにできるとも思えないし。
n=1×2のサンプル数(しかもクレジットの方はイレギュラーな事例)ではあるが、クレジット決済7分程度vsPayPay 1分程度と、PayPayの圧勝に終わった。PayPay(MPM)の場合、自分で決済操作するので、例え多少時間がかかったとしても利用者自身の体感時間やストレスはあまり感じない。店のレジで待っている後続客からしたら決済に1分掛かってたらイライラするだろうけどタクシーならそういうプレッシャーもないし。
「決済金額を客が入力するのは駄目だろう」と以前は思ってたけど、店員が決済金額を入力するのも信頼性としては大して変わらないし(悪意のある店員や不慣れな店員が間違った金額を決済しようとしても客が気を付けなければそのまま決済されてしまうだけ)、重要なのは金額を店員、客双方がチェックすることなんだろうな。
個人的必須Cygwin設定
Oracle DBの自動起動設定(CentOS 7)
OracleをインストールしただけではOS起動時に自動的にOracleが起動するようにはならないので、手動で設定する必要がある*1。CentOS 7はsystemdを採用しているので、systemdを使って自動起動を構成するのが正統だと思うが、Oracleが配布しているDeveloper VM(RHEL 7.3をベースとしたOracle Linux 7.3*2)では、systemdであるにも関わらずrcスクリプトを用いて構成しているので、これがOracle推奨なのであろうと判断*3し、これを流用してCentOSで自動起動できるようにした。
手順
以下の手順はrootユーザで行う。
/etc/rc.d/init.d/oracle というファイルを作成し、以下のような記述にする(環境変数は適宜合わせる)。
#!/bin/sh # # chkconfig: 2345 99 99 # export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1 export ORACLE_HOME_LISTENER=$ORACLE_HOME export LD_LIBRARY_PATH=$ORACLE_HOME/lib export PATH=$PATH:$ORACLE_HOME/bin export ORACLE_SID=orcl # Source function library. . /etc/rc.d/init.d/functions # See how we were called. case "$1" in start) su oracle -c "$ORACLE_HOME/bin/lsnrctl start" su oracle -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME" ;; stop) su oracle -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME" su oracle -c "$ORACLE_HOME/bin/lsnrctl stop" ;; restart|reload) su oracle -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME" su oracle -c "$ORACLE_HOME/bin/lsnrctl stop" su oracle -c "$ORACLE_HOME/bin/lsnrctl start" su oracle -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME" ;; status) $ORACLE_HOME/bin/lsnrctl status ;; *) echo $"Usage: $0 {start|stop|restart|reload}" exit 1 esac exit 0
※XDB向けの設定(iptables)はよくわからない。無くても支障はなさそう*4。
このスクリプトを実行可能にする。
# chmod 755 /etc/rc.d/init.d/oracle
# chkconfig --add oracle
/etc/oratab を編集し、自動起動したいインスタンスの行を「Y」にする。
orcl:/u01/app/oracle/product/12.2.0/dbhome_1:Y
2017/9/6 追記
不要と思われる箇所を削除。oratabの編集について追記。
Oracle DB Developer VMにサンプルスキーマをセットアップする
なぜサンプルスキーマをセットアップするのか
Oracle関連のドキュメントにはサンプルスキーマを例にしたものが多数あるため、用意しておいた方が手軽に試行できるため何かと都合が良い。Oracleの学習を進める上でも、自由に使え、かつ、それなりに複雑なDB*1として便利。実際に複数テーブルを設計して実装して、というのは、もちろん勉強する上では将来的には必要だが、まず最初にすることとしては敷居が高く、手間がかかる。
サンプルスキーマを入れるには?
Oracle DBのインストール時に、オプションで選べるようだ。しかし、Oracleのインストールは、それ自体それなりに手間がかかることなので、すでにOracleがセットアップされている仮想マシンイメージ「Developer VM」を使う場合も多いだろう*2。というわけで、すでにあるOracle環境にサンプルスキーマを後からインストールすることを考える。
既存の手順
ネットでOracleインストール後にサンプルスキーマをインストールする方法を調べたところ、「Oracle Database Examplesをインストールすることでサンプルスキーマインストールスクリプトが所定の場所に配置される」という記述が見つかったが、実際試したところ、そうならなかった。いろいろ調べたところ、OracleのGitHubでインストールスクリプトが配布されていることがわかった。もしかしたら配布方法が変わって、Examplesには同梱されなくなったのかもしれない。
実際の手順
以下はoracleユーザで行う。
作成するスキーマのパスワードは全てoracleとする。
cd ~ wget https://github.com/oracle/db-sample-schemas/archive/master.zip unzip master.zip cd db-sample-schemas-master/ perl -p -i.bak -e 's#__SUB__CWD__#'$(pwd)'#g' *.sql */*.sql */*.dat mkdir log sqlplus system/oracle@localhost:1521/orcl @mksample oracle oracle oracle oracle oracle oracle oracle oracle users temp /home/oracle/db-sample-schemas-master/log/ localhost:1521/orcl
なお、上記コマンドラインは、試行錯誤して導き出した最短で完了する手順であるが、完全にこの通りに実際に実行したわけではないのでどこかに漏れや誤りがあるかも知れない。一行ずつ、そのコマンドの意味を把握して実行していくことをオススメする。
2017/8/20 追記
やっぱり間違っていた。最後のコマンドの引数でスクリプトの実行ログを保存するディレクトリを指定するが、そのパスが間違っていた(修正済み)。まあ、ログが保存されないだけで、処理自体は成功しているようだが。
ホストOS(Windows 10)とVirtualBox上のゲストOSとの通信がキャプチャできない
環境
- ホスト:Windows 10 Pro 64bit Creators Update
- 仮想化ソフト:VirtualBox 5.1.14
- ゲスト:CentOS 7.3.1611
- Wireshark 2.2.7
- WinPcap 4.1.3
現象
ホストで動かしたWiresharkでホスト<->ゲスト間のキャプチャが正常に出来ない。
正確には、ホストからゲストへのパケットがキャプチャできず、ゲストからホストに届いたパケットのみキャプチャできる。
ゲストOSのNICはブリッジにしている。
類似の障害は、ネット上でも散見されるが、根本解決した例は見当たらなかった。
原因の推測
RawCapではキャプチャできたので、WinPcapの不具合を疑っている。
元々、WinPcapはWindows 10で正常に動かない場合があるとも聞いたので、代替のWin10Pcapを導入したが、改善せず*1。
Tera TermをHTTPとかの簡易クライアントとして使うための準備
プロトコルの勉強として、テキストベースのシンプルなプロトコル*1をTelnetクライアントでコマンドを一行一行打ち込んで動きを見る、という方法がある。最近のWindowsにはTelnetクライアントが標準で入ってない*2ので、Tera Termで同じようなことをしたい。しかし、デフォルトだとうまく動かないので、以下の設定を変える。
[設定]-[端末]-[改行コード]
送受信ともに、送信をCR+LFへ変更
※検証したいプロトコルの規格に合わせる
[設定]-[端末]-[ローカルエコー]
有効にした方がわかりやすい
[設定]-[TCP/IP]-[自動的にウィンドウを閉じる]
無効にしないと、セッション切断時にTera Termが終了してしまって不便(特にHTTP)