ジャンル不定の日記です。

BIGLOBEモバイル解約した

新規で楽天モバイル契約してRakuten Miniをメインスマホにすることにしたんで、BIGLOBEモバイル解約した。

が、BIGLOBEモバイルの解約は電話でしかできないのね。
めんどい。

最初携帯から0120にかけたが、携帯からは0120非対応みたいに有料の03にかけ直して、
順番待ちで待たされて通話料持ってかれそうだったんで家電から無料の0120にかけ直した。
0120がIP電話非対応なのはわかるが携帯非対応なのがわからん・・・
つながった上で03にかけ直すように案内されるし。

オペレーターにつながったあとは、
BIGLOBEのアカウントに登録している電話番号と生年月日を聞かれた。
契約中の携帯番号じゃなくてアカウントに登録している番号。

で、アカウントにはIP電話を登録してるんだが、
SIM返却の案内をSMSで送るからと、SMSが使える電話番号を聞かれた。
返却案内をSMSはすぐ届いた。

解約は月末になるのでギリギリまで使うようなことはしないで月初から早い段階で解約しちゃえば良さそう。
むしろ、月末だと当月の解約はできないかも。

楽天モバイル申し込んだ

ゲームのサブ用にスマホが欲しかったが、中古でなかなかいい値段で買えずだったが、
楽天モバイルのRakuten UN-LIMITが1年無料でスマホ本体1円だったんで申し込んだ。

Rakuten UN-LIMITは2980円/月だが1年無料で縛りなしの1年未満でも解約やMNPが可能みたい。
で、スマホ本体1円とか買うしか無いね!
さらに、ポイントバックで6300P返ってくるぽい?

1円の本体は Rakuten Mini という機種で、
スペックは2GHzのCPUにメモリ3GBなんで十分ぽいが、3.6インチというのがちょっと小さすぎな気もする・・・
GALAXY A7という機種も17000円の15000円ポイントバックで迷ったが、こっちは6インチで逆にでかすぎ。
最近の機種は5インチオーバーばっかだが、今メインで使ってるNexus5が5インチ強だがこれでもギリギリ持てるサイズ。
6インチってもうタブレットじゃん・・・
3.6は逆に落っことしそうだが持ち歩きは可能だから Rakuten Miniにした。
4インチちょっと超える程度のSC-02Cくらいが丁度いいと思うんだが、中国で売れないサイズは安く作れないんだろうね・・・

5月末でBIGLOBEの縛りが消えるから6月待ってからMNPも考えたが、eSIMのRakuten Miniにするとnexus5でSIM使えないから新規にした。
新規でも6月からのほうが良いかとも思ったが、楽天の1年無料は日割りになるみたいなんで今申し込んだ。
到着まで2,3週とか書いてあったから遅れるみたいだし。

楽天モバイルのエリアも気になったが、エリア外だとau回線になるみたいなんで問題なさそう。
都内しか独自エリア無いみたいだから実質au系の格安SIMだね。

申込みはPCからやろうとしたら申し込みページの表示が完了しなくて無理だった。混んでるぽい。
スマホで申し込んだらできた。
運転免許証のアップロードが必要なんで、カメラ付きのスマホで申し込んだほうが良さげ。

最初、申込み内容確認の際に月額715円とかなってたんだが、スマホ交換保証プラスってのが入ってた。
変更画面まで戻れなかったんで、1回やめて再申し込みしようとしたらできなくて、カートに申し込みの続きが入ってたんで、そこでスマホ交換保証プラス外せた。
外すと月額0円で本体1円の事務手数料3300円になった。

Vistaのライセンス認証通った(電話認証)

先日古いゲームやろうとしてWindows VistaをVirtualboxで用意したらオンライン認証できなくて、
代わりにDSP版XP(64bit)を使おうとしたが、少なくともインストール直後の状態だとオンライン認証できなかった。
Wineを使うことも試したが、SafeDiscと思うがエラーが出て実行できなかった。

で、Vistaを電話認証してみることにした。


まず認証しようとするとこの画面になる。
プロダクトキーが無効と出てオンライン認証の項目がない。


別のプロダクトキーを入力でプロダクトキーを入力するとエラーが出てこの画面になる。


そこでその他の方法を表示すると電話認証の項目がある。

あとは電話かけて自動音声に従ったら認証できた。

Vistaのライセンス認証ができない・・・

Windows 7 で古いゲームやろうとしたらsafediscの関係?でできなかった。(前にも経験した気がする)
対処法はあるぽいんだが、10があれば7いらないし、7のVM消してVistaのVM使おうとした。

で、新しく作ったVMに以前バックアップした.vdiと.vboxをコピーして実行したんだが、
なんかVM起動しなかったんで(バックアップのインポート方法が間違ってた為)新しくVM作ってクリーンインストールすることにした。
インストール方法は以前書いた記事見ながら。

そしたらライセンス認証でエラー出てできなかった。
以前のときはインストール直後ライセンス認証を忘れてて、あとからすんなりできたと記事にも書いてあるが、
先にWindows Updateしてからやったと思うんでそれが原因だと思って、
SP1,SP2を入れて、手動で更新プログラム入れたりして丸1日かかったがWindows Updateできた。
だが、ライセンス認証できない。

で、気づいたが、
認証画面なんか変な気もしてたが、
プロダクトキーの変更ってので入力してたが、本来オンライン認証って項目が出るはずなんだね。
エラー以前に電話認証必須の状況になってるんだね。
PC本体はまだ手元にあるがVMでやりたいから電話で通らんよね・・・

そして、最初のバックアップのVMをインポートする方法を間違えてた件に気づいたんで、
新規インストールのVMは消してインストール済みのVMを使うことにした。
バックアップはVMのフォルダ丸ごとコピーしたものだが、.vboxを実行するだけでインポートされるのね。

そして、バックアップのVM起動したら、要ライセンス認証だった・・・
ライセンス認証してない状況のバックアップだったのか、構成が変わってて無効化されてるのか?

Linuxでワンセグ見れた!

注文してたMYGICA S270は先日届いてたんだが、視聴方法がわからなくて、今やっと見れるようになった。

MYGICA S270はArch Linuxの標準カーネルでそのまま使える。
ドライバインストールは不要。

視聴アプリは最初Kaffeineで見ようとしてチャンネル設定がわからず他のアプリを入れたりしたが、
結局Kaffeineで日本のチャンネルを設定する方法がわかったのでKaffeineで見る。
ほかアプリのチャンネル設定はわからない。

Kaffeineで
テレビジョン>テレビジョン設定>一般オプション>Edit Scanfile
するとscanfile.dvbがテキストエディタで編集できる。
このファイルは日本のチャンネルが設定されてないので手動で設定する必要がある。
フォーマットの仕様はよくわかってないが、scanfile.dvbの末尾に、
[isdb-t/jp-Tokyo]
I 557142857 6MHz AUTO AUTO AUTO 0 0 0 0 7 AUTO AUTO 0 0 AUTO AUTO 0 0 AUTO AUTO 0 0
I 551142857 6MHz AUTO AUTO AUTO 0 0 0 0 7 AUTO AUTO 0 0 AUTO AUTO 0 0 AUTO AUTO 0 0
I 545142857 6MHz AUTO AUTO AUTO 0 0 0 0 7 AUTO AUTO 0 0 AUTO AUTO 0 0 AUTO AUTO 0 0
I 539142857 6MHz AUTO AUTO AUTO 0 0 0 0 7 AUTO AUTO 0 0 AUTO AUTO 0 0 AUTO AUTO 0 0
I 527142857 6MHz AUTO AUTO AUTO 0 0 0 0 7 AUTO AUTO 0 0 AUTO AUTO 0 0 AUTO AUTO 0 0
I 533142857 6MHz AUTO AUTO AUTO 0 0 0 0 7 AUTO AUTO 0 0 AUTO AUTO 0 0 AUTO AUTO 0 0
I 521142857 6MHz AUTO AUTO AUTO 0 0 0 0 7 AUTO AUTO 0 0 AUTO AUTO 0 0 AUTO AUTO 0 0
I 491142857 6MHz AUTO AUTO AUTO 0 0 0 0 7 AUTO AUTO 0 0 AUTO AUTO 0 0 AUTO AUTO 0 0
直前にあるブラジルの設定を真似して日本の周波数を追加して再起動したら、
テレビジョン>テレビジョン設定>デバイス1>ソース
に、[jp-Tokyo]が出てきたので選択。

テレビジョン>チャンネル>スキャンを開始
をするとスキャンされる。
1回ではスキャン成功しないこともある感じなので何回かやった。
するとチャンネル名が文字化けしたチャンネルがいっぱい出てきた。
選択して追加するとチャンネルが有効になる。

文字化けするのは地デジの文字情報はarib-std-b24というcharset?のようだが、これを標準ではUTF-8に変換できないからみたい。
gconvのモジュールを入れれば解決しそうではあるが、Arch LinuxにはAURを含めてパッケージがなかったので諦める。

チャンネルはいっぱい出てくるが、見れるチャンネルと見れないチャンネルがある。
チャンネルの編集画面を開くとサービスIDという項目があるので、地デジのサービスIDでググってなんのチャンネルだか判別できるので、
文字化けしたチャンネルは手動で直して、見れないチャンネルは消した。
見れないのはフルセグと思う。

1408 NHK総合
1416 NHK Eテレ
1424 日本テレビ
1448 テレビ朝日
1432 TBS
1456 テレビ東京
1440 フジテレビ
23992 TOKYO MX1
23993 TOKYO MX2
上記サービスIDのチャンネルが視聴可能だった。

Orange Pi R1をルーター化した

先日注文したナイロンネジが届いたんで、Orange Pi R1用のケース?作ってルーター化完了した。
ケースの素材はクリアファイルでディスプレイのVESA穴に固定するマウンタ的なの。

https://opi-r1.rentafree.info/
↑ソフト関連はこちらにまとめてる。

ストレージは16MBでちょうどいい感じだった。
8MBだと私には無理そうだし、GBとかはルーターにするのには過剰スペック。
NanoPiも選択肢として迷ったが16MBフラッシュ搭載のOrangePiR1で良かった感じ。

socatでwebsocketサーバーができなかった件

socatでwebsocketサーバーを作ろうとしてうまく行かなかったが、わかった。
socatに-vオプションつけてターミナルに出力してみたが、なんかバイナリぽいのが出力された。

socatから実行するシェルスクリプトではreadで1行ずつ読んでたが、readじゃバイナリが読めずに変数に空文字が入ってた感じぽい。

今回はクライアントから"test"をsendしてたんだが、
readではなくcatでファイルに出力してバイナリエディタで見てみたが、
"8184E4F2CFA39097BCD7"
↑こんなデータだった。

WebSocketの仕様について調べたが、ハンドシェイクのあとはデータは特殊なフレーム化されて送られるのね。
仕様によると、

1bit目: FIN
最後のフレームの場合1で、続きがある場合は0

byteじゃなくてbitなのね。
今回の"8184E4F2CFA39097BCD7"を2進に変換すると、
"10000001100001001110010011110010110011111010001110010000100101111011110011010111"
1bit目は1なんで1フレームで終わり。

2bit目からの3bitは予約bitで、仕様を拡張するのに使うようで、そんなものはないので今回は"000"。

5bit目からの4bitはデータの種別を表すようで、テキストデータの場合は"0001"

9bit目はマスクの有無
クライアントから送るデータはマスク必須で、サーバーから送るデータはマスク不可。
というわけで"1"

10bit目からの7bitがデータの長さで単位はbyteなんだが、値が126の場合は続く2byteがデータ長。127の場合は続く8byteがデータ長。
125以下の場合は続かずその値がデータ帳となる。
今回は"test"と4byteをsendしたんで、"0000100"(4)

ここまでbit単位になっているが、合計すると16bitで2byteになる。
残りのデータはbyte単位。

3byte目からの4byteはマスク用keyで、7byte目から残り全部はペイロードデータ。
ペイロードデータは、拡張データとアプリデータを連結したもので、予約bitが"000"で何も拡張されてなければ拡張データは存在しないので、ペイロードデータ=アプリデータになる。

アプリデータは単なる平文ではなく、
マスク用keyと元のデータをXORしたものになっている。
マスク用keyは4byteだが、データが5byte以上ある場合はループして5byte目はマスク用keyの1byte目とXORされる感じ。

今回のマスク用keyは2進で
"11100100 11110010 11001111 10100011"
になってる。

アプリデータは
"10010000 10010111 10111100 11010111"

元のデータにマスク用keyをXORしてアプリデータになったわけだが、XOR演算は再度XORすれば元のデータに戻る。
というわけで、XORしてみたが、
"01110100 01100101 01110011 01110100"
ASCIIコードの"test"ですね。

eth0が不安定だったようだが・・・

Orange Pi R1で
Feb 14 22:49:11 OrangePi_R1 kern.info kernel: [ 501.127514] dwmac-sun8i 1c30000.ethernet eth0: Link is Down
Feb 14 22:49:13 OrangePi_R1 kern.info kernel: [ 503.207650] dwmac-sun8i 1c30000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
が数分おきにシステムログに出力されてたんだが、
ケーブル代えてみたら治ったぽい。

元々ついてたのはCAT5の記載があった。
代えたやつも記載がないんでCAT5相当の古いやつ?
今どきカテゴリ5のケーブルはないらしいが、Orange Pi R1は100Mbpsだし未開封のケーブル使ったから問題ないのかな。

コマンドラインでBase64のSHA1ハッシュを出力する方法

先日からOrange Pi R1の管理用CGI関連を暇な時間にやってて、とりあえずHTTP+CGIでできるのは公開もして一段落してるが、
websocketの実験も兼ねてsocat+shでwebsocketサーバー作ってる。

WebSocketの接続は
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Version: 13
リクエストがこんな感じで、
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
レスポンスはこんな感じになるみたい。

ここで重要なのは、
リクエストのSec-WebSocket-Keyを元にSec-WebSocket-Acceptを作る。
作り方は、
Sec-WebSocket-Keyの値に"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"を追加した文字列のSHA1ハッシュをBase64した文字列がSec-WebSocket-Acceptになる。
なので、
"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
を変換して
"s3pPLMBiTxaQ9kYGzzhZRbK+xOo="
にできればいいんだが、
sha1sumコマンドにはBase64を出力する機能もバイナリを出力する機能もない・・・

で調べたが、
$ echo -n "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"|openssl dgst -binary -sha1|base64
s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
sha1sumを使わずにopensslコマンドを使う。
$ echo -n "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"|sha1sum|xxd -r -p|base64
s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
↑xxdコマンドでsha1sumの16進文字列をバイナリに変換する。
$ echo -ne "$(echo -n "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" | sha1sum | cut -f1 -d" " | sed -e 's/\(.\{2\}\)/\\x\1/g')" | base64
s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
↑sedを使ってるがわけわからんコードw
の3種類の方法を発見した。

opensslはBuildrootの標準で入ってない。
xxdは母艦のArch Linuxに無いから
Buildrootにもないかと思ったがあった!が、-rオプションに対応していない・・・
sed使うコードはわけわからん。
というわけで考えたが、openssl入れてまで実現したくないな・・・
なんだが、websocketの実験もしたいし、とりあえず母艦で実験は続けるか。