株式売買シミュレーションシステム

投稿日:

 十何年動かしてきた標記システム。

 先日、古いサーバを見限って、セキュリティの堅いデスクトップマシン上の仮想マシンに「Fedora 31」を導入し、その上に移設したところだ。

 さすがはCerelonの32ビットから「Devil’s Canyon」ことCore i7-4790Kへの移設だけあって、性能には目を見張るものがある。

 前記した通り、前はマシンの性能上の限界から、自分が着目した49個の銘柄を分析の対象としていた。

 ところがどうだ。目を見張るようなスピードでカッ飛ぶようになったこのシステム、東証1部上場の時価総額上位銘柄から300社を持ってきて、自分が気になる銘柄71社を合わせた371社合わせてシミュレーションしても、1時間余りで終わってしまう。前のマシンでは20時頃からスタートさせて、23時~24時頃までかかってしまっていたのだ。

 これはもう、大幅に手を広げて、株式の売買に励むよりほかない。

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

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

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

面倒臭いからもうこれでいいです(笑)

投稿日:

 いい記事が出ているのだが、なんかちょっと違う。

上記記事より引用
組み込み用OSとは

 OSと聞くと、パソコン用OSのウィンドウズを思い浮かべる人が多いだろう。クラウドサービス(外部に保存したデータやアプリケーションなどをネット経由で呼び出して使うサービス)などに用いられる大型コンピューターでは「ポジックス」というOSが主に使われている。スマートフォンのアプリケーションを動かすアンドロイドOS(アンドロイド端末用OS)やiOS(iphone端末用OS)もポジックスのプログラムを部分的に使っている。こうしたコンピューター用のOSは「情報処理系OS」あるいは「汎用OS」と呼ばれている。

 これに対し、電子機器などに組み込まれている小さなコンピューターを制御するOSが、組み込み用OSだ。

 いや、「『ポジックス』というOS」て、う~ん、……微妙に違うと思うんだが、……半分くらい合ってるッちゃあ、合ってるので、……説明するの面倒臭いから、これでいいですわ、もう(笑)。


追って書き

 面倒臭いのでもうこれでいいですわ、……と言い捨てて放っておくのも技術者としてどうなのかという気がするので、あっさりとではあるが付記しておきたい。

 POSIXはOSではない。「OSが備えるべきAPIの層の規格」である。

 APIとは、コンピュータのプログラムがコンピュータの資源や機能を使おうとする際の「窓口」と思えばよい。この「窓口」の例えで言うなら、窓口を規格化するということは、建物に設けられた窓口の開く方向、位置、大きさ、縁の材質、開け閉めのための手順、……等々、といったことを取り決めておくようなものである。

 「層」と書いたが、これも建物で例えることができる。建物の規格にはいろいろな角度からの規格がある。木造か鉄筋コンクリートか、といった主な材質に関するものや、洋風か和風か、といった内外装に関すること、軸組かツーバイフォーか、といった構造に関することなどだ。これには「洋風・和風」といった抽象的な取り決めから、「木造・鉄筋コンクリート」といった具体的なものまで、「層」のように取り決める事柄が数多く重なっている。コンピュータも同じことで、取り決めておくべきことは非常に多くあり、建築物におけるがごとく、抽象から具象に至るさまざまな取り決めがあるのだ。これが「APIの『層』」と書いた所以(ゆえん)である。

 POSIXはそうした「取り決め」、すなわち「ある角度から見た場合の(つまり、『ある層』の)規格」のことである。

 記事にあるような「ポジックスという名の情報処理系OS」なんてものは、ない。あるのは「OSに関連するPOSIXという名の規格」である。その点でこの記事は誤りである。この誤りは、一般の人のために読みやすく簡単にした、というのと異なる。誤りであるとするのが書き過ぎであるなら、この記者の各種OSに関する理解がこうなのだ、ということになる。

 この記事全体は「いまやITRONが世界標準として確固たる地歩を築きつつある」ということが主旨であり、POSIXに関することは本題ではない。だが、たとえ些末なことであろうと、ここまで縷々述べたような技術的な点について正確さを欠いているということは、この記事が技術的な事柄について述べたものであるだけに、その主旨とすること全般に関する正確さについて疑いが持たれてしまうのも止むを得まい。調査研究本部主任研究員を肩書とする人の書くものであるのなら、技術的に正確な記述がなされなければならない。

 というか、この記事への本来のツッコミどころはPOSIXの話ではなく、「記事はITRONとBTRONを一応区別して書いてはおり、それは正しいけれど、一般の読者にはそんなことなんかわからない。また、ITRONのシェアについて、定量的な根拠を何も書いていない。例えば、『自動車の制御に広く使われている』としているが、ではITRONの市場占有率は何パーセントなのか、という問いには、この記事はまったく答えていない」……というところだろうか。

やっぱりviでないと(はかど)らない

投稿日:

 20年前から10年前にかけて、システム管理の仕事をしていた。はじめ、私の役目はサーバとエンジニアリングワークステーション数十台からなるシステムの、商用UNIXのrootであった。UNIXはNECが出していた「UX/4800」で、SVR4.2の標準に準拠していた。サーバはUP4800、エンジニアリングワークステーションはEWS4800という製品だった。

 職場のサーバやエンジニアリングワークステーションなので、勝手に環境を変更することは許されず、いきおい、エディタなどは標準で入っている「vi」以外に選択肢がなかった。

 その後、その職場ではLinuxサーバが増えたのだが、GUIが重くて面倒臭いので、Xをインストールせず、管理作業等はコンソール画面で、エディタは相変わらずviのみを使っていた。

 それら数十台のLinux/UNIXマシンを相手に、10年の間、地味な管理作業に(いそ)しんだ。

 その頃からの習い(さが)で、今でも「ああ、これ、vi使ったほうが早いのになあ……」などと思うことがどうしても多く、職場のPCにviが入っていなかったりするとイライラする。しかし、今の職場のPCは私が管理しているものではないので、どうにも仕方がない。

 しかし、自宅は別で、何を放り込もうが私の勝手である。だから、躊躇なくviをインストールする。viを使うと、ちょっとしたことでも迅速・快適に作業ができるからだ。

 先ほども、ネットで拾った複数行の文字列を、行ごとに「<tr><td>文字列a</td><td>文字列b</td></tr>……」というふうにテーブルに成型する必要があったのだが、このようなことはそこいらの変なエディタを使うより、viのほうがよっぽど早くできる。

 ネットで拾った文字列は次の通りだ。愛用のタブレット、T101HA-G128のBIOSセットアップのパスワードをリセットするためのレスキューパスワードの羅列だ。

2011-11-23 A1AAABBA
2011-11-24 AL11LAAA
2011-11-25 ADH0AHBB
2011-11-26 AAAAB1BL
2011-11-27 A9BOCAAD
・ ・ ・

 これを、先に述べたように<table>タグで囲めるよう、<td>タグ等で成型するわけである。

 こんなこと、viでやればほんの数秒だ。普段から手になじんでいれば、人によっては「3秒」で終了させられる。

 それには、次の数個のコマンドを投入するだけでよい。

:1,$s/^/<tr><td>/
:1,$s! !</td><td>!
:1,$s!$!</td></tr>!

 たったこれだけで、全部の行が一瞬で次のようなHTMLに生まれ変わる。

<tr><td>2011-11-23</td><td>A1AAABBA</td></tr>
<tr><td>2011-11-24</td><td>AL11LAAA</td></tr>
<tr><td>2011-11-25</td><td>ADH0AHBB</td></tr>
<tr><td>2011-11-26</td><td>AAAAB1BL</td></tr>
<tr><td>2011-11-27</td><td>A9BOCAAD</td></tr>
<tr><td>2011-11-28</td><td>A0B0ADBD</td></tr>
・ ・ ・

 あとは前後に<table>~</table>タグを入れ、スタイルをちょっと書くだけだ。

 ことほど左様に、viはいい。

 ……なのだが、「viは作業が早く済む、生産性が極めて高くなるから職場のエディタはこれで統一すべきだ」などと言うことを言うと、あらゆる人から排撃され、揉めなくてよいところで揉めることになるので、便利でいいものだと思っても、人に(すす)めたりしないよう黙っているしかない。

ラズパイからの量産移行

投稿日:

 こんな製品があるんだなあ。

 ラズパイからの量産移行を助ける産業用ボード Digi (EETimes Japan 平成29年(2017)05月25日 09時30分)

Google新OS、脱Linuxのマイクロカーネルと来た

投稿日:

 ほほ~……。

 ヒジョーに興味が持たれる。

ブクレコの本棚のバックアップ

投稿日:

 サービス終了が判明したブクレコだが、結局のところ、書棚データのエクスポートは出来ないから、手近のマシンの「wget」あたりで丸ごとコピーしておくより他にない。

$ wget -kpr -l0  -t3 -T5 -np https://www.bookreco.jp/bookshelves/59112

 まあ、仕方がない。

 で、こうやってできた「bookshelves」ディレクトリに下りて、

$ grep -h '<p class="title">' 59112?page=* |  sed -e 's/<p class="title">//' -e 's!</p>!!' -e 's/ //g' | sort | uniq | nkf -w   >booklist20160503.txt

……なんぞとやっておけば、一応書名のリストだけは取れる。

 残念なのは、ISBNとか読書日などの情報が全く保存できないことである。これをどうにかするには、Amazonか国会図書館のAPIでも使って変換するより他になさそうである。

 しかし、ふと取得した書棚ファイルを見ると、書籍の外見イメージを取得しているところがあって、そのURLでサイトを呼ぶと、その中にISBNや出版日が書かれていることに気付いた。

 なるほど。そこで、先に得た生の書棚データテキストからこのURLを切り出す。

$ grep -h 'book_image' 59112?page=? 59112?page=1? 59112?page=2? | sed -r 's!^.+(https://www.bookreco.jp/book/[0-9]+).+!\1!' >booksurl

 ファイル名をシェルに展開させるにあたり、「59112?page=*」とせずに「59112?page=? 59112?page=1? 59112?page=2?」としているのは、1番から20番までのファイルがある場合、「59112?page=*」としてしまうと、そのままだと1,11,12,13,14,15,16,17,18,19,2,20,3,4,5,6,7,8,9、というふうに、辞書順に並んでしまうからである。「ブクレコへの登録が新しい順」を保持させるためには、こうするより他にない。

 それから、このURLリストをwget -iに食わせ、データの入った生テキストを得る。

$ wget -O - -i booksurl | sed -rn -e '/<div class="summary">/, /<!-- \/\/end summary -->/p' >booksfulltext

 更に、この生テキストのタグを除き、csvにしてしまう。これをsedなどでのみやるには、結構ゴチャゴチャ書かなければならないのだが、美しく作業する気がてんからなく、行を建て増し建て増しして書いているうちに、結局自分でもなんだかわからない、次のような謎のワンライナーになった。

$ sed -nr -e '/(<span class="bold large">)|(<ul class="floatlist_left clearfix text_thin">)/,/(<\/span>)|(<\/ul>)/p'   booksfulltext | sed -e '/<span /d' -e 's/<\/span>/,/' -e '/<ul/d' -e 's/<\/ul>/-----/' -e 's/<li>出版日://' -e 's/<li>種類://' -e 's/<li>ISBN://' -e 's/<\/li>/,/' | sed -r -e 's/ +//g' -e ':loop;N;$!b loop;s/\n/ /g' -e 's/ +/ /g' -e 's/-----/\n/g' -e 's/, /,/g' -e 's/,\n$/\n/' | nkf -w
 >bookscsv_utf

 このようにして得たCSVをスプレッドシートに読み込ませるわけである。

 残念なのは、ブクレコには読書日が入れられないので、いつ読んだ本かと言うことが消失していることだ。

SSLと株

投稿日:

 もう10年以上くらいにもなるだろうか、株式売買の指標表示を自動化し、「小魚を釣る」ようにして株を売買している。ところが、先週頃から、その自動化システムが動かなくなってしまった。

 私の株式売買は、夜に自作の株式売買シミュレータを作動させ、そのシミュレーション結果に従って手動で翌日の注文を出すという方法だ。注文そのものの自動化もやればできるだろうが、証券会社がAPIを公開してでもくれない限り、多少技術的な敷居が高いので、そこまではしていない。

 株式売買にはいろいろな指標があるが、その指標を使うのに必要な日数などのパラメータは、銘柄ごとに違う。また、指標ごとにも違うので、色々な組み合わせが出てくる。サラリーマンの場合、何十もの銘柄について、銘柄ごとに手作業でそんな組み合わせ作業を毎日している時間など、あるはずがない。

 そこで、色々なパラメータを組み合わせて、過去のデータを使って売買のシミュレーションを行うのだ。トレーディング用語では「バックテスト」と言う。私のシミュレータでは、現在は1銘柄につき約1万通り程度の組み合わせで売買を試す。

 そのシミュレーション結果で、「90%~100%成功するパラメータの組み合わせ」を抽出して表示するのである。実際のところ、そのパラメータの組み合わせで売買サインが出た時に売買すれば、まず9割は儲かる。1割の確率で損をするのだが、これは10銘柄を束にして注文しておけば、「1銘柄はハズレでも、残り9銘柄は当たり」になる。つまり、期待値として「9割は儲かる」理屈になるわけである。

 だが、私が最も工夫した点は実はそこではない。

 私は勤めており、職務に専念する義務がある。これはサラリーマンなら誰でも同じだと思う。仕事中に株式の売買などすれば、免職になってしまう。そこで、このシミュレーションは、売買サインをリアルタイムの株価で出すのではなく、「前日までの株価でシミュレーションし、翌日約定の注文を出した場合で最適なパラメータの組み合わせ」をシミュレーションにより求める。こうすることで、「前日の夜から当日の朝にかけて、自宅で注文しておく」ことができる。つまり、「サラリーマンが職務外の余暇に自宅で自分の金融資産の管理をしているだけ」という形を整えることができるのだ。

 多くのサラリーマンは株で損をするが、それは、株式の必勝本などには、「今の株価」で売買しなければならないような方法しか書かれていないからだ。これだと、例えば、ある日の経済ニュースなどでその日の株価について知り、夜帰宅して、翌日の注文などを出しても、もう手遅れなのだ。だが、私のシミュレータは翌日の注文で十分なように計算するので、サラリーマン向けなのだ。

 シミュレーションに必要な日々の時系列データは、「Yahoo!ファイナンス」から無料で拝借してくる仕組みである。夜にその日の終値が確定した頃、自動的に株価をダウンロードしてくる。無料で済ませるため、生のhtmlを持ってきて株価データをその中から切り取り、データベースに格納する仕組みだ。

 システムはLinux上で動作する3層クライアントサーバシステムである。ユーザインターフェイスはphpで書かれており、Webサービスだ。株価データは、Perlで書かれたスクリプトを定期起動して、前述のようにしてネットから無料で持って来る。データベースはPostgreSQLを使用している。シミュレーションは高速化を図るためCで書いてある。

 ここ数年、何ら不調なく快調に作動していた。ところが、先週から急に動かなくなってしまった。

 短期の株式売買は毎日の値動きに注意していなければならない。私はこの値段の監視を自動化していたわけだ。ところがこれが動かなくなるとお手上げだ。自分で毎日株価を見なければならなくなってしまう。私もそれなりに忙しいので、何十銘柄もの株価チェックを自分でするなんて馬鹿々々しいことは御免である。

 早く原因を調べなければならなかったが、春の人事異動で職場が変わったりして、手が付けられないでいた。ようやく、今日になって原因を調べることができた。

 調べてみると、どうやら、株価データの拝借先である「Yahoo!ファイナンス」の仕様が変わったようだ。これまで非SSLでもサービスしていたのだが、先週頃完全にSSLに改まったらしい。他方、私の「株価データ拝借スクリプト」はPerlで書いてあり、内部で「wget」を呼び出し、これを用いて「時系列株価ページ」を持って来て、その中からデータを切り出す仕組みなのだが、ハードコーディングしてあるURLのスキームは「http」なのである。

 なるほどよしきた、とばかり、これを「https」に変えて試したが、wgetはブラウザのように簡単にはSSL証明書を扱うことができない。

 ググッてみると、「そういう時にはwgetのオプションに『––no-check-certificate』って書いとけ!」と、どなたかが既に調べて書いておられる。ありがたや。

 そこで、作動させるwgetのコマンドラインは次のようになるわけだ。

$ wget --no-check-certificate -q -O - https://info.finance.yahoo.co.jp/history/?sy=1983&sm=1&sd=1&tm=d&code=銘柄コード&p=1 | nkf -w 

 URLのスキーム部分を「https」にし、「––no-check-certificate」にするだけである。

 株価時系列データのページの作りが変わってしまっているとこれだけでは駄目なのだが、どうやらページの作りは同じらしく、今のところうまく行っているようだ。

最近の一般向けワンボード・コンピュータ、なかんづく「Arduino」「Raspberry Pi」の状況

投稿日:

平成28年2月
JISTA ML リレーコラム 第1回
会員 関東支部 jista1197 佐藤俊夫

1 はじめに

 このところ、若い方やDIYなどを楽しむ一般の方向けに、ワンボード・コンピュータが売られています。しかも、相当な売れ行きであると仄聞(そくぶん)します。

 「Arduino」や「Raspberry Pi」、「IchigoJam」「Intel Edison」「mbed」と言った製品名を聞いたことがある方も多いでしょう。秋葉原を歩くと、店の表にこれらのカラフルな箱が山積みになっています。また、イタリア人マッシモ・バンジ氏の「TED」スピーチを見たことがある方もたくさんおられると思います。

 数年前から、普及価格帯の3Dプリンタが出現してきたことにより、一般人でも小規模の製品を作り、それを世に問うようなことが可能になってきました。そこから、「Makers Movement」と言われる流行が盛り上がりはじめました。これはオープンソース・イノベーションの自然な興隆ということに加えて、出版と連携した一種のマーケティングの成功であるとも言われているようです。ちなみに、この「Makers Movement」について著書を出し、流行に火をつけたのはクリス・アンダーソンと言う人ですが、この人の名を覚えている方もJISTA会員の皆さんには多いことでしょう。そう、かの「ロング・テール」の著者その人です。

 古くから言われる「DIY」と、最新流行の「Makers Movement」との違いは、そこに「ネット」が介在するか否かだ、と言ってもよいと思います。物を作る上での発想やハウ・トゥ、設計図、使用感などは、インターネットを通じて迅速に共有され、改良が加えられ、更に共有されます。

 こうしたことを背景に、3Dプリンタを使用してものを作り、作ったものへデジタルやITのパワーを盛り込むことが広く行われるようになりました。ものへデジタルやITのパワーを盛り込むのには、廉価なワンボード・コンピュータがうってつけだというわけです。

 実際、巷間ではArduinoがこれまでに100万台、Raspberry Piが700万台売れたと言われていますから、これらのワンボード・コンピュータは、ITのプラットフォームとして無視できない勢力になっていると言えます。また、これらは安価に数を得られることから、「IoT」流行の趨勢とも関連する雰囲気が濃厚に感じられます。

 私は仕事の上ではこれらと関わっておりません。しかし、その一方で、ITストラテジの道というものは、ITワールドを形作るもののうちの何が将来の影響要素としてつながってくるかわかりません。そうしたことから、これらワンボード・コンピュータを体験しておくことが何かの足しになることもあろうと思い、ArduinoとRaspberry Piを少しばかりいじってみておりましたところ、ちょうど今般リレーコラム執筆の機会を頂きました。

 そこで、この機会をお借りして、ArduinoとRaspberry Piについて、その状況などを簡単に紹介させていただきたいと思います。

2 Arduinoについて

 「Arduino」はイタリア人のマッシモ・バンジ氏を中心に、平成17年(2005)から開発が始められたワンボード・コンピュータです。バージョンアップや派生を含め、既に数十種類の製品があります。現在店頭で入手可能な製品には、代表的な「Arduino UNO」があり、これは本日(平成28年2月7日)現在、税込み2,940円で手に入ります。

 その特徴に、次のようなことを挙げることができます。

○ ハードウェアが「オープンソース」であること。

 仕様も設計もオープンで、一般人がネットから基盤のパターンなどをダウンロードしてそっくり同じものを製作することも可能です。また、そのため、世界中にArduinoのクローンを作っている企業やグループがあり、それら自由なクローンの種類を数え上げることはもはや不可能と言う状況にあります。

○ 開発環境が無料で配布されていること。

 開発環境は統合環境(IDE)になっており、これも無料です。様々なライブラリが日々提供され続けており、一般に入手可能なほとんどのハードウェアやIC、電子素子などを扱うためのライブラリがGitHubなどですぐに手に入ります。

○ アナログ入出力、デジタル入出力が簡単に可能であること。

 「Arduino UNO」の場合、基板上にはデジタルI/Oが14本、アナログINが6本、アナログOUTが6本あります。これにさまざまな電子部品をつないで制御することができます。

○ C++で簡単にプログラミングできること。

 従来の「マイコン」はアセンブラ一辺倒でしたが、ArduinoはC++でプログラミングでき、しかも、ややこしいハードウェア・アクセスはC++のクラスの中にすべてカプセル化され、手軽に扱うことが可能になっています。ユーザはオブジェクトを生成し、入出力ピンを開いて読み、書くだけでさまざまなことができます。

 こうした特徴があるため、Arduinoを使用すると、一般人がデジタル・プロダクトを簡単に製作することができます。

 かく言う私も次のようなことを試しました。

「スマート・ファン」

 安物の扇風機にArduinoとEtehrnetインターフェース、温度センサをとりつけ、Webサーバをこの扇風機に実装してブラウザから制御できるようにし、温度によって風量を変え、1/fゆらぎ送風ができるなど、ものすごく無駄にリッチ化した扇風機です。

 1980円の安物扇風機をめっちゃ高機能化(笑)して、結構遊べました。

ウェブ扇風機

「メールサーバ監視ランプ」

 メール来着状況を監視し、ランプの色で教えてくれるもの。昔はISDN用のルータにこうした機能があり、パソコンのスイッチを入れていなくてもメールチェックのタイミングを教えてくれて便利だったのですが、今はこういうものがなくなってしまったので、意を決して自作したわけです。実は、今はスマホでこれは出来てしまうのですが、LEDの輝度のパルス幅変調などを試して遊ぶのに格好の題材でしたので、あえて試してみました。

メールサーバお知らせランプ

「多機能リモコン」

 赤外線リモコンのある電化製品を、Webで制御するようにしたものです。パソコンからでも、スマホからでも操作できます。赤外線LEDは秋葉原などで100円ほどで手に入りますので、これを試す人は非常に多いようです。

いよいよ多機能リモコン

「モーターで動くおもちゃの類をデジタル・パワードにする」

 おもちゃにArduinoを積み込むと、男の子などは大変喜びます。ここでは、モーターで動く自動車に超音波センサをとりつけ、自律制御させるとともに、その自動車にデジカメを乗せて動画を撮影しています。

虫瞰(ちゅうかん)カメラ

 私には男の子供はありませんが、私自身が男の子じみた中年(笑)ですので、みずからこういうことを試して遊びました。

 このように、Arduinoを使うと、手軽にさまざまな機器を制御したり、デジタルパワーを盛り込んだものを作ることが可能です。

 伝統的にArduinoにはAtmel社のマイコン「AVR」シリーズが使われていましたが、最新の製品「Arduino 101」にはIntelのCurieが採用され、Bluetoothや6軸の加速度ジャイロセンサーが搭載されるなど、大変高機能化しています。

 さて、目が離せないArduinoですが、昨年ごろから、長年Arduinoを牽引してきた5人の人たちが仲違いし、分裂騒動を起こしてまだ決着がつかず、もめているようです。Arduinoコミュニティは既に大きなものになっているので、この騒動は残念なことであり、かつ、目が離せないところです。

3 Raspberry Piについて

 「Raspberry Pi」はイギリス人のイブン・アプトン氏を中心に、Raspberry Pi財団というところが開発しているワンボード・コンピュータです。SONYなども深くかかわっていると聞き及びます。

 平成24年(2012)に最初のモデルが発売され、バージョンアップ等で数種類の製品があります。現在店頭で入手可能な製品の代表的なものに「Raspberry Pi 2 Model B+」があり、これは本日(平成28年2月7日)現在で税込み5,000円です。

 次のような特徴があります。

○ れっきとした「PC」であること。

 前述のArduinoは「マイコンボード」であり、OS等は載っておりません。しかし、Raspberry PiはSoCを利用するれっきとした「パソコン」で、OSを載せて作動します。主としてRaspberry Pi用に最適化されたLinux(「Raspbian」というディストリビューション)が作動するほか、マイクロソフトからは「Windows 10 IoT core」というWindows製品が、なんと無料でコントリビュートされています。余談、最近のマイクロソフト社の変革ぶり、オープンソースやフリーへのコミットぶりには驚くばかりです。それだけ、IoTにからむ製品に注目しているということでしょう。

 また、HDMI端子やUSB、Ethernetの端子を基板上に標準で備えているので、キーボードやマウス、ディスプレイをつないでPCとして利用することができます。

○ あらゆる開発環境が利用可能なこと。

 「Linuxマシン」なので、Linuxで利用できる開発ツール類は全て利用できると言って過言ではありません。Raspberry Piになじみの良いのはPythonで、入門本などにはPythonの作例が多く載っております。他にRaspberry Pi向けに最適化されたビジュアル言語の「Scratch」などもあります。しかし、別にこれらにこだわる必要はなく、GCCが走りますから、C/C++も使えますし、他にシェル、PerlやPHP、Ruby、Javaも扱えます。極端な話、g77をインストールして「FORTRAN」でハードウェア制御を行うことも可能でしょう(聞いたことはありませんが……)。私などは、RubyやPythonに暗いので、CやPHPでRaspberry Piのプログラムを書きました。

 エディタやIDEも、自分が使い慣れた好きなものが使えます。私はviが好きなので、Raspberry Pi上でももっぱらviを使っています。

○ 簡単にデジタル入出力が可能なこと。

 「GPIO」と呼ばれるデジタル入出力端子を豊富に備えていますが、これらは、ユーザからはUNIXで言う所の「ファイルシステム上にあるスペシャル・ファイル」に見えます。ですので、このファイルをオープンし、読み、あるいは書くだけで外部に入出力ができ、ハードウェアの制御が可能です。

○ あらゆるミドルウェア等が利用可能なこと。

 Linuxであるがゆえ、Linuxで使えるミドルウェアなどはほとんどのものが利用可能です。例えば、MySQLやPostgreSQLなどのRDBも扱えます。また、ApacheなどのWebサーバ、sendmail、DovecotなどのPOP/IMAPサーバなども走ります。

 こうした特徴があるため、既存のオープンソース・ソフトウェアを用いて、相当複雑なことも可能です。

 Arduinoと違って、Raspberry Piは単体ではアナログ入力ができません。そこで、私はRaspberry PiにADC(アナログ・デジタル変換)のICを接続し、これにサーミスタを取り付け、Apache+PHP+C言語を使用して「ウェブ温度計の製作」などを試してみました。

Raspberry Piで温度を測ろう

 また、PHPでハードウェア制御もできます。私はこんなふうに、PHPを使用して、Webインターフェイスにより家電製品のスイッチをオン・オフすることなどを試しました。

そうか、PHPでもモノにつながるな

 Arduinoに比べてRaspberry Piの歴史は浅いのですが、その出荷台数などから見ても新進気鋭の勢いを持っており、躍進中であると言えます。

 もともと5,000円ほどの値段で、高価ではないRaspberry Piですが、昨年(平成27年(2015))11月に流れたニュースでは、なんと650円(5ドル)という驚くべき価格の製品「Raspberry Pi Zero」もラインナップに投入されました。

Raspberry Pi Zero

 この値段と大きさでLinuxが走るのですから、驚きです。さすがにEthernetはついていませんが、USBの無線LANドングルを接続すればネットにつながります。

 「Raspberry Pi Zero」は、この値段と大きさのゆえに数量を稼ぐことができますから、IoTにからむ何らかのブレイク・スルーをもたらす可能性も相当にあると言えるでしょう。

4 むすび

 私などが若い頃には、ワンボード・コンピュータというとNECのTK-80にとどめを打ったものです。一定の年齢層の人には大変懐かしいものの一つです。

 他方、ここまで触れましたように、現在のワンボード・コンピュータは長足の進歩を遂げており、ますます興味の尽きないものに変貌しております。

 今回紹介したものは一般向けのものなので、エンタープライズでの応用については、別途考察と検討、研究が必要であると思われますが、既に一般向けには広く普及していることから、早晩業務用途にも応用が広がることが想像されます。

私のデスクトップと私の自己認識

投稿日:

 私は、私を知る人、友人知己、同僚、同期生、同級生などの間で、「パソコンマニアで、パソコンに詳しい奴」ということに、どうやらなっている。

 それだから、私の友人は、パソコンが壊れたり、ソフトの使い方が分からなかったり、時あって新しいパソコンを買う段になったりすると、よく「どうしたらいい?」「どんなの買ったらいいかな?」と私に尋ねる。職場などでも、「エクセルでこういうことがしたいのだけど、どういうふうにしたらいい?」と上司や同僚に聞かれることが多い。

 ところが、実のところ、私はパソコンにはあまり詳しくないのだ。隠しているわけではないのだが、大声で「私はパソコンに強くありません」と宣伝するようなことでもないので、黙っている。エクセルやパワーポイントのことなど、そもそも私物では持ってすらいないので、聞かれても何もわからない。

 しかし、せっかく人様が私を買い、愛顧し、あてにしてくれているのだから、それに応えることは正しいことだと思い、調べるなり、知っている人に聞くなりして、できるだけ相手の質問に答えるようにしている。

 そんな私なので、自宅のパソコンはできるだけ性能の高いものを使ってはいるものの、凝った拡張ボードや珍しい周辺機器など取り付けてはおらず、質実剛健である。

 デスクトップなんか、下のような状況である。

私のデスクトップ

 ご覧のとおり、「明窓浄机(めいそうじょうき)」を地でいく。何もない。ソフトもあまり入っていない。ワープロソフトなどは、15年前の「ロータス・スーパーオフィス2000」をいまだに使っている。セキュリティ上良くないから替えろという向きもあるかもしれないが、閉じた使い方しかしていないので、まず問題はない。これは自宅のデスクトップだが、職場のパソコンもこんな具合にしている。変なアイコンがいっぱいあると、混乱してわけがわからなくなり仕事でミスをしてしまうので、転勤先のパソコンのデスクトップにアイコンがいっぱいあると、まず全部消してしまう。

 プログラムを書くときは、「viエディタ」ぐらいしか使っていない。ホームページやWebコンテンツを書くのには「メモ帳」を使っている。どんなソフトがあるのかも、実はよく知らない。なので、その都度詳しい人に聞いている。本当はマイクロソフトの「Visual Studio」などを使いたいのがやまやまなのだが、高いし、お金もないので、買えない。仕方がないからLinux上でgccなどを使う。比較的大きなプログラムを書いても、これで不足はない。

 Linuxマシンも使っているが、性能が低いものを使っているので、Xを動かすのが面倒くさく、入れていない。画面なんか、正真正銘これっきりである。

IMG_3672

 我ながら、なんでこうなってしまったのかと思わなくもないが、裕福ではないのだから、しょうがない。

 「アンタ技術者ぶってるけど一体なんなんですか。そんなんじゃタダの人じゃないですか」と言われると返答に窮するのだが、実際そのとおりなので、お恥ずかしい限りである。私は普通の人よりかはデジタルには詳しいかもしれないが、しかし、新製品のことなどほとんど知らない。デジタルの新製品は好きだが、金がなくてどうせ買えないことが悔しく、欲しくて悲しくなってしまうので、広告なども出来るだけ見ないようにしている。

 私の職場ではどうも、「パソコンに詳しい人と言うのは同時にアニメや美少女やアイドル、漫画などが好きなオタクで、目的と手段を取り違えがちな偏執狂的な人物」というふうに定義づけている人が多い。このため、私について、「佐藤さんという人はパソコンにめっぽう詳しいらしいよ」という評判が立ったりすると、転勤先などでまだ一言も喋ったことがない初対面の相手なのにもかかわらず、アニメやアイドル、美少女や漫画などの話を吹っ掛けられたりして、わけがわからず、困ってしまうことがある。転勤先の上司から、まだ一言も喋ったことがないのに「いいか、佐藤、物事は目的が大事なんだぞ。マニアックばかりではいかん」などと一くさり喰らわされたりする。言っては何だが、私は可能な限り本来の目的を大切にし、常に目的に立ち返って物事に処するようにしており、偏執のために迷路に入り込むということはこれまでに(ほとん)どなかったと自負しているのだが、上司にはそう見えないらしい。

 どうせ、次の転勤先でも、喋る前からオタク扱いされると思うのだが、もがいてもしょうがないので、言い訳をせず、適当に放っておくことにする。自然に生きたい。