PythonでMACDを計算する

MACD (Moving Average Convergence Divergence) | FX・証券取引のマネーパートナーズ -外為を誠実に-

このあたりを参考に、EMAはこんなかんじ。

def ema(l, t):
    result = []
    for p in l:
        i = len(result)
        if i < t: # t日目までは単純平均
            result += [float(sum(result) + p) / (i + 1)]
        else:
            last = result[-1]
            result += [last + 2. * (p - last) / (t + 1)]
    return result

あとは式通り。

ema12 = np.array(ema(prices, 12))
ema24 = np.array(ema(prices, 24))
macd = ema12 - ema24
signal = np.array(ema(macd, 9))

matplotlibで描画してみる。

x = np.arange(0, len(dates))
plt.figure(figsize=(150, 4)) # サイズは適当に調整
plt.xticks(x, dates[::-1])
plt.plot(x, macd)
plt.plot(x, signal)

ipython notebookとか使うと便利。

Rust 1.0 の abs

fn main() {
    let x: i16 = -32768;
    println!("{}", x);
    println!("{}", x.abs());
}

とすると arithmetic operation overflowed で落ちる。 doc を見ると、"::MIN will be returned if the number is ::MIN" と書いてあるのだが…。

https://github.com/rust-lang/rust/blob/1.0.0/src/libcore/num/mod.rs#L509

あっ…。

ちなみに master を見るとちゃんと直っている感じ(確かめてないけど)。

https://github.com/rust-lang/rust/blob/master/src/libcore/num/mod.rs#L572

ここ数年で読んだ良さげなチュートリアルまとめ

Python チュートリアル — Python 3.4.2 ドキュメント

Pythonチュートリアル.僕が初めて読んだ時は 2.7 だった気がする. 今から始めるなら 3 の方が良さそう. 2 系はユニコードの扱いがつらい.

Django documentation | Django documentation | Django

Web アプリケーション Djangoチュートリアル. 0.95 ぐらいの時に読んだのからするとだいぶ進化している.

(Web のフレームワーク全体に言えるかもしれないけど,) テストや再利用の話が入っていて,ソフトウェア一般の話としても良いと思う. Web アプリケーションのアーキテクチャは,もうかなり完成されているように感じる.

Sphinx documentation contents — Sphinx 1.2.3 documentation

ドキュメンテーションツール Sphinxチュートリアル. 覚えたてのころは結構いろいろ書いた気がする. 技術書の著者になった気分. でも日本語 PDF はやっぱりつらい.

Python Scientific Lecture Notes — Scipy lecture notes

科学技術計算のためのライブラリ. Python の醍醐味.

The Waf Book

ビルドツール Waf. ファイルをテキストに列挙しておく必要が無くて,テストが書けて, ライブラリのチェックができて,Debug/Releaseを分けられるやつを探していた.

CMake Tutorial | CMake

CMake は Waf よりメジャーなビルドツール. Clion でも使われている. 最近はこちらの方が良いかなという感じ. Waf マルチプラットフォームに書くのはなかなかつらい.

opengl-tutorial.org | Tutorials for modern OpenGL (3.3+)

よくできている. 最近の Mac なら 4 系まで動くので,対応してほしい感じは少しある.

Tutorial for beginners (Python)

GTKチュートリアルGTK 自体が他の GUI ツールキットに比べてわかりづらい感じがする. C で入ってから他の言語に行った方がよかったかもしれない.

Vim documentation: help

上級編あたりまで読んだらだいぶ使える感じがする. キーが全然違うので最初はつらい.

漢のzsh | コラム | マイナビニュース

これをメインにしながら他の zsh の記事と一緒に進めていくと良い感じにカスタマイズできた. もうバージョンが古くなってしまったかもしれない.

The Rust Programming Language

最適化ができるようになってきたら積極的に使いたい.

初心者のための!作って学ぶBlenderの基礎:①基本操作とBlender紹介 | 日本VTR実験室

Blenderチュートリアル. 動くパンダが作れる.

C++でファイルパスを引数にしたコンストラクタだけだとつらい

ファイルパスを引数にして,コンストラクタで読んで…ってのは何も考えていないと結構やりがち. しかし,これだけだとテスト書くのがつらい. テストが実行される場所を気にしないといけないし, 例外どうするかってのもある.

istream& を引数にしたやつがあると,単体テストistringstream が使える. 短いテストケースならソースに埋め込むことができて楽. 例外も,渡された時に exceptions が設定されていれば投げるし, 終わった後に failbad を見ても良い.

例外 OK な場合も例外 NG な場合もたぶん救える*1

*1:C++のIOの設計そのものが NG な人は救えない

SSH 越しにクリップボードを操作する

前回と似たようなネタ

X の DISPLAY を設定すれば xsel が使える.

ssh [HOST] "export DISPLAY=:0.0 && xsel -b"

デスクトップの Linux からノートPCに持ってこれる.

-bi で設定もできる.

SSH から Gnome の画面をロックする

Gnome shell が新しくなってシンプルにしたらしく, スクリーンセーバーを起動するやつが無くなったらしい.

export $(cat /proc/$(pgrep -u `whoami` ^gnome-shell$)/environ |\
    grep -z DBUS_SESSION_BUS_ADDRESS | strings)
dbus-send --type=method_call --dest=org.gnome.ScreenSaver\
    /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock

最初のコマンドで DBUS_SESSION_BUS_ADDRESS を探して, dbus-send でプロセス間通信してロックする.

少し離れたデスクトップをノートPCからロックできる. 画面のロック以外にも使えそう.

ブール関数をあつかうC++ライブラリを作った

utisam/boloq · GitHub

BDD を std::shared_ptr とか std::unordered_map で実装してみた. 名前も標準ライブラリを意識した感じでつけてみた.