タグ

ブックマーク / blog.yugui.jp (12)

  • APIデザインケーススタディ —— Rubyライブラリを移植する前に読む本 - 世界線航跡蔵

    APIデザインケーススタディ 』というを頂戴したので読んでみた。 ライブラリ作者に向けて このRuby標準ライブラリを題材にして、分かりやすく、多様な機能をサポートして、互換性を保つAPIの設計をするにはどのように考えるべきかを教えてくれる。 ここでAPIと言っているのは、一般的なRubyのクラスとオブジェクトとメソッドから成るライブラリをどうデザインするか、という話である。 別にChef RecipeやRSpec DSLのようなちょっと変わったDSLを設計するとかそういう話ではない。確かにその種の言語内DSLのデザインには固有のセンスが必要とされるし、 Ruby DSL Handbook なんてが書かれているように実装にあたってもある種のテクニックが必要なのも確かだ。でも、それ以外の「ふつう」のライブラリのデザインは果たして簡単だろうか。 適切な粒度のクラスを定義する。必要な

    APIデザインケーススタディ —— Rubyライブラリを移植する前に読む本 - 世界線航跡蔵
    taka222
    taka222 2016/01/07
  • Rubyのメタクラス階層 - 世界線航跡蔵

    この記事は、先日開催した 第3回 RHGの逆襲 のまとめみたいなものである。と、同時に『初めてのRuby(仮題)』の宣伝である。 クラス、その例外、そのトリック Rubyはクラスベースのオブジェクト指向だから、メソッドの情報はクラスに属している。インスタンスメソッドを呼び出すときには、そのオブジェクトの属するクラスを調べて、そのクラスの持っているインスタンスメソッドの中から探す。 でも、Rubyの場合は例外がある。1つはモジュール。モジュールはクラスではないのに、でもインスタンスメソッドを提供している。1つは特異メソッド。特異メソッドは特定のインスタンスに直接所属するメソッドだ。 でも、ここには実装上のトリックがある。Rubyにとってはモジュールのインスタンスメソッドも特異メソッドも、等しくクラスに属するインスタンスメソッドなんだな。 モジュール モジュールをクラスにincludeすると、

    taka222
    taka222 2014/10/13
  • Dockerで何が変わるのか - 世界線航跡蔵

    DockerCon 2014 に行ってきた。 この会期中には各社からいくつもの製品が紹介/発表された。そして、それによってクラウドという技術は次のステージに移行したと言っても過言ではないだろう。 より自由にユーザーがクラウドベンダーを選べる時代へ。どうやってクラウドにうまくデプロイするかではなく、アプリケーションそのものに注力できる時代へ。 Dockerとは Docker とはいわゆるコンテナ技術の1つで、Linuxホスト環境の中に隔離された別のLinux環境を作ってくれる技術だ。 軽量仮想マシンと呼ばれたりもする。 Solaris Container とも似ている。 新しくないDocker 1つ述べておくとDocker技術的には新しくない。Dockerの価値は技術以外にある(とDockerCEODockerConで言ってた)。 技術的にはSolarisにはSolaris 10の頃か

    Dockerで何が変わるのか - 世界線航跡蔵
    taka222
    taka222 2014/06/14
  • Rubyコミッタ一覧 - 世界線航跡蔵

    Rubyのコミッタ一覧を作りました。3種類のフォーマットがあります。 OPML (フィードリーダー用) RDF (FOAF) YAML (元データ) YAML版は手で書きました。その他の版は 整形器 で生成しました。HTML版を生成することもできます。 意義 Rubyコミュニティは些かhigh contextだったりします。mputって誰のことでしょう? zenspiderは? "why is why why"って何を言いたいの? 笹田さんが「パッチモンスターが……」という時、何を意味しているの? コミッタのうち誰が誰で何であるかをリストにしてみました。 Rubyは沢山の方の貢献によって成り立っています。その名誉はコミッタだけによるものではありません。けれども、Rubyコミッタたちが注目に値する人々であるのは確かでしょう。twitterでfollowしたりblogを購読したりしたらよいと思

    Rubyコミッタ一覧 - 世界線航跡蔵
    taka222
    taka222 2011/01/26
  • 松江行 - 世界線航跡蔵

    RubyWorld Conference 2010 で発表を依頼されて松江に行ってきた。基的には 先の記事 に書いたとおり、 Ruby会議2010 同じような内容の発表である。RubyWorld Conferenceのほうはgeekばっかりじゃなくもっとビジネスよりの人、行政の人、研究機関の人、いろんな人が集まる集まりなわけだけれども、その中でRuby開発側の立場として、健在の状況をお話ししてきた。 9月5日 羽田から米子に飛んで、そこから松江に向かう。この飛行機は知り合いが沢山乗ってた。宿は主催側で手配してくれたので色々楽だ。宿に向かう途中、大場(寧子)さんと通り道にある造り酒屋を巡って試飲してお土産を買うなどした。 その後、発表者一同に合流。レセプションパーティーの料理がとっても美味しゅうございました。 9月6日 この日からconference番が始まったのだけれども、会場が寒い。

    松江行 - 世界線航跡蔵
    taka222
    taka222 2010/09/10
  • Ruby 1.9.2のリリースと、イベントでの発表と - 世界線航跡蔵

    去る8月18日、 Ruby 1.9.2-p0をリリース した。これは、Rubyの最新安定ブランチとなるRuby 1.9.2の初のリリースである。 先日の Ruby会議2010 でもこのリリースについて報告してきた。 Ruby 1.9.2 has been released! from Yuki Sonoda 明日からの RubyWorld Conference 2010 でも似たような内容の発表をする予定だ。 今回のリリースでは、リリース管理に必要なチケットの整理やらなんやら、 mameさん にお世話になりっきりであった。これはリリースに必要な作業であるから、誰もやらないなら私がやらなければならないものであった。けれどもなかなか時間が取れずに放置していたら、痺れを切らしたmameさんがリリースマネージャ解任動議を発して発破をかけてくれたり、mameさん自身がチケットを大量に整理したりしてく

    Ruby 1.9.2のリリースと、イベントでの発表と - 世界線航跡蔵
    taka222
    taka222 2010/09/07
  • Rubyの呼び出し可能オブジェクトの比較(1) - 世界線航跡蔵

    Rubyにはコード片を表すオブジェクトが複数ある。 Method , UnboundMethod , Proc である。 Continuation は少し違うけど、実行コンテキストを記憶しているオブジェクトという意味では近いものがあるか。『 Ruby Way 』にはこういういろいろがあることについて「驚くほどのことではありません」と書いてあるけれども私は驚いた。で、これらが微妙に違うのだ。困ったもんだ。いや、便利なのかもしれないが。 それで今回はこれらの概要を眺めてみたいと思う。 普通のメソッド defでメソッドを定義するのが一番普通だやな。 class C def greeting(arg) puts "C#greeting reveived #{arg}" end def iterator yield 'iterator 1st' yield 'iterator 2nd' yield

    Rubyの呼び出し可能オブジェクトの比較(1) - 世界線航跡蔵
  • 続・Railsの画面生成を10倍高速化する方法: フィルタ編 - 世界線航跡蔵

    さて、昨日は SSIとの組み合わせでPageキャッシュの適用範囲を広げる話 をした。 なぜSSIかというと、これは組込みの手軽なフィルタ機構だからだ。Apache 1系統ではSSIはハンドラとして実装されているけれども、2系統では新たにフィルタ機構が加わって、SSIはこちらで再実装されている。 フィルタ機構ならmongrelからの出力にも加工できる。Pageキャッシュとキャッシュでないものを透過的に扱えてうれしい訳だ。 ただ、確かにちょっとDRYさに欠ける。どうせならRailsのレイアウトファイルにPHPコード片を直接書きたいではないか。で、これを出力するとPHPとして処理してその結果がクライアントに伝わる、と。 id:yamazさんが「 rhtmlで直接phpを吐き出して処理する方法を模索したいのです。 」と言ってるのはたぶんそういうことだ。私もそれが理想だと思う。今日はそれに挑戦してみ

    続・Railsの画面生成を10倍高速化する方法: フィルタ編 - 世界線航跡蔵
  • 書籍『初めてのRuby』を書いた - 世界線航跡蔵

    他言語プログラマのためのRuby入門書『 初めてのRuby 』を執筆した。オライリー・ジャパンのいわゆる動物の1つとして、6月25日に発売される。 なお、書は翻訳ではない。オライリー・ジャパンの慣例によると『初めてのRuby』というタイトルのは米国O'Reilly Mediaの『Learning Ruby』の翻訳の筈だが、そうはならなかった。諸般の事情により『Learning Ruby』を訳すのではなく、私が日語で書き下ろした。 対象 書は、他のプログラミング言語の経験があるプログラマを対象としている。Rubyについての知識は一切問わない。一方、コンピュータ科学一般の用語やオブジェクト指向そのものについては知識を要求していて、こうした話題の説明は殆ど含まれない。 内容 新しいプログラミング言語を習得するとはどういうことだろうか。まず、その言語の文法を知っていて処理系が受理してく

    taka222
    taka222 2009/09/26
  • プログラミング言語の進化の方向 - 世界線航跡蔵

    セキュリティ&プログラミングキャンプ のBoFで、笹田さんがやってたセッションで話したことがある。言語の進化はベストプラクティスの取り込みにある、と。 ベストプラクティス取り込みの歴史 計算可能である事柄を計算するだけが問題であるなら、チューリング完全な言語なら何でも良いということになるし、不完全な言語は出る幕すらない。ラムダ計算からの自然なマップを考えるならS式で書いて何か実行すれば良いんだし、最小のプリミティブから出発するのが目的ならLazy Kなんかもいいかもしれない。 でも、工学的要請からは、計算可能関数が等しく計算の対象となるわけではない。そして、ある種の計算の傾向、パターンに対して「こうすればいい」「こう考えればいい」「こう設計すればいい」というベストプラクティスが生まれてくる。プログラミング言語の歴史を眺めていると、経験の中から立ち現れるベストプラクティスを取り込んだものが多

    プログラミング言語の進化の方向 - 世界線航跡蔵
    taka222
    taka222 2009/09/23
  • Ruby会議で発表した - 世界線航跡蔵

    Ruby会議2009 で発表した。 Ruby 1.9.2へ向けた案内をしたのだけど、Ruby 1.9.2はひたすら地味である。地味に改善はされているけど、地味に仕様変更もあるし、総じて存在が地味だ。ただ、地味と言うことは良いことで、つまりもうドラスティックな変更はなかったということだ。1.9.1をリリースする段階での仕様確定の努力が実を結んだと言うことだ。 仕様変更は確かにある。でもそれは、「うっかりこうなってしまっていたけど、誰もがこっちを望むよね」というどちらかと言えば実装上のバグに近いものが多い。ここからも、1.9系統の言語仕様が当面は安定であるということが確認できる。 たぶん、1.9.5ぐらいまであっと驚くような仕様変更はない。それにしても、1.8から1.9への差分よりはずっと小さい。ひょっとしたら、1.9.5とかから2.0への移行も、ずっと少ない手間でできるかもしれない。とい

    Ruby会議で発表した - 世界線航跡蔵
    taka222
    taka222 2009/07/24
  • Ruby1.9 のクラスのメタ階層とかevil-rubyとか - 世界線航跡蔵

    sumimさんの「 Ruby1.9のクラスのメタ階層を整理する 」という記事、Rubyの型階層は雑然としているというのは、なんかsumimさんの図が悪いような気もするなぁ。整理すればもうちょっと情報を引き出せるよ。あと、モジュールのせいもある。 前提知識 Rubyは基的には単一継承のクラスベースオブジェクト指向言語なのだけれども、幾つか注意すべき処がある。 クラスはClassクラスのインスタンスである。 モジュール 制限付きの実装多重継承をもたらす仕組み。内部的には、モジュールの「化身」となるクラスを継承階層を挟み込むことで実装されている。 以下、モジュール M に対してその化身クラスを I(M) と表記する。 詳しくは 以前の記事 を参照。 特異クラス 特定のオブジェクトに専属するクラスのこと。特定のオブジェクトにだけ存在するメソッド「特異メソッド」を定義すると、内部的には特異クラスを

    Ruby1.9 のクラスのメタ階層とかevil-rubyとか - 世界線航跡蔵
    taka222
    taka222 2008/09/14
  • 1