タグ

rubyに関するrryuのブックマーク (82)

  • to_sとto_strの違いのメモ - kitak blog

    Object#to_sはオブジェクトの文字列表現. Kernel#printやKernel#putsは文字列以外のオブジェクトが引数に渡された場合にこのメソッドを使って文字列に変換する. to_strは暗黙の変換用. 暗黙の変換...? オブジェクトが「文字列が使われるすべての場面で代置可能であるような、文字列そのものとみなせるようなものという厳しいもの」とある. class Test def to_s 'to_s' end def to_str 'to_str' end end t = Test.new puts "#{t}" # "to_s" puts "123"+t # "123to_str" puts "to_strrrrr".include?(t) # 引数は"to_str"に変換される Matzいわく「Stringと類似のメソッド集合を持たないオブジェクトはto_strを定義す

    to_sとto_strの違いのメモ - kitak blog
    rryu
    rryu 2013/11/13
    ActiveSupport::SafeBufferのto_sがselfを返しto_strがStringを返すのは仕様ってことでいいのだろうか。
  • ActiveRecord::Core.generated_feature_methods が何をしているか?

    今日参加させて頂いたKobe Rubyist Meetup 1stで話題になった、 ActiveRecord::Core.generated_feature_methods の意味が良く分からない問題を追跡してみました。 ■疑問 @sutetotanuki さんより下記のコードの意味が分からないとの質問がありました。 以前から私も良く分からないコードだな~と思っていたのですが、理由を良く知りませんでした。 97 def generated_feature_methods 98 @generated_feature_methods ||= begin 99 mod = const_set(:GeneratedFeatureMethods, Module.new) 100 include mod 101 mod 102 end 103 end moduleをその場で生成しincludeしている

    rryu
    rryu 2013/11/01
    すでにインクルードしてあるモジュールにメソッドを追加することでオーバーライドの優先順位を制御する話。
  • TRICK 2013 @ RubyKaigi - d.y.d.

    22:41 13/06/01 TRICK 2013 @ RubyKaigi いろは歌。 in Ruby. !@THEqQUICKbBROWNfFXjJMPSvVLAZYDGgkyz&[%r{\"}mosx,4>6]|?'while(putc 3_0-~$.+=9/2^5;)<18*7and:`# ということで、ASCII の制御文字じゃない部分、' ' (0x20) から '~' (0x7E) まで95文字をちょうど一回ずつ使って、 その95文字をちょうど一回ずつ標準出力に書くプログラムです。Ruby会議に合わせて開かれた TRICK 2013 という、プログラムの"お前はなにをやっているんだ度"を競うコンテストに出してみたら優勝してしまいました。 やった! 簡単な解説 「各文字を1回しか使わない」 という制約が真っ先に効いてくるのは、 これすなわち、 1個の変数を1度しか使えない、 とい

    rryu
    rryu 2013/06/02
    TRICK 2013の優勝作品「printableなASCII文字95文字をちょうど一回ずつ使いつつ、その95文字を標準出力に書くプログラム」の解説。
  • Visualizing git blame

    Git には git blame というコマンドがあり(他のツールでも同様の機能は提供されている)、これを使うことでソースコードのどこを書いたのが誰か、という情報がline-by-lineで取得できる。この情報は行単位なので一次元の情報だけれど、適切な空間充填曲線に乗せることで二次元にマッピングできて、それに適当に作者ごとに色をつけるということをやってみると色々楽しい。そのスクリプトはひじょうにstraight-forwardな記述だとこういった感じになる。上の絵はruby 1.8.7に対する実行結果で、ChangeLogとかのあきらかに面白くないファイルは除外してあるからまあ、そのままの結果ではないけれど、これを見ると色々な思いが去来する。 Ruby 1.8.7 は多数の開発者が手を入れており、少数の支配的な貢献者といったような存在をみいだすことができないしかしながら、全体がのっぺりと灰

    Visualizing git blame
    rryu
    rryu 2013/06/02
    なかなか興味深い。
  • 第一回 超絶技巧 Ruby 意味不明コンテスト in RubyKaigi

    Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode

    rryu
    rryu 2013/04/02
    投稿されるコードを想像するだけでおそろしい。
  • Rubyのcaseを〇〇(言語名)のswitch文だと思っている人たちにぼくから一言ガツンと申し上げたい

    Rubyのcase」を一瞥し「あー要は〇〇(言語名)のswitchね」などと早合点し、その後もその真の価値を知ることなく一生を終えるプログラマが近年跡を絶たない。加えて、「今更条件分岐?RubyはOOPなんだからポリモフィズムじゃね?」とか「HashにProc突っ込んでcallするのがオレ流。」とかうそぶく人たちもまた増加の一途を辿っている。 そんな世の中にあって、ぼくは一言、できればガツンと一言申し上げたい。生まれも育ちもRubyなぼくから、是非ともそんな人たちに「Rubyのcase」について一言申し上げておきたい。 ─ 問題1 ─ 名前name、レベルlevel、ポイントpointの各属性を持った複数のCharacterオブジェクトcharlie, liz, benがある。 class Character < Struct.new(:name, :level, :point) def

    rryu
    rryu 2013/02/26
    ワシのcase式は108式まであるぞ的な。===は比較演算子というよりcase式の為のインターフェースで結構恣意的に定義されているので暗記してないと挙動が読めなくてきつい。
  • 本当はこわいエンコーディングの話 // Speaker Deck

    東京Ruby会議10 で発表したスライド

    本当はこわいエンコーディングの話 // Speaker Deck
    rryu
    rryu 2013/01/14
    Rubyのエンコーディングの本当の怖さはIOをバイナリで使う方法が謎過ぎるところかなあ。
  • ruby1.9時代にrcovは使ってはいけない。simplecovを使おう!

    ■概要 rubyにおけるテスト網羅率の定番ツールといえばrcovですが、どうもテストの通っている箇所の色付けがおかしいのと網羅率に誤差があると感じてました。 よくよくgithubのrcovのページを見てみると、 NOTE: This fork does not work on Ruby 1.9.x. For coverage on Ruby 1.9 look at SimpleCov. Even if you get results on 1.9 they will probably be inaccurate. Ruby 1.9 has call detection built in for faster, more accurate results. なんて書いてあります。という訳でSimpleCovを試してみました。 なおこちらで簡単にセットアップできるシェルスクリプト置いてます!

    rryu
    rryu 2012/08/20
  • Rails3.2 + RSpecで楽しいTDD(導入編)

    さて、標題にはTDDと書いてますが実際にはコード書いてからテスト書いてたりしてます。 手元でちまちま書いてるアプリもさすがにテストも無しではいかんだろうということで まずは手元にあるコードのカバレッジが100%となるテストを書き、 その後次に何か乗っける時からはテストから書いていきたいと思います。 というわけで今回はテスト環境の導入編から。 この記事で前提とする環境は ・CentOS6 ・Ruby on Rails 3.2.2 ・Ruby 1.9.3 p-125 ・MySQL となっています。 (1)テストに必要なGemの導入 app_root/Gemfileに以下の記述を追加 gem 'rspec-rails' gem 'simplecov', :require => false #gem 'simplecov-rcov', :require => false gem 'spork' '

  • Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)

    『るびま』は、Ruby に関する技術記事はもちろんのこと、Rubyist へのインタビューやエッセイ、その他をお届けするウェブ雑誌です。 Rubyist Magazine について 『Rubyist Magazine』、略して『るびま』は、日 Ruby の会の有志による Rubyist の Rubyist による、Rubyist とそうでない人のためのウェブ雑誌です。 最新号 Rubyist Magazine 0058 号 バックナンバー Rubyist Magazine 0058 号 RubyKaigi 2018 直前特集号 Rubyist Magazine 0057 号 RubyKaigi 2017 直前特集号 Rubyist Magazine 0056 号 Rubyist Magazine 0055 号 Rubyist Magazine 0054 号 東京 Ruby 会議 11 直

  • http://www.machu.jp/posts/20100828/p01/

    http://www.machu.jp/posts/20100828/p01/
  • Rails と時刻 - @kyanny's blog

    時刻の扱いは難しい。タイムゾーンを跨ぐと格別に難しい。 Rails を使っていても難しさに変わりはない。むしろ時刻のやっかいな部分を隠蔽してくれるが故に余計にややこしくなることもある。 config.time_zone と config.active_record.default_timezone Rails アプリケーションで時刻を司る代表的な設定値は config.time_zone と config.active_record.default_timezone だ。いずれも config/application.rb で設定できる。詳細は Ruby on Rails Guides: Configuring Rails Applications 参照。 config.time_zone でアプリケーションのタイムゾーンを設定する。デフォルトでは UTC になる。日向けのウェブサイトで

    Rails と時刻 - @kyanny's blog
    rryu
    rryu 2012/08/18
    Timeクラスが変にタイムゾーンを持っていて、油断するとローカルタイムになってしまうのが罠っぽいと思う。
  • ASCII-8BITへの変換をどうする的な話

    Sadayuki Furuhashi @frsyuki Ruby 1.9 で、なぜ UTF-8 から ASCII-8BIT への変換が Encoding::UndefinedConversionError になるのか分からない。バイナリへの変換ができない? 2012-06-23 06:01:44 Sadayuki Furuhashi @frsyuki str.length の値が変化する変換はエラーになる? UTF-8 → BINARY やBINARY -> UTF-8 への encode は、どちらもエラー。force_encoding しか通らない。 2012-06-23 06:06:10

    ASCII-8BITへの変換をどうする的な話
    rryu
    rryu 2012/06/29
    バイナリストリームの作り方と文字列をエンコーディング変換無しにバイト列にする方法が素直でないのが混乱の元な感じが。
  • Reit VM 読み - Tociyuki::Diary

    mruby のインタープリタ Reit VM をじっくりと読んでいる最中です。 Riet VM のオブジェクト・コードの逆アセンブルリストは、bin/mruby に verbose オプションをつけると標準出力にパーサ出力の構文木出力に続いて表示されます。既存のオブジェクト・ファイルの逆アセンブルリストも、それで表示できます。最適化処理がないため、構文木からどのようにコード生成するのか、出力眺めるだけで手にとるようにわかりやすいです。 $ bin/mruby --verbose prime.rb構文木は LISP の cons を使った連結リストになっていて、car、cdr がそのままソース中に記述されているので、LISP 慣れしている自分にとってはすごく src/codegen.c が読みやすくなっててうれしいことです。できれば、verbose の出力も括弧リストで表示してくれたら、Em

    Reit VM 読み - Tociyuki::Diary
    rryu
    rryu 2012/06/06
    Lua VMとの比較の話が多い。
  • るびま

    『るびま』は、Ruby に関する技術記事はもちろんのこと、Rubyist へのインタビューやエッセイ、その他をお届けするウェブ雑誌です。 Rubyist Magazine について 『Rubyist Magazine』、略して『るびま』は、日 Ruby の会の有志による Rubyist の Rubyist による、Rubyist とそうでない人のためのウェブ雑誌です。 最新号 Rubyist Magazine 0058 号 バックナンバー Rubyist Magazine 0058 号 RubyKaigi 2018 直前特集号 Rubyist Magazine 0057 号 RubyKaigi 2017 直前特集号 Rubyist Magazine 0056 号 Rubyist Magazine 0055 号 Rubyist Magazine 0054 号 東京 Ruby 会議 11 直

    rryu
    rryu 2012/06/01
    reduceとinjectは正確には挙動が異なるので、引数無しはreduce、引数ありはinjectで決まりな感じが。
  • nil?すべきかempty?すべきか、それが問題だ!

    nil?すべきか Rubyを使っているとコードをより簡潔により美しくしたいという欲求、つまりDRY欲が加速します。 例えば次のようなコードがあります。ここでの関心はprocess_userメソッドです。 class String def some_process "Process_completed for %s" % self end end def process_user unless @user @user = 'anonymous' end @user.some_process end @user = nil process_user # => "Process_completed for anonymous" @user = 'Charlie' process_user # => "Process_completed for Charlie"

    rryu
    rryu 2012/05/20
    DRY欲的にはNilClassにも標準でempty?が欲しい一択ではないかと。まあ str.to_s.empty? でもいいけどキャストするのは何か負けた気がする。
  • 開発メモ: KCのRubyバインディングの並列化

    Kyoto CabinetRubyバインディングの使い方については以前の記事で説明してあるが、今回はそこで触れていた並列化をやってみたという話。 Ruby 1.9のスレッドモデル Ruby 1.9のマニュアルには以下のように書いてある。 ネイティブスレッドを用いて実装されていますが、現在の実装では Ruby VM は Giant VM lock (GVL) を有しており、同時に実行されるネイティブスレッドは常にひとつです。ただし、IO 関連のブロックする可能性があるシステムコールを行う場合には GVL を解放します。その場合にはスレッドは同時に実行され得ます。また拡張ライブラリから GVL を操作できるので、複数のスレッドを同時に実行するような拡張ライブラリは作成可能です。 ということは、DBMの操作をGVLを外してから行ってあげれば、DBMの操作同士およびDBMの操作とRubyコードの

    rryu
    rryu 2012/05/11
    Rubyの拡張モジュールからGVLを解除して並行実行させるrb_thread_blocking_region()について。
  • コーディング規約をまとめてみた (Ruby編) - bojovs::blog

    色々なところで見かけるコーディング規約を見て意識はしているのですが、 その時の気分で書き方を変えてしまうことが多々あったので、自戒を込めてコーディング規約をまとめてみました。 「なぜこの規約が存在するか」を明確にするために、できる限り理由も併記しています。 ただかなり主観的な部分があるので、あまり意味がないかもしれません…。 「この記事のこの規約は気に入らない。」と思うことがきっとあると思います。 その時はコメント欄などに理由も合わせて書いてくれると嬉しいです。 この記事ではRubyのコーディング規約をまとめています。 近いうちにRailsとCoffeeScriptのコーディング規約もまとめるつもりです。 Rubyのコーディング規約は以下のページを参考にまとめました。 https://github.com/styleguide/ruby https://github.com/bbatsov

    rryu
    rryu 2012/04/25
    私はthenは書く派なんだけど、もしかして少数派?
  • ついに軽量Rubyの「mruby」のソースコードが公開!:Rails Hub情報局:エンジニアライフ

    Rubyの生みの親、まつもとゆきひろさんが、ついに新しいRuby実装である「mruby」のソースコードをGitHub上で公開しました! 2012年4月20日です。ライセンスは、MITライセンスとなっています。 以下にまつもとさんがmrubyについて語るインタビュー動画を貼り付けます。18分30秒のあたりからどうぞ。インタビューは昨秋の時点でのものです。 公開されたmrubyのレポジトリから、Readmeの一部を引用します。 mrubyはISO規格に準拠したRuby言語を様々な環境で動作可能となるように軽量化したものです。モジュール構成によりインタプリタ実行形式やコンパイル&VM実行形式でも動作させることができます。 2010年度の経済産業省の地域イノベーション創出事業により開発されました。 MRI(Matz Ruby Implementation)版との互換性 以下要修正 + シンプルな文

    ついに軽量Rubyの「mruby」のソースコードが公開!:Rails Hub情報局:エンジニアライフ
    rryu
    rryu 2012/04/20
    まつもとさんは割とテスト書かない派なんだ。
  • Thinreports

    A PDF generation tools for Ruby, with design tool for editing templates. Thinreports Thinreports is a PDF generation tool that provides Thinreports Basic Editor and Thinreports Section Editor, a design tool for editing templates, and Thinreports Generator, a Ruby library for generating PDFs. Getting Started Thinreports allows you to create PDF layouts using the Thinreports Editor, and then load th

    Thinreports
    rryu
    rryu 2012/03/01
    『ThinReports は PDF 形式の帳票生成を Ruby によって実現するシンプルで新しいソリューションです』。クライアントアプリの帳票レイアウトエディタがなにげにすごい。