Category: ProgrammingPage 2 of 4

flowchart.jsでテキストから綺麗なフローチャートを作図

flowchart.jsを使うと、テキストで指定したノードの形状やテキストラベル、ノード同士の接続をテキスト形式で記述すると、きれいなフローチャートが自動的に作図されます。VisioやPowerPointを使った煩雑な作図作業から解放されましょう。gistにサンプルを掲載してみました。 テキスト形式でフローチャートを作図する例 – flowchart.js サンプルの表示のしかた raphael-min.jsとflowchart-latest.jsをダウンロードして、同じフォルダに置いてからHTMLファイルをブラウザで開いてみてください。 gist上のコード

【mbed】STM32 Nucleoが(ようやく)Yosemite対応!

STMicroelectronicsのARM系マイコン「STM32」を搭載したmbed対応のボード「Nucleo」シリーズが便利です。arduino互換IOと追加のIOポートがついた20〜80MHzのARMコアが搭載されたボードが1枚1500円くらいという手頃な値段で販売されています。 ARMが構築しているmbed環境は、無料のオンラインの開発環境でコーディング・コンパイルしたり、他人のライブラリのインポートができたりする上に、マイコンボードへのプログラムの書き込みがドラッグ&ドロップでできるなど、非常に便利です。開発言語がC++なことも、プログラムの見通しをよくしてくれるので◯。 STM32 Nucleo F401RE – 秋月電子 1500円 STM32 Nucleo F411E – RSコンポーネンツ 1367円 [tmkm-amazon]B00O0RM35O[/tmkm-amazon] mbedの導入方法を紹介したウェブ STM32 Nucleoで始めるmbed開発:届いたらすぐに基板で遊べるmbedが凄すぎるので試してみました – パクえ先生ブログ [ARM/mbed]mbedではじめよう – 何か作りたいモノづくりサイト「Make.」 mbed.org上のIDEのスクリーンショット 問題: Yosemite+NucleoでUSBでマウントできない&プログラム書き込めない ということで、開発環境がクラウド上にあるため開発マシンの制約がなく、Macが使えるのもmbedの大きな利点です。ぼくもMacで実験装置制御用のプログラムを開発していたのですが、2014年にMac OS X…

【Rubyで単位付き計算】X線fluxをluminosityに変換する例

Soki Sakuraiさんのruby-dimensionalを使うと、Rubyで単位付きの計算がとても綺麗にできます。 たとえば、X線天文でよく出てくる「地球で観測したfluxから等方的な放射を仮定したときのluminosity(光度)を求める」計算は以下のようにできます。(以下の例は、激変星GK Perのdwarf nova outburst時のある観測の0.5-10 keVのluminosityを計算したときの例) これを実行すると、以下のようになります。 ruby-dimensionalのインストール ruby-dimensionalのインストールについては、github上のマニュアルを参照してください。 Homebrewでパッケージ管理している場合は、コマンド2個で簡単にインストールできます。 メッセージにあるように、.bashrcや.bash_profileもしくは.zshrcに以下の行を追加しておいてください。 使い方 ライブラリの読み込み 物理計算を行うときはrequireメソッドで、以下の3個のモジュールを読み込みます。 ruby-dimensional ruby-dimensional-standard ruby-dimensional-physics Physicsという名前空間で定義されている変数をフラットな名前空間から使う場合は、 としておきましょう(上のサンプルではPhysics内の定義は参照していないので必須ではないです)。 使い方 基本的に数値は普通の数値として表記し、単位は:cmや:km、:erg、:J等、単位名の前に”:”をつけた形式で表記します。掛け算、割り算、べき上等は普通の感覚で記述できます。 上の例では としてflux(単位時間当たりに単位面積を通過するX線光子のエネルギーの和)を定義しています。:pcは「パーセク」という、天文学で使われる距離の単位です。 変数に格納した単位付き数値は、以下の様に別の式で使用することもできます。 単位付き数値を、特定の単位に換算したい場合、in(単位)というメソッドを使います。指定した単位の次元が、その単位付き数値の単位の次元と等しい場合、指定した単位で表記した時の数値が戻されます。 定義されている単位一覧 irbから読み込んで、UV.showAllUnits()を実行するとその時点で定義されている単位を確認できます。

[ROOT] TGraphからTSpline3を作成する

ROOTのTGraphでデータ列を保持していて、そのスプライン補間関数(cubic splineならTSpline3)を構築したいときは、以下のようにTSpline3::TSpline3(const char* name, const TGraph* g, …)というコンストラクタを使用しましょう。 [tmkm-amazon]9784797370997[/tmkm-amazon] TGraph::Eval()の第二引数にTSpline3のインスタンスを、第三引数に”S”オプションを渡したら、結果が第二引数のオブジェクトに引き継がれるのかと思いきや、そういう仕様ではありませんでした。 Double_t Eval(Double_t x, TSpline* spline = 0, Option_t* option = “”) const  Interpolate points in this graph at…

【Selenium】Rubyでウェブページのスクリーンショット

最近Seleniumにハマっています。以下のようにするとスクリーンショットも撮影できてしまいます。 save_screenshotメソッドで保存したスクリーンショットには、以下のようにブラウザのインタフェースは除外され、ウェブサイトの領域のみ記録されます。自分でブラウザインタフェースをトリミングする必要がないので楽です。 それで、いろいろな人にSeleniumをもっと簡単に使ってもらえるよう、Zirconiumというラッパーを作成しています。SeleniumのAPIを簡単化したRuby DSLを提供するとともに、あるユーザーが作成した自動化スクリプトを、githubやhttp経由でimportする機能も備えています。もう少し試験したら、入門の記事を投稿する予定です。お楽しみに。(20150207時点でも、githubのプロジェクトページにはそれなりにReadme.mdがあるので、Rubyが使える人なら自分でインストールして動作を試すことは出来ると思います) Zirconium – github.com/yuasatakayuki – ブラウザ操作の自動化用Ruby DSL環境

gitの初期設定

プログラムのソースコードや衛星プロジェクトのコンフィグレーション管理にgitを使い始めようと思っている研究者の方は、コマンドラインで以下のコマンドを実行してgitの初期設定をしましょう。 まず、最新版がインストールできていない人は、Homebrewで としてインストールしましょう。 以下が、大体の人が行なっている初期設定です。 設定後、 を実行すると、以下のように設定情報を確認できます。 user.name=Takayuki Yuasa user.email=yuasatakayuki@gmail.com mergetool.keepbackup=false push.default=matching core.excludesfile=/Users/yuasa/.gitignore core.editor=nano color.ui=true さらに詳細な設定項目の解説は、gitのオフィシャル解説のGit のカスタマイズ – Git の設定にまとまっています。diff/mergeツールを変更したい場合もこのページを参照しましょう。

RubyROOTでDraw()したときに統計情報を表示しない

RubyROOTでヒストグラムをDraw()すると、.rootmacros内でgROOT->SetOptStat(0)していても効かずに、図の右上に統計情報が表示されることがあります。見栄えの問題でこの統計情報を消したい場合は、以下のようにしてください。 以下、RubyFitsと同時に用いて、あるFITSファイルの1st extensionに記録されたXとYをhistogramに詰めて、上下に分割したCanvasにプロットする際の例です。以下のような表示になります。 gStyle.SetOptStat(0)をコメントアウトすれば、以下のように統計情報が出ます(というかこちらがデフォルト)。

【d3.js】折れ線グラフとアニメーションのサンプル

天体データ解析や人工衛星の試験のデータを可視化する際に、最近はやりのvisuallization framework d3.jsが使えるといいなと前々から思っていたのですが、なかなか勉強できていませんでした。せっかく買った日本語の解説本はあまりにヒドいクオリティだったので、Oreillyの半額セールで購入した以下の本で勉強し直しました。 [tmkm-amazon]B00G8YAV06[/tmkm-amazon] こちらは概念の解説をしてから具体的な例を見せてくれるので、「エンジニアのための データ可視化[実践]入門 〜 D3.jsによるWebの可視化」に比べると親切だし、d3.jsの設計コンセプトをよりよく理解できました。 座学の後は、まずは自分で動かしてみるために、マーカーと値ラベルつきの折れ線グラフを作ってみました(d3jsLinePlotSample)。今後の参考として、以下も入れてあります。 クリックによる軸の表示範囲変更アニメーション 表示しているSVGソースコードのダンプ ソースコード(d3jsLinePlotSample.html)はgithubにおいてあります。 ほとんど初めてのJavascriptなので、コーディングの品質はひどいものですが、d3.jsの使い方のイメージをつかむ方にポイントをおいてみてください。 2014年6月に発売になった、こちらの本もよさそう。 [tmkm-amazon]4797368861[/tmkm-amazon]

cfitsioで16-bit unsigned integerを扱う例

cfitsioを用いたFITSファイルを生成するプログラムを書いているときに混乱したので、メモしておきます。 cfitsioはextensionとしてunsigned型の整数を読み書きする機能を提供しています。詳細はオフィシャルのユーザマニュアルの 4.4 Support for Unsigned Integers and Signed Bytes で説明されています。 要点は、カラム型としてUがuint16_tに、Vがuint32_tに対応しており、fits_write_col()するときに、TUSHORTやTUINTで値を渡すせばOKです。ヘッダーの絡む定義部に自動的に適切なTZERO/TSCALが記入され、unsigned型で読み書きができるようになります。 例題の一部を抜き出すと、 カラム定義 カラムへの書き込み 例題の全ソースコードはmain.ccからダウンロードしてください。 コンパイルは、以下のようにしてください。 実行するとsample.fitsが生成され、fv等で開くと、以下のように値が詰まっているはずです。 ヘッダ部は以下のように、TZEROとTSCALが設定されます。

ROOT Version 6のベータ版公開

最近あまり情報についていけていませんでしたが、ROOTのメジャーアップデート版であるVersion 6のベータ版が2013年12月に公開されていたようですね。 何と言ってもVersion 5系からの一番の違いは、CINTからLLVM/clangベースのClingへとC++インタプリタが置き換えられたことですね。CINTも、それが最初に作られた時代のことを考えるとひじょうにすぐれた仕組みでしたが、LLVMの登場とC++1x系のサポートを考慮していよいよ移行となり、感慨深いです。 すでにROOTのgitレポジトリのmasterはVersion6系に切り替わっているとのことで、gitで以下のようにcloneすると取得できます。 Version 5系のソースコードが欲しい人は、以下のようにブランチをcheckoutしてください、とのこと。 ROOT Version 6 beta 1