Category: RubyPage 2 of 2

SublimeText3 – SublimeCodeIntelの補完が効かない – TypeError: must be str, not bytes

SublimeText3のRubyモードでEclipseのContet Assistみたいに補完したい SublimeText 3でRubyスクリプトをコーディングするときに、コンテキストに応じた補完が効くと便利だと思って調べたら、SublimeCodeIntelというプラグインがデファクトスタンダードのようです。Package Controlから、 Shift + Command + P Installと入力 SublimeCodeIntelを選択 return としてインストールしました。 動かない問題 早速Rubyスクリプトを書いて、補完が効くかどうか試してみたのですが、コーディング途中に自動的に表示されるはずの補完候補が表示されませんでした。 SublimeCodeIntelのログは~/.codeintel/codeintel.logに記録されるということだったので、 のように確認してみると、以下のようなエラーがでていました。 このうち、最後の という部分がメインのエラーのようです。 解決方法 (gitレポジトリのdevelopmentブランチを使う) 「SublimeText3 TypeError: must be str, not…

rubyでSymbol not found: _SSLv2_client_method (LoadError)が出るとき

Homebrewで したら、HomebrewでインストールしているrubyがOpenSSL関連のエラーで動かなくなってしまいました。 具体的にはrubyスクリプトを実行したときに以下のように”Symbol not found: _SSLv2_client_method (LoadError)”というエラーがでます。 /usr/local/Cellar/ruby/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require’: dlopen(/usr/local/Cellar/ruby/2.1.2/lib/ruby/2.1.0/x86_64-darwin12.0/openssl.bundle, 9): Symbol not found: _SSLv2_client_method (LoadError) Referenced from: /usr/local/Cellar/ruby/2.1.2/lib/ruby/2.1.0/x86_64-darwin12.0/openssl.bundle Expected in: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib in /usr/local/Cellar/ruby/2.1.2/lib/ruby/2.1.0/x86_64-darwin12.0/openssl.bundle – /usr/local/Cellar/ruby/2.1.2/lib/ruby/2.1.0/x86_64-darwin12.0/openssl.bundle from /usr/local/Cellar/ruby/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in…

[Selenium Ruby] Element is not currently interactable and may not be manipulatedのエラー

Seleniumでウェブブラウザの操作を自動化しています。社内システムや航空会社の予約システム等のウェブサービスの煩雑な操作のオートメーションに絶大な力を発揮するので感動しているのですが、webページの読み込みのタイミングによっては、たまに以下のような「Element is not currently interactable and may not be manipulated」エラーが出ることがあります。 gems/ selenium-webdriver-2.43.0/lib/selenium/webdriver/safari/bridge.rb:73: in `raw_execute’: Element is not currently interactable and may not be manipulated (Selenium::WebDriver::Error::InvalidElementStateError) from gems/selenium-webdriver-2.43.0/lib/selenium/webdriver/remote/bridge.rb:616:in `execute’…

【Ruby+PDFKit】RubyでHTMLからPDFを生成する

 (出来上がりイメージ) RubyにPDFKitを入れると、HTMLでマークアップした文書をPDFとして出力することができます。デフォルトオプションでも相当きれいな出力が得られるので、データ解析の結果をまとめたり、日々の実験結果のサマリを自動生成するのにも使えると思います。以下、自分用のログです。 [tmkm-amazon]9784774173221[/tmkm-amazon] インストール gemでPDFKitをインストール。 http://wkhtmltopdf.orgにあるwkhtmltopdfという外部プログラムが必要なので、ダウンロードページからダウンロードしてインストールします。 使い方のサンプル 以下のサンプルのように、HTMLをstringとして用意し、PDFKit.new()に渡します。to_pdfメソッドをコールすると、PDFの文字列が戻ってくるので、fileに書き出しています。 なお、<h1>タグではstyleアトリビュートを付与してフォントを選択したり、<h2>タグでは文字色を変更しています。CSSを書いておくと簡単に装飾を変更できます。 で、これをmake_pdf.rbとかに保存して と実行すると、RubyPDFExample.pdfというPDFファイルが生成されるはずです。 画像を挿入するサンプル <img>タグを使えば、画像の挿入も可能。ぼくがMac環境で試した範囲では、画像ファイルをフルパスで指定する必要がありました(なお、Rubyで相対パスからフルパスを取得する場合はFile.expand_path(“file.png”)がつかえます)。 生成されるPDFは以下のような感じになります。 RubyPDFExampleWithImage.pdf なお、サンプルで使用している写真は台北の國家戲劇院(National Theater)です。 [tmkm-amazon]B00K8BNHEC[/tmkm-amazon] ソースコード全体は以下のとおりです。 [tmkm-amazon]4797359986[/tmkm-amazon] [tmkm-amazon]4767814294[/tmkm-amazon]

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

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

RubyROOTをHomebrewでインストールする

RubyからCern/ROOTが使える、めちゃくちゃ便利なRubyROOTというツールがあります。JAXAのHirokazu Odakaさんが開発・メンテしてくれています。 マニュアルビルドするには、swigやcmakeを用意する必要があるのですが、簡単にインストールできるようにHomebrewのFormulaを作って、tapに入れました。Macの人はHomebrewをインストールしてから、以下のようにしてtapを取得して、インストールすると使えるようになります。 もしROOTが入っていない場合は、 してください。   天文データを扱う人は、RubyFitsもぜひどうぞ。 でインストールできます。高エネルギー宇宙物理の人は、RubyROOTとRubyFITSを同時に使うと、C++を書かずに論文を書くのに必要なデータ解析ができるようになりますよ。 RubyROOTのサンプルコードはgithubのexamplesフォルダを見るか、HongoWikiの「RubyからROOTを使う」のページも参考にしてください。 たとえば、以下のようにヒストグラムを作成できます(write_hist.rb)。

RubyからGnuplotを使ってグラフを描画・保存する例

Rubyでグラフをプロットする方法をいろいろ調べていますが、matplotlibやflot、protovis/d3.jsに匹敵するようなネイティブのプロッティングライブラリはないんですね。これまで何名かが挑戦しているようなので、これから参戦するのも大変そうです。 とりあえずgnuplotラッパーを使ってみました。他のウェブサイトのサンプルでは、set terminal/set outputでファイルに保存する方法が書かれていない物が多かったので、以下に例をあげておきます。 インストール gemで一発で入ります。 グラフをプロットし、Postscriptで保存する例 基本的に、set系のコマンドは という形式で指定します。 線種やkeyを表示するか等のグラフオブジェクト個々の設定は、DataSetを作成して渡すときに指定します(以下の例だとGnuplot::DataSet.new( [x, y] ) do 〜 endの内側)。 上記の例をyx2.rbとして保存し、以下のように実行すると次のような図が保存されます。 生成される図 [tmkm-amazon]4797372273[/tmkm-amazon]

Rubyのヒアドキュメントでインデントを無視する

Rubyのヒアドキュメントは高機能(ruedapさん)という エントリで、Rubyのヒアドキュメントにおいて、終了ラベルのインデントを無視するオプションが紹介されていました(<<EOSではなく、<<-EOSのように、開始ラベルの先頭にマイナスを付ける)。知らなかった、、、。天体のデータ解析スクリプトをRubyでメタ的に生成する際にヒアドキュメントを多用する場面があるのですが、これが使えるとややソースコードが見やすくなりますね。 ヒアドキュメント内のテキストのインデントを無視したい(Rubyのコードと同じインデントで記述して、でも出力結果にはインデント用のタブやスペースは表示したくない)という場合は、チルダがRubyのヒアドキュメントをもっと良くする(kyoendoさん)を参照しましょう。Stringクラスにメソッドを一つ追加して、~<<-EOSとするだけでインデントを削除する方法を紹介してくれています。