Ruby
Kernel#autoloadで任意の定数を参照した場合に、指定したファイルをrequireするように設定できます。 # 定数Fooを参照した場合に、fooをrequireする autoload :Foo, "foo" module Var # 定数Var::Hogeを参照した場合に、var/hoge をrequireする autoload :Ho…
SinatraのFAQにBasic認証を行うサンプルがあったので試してみます。といっても、「set Rack::Auth::Basic」を呼び出すだけ。 require 'rubygems' require 'sinatra' # 認証を設定。 # ユーザー名が「foo」,「var」の場合のみアクセスを許可する。 use Rack::…
yamlをrequireすると、引数で指定されたオブジェクトをyaml形式で出力する「Kernel#y」メソッドが追加されます。Kernelに追加されるので、組み込み関数として使えます。 require 'yaml' list = [ { :name => "mii", :age=>1 }, { :name => "tora", :age=>0 }…
SinatraでSessionを使う簡単なサンプルです。手順は以下。 「set :sessions, true」でセッションを有効化。(このへんに説明があります。) 後は、「session[]」でセッションの値にアクセス可能です。 ちなみに、sessionはSinatra::Helpersモジュールで定義さ…
Sinatraは、Rubyで簡単にWebApplicationを作成できるDSL(ドメイン特化言語)です。 インストール $ gem install sinatra シンプルなサンプル 以下は、"/"にGETでアクセスされた場合、"Hello World"を返すWebサーバーを起動するだけの単純なサンプルです。 req…
指定されたコンテキストでのローカル変数の一覧(名前と値のハッシュ)を取得する関数を書きました。戦略は以下です。 「eval( "local_variables", binding )」でbindingでのローカル変数名一覧を取得。 Kernel#local_variablesは現在のスコープで定義されてい…
今日見つけたコード。なんだコレ、と思ったらシングルトンインスタンスの作成でした。 class Kitten # なんだコレと思ったらシングルトンインスタンスの作成だった。 Singleton = new def meow puts "meow" end end # シングルトンインスタンスを使う。 Kitt…
成り行きでの決済注文に対応しました。 →Github - unageanu / clickclient_scrap 指値、逆指値やOCOでの決済は未実装です。 サンプル 以下は、建玉一覧を取得し、すべての建玉を決済するサンプルです。 $: << "../lib" require 'clickclient_scrap' require …
建玉一覧の取得に対応しました。 →Github - unageanu / clickclient_scrap 高速化のため、注文一覧と同じく一覧画面から取得できる情報のみを返します。 サンプル $: << "../lib" require 'clickclient_scrap' require 'constants' # ログイン c = ClickClie…
通常注文のキャンセル機能を実装しました。 →Github - unageanu / clickclient_scrap また、注文APIの戻り値として注文番号を返す処理も実装しました。注文→(返された注文番号を引数として)注文をキャンセル、が可能です。なお、通常注文以外の注文(成り行き…
昨日のサンプルでzipファイルの送付はできたわけですが、これだとzipの内容を一気に読んで送っているので、転送されるファイルサイズが大きくなったとき、メモリが足りなくなる問題があります。本文をStreamで指定できればいいのだけど、TMailでのやり方がよ…
TMail+Net::SMTPで、zipファイルをメールで送付するサンプルです。(※添付ファイルとして送付しているわけではないのでご注意。メールの本文がzipです。) 処理としては、 メールのbodyとして読み込んだファイルをBase64エンコードしたものを指定。 content_ty…
「Struct.new」の第一引数で、構造体の名前を指定できたりします。 名前を指定した場合、Structのクラス定数として生成された構造体が定義されます。 定義後は「Struct::」で作成した構造体にアクセスできます。 変数や定数に代入する必要はありません。(代…
WEBrick::HTTPAuth::Htpasswdで「.htpasswd」互換のファイルを作成したり、記録されているデータにアクセスしたりできます。 require 'webrick' # Htpasswdのインスタンスを作成。 # 引数で保存先ファイル名を指定する。 passwd = WEBrick::HTTPAuth::Htpass…
組み込み関数「warn 」で標準エラー出力に文字列を出力します。 warn "foo" 実行結果です。 fooこんなのがあったとは。ちなみに、$VERBOSEで警告の出力を抑制できます。たとえば以下のコードを実行しても何も出力されません。 # $VERBOSEをnilにすると出力さ…
GMailのSMTPサーバーに接続し、メールを送信するサンプルです。 TMail利用してメールを作成。 これを使うと、日本語メールや添付ファイル付きメールもさくっと作成できるみたいです。 メールの送信はRuby付属のNet::SMTPで。 GMailのsmtpサーバーでは、TLSに…
Object#freezeで、インスタンスの変更(インスタンス変数の変更)を禁止できます。 class Kitten def name @name end def name=(name) @name = name end end mii = Kitten.new mii.name = "mii" #凍結。 mii.freeze #凍結後はインスタンス変数を変更できない。…
プラグインローダーを試作しました。 方針 プラグインはGemで。 せっかくなのでrubygemsを使って、プラグインを簡単に追加/削除できるようにしたい。 なので、gemの形式でプラグインを提供できるようにする。 gemにしておけばjijiへの組み込みも容易。jijiの…
今日見つけたコード。 puts "%-21s: %s" % ["key", "value"] String#%でフォーマットができるのか。ふむ。実行結果は以下です。 key : value
Gem#latest_load_paths()で、インストールされているGemのロードパスの一覧を取得できます。 旧バージョンのGemのパスは含まれません。 $LOAD_PATHのパスも含まれません。 require 'rubygems' puts Gem.latest_load_paths() 実行結果です。 ... /usr/lib/rub…
RubyGemsにはプラグインの仕組みがあって、以下のようにプラグインを検出してロードするとのこと。 Gem の rdoc より。 RubyGems PluginsAs of RubyGems 1.3.2, RubyGems will load plugins installed in gems or $LOAD_PATH. Plugins must be named ‘rubyge…
Gem#find_filesを使うと、指定したパスにマッチするファイルを探索できます。 パスにはワイルドカードが使えます。(Gem::GemPathSearcherと同じく、Dir#globしている様子。) 同じGemの別バージョンに含まれるファイルは、それぞれ別のファイルとしてヒットす…
ハッシュのキーをシンボルに変換しようとして、↓のように書いたが動かず。 hash = {"a"=>"aaa", "b"=>"bbb"} p hash.map{|entry| [entry[0].to_sym, entry[1]] } 実行結果です。 [[:a, "aaa"], [:b, "bbb"]]RubyリファレンスマニュアルのEnumerable#mapによ…
Gem::GemPathSearcherを使うと、ローカルにインストールされたGemの中から、特定のファイルを含むGemを探索することができます。 findで最初に見つかった1つを、 find_allでマッチするもの全てを取得できます。 find_allの方は旧バージョンのものもヒットす…
GemのAPIで取得可能です。 require か Gem::activate でGemを有効化すると、 ロードされた gem の Gem::Specification が Gem.loaded_specs に保持されます。 あとは、Gem::Specification からバージョンを取得すればOK。 バージョンの型はGem::Versionです…
OCO注文に対応。 →Github - unageanu / clickclient_scrap 成行注文も実装してみましたが、休日は成り行きでの注文は停止中らしく動作確認ができていません。 サンプル $: << "../lib" require 'clickclient_scrap' # ※sample.rbと同じディレクトリにuser,pa…
セーフレベル4でも、汚染されたオブジェクトが対象であれば、インスタンス変数の変更が可能です。ただし、更新するインスタンス変数がクラス内で1度も使われていない場合、SecurityErrorとなるのでご注意。 # 指定のSAFEレベルでブロックを実行する。 def sa…
通常注文の注文一覧取得を実装しました。 →Github - unageanu / clickclient_scrap ※IFDやOCO注文の一覧は不完全です。IFDやOCO注文のの場合、2つめの注文の情報が返されません。 注文一覧画面から取得できる情報のみを返すようにしています。 「有効期限」…
配列の要素をto_iした値が正規分布することが知られている場合に、「値の要素の95%が属する範囲」を算出する関数です。 class Array # 要素をto_iした値が正規分布することがわかっている場合に、 # 値の95%が属する範囲を算出する。 def predictionInterval…
jarを比較する必要があったので、ちょろっとスクリプトを書きました。 jarを展開して、 各ファイルをmd5sumで比較。 違っていたら、 クラスファイルはjavapの出力結果をdiffで比較 それ以外は、ファイル自体をdiffで比較。 使い方 $ diffjar.rb <比較するjar…