Merbのプラグインの多くは、Merb以外の場所でも使えるように設計されています。 また、いくつかのRailsプラグインも、Merbや他のプラットフォームで利用できたり、単体でも利用可能になっていたりします。

これらのプラグインは、Agnosticなプラグインと呼ばれています。 従来のプラグイン機構が、特定のフレームワークの機能を拡張する役割にとどまっていたのに対して、Agnosticなプラグインは、複数のプラットフォームを股に掛けて活躍します。

fig

このような動きは、従来のフレームワークとプラグインの関係を改めるものとして注目に値するものだと思います。 フレームワーク間で共通に必要となるようなプラグインの重要性が高まり、 今まで分散していたプラグイン開発リソースが、統合されることによって効率化がはかられたと見る事も出来ます。

これからは、フレームワークの知識だけでなく、 主要なAgnosticプラグインの利用法に習熟する事が 生産性の向上のために必要になってくるかもしれません。

posted by Png genki on Wed 11 Mar 2009 at 08:06

@maihaさんを中心として、私やMerb勉強会の参加者によって作り続けていたMerbのRuby-1.9.1対応のパッチ群が、Merb本体に取り込まれました。

ss

http://github.com/wycats/merb/commits/

Merb勉強会での活動が実を結んだわけです。 めでたいです。ありがとうございます。

Merb-1.1では、Ruby-1.9.1に対応したMerbがリリースされそうです。

Merb 1.1 roadmap

posted by Png genki on Wed 11 Mar 2009 at 06:01

先日送ったpatchが採用され、Ruby-1.9.1対応の bcrypt-ruby-2.0.4がリリースされました。

http://rubyforge.org/projects/bcrypt-ruby/

Thanks you, codahale!

posted by Png genki on Tue 10 Mar 2009 at 13:13

サーバ管理をしていて、root権限が必要なディレクトリに、ファイルをリポジトリからgit cloneしてきたい状況になったので、方法をメモしておきます。 まず状況の確認として、

  • gitのプロトコルにはsshを使っている
  • リポジトリサーバには、rootユーザでは鍵認証でもパスワード認証でもログインできない
  • リポジトリサーバ、clone先のサーバ双方ともfooというローカルユーザが存在。sshでリモートログインできる

という感じです。ユーザ権限でアクセス出来る場所にgit cloneする場合であれば、

   1  foo% git clone ssh://git.repos.com/path/to/repo.git

こんな感じで済むのですが、ファイルの作成にroot権限が必要な場合、 repoディレクトリを作成出来なくて怒られます。 かといって、rootユーザでgit cloneしようとしても、リポジトリサーバにはrootではログイン出来ないのでcloneできません。

そのような場合には、以下の手順を踏みます。

  1. clone先のサーバに ssh -A foo@target.server.com でエージェントフォワードしてログイン。
  2. ssh -A root@localhost でエージェントフォワードした状態でlocalhostにrootユーザでログイン(ターゲットサーバ上での、ローカルからのrootによるssh接続は許可する必要がある)
  3. git clone ssh://foo@git.repos.com/path/to/repo.git でclone

これでroot権限が必要な場所にfooユーザのSSHエージェントを介してリポジトリサーバに接続し、cloneできます。

注意

安全にエージェントフォワーディングを行う事が出来るのは、 接続先および踏み台にするのサーバ群の管理者たちが全て信頼できる場合に限られます。

posted by Png genki on Tue 10 Mar 2009 at 02:34

Macの開発環境にEC2 ami toolsを入れる手順のメモ。 今回はmacportsのrpmを使ってインストールしました。

   1  % wget http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.noarch.rpm
   2  % sudo rpm -i ec2-ami-tools.noarch.rpm --nodeps --ignoreos

これだけです。

あとは、.zshrcなどで、RUBYLIB環境変数に/usr/lib/site_rubyを加えておきます。

See Also

posted by Png genki on Mon 9 Mar 2009 at 14:48

portを使っていて以下のようなエラーが出たので、対策を調べてみました。

   1  Unable to execute port: can't read "frameworks_dir": no such variable

Mac OS Xで(も)tamarinのabcdump.asからabcdump.exeを作る

これはports自身を更新することで、解消ができました。

ということで、以下のコマンドでportを更新。

   1  % sudo port -v selfupdate
   2  % sudo port -d sync

これでエラーが出なくなりました。

posted by Png genki on Mon 9 Mar 2009 at 13:38

会場にお越し下さった皆様、ありがとうございます。

posted by Png genki on Sun 8 Mar 2009 at 21:35

弊社は、deployツールとしてcapistranoを使っています。 しかし、Capistranoのメンテナンスが終了するという話("Jamis Buck氏, CapistranoやSQLite/rubyの開発を終了"参照)を聞いても、 特に困らないという事に気がついて、あらためて驚きを感じました。

なぜだろうと考えてみると、それはGitとGitHubの存在による所が大きい。 GitHubにソースがある限り、メンテナが不在でも勝手にforkして 野良patchを書いたり、それを集めてきてちょっとした stable release的なものを作ったりする事ができてしまう。

もちろんそれは、今までだって頑張れば出来た事だけれど、 Git/GitHubは、それを全く違う次元で簡単にしてしまった。

かつてはメンテナやコミッタが専権的にソフトウェア開発の決定権を握っていた構造が、Git/GitHubの登場によって、気がつかないうちに崩れ去っている。 これはソフトウェア開発史上、非常に大きな出来事なんだろう。

See Also

posted by Png genki on Thu 5 Mar 2009 at 03:58

Xcodeで開発しているiPhoneアプリをgitで管理する場合には、 以下のような .gitignore ファイルを使っています。

   1  *.xcodeproj/*.mode1v3
   2  *.xcodeproj/*.pbxuser
   3  build
   4  .DS_Store

posted by Png genki on Wed 4 Mar 2009 at 18:36

ちょっと必要だったので作りました。

ss

CoreGraphicsを使って、指定したCGRectの中に、指定した太さの×印(Cross Sign)を描画するためのPathを生成します。

   1  void PDPathAddCrossSign(CGMutablePathRef path, CGRect rect, CGFloat thickness)
   2  {
   3    CGFloat diff = rect.size.width - rect.size.height;
   4    rect = CGRectDeflateRect(rect, MAX(0, diff/2), MAX(0, -diff/2));
   5    CGFloat radius = rect.size.width/2;
   6    CGFloat d = sqrt(2)*thickness/2;
   7    CGFloat cx = CGRectGetMidX(rect), cy = CGRectGetMidY(rect);
   8    CGAffineTransform transform = CGAffineTransformMakeTranslation(cx, cy);
   9    CGPathMoveToPoint(path, &transform, d, 0);
  10    for(int i = 0; i < 4; ++i){
  11      CGPathAddLineToPoint(path, &transform, radius, radius - d);
  12      CGPathAddLineToPoint(path, &transform, radius - d, radius);
  13      CGPathAddLineToPoint(path, &transform, 0, d);
  14      transform = CGAffineTransformRotate(transform, M_PI/2.0f);
  15    }
  16    CGPathCloseSubpath(path);
  17  }

中で呼び出してるCGRectDeflateRectは以下のようなものです。

   1  CGRect CGRectInflateRect(CGRect rect, CGFloat width, CGFloat height)
   2  {
   3    rect.origin.x -= width;
   4    rect.origin.y -= height;
   5    rect.size.width += width*2;
   6    rect.size.height += height*2;
   7    return rect;
   8  }
   9  
  10  CGRect CGRectDeflateRect(CGRect rect, CGFloat width, CGFloat height)
  11  {
  12    return CGRectInflateRect(rect, -width, -height);
  13  }

これを使う事で、任意の大きさ、太さ、色で×印を描画できます。

posted by Png genki on Wed 4 Mar 2009 at 00:12
Contents
フレームワークの壁を越えるAgnosticプラグイン
MerbのRuby-1.9.1対応のためのpatchが本家に取り込まれました
bcrypt-rubyがruby-1.9.1に対応
root権限で特定のユーザのSSHエージェントを介してgit cloneする方法
MacOSXにEC2 ami toolsを入れる
Error: Unable to execute port: can't read "frameworks_dir"の対処法
Apple Store銀座で弊社iPhoneアプリの紹介をしてきました
GitHubの登場はコミッタを特権階級から追い落とす革命だった
iPhoneアプリをgitで管理する場合の.gitignore
CoreGraphicsで指定したRectの中に×印のPathを生成する
Comments
瀧内元気: MacOS版は以下にあります * [genki/ViMouse](https://githu... '23-1
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ