第一種不完全ガンマ函数 gamma_greekが gamma_incomplelte_lowerに名前が変わったぐらいですね。後はマニュアルの見た目の修正のみでした。
maxima.osdn.jp
rust-cudnnのcuDNN v6対応
2年ほど前にAutmunAIというヨーロッパのベンチャがRustで書かれたDeep Learning Framework "Leaf"を開発し始めて注目していました。
しかし、残念なことに1年ほど前に、TensorFlowのエコシステムの成長を見て「負け」を宣言して開発を中止したようです。
Rustによるフレームワークは速度の面で優位性はあったのですが、マイナーな言語というところが弱点だったということでしょうか。
学習フレームワークとしてはともかく、Rustはこれからシステムだけでなくバックエンドやアプリも記述する言語に成長していくと予想しています。その時、推論を使う機会は多々あるかと思うので、Leafの一部、rust-cudnnはRustプログラマに撮って貴重なものになると思います。
で、アップデートをしました。
モジュール名が本家とぶつかるのでcrates.ioには公開していません。依存性はgitプロパティで指定してください。
bindingを手書きではなく、bindgenで生成するようにしたので、今後cuDNNのバージョンアップに対するメンテは比較的楽になるかと思います。
(macOSでcargo testを通そうと思うと、AutmunAI社の別のモジュールcollenchymaのlink attributeを修正する必要があります。)
Maxima日本語マニュアル(5.40.0)更新しました。
仔細な修正以外の主なところはencode_timeとdecode_timeの追加、Maximaの式整理のイントロダクションの追加でした。
Herokuで無料でたくさんTwitter Streamingボットを実装する方法
Herokuでは、ここ2年ほどで無料のdynoに関して変遷がありましたが、今はアカウント毎に毎月所定の時間のdyno hourを割り当てるということに落ち着いたようです。
Twitterでリプライやフォローバックをリアルタイムで自動でしようと思うと、Streaming APIを利用するのが効率的ですが、Streaming APIを毎日24時間モニタするには24時間*31日のdyno hourをworkerで消費します。
無料分でやろうと思うと1つが限度ですね。
でも、もしもボットがCPUもメモリもそれほど食わないなら、フリーのdynoには512MBのメモリと4core-8threadのCPUが味方ですから、複数のボットを1つのdynoで動かせるはずです。
その方法をご紹介します。
使用言語はPythonを仮定しました。
1. PythonのForemanクローン、honchoを使う。
Herokuアプリの基本になるProcfileは以下のようになります。
worker: honcho -f ProcfileHoncho start
(*ProfileHochoは任意のファイル名です)
2. 続いてProcfileHonchoに動かしたいボットアプリを記述します。
mimiaka1846: python3 mimiaka/stream.py retweet_ramen: python3 retweet_ramen/retweeter.py
(*注
mimiaka1846は私が運営している耳赤サイト用アカウントmimiaka1846の自動フォローバックアプリです。
retweet_ramenは私が運営しているラーメンなう。(@retweet_ramen)の自動リツイートアプリです。)
Python3を使いましたのでruntime.txtは以下の通りです。
python-3.6.0
後は、それぞれのアプリをコーディングして、使用したパッケージ情報まとめたrequirements.txtを用意すれば完了です。
CPUパワーとメモリが許す限り、ProcfileHonchoに何個アプリを追加しても、消費する無料dyno hourは変わりません。
RustによるWeb Assembly事始め
2018/02/14 追記
去年の11月25日にRustのnightly本体でwasm32-unknown-unknownサポートされたようです。なので、本記事はobsoleteです。
Rustが安定版1.14.0でWeb Assemblyを実験的にサポートしました。
asm.js関連技術を使うにはC/C++に戻らないといけないのかとげんなりしていたので、これほどありがたいことはありません^^
EmscriptenによるWeb Assembly
早速、Web Assemblyから試してみました。macOSでのメモです。
1. Emscriptenをインストール
EmscriptenはC/C++をJavaScriptにコンパイルするコンパイラです。RustもWeb Assemblyを出力する際にEmscriptenを利用します。
Emscripten SDKをダウンロードしてドキュメントのインストラクションに従うのが一番問題がないです。HomeBrewとか考え出すとLLVMのインストール時のコンパイルオプションとか色々ハマります。
Download and install — Emscripten 1.37.33 documentation
2. Firefox Developer Editionをインストールする
2017年1月5日現在、Web Assemblyをネイティブサポートしているのは、Developer Editionだけのようです。(製品版は有効化するフラグはあったのですが、ネイティブサポートされていませんでした)
アドレスバーでabout:configを開き、javascript.options.wasmをtrueに設定します。
これでWeb Assemblyが有効になります。
RustによるWeb Assembly 実行編
続いてRustで同じことをします。
Rustはrustupを使って最新版(1.14.0以降)がインストールされているとします。
1. hello.rsをコンパイルする
fn main() { println!("Hello, World!"); }
という内容のhello.rsを用意して、
rustc --target=wasm32-unknown-emscripten hello.rs -o hello.html chmod a+r hello.js
を実行します。
2. 実行する
Emscriptenの時と一緒です。hello.jsのパーミッションに注意。
RustによるWeb Assembly 関数呼び出し編
DOM関連の操作はJavaScriptでするのがよいかと思うので、RustのライブラリをJavaScriptから呼び出す方法が必要になるかと思います。やってみましょう。
1. hello.htmlを変更する
「RustによるWeb Assembly 実行編」で生成したhello.htmlに関数呼び出しを組み込みます。
具体的には
script.src = "hello.js"; document.body.appendChild(script);
の2行の間に
script.onload = function() { var hello_world = Module.cwrap('hello_world', 'number', ['number']); console.log(hello_world(41)); };
を追加します。これが、Rustで書かれた関数hello_worldをJavaScriptから呼び出す方法です。
2. hello.rsを変更する
#![feature(link_args)] #[link_args = "-s EXPORTED_FUNCTIONS=['_hello_world']"] extern {} #[no_mangle] pub extern fn hello_world(n: i32) -> i32 { n + 1 } fn main() { } // ダミー。関数をエクスポートすると実行されない模様
link_argsでエクスポートする関数を指定します。
extern {}や#[no_mangle]はおまじないと思ってください。
3. rustをnightlyに変更
featureを使う場合、rustをnightlyバージョンにする必要があります。
rustup override set nightly
を実行してください。
4. コンパイルする
rustc --target=wasm32-unknown-emscripten hello.rs chmod a+r hello.js
上記例と違い、オプション -o hello.htmlを省略することに注意してください。
5. 実行する
hello.htmlをFirefox Developer Editionでブラウズします。
ウェブコンソールを開くと、計算結果42が表示されていることを確認できるはずです。
(ウェブコンソールを開いたまま、ページを再読込するとページがクラッシュするようです。)
WGoエディタ
追記(2016-11-14]
SabakiというElectronベースの良さげなSGFエディタがありました。こちらを利用させていただきます。なのでWGoエディタの開発は中止します_o_
version 0.19.0のmacOS用バイナリはうまく動かないようです。githubレポジトリをcloneしてnpm run build:osxしてできるアプリはうまく動きました。
WGo.jsを使ってSGFエディタを作りました。
NW.jsを使いました。NW.jsいいですね。クライアントサイドのウェブアプリがそのまま載って、システムにアクセスする部分だけNode.jsのAPI使って追加したらいい。メニュー部分で少し悩みましたが、簡単に作ることができました。