Jetpack「パブリサイズ共有」改行が気に入らずソースを手当て

投稿日:

 このブログではTwitterやFacebookに記事を共有するため、高機能プラグイン「Jetpack」の機能の一つ、「パブリサイズ共有」を使用している。

 数日前にそのJetpackのアップデートがあったのだが、それから、TwitterとFacebookへのポストの文章の改行がすべて消されてしまうようになった。

 私は最近、俳句のポストをすることが多いが、3句ぐらい詠んだ俳句が全部一行でポストされてしまった。左の如しである。

 これは嫌だ。

 WordPressは所詮PHPで書かれたものなので、嫌なら “Jetpack「パブリサイズ共有」改行が気に入らずソースを手当て” の続きを読む

libpq反省事項備忘

投稿日:

 自作の株式売買システムの改修で、反省事項があった。

 このシステムは各種言語の混成で書いてある。株価データをネットからタダでいただいてくる「スクレイピング部」はPerlで、その株価データを使って様々な指標を片っ端から売買試行する「シミュレーション部」はCで、売買指示を閲覧する「ユーザインタフェイス部」はPHPで、それぞれ書いた。株価データを格納するDBにはPostgreSQLを使用している。

 Cで書いた「シミュレーション部」をPostgreSQLにアクセスさせるのには、「libpq」を使っている。

 先日、取り扱い銘柄を “libpq反省事項備忘” の続きを読む

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

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

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

引用する日付をショートコードで定型化

投稿日:

 最近、(ジジィ)化してきて、時事などにケチをつけてはそれをブログに書いて楽しむようになってしまった。

 子供の頃、私の父はアニメや「8時だョ!全員集合」などの子供が見たがる番組など絶対つけてくれず、子供にとってはつまんないニュース番組などばかりつけていたもので、しかもそれを見て楽しんでいるというならまだしも、「なにがフェミニズムだ!!何が日教組だ!!」などと、どうでもいい他人のことに腹を立てはじめ、しまいには湯気を立てて激昂し、私にそこらの手近のものなど投げつけて八つ当たりするという、誠にもって迷惑な父であった。

 さすがに私はそこまではいかず、父のようにニュースを見て激昂するなどという人間にはならなかったが、どうでもいいニュースに勝手なコメントを加えてブツブツ言っているというところは、多少似ていると言えば言えるかもしれない。

 さて、時事にケチをつけるときは、だいたいニュースなどへのリンクを張っている。例えば、昨日の羽生結弦先生のニュースなら、

……というような書式で引用している。

 前から思っていたのだが、この引用するときの日付が気に入らない。上の例だと「2018年2月17日21時57分」という部分だ。これがマスコミ各社それぞれに、「年」「月」「日」が入ったり、「/」区切りだったり、「-」区切りだったり、時間が入ったり入らなかったりして、不統一である。

 それより何より最も気に入らないのが、年号が全部「西暦」であることだ。和暦を付記すべきだ。……いいや、違うッ!。和暦に西暦を付記すべきである。

 こんなこと、気にしなければいいだけの話なのだが、これをまた、「このブログは日付の書式が不統一だ」などと、私のブログを見てケチをつけてくる人がいるのである。

 これは手作業でひとつづつ書き直すようなことではない。こんな機械的なことは、機械がやるべきだ。

 何か、日付を正規化するプログラムでも書いて、そのAPIでも公開してやろうかい、などとも思ったが、「和暦に西暦付記でないと嫌だ」などという変な人は世の中私ぐらいだろうと思うし、何もAPIを世の中に提供まですることもあるまい。ここはひとつ、WordPressの機能の、「ショートコード」というのを活用して、記事を書くときにチョコッとおまじないを書き足せば、いろいろな日付が私の認める日付書式(俺様用日付)に書き換わって表示される、というふうにすることにした。

 WordPressはPHPで作られている。そのため、ショートコードを作るには、PHPでプログラムを書けばそれでよい。PHPは簡単で、誰でもがWordPressに機能追加することができる。

 具体的には、WordPressのインストールディレクトリの下の「wp-content/themes」の下にある、自分が使っているテーマの中の「functions.php」の末尾にPHPでプログラムを書いてやるのだ。「子テーマ」を作成して使用している場合は、その子テーマの下のfunctions.phpにプログラムを書き加える。

 私は子テーマを使用しているので、その下にあるfunctions.phpの末尾に、次のように書き足した。

/********************************************************************************
 * regdate();
 *   平成30年2月18日(日)11時00分~
 *   佐藤俊夫
 *   ネットのマスコミニュースの日付などをコピペする際、書式がばらばらであるので、
 *   これを私こと佐藤俊夫が認める日付書式に変換するショートコード 
 ********************************************************************************/
function regdate( $arg, $content = null ) {
	$content = mb_convert_kana($content, "n");	//  全角数字はすべて半角数字に
	$content = preg_replace("/$/", "/", $content);	//  処理の単純化のため、末尾に例外なく「/」を付加(日付のみで数字で終了する文字列に対応)
	$content = preg_replace("/^[^0-9][^0-9]*/", "", $content);	//  行頭の数字以外の文字はすべて削除
	$content = preg_replace("/[^0-9][^0-9]*/", "/", $content);	//  数字以外の文字を全て「/」に置換
	$content = preg_replace("/[^0-9]([0-9])[^0-9]/", "/0$1/", $content);	//  数字1文字のみの場合は「0」をパディング
	$content = preg_replace("/^([0-9])[^0-9]/", "0$1/", $content);
	$content = preg_replace("/^([0-9]{2}[^0-9])/", date("Y")."/$1", $content);	//  冒頭が2桁の数字のものは、今の西暦を強制付加する。
	$content = preg_replace("!^([0-9]{4}/[0-9]{2}/[0-9]{2})/$!", "$1/00/00/", $content);	//  年号と日付しかないと見られるものは、00時00分とし、末尾に付加する。
	$content = preg_replace("!/$!", "", $content);	//  末尾の「/」をサニタイズ
	$content = preg_replace("!/([0-9][0-9])/([0-9][0-9])$!", " $1:$2", $content);	//  末尾の数字4つは時間とみなして「 12:34」の形に。
	$unixtime_content = strtotime($content);	//  「strtotime」が高性能なので、一旦丸投げしてUNIXタイムスタンプにする。
	//  元号と和暦年を取得して付加
	$Y = date("Y", $unixtime_content);
	$Ymd = date("Ymd", $unixtime_content);
	if ($Ymd >="18680125" && $Ymd <= "19120729") {
		$gg = "明治";
		$yy = $Y - 1867;
	} elseif ($Ymd >= "19120730" && $Ymd <= "19261224") {
		$gg = "大正";
		$yy = $Y - 1911;
	} elseif ($Ymd >= "19261225" && $Ymd <= "19890107") {
		$gg = "昭和";
		$yy = $Y - 1925;
	} elseif ($Ymd >= "19890108") {
		$gg = "平成";
		$yy = $Y - 1988;
	} else {
		//  明治以前の場合は一律「皇紀」を用いることとする。
		$gg = "皇紀";
		$yy = $Y + 660;
	}
	if($yy == 1){
		$yy = "元";
	}
	$content = $gg.$yy."年".date("(Y)m月d日(", $unixtime_content);
	//  日本語曜日を取得して付加
	$sevendays = array("日","月","火","水","木","金","土");
	$content .= $sevendays[date("w", $unixtime_content)].")".date("H時i分", $unixtime_content);
	//
	return $content;
}
add_shortcode('date', 'regdate');

 「functions.php」に上のように書き加えたら、よく確認して保存する。

 さて、このショートコードの利用である。

 例えば最初のほうで例に述べた朝日新聞の記事の場合、そのまま日付をコピペすると次の赤字で記した部分のようになってしまい気に入らないことは、先述の通りである。

ショートコードを使わない場合の記事ソース
<ul><li> <a href=”https://www.asahi.com/articles/ASL2K52X2L2KULZU004.html” rel=”noopener” target=”_blank”>羽生結弦、自分に勝った孤高の金「僕はアニメの熱血系」</a>(朝日、2018年2月17日21時57分)</li></ul>

 しかし、今回作ったショートコードを使えば、簡単に書式を一定化できる。次の通りだ。

ショートコードを使った場合の記事ソース
<ul><li> <a href=”https://www.asahi.com/articles/ASL2K52X2L2KULZU004.html” rel=”noopener” target=”_blank”>羽生結弦、自分に勝った孤高の金「僕はアニメの熱血系」</a>(朝日、[date]2018年2月17日21時57分[/date])</li></ul>

 WordPressは、このように簡単でわずかなプログラムを書き加えるだけで自分の好みに改変することができる。非常に便利であり、ユーザ・フレンドリであると言える。

 世の中には、「日付に和暦や元号を使う合理性なんてまったく認められない。こんなものはやめるべきだ」などと言い立てている変な人がいるようだが、そういう人は私のように、自分の環境だけ変えればよい。私と同じように、自分の環境だけ、逆に西暦でもイスラム歴でも、勝手に好きなように使えるようにすればよい。そんなもの、上記で実践して見せたように大した手間ではない。

屈折

投稿日:

 ハードディスクの隅っこの方を漁っていたら、「fortune.php3」というファイルが出てきた。かれこれ20年弱くらい前に書いたものだ。

 その内容は摘記すれば次のようなものであった。

fortune.php3
<?
$hitokoto[] = "事態は好転しない。";
$hitokoto[] = "どのやり方もダメだ。";
$hitokoto[] = "人生下り坂。";
$hitokoto[] = "おしまいなのか・・・。";
$hitokoto[] = "暗黒と涙。";
$hitokoto[] = "夜と冬。";
$hitokoto[] = "青函トンネルから出られない。";
$hitokoto[] = "・・・破綻。";
$hitokoto[] = "生涯に一度の光もなく";
$hitokoto[] = "即身仏が鳴らす鐘の音が止んだ。";
$hitokoto[] = "合掌。";
$hitokoto[] = "老いてゆく。";
$hitokoto[] = "永久の苦痛";
$hitokoto[] = "君のすべてが疎ましい。";
$hitokoto[] = "助けを求める声が次第に弱々しくなっていった。";
?>
<table>
<tr><td>ラッキーカラー:</td><td bgcolor="#ff7777">システムエラー あなたのラッキーカラーが見つかりません。</td></tr>
<tr><td>ラッキーナンバー:</td><td bgcolor="#ff7777">システムエラー あなたのラッキーナンバーが見つかりません。</td></tr>
<tr><td>ラッキー方位:</td><td bgcolor="#ff7777">システムエラー あなたのラッキー方位が見つかりません。</td></tr>
</table>
<p>
<center>今日の一言:<h2>「<?echo $hitokoto[rand(0,count($hitokoto) - 1)];?>」</h2></center>

 当時、何か、相当私は屈折していたのだな、ということがうかがわれるわけである。

改元・差別・多様性・測地系・カレンダー……

投稿日:

 以前、GIS(空間情報システム)について深く考えていた時、「地球上のある一点」とか、あるいは「宇宙のある一点」を何らかの座標で表した時、現実の空間に存在するその地点はただ一つであるにもかかわらず、使用する座標系によって表現や数値が異なり、あたかも違う地点が複数存在するかのようになってしまうのは、何としてもどうにかしなければならない、と思った。

 その頃、ちょうど日本では「測地成果2000」という標準が行き渡り、明治時代からの伝統である「ベッセル楕円体」を使用した所謂(いわゆる)「日本測地系」の使用をやめ、国際標準の「GRS-80」にほぼ完全に切り替え終わっていたが、切り替わる前後しばらくの期間、旧ベッセル楕円体測地系と、新GRS-80測地系が混在し、地球の同じある一点を示すのに、複数の数値が混在していた。

 そこへ、GPSの普及、またこれを活用したカーナビの普及で、米国主導の座標系である「WGS-84」も混在して使用されるようになった。そのため、当時の情報システム内部では、旧日本測地系、GRS-80測地系、WGS-84測地系の三つの測地系を矛盾なく混在させて作動させる必要があった。

 プログラミング技術上では、例えばC++やJavaなどのオブジェクト指向言語なら、こうした事態を解決するため「座標」のクラスを作り、クラス内部ではいずれか適切な座標系で数値を保持させる。その数値は「プライベート」にして隠蔽し、クラス外からの直接操作はこれを禁ずる。「アクセッサ」のみを使用して座標を操作するのだ。そして、いずれの測地系を使用して値を入力しても、内部では必ず空間の一点のみを指す値に変換して保持し、また逆に、値を取り出す際には、いずれの測地系での値を要求しても正しく取り出し可能とする。

 こうしたふるまいをするクラスを作ることで、プログラム内部では混乱も矛盾もなく座標を扱えるようになる。無論、アメリカの旧測地系であるクラーク楕円体をはじめとして、世界中の測地系を詰め込んでクラスをデラックス化するのもよい。

 さて、こうしたことを思い出していて、日付についても似たようなことを考える。

 世界には多様な文化があり、そのため、「ある日ある時間」を表すにも、文化や地域によってさまざまな表し方が存在する。思いつくまま挙げるだけでも、例えば教祖イエス・キリストの生誕を基準とする西暦、ヨーロッパのグレゴリオ暦やユリウス暦、太陰暦を基本とするイスラム暦、同じ太陰暦でも中華文化圏で用いられてきた干支(かんし)を使用する日付表現、日本の元号や朝鮮、就中(なかんづく)北朝鮮の現在の革命年号、日の出・日の入りを基準とした不定時法など、様々だ。

 だが、どんな日付表現をしようが、科学的には「ある日ある時間」は、ただ一つである。

 一方、コンピュータシステムは人間を支えるものであって、人間がコンピュータに奉仕しているようでは本末転倒だ。コンピュータはあらゆる日付の表現ができ、かつ、あらゆる日付の表現を受け取ることができることこそ望ましい。世界中の多様な文化を矛盾なく受け()れ扱うことができてこそ、人間に奉仕するためのあるべきコンピュータシステムの姿であると言える。

 しかるに、現在のコンピュータシステムはその点が貧弱である。「建久二年辛亥(うるう)十二月(ついたち)」と入力しても、「1192年1月17日」と入力しても、はたまた「587年のズー・アルヒッジャの13日」と入力しても全てこれを許し、かつ、それが同じ日付を指しており、また逆に、どんな日付表現の出力を要求されようと、考え得る限りの多様さで人間にこれを返すようでなければならない。

 今このようなことを考える理由は、ただ一点、畏きあたりにおかせられて、近々まさに譲位あそばされんとし、恐れながら改元の沙汰もこれあることと考えられるからだ。

 改元であろうと何であろうと、人間に奉仕するべきコンピュータシステムは、これを平然と受け()れるものでなければならない。そこに多大のシステム保守作業があるなどもってのほかである。

 だが、現代のコンピュータシステムはそこが貧弱であるため、改元で右往左往しなければならないのだ。

 それどころか、コンピュータシステム運用上の煩雑さを理由として、元号制に反対したり、イスラム文化やアジアの文化を否定し、「西暦で統一すべき」などと、多様な文化を蔑んでそれでよしとする差別主義者がIT技術者にすら少なからず見受けられるのは、あまりにも残念である。

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」にするだけである。

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

プログラミングを何読んで覚えたんだったか

投稿日:

 美しいお姉さんが電車の中で「たのしいプログラミング Pythonではじめよう」なんつー本を読み耽っているのを見た。そのお姉さんはどうもプログラマなどには見えない。カジュアルな感じのお姉さんが、カジュアル~、に、そういう本を読んでいる。ああ、時代だなあ、と思う。

 そういえば、私自身はプログラミングの入門本というものを読んだことがないことに気づいた。BASICで8ビットプログラミングをしていた頃は入門本などなくても、マシンのリファレンス・マニュアルで十分だったし、機械語やアセンブラなどは命令表を見てプログラムを作ったものだし、それ以降も、例えばCだったらカーニハンとリッチーの「プログラミング言語C」、C++だったらストラストラップの「プログラミング言語C++」、Javaだったらゴスリングの「プログラミング言語Java」など、それらの言語の開発者が書いたものを参考にして覚えてきた。

 今はほとんどネット上のリファレンスで間に合ってしまう。だからPHPや、あるいはCSSとかHTMLの参考書など1冊も持っていない。

 そうなってしまった理由は、多分古い時代からプログラミングに親しんできたからだと思う。世の中の進歩に合わせて、自分も少しづつ進歩してきたので、入門本を必要としなかったのだ。

 だから、私のやり方はこれから入門する若い人には全く参考にならないということになる。

 ということは、さしずめ私など、「参考にならない、何の役にも立たぬ先輩」ということになるわけだ。後輩の指導には向かぬ。ハァ。

時事無責任寸感幾つか

投稿日:
共産党藤野政策委員長党職辞任の一件

 共産党の代議士、標記藤野何某(なにがし)。「人を殺すための予算ではなくて、人を支えて、育てる予算を優先していく」とした発言を取り上げられ、ついに党職を辞任させられた。

 左翼主義者の肩など持ちたくないが、しかし、これは少し気の毒ではなかろうか。揚げ足取りというものだ。

 私は、「防衛費は、究極、人を殺す予算だ。で?それで何が悪いの?」と思っている。人殺しと言われた程度のことで傷つくような自衛官は修行が足りない。防衛大や新隊員教育隊に入りなおして駆け足でもしてこい。

 こんなのは、ものの言い方、気分の話だ。「何を言う、人を守る予算だ」というのは微細な話で、何によって人を守るのかと言うと、敵を殺すことで人を守るのだ。

 以前、民主党(当時)の菅氏が「暴力装置」と言ってブッ叩かれたが、これも左翼が良く使う術語で、そんな目くじら立てるようなことではなかった。菅氏には天与のインテリジェンスが災いしたと言う所であった。

 むしろ、こんなことで大慌てし、藤野何某ごときを叱りつけて責任を取らせる共産党の執行部には問題がないか?これはもう、すぐ眼先に控えた参議院選挙の一票に汲々としている哀れな姿と言うより他にない。

 確かに、防衛省職員は自衛官だけでも22万を超える。これらには家族や親戚もおり、ひとり当たり5人ほども勘定すれば100万人近い一大票田である。これらの気分を損なって票を失うことが手痛いことだと言うのはわからぬでもない。

 だがしかし、これしきで(せつ)を曲げるとは。たとえ左翼と言えども、代議士たるもの、正々堂々と大声で、己の信じるところを曲げず、主張し続けてはどうか。それで選挙に落ちるなら、潔くそれを受けとめて頭からダイビングで落ちるべきなのだ。敵ながらそれでこそ男らしい態度だ。むしろ、共産主義者がこんな弱腰では、自衛隊は「無言の数の力で自由な言論を圧殺した」と言われかねず、それこそ自衛官にとって卑怯の誹りとなって逆に迷惑だろう。

 与党もこんなことで大騒ぎしてると、「揚げ足取りの応酬」を呼んじまう。ウカウカしてると誰かの失言を針小棒大に取り上げられちまうぜ。気をつけなよ。

バイデン米副大統領「一夜にして……」発言

 日米同盟の妙味。「ツー」と言えば「カー」というような絶妙な掛け合いですなあ。日本から中国にこんなこと言ったり、あるいは日本から米国に「そういうふうに中国に伝えてくれ」とは、それこそ口が裂けても言えない。平和主義が国是だ。そんな恫喝はわが政府にできるはずもないのである。

 ところが、バイデン氏にはまるでテレパシーで伝わったかのようである。よくぞ言ひたり、ってなものだ。大統領その人に言わせるわけにもいかないし、まさに「言うのに適任」の人である。

 なんというか、拈華微笑(ねんげみしょう)、というのはこういう感じか?ちょっと使うところが違うか。マアエエワ(笑)

 あと、念のために書いとくと、これ、昔からよく米国が使ってた言い方なんですよね。特に核抑止ドクトリン全盛時代には。

「ヘル朝鮮」てw

 韓国も熱い国で、しかも文明国なので、若者言葉が面白いようだ。「就職やくざ」とか、笑ってしまった。

 韓国頑張れ。……以前と違って、私は実はあまり韓国が嫌いではなくなった。同源の友邦であるという気がしている。安全保障上、常備70万、動員で150万になんなんとする兵力は無視できない。……まあ、腹の立つ厄介親戚だが。

プリンタ電源入れ忘れが原因で一億円の二重支払処理

 この件、なかなか味わい深い。

 送信確認が印字出力の有無だけでなされていたのか?まさかそんなこともあるまい。多分、「それ使うようになっていた」のだろうけれども。

 ささやかながら不肖・私こと佐藤、経済産業大臣認定「ITストラテジスト」以外に、「テクニカルエンジニア(システム管理)」の資格を持っている。(この資格、今は名称が変わり、「ITサービスマネージャ」と言う。)

 その立場からの感想だが、この一件は単純なようで、その実、システム設計から運用管理に至るさまざまなところに考察要素がある。1万円の処理ではなく、1億円の処理ともなると無視はできまい。取り急ぎ短期の対策と長期の対策の二本立ては必要だろう。この役所ではとりあえず複数職員が立ち会うことにしたようだが、これは短期対策だ。

 システムの運用管理には、この件に関係しそうなところを思いつくまま挙げれば、他にも「構成管理」「資産管理」「性能管理」「稼働管理」「変更管理」「問題管理」「障害管理」「マニュアル管理」「施設・設備管理」など、さまざまな分野がある。この一つ一つがまた、いろいろな手段からなる大分野なのである。石巻市のこの件は、こうした分野分野のどれにも、打つべき手が見出せるだろう。

Facebookは老害爺ぃ婆ぁ(失礼)の巣窟ってかw

 はははっ、笑っちまった。そりゃそうだよなあ。親とか上司とか先生にず~っと見られてるような感じになるもの。

 ……と自分のFB友達をあらためて見てみると、私のFB友達は爺ぃと美熟女のオンパレードで、一番若い人でも30代後半だわ。大人やねぇ~。そんなに友達の人数いないんですけどね。

 職場関係はそんなにフレンドにしてないんだけど、キッカリ線引きしてるわけではなく、例外も何人かいる。

プログラミングを知らない人がプログラミング教育をする危険性

 いやぁ~、仰せ御尤(ごもっと)もだが、こりゃあ、チト意地悪で、可哀想だろうぜ。

 思いもかけない有名技術者の社長にいじめられる、そのRuby On Railsのお兄ちゃんたちが哀れになって、逆に痛々しくて同情で涙が出てきた(笑)。

アルビン・トフラー死去の報

 祈冥福。

 10代の頃、「第三の波」と、もう一つ、ガルブレイスの「不確実性の時代」読んどけ、なんて上司や先生が言ったもので、あんな浩瀚(こうかん)な大著、そうそう多くの人が読破理解したとも思えず、実のところ私も読んでない。


 「第三の波」が文庫で600ページ近く、「不確実性の時代」が同じく500ページ超。なかなか、そんな、ねぇ。

ダッカ

 恐ろしい。引き続き要注目である。

最近の一般向けワンボード・コンピュータ、なかんづく「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にとどめを打ったものです。一定の年齢層の人には大変懐かしいものの一つです。

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

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