Railroaderの起動時の登録確認・認証を回避する(?)
http://traintrain.jp/info/close
traintrainさんが閉鎖されるらしい.昨日,Railroaderの記事を上げたばかりだというのに.
公式が対応してくれると思うけど,起動時登録確認を回避する方法をメモっておく
経緯
むかしむかし,東京メトロ干代田線のトンネルで携帯が使えなかった頃,移動中はRailroaderの登録確認が通らなくて辟易していた.
もちろん,サイトにはアカウントを登録していて,オンライン環境で使う分には全く問題は無いんだけど,移動中にレイアウト閲覧・編集が出来ないのはやはり痛かった.
そういうわけで,起動時認証を行うものの,エラー検出を無視するようにバイナリを改変して使っていた.最近は,移動中もずっと繋がるから要らないんだけど.
変更する箇所
Railroaderバージョン 4.0.57に適用
Address* | Size* | State* | Old* | New* | Comment* |
004BF9D0 | 6. | Active | JNZ 004BFC24 | NOP | if tree of show msgbox of invalid member ? |
004BFA6A | 6. | Active | JE 004BFB96 | NOP | if tree of show msgbox of api error ? |
表の二カ所を改変すればいいらしい.
MD5ハッシュ:
Original: 26170F6214887A3C0F7A958CE4D18C10
Modified: A1AC45AB6390EE8A8DFA8AB64651F9E7
この改変を行うと,サイト側にアカウント登録の確認を行いますが,エラー処理が行われないので,オンライン環境にあるかどうかに関わらずソフトを実行できます.
Railroaderで作成したレイアウトの解析+SVGファイルへの変換
昔々,突貫で作ったRailroaderパーサが出てきたので資料をメモっときます.
Railroaderとは
traintrain.jp
trantrainさんで公開されている鉄道模型用のレイアウトエディターです.
起動時に会員登録の確認を行うのが煩わしいですが,ソフト自体はとても使いやすいようで,ちらほらとユーザーを見かけます.
このソフトはレイアウトデータを,CSVのようなテキスト形式で保存してくれるので,プログラマーにとっても嬉しい限りです.
こんな感じ
レイアウトデータについて
外部ツールでレールを描画する際に必要な所だけを説明します.
所々上げている画像はパーサ部分のC#コードです.
1~3行目はバージョンとレイアウトサイズが記述されているようです.
4行目以降のデータは計61列のcsvデータで,レールの位置を記述しています.
0列目はレールが見える状態にあるかどうかです.Railroaderはレールを配置しようとしたときにidを発行しますが,操作をキャンセルしたり,設置した後レールを削除しようとすると,このフラグをFalseにして削除したように見せるようです.長時間編集したファイルが肥大化するのはこれが原因でしょう.
1列目はレールに振られたIDで,レール毎の接続情報で用いているようです.
2列目はレール種類の名前です.
3列目はレール種類のIDです.
5列目~7列目はレールの物理長さです.
9列目~37列目まではレール座標が記述されています.
Combined~なレールって何だっけなぁ,レイアウトを外部ツールで描画する場合には気にする必要が無かったと思います.
ストレート・ポイント・カーブレールで使用しているパラメータが異なります.
ストレートレールの場合はCornerPosを結べば良さそうです.カーブレールの場合は27列目~37列目の情報を用いて弧を描きます.ポイントレールの場合はストレートとカーブの2つの情報を持っているので注意します.ポイントレールのカーブ側はCornerPos1→CornerPos3に固定されている(?)ようです.
49列目~54列目まではレールの接続情報が記述されています.
NeighborRailxCntに何が格納されているかは失念.NeighborRailxに接続先のレールIDが格納されています.
55列目は高架レールかどうかです.
59列目はレールの色を示しています.
60列目は内部処理に使うIDのようです.
SVG形式への変換
SVGはベクタ画像の一種でXMLで記述できます.fieldタグでHTMLに埋め込んだSVGファイルはjavascriptで要素を操作できます.
つまり,RailroaderのレイアウトデータをSVGに変換してHTMLに埋め込んでおけば,ネット上のデータとリアルタイムに連動できるので,模型の在線表示とかが可能なわけです.
Railrodaerプレビュー
WPFジオメトリに変換
当時作っていたときはMVVMを勉強していたようで,WPFの描画パーツに分けた後,そのオブジェクト構造を利用してSVGファイルを作っていました.レイアウトの編集も企んでいたようですが,例外が出てて動いてないです.
下記はそのソースコードとバイナリです.バイナリの実行には.NET Framework 4.5が必要です.
故 Raspberry Pi Model B を偲ぶ会
2013年頃購入したRaspberry Pi Model Bがたぶん故障したので記録.生前をしのぶ
経歴
2013年頃に作成した,Docomo Xi対応のモデムL-03Dと,無線LANモジュールWLI-UC-G301Nと,RasPiを組み合わせたポータブルルーター(モデム?)に使用.
OSはRaspbianで,カーネルやらchkconfigやらを弄って起動時間だけは10秒程度.これはまぁまぁ市販品に匹敵するけども,消費電力を見ると非常にまずい.5Wぐらい常に食ってるんじゃないかな.
表
- C6のコンデンサは換装済み.何かの拍子に取れたらしいので,付け替えた.容量470μFちょっと大きすぎ
- RCA端子とオーディオジャック,RJ45端子,USB端子はヒートガンで撤去済み.
- IC3のLAN+USBコントローラICは周りを無理矢理削って電流を切ってある.このICはアイドル状態でも相当電力を食う(3~400mAだっけ?失念)ので,バッテリ駆動の環境では邪魔だった.
- IC3が入ってないModel Aを使えばいい話だけど,ちょうどModel Bが余ってたんだよね.海外サイトでトーチを使って剥がしてる記事があったから,ヒートガンで剥がせるだろうと思ったけど,まっっったくビクともしない.しょうがないからペンチで周りを削った.
裏
- SDカードスロットにはmicroSDが刺さるような変換基板を入れてある.Amazon*1で823円だった.
- ちなみに,SDカードソケットはまともなSDカードを挿すと基板からはみ出る.このはみ出た部分に変な力が加わると,接触不良を起こしてシステムが止まる(この変換基板なら大丈夫だけど).移動中に使うので,マスキングテープを貼って固定してた.
- 見えないけど,SoC側から出てるD-/+にUSBコネクタが繋がるようにハンダブリッジしてある
- SoCのUSBポートに裏からmicroUSBで繋がるよう,サンハヤトの変換基板を使って引き出してる.変換基板側のIDの位置にボードのGNDが来るので,4と5をハンダブリッジして誤魔化してる.
経緯
先週ぐらいから,ACTランプが8回点滅してブートしなかったり,ブートした様に見えてもHDMI端子に繋いだディスプレイには何も表示されないことがあった.
elinuxのR-Pi Troubleshooting*2にある,ACTランプの点滅に関する項目を見ると
8 flashes: SDRAM not recognised. You need newer bootcode.bin/start.elf firmware.
らしい.
bootcode.binとstart.elfを新しくするも,挙動は変わらないのでSDRAMに障害があるっぽい.このボードのSDRAMはSoCに組み込まれてるはずなので,新しくボードを買い直さないとダメっぽい.
elinux.org*3をよく見ると
Broadcom BCM2835 (CPU + GPU. SDRAM is a separate chip stacked on top)
とある.SDRAMがCPUの上に積まれてるらしい.何をバカな,と思ったら写真があった.
よくよくボードを見ると,確かに積まれている.
もしかしたら,ここら辺のハンダがクラックしてるのが故障の原因かもしれない.ヒートガン当てれば直るかな?
既にAmazonでRasPi A+をポチったので,直ってもあんまり嬉しくない.
Intel SSD 750 にはOption ROMにUEFI向けNVMeドライバが入ってるっぽい
完全に見落としてた.
ここによれば,UEFIバージョンが2.3.1以上ならOption ROMから起動出来るらしい.
NVMeデバイスはEFI Shellでmapかけても認識されなかったが,UEFIのオプションを弄ってたらそれらしい設定を見つけた.
UEFIの設定で Boot -> CSM -> Launch Storage OpROM Policy をUEFI onlyに変更
これでUEFIがOptionROMからドライバを自動でロードしてくれる.
EFI Shellでdriversの表示.null stringとか言ってるけど,こいつがNVMeドライバで,NVMeデバイスからロードしてる.
下はちょっと前の記事,わざわざドライバをビルドした意味は何だったんや・・・sosoru.hatenablog.jp
Intel SSD 750 400GBの性能出し
ブート周りでいろいろあったけど,ようやく750の性能出しができそう.
環境(HWiNFO x64 v5.00-2570読み)
M/B | ASRock Z87 Extreme 3 |
CPU | Intel Core i5-4670K @ 3400MHz |
Mem | Avexir Technologies DDR3-1600 CL9 4GB x4 |
PCIe1 | なし (PCIe 2.0 x1) |
PCIe2 | NVIDIA GeForce GTX 660 (PCIe 3.0 x8) |
SSD(PCIe3) | Intel SSD 750 400GB (PCIe 3.0 x4) |
Driver | Intel(R) Solid-State Drive P3700/P3600/P3500/750 Series Driver Version: 1.2.0.1002 |
OS | Microsoft Windows Server 2012 R2 Standard (x64) Build 9600 |
チップセットがZ87なので,PCIe 3.0 x16がSSDとグラフィックカードにx8ずつ割り振られてる.
グラフィックボードにPCIe 3.0をx16分食われるかと思ったら,BIOSが配慮してくれたみたい.
Crystal Disk Mark 5.0.0 Alpha2 x64 による測定
Intel SSD 750にシステムパーティションがある環境.たまたま,exFATなパーティションがあったので,ここを使ってパフォーマンスを測定した.
50MB負荷
4GB負荷
Intel SSD 750 400GBの公称値はシーケンシャルリードが2200MB/s,ライト900MB/s*1なので,大体期待通りの性能が出てる.ちょっとオーバーしてるけど.
このボードには1.25GBのDDR3-1600メモリ*2が乗ってるらしいので,キャッシュが効きそうな50MB負荷の時は,シーケンシャルリード4000MB/sぐらいに張り付いて欲しいもんだけど.もしかしたら,書き込みキャッシュが無効になってるから,テストデータがキャッシュメモリに乗らないのかな?
AS SSD Benchmark 1.7.4739.38088 による測定
上と同様の環境で測定.
Crystal Disk Markと大体同じ?シーケンシャルリードが2000MB/sで張り付いてて,本当にPCIe 3.0なのかちょっと悩んだ.あと,リードのAcc.timeが遅いかな.これは多分レイテンシのことを指してると思うので,20μsecぐらいの値が欲しい.Writeは出てる.
書き込みキャッシュについて
デバイスマネージャで書き込みキャッシュを有効にしようとしても受け付けてくれぬ.なぜだ.
Intel SSD Toolboxで確認すると,それっぽい項目がdisableになってる.
Intel SSD Data Centor Toolsでenableにしようとしても受け付けてくれない.
isdctのマニュアルを見ると,どうやらATAデバイス限定の設定らしい.*3
かといって,NVMe向けの代替オプションがあるわけでもない…困った.とりあえず諦め
**
故 WD5000AACS 儀
7年使ってたハードディスクさんが遂に壊れてしまった.Intel SSD 750を買ったばかりだというのに…勘弁してもらいたい
経緯
昔々,PT3ではなくPV4が出たばかりの頃に購入.アレは1時間番組で20~30GBぐらい食うから,新規増設しないと厳しかった.
録画用途・倉庫用途でほとんど24時間動いてるサーバーマシンにずっと組み込まれてたから,7年持ったのは優秀かな
使用時間を年に直すと6.07年だから,ちょっと少ない.電源投入回数を見ると,割りと24時間運用してない感じが…
そういえば,昔は録画時間が来たら動くようにしてたっけな(遠い目)
状況
7/13ごろ,サーバー機(Linux)のアクセスランプが灯ったままシステムがハング,再起動を試みる.
原因特定のため,各ストレージのSMARTを見るも異常はない.WD5000AACSにbadblocksを走らすと異常な数の不良セクタをはき出す.特定.
再起動をすると,HDD自体をOSが認識しない.もうだめだ.
とりあえず,メイン機(Windows)に入れて確かめてみると正常に認識する.何とかなりそうなのでバックアップを試みる.
すると,いくつかのファイルをコピーした段階で急にHDDがデタッチされる.
バックアップすべきファイルを180GBぐらいに絞っても,10GBも移動しないうちにデタッチされて,OSから見えなくなるので非常に困る.
その上,SATAでマザーボードにつなげてたのでいちいち再起動しなきゃいけない.とても面倒くさい.
何回か再起動してるうちに,UEFIでSATAデバイスの扱いをAHCIモードからIDEモードに切り替えればちょっとは変わるかも?
と根拠のない変更をしたところ,この状況は改善され,デタッチされる代わりに長いI/Oビジーが発生するようになった.(ビジー中はHDDがスピンし始める音が聞こえてきて心臓に悪い)
I/Oビジーなんて普段は冷や汗もんだけど,ここは渡りに船.なんとか楽してバックアップし終えた.
バックアップ出来たのでchkdskにかけるも,全く異常が見つからない.
WD謹製の診断ツールでようやく死亡判定が得られた.
今回みたいなディスクは壊れてないけど,正常に運用できなくなった障害は初めてだった.普通,HDDが壊れたらもうちょっと悲劇的な結末を迎えるもんだけど.
こいつは何が壊れたんだろなぁ,コントローラ基板が死んでるんかなぁ.
クリップボード上の画像を一時フォルダに保存する
スクリプト編
ブログやらTwitterやらに画像をアップロードするとき,クリップボードにある画像を直接貼り付けることは出来ない.
しょうがないので,Windows環境を前提として,クリップボードを一旦TEMPフォルダに保存してやるバッチファイルを作ってみた.
rem savetmpimage.bat del %TMP%\clipboard.png convert clipboard:image "%TMP%\clipboard.png" if %ERRORLEVEL% neq 0 ( echo %ERRORLEVEL% pause ) explorer /select,"%TMP%\clipboard.png"
- 一応,delで作成するファイルは消しておく(なくてもいい?)
- convertはImageMagickの一部.こいつは画像ファイル向けのバッチファイルを作るときにとても便利だけど,Windowsだとパスを通さなきゃいけないから面倒だった気がする.
- clipboard:imageはWindowsじゃないと動かなかった記憶がある.昔,FreeBSDの入った懐古マシンで似たことをしようとして頭を抱えた.今はどうなんだろ.
- convertのエラーは環境変数%ERRORLEVEL%を見れば分かる*1.エラーが起きたらpauseしてチェック
- exploerの/selectオプションでclipboard.pngが選択された状態でExplorerが開く*2エクスプローラのプレビューを有効にしておくと楽?
ショートカット編
バッチファイルを実行すると,ちゃんと動いてくれる.良かった.…が,タスクバーに入らない.
仕方ないので,cmd.exeにパッチファイルを起動させるショートカットを作成する.
- リンク先は「C:\Windows\System32\cmd.exe /c "[バッチファイルのパス]\savetmpimage.bat"」
- 作業フォルダーに注意.「C:\Windows\System32」とかだとconvertに失敗するので(ユーザー権限の問題?),「C:\」とか身近なパスにする
作ったショートカットをタスクバーに登録すればできあがり
(補足 タスクバーに登録されるのはショートカットのコピーのようで,元のショートカットのリンク先・作業フォルダ等々を弄っても,タスクバーのショートカットには反映されない)
おまけ
バッチファイルよりショートカットの方がファイルサイズが大きい