タグ

Rubyに関するraomitoのブックマーク (55)

  • フィボナッチ数列に関する3つのアルゴリズムの速度比較@Ruby - 簡潔なQ

    アルゴリズムの違いが速度に明確に表れるわかりやすい例のひとつであるフィボナッチ数列を使って速度比較。 気軽に多倍長が使える言語でないと、線形とlogの違いは見えづらい。 #!/usr/bin/ruby -Ku require 'matrix' def fib_recursive(n) case n when 0 return 0 when 1 return 1 else return fib_recursive(n-1)+fib_recursive(n-2) end end def fib_linear(n) a, b = 0, 1 n.times do a, b = b, a+b end return a end def fib_log(n) (Matrix[[1,1],[1,0]]**n)[0,1] end def omit_bignum(n, dig = 20) s = n.to_s

    フィボナッチ数列に関する3つのアルゴリズムの速度比較@Ruby - 簡潔なQ
  • Procを制する者がRubyを制す(嘘)

    RubyのProcの説明は巷に溢れているから今更感があるけどここ数回Procを使ったネタを書いていたらProcがかわいくなっちゃってもっとみんなにもProcのこと知ってもらいたいという欲求が生まれてきたからProcについての基的なことを僕なりのやり方でここに書くよ。長いよ。 Rubyの関数(メソッド) Rubyにおいて関数(メソッド)はファーストクラス(オブジェクト)ではありません。つまり文字列や数字や配列などの他のオブジェクトとは異なって、Rubyではそれを直接変数に代入したり、他の関数に渡したりすることはできません。 def square(n) n * n end sq = square # squareメソッドを変数sqに代入してみる # ~> -:1:in `square': wrong number of arguments (0 for 1) (ArgumentError)

    Procを制する者がRubyを制す(嘘)
    raomito
    raomito 2014/12/09
  • Symbol#to_proc でワンコールブロックを簡潔に書こう - わからん

    Ruby の foo.map(&:bar) といったコードが、どういう仕組みで、どういうときに使えるのかを解説します。 使用例 Symbol#to_proc はワンコールブロック(処理が一行しかないブロック)を簡潔に書くのに使われています。 これが、 names = ['bob','bill','mike'] names.map {|name| name.capitalize} # => ["Bob", "Bill", "Mike"] 次のように、簡潔に書けます。 names = ['bob','bill','mike'] names.map(&:capitalize) # => ["Bob", "Bill", "Mike"] ひとことでいうと、「Symbol が Proc に変換され、Proc がブロックに変換されるから」上記のような記述が可能になります。 解説 Symbol には、to

    raomito
    raomito 2014/12/09
  • Ruby block/proc/lambdaの使いどころ - Qiita

    (2015/10/13追記) 今なら、他言語には無名関数やcallback関数というものがありますねとか、イベント駆動の世界を覗いてから戻ってくるとより腑に落ちるかもしれませんとか、もう少し全体観の中で説明する気がしますが、当時は記事の様な理解が役に立ったことは事実なので、引き続き公開を続けます。 (2013/11/29追記) block_given? について Twitter上で「Kernel.#block_given?についての解説があってもよさそう」と 指摘を頂きましたので、文下部に追記しました。 概要 Ruby on Rails Tutorialのエッセンスを自分なりに整理してみる4 Railsを触る際知っていると便利なRubyの基礎 [ブロックとかシンボルとか] http://qiita.com/kidachi_/items/46a6e49b6306655ccd64 の続き。

    Ruby block/proc/lambdaの使いどころ - Qiita
    raomito
    raomito 2014/12/09
  • 「関数型Ruby」という病(1) - Symbol#to_proc, Object#method - ( ꒪⌓꒪) ゆるよろ日記

    この記事は、Rubyを書くにあたって「いかにブロックを書かずにすませるか」を追求した、誰得な連載である。 だって、ブロックって汚いじゃん?仮引数の|x|とかキモイ。 Symbol#to_proc 基中の基。 instance method Symbol#to_proc 以下のようなArrayがあって、 irb(main):003:0> arr = [:user, :entry, :article, :comment, :category] => [:user, :entry, :article, :comment, :category] 各要素をto_sしたかったら、 irb(main):004:0> arr.map{|s| s.to_s} => ["user", "entry", "article", "comment", "category"] と書くかわりに、 irb(main)

    「関数型Ruby」という病(1) - Symbol#to_proc, Object#method - ( ꒪⌓꒪) ゆるよろ日記
    raomito
    raomito 2014/12/09
  • 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

    raomito
    raomito 2014/12/09
  • インスタンスメソッドとクラスメソッドはどのようにして使い分けるべきか?(Rubyの場合) | mah365

    Rubyといったオブジェクト指向言語を学ぶと、メソッドの定義方法としてインスタンスメソッドとクラスメソッドという2通りの定義方法があることを学ぶと思います。しかし、言語自体のガイドブックには「定義方法にインスタンスメソッドとクラスメソッドがある」と書いてあるだけで、大抵その使い分けについては書かれていません。 そういう訳で、このエントリではその使い分けについて少し考えてみたいと思います。理論的に厳密な使い分けを目指すというよりは、そもそも使い分けの検討が全くつかない!という方に向けて、その指針の一助となることを目指します。 インスタンスメソッドとクラスメソッドとはそもそものところ、Rubyといった「オブジェクト指向の考え方」を実装した言語の機能です。その機能がなぜあるのか?というそもそものところは、オブジェクト指向の考え方にさかのぼることになります。 そこで、インスタンスメソッドとクラスメ

    インスタンスメソッドとクラスメソッドはどのようにして使い分けるべきか?(Rubyの場合) | mah365
  • Rubyにはウンザリ!動的型付け、副作用、およびオブジェクト指向プログラミング全般からの考察 | POSTD

    この記事を書き上げるには、相当長い時間がかかりました。来は今年の年明け、 Rubyの死 やデイヴィッド・ハイネマイヤー・ハンソンの TDDは死んだ がアップされて騒ぎになる前に投稿するつもりだったのです。昨年末に書いたツイートを見てください。 > Rubyにはもう飽き飽きした。理由はいろいろあるが、特にその副作用と、ステータスが可変なせいで大量のユニットテストを書かされるのにはウンザリだ。 @abevoelker Rubyの開発に関しては、大勢の人が心のどこかで何かおかしい、何かが欠けていると思っているようですが、たいていの人は責める対象を間違っています。Rubyで書いたアプリがとんでもない代物になったって? それはあなたがきちんとテストコードを書かなかったか、テスト駆動開発(TDD)の指針に則って開発しなかったからです。もしくは、正しいデザインパターンに切り分けるための知識が不足してい

    Rubyにはウンザリ!動的型付け、副作用、およびオブジェクト指向プログラミング全般からの考察 | POSTD
    raomito
    raomito 2014/08/29
  • Big Sky :: bundle exec がウザい

    ruby のアプリを動かす時にいちいち bundle exec って書くのがダルい。書きたくない。でもシステムに入ってたり違うバージョンの物が動いて変な動作をされても困る。 どうにかしてこのダルさを解消できないかと考えてみた。 まず rbenv を使ってるなら gem でインストールされるコマンドは必ずシェルのラッパとして生成され、そこから物が起動する様になっている。例えば rails であれば以下の様なシェルになっている。 #!/usr/bin/env bash set -e [ -n "$RBENV_DEBUG" ] && set -x program="${0##*/}" if [ "$program" = "ruby" ]; then for arg; do case "$arg" in -e* | -- ) break ;; */* ) if [ -f "$arg" ]; th

    Big Sky :: bundle exec がウザい
    raomito
    raomito 2014/03/14
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    raomito
    raomito 2014/01/24
  • 新人エンジニアに読んで欲しい英語ドキュメントまとめ (Ruby/Rails編) - Wantedly Engineer Blog

    こんにちは!エンジニアの川崎です。 嬉しいことに、Wantedly開発チームの仲間は2013年の1年間で2倍に増えました。2013の最初には自分、 awakia と reikubonaga の3人でしたが、 デザイナなのにXCodeも使いこなす ferasyahin、 Chef使いのプロダクティビティ・エンジニア spesnova、それからこのブログのデザインもやってくれたエンジニア imaimiami の加入で合計6人になりました。最近ではさらに kento や shin-en がインターンとして活躍してくれています。 Wantedlyに入社してくるエンジニアは、なぜかRubyRailsもやったことのない人ばかりなので(自分もそうでした)、 今日はそんな彼ら新人のために、Ruby/Railsで開発をするときに役立つページをまとめてみました。 初めてRails開発をする人に参考にして欲し

    新人エンジニアに読んで欲しい英語ドキュメントまとめ (Ruby/Rails編) - Wantedly Engineer Blog
  • ruby スレッドの同時実行数を制御する - それマグで!

    Ruby のスレッドをバンバン起動したい。 起動前に現在の実行数を調べたり、Queue.push したりするの面倒すぎるので、もっと単純に制御したいとおもっていて、Threadにモンキーパッチを当てる方法が思いついた。 同時実行数を指定したスレッド化 #!/usr/bin/env ruby # coding : utf-8 #スレッド条件を制限したい class << Thread alias_method :original_new, :new def Thread.new(*args, &block) if Thread.main[:max_concurrent] and Thread.main[:max_concurrent] > 0 then while(Thread.list.size >= Thread.main[:max_concurrent]) do Thread.pas

    ruby スレッドの同時実行数を制御する - それマグで!
    raomito
    raomito 2013/11/29
  • Ruby の Monitor と ConditionVariable の使い方 - Mame the hack

    Ruby の Monitor と ConditionVariable の使い方 なかなかぐぐっても日語の資料が見つからなかったので自分で動かしてみた。(ぐぐる能力低い) まずThreadの直列化 require "thread" require "monitor" moni = Monitor.new val = 0 Thread.new { 3.times { puts "thread1 start: #{val}" val+=1 sleep 0.1 puts "thread1 end: #{val}" } } Thread.new { 3.times { puts "thread2 start: #{val}" val+=1 sleep 0.1 puts "thread2 end: #{val}" } } sleep 結果は以下の通り。 start > end, start > en

    Ruby の Monitor と ConditionVariable の使い方 - Mame the hack
    raomito
    raomito 2013/11/29
  • Rubyでマルチスレッドプログラミング|TechRacho by BPS株式会社

    RubyはWeb界隈でよく使われてるスクリプト言語の中では比較的簡単に割と格的なマルチスレッドプログラムを書くことができます。 うまく使うとI/O待ちで遅くなっているが、必ずしも順番に行う必要のないプログラムの実行時間を短縮したりすることができます。(たくさんのURLにアクセスしてレスポンスを取得してくるクロウラーなど) しかし現在最も広く使われているRuby1.8ではスレッドの実装はいわゆるグリーンスレッドという実装で、OSによるスレッドを使えないため、マルチコアの恩恵を受けることができないので、大量のデータをマルチコアで処理する目的などで使っても効果が薄い(どころかまったくない)可能性が高いです。 Ruby1.9ではRubyでスレッドの動きを制御しているものの、ネイティブスレッドベースでの動作となっているため、マルチコアの恩恵を受けることができます。 それではさっそく、配列の各要素を

    Rubyでマルチスレッドプログラミング|TechRacho by BPS株式会社
    raomito
    raomito 2013/11/27
  • [ruby-list:283] TUTORIAL(sono:4) - thread

    Subject: [ruby-list:283] TUTORIAL(sono:4) - thread From: matz@ e m o p Y i r M s o ) Date: Mon, 27 May 96 18:08:56 JST References: * まつもと ゆきひろ@トヨタケーラムです. 久々にチュートリアルを書いてみます.今回のお題は0.99で追加さ れた新機能であるthreadです. # 今までのチュートリアルとレベルがいきなり違いますが,許して # ください. -- Thread 1.はじめに Rubyではthread機能はコンパイル時に設定されるオプションです. 手元のrubyでthreadが使えるかどうか調べるためにはコマンドライ ンから以下のように入力してみてください. % ruby -le 'print defined?(Thread)' この結果 clas

    raomito
    raomito 2013/11/22
  • RubyでANSIカラーシーケンスを学ぼう!

    CUIの世界は地味な世界です。真っ黒なターミナル画面に単一色の文字列。それが却って落ち着くという向きもありますが、今となってはその地味さは際立っています。 ターミナルで色を使う方法を学ぶことで、新しい世界が開けるかも知れません。 ようこそANSIカラーの世界へ! エスケープシーケンス ターミナルで色を使うためにはエスケープシーケンスというものを利用します。エスケープシーケンスはターミナル上で色を含む特定の制御を実現するための特殊な文字列です。 これによりターミナル上に赤文字で「hello」と出力されます。この”\e[31m” “\e[0m”の部分がエスケープシーケンスです。”\e[31m”はそれ以降を赤文字で出力する制御命令、”\e[0m”はそれ以降を初期状態へリセットする制御命令です。 シーケンス中の数字において、30~37は文字色、40~47は背景色、0~9は文字装飾に割り振られていま

    raomito
    raomito 2013/11/18
  • homebrew で入れた openssl を使って Ruby をコンパイルすると SSL 利用時に証明書エラーが発生する場合の対応 - Qiita

    さて、皆さん割と homebrew で openssl 入れて brew link しちゃってる人も多いと思います。そんな環境でその openssl を使って Ruby をコンパイルすると、OpenSSL 利用時に証明書エラーが発生します。 $ pry [1] pry(main)> require 'open-uri' => true [2] pry(main)> open('https://www.google.com/').read OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed from ~/.rbenv/versions/2.0.0-rc2/lib/ruby/2.0.0/net/http.rb

    homebrew で入れた openssl を使って Ruby をコンパイルすると SSL 利用時に証明書エラーが発生する場合の対応 - Qiita
    raomito
    raomito 2013/11/16
  • エラー:OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed - #tech

    症状 ruby で任意のwebサーバーに対してHTTPS接続を行おうとするとエラーが発生した。 エラーの内容は次の通り。 OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed問題となった ruby のコードは以下のような感じになっていた。 # ... https = Net::HTTP.new('example.com', 443) https.open_timeout = SYSTEM_TIMEOUT_SEC https.read_timeout = SYSTEM_TIMEOUT_SEC https.use_ssl = true https.verify_mode = OpenSSL::SSL::VERIF

    エラー:OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed - #tech
    raomito
    raomito 2013/11/16
  • 川o・-・)<2nd life

    Perl での print debug の方法の紹介がブーム(?)だったので、自分がよく行ってる Ruby での debug 方法7つについて書いてみます。 p ご存じの人も多い Kernel#p メソッド。これを使うとオブジェクトの内容を見やすい形で出力してくれます。 >> p ({:foobar => :baz}) {:foobar=>:baz}Object#inspect を使うと、p で出力するときと同じ文字列を String として取得できます。 >> puts ({:foobar => :baz}).inspect {:foobar=>:baz}初心者の頃この p での出力を使う方法がわからなくて困った記憶が…。 pp pp というライブラリを使うと、p より、より見やすい形式で出力してくれます。たとえば >> a = Array.new(10) { {:foobar => :

    川o・-・)<2nd life
    raomito
    raomito 2013/11/14
  • requireとincludeとextendとmodule_function(1) : As Sloth As Possible

    Rubyで自作の外部モジュールを読み込む方法 - include と extend と module_function - (゚∀゚)o彡 sasata299's blogを読んでて、もしかしたらちょっと誤解があるのかなと思ったのでrequireとincludeとextendの話を。 requireはKernelモジュールのメソッド Rubyで外部ライブラリを読み込むには、require を利用します。 Rubyで自作の外部モジュールを読み込む方法 - include と extend と module_function - (゚∀゚)o彡 sasata299's blog これはその通り。もっと具体的に言うと、requireは引数のファイル名のRubyファイルを読み込んで実行するメソッドです。引数が絶対パスだったときはそのファイルを、そうでない場合はロードパスを優先順位上位から辿って最初

    requireとincludeとextendとmodule_function(1) : As Sloth As Possible
    raomito
    raomito 2013/10/08