投資成績計算プログラムを10年ぶりにアップデート

image

先月の投資成績です。相場的には上がったり下がったりで横ばいです。kackyファンドも6ファンド中2位をがっちりキープしております☆

先月の終わり頃から投資成績を自動で計算するプログラムが動かなくなり、このままではこのブログを更新するネタがなくなってしまうという危機感のもと、プログラムの全面改修に踏み切りました。このプログラムを作ったのはこのブログを開始してほどない2008年に遡ります。なんと10年程前のはなしです!!技術力もお金も大してない中でえっちらほっちら書いていたのでそれはそれは人様に見せられないような糞コードでできあがっておりました。様々な小さな改修を経て今日まで稼働してきましたがついにお役御免となりました。ソースコードを見返すと哀愁すら漂う歴史の遺物でした。

その日の価格などはhttp通信でクロールしてくるのですが、こんな感じの実装でした。

print S "GET $filename HTTP/1.0\r\nAccept: \"/\"\r\nAccept-Language: ja\r\nReferer: http://$hostname$filename\r\nHost: $hostname\r\nConnection: Keep-Alive\r\n\r\n";

http手打ちですかいwww

というのも貧乏サーバーで運営している関係上、実装した当時はhttpモジュールなんて入っているはずもなく、仕方なく手打ちでhttpプロトコルを実装せざるを得ない状況でした。おかげさまで今ではhttp通信モジュールを使ってえいっとURIでアクセスすればよい時代になりました。こんなコードともおさらばです。昔は文字コード変換はjcode.plだったよなぁとか。そういう話をしだすとだめですね。あのころはあのころで試行錯誤をしながら動いたときの感動を味わいましたし、とても勉強になりました。

この恥ずかしいコードは青春とともに捨て去って、ちゃんとオブジェクト指向で設計した最新環境に対応した保守性の高いコードにしていきたいと思います。気が向いたらgitでバージョン管理してgithubにでもあげようかな。ええ、もちろん今もFTPデプロイですとも。

さようならtDiary、こんにちはWordPress

さようなら

どうも、皆様こんにちは。本ブログのスタイルがガラッと変わって驚かれた方も多いかと思います。創設から8年間tDiaryという日記システムで書いてきましたが、思い切ってWordpressに変えることにしました。

この変更を決断したのには以下の理由があります。

  1. WordPressをレンタルサーバーが標準サポートするようになり、簡単にインストールできるようになった。
  2. tDiaryのバージョンアップが大変だったり、更新頻度が遅かったりして、近頃の環境の変化(スマホからのアクセスが増加したなど)に対応できなくなった。
  3. 借りてるレンタルサーバのrubyのパフォーマンスが悪く(fcgi非対応)、ページビューの増大に耐えられないと感じた。

8年前はブログサービスはどっかの融通の効かないサービス(fc2とか、アメブロとか)を利用するか、自力で何かをインストールして(tDiaryとか)始めるしか、方法はなかったのですが、8年あまりでずいぶんと変わりました。ブログシステムのインストールも、Webブラウザの画面をチョイチョイとクリックしていくだけで出来てしまう簡単さです。VALUE-SERVERがサポートしているブログシステムにはWordpressとMovable TypeとXOOPSがありましたが、バージョンが新しいものがサポートされていたのと、一番メジャーでプラグインも豊富だなと思ったのでWordpressにしました。

ただ、これまでのtDiaryのブログ投稿をWordpressに移行するのは結構大変でしたね。

http://www.kenstar.org/~kenstar/computer/program/t2m.html

このへんのページのプログラムを使ってみましたが、いかんせん実装がてきとーだったりして自分のブログではほとんどうまくいきませんでした。また、perlで実装されているのも許せなかったので自分でrubyで実装して書き換えてしまいました。何度もトライ・アンド・エラーを繰り返しながら、ようやく何とか形になった次第です。私の実装も全然完璧ではないですけどね。githubにソースコードを公開してますんで、同じことを考えている人は参考にしてください。(WikiStyleとtDiaryStyleに対応しています)

https://github.com/kackyt/tdiarymtconverter

システムが変わっても中の人は全く変わりませんので、今後ともよろしくお願いいたします。

※下の表はtDiaryのレスポンス(上)とWordpressのレスポンス(下)です。tDiaryの表示には2秒以上かかる場合もあり、激重になっていることがわかります。

tDiarymini

Wordpressmini

Unity5.1とOculus Rift

Unity5.1ではOculus RiftがSDKなしで標準サポートされるということで、喜び勇んでやってみたのですが、

EditorのPlayボタンを押した瞬間にクラッシュしてしまいました。。

アプリをBuild and runしても同様に何も出ないままクラッシュしてしまいますorz

パッチ版の5.1.1p2を使っても改善されず。マシンの相性の問題ですかね。

ちなみに使っているのはMacbookPro 15inch(mid 2014)でWindows8.1 Proをbootcampで使ってます。

もうしばらくUnity 5.1は待ったほうがよさそうですね。

[麻雀] 麻雀AIリリースしました

ほそぼそと続けていたオープンソースプロジェクトのオープン麻雀プロジェクトですが、久々にリリースをしました。

https://sourceforge.jp/projects/openmahjong/releases/

 

今回は『まうじゃん』というWindowsゲームに対応した麻雀AIになります。

まうじゃんはこちらのサイトでダウンロードできます。

http://www.amy.hi-ho.ne.jp/ishihata/maujong/

 

テストはまうじゃんを使ってオートプレイでやってますけど、いくつかやってみた結果はこんなかんじです。

image

 

まあ、見ての通り弱くもなければ強くもない、至って平均的な雀士になりました。

ちゃんと鳴きますし、オリますし、リーチもしますし、チートイも役も狙います。国士だけはまだ実装してません。

 

自分で対戦もしてみましたけど、まあ、結構普通に麻雀してくれます。

印象としては、結構鳴く雀士だな-という感じです。あとテンパイは早いと思います。

今のところ順位計算とかは特に入れてないので4位のオーラスでも平気で南のみで和がったりするのでその辺はムカつきますw

対人対戦でもちょうど良い強さで楽しめるレベルではないかと思います。

自分の息子と対戦してるみたいでなかなか楽しい気分でした。

セリフは皆さんの大好きなアレですw

 

これまでも麻雀AIはいろいろと作ってきたのですが、リリース出来なかったのは

単純に弱かったからです(´・ω・`)

いくつか強いアルゴリズムができたら、多数決とかやらせてみると強くなるかとか試してみたいですけどね。

それは夢のまた夢ですけど。

 

 

麻雀AIに興味がある方はぜひダウンロードしてみてください。

ソースコードも思い切って公開しています。なかなか珍しいコンテンツだと思います。

現状使っているのは、MahjongAI_type1/MahjongAIType4.cppです。

(ただし、著作権は放棄していません)

そのうち気が向いたらアルゴリズムの解説とかもしようかなと考えています。

 

ご意見・ご感想も歓迎します。

ブログの引越、落ち着きました

awsからブログを引っ越しました。xreaに戻すのも悔しいので同じ系列のvalue-serverに変えましたw

xreaの有料版(xrea+)は年間2468円に対してvalue-serverのまるっとプラン(ドメインとのセットプラン)は年間1600円で使えるので、年間868円の経費削減につながります。まあ、みみっちい金額ですけど、貧乏ブログなもので^^費用が軽減されただけでなく、value-serverの方がちょっとだけxreaのサーバーに比べてスペックが向上しています。GMO系列はxrea、value-server、coreserver、ロリポップとか似たようなサービスが乱立しすぎて非常に選択しづらいですね。早くブランドを一本化できないもんでしょうか。まあもともと別の会社だったので難しいんでしょうけど。

コメントスパムですけど、二重三重の対策をとって今のところは落ち着いた状況です。最近はコメント欄を閉じてしまったブログも多いですね。寂しい限りです。私としてはダメブログながらなんとか来ていただいた方への窓口を開いていようと頑張っていきます。引っ越した後でも何百かのアクセスは来てますね。awsにいてた時は1時間に何万アクセスとかでサーバがパンクしてしまうひどい状況でした。コメントフィルタだけでなくて前段でのフィルタリングが大事なんだなと痛感しました。google検索も復活してくれたようで安心しました。今後ともよろしくお願いいたします。

ブログをawsから引き上げようかな…

どうも、こんにちは。ブログをawsに移して1ヶ月くらいがたちますが、早くもawsから撤退しようかなと思い始めた今日このごろです。

awsに移して早々に自分で作ったtDiaryプラグインが動かなくなったり、コメントスパムに見舞われてブログサービスそのものが不能になったりと踏んだり蹴ったりの状況でした。これは自分の能力のなさからくるので、決してawsが悪いわけじゃないんですけど。

今は、海外からのアクセスをまるごと遮断することでなんとかサービスを維持してますけど、この副作用でfacebookで共有できなくなったり、google先生の検索から当ブログが消滅してしまったりという残念な事態になっております。この事態を打開するためにはサーバの前段に賢いスパムフィルターとかを仕掛ければいいのかもしれませんが、もともと趣味程度でやっているブログでそんなことをやれるお金や暇がありません。それなら、まあブログは普通にレンタルサーバー使うのが最高だよねって結論になりそうです。今回の行動を教訓にWebサービスをやろうとか考えた時には世の中には悪いことを考える人がいっぱいいるのでなめてかからないように気をつけたいと思います。

もろもろのプラグインの導入できた

いろいろ悪戦苦闘しましたが、tDiaryの機能をほぼ移植することが出来ました。

 

まずtDiaryのバージョンアップによって文字コードがEUCからutf8に変わったために全部の文字コードをutf8に変更しなければならないところから始まり、

ソースコードを書き換えてpluginが動くようにしたり、xmlrpc.rbが動かなかったりといろいろありました。

 

極めつけはspam投稿の多発で日記データの取り込み直し。。私の設定ミスもありますが、spamアクセスが4000件を超えてほぼ全ての日記にアタックをかけてきたのは誤算でした。本当に挫けそうになりましたが、これでなんとかまたブログ運営を続けられそうです。

 

メールについてもaws上の構築にチャレンジしていますが、サーバー構成やデータベースの設計であったり、セキュリティの確保といったところが非常に難易度が高い割に特にメリットがない(自分で構築したという自己満足くらい)ので止めるかもしれませんヽ(´ー`)ノ

AWSへの移設

 

AWSへの移設が終わりました。まだ一部の機能が動いていないです。Windows Live Writerで動かした時にカテゴリを指定できていません。いろいろとデバッグしていますが、まだ終わりません。しばらくいろいろとテスト書き込み等で忙しくなりますが、今しばらくお待ち下さい。投資成績もまだ出せてませんね。

tDiaryのバージョンを4に上げた関係上いろいろな不具合が発生しています。。

Socket.IOを使ってUnityとモバイル端末を会話させる(失敗)

前々からUnityとスマホやタブレット端末を会話させたいなと考えていて、XHR使ってそれをサーバー側でUDPなんかに変換すればできなくはないというか以前はそうやってたんだけど、もう少し今どきな実装方法はないかなということでSocket.IOを使った通信にトライしてみました。

取ってきたものはここらへん↓

Unity から Node.js を起動時に裏で実行・通信して諸々の処理を肩代わりしてもらう方法考えてみた

http://tips.hecomi.com/entry/2014/04/15/011255

でも動かしてみたらブラウザ側はちゃんと動くけど、Unity側が全然つながらない。。

原因を探ってみたら、つい最近Socket.IOのバージョンが1.0に変わったらしく、プロトコルが0.x以前と互換性がなくて、0.x系にしか対応していないUnity側のクライアントが最新版のSocket.IOにつながらないというオチでしたorz

  • Unityで動くSocket.IO 1.0対応クライアントを書く(移植する)
  • Socket.IOを0.x系にダウングレードする

という2つの選択肢。後者は負けを認めたというかなんかいずれは1.0系に行くのを見過ごすのが悔しいので前者にトライしようかと思ったりするわけですが、そのうち誰かやるよね??自分がやる必要ある??みたいなめんどくさい根性が出てきてちょっと止まっています。盆休みまでは本業が忙しいので、これは盆休みの自由研究ネタですな^^;

逐次プログラミングから並行、並列プログラミングへ

ちょっとだけ、今のソフトウェア開発について思っていることを書きます。(興味ない方、専門的すぎてわかんない方はすみませんがそっと閉じてくださいm(_ _)m)

これからのソフトウェア開発はまちがいなく並行プログラミング、並列プログラミングが大事になってきます。…って業界によっては今さら何言ってんだこいつってことになりかねないですけど。でも、ぶっちゃけ私が属している組込みという業界はパソコンやスマホがすでにマルチコアへ進んでいるのに比べてまだシングルコアが大多数ですし、何よりソフトウェア開発をしている人たちが逐次プログラミングしか頭にない人たちばっかりです。しかし、いずれは組込み業界にもマルチコアの流れはやってきます(って5年前からいってますけど意外と遅いね)。このハードウェアの大きな変化とそれについていけない技術者とのギャップは克服しなければならない大きな課題となると思います。

私は大学生の時に「マルチプロセッサ向け組込みOS」っていうそれっぽい研究をしていたので、「マルチプロセッサのプログラミングって何なの?」みたいなことをよく聞かれます。私はそういう質問には(面倒くさいので)「いや、普通のマルチスレッドプログラミングですよ」と答えています。この回答は自分は間違っていないと思っています。本当に普通にマルチスレッドプログラミングを作っていただければ問題など起こらないはずです。要するに、うちらの業界ってちゃんと『マルチスレッド』が扱えていないのです。

実は組込み業界ではシングルコアの時代から『プリエンプティブなマルチスレッドプログラム』で動いてきました。組込みの世界はI/Oが頻繁に発生し、その度に動作を止めて待っていたらレスポンスが悪くってたまらないからです。μITRONというOSで実現されていて、日本が誇る組込み開発を謳歌していたのですけれど、そういった技術は次世代にうまく受け継がれなかったらしく、OSがLinuxへと変わっていったあたりから動作が重いわ、バグは垂れ流すわといった体たらくを見せています。どうしてこうなったヽ(´ー`)ノ

正直な話、マルチスレッドプログラミングは難しいです。マルチスレッドの難しさをざっくり2つに集約してみます。

  • 不具合がスレッドの実行順序に依存するために再現性が低い
  • スレッドをたくさん作れば性能が向上するとは限らない

前者は本当に現場を悩ます大問題で、ある日客先で発生した不具合を再現しようとしてもこちらでは何回やっても出ない、なんてことがいっぱいあります。また、試験に関しても重大な課題を突きつけます。形式的に完全にマルチスレッドで動作を保証するためにはスレッドが実行するアトミックな命令の全ての実行順序の重ねあわせ(インタリーブ)に対して仕様通りに動くことを確認しなくてはなりませんが、これは天文学的数値です。製品は100万年たっても出なくなります。現実的には合理的にテストケースを絞り込む必要があります。絞り込むためにはソフトウェアの設計者や試験の設計者が、マルチスレッドに対して深い理解をしていることが必要です。

 

後者の問題はマルチスレッドプログラミングに対するもっとも典型的な勘違いです。マルチスレッドや並列プログラミングは素晴らしいものだから、たくさんスレッドを作ってどんどん並列化すればどんどん性能が改善するという純粋無垢な設計者がプロジェクトを担当すれば、たちまちプロジェクトは不具合と性能の低下に見舞われてしまうでしょう。そういう設計者には世のプログラムには並列化できないものが存在することと、性能向上にはアムダールの法則というものが存在するということを教えてあげる必要があります。

さらには

  • スレッドはOSによって実現されていてそこには必ずオーバヘッドが存在すること
  • 性能(いわゆるスループット)向上だけでなくタスクの優先度、応答時間を考慮することが必要なこと

も理解しなければなりません。これらが理解できない技術者はマルチスレッドを設計すべきではないでしょう。

 

私はこの問題を克服するためには教育しか無いと思っています。大学の情報系の学科ではマルチスレッドプログラミングを必修にして欲しいです。いや、マジで。MATLABやJavascriptでなんかプログラム書いてきました→じゃあプログラミングできるね→マルチスレッドやって→なんすかそれ?みたいな事例を大量生産するのはもうやめていただきたい(涙)第1段階でマルチスレッドに対する様々な問題を体験していただいて、さらにはそれらを解決するための原理や設計手法を理解してもらう。そんな教育課程があってもいいのではないでしょうか。大学でダメならせめて会社の新人研修とか、中堅向け講座でもいいですから…。

 

じゃあ自分はどうなんだって話なんですけど、業界で働いている平均から比べたら、大分ましなつもりです(キリッ)しかしながら並列プログラミングの全てを理解している自信は全く持てないので、これからもっと勉強していこうと考えています。

 

具体的にはThe Art of Multiprocessor Programmingという本を読んで理解を深めていきます。

The Art of Multiprocessor Programming 並行プログラミングの原理から実践まで

新品価格
¥8,190から
(2014/2/2 14:03時点)

D.Knuth先生のThe Art of Computer Programmingをもじった感じの名前ですね。日本語版の出版が2009年でオリジナルが2008年ですから私が会社に入社してから出た本です。プログラムはJavaで書かれています。もう、序盤から頭いてーって感じですけどステキな未来が来ると信じて頑張って読み込んでいきます。

他にもオライリー本の『並行コンピューティング技法』っていう本も読んでみました。

並行コンピューティング技法 —実践マルチコア/マルチスレッドプログラミング

新品価格
¥3,360から
(2014/2/2 14:16時点)

 

こちらの方がページ数も少なくて読みやすかったですけど、実践例が文字列処理とか、ソートとかグラフ探索とかどちらかと言うとWebサーバーがやるようなプログラミングで組込みではあまり使わないので引き出しとして取っておきます。

 

投資ブログにこんなこと書いて何の意味もなさそうですけどw私のつぶやきを最後までお付き合いいただきありがとうございました(;_;)