タグ

rubyに関するwhitech0c0lateのブックマーク (136)

  • Writing Fast Rubyというスライドが良い | mah365

    ちょっとしたコードの書き方でパフォーマンスが変わることがあります。リーダビリティを重視する向きからすれば小手先のテクニックに映るかも知れないのですが、リーダビリティを維持しながらちゃんとしたパフォーマンスを出すためにも、テクニックを知ることは大事なことだと思うのです。 結構違うもんですなー というわけで、そんなテクニックをまとめたスライドがWriting Fast Ruby。見ていて参考になったのでメモ。 たとえば引数に&blockをとってcallするよりも、yieldの方が5倍速い、とか、 def slow(&block) block.call end def fast yield end mapにブロックを渡すよりも、シンボルを渡す方が20%速い、とか (1..100).map {|i| i.to_s} (1..100).map(&:to_s) mapしてからflattenを呼び出すよ

    Writing Fast Rubyというスライドが良い | mah365
  • RubyのOptionParserの底力を知る - ザリガニが見ていた...。

    コマンドは、以下のような書式でオプションと引数を設定して、実行する仕組みになっている。 例: コマンド名 オプション オプション オプション引数 オプション コマンド引数 optparser_test.rb -a -b VALUE --foo FILE_PATH 実際にコマンドを作ろうとすると、オプションの解析には手間がかかると気付く。 そのため、多くの言語環境にはオプション解析用のライブラリが用意されている。 Rubyのoptparserについて、基的な使い方は知っているつもりだったが... Rubyでコマンドの中身を作るまで - ザリガニが見ていた...。 ちょっと気の利いたコマンドにしようとすると、その使い方は謎だらけになった。 どうしたら苦労最小限でオプションを解析できるのか、調べてみた。 基 require 'optparse' OptionParser.new do |op

    RubyのOptionParserの底力を知る - ザリガニが見ていた...。
  • ソニックガーデンで行われているコードレビューの具体例をお見せします (SonicGardn Study #11 の補足として) #sg_study - give IT a try

    はじめに 2014年8月11日の晩に放送されたソニックガーデンのweb勉強会、SonicGardn Studyでは「いつまでクソコードを書き続けるの? 〜出来るプログラマだけが知っているコードレビュー7つの秘訣〜」というタイトルで、弊社ソニックガーデンの西見さん(@mah_lab)が講演してくれました。 デキるプログラマだけが知っているコードレビュー7つの秘訣 from Masahiro Nishimi いつまでクソコードを書き続けるの? 〜出来るプログラマだけが知っているコードレビュー7つの秘訣〜 - YouTube この放送の中でも触れられていたように、ソニックガーデンではコードレビューを大事にしています。 ただ、勉強会のスライドの中では具体的なコード例や指摘の例がほとんど出てこなかったので、「実際どんな感じなの?」という疑問を持った方もいたんじゃないかと思います。 そこで今回は「入社

    ソニックガーデンで行われているコードレビューの具体例をお見せします (SonicGardn Study #11 の補足として) #sg_study - give IT a try
  • [その1] Rubyプログラマー向けのGo言語の解説 - ワザノバ | wazanova

    http://www.sitepoint.com/go-rubyists-ii/1 comment | 0 pointsGlenn Goodrichが、Rubyプログラマー向けにGo言語のinterfaceとWeb.goを紹介しています。1回目はまずは、interfaceから。 The Fallacy of Inheritance 継承は些細な修正も実装が面倒になり、コードが複雑になる可能性があります。例えば、Horseクラスと二つのサブクラス、GallopingHorseとSadHorseがあったとします。(その二つはステートの違いだけでなく、まったく性格の違うサブクラスかもしれません。)sadな雰囲気で、gallopをしているhorseがいる場合はどうするか?それぞれのクラスである振る舞いがロックアップされることになるかもしれません。また、type間の関係を考慮しなくてはいけなくなるの

  • Ruby プロセスを追いかけるツール(プロファイラとか)10選 - sonots:blog

    Ruby プロセスを追いかけるツール(プロファイラとか)10選 - sonots:blog
  • Rubyでマルチスレッド・マルチプロセスのプログラムを書くならParallelが便利 - ワシはワシが育てる

    Rubyでは比較的簡単にマルチプロセス、マルチスレッドのプログラミングができますが、それでもやや煩雑な書き方になってしまいます。 それらの処理を簡単に書くためのライブラリとしてparallelがオススメです。 ループの前に少し構文を加えるだけで簡単にマルチな処理が実行できます。 # 普通に書くとこんな感じ [1, 2, 3, 4, 5, 6].each do |i| p i end # Parallelを使って処理 Parallel.each([1, 2, 3, 4, 5, 6], in_processes: 6) do |i| p i end このように先頭にParallelを付けるだけです。 またActiveRecordを使用する際は、スレッド・プロセスが生成される度にデータベース接続を行うとデータベース側でエラーとなってしまうので、Parallelに限らずマルチでの処理では以下のよう

    Rubyでマルチスレッド・マルチプロセスのプログラムを書くならParallelが便利 - ワシはワシが育てる
  • Rubyオプションあれこれ

    これはRuby Advent Calendar jp: 2011への参加エントリ、12月6日分です。5日は@zonu_exeさんのRuby vs Python! ~def vs def~でした。7日は@nari3さんのChipでWebページ上のコードを簡単に扱おうです。 さて、Ruby(MRI)にどのようなコマンドラインオプションがあるか、皆さんは把握しているでしょうか? -e とか -r はポピュラーですね。今日は、確認(おさらい)の意味で、 それらも含めたMRIのコマンドラインオプションの中からいくつかピックアップして解説したいと思います。 なお、文中に実行例がある場合は、 ruby 2.0.0dev (2011-12-04 trunk 33940) [x86_64-darwin11.2.0] を使用しています。 まずは知名度の高そうなものから: -v / -wいずれも、冗長モードに関

    Rubyオプションあれこれ
  • respond_to について調べてみた | DevelopersIO

    こんにちは。クラスメソッドの稲毛です。 respond_to は、Ruby on Rails のアクションメソッド内でリクエストフォーマット(html, json, etc...)に応じた処理の記述で見かけます。 respond_to do |format| format.html { ... } format.json { ... } end どのような仕組みで動作しているのか気になっていたので少し調べてみました。 処理の流れ おおまかな処理の流れは下記のようになっていました。 respond_to メソッドの呼び出し Collector オブジェクトの生成 respond_to 引数ブロックの評価 Mime タイプ毎の処理を収集 Collector から response の取得 response の実行 respond_to メソッドの呼び出し 省略されている丸括弧を付与し簡略化する

    respond_to について調べてみた | DevelopersIO
  • Rubyソースコード完全解説 / 青木峰郎

    $Id: index.html,v 1.6 2004/07/20 23:08:12 aamine Exp $ この文書は書籍『Rubyソースコード完全解説』のHTML版です。 ただし初校段階の原稿をベースにしているため、 書籍では修正されている間違いが残っている場合があります。 予め御了承ください。 2004-02-16 に全章を公開しました。 目次 まえがき 序章 第 1 部「オブジェクト」 第 1 章「Ruby言語ミニマム」 第 2 章「オブジェクト」 第 3 章「名前と名前表」 第 4 章「クラス」 第 5 章「ガーベージコレクション」 第 6 章「変数と定数」 第 7 章「セキュリティ」 第 2 部「構文解析」 第 8 章「Ruby言語の詳細」 第 9 章「速習yacc」 第 10 章「パーサ」 第 11 章「状態付きスキャナ」 第 12 章「構文木の構築」 第 3 部「評価」 第

  • 行指向ドキュメント処理で活躍するRubyのだんご化3兄弟といったら...

    Rubyにはアクセスログのような行指向ドキュメントなどを、任意の条件で複数の束にまとめ上げる便利なEnumerableのメソッドが3つあります。group_by, chunk, そしてslice_beforeです。これらはRubyの「だんご化3兄弟」としてRubyistの間で広く知られています1。 簡単に言えばこれらのメソッドは、行単位のデータに対し以下の処理を実現するものとして表現できます。 group_byは、同一条件の行を総まとめするメソッド。 chunkは、同一条件の行を部分まとめするメソッド。 slice_beforeは、指定行を先頭に後続行を部分まとめするメソッド。 (もちろん、これらのメソッドは行単位データ以外のEnumerableなデータに適用できます。) group_by instance method Enumerable#group_by 最も直感的なメソッドはgro

  • 【Ruby】マルチスレッドの基本 : あんちょこ

    現在のところ(Ruby3.0)、Rubyはネイティブスレッドを1つしか利用することはできない。それゆえ、CPUのマルチコア性能を活かす目的でThreadは使えない。そちらの目的ではProcessを使う必要がある。Rubyでマルチスレッドプログラミングをする主な目的は非同期のイベント処理やI/O待ち時間の緩和だろう。このとき、最低限抑えておかないといけないのがThreadとQueueだ。Threadクラスがスレッドの生成・分岐と合流を担うのは理解しやすいが、Queueはやや分かりにくい。これはスレッド間で共通の処理対象を保管するスタックのように使う。Queueに積みあがった処理対象をThreadが順番に取っていきながら処理を進めるイメージである(図参照)。 では、さっそく使用例を見てもらおう。0から1のランダムな少数の配列を3つのスレッドで順番に処理していくという単純なものだ。ただし、数字の

    【Ruby】マルチスレッドの基本 : あんちょこ
  • 1人でよいコードを書く - 鳩舎

    1人でよいコードを書くのは、3人でよいコードを書くことの3倍難しい。悪いコードを書くときに説得する人間が 1/3 でよいので、つまり自分に向かって『まぁいいじゃん今回は』と言えば事が済む。続けているといつの間にか引き返せないところまできていて、適当に書いた個人プロジェクトは設計的破綻を起こし、コーディング規約もなにもあったもんじゃないという破滅が待っている。 ということで、1人でよいコードを書くために。今回は Rails プロダクトを1人で書くとして。 rubocop コーディング規約と、あまりに長すぎるメソッドやあまりに長いクラス定義などを見つけてくれる。全てに従うと厳しすぎて死ぬので、適宜各チェッカを無効にするのがよい。 僕はこんな感じの設定で使っている。 AllCops: Includes: - Rakefile - Gemfile - config.ru Excludes: - b

    1人でよいコードを書く - 鳩舎
  • 結局、Rubyの特異メソッドって何なの? - (゚∀゚)o彡 sasata299's blog

    2010年10月27日11:09 Ruby 結局、Rubyの特異メソッドって何なの? 今日は 特異メソッド について理解を深めるために書いてみます。説明の中にメソッドが色々出てきてややこしいですが、このルールで使っています。m(_ _)m c_method # クラスメソッド e_method # 特異メソッド i_method # インスタンスメソッド 特異メソッドっていうのは、オブジェクト固有のメソッドです。あるオブジェクトにはあるけど、同じクラスの別のオブジェクトにはそのメソッドは無い、みたいなメソッドですね。 class MyClass; end obj = MyClass.new obj2 = MyClass.new def obj.e_method puts "e_method called" end obj.e_method # e_method called obj2.e_

  • Rubyでメタプログラミング 〜暗黙的に呼ばれるto_procメソッド - (゚∀゚)o彡 sasata299's blog

    2011年01月08日23:09 Ruby Rubyでメタプログラミング 〜暗黙的に呼ばれるto_procメソッド 先日、こんな感じの処理に遭遇しました。はて、、何じゃこりゃ・・(´・ω・`) ポカーン (1..5).each(&method(:puts)) と思って調べたのでまとめておきます。この処理が理解できれば一人前です。きっと。 ブロックはオブジェクトではない Ruby では大抵のものがオブジェクトですが、オブジェクトではないものも一部あります。ブロックがその一つです。 例えばこんな風にブロックを定義することは出来ません。 block = { "test" } # in:1: odd number list for Hash そもそも Ruby の構文ではハッシュとして扱われるためブロックを直接生成することは出来ません。Block.new みたいな構文も無いので、ブロックは ti

  • Rubyのチートシート / アクティブサポート

    Railsで使いまくりActive Supportなので、そんなにまとめがいが無いし、沢山あるのでまとめられないけれど、代表的なモノをとりあえずまとめておく。 blank?やpresent?やtryなんかは省略する。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

    Rubyのチートシート / アクティブサポート
  • Rubyのチートシート 変数 / クラス / モジュール

    Rubyをさわり始めた時に戸惑ったインスタンス変数やクラスインスタンス変数なんかのためのチートシート。変数、クラス、モジュールの使い方についてざっとまとめてみた。RailsでGemばっかり使ってると忘れるんだよなー。 登場人物はこんな感じです。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 9

    Rubyのチートシート 変数 / クラス / モジュール
  • Rubyのyieldは羊の皮を被ったevalだ!

    Yugui著「初めてのRuby」の9章に、Rubyの黒魔術の一つとしてeval族と称されるメソッド群が紹介されている。 初めてのRuby 危険らしい。素人が安易に手を出すべきではなさそうだ。でも魅力的らしい。 暗黒の世界に引かれていく自分がいる… 勉学のために覗くだけならいいだろうし、危険であればその正しい理解がより重要になるだろう。自分が学んで理解したことをここに整理してみよう。 eval族と呼ばれるものには、instance_evalメソッド、class_evalメソッド(またはmodule_eval)、および組み込み関数evalがある。 instance_eval Ruby空間における操作対象はオブジェクトである。オブジェクトは外からのメッセージを受け取ると、その中の対応するメソッドを起動して、そこに書かれている手続きを実行する。 メソッドは他のオブジェクトを引数として取ることができ

  • 知らない内に活用してるメソッド to_proc - 成らぬは人の為さぬなりけり

    Ruby1.9を使用している人は知らないうちに(?)活用してると思いますが。 Ruby1.9から、Symbol#to_procを使用するのにライブラリは不要になりました。 初めて見た時は、なんじゃこりゃーー、と思ったけど、 意味が分かれば、どうってことは無い。 例えば、こんなコード class Hoge attr_reader :name def initialize(name) @name = name end end p [Hoge.new("first"),Hoge.new("second"),Hoge.new("third")].map(&:name) p [Hoge.new("first"),Hoge.new("second"),Hoge.new("third")].map{|hoge|hoge.name} (Scalaだとコンストラクタがもっと簡潔で良い感じに書けるんだけどなぁ

    知らない内に活用してるメソッド to_proc - 成らぬは人の為さぬなりけり
  • メタプログラミングをして割に合うかの判断基準:処理を1箇所に局所化できるか - 2014-01-16 - ククログ

    毎日他の人のコミットをながめる文化で生活していると、理由は浮かばないけど「ん?このコミットはなんか気になる」と感じるようになります。それは、新しいことを知ることができたコミットだったり、真似したくなるようなコードが入っているコミットだったり、なんかまずそうな気がするコミットだったり、様々です。 「ん?」と感じてコミットを見直してみても、何が気になったか自分でもすぐにわからない場合があります。そんなとき、気になったことをコミットした人に伝えるために、コミットへのコメントをまとめ始めます。「コミットした人に伝えるため」というように、他の人に伝えようとすることがポイントです。他の人に伝えるためにまとめようとすると、思いの外なにが気になったかまとまるものです。 今回は、メタプログラミングを使ってコードを整理したコミットで「ん?」と感じたときのことについて紹介します。このおかげで「メタプログラミング

    メタプログラミングをして割に合うかの判断基準:処理を1箇所に局所化できるか - 2014-01-16 - ククログ
  • Ruby の http ライブラリの通信を表示する http-dump を作った - 2nd life (移転しました)

    Ruby 上で http を叩いた通信見たい時に、毎回同じ事をやってるので抽象化して http-dump というライブラリを作った。 https://github.com/hotchpotch/http-dump $ gem install http-dump require 'net/http' require 'uri' require 'http-dump' HTTPDump.dump { Net::HTTP.get(URI('http://example.com')) } と http でやりとりしてるコードを block で囲むと、以下のように出力される。 > GET http://example.com/ with headers {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=

    Ruby の http ライブラリの通信を表示する http-dump を作った - 2nd life (移転しました)