タグ

rubyに関するkamipoのブックマーク (306)

  • Ruby用拡張ライブラリをCで作る

    Ruby用拡張ライブラリをCで作る Rubyは、C(あるいはC++)で書いたコードを動的(あるいは静的)にリンクして利用する事ができる。うまく使えば、Rubyで書くより高速な動作が期待できる。 たとえば、GUIライブラリである「Ruby/GTK」は、描画部分にCで書かれたライブラリを利用する事で、実用的な画面描画速度を確保している。 その、Ruby用拡張ライブラリをCで書く方法である。 ■ 拡張ライブラリ作成の流れ Rubyはオブジェクト指向言語である。オブジェクト指向言語におけるプログラムとは、基的にクラス定義である(と、少なくとも私は思っている)。そこで、ここではクラス定義に話を絞る。 メソッドの実体となる関数を定義する Init関数を作る rb_define_classで、新しいクラスを作る rb_define_methodで、クラスに1で作成したメソッドを追加する Makefil

    kamipo
    kamipo 2015/02/10
  • Ruby 2.1: RGenGC · computer talk by @tmm1

    30 Dec 2013 Ruby 2.1 adds a "restricted" generational collector, with minor mark phases that dramatically reduce the cost of GC. Let's take a look at the evolution of Ruby's GC. Ruby 1.8: simple mark and sweep Classic mark and sweep implementation. The entire world is stopped during both phases. Traverse object graph from roots and mark live objects, using a bit inside the object structure (FL_MAR

    Ruby 2.1: RGenGC · computer talk by @tmm1
    kamipo
    kamipo 2014/01/04
  • 革命の日々! ruby 2.0 の dtrace featureを systemtap から使う方法

    この記事は Ruby の Advent Calendar に参加しようとして用意しましたが、間に合わなかったものです。 Ruby 2.0でdtrace対応が入りました。この機能はLinuxのsystemtapからもアクセス出来ます。でも、どこにもドキュメントがないのでいっちょ使い方を解説しようという、そういう趣旨の記事です。 まず、基の使い方ですが、以下の様に process(プロセス名).provider("ruby").mark(Rubyで定義されてるprobe名) で引っ掛けるイベント名を 記述して、tapscriptを記述します ruby.stp probe process("./ruby").provider("ruby").mark("find__require__entry") { printf("%s %s %d\n", user_string($arg1), user_

  • xmpfilterとは コンピュータの人気・最新記事を集めました - はてな

    Rubyの試行錯誤支援・テスト支援ツール。 「# =>」という注釈記号を入れた行に式の値を注釈したり、Test::UnitのassertionやRSpecのexpectationを自動で入れてくれる便利なツール。 rcodetoolsパッケージに入っていて、RubyGemsパッケージがあるので、「gem install rcodetools」でインストールできる。 READMEより… a, b = "foo", "baz" a + b # => a.size # => これを「xmpfilter」にかけると、 a, b = "foo", "baz" a + b # => "foobaz" a.size # => 3 こうなる。 Test::Unitでは、 def test_insertion @o.insert "bar" @o.insert "baz" @o.size # => @o.l

    xmpfilterとは コンピュータの人気・最新記事を集めました - はてな
    kamipo
    kamipo 2013/01/22
  • 本当はこわいエンコーディングの話 // Speaker Deck

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

    本当はこわいエンコーディングの話 // Speaker Deck
  • RailsじゃなくてもActiveSupportの自動require機能を使う - 昼メシ物語

    Railsでは、 config/application.rb で config.autoload_paths << Rails.root.join("lib") と書いておくと、例えば $ cat lib/my_library.rb class MyLibrary : endみたいなファイルが置いてあれば、Railsアプリ内で MyLibrary クラスを特にrequireしなくても使える。これは ActiveSupport::Dependencies というクラスが const_missing をフックして、 autoload_paths にあるディレクトリの中から適切なファイルを自動requireしてくれるから。 これは大変便利なので、Railsじゃないアプリから使いたい。 やりかた require 'active_support/dependencies' ActiveSupport

    RailsじゃなくてもActiveSupportの自動require機能を使う - 昼メシ物語
  • 【Ruby】each_with_indexは知ってたけどeach.with_indexは知らなかった… - 訳も知らないで

    もっと早く知りたかった… ってことRubyとかRailsとか多いですよね。 知らなかったけど便利クラスやメソッドがあったんだ、みたいな。 例えばRubyで配列の中身を順番に表示するとき、each使ったりしますよね? list = [a,b,c] list.each { |val| puts val } で、インデックスも一緒に使いたいって時は each_with_index使ってました。 list = [a,b,c] list.each_with_index { |val, index| puts "#{index + 1}番目の値は#{val}です" } インデックスは取得できるんですけども、 インデックスって0から始まるので、上記のようにn番目、みたいなのを出そうと思うと index + 1しなきゃいけないんですよね。 よくある。 …と思ってたら、 with_index というメソッド

    【Ruby】each_with_indexは知ってたけどeach.with_indexは知らなかった… - 訳も知らないで
    kamipo
    kamipo 2012/11/21
  • Yet Another Ruby Shootout - Igor Alexandrov

    kamipo
    kamipo 2012/11/14
  • Rubyのエンコーディングその2 - tmtms のメモ

    この前「Rubyのエンコーディング」という記事を書いたのですが、それをネタに 8/25 の NSEG で発表しました。 Rubyのエンコーディング from Masahiro Tomita この中で、エンコーディングが原因で予期しないところで落ちてしまうことが結構あるという話もしたんですが、今回はプログラムが落ちないようにするにはどうすればいいかを考えてみます。 エンコーディングが原因で落ちてしまうのは大体次のパターンのようです。 文字列や正規表現のエンコーディングが異なる 文字列中に不正な文字が含まれている 文字列や正規表現のエンコーディングが異なる 正規表現をリテラルで生成していれば、エンコーディングは敢えて指定しない限りは普通はスクリプトエンコーディングになってると思うので、問題は文字列の方です。 特にファイルから読み込んだ文字列のエンコーディングが何になっているかに注意しましょう。

    Rubyのエンコーディングその2 - tmtms のメモ
  • Ruby の Proc オブジェクトと Method オブジェクトの違い (proc, lambda, ブロック, メソッドについて) - vivid memo

    プログラミング言語 Ruby 作者: まつもとゆきひろ,David Flanagan,卜部昌平(監訳),長尾高弘出版社/メーカー: オライリージャパン発売日: 2009/01/26メディア: 大型購入: 21人 クリック: 356回この商品を含むブログ (129件) を見る Ruby には、手続きを表すオブジェクトのクラスとして Proc クラスと Method クラスの 2 つのクラスがあります。 Proc オブジェクト *1 にはさらに proc と lambda の 2 種類があって、それぞれどう違うかというのがちょっとややこしいと思います。 次の記事などは結構参考になると思いますが、『プログラミング言語 Ruby』 を読んでさらに理解が深まったのでここにまとめておきます。 Rubyblock、Proc、lambda を理解する - このブログは証明できない。 とりあえずまと

    Ruby の Proc オブジェクトと Method オブジェクトの違い (proc, lambda, ブロック, メソッドについて) - vivid memo
    kamipo
    kamipo 2012/10/26
  • Rubyで自前の例外クラスを作るときExceptionではなくStandardErrorを継承する理由 - yarbの日記

    Rubyの例外について少し調べたので、まとめてみる。 多くのモダンな言語同様にRubyでは例外処理機構が組み込まれている。 ファイルを開こうと思ったらファイルが存在しなかった ネットワーク先のサーバが反応しなくてタイムアウトした 定義されていない(存在しない)メソッドを呼んだ 0で割り算をしてしまった など想定外の問題に遭遇したときに、その問題を無視せずプログラマが何らかの対応処理をするための枠組みを提供する。 C言語など古い言語では、関数からの戻り値でエラーコードを返し、それによって呼び出し側がエラー処理をその場で記述する。例えば、fopen(3)が失敗すると戻り値としてNULLが戻ってきてグローバル変数のerrnoに失敗の理由を示すエラーコードが設定される。 #include <stdio.h> #include <string.h> #include <errno.h> int ma

    Rubyで自前の例外クラスを作るときExceptionではなくStandardErrorを継承する理由 - yarbの日記
    kamipo
    kamipo 2012/10/15
  • ruby-1.9.3-p194 cumulative performance patch. — Gist

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    ruby-1.9.3-p194 cumulative performance patch. — Gist
    kamipo
    kamipo 2012/10/04
  • Rubyistなら知っておくべき地味だけど便利なメソッド - joker1007’s diary

    備忘録兼、初心者向けのメソッド一覧。 余裕があればRails編とかも書こうかな。 これ忘れてるとか何事?とかいう突っ込みがあれば是非お願いします。 もうちょっとコードの具体例書きたかったけど、めんどくさくなってきたw Array Array#combination(n), Array#permutation(n) 配列のデータを元に組み合わせ(順列)を作ってくれます。 ブロックを渡さない場合はEnumeratorで組み合わせの各要素を列挙します。 Enumerator Enumerator#with_index(offset = 0) Enumeratorの各要素に合わせてindexを列挙してくれるEnumeratorを返す。 each_sliceやcombination等にメソッドチェインで繋げて使う。 Enumerator#with_object(obj) with_indexと同様で

    Rubyistなら知っておくべき地味だけど便利なメソッド - joker1007’s diary
    kamipo
    kamipo 2012/08/21
  • Rubyのエンコーディング - tmtms のメモ

    Ruby 1.9 から文字列や正規表現オブジェクトはそれぞれエンコーディング(いわゆる文字コード)を保持するようになりました。 たとえば 0xB1 0xB2 という2バイトは EUC-JP エンコーディングでは「渦」、SHIFT_JIS エンコーディングでは「アイ」という文字になります。つまり同じバイト列でもエンコーディングが異なれば異なる文字として解釈されます。 1.8 では文字列はただのバイト列でした。なので、それがどのような文字を表しているのか、つまりエンコーディングが何なのかはプログラムが知っている必要がありました。 1.9 では文字列オブジェクト自身が自分が何のエンコーディングかを知っています。同じ 0xB1 0xB2 というバイト列でも、それが EUC-JP の「渦」なのか SHIFT_JIS の「アイ」なのかは、文字列自身が知っています。 スクリプトエンコーディング スクリプ

    Rubyのエンコーディング - tmtms のメモ
  • 独学でコーディング! - a-newcomer.com

    ここ数年、会社を辞めて自分のペースで仕事を請け負うフリーランスという形態で仕事をする人が増えています。フリーランスには様々な職業があり、代表的なものでは翻訳業やイラストレーター、YouTuberもフリーランスに分類されます。そして代表的なフリーランスの職業がもう一つあります。それはプログラマー/エンジニアです。そのプログラミングの大部分を占める工程がコーディングであり、知識と技術を身につければ、憧れのフリーランスに鞍替えすることも夢ではありません。 それではコーディングの知識と技術を取得するにはどのようなルートがあるのでしょうか?現実として学校に通うか、プログラミングを請け負う会社に入社するか、あるいは独学で取得するかのいずれかを選択することになります。そこで今回は最も費用の少ない独学でコーディングを学ぶ方法を紹介したいと思います。 独学でコーディングの知識と技術を身につけるには まずはプ

    独学でコーディング! - a-newcomer.com
  • これからRubyを始める人たちへ

    (追記:2012-12-03) 記事を電子書籍化しました。「Gumroad」を通して100円にて販売しています。詳細は文末に追記しましたので、購入ご検討のほどよろしくお願いしますm(__)m 電子書籍「これからRubyを始める人たちへ」EPUB版 Rubyの特徴 Rubyは、まつもとゆきひろ氏(通称Matz)により設計されたオブジェクト指向プログラミング言語です。Rubyの特徴を一言で言うならば、それは「間口が広くて奥が深い言語」ということになります。 「間口が広い」というのは、インタフェースがシンプルで誰でもが簡単に使い始められることを意味します。「奥が深い」というのは、プロフェッショナルによる長期使用に耐えうる物の言語であるということを意味します。「間口が広い」ということと「奥が深い」ということは来競合する概念ではありませんが、その両方をバランスよく組み合わせるには、対象に対する

    kamipo
    kamipo 2012/06/28
  • るびま

    『るびま』は、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 直

    kamipo
    kamipo 2012/05/23
  • エンジニアは空を飛ぶ: Ruby 正規表現入門ドリル

    Rubyの正規表現の入門編です。これを読めばリファレンスにあまり当たらなくても思い描いている正規表現を大体書けるようにというのと、他の人が書いた正規表現を読めるようになることを目的に書きました。そのため正規表現の論理構造とあまり関係ないものは割愛しました。Rubyのバージョンは得に断りがない限り1.8.7を使用しています。1.9から鬼車が採用されており、グループの扱いに機能拡張があります。そちらについても最後の方で触れています。習うより慣れろということで最後に練習問題を用意しています。 目次 基 リテラル 正規表現記号(メタ文字) グループ 後方参照 文字クラス バックトラック Regexpオブジェクト、MatchDataオブジェクト グループ(2) 日語の取扱い 練習問題 基 Regexpインスタンスの生成 >> Regexp.new("a") //はRegexpのインスタンス。

  • 5分でわかるWatir - にのせき日記

    以下の文章はŽeljko Filipinによる"Watir in five minutes"の翻訳です。*1 (中略) 僕が初めてWatirを仕事で使った時、すごく驚いたことを今でも覚えている。インストールしてから数時間で、僕はテスト中のWebアプリケーション用のスクリプトを書けるようになっていた。このを読めば、数時間もかからずにWebサイトをテストできるようになるはずだ。 もしRubyに親しんでいるのなら、IRBがRubyライブラリを勉強するための最良のツールの1つだってことがわかっているだろう。 もしRubyを知らないのなら、こう思うかもしれない。IRBって何? IRB(この場合)はInternational Ruby BoardでもImmigration or Refugee Board (of Canada)のことでもない。Interactive Ruby Sehllのことだ。読

    5分でわかるWatir - にのせき日記
  • 第2弾!知って得する12のRubyのトリビアな記法

    (追記:2013-08-16) 記事のトリビアを含む55のトリビアを以下の記事にまとめました。 知って得する!55のRubyのトリビアな記法 半年くらい前にちょっとトリビアだけど、知っていると意外と便利なRubyの記法を21個紹介したよ。 知って得する21のRubyのトリビアな記法 ~ 21 Trivia Notations you should know in Ruby 今回はその第2弾だよ! ちょっと数が少ないけど、知らないものがあったらへーとかほーとか、得したとか言ってもらえるとうれしいよ。 1.Enumerator#with_index 任意のリストを標準出力するときに連番を同時に振るとしたら、普通はEnumerable#each_with_indexを使うよね。 names = Module.constants.take(10) names.each_with_index {

    kamipo
    kamipo 2012/04/23