Once activated, we'll place the following badge in your repository's detail box:
ruby の inject って慣れないと少し理解しづらいよなーと思ったので、極力わかりやすい説明をしてみるテスト。 わかりやすいかもしれない説明 さて、1 から 10 までの合計を求めるこんな↓コードがあった場合 sum = 0 (1..10).each {|i| sum = sum + i } p sum # => 55 inject を使ってこのよう↓に書けます。 p (1..10).inject(0) {|sum, i| sum + i } each と inject でどのように書き変わってるかを図で示すとこんな↓感じ。 injectの引数 0 は、ブロックローカルな sum 変数の初期値になってます。で、ブロックの実行結果の値が sum に代入されて、2回目以降のループを実行します。ループしている間の、各変数とブロックの中身はこんな↓感じ。 sum i ブロックの中身(sum
人生を書き換える者すらいた。: 人材獲得作戦・4 試験問題ほか 次に同じ質問がきたときに 「1時間いらないっしょ、こんなの」 と是非ともほざくために 今から勉強します ダイクストラ法による最短経路探索 図におけるS点からG点に到達するための最短経路を求めたい 各ノードを結ぶエッジを糸としてS点をゆっくりと持ち上げた場合 緊張する糸が変移しながら最終的にS−B−D−Gを結ぶ糸が緊張して これが最短経路と分かる*1 計算機上でこの現象をシミュレートしたものを ダイクストラ法というらしい 今各ノードとそこから伸びるエッジの情報(コストと接続先)を渡して その最短経路および総コストを出力するプログラムを考えてみよう data = { :s => [[5, :a], [4, :b], [2, :c]], :a => [[5, :s], [2, :b], [6, :g]], :b => [[4, :s
あなたが使うべき Ruby Tips 21選 - One By One - norizo333's Blog -より、21 Ruby Tricks You Should Be Using In Your Own Codeを見てみました。 Rubyも割と使えるようになったと思っていましたが、結構知らないものもあったので、まだまだだと痛感します。 以下、一つずつ確認していきます。 一応ですが、()内は私が勝手に訳しただけなので、正確ではないかもしれません。 1 - Extract regular expression matches quickly(正規表現での即時抽出) String#matchをString#[]で代用してしまう方法のようです。 可読性を考えるとあまり使いたくないですね。省略できるのも実は"match()"だけですし。 個人的には以下の方がマッチ演算の面影をはっきり残してい
■ [ruby] bitclustに関するメモ Ruby合宿中に聞いとけばよかった…。 ディレクトリ構成はとりあえず % ls bitclust/ doctree/ db-1_8_7/ みたいにする。 まずDBフォルダを作る。 % ./bitclust/bin/bitclust.rb -d ./db-1_8_7 init version=1.8.7 encoding=euc-jp encoding=utf8とかしても、入力を自動的にUTF8に変換してくれたりはしないので注意(今のところ)。 次にリファレンスを読み込む。svn upを忘れずにな。 % ruby -I bitclust/lib/ bitclust/bin/bitclust.rb -d ./db-1_8_7/ update --stdlibtree=./doctree/refm/api/src 末尾に「&& echo ^G」(^
Align.vimっていう、ここに載せたものより高機能なスクリプトがあります。 代入文がたくさん並んでると、なんか見にくいですよね。 @close_listeners = [] tool_bar = Gtk::HBox.new @label_title = Gtk::Label.new @btn_close = Gtk::Button.new('X') @moz = Gtk::MozEmbed.new 以下のようになったら見やすいよね? @close_listeners = [] tool_bar = Gtk::HBox.new @label_title = Gtk::Label.new @btn_close = Gtk::Button.new('X') @moz = Gtk::MozEmbed.new viについてちょっと調べものをしていたら ヽ( ・∀・)ノきゅまきゅまーさんのところ
RubyInline面白い!特徴としては CのコードをRubyへシンプルに埋め込む コンパイルは不要(裏でやってくれる) コンパイル結果はキャッシュする インストールはGemから ていう感じ。とりあえず10000回加算でも試してみる、まずgemからインストール gem install RubyInline いつも通り完了、で使ってみる require "rubygems" require "inline" class Test inline do |builder| builder.c <<-EOF int plus_inline(int x, int y){ int z=0; int a; for(a=0; a<y; a++){ z = z + x; } return z; } EOF end def plus_ruby(x,y) z = 0 y.times{ z += x } ret
■ [ruby] irbで自動で再requireしたい irbでrequire 'foo.rb'する エディタでfoo.rbを書き換える irbでプロンプトを表示するタイミングで、foo.rbが書き換わってたらload foo.rbする みたいな仕組みを作ると試行錯誤がやりやすくて良さそうな気がした。 ■ [ruby][event] Ruby Advent Calendar jp: 2009 まとめ 無事終了しました。参加された皆さんと、読んでくれた皆さんに感謝。 Ruby Advent Calendar jp: 2009 : ATND いま数えたら、全記事トータルで438ブックマークですよ。凄いね。 どんな記事があったかおさらいしてみましょう。 Day 1 - Standards: Write Implementation and Spec on the Same File [Test]
(この記事はRuby Advent Calendar jp: 2009の24日目です. 前日はursmさん、明日はtechnohippyさんです。 普段、技術的なことはwww.nicecabbage.comで書いていますが、今回は企画ものなので日本語で書いてみます。) メリークリスマスイブ! こんな聖なる夜に、他人のブログを読んでいる人なんていないと知りながら、投稿します。 この記事では、「Ruby Facets」ライブラリを紹介したいと思います。 Rubyは簡単に基本クラスを拡張できることから、より便利に、あるいは暗黒的に使うためのライブラリがたくさんありますね。”2.days.ago”で一躍評判となったRailsのActiveSupportや、”require :merb / :core_ext / :lib”でおなじみのMerbのextlibが有名です。 Ruby Facetsも
WindowsでPPTをJPGやPNGの画像にしたいなと思った。DrawToBitMapがよく解らなかったから PowerPointのAPIを叩くことにした。 PowerPointの画像化 SlideSaveAsPNG.rb #!/usr/bin/env ruby require 'win32ole' #PPTアプリを起動し接続 pp = WIN32OLE.new 'PowerPoint.Application' #PPTのメインWindowを描画 pp.Visible = true if pp.Visible == 0 #イベントを扱えるようにする。 ev = WIN32OLE_EVENT.new pp ,'EApplication' #PP定義済み変数をRuby変数にマッピングする。 class PowerPointConst end WIN32OLE.const_load pp, P
余計な機能がついてるのは別のライブラリの一部として作ったため require 'stringio' StringIO.class_eval do def read_format(size, format) bin = read(size) bin = "\000" + bin if size == 3 bin.unpack(format).first end end module Video class WrongFormatError < StandardError; end class Flv attr_accessor :body, :title def initialize @header = {} end def save(path) File.open(path, 'wb') do |f| f.write @body end end def mp3 mp3 = MP3.new
username と password は、接続先の Windows ドメインのアカウントと同一にする。 #!/bin/sh test -n "$1" && IP_ADDRESS=$1 test -n "$1" || IP_ADDRESS=172.16.xx.xx test -d ~/mnt/win || mkdir -p ~/mnt/win if [ `df -T | grep 'mnt/win' | wc -l` = 0 ]; then smb.rb -m ~/mnt/win -s C$ -i $IP_ADDRESS -u username -p password fi 引数に Windows ホストの IP アドレスを指定して実行すると、対象ホストの NTFS ファイルシステムを GNU/Linux のファイルシステムの一部として扱うことができるようになる。もちろん Windows
RubyのOpenStruct(ostruct)を使うと、属性が自動生成される構造体を作ることができます。 require 'ostruct' alice = OpenStruct.new alice.name = 'Alice' alice.mail = 'alice@example.com' p alice #=> #<OpenStruct name="Alice", mail="alice@example.com"> 1. 「ブロックを表す { } と、ハッシュリテラルの { } が混同されることはあるか?」というのが最初に抱いた疑問でした。それについては自分で「tASSOC(つまり=>)の有無でわかるじゃん」と思いました。つまり、以下の二つのメソッドmethod1, method2の呼び出しで何が渡されるかは自明であると思いました。 method1 { puts 'alice@ex
Rubyで使うべき21個のワザ。元記事はこちら。翻訳ではない上に、かなり端折るので、詳しくは元記事を見てください。 Database Error C#erからすると、奇々怪々な記述が多いですね。永遠のRuby初心者なので、理解できないとこもありました。 1. ソッコー正規表現抽出 サンプルコードは(自分が理解しやすいように)変えてます。 s = "abc" s.match(/(b)(c)/)[0] # => "bc" s.match(/(b)(c)/)[1] # => "b" s.match(/(d)/)[1] # => NoMethodError s[/(b)(c)/, 1] # => "b" s[/(d)/, 1] # => nil matchの代わりに[]を使うと、マッチしてないときにエラーじゃなくてnilが返るので便利かもしれません。 2. Array#joinのショートカット %
Queueを使うとワーカースレッドが簡単に作れます。 ワーカースレッド(=仕事をするスレッド)は、キューから順番に仕事を取り出して実行するスレッドです。 これとは別に定期的に仕事を積むスレッドがいて、 ワーカースレッドは↑から仕事が積まれた場合にそれを取り出して実行します。 仕事がなければ、積まれるまで待つという動作をします。 ここで、キューへの仕事の追加と、キューからの仕事の取得は、別のスレッドで行われるため、同期制御が必要になります。 Queueを使うと、仕事を積む人とワーカースレッドの同期制御が内部で隠蔽されるため、外側での同期化なしにワーカースレッドを作ることができます。 QueueのAPIはpopとpushがあります。(他にもあるけど) Queue#popで要素を取り出します。このとき、queueが空の時、呼出元のスレッドは停止(ブロック)されます。 Queue#pushで要素を
Rubyのリフレクションについてステキな記事を見つけてしまいました。 no title 前提知識 Rubyでは何でもオブジェクトだと言われます。まずは、この辺について。 最初に思い浮かぶのはこれですね。 5.class #=> Fixnum "hello".class #=> String class自体はどうでしょうか? class Foo;end #=> nil Foo.class #=> Class ここから2つのことが解ります。Fooは定数であるということ。そしてClass型のオブジェクトを参照しているということ。 これはどうでしょう? Foo = Class.new (irb):8 warning: already initialized constant Foo => Foo 予想通りエラーになります。定数 Foo を再度初期化しようとしたからです。 Fooクラスを定義したい時
このエントリは Ruby Advent Calendar jp: 2009 : ATNDの7日目のエントリです。 上記のページに書いてあるとおり、12月中に1日から25日まで一つずつ Tips を書いていこう!という企画で、その7日目がぼくの担当となっています。 前のエントリはこっち:Ruby1.9に対してできること - takkan_mのNo planな日常 次の人はこっち: Road To RDoc - はてなかよっ! ここからが本題 みなさん irb は使っていると思われますけど irb に限らず、インタラクティブなインターフェイスがあると「ちょっとこの動作を確認したい」という時に重宝しますよね。 いきなり余談ですが 今仕事で Flex を使っているのですが irb に慣れきった体ではちょっとした動作確認などが非常に億劫で億劫で、irbのありがたみを痛感しているところです。 というわ
Ruby と MessagePack-RPC があれば、簡単なkey-valueストレージは簡単に作れます。54行で書けます(レプリケーションと負荷分散機能付き。サーバー38行、クライアント16行)。 簡単なKVSをベースにして、ログ集計や遠隔デプロイ、遠隔管理機能などの機能を追加していけば、ちょっと便利なサーバープログラムをサクサク自作できるハズ。 この分散KVSは、(keyのハッシュ値 % サーバーの台数)番目のサーバーにkeyを保存します。また、サーバーの名前順でソートしたときの「次のサーバー」と「次の次のサーバー」にデータをレプリケーションします。 すべてのサーバーで同じ設定ファイルを使います。サーバーごとの設定は引数を自分のホスト名に書き換えるだけなので、デプロイが容易です。 MessagePack-RPC for Ruby を使うと、分散しないkey-valueストレージ*1は
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く