バイトオーダーに悩む

古いマイコンで使っていたプログラムを移植するに当たって、

バイトオーダーをどうすればいいんだろうという話をしていた。

新しいマイコンはバイトオーダーが変わるのは確定していて、

外部とのインターフェースは従来のバイトオーダーであるというのも決まっている。

どこでバイトオーダーを切り替えるかという問題である。

というのもマイコンにつながるバス部分はある程度自由度があるからである。


バイトオーダーというと2バイト以上の数値をメモリ上にどう並べるかという話である。

0x1234という数値をメモリ上に{12 34}と並べるのがビッグエンディアン、

{34 12}と下位ビットを含むバイトから順番に並べるのがリトルエンディアンである。

リトルエンディアンの方が処理性能を出しやすいとか見たことがある。

人間が足し算・引き算・かけ算をやるときも下の桁から順番に計算するように、

コンピュータにとってもLSBから順番に計算する方が好都合なのだ。


一方でネットワーク上を流れるデータというのはビッグエンディアンが多いらしい。

例えばデータ長が0x1230というのを伝達するために{12 30}と送信して、

受信した側は届いた順番にメモリに格納してそのデータを4byteの整数として解釈すると、

ビッグエンディアンのシステムでは0x1230と解釈できるが、

リトルエンディアンのシステムでは0x3012となってしまうのでこれではいけないと。

なので実際には読み出し後にビット順を入れ換えたり(ex. 0x3012→0x1234)

メモリの順番を入れ換えてから読んだり(ex. {12 30}→{30 12}と入れ換えてからリードすると0x1230)、

そういう変換処理を挟まなければいけなくなるわけである。


とはいえ、外部とのやりとりでも、そういう変換が必ずしも必要とも言えないところはある。

例えば、バスに接続されるペリフェラルの内部レジスタへのアクセス、

32bit幅のバスで、必ず4byteアクセスするという約束もあるので、

レジスタに0x80000000をライトすれば、レジスタのMSBがセットされる。

こういう作りにする方が自然ではないかと思う。


問題が起きやすいのは、データの順番が決まっている場合と、メモリを共有する場合ではないかと思う。

データの順番が決まっているというのは冒頭に書いた例の通りである。

届いた順に前から書く、前に書いてあるデータから順番に送るというのは、そうならざるを得ない。

メモリを共有する場合も、ビックエンディアンのシステムで0x12345678を書いて、

リトルエンディアンのシステムで読めば0x78563412となるのは当然である。


ただ、回避策がないとも言えないところはある。

データの順番が決まっている場合、後ろから書く、後ろから送るという方法が

バイトオーダーの雑記 (へっぽこ実験室)

Intelはメモリ構造を図示するときに、右下を最下位アドレスとして、

右から左にバイトを並べて、上の行に進んでいくという書き方をしているらしい。

この方法でメモリダンプを表示するとあまり違和感なく読めますねとある。

このようにアドレスを減らす方向に使って行くという考えは1つある。


メモリを共有する場合も必ず32bit幅でアクセスするとか約束して、

結線時に入れ換えておけばそれはそれでうまくいきそうな気がする。

共有メモリの実データはビックエンディアンで格納されていて、

必ず4byte単位でリード/ライトして32bit幅のバスとやりとりする。

共有メモリ上に{12 34 56 78}と並んでいれば、エンディアンによらず必ず0x12345678と読める形にすると。

4byte単位でしかデータを使わないならば、これで全く問題ない。


ただ、このデータを1byte単位で使いたいとなれば面倒である。

ローカルのRAM上にデータを転写して操作する必要があるが、

ビックエンディアンのシステムでは{12 34 56 78}と共有メモリと同じ順に並ぶ一方、

リトルエンディアンのシステムでは{78 56 34 12}と共有メモリとは異なる並びになる。

読み出したデータを0x12345678→0x78563412と入れ換えて格納すれば、

{12 34 56 78}と共有メモリと同じ順番で格納することはできる。


これを書きながらいろいろ考えていたけど……

うまくやればバイトオーダーを入れ換える操作を意図して書くべき場所は減らせそうな気がした。

ちょっと実験してみないとわからないところはあるんだけど。

メモリ上のデータの取扱単位を4byte単位に揃えることが出来れば、

バイトオーダーの入れ替えを意図的にあれこれする場面は減りそうな気がした。

実際に並ぶデータの順番を意識してやらないといけないところはそこを考えて作る必要はあるが。

あとはメモリダンプみたいに何らか取得できればよいというものもありますからね。

読む側で解釈すればよいからという理屈である。

アセンブラのマクロ

ここのところ、アセンブラを書くことがけっこうある。

以前、実験用に使っていた無償提供されている開発環境から、

実際の製品に使う開発環境、これは有償で買ったのだが、

この乗換のときにアセンブラの方言の差がかなり大きくて全書換ぐらいになってしまった。

Cのコードもいろいろ書換はあったけど、こちらは限定的である。


その中で以前紹介した1bとか2fのようなラベル表記ができなくなった。

ちなみに bne命令の分岐先1bというのは上にあるラベル1という意味らしい。

逆に下にあるラベル2は2fと書ける。そういうアセンブラの記法があると。

(予約してメモリを書き換える)

こういうのも方言なんですね。

マニュアルを見たのだが、少し表記を変えれば済むというわけではなく、

数字のラベルはすべて名前を付け直すこととなってしまった。


で、アセンブラにはマクロというのがあって、

繰り返し使う命令の並びをあらかじめ書いておくことをやっている。

元々、マクロ内でも数字のラベルが多用されていたのだが、

使えなくなったらまともにラベルを振らないといけない。

それでラベルを振ったらラベルが重複するというエラーが出てくる。


で、こういうのはどうやったら回避できるのかとマニュアルを見たら、

マクロの定義の中でローカルのラベルであることを規定すればよいと。

.macro CHECK_AND_STORE
     local store1, store2, hang, exit
     teq   r0, #1
     beq   store1
     teq   r0, #2
     beq   store2 hang:
     b     hang store1:
     str   #1, [r1]
     b     exit store2:
     str   #2, [r1] exit: .endm

exitとかいうラベルを使うことはけっこう多い気がするけど、

localと書いておけば、マクロを実体化したときに重複しないように処理してくれる。


アセンブラも書いてある順番に命令並べるだけじゃないんですよね。

疑似命令というのもあって、実際には存在しない命令を書けることがある。

ARMだとビットシフトの命令がそうで、MOV命令にビットシフトを付加したものとして処理されたりする。

それはそういう別名みたいなものですけど。

実際に使われる命令を意識して書かれたものもありますけどね。

アドレスをロードするとか、1命令で書けない場合に複数命令に展開したり、

そういう疑似命令もある。1行1命令とは限らないと。


アセンブラを使って記述する理由というのは、

命令の並び順を厳密に決める必要があるというのが理由のほとんどではないか。

割り込みハンドラのレジスタ退避なんていうのはまさにそういう話で、

正しい順番でやらないと割り込み前の状態を保存できなくなってしまう。

スタックを使わないで処理するのもアセンブラで書けば確実である。

そういう用事が済んでしまえばCのコードにジャンプさせてしまう。


今回の開発プロジェクトでアセンブラで書く部分って僕が全部書きそうだけど、

これを見てレビューできる人って他のメンバーにいるのかなというのは気になる。

機械語の挙動を把握してレビューしないといけないわけだからね。

そういう意味でも用事が済んだら早々Cのコードに飛ばすのは重要で、

そうしておけばCのコードは多くの人が平易に理解できるし、

コンパイラはそれを正しく機械語に落とすことが出来るはず。

それでも残るアセンブラ部は極小といいたいところだけど、数行というわけにはいかない。


あと別の話として、既存のシステムのアセンブラで書かれたコードを解読しないといけない話がある。

「これ設計資料あるの?」と聞いたら「ないでしょう」とのことで、

ああやっぱりリバースエンジニアリングかと。

元はアセンブラだけど、書き直すときはCで書いてよいところのはず。

元々のシステムだといろいろ初期化されるまでなのでアセンブラだが、

今回は手順が違うので、Cのコードで書ける部分になるはず。

それはちょっと救いだな。

3Dセキュアに阻まれる

最近Blogの更新が飛び飛びになっていたのは、

来月に予定している旅行の計画であれこれ時間がかかっていたからだが、

その原因の1つがe5489での予約がうまくいかないという問題だった。

で、結論から言えばJ-WESTカードの3Dセキュアの問題だった。


J-WESTカードをエクスプレスからベーシックに切り替えて、

年会費がかからなくなると思ったら、切替から1年経たないうちに請求が来てしまい……

年会費は、切替前のカード入会月を基準として請求させていただきます。カード入会月と年会費ご請求月が異なる場合もありますので、ご不明な場合、J-WESTカードデスクまでお問い合わせください。

※エクスプレスからベーシックに切り替えた場合、切替前のエクスプレスでのご利用実績に関わらず、ベーシックでショッピング利用が一度もない場合は、年会費1,100円(税込)

こういう失敗をしてしまったのも切替後にe5489を使う機会がなかったからである。

というわけで切替後のカードで初めてe5489を使ってみたわけである。


そしたら決済での失敗が多発、何度か繰り返してうまくいったのもあるが、

何回やってもうまくいかない状況が発生して困ってしまった。

どうも3Dセキュアの認証画面が出た後に失敗しているようで、

3Dセキュアの登録がうまくいってなくて失敗というのは過去に他社で経験があり、

一度3Dセキュアを解除して再登録なんてやったがそれでもダメ。

これはe5489特有の問題なのか? と思うもやはりおかしい気がする。


で、請求が発生せずに3Dセキュアを試せる方法ってあったかな、

と、うーんうーんと考えていたら思い出した。

d払いの決済手段にクレジットカードを選択するときに3Dセキュアの認証画面が出るはずと。

それでやってみたら3Dセキュアに対応していないとエラーが出る。

さすがにこれはおかしいと思い、こうなるとカード会社に問い合わせるしかない。

いざ特急券の予約しようというときに使えないのでは困りますからね。

と、J-WESTカードの裏面にかかれた電話番号に連絡してみた。


すると、3Dセキュアが利用制限状態になってしまっていたらしい。

間違えなく自分の利用がひっかかっていることが確認出来たので、

1時間ぐらいしたら制限が解除されますよとのことだった。

で、時間経過後に改めてやりなおしてみると、SMSでのワンタイムパスワード認証を経て決済が完了した。

というわけで一件落着と。


3Dセキュアというのは、様々な要素を総合してリスクを判断し、

高リスクと判断されればワンタイムパスワードなどの方法で追加認証をする仕組みという理解だった。

低リスクであれば追加の認証なく通過してしまうこともありますが。

ワンタイムパスワードでの認証に繰り返し失敗したなら仕方ないが、

新しいカードでは一度も追加認証を試みることもなく、制限してしまったというのは、正直よくわからない。

もし不正利用の疑いが強い場合はいったん拒否した上で、

電話やSMSで利用状況の確認を行うことがあるという記載はあるのだが、

そういうフローにも入ってなくて、こちらから電話をかけて判明するのもどうなのか。電話代も安くない。


3Dセキュアは認証を強固にする技術と思われることもあるのだが、

より詳細な情報が伝達されることで、不正利用のリスクを正確に判断できるとか、

あるいはワンタイムパスワードなどの追加の認証手段を使うことで、

従来は拒否されるようなリスクの高い取引も安全にできる仕組みという側面もあるはず。

3Dセキュアを使うがばかりに制限されるというのは本末転倒な気がする。

割り込みマスクせずにwfi命令を使うと

以前、wfi命令で割り込みを待つときには割り込みマスクをする話を書いた。

wfi命令で割り込みを待つ意味

フラグがなければwfi命令で割り込み待ちする場合、

フラグがないことを確認した後に割り込みが発生してフラグが立ったらうまくいかないので、

割り込みマスク→フラグ確認→wfi命令→割り込みマスク解除 の順番でやらないといかんねという話である。


で、本当にそうなるんかいとICEでブレークポイントを置いて実験をしてみた。

そしたら、確かに割り込み処理の復帰先がwfi命令の場所になってしまい、

さらにその次の割り込みが来るまで待たされるケースがあることが確認できた。

というわけで、ちゃんと割り込みマスクしてwfi命令しないといけませんねと。


ただ、割り込みの復帰先を書き換えてやれば問題は回避できるんだなと。

  1. 休止状態のフラグを立てる
  2. 処理するべきフラグが立っていたら休止状態のフラグを消して処理に遷移する
  3. 何もフラグがなければwfi命令を実行して休止する
  4. 割り込みハンドラで1.のフラグを確認し、休止状態の場合は割り込みの復帰先を2.にする

こんなことをやれば割り込みマスクをしなくても正しく動くはず。


何でこんな話を書いたのかというと、ある種の割り込みをマスクする期間を作りたくないという話があって、

割り込み処理の仕様上、最低限のレジスタ退避の間だけはマスクせざるを得ないが、

それ以外は可能な限り割り込みマスクせずにやりたいねと。

でも、wfi命令って割り込みマスクしないと正しく使えないよね、

と気になって、上のようなことを試して気づいたわけである。


ただ、実際のシステムでこういうプログラムを書くのかというと、

それはよくわからないんだけど。休止でwfi命令を使わない可能性もある。

(元々そういう処理をしてなかったし、電力的にシビアなシステムではない)

やはり無力化されたストライキ

昨日、JRA厩務員・調教助手の労働組合がストライキをやっていた。

これは去年3月に実際にストライキをした3つの組合によるもので、

栗東トレーニングセンターの多数派組合である全国競馬労働組合は不参加である。

無力化されたストライキ

ということは影響はほぼ美浦トレーニングセンターに留まるということ。


去年と似ているのは影響範囲が主に美浦のみということだが、

今回はそもそも全国競馬労働組合はストライキ予告するまでもなく妥結している。

去年の経緯も踏まえれば2011年からの新賃金体系を抜本的に見直すのは難しいだろうし。

その時点で競馬開催を全部中止するというのは現実的ではなかっただろう。

しかも今週末はダービーウィークということで東京・京都の2場開催、

ダービー週にストライキをぶつけてきたのは世間の注目度を高めるため、

という側面もあったかもしれないが比較的人手がかからない週末という側面もあったのかもしれない。


と、それではストライキの意味がないではないかという話だが、

逆に実効性を高めようとしたのが木曜の交渉で決行と決めてしまったことと、

土曜に競馬開催に関わらない業務も含めて全面的にストライキをしたことである。

去年のストライキは週末の競馬開催に関わる業務が対象で、

交渉を金曜夕方まで引っ張ったため、ストライキ回避する前提で輸送もしてしまったことで実効性を失ってしまった。

スト決行に日本調教師会・中竹会長苦しい胸中を吐露「理屈としてどうなのか」 (うま屋)

「今回は(水やエサやりをする)保安員も置かなかった。言いたくはないが、ホースマンとしてはがっかりする手法。これは今回が初めてだと思います」とある。

一見するとそれだと馬の世話をする人が誰もいなくなってしまいそうだが、

実際には正規の厩務員ではないスタッフがいるので、最低限はそれでなんとかなるだろうと。

そこを見越して全面ストライキに踏み切ったのではないかと見た。

ストライキ中の人手を確保したければ競馬をやらなければよいということである。


とはいえ、このストライキもあまり実効性のないものになってしまった。

通常は土曜出走馬の美浦~東京競馬場の輸送は土曜朝に行うが、

ストライキ期間に入る前の金曜中に輸送をしてしまったのである。

日曜出走馬は東京なら当日輸送、京都なら前日輸送だから通常は影響はあるが、

これは頭数も限られるし、おそらくは金曜輸送で対応したのではないか。

この結果、出走取消は日曜の京都で1頭出ただけだったらしい。

(もっとも、その前にストライキを見越して回避した馬はいるかもしれない)

競馬場まで連れて来れば、栗東の調教師あるいはJRA職員の支援もあるわけだ。

通常は厩務員・助手のやる作業をこれらの人が対応していたわけである。


以前も書いたのだが、栗東と美浦でストライキへの対応が分かれたのは、

厩務員・助手は賞金の5%を進上金として受け取るという構造があるように思う。

もしも馬主が賞金を稼げていれば、厩務員・助手も賞金を稼げていると。

賞金が稼げる自信があればストライキなんてやらん方がいいわけである。

ただ、成績が低迷する厩舎にとってはそうはいかない。

そこで給料の底上げを訴えているわけだが、これは結果を出せないのに給料を要求することである。

厩舎スタッフの給料というのは預託料として馬主に請求するのだが、

このような構造からなかなか馬主には理解が得られにくい状況である。

ただでさえ飼料代の負担が増加しているというのにである。


一方のJRAにとっても厩舎スタッフの肩を持つ理由は乏しいところがある。

JRA所属馬の出走1回につき厩舎運営奨励金として150000円を支払っている。

今年から35000円上乗せされ、これはスタッフの処遇改善にも使える。

これは直接的に厩舎に支払われる報酬だが、馬主にとっても特別出走手当があり、

出走させることで預託料をある程度はまかなえる仕組みである。

JRAとしても出走頭数を確保しないと馬券が売れないわけだから、

出走馬確保のために手当を充実させる考えはあるかもしれない。

でも実際はダートや芝短距離で出走機会が得にくい馬が多いわけである。

だからJRAとしても成績が出ない厩舎や馬主の肩を持つ理由はあまりない。

強いて言えば頭数が少なくなりがちな芝中長距離に出られる馬を集めてほしいと。


JRAの認識としては現状のトレーニングセンターの規模は法令で定められたレース数に対して過大で、

実際、調教師への貸付馬房数はゆるやかに減少しているところである。

馬房数と厩務員・助手の定員というのはリンクしてるので、これも少しずつ減っていると。

レース数に比して馬の数が減れば、クラス下位の馬も出走機会が得やすく、手当・賞金の底上げにもつながるとは言える。

ただ、そうすると厩務員・助手の総数が減るわけである。

2011年に厩舎スタッフの定員減に合意したときも退職者を補充しないことで減らしており、

厩務員・助手を目指す若手が減っているという問題の解決にはならない。


結局は旧賃金体系の厩務員・助手がもらいすぎという話になるのかもしれない。

当時、不利益変更と言われないように賃金テーブルを維持してしまったが、

それがゆえに若手の報酬を底上げするのが難しくなっているのではないか。

出走機会の底上げができれば報酬を増加させられる可能性はあるが、

年間のレース数が限られているため分母を減らす方法でないとなかなか難しく、

そうすると結局は新しい厩務員・助手を雇えないという結果になってしまう。


結局のところ厩務員・助手の報酬というのは低い方に合わせざるを得ない。

調教師にとっても人事の自由度が低いという事情もあるし、

厩務員・助手にとっても調教師の定年や馬房減があっても他の厩舎に移って雇用が維持される。

担当馬(厩舎内で分配する場合は厩舎所属馬)に左右される進上金はいいシステムとはいえないが、

基本報酬を低い方に合わせる代わり、成果報酬が大きいという形でバランスを取っているとは言える。

抜本的に見直すべきではという話はあるかもしれないけど、それは容易な話ではない。


今回のストライキは去年と作戦の差はあったが、競馬開催を押し切られてしまうのは承知の上だったのでは。

その上で厩務員・助手の報酬はどうあるべきなのかと馬主らに考えてもらう。

2場開催のダービー週の土曜日というところにねじ込んできたのは、

パフォーマンス以外のなにものでもないが、それが重要だったのだろう。

それにしても美浦だけのストライキでは効果がなさすぎますが。


さて、今日の日本ダービー、優勝したのはダノンデサイルだった。

馬主のダノックス(野田順弘オーナー)と言えばセレクトセールで爆買いしていることで知られ、

もう1頭のダービー出走馬、ダノンエアズロックは4億5000万円(本体)の超高額馬である。

ダノンデサイルもセレクトセールで1億3500万円(本体)で十分に高額である。

ダノックスはNHKマイルカップ2勝(ダノンシャンティ、ダノンスコーピオン)、

香港スプリント優勝(ダノンスマッシュ)などマイル以下の戦績がずば抜けている。

一方で中長距離となるとイマイチという感じはあったが、

それでもダービー勝つんだからやっぱり持ってる馬主だと思いますね。

高額馬を買えばなんとかなるというものでもないですから。

まさかの長距離G1初制覇がダービーとはびっくりだね。


あとレース後に驚いたのは3着のシンエンペラーが凱旋門賞に行きたいという話。

去年から菊花賞の本命と言われ続けていたのだが菊花賞ではないらしい。

ダービー勝てば凱旋門賞だとは思ってたが、勝てなくてもそっちなんですね。

数々の快挙を成し遂げてきた矢作調教師がそう言うのだから、

菊花賞より凱旋門賞というのはある程度は確信があるのだろう。

ホープフルステークス2着、皐月賞5着、ダービー3着と勝ちきれないが、

戦績としてはそれなりに立派だし、体裁としては悪くはないんだろう。

nanaco残高の不整合検出

昨日、イトーヨーカドーで買い物をしていて、

主にはJ-Coin Payで払うのだが、キャンペーンでポイント10倍押しになるセブンプレミアム商品をnanacoで払うことに。

で、nanacoの残高がわずかだったのでこれは足りんだろうとモバイルnanacoをチャージをするも処理が終わらない。


アプリで見える残高にはチャージ結果が反映されていない一方、

nanacoのWebサイトで確認するとカード内残高に加算されたことになっている。

センター預かり分にもないのでセンター預かり分の反映をしても何も起きない。

うーん、困った。


チャージは完了した扱いだからもう一度やると再度請求が来てしまう。

とりあえずポイントを全部マネーにしたら少しは買えるか。

と、店のチャージ機でポイント交換を実行して、その残高の範囲で購入。

足りないかと思ったけど、一応はこの金額で買いたいものは買えた。

じゃあチャージする必要はなかったじゃないか。


そして、今日nanacoを確認するとセンター預かり分に昨日チャージした金額が入っていた。

よくある質問/iPhoneの「nanacoアプリ」を利用していたらRMBE04とエラーが表示されました。 (nanaco)

あくまでもiPhoneアプリのFAQだがこういう話が書かれている。

【セブンカード・プラスでチャージ・Apple Payチャージ金額が反映されていなかった場合】
通信が不安定だったためチャージが正常に完了しなかった可能性があります。
チャージやポイント交換・支払などの取引を行うことで、3~4日以内にセンターお預り分に反映される場合があります。
次取引後、数日経ってもセンターお預り分にチャージ金額が反映されていなければ、チャージの取消し処理を行っています。

チャージが反映されなかった場合は残高の動く操作を何かすればよいと。

その後にnanacoの残高が動く操作をすると、前後の残高がシステムに報告される。

するとシステム上で認識している残高とFelicaに記録された残高の不整合が判明する。

その分はセンター預かり分として反映させるか、チャージを取り消すか。

どちらかで整合を取るという仕組みが存在すると。

ただ、すぐにという訳にはいかないので数日かかるかもねとは書かれている。

今回は翌日に反映されましたけどね。


というわけで厄介な話だった。

イトーヨーカドー店内の通信環境があまりよくないのだろうか。

Webから申し込んでからセンター預かり分を反映する方法の方がトラブルは少なそうだが、

それも結局センター預かりの反映に失敗したら同じことか。

めったにあるもんではないと考えてよいものか。

TJライナーと川越特急

テレビを見ていたら埼玉県小川町の話が出ていて、

東京(池袋)まで電車で1時間ほどというので東京に通うために住む人も多いんだとか。

案外かかるんだなという気はしたが多くが始発なので好都合という面もあるよう。


小川町といえば、こんな話を以前に書いた。

帰りは森林公園駅から「川越特急」に乗換。

運賃のみで利用できる列車だがTJライナー用の車両を使っている。

川越特急という名前だが、池袋~川越の停車駅は快速急行より1駅少ないだけ。

どちらかというと停車駅の差が大きいのは川越~東松山なんですよね。

快速急行は副都心線直通がメイン、川越特急は池袋発着という違いはあるが。

(東武と他社が同居する駅たち)

「川越特急」とはいうが、停車駅の少なさが生きるのは川越より先、東松山や小川町まで利用した場合。

そして、この川越特急はTJライナーと密接な関係があるという話である。

そのTJライナーは小川町まで長く利用する人を想定した列車である。


TJライナーは2008年に東上線でかなり久々の有料列車として誕生した。

東武鉄道という会社にとっては日光方面、太田・赤城方面を中心に有料特急を多く走らせている。

観光・ビジネス目的というのもあるが、通勤目的での利用も想定している。

そのような会社だから東上線の通勤客向けの特急を作れないかと考えたのだろうが、

特急専用車は割に合わないという判断か、通勤電車兼用の車両を用意した。

クロスシート・ロングシートを切り替えられる座席を取り付けて、

有料のTJライナーでは枕木方向に座席が並ぶクロスシート、

それ以外では線路方向に座席が並び、立ち客にも利用しやすいロングシートと。

近鉄のL/Cカーで導入されていたものに似ているが、そのものではないらしい。


TJライナーは好評だったようで、現在は朝に森林公園→池袋で5本、

夕方以降に池袋→小川町で15本が運行されている。

休日も本数は減るが同様に運行されており、東京方面へのレジャーにも活用されているのでは?

なお、小川町方面行きは最初の停車駅のふじみ野からは料金不要で、一般列車を補完する部分もあるらしい。


で、そのTJライナーと密接に関係するのが川越特急なのである。

午前中の川越特急は池袋に到着したTJライナーの折り返し、

午後の川越特急は池袋到着後にTJライナーとなる列車であり、

これらはTJライナーと同様にクロスシートモードで走っている。

通勤客の動きの逆で川越などへの観光客が動くという話ですね。

停車駅が少ないのもTJライナー前後の回送の役目があるからである。

これを「川越特急」というのは西武の特急 小江戸に対する戦略だろう。


このTJライナーのスタイルは他の関東圏の鉄道会社でも導入され、

西武では有楽町線直通のS-TRAIN、新宿~拝島の拝島ライナー、

京王では京王ライナーとMt.TAKAO、こちらは休日の折り返しも有料列車としてやっている。

東武伊勢崎線でもTHライナーという日比谷線直通の有料列車は同様の方式である。

S-TRAINもそうだけど地下鉄対応の車体に乗せてしまえるのは便利なのだろう。

地下鉄線内で一般列車とすぐに化けられる点もよさそうだが、実際には前後回送で対応しているとのこと。


関東圏では有料列車として使われてることが多いが、

近鉄では一般列車で時間帯によって使い分けるためにL/Cカーを導入していた。

近鉄の場合は有料特急が充実していますからね。

でも、その近鉄にも団体列車というニーズがあるんですね。

修学旅行の利用がまとまってある近鉄らしい使い方である。

みずほWalletアプリに統合されたが

みずほWalletのアプリがリニューアルされて、J-Coin Payの機能が取り込まれた。

決済機能集約に向けた「みずほ Wallet アプリ」のリニューアルについて (pdf) (みずほ銀行)

みずほWalletは元々デビットカードのアプリでQUICPayのバーチャルカードが扱えた。

あとiOS版では以前からMizuho Suicaという銀行チャージのモバイルSuicaがあって、

これがAndroidにも加わり、さらにJ-Coin Payの機能も使えるようになったと。

J-Coin Payはみずほ銀行以外の人も使うサービスなので、J-Coin Payのアプリ自体は今後も継続するはずだが。


これに合わせてJ-Coin Payでキャンペーンが行われていて、

せっかくなので みずほWalletでJ-Coin Payを使おうとするのだが、これがどうにも遅い。

もともとJ-Coin Payもあまりキビキビ動くという感じはしないのだが、

みずほWalletで表示するとさらに時間が食われる状況で、混んでいるレジでこれは使えないなと思うほどである。

イトーヨーカドーのセルフレジなら別にせっつかれないからいいけど……


あと、本人確認機能もみずほWalletアプリからやると遅いという。

【重要】「J-Coin Pay」の本人確認(写真撮影による確認)にお時間をいただいております。

いつも「J-Coin Pay」をご利用いただき、ありがとうございます。
現在、5月9日より開始したキャンペーンにより、大変多くのお客さまに「写真撮影による本人確認」にお申し込みいただいており、審査完了までに7~10営業日程度のお時間をいただいております。
「みずほWallet」アプリでのJ-Coin Pay新規登録・連携(※1)時に行う本人確認方式は「写真撮影による本人確認」のみとなっております。マイナンバーカードとNFC機能(※2)搭載のスマートフォンをお持ちで、お急ぎの方は、以下の手順でも本人確認手続きを完了させることができます。

いつのまにかJ-Coin Payはマイナンバーカードの電子証明書を使った方法に対応していたという。

こちらだとすぐに本人確認が終わるのだが、みずほWalletでは対応していないと。

みずほWalletのキャンペーンで新規利用者が増えて混雑しているのだが、

その回避策がJ-Coin Payのアプリで先に登録してから、みずほWalletにも登録するという手順で、

それはなかなか見合っていないなという話である。


みずほWalletでのJ-Coin Pay登録さえしてしまえば、

J-Coin Payのアプリで決済してもキャンペーン対象らしいんですけどね。

なかなかこういう統合アプリもうまくいかんもんだなと思う。

一方で複数のアプリを維持するのも大変という考えもあるはず。

「J-Coin Payはみずほ銀行以外の人も使うサービスなので」とは書いたけど、

その観測も正しいかはわからない。

ナンバープレートのアルファベットの仕込み

以前、希望ナンバーでもないのに、ナンバープレートの分類番号にアルファベットが入ることがある話を書いた。

希望ナンバーかそうでないか

「名古屋」の乗用の軽自動車で58Aが使われている。東京都でもけっこう見る。

どうも調べると、この58Aの半分ぐらい埋まっているらしい。

ということはこの次というのもありそうだが……


で、その場合どうなるのかと考えて見ると、おそらくAの次に使えるアルファベットのCを使い58Cなんじゃないかと。

抽選対象外の数字については自動的に付与されるナンバーと、希望ナンバー用で分類番号を分けている。

乗用の軽自動車では 580~582が希望ナンバー以外、583~599, 780~799が希望ナンバー用である。

もともと軽自動車は小型自動車と同じ5□□を分け合う都合から、

希望ナンバー以外の枠はかなり狭く、「名古屋」では580~582が埋まってしまったと。


軽自動車以外では □0□ を希望ナンバー以外とするのが基本である。

(4□□, 5□□の続きにあたる 6□□, 7□□は全て希望ナンバー用)

すなわち乗用の普通自動車では 300~309が希望ナンバー以外、310~399が希望ナンバー用である。

このルールはアルファベットが分類番号に入っても変わっていないので、

希望ナンバー以外用の50□の□はアルファベットも含むようである。


軽自動車は48□, 58□も希望ナンバーと分け合う形にはなったのだが、

アルファベットについては希望ナンバー以外用に全て取られているようで、

58A, 58C, 58F, 58H, 58K, 58L, 58M, 58P, 58X, 58Y は全て希望ナンバー以外用である。

実際、抽選対象外のナンバーでは 799まで使い切ったら59Aになっていて、

すなわち58□はスキップしているということを表している。


あと2桁目のアルファベットも最初の1つは希望ナンバー以外に留保されている。

軽自動車以外では □A□ が該当する。

軽自動車の場合は2桁目のアルファベットは P・X・Y を使うので、

5P□は乗用の軽自動車の希望ナンバー以外用に使うことが想定されていると。

実際、59Yまで使い切ったら5X0になっているという。

(7□□の3桁目がアルファベットよりは5□□の2桁目アルファベットが優先らしい)

すなわち5P□はスキップしているということである。


というわけで実はそういう仕込みがあるんですよという話だった。

希望ナンバー以外で3A□(乗用の普通自動車)、5A□(乗用の小型自動車)、5P□(乗用の軽自動車)とか出ることは本当にあるんだろうか。

命令が並んだベクタテーブル

ベクタテーブルというと、割り込みのジャンプ先のアドレスを格納するものだと思っていたが、

割り込みでジャンプする命令が並ぶタイプのものもあるらしい。


というのがARMのCortex-M以外のベクタテーブルなんですけどね。

Exception vectors and the exception base address (ARM)

例えばVBARレジスタの値がベースアドレスで、IRQ割り込みの場合は、

IRQのオフセットが0x18なので PC←VBAR+0x18 にジャンプすると。

(このとき、割り込み前のPCなど復帰に必要な情報は別のレジスタに保存する)

ただ、ジャンプ先のアドレスは4byte間隔で並んでいるわけで、テーブルに置ける命令は1個だけ。

なので、ここに置くのはジャンプ命令というのが通例である。

ジャンプ先が近い場合は命令1個でジャンプできるのでよい。

(例えばA32のB命令の場合、PC(プログラムカウンタ)から±32MB の範囲でジャンプできる)


ただ、遠い場合はそうもいかないわけですよね。

実際のところ、ARMではベクタテーブルの後ろにジャンプ先のアドレスを並べているケースが多いようだ。

これを参照してジャンプする命令を並べる形である。

ベクタテーブルの前後32MBの範囲に割り込みハンドラがあればその必要はないのだが。

それならアドレスを並べたテーブルから割り込みハンドラのアドレスを得るところまで自動でやってほしいものだが、

PCをセットするだけなら割り込み処理が高速化できるケースもあるので、こうしているのでは?


ベクタテーブルの後ろに並べたアドレスにジャンプするというのは、

PCからの相対アドレスで指定したメモリ上のデータをPCに格納するという形で書ける。

LDR PC,=IRQHandler

という形でアセンブラで書くのだが、実際には

0x0018: MOV PC,[PC,#0x20]
0x0038: DCD IRQHandler

というような形でデータが生成されるようだ。

これを1命令で書けるのはARMらしいのかもしれない。

ARMならそれでいいんですけどね。


PCの値を振り分けるというのはプロセッサ内部で済む話だが、

PCの値を外部のメモリから取得した値にするのは確かに複雑で、

そこはユーザーが書くコードでなんとかしてよというのは理由はあると思った。

でも、あんまり嬉しくない作りだよなとも思う。