フォーチュンサモナーズ
最新 追記

Don'tStopMusic

2003|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|12|
2006|01|02|03|04|05|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|

カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年

知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。


2007-05-02 この日を編集

_ [Rails] How to scale your web app このエントリーを含むブックマーク

BarCampLondon2でのプレゼンです。データベースとウェブサーバが一台に同居しているミニマムシステムからどうスケーリングさせていくかというお話。

ユーザを複数のデータベースに分けて格納する User Cluster が途中で出てきますが、

  • ID 管理: auto_increment や sequence に任せられなくなる
  • おそらくコードにかなり手をいれる必要がある
  • ユーザをクラスタ間で移動させる機能が必要

などを課題点として挙げています。たしかに ActiveRecord なりプラグインなりで吸収できるようになると楽なのですが。

_ [Ruby] Chris McMahon's Blog: make a change to Ruby このエントリーを含むブックマーク

Matzにっき(2007-04-25) より。

要するにPerlみたいにメソッド定義がどこにあっても良いようにしてくれ、という話。

気持ちはわからないでもないが、欠点がある。

  • ifで囲んでメソッド定義を条件分岐とかできなくなる
  • Rubyが基礎にしているLisp的実行モデルから離れちゃう

メリットよりはデメリットの方が多いんじゃないかな。

クラス定義やメソッド定義など「定義」というと静的に決定されるような印象があります。この印象はプログラミング言語歴によるんじゃないでしょうか。

実行されるものだということを強く印象付けるために、Ruby を最初に教えるときに、

class Hello
  def hello
    puts "hello, world"
  end
end

は、

Hello = Class.new
Hello.class_eval do
  define_method(:hello) do
    puts "hello, world"
  end
end

のシンタックスシュガーですと説明するとかどうでしょう。あるいは、実は省略可能な do が隠れていて正式に記述すると、


class Hello do
  def hello do
    puts "hello, world"
  end
end

となるのですよと、DSL 方面から攻めてみるとか。冗談ですが。

_ [Ruby] Silverlight で Ruby はもう使えるのかな? このエントリーを含むブックマーク

TechCrunch の記事、Silverlight: ウェブはさらにリッチになった によれば、

Silverlightでも、サポートされているいくつかの言語を使ってコードを書くことができる。現時点でサポートされているのは、C#、Javascript(ECMA 3.0)、VB、Python、Ruby。

ということで、使えそうな感じではあります。

ランタイムの比較表によると .NET CLR が使えるのは 1.1 Alpha です(そして IronRuby と書かれています)。しかし、1.1 Alpha のサンプルギャラリーにも1.1 Alpha の SDK には Ruby の R の字も見当たりません。情報を用意していないだけで実は使えるのかまだ使えないのかどちらなのでしょう。

追記。Jim Hugunin's Thinking Dynamic : A Dynamic Language Runtime (DLR) によれば、

We're initially building four languages on top of the DLR - Python, JavaScript (EcmaScript 3.0), Visual Basic and Ruby. We shipped today both Python and JavaScript as part of the Silverlight 1.1alpha1 release today. John Lam and I will be demoing all four languages, including VB and Ruby, working together during our talk tomorrow at 11:45.

とのことですので、もしかすると今配布されている Silverlight 1.1 Alpha には含まれていないのかなあ。IronPython.dll はインストールされてましたが、IronRuby.dll は存在しませんでしたし。

ということで動きがあるまで様子見します。


2007-05-03 この日を編集

_ [redMine] 最近の redMine 04/22-05/02 このエントリーを含むブックマーク

最近の redMine の更新を追ってみました。r460 - r499 の中から気になる機能追加点をいくつかピックアップしてみます。

r460

公開プロジェクトか参加しているプロジェクトのみがプロジェクト一覧に表示されるようになりました。また、参加している(メンバーになっている)プロジェクトには☆マークがつきます。

r460

r473

参照している問題の ID や解決した問題の ID をコミットログから解析する機能が追加されました。[管理]-[設定] メニューの「Referencing and fixing issues in commit messages」の項目に設定があります。例えば「fixes 12」 などというコミットログを書けば自動的に解決状態にするといったことができるようです。手元の環境では sqlite3 なためかエラーが出たので詳細は確認できず。

r489

画面のヘッダにクイック検索が追加されました。コンテキストによって検索対象が変わります。プロジェクト内では既存の左メニューの検索と同じです。プロジェクト外ではプロジェクト情報からプロジェクトを検索します。

r489

r494

SVN レポジトリブラウザで、各ファイルの最後のコミットログが表示されるようになりました。

r494

_ [Ruby] 刑務所でRubyを使ったソフトウェア開発 このエントリーを含むブックマーク

あちこちで話題になっているこのニュースですが、ちょっときな臭い感じのようです。業務を担当するプリズニーズ株式会社の代表取締役の方の別会社がなにかといわくつきのようです。

この件に関して ITmedia エンタープライズ編集部員の方が 言葉にならない気持ち という記事を書いています。直接電話で取材をしたとのことで、その結果の記事の公開が待たれます。

_ [Ruby][Silverlight] John Lam on Software: Introducing IronRuby このエントリーを含むブックマーク

やっと情報源にたどり着きました。この記事によれば、

It's official! At Scott Guthrie's keynote at MIX today, we announced that we are implementing Ruby to run on top of the .NET platform! We're calling it IronRuby as an homage to IronPython, it is a shared source project, and we will be releasing it later this year on CodePlex under the Microsoft Permissive License (a BSD-style license for folks who just want the elevator pitch).

とのことで、正式リリースはだいぶ後になりそうですね。おそらく alpha 版はそれよりも前に触れるでしょうけども。

_ [Ruby][Silverlight] John Lam on Software: How many programming languages run in your browser? このエントリーを含むブックマーク

同じブログからもう一つ。Silverlight 1.1 Alpha のサンプルにある DLR Console は JScript と Python だけに対応していますが、Ruby と Visual Basic も加えたフルバージョンのデモスクリーンキャストを公開しています。デモができるくらいには開発が進んでいるようですね。

追記。いやーこのスクリーンキャスト面白いです。以下コードをデモしています。js が JScript、vb が Visual Basic です。一つの実行環境で言語を切り替えられ、しかも別の言語で定義した関数を利用できています。

js> var add = function(x, y) = {
js|    return x + y;
js| }
js> add(3, 4)
7.0
vb> Function Calc(fn, x, y)
vb|   Return fn(x, y)
vb| End Function
js> Calc(add, 3, 4)
7.0

_ [Ruby][Silverlight] IronRuby の CTP リリースは今年の遅い時期 このエントリーを含むブックマーク

Silverlight のフォーラムに質問したら答えが返ってきました。Program Manager の Mark Rideout という人からです。

IronRuby isn't available yet but will be released later this year in CTP form. You'll be able to download it on Codeplex.com. The Silverlight 1.1 Alpha release includes dymanic lanauge support so that DLR languages such as IronRuby can be added.

とのことで、Silverlight 1.1 Alpha リリースには DLR 言語のサポートは含まれているものの、IronRuby は今年の遅い時期に CodePlex で CTP リリースになるようです。CTP は Community Technology Preview の頭文字語、CodePlex は Microsoft のオープンソースホスティングサイトみたいです。


2007-05-04 この日を編集

_ [Ruby] FeedTools の YAML キャッシュプラグイン このエントリーを含むブックマーク

FeedTools という RSS/Atom フィードを簡単に取り扱えるライブラリがあります。このライブラリはキャッシュ機能を持っており、デフォルトでは ActiveRecord を使ってデータベースにキャッシュさせることができます。また、決められたインタフェイスを持ったクラスを用意すればいろいろな方法でキャッシュさせることができます。

会社の同僚がデータベースじゃなくてファイルにキャッシュさせたいと言っていたので、YAML ファイルにキャッシュするプラグインを書きました。RubyForge に申請をしましたので、通ったら公開します。

こういう感じで使えるようになる予定です。

require 'rubygems'
require 'feed_tools'
require 'feedtools-yamlcache'
 
# デフォルトでは ~/.feedtools/yamlcache/ にキャッシュします
FeedTools.configurations[:feed_cache] = FeedTools::YAMLCache
feed = FeedTools::Feed.open('http://dontstopmusic.no-ip.org/diary/index.rdf')
p feed.live? #=> true
feed = FeedTools::Feed.open('http://dontstopmusic.no-ip.org/diary/index.rdf')
p feed.live? #=> false

2007-05-05 この日を編集

_ [適当] はてなブックマークで特定サイトを非表示にする greasemonkey スクリプト このエントリーを含むブックマーク

はてなブックマーク のサイトで、見なくてもいいやというサイトを非表示にする greasemonkey スクリプトを書いてみました。hatebunomore.user.js

2007/05/06 追記。ページによって URL がまちまちなことに気がついたので、xpath 式を緩い条件に変更しました。

// ==UserScript==
// @name            hatena bookmark no more gigazine
// @namespace       http://dontstopmusic.no-ip.org/diary/20070505.html#p01
// @description     Hide some famous sites on b.hatena.ne.jp
// @include         http://b.hatena.ne.jp/*
// ==/UserScript==
 
var denies = [
    'http://gigazine.net/',
    'http://www.popxpop.com/',
    'http://www.simplexsimple.com/',
    'http://dain.cocolog-nifty.com/',
    ];
var ids = [];
for (var i = 0; i < denies.length; i++) {
    var xpath = '//a[contains(@href, "' + denies[i] + '")]/../..';
    var entries = document.evaluate( xpath, document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
    var entry;
    while(entry = entries.iterateNext()) {
        ids.push(entry.id);
    }
}
(function() {
    function addGlobalStyle(css) {
        var head, style;
        head = document.getElementsByTagName('head')[0];
        if (!head) { return; }
        style = document.createElement('style');
        style.type = 'text/css';
        style.innerHTML = css;
        head.appendChild(style);
    }
    for (var i = 0, style = ''; i < ids.length; i++) {
        style += '#' + ids[i] + ' { display: none; } ';
    }
    addGlobalStyle(style);
})();
本日のツッコミ(全1件) [ツッコミを入れる]

_ yokoyamen [このエスプリは画期的!]


2007-05-06 この日を編集

_ [Ruby] FeedTools::Cache::YAML 0.0.2 をリリースしました このエントリーを含むブックマーク

一昨日予告した FeedTools 用の YAML ファイルでのキャッシュプラグインをリリースしました。そのうち rubygems でインストールできるようになると思います。

予告時から名前をちょっと変えました。以下のようにして使えます。

require 'rubygems'
require 'feed_tools'
require 'feedtools-cache-yaml'
 
# デフォルトでは ~/.feedtools/cache/yaml/ にキャッシュします
FeedTools.configurations[:feed_cache] = FeedTools::Cache::YAML
feed = FeedTools::Feed.open('http://dontstopmusic.no-ip.org/diary/index.rdf')
p feed.live? #=> true
feed = FeedTools::Feed.open('http://dontstopmusic.no-ip.org/diary/index.rdf')
p feed.live? #=> false

_ [redMine] 最近の redMine 05/02-05/06 このエントリーを含むブックマーク

再び最近の redMine の更新を追ってみました。前回に引き続き、r500 - r514 の中から気になる変更点をいくつかピックアップしてみます。今後も気が向いたときに調べます。

r506

問題同士を関連付けられるようになりました。まだ機能していない部分が多いですが、これは大きな機能追加ですね。関連には以下の 4 種類があります。

  • 単なる関連 (related up) : 単に関係していることだけを表す
  • 重複 (duplicates) : 同期してクローズされる(未実装)
  • ブロック (blocks) : ブロックしている問題がクローズされないとブロックされた問題はクローズできない(未実装)
  • 先行 (precedes) : スケジュール的な前後関係を表す

循環参照はチェックされるようです。また、現在は同じプロジェクトの問題しか指定できません。そのため別のプロジェクトに問題を移動させると関連は削除されます。これは将来的に変更されるとのことです。

r506

r507

問題画面のフィルタが記憶されるようになりました。ちょっと便利。

r514

自動ログイン機能が追加されました。ログイン状態を覚えてくれます。有効期間を選択できるのがいいですね。

r514

r514-02


2007-05-07 この日を編集

_ [Google] 国内学術論文300万件、グーグル検索可能に このエントリーを含むブックマーク

これはいいですね。学生時代に実現していたら Google 樣々でした。

例えば日本語の文献に対して Ruby で検索すると、木山さんの世代別 GC の論文やささださんの YARV の論文が見つかります(これらは情報処理学会の論文なので Google じゃなくても情報処理学会電子図書館で簡単に見つかりますが)。一箇所で串刺しに検索できるのは便利です。情報系の論文検索では CiteSeer が有名ですが、CiteSeer の特徴である引用元を調べたり関連文献を調べたりなどは Google Scholar でもできますね。ただ、ジャンル横断なので関連文献の精度がちょっと低い気がします(そうでもありませんでした)。


2007-05-09 この日を編集

_ [プログラミング] どうしてプログラマに・・・プログラムが書けないのか? このエントリーを含むブックマーク

ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。

大学院時代にコンピュータサイエンスの学部生のプログラミングの実習の授業の助手補をしてまして、提出されたレポートのチェックなどもしていました。そのときに統計を取ったわけではないので印象ですが、まったくついていけなくて人のレポートをコピーしている人とレポートの体裁は整っているけれど理解はしていないだろう人が 1/5、やったことを理解はしているようだけど他のプログラムは書けないだろう人が 2/5、他の課題を与えられてもある程度はプログラムを書けるだろう人が残り 2/5、自分で自由にプログラムを書けるだろう人は 3、4 人という感じでした(計 140 人前後)。助手補は 2 年やっていましたが、傾向は変わりませんでしたね。


2007-05-11 この日を編集

_ [Ruby] 日本 Ruby 会議 2007 チケット追加販売 このエントリーを含むブックマーク

チケットの追加販売をローソンチケットにて 5 月 12 日(土) 午前 10:00 より開始します。

とのことです。4/14 に買えなかった方もチャンスです。

_ [Ruby] m17n を調査中 このエントリーを含むブックマーク

1.9 にマージ予定の m17n について調査中です。が、ruby-dev を m17n で検索すると田中さんのメールがひっかかる罠。

とりあえず集めたリンクだけメモっておきます。

ある程度まとまった情報。

こまごま。

疑問点をメモ。

  • encoding pragma との関係
  • m17n は明示的に require が必要という話があったけど、あれは使う文字エンコード単位で必要ということなのかな。つまり m17n 機構自体はデフォルトで組み込まれる?
  • 具体的なコード例
  • m17n マージ時には正規表現エンジンが鬼車になる?
本日のツッコミ(全4件) [ツッコミを入れる]

_ きむら(K) [regexp エンジンは鬼車ベースのmatzスペシャルという話だったと記憶しています。 入れてほしい機能があるのでコ..]

_ だて [なるほど。ということは鬼車のどこかのバージョンから枝分かれすることになるのでしょうね。 正規表現に関係する機能ですか..]

_ きむら(K) [はい。正規表現のメタ文字の拡張ですね。非公式には小迫さん、まつもとさんには話をしていまして、 「やってくれといわれて..]

_ だて [へえ。それはPerlにしかない機能なのですか?他の言語にも参考にできるものがあればPerlソース読むよりは楽そうです..]


2007-05-12 この日を編集

_ [Ruby] 日本 Ruby 会議 2007のタグ このエントリーを含むブックマーク

とりあえず del.icio.us で rubykaigi2007 というタグを使ってます(私しかいませんが……)。はてぶ使う方も rubykaigi2007 でブックマークすると良いと思います。


2007-05-13 この日を編集

_ [redMine] 最近の redMine 05/07-05/12 このエントリーを含むブックマーク

今週の redMine trunk の気になる変更点をチェックです。r515-r528 が対象です。

r516

ロードマップで完了したバージョンを表示するオプションが増えました。

r516

r520

「問題」のフィルタで担当者と起票者に「me」が選べるようになりました。ログインしているユーザ名でフィルタできます。便利に使えそうですね。

r520

r521

レポジトリブラウザでテキストファイルを直接表示できるようになりました。希望の多い機能ではないでしょうか。ただし、「見る」というリンクが付くのは Redmine::MimeType で text と判別される拡張子のファイルだけです。コードを見るとわかりますが現在該当するのは txt css htm html xhtml rhtml js rb だけです。MimeType に依存するのはリンクが付くかどうかなので、表示機能の URL を直接叩けばテキストファイルであれば表示させることができます。「ダウンロード」の URL から format=raw を取って試してみてください。

r521

r521-02

r522

通知メールに返信することで「問題」に「注記」できるようになりました(要メール設定)。

r525

これもレポジトリブラウザの強化です。初めと終わりのリビジョンを選んで差分を見ることができるようになりました。

r521


2007-05-14 この日を編集

_ [適当] 暖かくなると増えるアレの対処法 このエントリーを含むブックマーク

暖かくなると家の中でアレを見る機会が増えます。昨日は 3 匹もいました(ちょっと多過ぎ)。

私はやつらを対処するのに殺虫剤は使っていません。一応 ゴキパオ を用意してありますが、後でアクリル樹脂を掃除するのが面倒なのであんまり使ってません。何を使っているかといえば新聞紙です。まるめて叩くわけではなく、即席ホイホイ?を作ります。作り方は以下の通り。

  1. 古新聞紙を見開き一枚用意する
  2. 半分に分ける
  3. 分けた二枚とも二つ折りにする
  4. 一つをまるめて一方の端を折りたたむ

これで片方だけ開いている筒ができます。使い方は以下の通り。

  1. やつらが隅っこでじっとしている時にこれで横や上から閉じ込める
  2. 余っている二つ折り新聞紙を下から差し込む
  3. 差し込んだ新聞紙で包む
  4. さらにポリ袋などに包んで捨てる

簡単に書いていますが閉じ込めるところは一筋縄ではいかないことが多いと思います。やつらと対峙することができる精神力、閉じ込めることができるポジションに誘い込む知力、焦らずチャンスを待つ忍耐力が必要とされます。とはいえ慣れれば数分で片が付きます。殺虫スプレーの臭いが嫌という方はお試しあれ。

最近 氷殺ジェットが気になっていますが、適用害虫に含まれていないのでやつらには効かないのかもしれないですね。今年も新聞紙が活躍しそうです。

_ [Ruby] 日本 Ruby 会議 2007 懇親会 このエントリーを含むブックマーク

会期初日である6/9(土)の夜に、日本 Ruby 会議 2007 懇親会を開催します。

懇親会への参加には、事前にチケットの購入が必要です。懇親会のチケットは、ローソンチケットにて 5 月 19 日(土) 午前 10:00 より発売開始します。

懇親会もチケット制だそうです。へー。ふと思ったのですが、カンファレンスに参加しないで懇親会だけ参加というのも可能になってしまうのでしょうかね。

_ [サイト運営] リンク元が消える このエントリーを含むブックマーク

tdiary を開発版にしてから、新しい日の日記を書くとその前の一番新しい日のリンク元情報が消えるようになりました。volatile.tdr が鍵を握っているようです。設定が悪いのか中途半端な開発版を使っているのかが原因なのでしょうけども。暇なときに調べてみようと思います。追記:仕様変更で正しい動作だそうです。

本日のツッコミ(全2件) [ツッコミを入れる]

_ ただただし [仕様変更なので、正しい動作なのです >リンク元]

_ だて [ありがとうございます。 遅ればせながら tdiary-dev を読みました。 |揮発性リンク元(もっとマシな名前をつ..]


2007-05-15 この日を編集

_ [Ruby][Silverlight] Modularity, Ruby and Doing the Right Thing このエントリーを含むブックマーク

Silverlight の Ruby コードのデモ が論争を巻き起こしているようです。

問題のコード片はこれ。

JS = require 'foo.js'
...
JS.initialize

require に独自拡張を加えている点が Ruby ユーザに懸念されているわけです。これに対して John Lam は以下のように説明しています。

Let's be clear about what this code does: it creates a ScriptModule (a DLR type) that represents the execution context of the foo.js code, and assigns it to the JS constant. The JS.initialize line calls the initialize method in foo.js. This is a user-defined method, and not some kind of DLR initialization thing.

require は foo.js の実行コンテキストを表す ScriptModule を返しているとのこと。また、JS.initialize はユーザ定義のメソッドとのことです。

スクリプトエンジンフレームワークを意識しておまじないを駆使して利用しなきゃいけないということはなく、単なるモジュールのように扱える点は良いですね。

また、この require で ScriptModule という仕組みについては、

We will have a different mechanism for doing so in the future.

ということで、いずれ変更するつもりのようです。

そして、気になる本家 CRuby との互換性については、

We here on the IronRuby team are under no illusion that we will be 100% compatible with the existing Ruby 1.8.x branch. But we will get as close as we can and bend over backwards to ensure that it is so. And I expect that you guys will keep us honest in this regard when it seems like we made a bad design decision.

とのこと。CRuby 1.8.x で動くコードは IronRuby ですべて動くけど、その逆の IronRuby で動くコードが CRuby で動くとは限らないということになりそうです。IronRuby は .NET CLR/DLR という環境が前提ですから、ライブラリレベルでの環境依存はもちろん発生しますが、言語仕様のレベルで差異がいろいろ生じてくるとなると微妙ですね。IronRuby の仕様拡張がデファクトになって CRuby が動きにくくなるとなんですが、UNIX/Windows という環境とユーザ層の違いがあるから杞憂かなあ。

_ [Ruby] Ruport finally gets to 1.0 このエントリーを含むブックマーク

Ruport の 1.0 がリリースされました。Ruport (Ruby Report) はレポートを生成するためのフレームワークです。ここでいうレポートとは例えば「サービスのユーザ数を属性別に出せ」「このフラグのたっているユーザのリストを出せ」みたいなやつです。こういう要求への対応は、

  • やおらデータベースを叩いてデータを出す
  • そのまま手で体裁を整えるか、Excel で集計

と手作業ベースになりがちです。忙しいときに限って「なるはやで」などと頼まれたりして悩ましい限りなわけです。

そうしたレポート作成作業の面倒を低減するためのフレームワークが Ruport です。データソースからデータを取得して加工して体裁を整えて出力という一連の処理をサポートします。

標準ではデータソースには、CSV、ActiveRecord 経由のデータベース、DBI 経由のデータベースなどが選べます。また出力には、プレーンテキスト、HTML、PDF、CSV。さらにはグラフ生成やメール送信のユーティリティもあります。

少しコード例を紹介します。まず、例えば以下のような CSV のデータがあるとします。

name,login time,machine
Gregory,10:00,bittle
Joe,11:45,soda
Jim,9:00,kitten
Joe,12:15,soda
Gregory,5:00,kitten
Joe,12:45,bittle

これを sample.csv としましょう。Ruport を使ってこのデータを元にしたレポートを作成してみます。まずはプレーンテキストでの出力。

require 'rubygems'
require 'ruport'
 
puts Table("sample.csv").to_text
+--------------------------------+
|  name   | login time | machine |
+--------------------------------+
| Gregory | 10:00      | bittle  |
| Joe     | 11:45      | soda    |
| Jim     | 9:00       | kitten  |
| Joe     | 12:15      | soda    |
| Gregory | 5:00       | kitten  |
| Joe     | 12:45      | bittle  |
+--------------------------------+

html で出力したければ to_html、PDF なら to_pdf、csv なら to_csv と変えるだけです。

require 'rubygems'
require 'ruport'
 
puts Table("sample.csv").to_csv
name,login time,machine
Gregory,10:00,bittle
Joe,11:45,soda
Jim,9:00,kitten
Joe,12:15,soda
Gregory,5:00,kitten
Joe,12:45,bittle

簡単なのはいいけどこの出力はちょっとという場合には、Ruport’s Formatting System を読んでください。整形や表示処理のカスタマイズ方法について説明しています。

ソートしたり英語を日本語にしたりとデータをちょっと加工しないといけないのだけど、結局そういうのは自前でどうにかしないといけないの?という向きは、Ruport in 10 minutes : the comic を読んでみてください。

仕事で担当サービスの各種情報をデータベースから取ってきてメールで飛ばす仕組みを独自ライブラリで作ったのですが、勉強がてら Ruport ベースに置き換えようとしてます。ただ、メール送信の ruport/util/mailer がヘッダ決め打ちの作りなので、任意のヘッダを渡せるように手をいれちゃいました。

追記。Ruport に置き換えたらコードの行数が 79 から 153 に増えました…… orz

2007/06/18 さらに追記。Ruport のフレームワークに沿った場合ロジックで整形をするわけなのでコード量は自然と増えます。見た目の部分はある程度 eruby などのテンプレートに任せて、値の抽出と加工だけ Ruport にやらせるのが正解かもしれません。


2007-05-16 この日を編集

_ [Ruby] Ruby の言語仕様は標準化すべきか このエントリーを含むブックマーク

(前略)によると、やはり明文化されていないみたいだ。それなのに実社会で使われていたり、楽天(使ったことないけど)のように私達の実社会に深く関わるところで使われようとしているのは少々不安なお話ではないだろうか。

不安な理由がよくわかりません。以下長文。つらつら考えました。

Ruby の言語仕様が明確にドキュメント(*1)化されていないと困るのはまず互換性のある処理系を開発しようとする人です。例えば JRuby や IronRuby ですね。あるいは、Sun が Java でやっているように「認定された Ruby 処理系」という制度を作りたいのであれば、詳細に仕様化しないといけないでしょう。

*1 ここでいうドキュメントはリファレンスマニュアルよりも詳細な言語仕様書、例えば The Java Language Specification や scheme の R5RS(読んだことないですが末尾再起最適化まで仕様化されているとよく引き合いに出されるので) などを指します。

また、プログラミングをしていて、ライブラリではなく処理系に由来する奇妙な動作に遭遇した人も困るかもしれません。仕様が余すところなくドキュメント化されていれば、仕様なのかバグなのかの判断がつきます。ただ、リファレンスマニュアルでは力不足で、仕様書を読み込まなければ判断がつかないような仕様上の疑問点に度々ぶつかるようであれば、それは仕様が十分にドキュメント化されていないためではなく、仕様自体にに問題があるか言語(処理系)が十分にこなれて枯れていないのが原因だと思います。

Ruby のコンサルやサポートを業務にする場合にも困るかもしれません。つまり、Ruby を使ったソフトウェア開発や運用をしている企業に対してコンサルティングを行ったり、Ruby 処理系にバグやセキュリティホールがあったら n 営業日以内に修正するというようなサポートを行う場合です。特に後者の場合には顧客からレポートされた issue が仕様なのかバグなのかを判断する必要がありますので、仕様が十分にドキュメント化されていないと辛そうです。

一方、通常の開発を行うにあたって Ruby を利用する分には困らないのではないでしょうか。オンラインのリファレンスマニュアルや各種書籍にあたれば Ruby で何ができるか、こうするにはどうすればいいかといった情報は得られます。Ruby は開発目的の利用を対象としたドキュメントも不十分であるという指摘はありますが、利用者の増加と書籍やネット上のノウハウ蓄積の増加はリンクしていますので、必要な情報は自然と補われると思います。(るりまさぼっててすみません……)

Ruby で開発されたアプリケーションの利用者にとっては、開発言語が何であるかは重要ではないでしょう。開発の利用に耐えられなければそもそも開発言語として選ばれることはありません。広く使われているのであれば、その言語が信頼されている証です。使われるうちに叩かれて枯れていきますので、長く広く使われているのであれば信頼に足りると言えます。実感としては、オープンソースの言語においては、ちゃんと仕様化することよりも開発コミュニティや言語利用者(その言語を使う開発者)の質や量や勢いみたいなものが、その言語が「使える」かに大きく影響しているんじゃないかなあと思います。

ところで、他のプログラミング言語はきっちりした言語仕様があるのでしょうか。Javascript は ECMAScript として標準化されてますよね。Perl とか Python はどうなのかな。

無駄に長文書いて疲れました。少し続きます。

_ [Ruby] Ruby の言語仕様はあまり変えないべきか このエントリーを含むブックマーク

言語仕様変更のせいで運用期間が短いのもお話にならないし、言語使用変更によるコードの差し替えもプログラマの雑務を余計に増やすという点でRubyの理念に反する話じゃあないだろうか。

逆にフットワークが軽くなくては生き残れないと思います。間違った仕様であれば直す。時代のニーズを取り込む。わくわくするような機能を追加する。企業が開発している言語にはできない戦略をとるべきではないでしょうか。


2007-05-17 この日を編集

_ [Ruby] m17n 対応で Ruby ができるようになること このエントリーを含むブックマーク

先日 m17n を調査中 と書きましたが一旦まとめてみます。間違いがありましたら訂正しますので教えてください。

Ruby の多言語対応(m17n)の方針

CSI (Character Set Independent) 方式。テキストデータを内部文字集合に変換することなく、それぞれの文字エンコーディングのままテキスト処理を行う方式です。Java や Perl や Python などは内部文字集合に変換する UCS (Universal Charactor Set) 方式を採っています。

できるようになること

  • コードを多言語で書けるようになる (encoding pragma)
  • String の各機能がそれぞれの文字エンコーディングでの文字を意識した処理になる(size がバイト数ではなく文字数を返すとか)
  • Regexp が多言語に対応(1.8.x は ASCII/Shift_JIS/euc-jp/UTF-8 限定)

あと jcode.rb を捨てられます。

文字エンコーディング変換

1.8.x では NKF ライブラリで文字エンコーディング変換が可能ですが、m17n フレームワークでも文字エンコーディング変換のインタフェイスが用意されます。ただし、当初の実装は iconv を利用したものになります。

後方互換性

C 言語的な文字列=バイト列モデルではなくなりますので、1.8.x とは非互換のメソッドがいくつかあります。具体的な変更点をリファレンスマニュアルのruby 1.9 feature の M17N の項から引用します。

  • string[integer] が 1文字の String を返すようになりました
  • string.slice(integer) が 1文字の String を返すようになりました
  • ?c が 1文字の String を返すようになりました
  • String#[]= が右辺の整数を受け付けなくなりました

正規表現エンジンが鬼車ベースに

正規表現エンジンが GNU regex matz special から Oniguruma matz special に変更されます。

性能

スクリプト言語Rubyの拡張可能な多言語テキスト処理の実装によれば数%から10%程度遅くなる模様。

初期対応文字エンコーディング

これもスクリプト言語Rubyの拡張可能な多言語テキスト処理の実装の情報ベースです。

  • euc-jp
  • Shift_JIS
  • UTF-8
  • iso8859-1?
  • big5?

_ [Ruby] Ruby の言語仕様は標準化すべきか (2) このエントリーを含むブックマーク

Ruby の言語仕様は標準化すべきか は標準化というキーワードを思いついたのが最後にタイトルをつけるときだったのが敗因でした。

処理系がいろいろ増えていることと仕様の明確化というコンテキストからすると、仕様を標準化することで処理系独自の拡張に縛りをかけるべきではないかという話ですね。

Ruby の言語仕様はあまり変えないべきか と同じ結論で、フットワークが重くなるのであれば標準化はしなくていいと思います(してもいいけど matz ruby はきっと標準仕様から外れていくんじゃないかなと思います(笑 )。


2007-05-18 この日を編集

_ [ネットサービス] プロフィールサービス アバウトミー このエントリーを含むブックマーク

なんとなくアカウントをとってみました。

が、mixi も twitter もこれも私には使い道がなかったり。

_ [Ruby] るびま19号 が出ました このエントリーを含むブックマーク

執筆者、編集者のみなさんいつもありがとうございます。

後ですべて読む。

技術系の雑誌は読むのを止めてしまったので、マンガを除くと読んでいる雑誌はネットも含めてるびまと SF マガジンだけになりました(ネットマガジンでは en を読んでましたが休刊してしまった)。ブログの流行に伴う RSS の普及と RSS リーダの活用で、すっかり目の前に流れてくる情報を次々に処理していくスタイルになったため、ネット上のページというか文章との付き合いが非常に刹那的になってしまったなあと思います。サイトを一通り読むんじゃなくてブックマークされている記事だけ見て立ち去るとか。それに、ちょっと長い文章があると「後で読む」としたくなるのはこらえ性がないですね。

数日かけてゆっくり楽しめる「るびま」は私にとって貴重な存在です。頭から順番に読んだり、興味のある記事を先に読んだり、その時々によって適当ですが、毎号隅から隅まで目を通しています。

_ [プログラミング] Python とか Perl の仕様書 このエントリーを含むブックマーク

Ruby の言語仕様は標準化すべきか

ところで、他のプログラミング言語はきっちりした言語仕様があるのでしょうか。Javascript は ECMAScript として標準化されてますよね。Perl とか Python はどうなのかな。

と書いたら教えていただきました。

TokuLog 改め Perl を極めて結婚するブログ - Ruby についてとかなんとか

Python の場合、とりあえず言語仕様は http://docs.python.org/ref/ref.html にありますね。

経験上、互換性のある処理系を作る際にはここにある情報で間に合うはづ。

あーなるほど。Lexical analysis では Ruby では慣習的にわかるでしょと書いていないことも事細かに記されていますね。他の章も項目的には Ruby のリファレンスも同じものがありますが、それぞれ詳細なのが Python 的なのかなあ。

Ruby の構文解析が非常に難しいというのは良く聞きますね。Ruby プログラミングを書く分には困らないので白鳥のバタ足ですね。難攻不落の parse.y に挑める人間だけが Ruby の真髄に近づける……ということで処理系の開発に参加できる人の障壁なっていたりしたら損しているのかも(逆に優秀な人だけ触れるという考えもあるか)。

Perl5 の処理系が一つしかなくて Python の処理系がいろいろある理由はなんだろう。ドキュメントあるなしだけでなくコミュニティの気質なども影響していそう。

_ [仕事] うーん このエントリーを含むブックマーク

個人的な愚痴を一つ。すみません。

このまま今の仕事を続けてていいのかと良く考えます。単純にやりたいことを言ってしまえばプログラミングなわけですが、入社以来運用ツール以外のプログラムは書いてません。じゃあ、プログラミングしてなくてまったくつまらなかったかといえばそうでもなく。バグを見つけて直したりするのが結構好きだということがわかったし、(ウェブサービスとしては)大規模なサービスを運用するに伴って得た知識や技術も少なくありません。

でも、同じサービスの運用とユーザサポートと調整ばかりしているのも飽きてきます。それと、社内の他の技術者から技術的な刺激を受けるということがあんまりないんですね。まあ、分野によっては濃い人はいます。あと自分は非コミュなんで自分から付き合いを広げたりしないため気付かないだけで、実は濃い人が多いのかもしれないのですが。同じ部の後輩に技術のセンスのある人がいるのですが、現状としては彼とやりとりするくらいでしょうか。

で、もうちょっと楽しく過ごすために、社内の有志で集まって何かしようかなあとしているところ。社内の技術者を盛り上げて楽しくしたいですね。それと優秀な技術者が入ってくるような雰囲気にしたい。が、そこまで今の会社でがんばる気になるかが問題ですね。やりがいがない気がしてなりません。


2007-05-21 この日を編集

_ [redMine] 最近の redMine 05/13-05/21 このエントリーを含むブックマーク

先週の redMine trunk の気になる変更点をチェックです。r529-r537 が対象です。フォーラム機能が新しく追加されたのが大きな変更点です。

r529

プロジェクトごとにフォーラムを作成できるようになりました。複数のフォーラムを作成できます。ただし、機能はまだ最低限です。トピックを作って返信ができるというくらいですね。

r530/r531

フォーラムにウォッチ機能が追加されました。新しい投稿があった場合にメール通知されます。

r533

フォーラムのメッセージが検索できるようになりました。

フォーラムの作成
フォーラムの作成画面

フォーラムの一覧画面
フォーラムの一覧画面

メッセージの一覧画面
メッセージの一覧画面

r534

左サイドメニューの「マイプロジェクト」がなくなりました。代わりにトップメニューの「プロジェクト」のドロップダウンメニューに自分が参加しているプロジェクトが表示されるようになりました。

r536

「バージョン」を日付なしでも作成できるようになりました。


2007-05-22 この日を編集

_ [Ruby] RailsConf 2007 のプレゼン このエントリーを含むブックマーク

Ruby Inside より 3 Fresh Presentations from RailsConf 2007

アメリカはオレゴン州ポートランドで RailsConf 2007 が行われていました。Ruby Inside でその RailsConf 2007 のプレゼンを 3 つ紹介していますので、右から左に流します。

Scaling a Rails Application from the Bottom Up は、最近 Joyent Slingshot を公開した Joyent の CTO のプレゼン。スケーリングといっても「Rails とデータベース……」という話ではなく、Joyent での例を元にして、コストとパフォーマンスを考えたサーバの物理構成やネットワーク構成を 実際の製品名を挙げつつ紹介しています。その後 L7、DNS、Memcached……と段々とアプリレベルまで降りてきて説明。参考になります。

Angels & Daemons は、Ruby でのデーモンプロセスの作り方。LDAP から ActiveRecord (とその裏のデータベース)へのゲートウェイという実例から説明しています。Rails の実行環境を引き継いだデーモンの作り方というのははじめて見たかも。

Harnessing Capistrano は、Capistrano のチュートリアルです。Capistrano がどういうことに使えるのか、インストール方法、タスクの書き方、Capistrano 2.0 の紹介などなど。まとまった Capistrano の資料では一番詳しいかも知れません。

_ [Ruby][メモ] memcache-client の使い方 このエントリーを含むブックマーク

memcache-client はいわずと知れた memcached の Ruby 版クライアントライブラリです。Ruby から memcached にデータを格納/取り出しができます。

FeedTools::Cache::Memcached を作るにあたって memcache-client の使い方を調べましたのでメモします。あまり突っ込んだことは書きません。ただの備忘録です(書くと憶える)。

memcached インストール (gentoo)

# emerge memcached

libevent-1.3a と memcached-1.2.1 でした。1.2.2 はりリースされたばかりですしね。ちなみに USE=perl していると Cache::Memcached もインストールされます。後は設定ファイルを修正して起動です。

# vi /etc/conf.d/memcached # LISTENON を設定
# /etc/init.d/memcached start

memcache-client インストール

# gem install memcache-client

gem でインストールします。gem は楽で良いですね。ところで、gem ってインストールした数が増えるほど require_gem に時間がかかるようになる気がしますが気のせいですかね……

使ってみる

一番単純な利用法は、接続先のホストとポートを指定して MemCache.new することです。あとはハッシュのように値の設定/取得できます。

require 'rubygems'
require 'memcache'
 
cache = MemCache.new('localhost:11211')
cache['number'] = 1234
cache['string'] = 'foo'
cache['array'] = [1, 2, 3]
cache['hash'] = { 1 => 'foo', 2 => 'bar' }
p cache['number'] #=> 1234
p cache['string'] #=> "foo"
p cache['array'] #=> [1, 2, 3]
p cache['hash'] #=> {1=>"foo", 2=>"bar"}

内部で格納するオブジェクトを Marshal していますので、Marshal できる任意のオブジェクトを格納できます。ですので、

require 'rubygems'
require 'memcache'
 
cache = MemCache.new('localhost:11211')
cache['file'] = File.open('/etc/hosts') #=> TypeError: can't dump File

のように IO とそのサブクラスなどはキャッシュできません。また、Ruby 以外の言語とキャッシュデータを共有するのも難しいと思います。

memcached にデータがあることを確かめるため、値の取得だけを試してみます。

require 'rubygems'
require 'memcache'
 
cache = MemCache.new('localhost:11211')
p cache['number'] #=> 1234

Ruby のプロセスは別ですが、データをちゃんと取り出せました。

キーは事実上 String しか利用できません。String#length を使ったり、String#crc32_ITU_T を定義しているためです。多少いじれば Symbol を使うようにすることもできるでしょう。

require 'rubygems'
require 'memcache'
 
cache = MemCache.new('localhost:11211')
cache[ [1, 2, 3] ] = 'foo'
p cache[ [1, 2, 3] ] #=> "foo"

と Array を受け付けちゃったりしますが、ハッシュ値を計算しているロジックが String 前提のようなので、Array を使うと衝突しそうです。String だけ使いましょう。

memcached はデーモンを複数並べて大きなメモリ壁にして使ったり、namespace を設定することで複数のアプリから利用したりと、使い出があるソフトですがとりあえず memcache-client の基本的な使い方としてはこれまで。


2007-05-23 この日を編集

_ [メモ] ゴスリングのインタビュー Ruby について(も)語る このエントリーを含むブックマーク

Javaの父、Java以外の開発言語を語る − @ITより。

一部のスクリプティング言語にも、メソッド呼び出しに関して改善すべき問題があります。われわれは現在、PythonとRubyでメソッドのディスパッチを高速化するためにバイトコードを追加するプロジェクトを進めています。

へー。これ以外にもゴスリングが Ruby と Rails についての質問に答えていて、そんな時代になったのだなあと Ruby 愛好家としては感慨深いです。


2007-05-24 この日を編集

_ [Ruby] 毎月 このエントリーを含むブックマーク

Rubyで毎月っていう処理をするのって、何かいい方法ないのかね。

理想を言えば

from_month..to_month.each{|month|
 
...
 
}

とか書きたいところだけど、日付の基準がわからないから難しいよね。

暴想: 毎月

後先考えないやり方としては、Date#succ を再定義するのが簡単です。

require 'date'
class Date
  alias :_succ :succ
  def succ
    self >> 1
  end
end
 
from_month = Date.new(2007, 02)
to_month = Date.new(2007, 05)
from_month..to_month.to_a.reverse.each{|i| puts i}
#=> 2007-05-01
    2007-04-01
    2007-03-01
    2007-02-01

もっとスマートな方法がきっとあります。


2007-05-28 この日を編集

_ [適当] プログラムのコーパス分析ができると面白い このエントリーを含むブックマーク

と思いました。言語によって使う単語に偏りがあるとか、その偏りの近さで言語同士の生まれ育ちの近さがわかるとか、一文字変数で一番良く使われているのはやはり i だけど時代によって浮き沈みがあったりだとか、あるクラスとあるクラスは一緒に使われることが多いとか、分かったりすると何となく楽しい。↓の記事を読んで。

現在、独立行政法人 国立国語研究所は明治から現代にいたる日本語を電子化して公開する「KOTONOHA計画」を推進している。その一環として現代日本語の書き言葉を集める『現代日本語書き言葉均衡コーパス』を2006年にスタート。完成は2011年を予定しているが、完成時に約1億語となるコーパスの一部分、約1000万語分のデータのインターネット上での試験公開を、5月28日に開始した。一般公開されるのは単純な全文検索だけが可能なWebページだが、学術利用や商用利用に対してはXMLでマークアップされたコーパスも有償で提供していく。

国立国語研究所が大規模コーパスを試験公開

_ [redMine] 最近の redMine 05/22-05/28 このエントリーを含むブックマーク

先週の redMine trunk の気になる変更点をチェックです。r538-r552 が対象です。ウィークデーはあまり動きがありませんでしたが土日に大量のコミットがありました。プロジェクトのアーカイブ機能の追加が大きな変更点です。

r540

wiki ページを削除できるようになりました。データベースからごっそり削除されるみたいです。

r541

wiki ページにファイルをアップロードできるようになりました。textile の画像タグで画像のインライン表示もできるとのこと。

r546

アカウント作成時にアカウント情報をメール通知してくれるようになりました。

r549

プロジェクトのアーカイブ機能が追加されました。アーカイブ化するとデータは残っているものの、削除されたのとほとんど同じ状態になります。つまり、データの参照や操作が一切できなくなります。もう使うことはおそらくないけれど削除はしないで取っておきたい、という用途でしょうかね。一度アーカイブ化したプロジェクトを戻すこともできます。

アーカイブ化

本日のツッコミ(全2件) [ツッコミを入れる]

_ eto [こんなのどうでしょう? http://spa.jssst.or.jp/2004/pub/papers/04002.p..]

_ だて [ありがとうございます。木構造にしてデータマイニングですか。パターンをナレッジベース化して IDE に組み込むと、悪い..]


最近のコメント:

  1. だて (05-30)
  2. eto (05-30)
  3. だて (05-15)

RSS
Creative Commons License
This work is licensed under a Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).