Fedora 31で自作の株式売買シミュレーションシステムを動かす

投稿日:

 自宅で10年以上の間、株式の売買シミュレーションシステムを運用してきた。Linux上で作動する。

 以前、このブログでも少し書いたことがあるが、これで多少儲けても来ている。

 このシステムは、株価をネットからダウンロードするプログラムをPerlで、これを格納するRDBはPostgreSQL、シミュレーションはCで、ユーザインタフェースはPHPで、というハイブリッド(笑)なつくりである。プラットホームは古いIntel Cerelon D “Prescott-V” 2.66GHzのマシン上に最初Fedora Core 5をインストール、順次アップグレードし、最後はFedora 9となっていた。

 2年ほど前からだったろうか、株価をネットからダウンロードするプログラムがうまく動かなくなってしまっていた。株価は「Yahoo!ファイナンス」の時系列データから無料で頂戴してくるのだが、これはデータではサービスされておらず、htmlの中から特徴的なタグに正規表現でマッチングさせて株価を取り出してくる仕組みになっていた。なので、うまく動かなくなっていたのは、さしずめYahoo!ファイナンスの仕様が変わり、htmlのフォーマットなどが変わったのだろう、と思っていた。実際、正規表現でマッチングさせて目的のデータを切り出すコードになっているから、わずかでもhtmlが変わると、途端に消化不良を起こすのである。

 原因究明や修理が面倒で、また、しばらく株式も値動きがあまりなくて面白くなかったから売買もしておらず、シミュレーションシステムも放りっぱなしになってしまっていた。

 そんな折も折、ここへきて、新型コロナウイルス蔓延により外出の自粛が推奨される事態となった。ために、やむなく家に垂れこめている。平日は仕事に(いそ)しんでいるからあまり暇はないが、休日などはどうしても無聊(ぶりょう)となる。

 そこで、意を決して上述のシステムを修理することにした。多分、Yahoo!ファイナンスの仕様、就中(なかんづく)htmlのフォーマットを分析すれば、すぐに修理できるだろうと思っていた。

 ところが、その推量は全然違っていた。

 株価ダウンロードプログラムは、htmlをダウンロードするのに、CPANの「LWP」ライブラリ等は使わず、Perl内から「wget」を呼び出して使っていた。そうしないとSSLの部分が面倒だからだ。

 問題は、このSSL部分にあった。Yahoo!全体の仕様が、TLS1.2未満のSSLを拒絶するよう変更されていたのだ。Fedora 9は、OpenSSL0.9.8までしか対応しておらず、そしてOpenSSL0.9.8はTLS1.0までしか対応していない。

 そこまで確かめて、やっと思い出した。私のシステムが動かなくなった2年ほど前というと、ちょうどSSLのセキュリティホールやSHA-1アルゴリズムの危殆(きたい)化などが取り沙汰され、あちこちのサイトやブラウザがどんどんバージョンアップされて行っていたのだ。

 私はその頃、仕事が非常に忙しく、自宅のPC環境など(かえり)みている暇がなかった。それで、他人事のようにそれらのニュースに接していたのである。

 原因は、wgetとOpenSSLが古い、ひいてはプラットフォームOSが古いことにあった。

 最新のFedoraシリーズのバージョンは「31」になっており、そもそも平成17年(2005)発売のCerelon Dのような32ビットCPUには対応していないから、もう、古いLinuxマシンはそろそろお払い箱だろう。

 私のデスクトップマシンはCore i7 4790K 4GHzにメモリは32GBをブチ込み、ストレージは1TBのHDDから、先日2TBのSSDに換装したところだ。されば、ここはもう、仮想化しかあるまい。

 VMWare Playerをダウンロードしてインストール。非営利であれば無料である。これにFedora 31のisoイメージを本家サイトから貰ってきてインストールする。

 動かしてみてびっくりした。私のような商用のSystem V育ちの者にとって、Linuxの「init」システムは長年慣れ親しんだシステムなのだが、Apache2を動かそうと/etc/rc.d/init.d/の下を覗いてビックリ仰天!何も入っていなくて、空っぽではないか!(笑)

 こ、これは……!とGoogle先生にお尋ね申し上げ、今は「init」は否定の憂き目にあい、「systemd」というものに置き換わっているということを知る。

 「systemctl」というサービス・コマンドの操作を調べ、これでhttpdを動かす。PostgreSQL、PHP、wgetなど必要なものをyum改め、「dnf」で次々とブチ込む。

 それから(おもむ)ろに株価ダウンロードシステムを動かす。……まったく何の支障もなく、プログラムの変更もなく作動するようになった。

 phpで作られたユーザインタフェースについては、POSTやGETの引数を直接グローバル変数として扱うことのできるかつてのPHPの仕様が廃止されてしまっており、そのままでは動かなくなってしまっていたが、そこは彌縫(びほう)的にパッチ当てをした。

 SELinuxを調整しないとPostgreSQLとPHPが協調動作しないなど、多少ひっかかったところもあったが、元の通り株価売買シミュレーションシステムは作動するようになった。

 さすがは Core i7 だ。生マシンから仮想マシンへの移設とはいえ、もはや骨董(こっとう)品に近い Cerelon の生マシンから移設しただけあって、C で書いたシミュレーション部分は、目を見張るような素晴らしいスピードでカッ飛んでいく。

 もともとこのシステムでは、過去5年分の株価データに対し、8900通り×49銘柄の売買シミュレーションを行っていた。Yahoo!ファイナンスに株価の整理値が出揃う20時50分頃から「cron」でこのシステムを起動していたのだが、これだけの組み合わせのシミュレーションを行うと、全部終わるのは23時くらいにはなってしまっていた。

 ところが今回の移設で、それらシミュレーションがなんと10分ほどで完了するようになった。かつて誰かが言っていたが、「稚拙で鈍足なアルゴリズムでも、意外にマシンパワーの進歩で解決されてしまう」ということの実例を目の当たりにした次第である。

 さて、そのようにしてシミュレーション結果を見てみると、やはり、新型コロナウイルスの影響で、相場は鉄火場と化している。大変な勢いで売買指標が出ている。これは大変だ。

 今この鉄火場に飛び込むのは危険である。ウイルス禍が一段落し、上昇相場になったところからが勝負だろう。

自分のPCのSSD換装と、妻のPCへのWindows10インストール

投稿日:

 自分のPCのHDDの速度が気に入らなくなってきた。それと同時に、容量(1TB)も、足りなくなってきた。YouTube動画など増産したからである。

 他方、妻のPCをWindows Vistaのまま長年放置してきている。とうにサポート期間も終了し、最早(もはや)セキュリティがどうとか言い得る状態ではない。恥ずかしいことだが、「ITストラテジスト」の資格を持つこの私、職場では大いに専門性を発揮して口を(のり)しているが、自宅のPCとなると「家でまで仕事みたいな真似をしたくない」というような気分が働いてしまい、どうも何やら、こういう杜撰(ずさん)なことになってしまうのである。

 これでは新型コロナウイルスにやられる前にコンピューター・ウイルスにやられてしまう。意を決し、自分のPCを改良するとともに妻のPCもアップグレードすることにした。

 そこで、秋葉原でWindows10 Home 32BitのDSP版(Delivery Service Partner version)を2TBのSSDと一緒に購入しようと思い立った。廉価なDSP版は、PCの部品と一緒でないと購入できないからだ。そして、OSは妻のPCへインストール、SSDは私のPCへビルトイン、という腹案を立て、去る4.16(木)の夕刻、秋葉原の九十九(ツクモ)電機へ行った。

 新型コロナウイルスの蔓延と緊急事態宣言のため、秋葉原は閑散(かんさん)としていた。ところが、九十九電機のある、中央通りから一本西へ入った「メイドさん通り」では、メイドさんたちがウイルス感染リスクも(モノ)かは、ミニスカートの素足も(あら)わに客引きに励んでいる。

 生きるためとは言え、誠にご苦労なことである。

 九十九電機は()いていた。2階のディスク売り場へ行き、2TBのSSDでDSP版は購入できるか、と聞くと大丈夫だと店員さんは言う。それで「Homeの32Bit版を」と注文すると、(あに)(はか)らんや「今はもう32Bit版はありませんよ」などと店員さんは言うではないか。

 う~ん、こりゃ困った。Amazonで探すか、と何も買わずに帰宅した。新型コロナウイルスで要警戒の東京の市街地からは早々に退散するのがよい。

 Amazonで探すと、どういうわけかDSP版よりもパッケージ版の「USBメモリ」製品のほうが安いことがわかった。2018年版とあるが、なに、インストールしてからアップデートすればよかろう。他にも、「DOS/Vパラダイス」や「九十九電機」の通販サイトも覗いたのだが、「10・Home・32Bit・DSP」は、意外に安くなく、1万7千円だのと言う値段がついていたりした。パッケージ版は\13,280-.である。

 それから、SanDiskの内蔵2.5インチSSD、2TBの「SDSSDH3-2T00-G25」を一つ。

 更についでに、3.5インチベイに取り付けるためのアダプタ金具も一つ。

 これらを注文しておいて、自分のPCの下ごしらえをする。

 現在の環境はHDDが1TBなので、ディスクのフォーマットは「MBR」にしてある。しかし、将来2TB以上の大きなディスクを使用するときのためには、「GPT」フォーマットにする必要がある。ところが、ディスク移行ツールなどを使用する際、「MBRからGPT」、あるいはその逆だと、失敗することがままあるらしい。

 そこで、次の各サイトさんの解説を参考に、現在のディスクをGPTに変換しておくことにした。

 上記サイトさんでも各々述べておられるように、変換には「mbr2gpt.exe」というコマンドラインツールを使う。コツは「ユーザアカウント制御(UAC)」「システムの復元」を無効にし、シェルは「Windows PowerShell」をAdministratorで起動することだ。

PS C:\WINDOWS\system32> mbr2gpt /validate /disk:0 /allowFullos
MBR2GPT: Attempting to validate disk 0
MBR2GPT: Retrieving layout of disk
MBR2GPT: Validating layout, disk sector size is: 512 bytes
MBR2GPT: Validation completed successfully
PS C:\WINDOWS\system32> mbr2gpt /convert /disk:0 /allowFullOS

MBR2GPT will now attempt to convert disk 0.
If conversion is successful the disk can only be booted in GPT mode.
These changes cannot be undone!

MBR2GPT: Attempting to convert disk 0
MBR2GPT: Retrieving layout of disk
MBR2GPT: Validating layout, disk sector size is: 512 bytes
MBR2GPT: Trying to shrink the OS partition
MBR2GPT: Creating the EFI system partition
MBR2GPT: Installing the new boot files
MBR2GPT: Performing the layout conversion
MBR2GPT: Migrating default boot entry
MBR2GPT: Adding recovery boot entry
MBR2GPT: Fixing drive letter mapping
MBR2GPT: Conversion completed successfully
Call WinReReapir to repair WinRE
MBR2GPT: Failed to update ReAgent.xml, please try to  manually disable and enable WinRE.
MBR2GPT: Before the new system can boot properly you need to switch the firmware to boot to UEFI mode!
PS C:\WINDOWS\system32>

……というようなコマンドライン経過で、2~3分で変換は完了する。その後、忘れずに「ユーザアカウント制御」と「システムの復元」を元に戻す。

 翌日、4.18(土)、USBメモリ版のWindows10とSSDが自宅に届いた。で、SSDを取り付ける前に、一度PCの電源を切り、念のため起動を確かめておこうともう一度電源を入れる。

 ……アレ?

 全然立ち上がらなくなっている。どうも、GPTへの変換に失敗し、ブート領域を壊したらしい。う~ん、参った。ITストラテジストが聞いて笑うワイ(恥)

 インストールメディアで立ち上げだな、こりゃ、……というわけで、もともとWindows8からのオンラインアップグレードでWindows10にしたマシンなので、Windows8のインストールメディアを取り出そうとした。

 ところが、ナイ。見つからない。あっれ~??

 家じゅうひっくり返して探したが、ナイ。土曜日半日つぶして探したが、ナイ。

 どうも、家族か私か、誰かが誤って捨てたようである。

 う~ん、う~ん、アホじゃなかろうか、私。

 ええいままよ、と、妻のPC用に買ったWindows10を、急遽自分のPCへのクリーン・インストール用に使用し、妻のPCのWindows10ライセンスは改めて別のを購入することに決した。

 SSDを取り付け、Windows10のUSBメディアでクリーン・インストールする。USBでのクリーン・インストールは誠に速く、あっという間に終了する。

 元のディスクを取り付け、データを引き上げる。ブート領域が壊れただけなので、大事なデータは全部アクセス可能である。

 元の容量(1TB)の倍(2TB)のSSDを購入したわけなので、元のディスクは丸ごと適当なところにコピーしてしまうことにする。そのままだとアクセス制御がかかっていてコピーできないファイルなどが出てくるから、ディスク丸ごと、所有者を自分に変更し、フルアクセス権限を全部のファイルやフォルダにつける。ディスクのプロパティの「セキュリティ」タブで簡単に操作可能である。システムからいくつかのファイルやフォルダについて拒絶されるが、無視する。

 それから念のため、Explorerで操作すると、何かと失敗も多いから、ここは「robocopy」を使用する。コマンドプロンプトを管理者モードで立ち上げ、

C:\WINDOWS\system32>cd c:\

c:\>robocopy /e /r:2 /w:0 f:\Users\自分\Documents\ C:\Users\自分\Documents\古い方のディスク
(以下略)

……等とすれば、素晴らしいスピードでコピーが始まり、そもそもコピーが無理なものはいい加減に試行して適当にすっ飛ばしてくれる。

 移行は終了、起動も動作も実に快適になった。素晴らしい速度である。

 それから妻の分のWindows10をAmazonで購入する。4.21(火)にそれが届く。最初に買ったものと同等のものなのだが、\11,260-.と、2千円ほど値段が安くなっており、なんだか悔しいが、気にしないことにする。

 自分のPCから取り外した古いHDDを妻のPCに取り付け、古いWindows Vistaの管理コンソールを使って変なパーティションを全部開放する。それから届いたWindows10をサクッとクリーン・インストールし、OSやWindowsセキュリティを最新版にアップデートする。

 それからアプリを再インストールし、妻と子供たちの古いデータを「robocopy」でディレクトリツリー丸ごと新しいディスクに移行する。

 次女は「SAI」というペイントツールを使用してイラストを数多く描いていたが、これはダウンロード販売のものだ。そのライセンスキーが必要である。古い方のHDDのインストールディレクトリに拡張子「.slc」で「(数字).slc」というファイルがあるが、それがSAIのライセンスキーだ。新たにインストールしなおしたSAIのインストールディレクトリにそのファイルをコピーすれば、これまで通りに使うことができる。

 これらをさっさと済ませ、終了。

 その際、面白いことがあった。妻のPCのCPUは「Celeron」である。Celeronというと古い32ビットCPUのような気がするし、実際発売日は平成20年(2008)の4月、つまり今から12年前で、もはや骨董(こっとう)とも言えるレベルである。作動させていたOSも「Windows Vista」で、32bitであった。

 DSP版は64bit版と32bit版は別製品になっているが、今回使用したパッケージ版のWindows10の場合は64bit版と32bit版の両方がインストールメディアに入っている。これをインストールする際、64bit版と32bit版のどちらをインストールするか選択肢が出るが、上のような事情であれば、その時に何となく32bit版を選ぶのが常道のような気がする。しかし、「64bit版を選んだらどうなるのかな?」と持ち前の茶目と実験精神が出て、64bit版を選んでみた。そうしたら、別段なんということなくインストールされ、動作もむしろ高速に感じられるようになった。

 さもあろう、妻のPCのCPUはCeleronはCeleronでも、「Celeron Allendale(アレンデール)-512K E1400 2.00GHz」なのであった。実はこれ、古くてもれっきとしたx64 CPUなのである。

 そのようなわけで、自分のPCと妻のPCの能力向上とアップグレードはなんということなく終了した。