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分ほどで完了するようになった。かつて誰かが言っていたが、「稚拙で鈍足なアルゴリズムでも、意外にマシンパワーの進歩で解決されてしまう」ということの実例を目の当たりにした次第である。

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

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

亭主ドライバ

投稿日:

 去年のいつぞやの夕刻のこと。

 ウィスキー呷ってダラダラしてたら、「ちょっとお父さん、台所手伝ってよう~」と妻の悲鳴である。どうも洗い物など、台所がたまってしまったようだ。

 もとより、家庭において妻の命令は絶対厳守である。妻は家庭の首相であってみれば、その命令はたとえ家長の私であろうと、墨守死守でなければ近代立憲制度の実をないがしろにすることに繋がっていってしまう。

 それはさておき、妻は台所に私を呼びつけるや、じつにテキパキと私をドライブしはじめるのである。

「抽斗からラップ出して。……違う、右の抽斗ッ。もう~」

「冷蔵庫あけて水に漬けた生姜の鉢をだして!」

「それにラップかけて、野菜室にしまうのよ。」

「それから、フライパンの生姜焼きの残り、アルミカップに小分けにして。」

「それをラップに包んで。休み明けにお父さんのお弁当に入れるんだから。……あーっ、だめよ、ピチピチに包んだら。ふんわり包むのよ。……あーっもう、それは、こう!こういうふうに!!」

「終わったらアッチの椅子に座ってて!」

 これらのことを、自分は洗剤を計ったり皿を洗ったり製氷皿に水を足したり布巾を漂白したりしながら、ピシピシと責め立てるように命ずるのである。

 随所にパイプライン処理や、時として分岐予測なども入ってその最適化っぷりは有無を言わせぬ。

 多分、妻は私よりCPUコアや同時処理可能なスレッドが多い。

 ……ああ、妻はウチの総理大臣なんかするより、4ビットCPUのプログラマになったほうがよっぽど向いていたのではないかと、腹の底から思うわ。

うぉーっとっとっとっ……

投稿日:

 ぐは、……。マジかい。やりおったの~……。

 IoT、携帯、まあ、その辺だろうなあ。孫正義、「一人あたり千台、一人につきIPアドレス千個必要」とか言ってたから、本当にそのあたりにコミットするつもりなんだろうなあ。

 それに、なんつったって、Raspberry Piなんかも、CPUはARMなんだよな。

構造化できるToDoアプリケーション、ないしアプレットがほしい

投稿日:

 職場でMicrosoft Outlook の機能のひとつ「タスク」を愛用している。これは手軽にToDoリストを作ることができるものだ。

 私のような程度の低い人間は、自分のやることをいちいち書き出してそれを見ながらでないと、漏れなく順番に仕事をすることができないのである。いわば業務予定やToDoはコンピュータのプログラムみたいなもので、その例えでいくと私など、コンピュータのCPUなみのバカである。……いえね、コンピュータのCPUなんてものは、バカなんですよこれは。書き出してあることしかできないんですからな。

 おっと脱線しそうだ。

 Outlookの「タスク」はうまくできており、時間をセットしておけば実施時間になるとアラームが鳴るし、必要に応じて予定表にドラッグドロップすれば予定表に入るし、メールなどをドラッグドロップすれば添付ファイルや必要な資料もまとめられる。私は使用していないが、コストを入力する機能や進捗度を入力するところもあるので、簡単なEVM等のもとネタ帳に使用することもできる。

 てんやわんやの今の職場で、このToDoにどれくらい助けられたかわからない。これがなかったら、一つふたつ、重要な仕事を忘れるか、期限に遅れてしまい、取り返しの付かない失敗をしてしまっていただろう。

 ただ一点惜しむらくは、このToDoは「階層構造化」ができないのである。「階層構造化」と言ってわかりづらければ、「各項目にインデントがつけられない」と外面から言えばわかると思う。

 つまり、タスクにも構造がある。ある仕事はある仕事の子項目であったり孫項目であったり、親項目、兄弟項目であったりするのである。

 しかも、それが随時変わることがあり、かつ、ある子項目に親が複数あるなどというネットワーク構造じみたものになることもある。

 工夫すれば階層構造の表現は、Outlookでもできないことはない。フィールドを必要な個数追加する。この個数が構造化の階層の深さの制限になる。そして、そのフィールドに数字を入れ、それにしたがってソートするのである。

 しかし、その工夫の仕方だと、ぱっ、ぱっと思いついた「今日やるべきこと」を素早く入れておき、後で整理するということができないのである。

 適当に入力した後で、例えばWordのアイコンにある「インデントの追加」のようなものをクリックすると、インデントと同時に直前の項目の子項目になる、というふうになっていたら、手軽なのになあ、と思う。

ユーザー作ったりとか

投稿日:

 Raspberry Piで遊ぶ。

 私が買ったのは、「Raspberry Pi 2 Model B」という最新のものだ。オライリー・Make:PROJECTSシリーズの「Raspberry Piをはじめよう」で解説されているのは古い方の「Raspberry Pi モデルA」「同B」なので、少しづつ合わないところがあるが、ごく細部を除いては、特に気にする必要はない。細部の違いが影響してくるのは、よほど高度なことをやる場合だ。

 今さら私が述べ立てることではないと思うが、私と同じような人で、Rasberry Piのことを知らない、という人に向けて書けば、結局はこうだ。

  •  Raspberry Piは、GPIOインターフェイスボードを積んだ普通のPCだと思えばよい。
  •  普通のPCなので、Linux系OS以外にも、Windows10なども使える。だが、成果物のほとんどはRaspbianというLinuxディストリビューション上で得られているので、OSにはRaspbianを選択しておくのが無難。
  •  前記GPIOは、普通にファイルに見えるので(と言っても、/devの下にデバイスファイルがあるわけではない;もちろん、シンボリックリンクでそういうふうにすることはできるが)、標準出力でファイルを開け、書いて閉じれば、それでGPIOにつないだ電子工作をコントロールできる。
  •  Arduinoに比べると、ロジックが正=3.3Vであること、アナログ入力がないことなどが違う。解説書「Raspberry Piをはじめよう」にも、
    「最初にRaspberry Piのニュースが流れたとき、それがArduinoキラーになるのではないかと多くの人が考えました。値段はたいして違わないのに、Piはずっと大きなCPUパワーを持っています。だったらArduinoを使う理由はもうない、というわけです。しかし、やがて両者は補完的な関係にあることが分かってきました。以下のような状況を考えると、ArduinoとPiを組み合わせるメリットが見えてきます。

    • Arduinoの豊富なライブラリと作例を活用したい。
    • すでにうまく動いているArduinoプロジェクトにCPUパワーを追加して、もっと高度なことがしたい。
    • 5Vで動作する回路を扱いたいが、Piは3.3V動作で、5V入力に対応しない。
    • 誰かがプロトタイピングの過程で少しばかり無茶をしてチップがダメージを受けた時(Arduinoのピンにモーターを直結している人を見たことがあります)、Arduinoならば数百円以下でスペアのチップを買って自分で交換することもできるが、Piでそれをするのはほぼ不可能。
    •  3Dプリンタ用コントローラのように高精度なリアルタイム処理を必要とするものを作るとき、リアルタイムOSとは言えないRaspbianよりも、命令サイクルを計算できるマイクロコントローラのほうが要求に適う可能性が高い

    (p.88冒頭から引用)
    ……等とある。

  •  Linuxなので、使い始めるにはとりあえずrootを把握して、ユーザを作ればよい。作りつけのユーザもあるが、私のようなおっさんは、まず
    「# useradd -g pi toshio ; passwd toshio ; mkdir /home/toshio ; chown toshio:pi /home/toshio」
    ……なんてことをやらないと落ち着かないのである。
  •  さまざまな作例等はPythonの利用が想定されているので、さまざまな作品例のマネがしたければPythonを使えばよいが、前記したように「普通のLinuxマシン」なので、PerlだろうがCだろうが、おっさん系の言語も全部使えるから、私のようなおっさんは自分が使いたい言語を使えばよい。

 なので、例えば、「Raspberr Piをはじめよう」の102ページあたりに載っている最初のLチカの例は、次のような方法でも再現できる。

#!/usr/bin/perl
#  perl2LED
#    perlでLチカ
#    27.8.16(日)
#    佐藤俊夫
#
open(GPIO25, ">/sys/class/gpio/gpio25/value");
GPIO25->autoflush(1);
while(){
  print GPIO25 1;
  sleep(1);
  print GPIO25 0;
  sleep(1);
}

……などとPerlで書き、「gpio25」をユーザ空間にエクスポートして、

# ./perl2LED

 とやると、LEDが1秒おきにチカチカするのである。

Raspberry PiでのLチカ最初の例
IMG_3285

電気、電波その他

投稿日:

 昨日、友達がチャットで「夏のせいか、どうもPCが過熱気味のようだ」と言った。

 チャットしながら、昔学んだ電波や電気のことを思い出した。感懐片々、思いつくまま、次のようなことを友達に話した。

 もともと、「電気」というものは、自然現象を人間の生活に応用したものだ。したがって、簡単な電気の働きは、ごく天然自然の性質を出ない。

 自然のままに放っておかれている電気の、さまざまなはたらきや特性をグラフに取れば、雷のような急峻なものを除けば、多くは2次曲線や正弦波のような美しいグラフになる。

 電気の眷属である、交流や電子、電波と言ったものもこれは同じで、まことに多くのことが2次曲線や正弦波で説明がつく。これらは「微分可能」なはたらきであり、大変自然なものだ。

 ところが、電子計算機だけが、異質である。

 電子計算機はスイッチの入・切という、まことに単純きわまる論理ですべての計算をまかなっている。二進数を使用するゆえんがこれである。

 スイッチの入・切によって生じる電気の経過をグラフにとれば、これは「矩形波」となる。

 正確な矩形波は、微分できない。つまり、自然なものではない。

 このような、大変人工的なものを、この小さなPCのケースの中に無理矢理に閉じ込めて使役しているのであるから、熱も出ようというものだ。

 ここをもう少し、違う方向から見てみたい。「微分できない」と書いたが、実際のコンピュータの内部では、スイッチの入・切をそれほど急峻に行うことができないので、矩形波の形は少し「ナマッて…」いる。くだけて書けば、カドが少し、斜めだったり、丸かったりする。

 このような矩形波は、実は、正弦波を組み合わせて作ることができる。

 いま、理論的に、3GHzの矩形波を正弦波から得る。それには、まず3GHzの正弦波を作る。美しく、なめらかに上下する波だ。これに、周波数が3倍(9GHz)、強さが3分の1の波を足す。そうすると、波の頭のところがふたこぶラクダのようにへこんだような形に変化する。

 更に、周波数が奇数倍、強さが奇数分の1の波をどんどん足しこんでいく。次第に形が四角く整えられていき、矩形波が作られていく。つまり、数学で習う「フーリエ展開」のところがこれである。

 ここには逆のことが含まれている。つまり、3GHzの矩形波には、その奇数倍の周波数の電気エネルギーが内包されている、ということである。

 3GHzくらい、と言えば、今一般に入手可能なパソコンの、CPUのクロック周波数がこれくらいである。パソコンの内部ではこれくらいの矩形波が作られて、計算のリズムをとっている。

 そのパソコンの中には、9GHzや15GHzや21GHzという、たいへん高い周波数の電気エネルギーが、同時に閉じ込められている、ということだ。

 電気のエネルギーは、周波数が高くなればなるほど、媒体の外へ外へと出て行こうとする。ラジオやテレビにしても、電気エネルギーのこうした性質を用いて、遠隔の場所にエネルギーを伝達することにより、情報を伝える。

 パソコンの内部の、大変高い周波数の電気エネルギーが、「外へ出よう出よう」として、あるものは熱の形となって外に出て行くのは、こうした点からも無理からぬことだ。

 また、この「3GHz前後」の周波数は、電子レンジにも使用されている。水分子の共振を行わしめるのにちょうど良い周波数がこれだからだが、われわれが使用するIT機器、パソコンのCPUのクロックだけでなく、無線LANや携帯電話なども、似たような周波数を使う。煮炊きに使えるような周波数なのであるから、ざっくりと言えば、そりゃあ、熱も出ようというものである。

 …そんなことを話した。

 ただ、この友達は女の人で、たいへん女性らしい人でもあるので、あとから考えてみると、だいぶ退屈な話だったかもしれない。

(この文章は当時Facebookのタイムラインに書いたものです。)

電波と熱と女の人

投稿日:

 昨日、友達がチャットで「夏のせいか、どうもPCが過熱気味のようだ」と言った。

 チャットしながら、昔学んだ電波や電気のことを思い出した。感懐片々、思いつくまま、次のようなことを友達に話した。

 もともと、「電気」というものは、自然現象を人間の生活に応用したものだ。したがって、簡単な電気の働きは、ごく天然自然の性質を出ない。

 自然のままに放っておかれている電気の、さまざまなはたらきや特性をグラフに取れば、雷のような急峻なものを除けば、多くは2次曲線や正弦波のような美しいグラフになる。

 電気の眷属である、交流や電子、電波と言ったものもこれは同じで、まことに多くのことが2次曲線や正弦波で説明がつく。これらは「微分可能」なはたらきであり、大変自然なものだ。

 ところが、電子計算機だけが、異質である。

 電子計算機はスイッチの入・切という、まことに単純きわまる論理ですべての計算をまかなっている。二進数を使用するゆえんがこれである。

 スイッチの入・切によって生じる電気の経過をグラフにとれば、これは「矩形波」となる。

 正確な矩形波は、微分できない。つまり、自然なものではない。

 このような、大変人工的なものを、この小さなPCのケースの中に無理矢理に閉じ込めて使役しているのであるから、熱も出ようというものだ。

 ここをもう少し、違う方向から見てみたい。「微分できない」と書いたが、実際のコンピュータの内部では、スイッチの入・切をそれほど急峻に行うことができないので、矩形波の形は少し「ナマッて…」いる。くだけて書けば、カドが少し、斜めだったり、丸かったりする。

 このような矩形波は、実は、正弦波を組み合わせて作ることができる。

 いま、理論的に、3GHzの矩形波を正弦波から得る。それには、まず3GHzの正弦波を作る。美しく、なめらかに上下する波だ。これに、周波数が3倍(9GHz)、強さが3分の1の波を足す。そうすると、波の頭のところがふたこぶラクダのようにへこんだような形に変化する。

 更に、周波数が奇数倍、強さが奇数分の1の波をどんどん足しこんでいく。次第に形が四角く整えられていき、矩形波が作られていく。つまり、数学で習う「フーリエ展開」のところがこれである。

 ここには逆のことが含まれている。つまり、3GHzの矩形波には、その奇数倍の周波数の電気エネルギーが内包されている、ということである。

 3GHzくらい、と言えば、今一般に入手可能なパソコンの、CPUのクロック周波数がこれくらいである。パソコンの内部ではこれくらいの矩形波が作られて、計算のリズムをとっている。

 そのパソコンの中には、9GHzや15GHzや21GHzという、たいへん高い周波数の電気エネルギーが、同時に閉じ込められている、ということだ。

 電気のエネルギーは、周波数が高くなればなるほど、媒体の外へ外へと出て行こうとする。ラジオやテレビにしても、電気エネルギーのこうした性質を用いて、遠隔の場所にエネルギーを伝達することにより、情報を伝える。

 パソコンの内部の、大変高い周波数の電気エネルギーが、「外へ出よう出よう」として、あるものは熱の形となって外に出て行くのは、こうした点からも無理からぬことだ。

 また、この「3GHz前後」の周波数は、電子レンジにも使用されている。水分子の共振を行わしめるのにちょうど良い周波数がこれだからだが、われわれが使用するIT機器、パソコンのCPUのクロックだけでなく、無線LANや携帯電話なども、似たような周波数を使う。煮炊きに使えるような周波数なのであるから、ざっくりと言えば、そりゃあ、熱も出ようというものである。

 …そんなことを話した。

 ただ、この友達は女の人で、たいへん女性らしい人でもあるので、あとから考えてみると、だいぶ退屈な話だったかもしれない。