merbが生成するデフォルトのアプリケーションのひな形には、最初からユーザ認証の仕組みを提供するmerb-auth-slice-passwordというSliceが組み込まれています。

これが提供するデフォルトのログイン画面を変更するためには、
app/views/exceptions/unauthenticated.html.erbファイルを作ればOKです。

posted by genki genki on Wed 31 Dec 2008 at 09:55 with 0 comments

Railsで言う所のbefore_saveのようなフィルタは、
Merb(DataMapper)では以下のように使う。

ruby>>
class Post
include DataMapper::Resource

before :save do
# do some stuff
end

def foo
puts "foo!"
end

before :foo, :bar

def bar
puts "bar!"
end
end
<<--

このbeforeメソッドは、ExtLibのhook.rbの中で定義されている。
上記のように、ブロックを取る形式と、イベントをハンドルするメソッド名をシンボルで指定する形式があります。

ExtLibが提供するhookは、saveやvalid?のような特定のイベントだけではなく、全てのメソッドに対して汎用的に利用出来るようです。
ただし、before :foo, :barのように、hookをインストールする時点で、
hookされるメソッド(この場合はfoo)が定義されている必要があります。

クラスメソッドに対するhookも用意されていて、

ruby>>
before_class_method :new do
puts "new!"
end
<<--

のように利用出来ます。

Update

beforeフィルターでメソッドの実行を中止する場合は、

ruby>>
before :save do
throw :halt
end
<<--

のように、:haltをthrowすればOKです(thanks maiha)。
これは美しい。

posted by genki genki on Tue 30 Dec 2008 at 11:27 with 0 comments

merb-1.0.5以降、merbのthor merb:gem:installの挙動が変わったようです。

pre>>
% thor merb:gem:install
<<--

すると、依存するgemファイル一式をMERB_ROOT/gems/以下にインストールする事が出来ます。
同時に、それらを使うためのコマンド類(merbなど)がMERB_ROOT/bin/以下に作られるので、unpackされたgemを使う場合はそれらのコマンドを使う事になります。

以前は、インストールするgem名を引数に取ったり、--cacheなどのオプションが使えたのですが、1.0.5以降はこれが出来なくなっている模様。

pre>>
% ./bin/merb -i
<<--

これを使う事で、edge merbを手元の環境で簡単に使う事が出来ます。

posted by genki genki on Mon 29 Dec 2008 at 21:38 with 0 comments

Zshでthor (トール)のタスクを補完するための補完関数を作ってみました。

sh>>
_thor () {
compadd thor list | awk "{print \\$1}" | grep "\w" | \ ruby -e "puts ARGF.read.gsub /\\e.*?m/,''" | xargs
}

compdef _thor thor
<<--

See Also

posted by genki genki on Mon 29 Dec 2008 at 17:24 with 0 comments

Merb 1.0.7 Release Notes

We just released Merb 1.0.7. Some highlights:

以下適当に訳したり訳さなかったり。

  • merb-action-argsが、仮引数のデフォルト値として[]などのような値が使われても大丈夫になった。
  • 通常起動した場合にpidファイルを出さなくなった。
  • 絶対パスでpartialを使えるようになった
  • _template_forをキャッシュするようになった
  • routerのdefer_toに関するドキュメントを改善
  • request() now goes through additional rack middleware, not just the default Merb application
  • 生成される.gitignoreを改善。
  • 生成されるdependencies.rbにdatamapperとdo_sqlite3を追加
  • merb_mailerの古いドキュメントを直した
  • fixed at least one case where thor bundling was throwing an error related to full_name. If you encounter other errors, please report them immediately on the Merb tracker and tag them “bundling”
  • fixed an issue with merb-helpers where label() was ignoring passed in attributes
posted by genki genki on Mon 29 Dec 2008 at 13:09 with 0 comments

昨日からmasuidriveさんと調査してた
eventmachineのバグ
ですが、straceで追いかけてみた結果、
以下の部分が原因である事が分かりました。

em.cpp EventMachine_t::_RunEpollOnce() の最後付近

c>>
timeval tv = {0,0};
EmSelect (0, NULL, NULL, NULL, &tv); // <- これ

return true;
<<--

見るからにWorkaroundっぽいですね。

straceの結果では、正常に実行されてる場合には
ADDからEPOLLINまでのシステムコール呼び出しが以下のような感じなのに対して、

pre>>
write(1, "************** epoll-add: 0.0377"..., 39************** epoll-add: 0.03
7784 - 8
) = 39epoll_ctl(6, EPOLL_CTL_ADD, 8, {EPOLLIN, {u32=138272384, u64=1323936545317780646
4}}) = 0
epoll_wait(6, {{EPOLLIN, {u32=138272384, u64=13239365453177806464}}}, 65536, 50)
= 1
gettimeofday({1230425221, 603705}, NULL) = 0
write(1, "************** epoll-read: 0.020"..., 40************** epoll-read: 0.0
20716 - 8
<<--

異常時には以下のように謎のselectが発生していました。

pre>>
write(1, "************** epoll-add: 0.0295"..., 39************** epoll-add: 0.029586 - 8
) = 39
epoll_ctl(6, EPOLL_CTL_ADD, 8, {EPOLLIN, {u32=138272384, u64=1323936545317780646
4}}) = 0
epoll_wait(6, {}, 65536, 50) = 0
select(0, NULL, NULL, NULL, {0, 0}) = 0 (Timeout)
time(NULL) = 1230425221
gettimeofday({1230425221, 787115}, NULL) = 0
epoll_wait(6, {}, 65536, 50) = 0
select(0, NULL, NULL, NULL, {0, 0}) = 0 (Timeout)time(NULL) = 1230425221
gettimeofday({1230425221, 839105}, NULL) = 0
epoll_wait(6, {{EPOLLIN, {u32=138272384, u64=13239365453177806464}}}, 65536, 50) = 1
gettimeofday({1230425221, 843713}, NULL) = 0
write(1, "************** epoll-read: 0.110"..., 40************** epoll-read: 0.1
10337 - 8
<<--

どうやらこの謎のEmSelect呼び出しはビジーループ対策のために
挿入されているらしいのですが、以下のような形に直すと問題が
発生しなくなるようです。

c>>
//timeval tv = {0,0};
//EmSelect (0, NULL, NULL, NULL, &tv);
#ifdef BUILD_FOR_RUBY
if (!rb_thread_alone()) {
rb_thread_schedule();
}
#endif
<<--

eventmachineのticketにpatchが上がっている
ので、近いうちに修正されるかもしれません。

ということで、ひとまずお疲れさまでしたー>masuidriveさん

posted by genki genki on Sun 28 Dec 2008 at 10:18 with 0 comments

masuidrive
さんからeventmachineの挙動が不振だという相談を受けたので、
昔取った杵柄で色々調べてみています。

結局の所、EPOLL_CTL_ADD したあとに、epoll_waitがEPOLLIN
になるまでにかかる時間が、稀に1000ミリ秒程度かかる事があるというのが
問題のようでした。
なぜかKQUEUEでも同様の問題が発生するようなのですが、
とりあえずは比較的親しみ深いepollの方を調べてみる事に。

epollの実装は、linuxカーネルの中にあります。
なので、linuxカーネルのソースをインストールします。

pre>>

aptitude install linux-source-2.6.18

<<--

/usr/srcの下に圧縮されたカーネルのソースがインストールされるので、
展開します。

epoll関連のソースコードは、fs/eventepoll.cにあります。

posted by genki genki on Sun 28 Dec 2008 at 04:37 with 0 comments

githubのリポジトリから持ってきた
edge merb
に含まれているパッケージは、
以下の通り。

pre>>
merb-1.0.gem
merb-action-args-1.0.gem
merb-assets-1.0.gem
merb-auth-core-1.0.gem
merb-auth-more-1.0.gem
merb-auth-slice-password-1.0.gem
merb-auth-1.0.gem
merb-cache-1.0.gem
merb-core-1.0.gem
merb-exceptions-1.0.gem
merb-gen-1.0.gem
merb-haml-1.0.gem
merb-helpers-1.0.gem
merb-mailer-1.0.gem
merb-param-protection-1.0.gem
merb-slices-1.0.gem
merb_datamapper-1.0.gem
<<--

merb_datamapperは野良扱いだ。

posted by genki genki on Sat 27 Dec 2008 at 19:32 with 0 comments

merbのGemの名前は、"-"区切りのものと、"_"区切りのものがあるが、

  • "-" はオフィシャルなもの
  • "_" は野良Gem

という使い分けらしい。

posted by genki genki on Sat 27 Dec 2008 at 18:00 with 0 comments

このブログでは、記事の全文検索に
HyperEstraier
を使っています。
普段は安定して動いているのですが、
サーバが突然rebootした場合などに、DBがクラッシュしてプロセスが起動しなくなることがあります。
そんな場合の対処法をメモ。

とりあえず、HyperEstraierのホームディレクトリの下にある、_logファイルをtail -fなどして、HEを起動してみたりします。
_node以下のDBファイルが壊れているのであれば、

pre>>

estcmd repair -rst blog

<<--

などのようにして修復します。しかしなぜかわからないですが、
修復しても起動しない事が結構あります。
そういう場合には、強硬手段ですが、_node以下の破損したDBを削除して、webインターフェイスから作り直します。
その上で reindex! を実行して検索インデックスを作り直します。

以上でだいたい完了。クラッシュしなくなると良いんだけどなー。

posted by genki genki on Sat 27 Dec 2008 at 13:55 with 0 comments

現在のディレクトリがgitの管理下にあるかどうか判定する方法を思いついたので、
walf443さんの方法
を改良してみました。
こんな感じに、gitで管理されてないディレクトリではブランチ名を表示しなくなります。

ss

実際のzshrcは以下の通り。

sh>>
_set_env_git_current_branch() {
GIT_CURRENT_BRANCH=$( git branch &> /dev/null | grep '^*' | cut -b 3- )
}

_update_rprompt () {
if [ "git ls-files 2>/dev/null" ]; then
RPROMPT="[%:$GIT_CURRENT_BRANCH]"
else
RPROMPT="[%
]"
fi
}

precmd()
{
_set_env_git_current_branch
_update_rprompt
}

chpwd()
{
_set_env_git_current_branch
_update_rprompt
}
<<--

git ls-filesがgitの管理下以外では何も返さない事を利用しています。

追記

  • 2>/dev/null が抜けていたので追加しました。
posted by genki genki on Fri 26 Dec 2008 at 16:33 with 0 comments

以前、
benchmarkforrails
というRailsプラグインを紹介した事がありました。
しばらく互換性の問題があって使うのをやめていたのですが、
久々にRails-2.2.2環境で使ってみたら動いたので、
最新版のリポジトリの場所を紹介します。

gitで公開されているので、以下のようにインストールします。

pre>>
% ./script/plugin install git://github.com/cainlevy/benchmarkforrails.git
<<--

See Also

posted by genki genki on Fri 26 Dec 2008 at 14:20 with 0 comments

しばらくRails-2.0.2で運用しておりましたが、このたびRails-2.2.2対応にアップデートしました。

いくつか引っかかった所などをメモしておきます。

  • background_fuに手を入れたものを使っていたのですが、2.2.2で動かなかったので、最新のコードをgithubからpullしてmerge.
  • それでもsend!を呼び出してる所があって、エラーが出ていたので、sendを使うように書き換えた。
  • プラグイン版のjpmobileが残っていてエラーを出していたので、一旦外す。
  • erubisが以下のようなエラーを出すようになった。
    pre>>
    /opt/local/lib/ruby/gems/1.8/gems/erubis-2.6.2/lib/erubis/enhancer.rb:666:in `gsub!': can't modify frozen string (TypeError)
    <<--
  • TemplateHandler::Baseにcompileメソッドが必要になっていた
  • Rails-2.2.x対応版のprawntoを入れる。

ここまででテスト落ちずに全部実行できるようになった。

  • config/routes.rbの解釈が微妙に変わったせいでテストが通らなくなった所を、通るように修正。

だいたい以上で移行完了。

posted by genki genki on Fri 26 Dec 2008 at 02:18 with 0 comments
s21gブログをRails-2.2.2に移行する作業をしてる所なのですが、 erubis-2.6.2を使っていると、テスト時に以下のようなエラーが発生しました。 pre>> /opt/local/lib/ruby/gems/1.8/gems/erubis-2.6.2/lib/erubis/enhancer.rb:666:in `gsub!': can't modify frozen string (TypeError) <<-- erubisのソースを見てみると、 **lib/erubis/enhancer.rbL666** ruby>> def _add_text_to_str(str, text) return if !text || text.empty? text.gsub!(/['\#\\]/, '\\\\\&') str << text end <<-- となっていたので、これをひとまず以下のように直してみました(呼び出しもとをざっと見た感じだと、textを破壊的に変更しなくしても挙動に影響は無さそうだった)。 ruby>> def _add_text_to_str(str, text) return if !text || text.empty? text = text.gsub(/['\#\\]/, '\\\\\&') str << text end <<-- これで先ほどのエラーは出なくなったのですが、 今度は別なエラーが。 pre>> ActionView::TemplateError: You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occurred while evaluating nil.<< On line #13 of app/views/users/edit.html.erb 10:
11:

Account

12: <% 13: form_for(:user, @user, 14: :url => user_path(@user), :html => {:method => :put}) do |f| 15: %> 16: <%= hidden_field_tag :from, :edit %> /opt/local/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/text_helper.rb:42:in `concat' /opt/local/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_view/helpers/form_helper.rb:252:in `form_for' <<-- form_forの中のconcatでエラーが出ている模様。こちらもソースを見てみると、 **actionpack-2.2.2/lib/action_view/helpers/text_helper.rb** ruby>> def concat(string, unused_binding = nil) if unused_binding ActiveSupport::Deprecation.warn("The binding argument of #concat is no longer needed. Please remove it from your views and helpers.", caller) end output_buffer << string end <<-- output_bufferがnilになってるって事みたいです。 Railsでerubisを使っている方、情報求む! **See Also** * [Using Erubis 2.6.2 with Rails 2.2.2 is incompatible?](http://stackoverflow.com/questions/389178/using-erubis-262-with-rails-222-is-incompatible) * [Rails 2.0.1 と 2.0.2 で ERB まわりがけっこう変更されてた](http://d.hatena.ne.jp/kwatch/20080501/1209657073)
posted by genki genki on Thu 25 Dec 2008 at 17:45 with 0 comments

何気なくTwitterのタイムラインを見ていたら、
wycatsとd2hがMerbがRails3にマージされるというお知らせをしてました。

Rails And Merb Merge

Today is a fairly momentous day in the history of Ruby web frameworks. You will probably find the news I’m about to share with you fairly shocking, but I will attempt to explain the situation.

Merb gets merged into Rails 3!

It’s christmas, baby, and do we have a present for you. We’re ending the bickering between Merb and Rails with a this bombshell: Merb is being merged into Rails 3!

確かに最近Railsが急速にMerb化してきてる気がするなと思ってたのですが。
save!のポリシーがどういう感じにmergeされるのかが気になる所。

Updates

#merbを見ていて分かった事など。

  • "any app can be a slice" 全てのアプリケーションがsliceとして利用可能らしい。てことはRails3にはsliceが入るっぽいですね。
  • "we're going to have a rails-core which is basically merb-core"
    merb-coreをベースとしてrails-coreを作るらしい。
  • "goal is beta by RailsConf" 次のRailsConfまでにβを出すのが目標。
  • "rails JS helpers become modular" RJSはモジュールかされて標準添付からは追い出される。
  • "DM definitely will be first-class. Just because AR is the default, doesn't mean DM shouldn't be just as easy to use."
    ARが標準のORMとなるが、DMも同等のサポートを受ける。
  • 依然としてtest/unitがデフォルト。これを機にRSpecが標準になったら良かったのだけど。
  • "get all the specific js code out of the view" JSはviewに書かないスタイルになる。
  • "Rails 3 will definitely have some incompatibilities with Rails 2.x" Rails 3が2.xとの互換性を保つのは難しそう。

全体的な印象として、MerbをベースにRailsを作り直す(%%ビッグバンリライトする%%→ビッグバンリライトではないと書いてた。notを読み落としてました。thanks @moro)ような感じがします。

See Also

posted by genki genki on Wed 24 Dec 2008 at 04:57 with 2 comments

capistranoには、以下のコマンドを実行する事で、メンテナンスページを用意する機能があります。

pre>>
% cap deploy:web:disable
<<--

コマンドを実行すると、デプロイ先のサーバ上で、shared/system/maintenance.html が生成されます。
shared以下のディレクトリは、public/の下にシンボリックリンクが作成されるので、
結果としてpublic/system/maintenance.htmlが準備される事になります。

しかし、capistranoがやってくれるのはここまでなので、
maintenance.htmlが存在した場合にそれを表示するようにするように、
Webサーバを設定する作業は自分でやる必要があります。
mod_railsとかでその辺まで面倒みてくれる感じになっていると楽なんですけどね。

その設定については、Apacheを使っている場合は以下のような感じにすればOKです。

pre>>
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteCond %{REQUEST_URI} !^/images/
RewriteCond %{REQUEST_URI} !^/javascripts/
RewriteCond %{REQUEST_URI} !^/stylesheets/
RewriteRule ^.$ /system/maintenance.html [L]
RewriteRule ^/(images|javascripts|stylesheets)/(.
)$ /$1/$2 [L]
<<--

ちなみに、メンテナンスページを取り下げるには、以下のコマンドを実行します。

pre>>
% cap deploy:web:enable
<<--

これで、maintenance.htmlが削除されます。

See Also

posted by genki genki on Tue 23 Dec 2008 at 16:36 with 0 comments
技術評論社さまよりWeb+DB PRESS vol.48を献本いただきました。 ありがとうございます。
WEB+DB PRESS Vol.48
WEB+DB PRESS Vol.48
posted with amazlet at 08.12.22
WEB+DB PRESS編集部 編
技術評論社
売り上げランキング: 280
特集のPostgreSQLで大規模運用を実現するコツが興味深かったです。
posted by genki genki on Mon 22 Dec 2008 at 09:40 with 0 comments
  • 18:40より会場設営
  • 19:00開始。まずは自己紹介。Merbと私。聞きたいこと。
  • DataMapperとActiveRecordの比較
  • MerbとRailsの比較
  • その他色々とMerb談義

参考資料

posted by genki genki on Fri 19 Dec 2008 at 17:19 with 7 comments

僕はMerbではDataMapperを使うのがお勧めだと思いますが、
DataMapperで利用可能なpropertyの型をまとめておきます。

  • TrueClass, Boolean
  • String
  • Text (デフォルトでは65536バイト)
  • Float
  • Integer
  • BigDecimal
  • DateTime
  • Date
  • Time
  • Object (マーシャル/アンマーシャルされる)
  • Class (Stringと同様に扱われる)

基本的には、

ruby>>
property :name, Type[, options]
<<--

という感じで利用します。

optionsとしては、Hashの形式で以下のようなものが指定出来ます。

  • :accessor, :reader, :writer => :private, :protected, :public
  • :nullable => true
  • :default => value
  • :lazy => true, false (遅延読み込みのオン/オフ)
  • :key => true (Model[key]でアクセスできるようになる)
  • :index => true, "name" (インデックスを作成)
  • :size => length (テキストの長さなど)
  • and so on...

See Also

posted by genki genki on Fri 19 Dec 2008 at 15:11 with 0 comments

Merb勉強会の参考資料としてMerbの思想的なものをまとめておきます。

1. alias_method_chain is evil

Rails流のalias_method_chainによる機能拡張や改変はよろしくないという立場で、代わりにあらかじめhookをちゃんと提供しようという感じみたいです。

例)

ruby>>
Merb::BootLoader.before_app_loads do

do something

end
<<--

2. APIを用意する

MerbにはAPIが用意されていて、以下の三つのカテゴリに分かれているようです。

  • @public 次のメジャーバージョンアップまで変化しない事が保証される。
  • @private Merbコンポーネント開発者向け?
  • @plugin プラグイン開発者向け。

Merbのソースをみると、@publicや@privateなどとメソッドのコメントに書かれています。

posted by genki genki on Fri 19 Dec 2008 at 13:39 with 0 comments

昔からあったような気がするのですが、
つい最近までその存在に気がついてませんでした。

pre>>
% sudo gem update merb
<<--

これで、merb関連のgemを一括で最新バージョンにアップデートする事が出来ます。

posted by genki genki on Fri 19 Dec 2008 at 13:04 with 0 comments

しばらくMerb-1.0.3を使ってたのですが、Merb-1.0.6.1にアップデートした所、以下のようなエラーが出たので原因を調査していました。

pre>>
MERB_ROOT/slices/merb-auth-slice-activation/lib/merb-auth-
slice-activation.rb:5:in `load_dependency': wrong number of arguments (1 for 2)
(ArgumentError)
<<--

どうやらload_dependencyの第二引数が省略出来なくなったらしい。

merb-core-1.0.3/lib/merb-core/core_ext/kernel.rb

ruby>>
def load_dependency(name, *ver, &blk) dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, *ver, &blk
)
gem(dep)
rescue Gem::LoadError => e
Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
ensure
begin
require dep.require_as
rescue LoadError => e
Merb.fatal! "The file #{dep.require_as} was not found", e
end

if block = dep.require_block
  block.call
end
Merb.logger.verbose!("loading gem '#{dep.name}' ...")
return dep # ensure needs explicit return

end
<<--

これに対して、

merb-core-1.0.6.1/lib/merb-core/core_ext/kernel.rb

ruby>>
def load_dependency(name, clr, *ver, &blk)
begin
dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, clr, *ve
r, &blk)
return unless dep.require_as
Gem.activate(dep)
rescue Gem::LoadError => e
e.set_backtrace dep.original_caller
Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
end

begin
  require dep.require_as
rescue LoadError => e
  e.set_backtrace dep.original_caller
  Merb.fatal! "The file #{dep.require_as} was not found", e
end

if block = dep.require_block
  block.call
end

Merb.logger.verbose!("loading gem '#{dep.name}' ...")
return dep # ensure needs explicit return

end
<<--

第二引数のclrが省略出来なくなった模様。
private APIはメジャーバージョンアップじゃなくても仕様変わるのか。

#merbで聞いてみた所、1.0.4から以下のように明示的に指定するようになったらしい。

ruby>>
load_dependency 'merb-slices', :immediate => true
<<--

詳しくは
http://wiki.merbivore.com/releases/1.x/known_issues
参照のこと。

教えてくれたcarpeliamありがとう!

See Also

posted by genki genki on Fri 19 Dec 2008 at 03:48 with 0 comments

GitX
は、MacOSXで使えるGit用のGUIツールです。

ss1

基本的にはCUIで操作してるのですが、
これを使うとブランチのマージの様子などが視覚的に追えて便利。

アバター画像はメールアドレスから
gravatar経由で持ってきてるんですね。
賢い。

See Also

posted by genki genki on Fri 19 Dec 2008 at 02:29 with 0 comments

カウボーイ忘年会の二次会で色々お話ししてくださった、
神谷
さんから教えてもらったのですが、MEMS(Micro Electro Mechanical Systems)という技術がなかなか凄い事になっているようです。

ものすごく小さいバネが形成されています。

歯車。

See Also

posted by genki genki on Thu 18 Dec 2008 at 13:45 with 0 comments

MySQLでInnoDBを使っているとdata_dirの下にibdata1というファイルが出来て、このファイルサイズがだんだん大きくなっていきます。
大分肥大化してきていたので、テーブル毎に分割する設定を行いました。

/etc/mysql/my.cnf

pre>>
(snip)
[mysqld]
innodb_file_per_table
(snip)
<<--

あとはDBへのアクセスを止めて、mysqlを再起動します。
再起動したら、

sql>>
ALTER TABLE articles TYPE=InnoDB;
<<--

を実行すると、data_dirの下のデータベース名のディレクトリの下に、
いままであったarticles.frmの他にarticles.ibdのようなファイルができています。

See Also

posted by genki genki on Thu 18 Dec 2008 at 12:24 with 0 comments

syoyoさんが主催しているOoOで、
第五回 レンダラ忘年会 '08
が12/20(土)に開催されます。

** (OoO =オフラインレンダラ野郎のためのオフラインレンダラについて議論するオフライン会)**

集合時間に間に合わない方には、当日 B1F の入り口に連絡先が書かれた張り紙をしておきます。

参加費: 0 円

懇親会(任意参加): 有料

今回はレンダラ忘年会 08 です. 今年のレンダラ界隈の話題をまったりと振り返ります.

レンダラに興味がある方は振るってご参加ください。

posted by genki genki on Thu 18 Dec 2008 at 02:08 with 0 comments

アップデートの申請中だったPokéDiaのversion 1.1の販売が開始されました。

今回のアップデートで更新される内容は、
以前お伝えした通り
以下の通りです。

  • メール送信ができなくなっていた問題を修正しました。
  • 特定の操作を行った時に、メモが消える事があるバグを直しました。
  • チェックボックスの切り替え時に不正な禁則処理が行われる問題を修正しました。
  • 2本指フリックで次に予定がある日に移動するようになりました。
  • 3本指フリックで翌週に移動するようになりました。
  • 起動時に今日のページを表示するように設定可能になりました。
  • 今日の未チェックのメモの数をバッジとして表示出来るようにしました。
  • 対応言語が増えました(従来の英語,日本語,フランス語,スペイン語,ドイツ語に加えて、Danish、Dutch, Finnish, Italian, Norwegian, Polish, Portuguese, Russian, Swedish, Turkish, Ukrainian)
  • 起動時にLoadingメッセージを表示するようにしました。

PokéDiaをすでにご購入頂いている皆様には、長らくお待ちいただきましてありがとうございます。
今後とも機能改善を続けていきますので、よろしくお願いいたします。

posted by genki genki on Wed 17 Dec 2008 at 21:12 with 0 comments

gemコマンドを使っていると、古いバージョンのgemがだんだんたまっていきます。

年の瀬も近い事ですし、最新バージョン以外のgemをきれいにする方法を紹介します。

pre>>
% sudo gem clean
<<--

これでOK.

posted by genki genki on Tue 16 Dec 2008 at 15:36 with 0 comments

一緒にPokéDiaを開発している美谷さん主催の、
iPhoneアプリ勉強会(非技術系です)が12/22に開催されます。

12/22の夜iPhoneアプリ勉強会を開催します。

僕もちょっとパネリストとして出てきます。

posted by genki genki on Tue 16 Dec 2008 at 12:52 with 0 comments

コントロールされた乱数

自然な乱数よりも、自然と認識される乱数についてもうちょっと模索すべきかなとか思った今日この頃。

準乱数(低食い違い量列とも呼ぶ)を使うと期待通りのものが得られると思います。

See Also

posted by genki genki on Tue 16 Dec 2008 at 11:27 with 0 comments

しばらく前からPokéDia-1.1のアップデートを申請していたのですが、
一緒に開発している美谷さんと以下のような点を検討した結果、version 1.2として開発している
現時点での最新版のアプリを、version-1.1の更新に含めて申請し直す事にしました。

  • 最小限度の修正だったが、審査が長引いてしまっている
  • メモが消える問題などの主要なバグ修正は1.2に入っている
  • 年末年始のAppleの休業などを考えると、今年中に主要なバグ修正が行われるためには、今申請し直すのが最後のチャンスかもしれない

具体的には、version-1.1では以下の点が更新されます。

  • メール送信ができなくなっていた問題を修正しました。
  • 特定の操作を行った時に、メモが消える事があるバグを直しました。
  • チェックボックスの切り替え時に不正な禁則処理が行われる問題を修正しました。
  • 2本指フリックで次に予定がある日に移動するようになりました。
  • 3本指フリックで翌週に移動するようになりました。
  • 起動時に今日のページを表示するように設定可能になりました。
  • 今日の未チェックのメモの数をバッジとして表示出来るようにしました。
  • 対応言語が増えました(従来の英語,日本語,フランス語,スペイン語,ドイツ語に加えて、Danish、Dutch, Finnish, Italian, Norwegian, Polish, Portuguese, Russian, Swedish, Turkish, Ukrainian)
  • 起動時にLoadingメッセージを表示するようにしました。

PokéDiaをご購入いただいている皆様には、ご不便をおかけいたしまして誠に申し訳ございません。

posted by genki genki on Sun 14 Dec 2008 at 10:58 with 0 comments

12/13に
株式会社スプーキーズ
で開催された、
iPhone勉強会 at 京都
で発表してきました。

slide01

ほとんどトークとXcodeの画面、シミュレータだけで発表したので、
資料は上の画像だけなのですが、一応おいておきます。

勉強会の内容についてのまとめは、以下の記事などで非常に良くまとめてくださっているので、ご覧頂けると良いと思います。

iPhoneアプリ開発のような、新しい分野に挑戦していく時には、
一人だけで戦うよりも、集まって知恵を出し合って問題に
挑戦する方が有益だし、何より楽しいと思っています。

マーケットの成長がプレイヤー全員の利益になるタイミングでは、
互いにコンペティターであるという垣根を越えて、
持っている情報を出し合っていく事が全員にとって利益になり得ます。

この奇跡のようなタイミングに居合わせることが、僕は好きなんだな。

参加者の皆様、本当にありがとうございました。

posted by genki genki on Sun 14 Dec 2008 at 03:36 with 0 comments

Asakusa.rb会場で学んだ事をメモしていきます。

RubyのリポジトリはSVNで提供されていますが、
Git使い的には、以下のようにgit svn cloneでもってきます。

pre>>
% git svn clone http://svn.ruby-lang.org/repos/ruby -T trunk -r 20630
<<--

上記のようにリビジョン番号を指定するのが得策です。

とってきたら、まずは

pre>>
% autoconf
% ./configure
(snip)
version.h:29:22: error: revision.h: No such file or directory
<<--

というエラーが出るので、以下のようにrevision.hを作成します。

revision.h

c>>
#define RUBY_REVISON 20630
<<--

そしておもむろに

pre>>
% make
<<--

これでOK. trunkのrubyが出来上がります。

posted by genki genki on Thu 11 Dec 2008 at 19:47 with 0 comments

以前から気になっていた
TweetDeck
なのですが、日本語入力が出来なくてなかなか使えていませんでした。
しかし、作者の@iaindodsworthさんに聞いてみたら、日本語入力出来るようにする方法を教えてもらえました。

設定パネルから、以下の項目をチェックするだけで良いみたいです。

ss

すばらしい!

ss2

posted by genki genki on Thu 11 Dec 2008 at 06:11 with 2 comments

以下のメソッドを呼び出すと何が得られるだろうか?

ruby>>
def foo
return 1
ensure
return 2
end
<<--

以下のように、ensure内でreturnされた2が帰ります。

ruby>>
foo #=> 2
<<--

面白いですね。何かに使えそうだ。

posted by genki genki on Tue 9 Dec 2008 at 09:28 with 1 comment

現在審査中のversion 1.1が出るのを待って、アップデートの申請を予定している PokéDia version 1.2から、
今日の残タスク(チェックボックスがついているメモ)数をバッジで表示できるようになります。

ss01

設定画面はこんな感じです。デフォルトではオフになっています。

ss02

このようなタスクがある場合、

ss03

このように、残タスク数を表示します。

posted by genki genki on Tue 9 Dec 2008 at 06:55 with 0 comments

iPhone内で使われている最適化されたPNGについて解説しているページ。

最適化されたPNGと、そうでないPNGでは、[UIImage drawInRect:]の速度が大分違うようです。
PNGの最適化は、Xcodeがリソース中のPNGをBundleにコピーする時に行われる模様。

posted by genki genki on Sun 7 Dec 2008 at 11:00 with 0 comments

現在開発中のPokéDia 1.2から、起動時に表示される日を選べるようになります。

ss1

デフォルトではオフで、終了時に表示していたページを表示します。
オンにすると、常に今日のページを表示するようになります。

posted by genki genki on Sat 6 Dec 2008 at 14:05 with 0 comments

今日は、報告いただいていたバグのうち、重要なものについては修正が完了しました。
以下は、解決済みのバグです。

  • メモを浮かせてフリックで移動して固定した後に、逆方向にフリックして閉じるとメモが消える。
  • チェックボックスをオンにすると禁則処理によって意図しない改行が入り、表示が乱れる。
  • メールアドレスを沢山登録すると設定画面のスクロールが乱れる

その他、比較的すぐに実現出来る機能改善などを行っていきます。

  • 起動中にLoadingの表示を入れる
    IMG_0016.PNG

同じアプリのアップデートを同時に複数審査してもらう事が出来ないので、
メール送信のバグを修正した version 1.1 の審査が通り次第、現在開発しているversion 1.2を申請いたします。

posted by genki genki on Sat 6 Dec 2008 at 03:42 with 0 comments

メール通知機能がSPAM扱いをされてしまい、メールが送信が出来なくなるトラブルが解決できたので、
PokéDia-1.1をiTunesストアに申請いたしました。
承認されるまで、今しばらくおまたせいたしますが、
何卒よろしくお願いいたします。

今後とも、ご報告いただいている不具合の修正を進めるとともに、
ご要望いただいている機能の実装などを行っていきます。

それでは、今後ともよろしくお願いいたします。

posted by genki genki on Thu 4 Dec 2008 at 11:49 with 0 comments

PokéDiaをお買い上げいただいた皆様。

現在(12/4)のところ、PokéDiaのメール送信機能がSPAM扱いされてしまい、うまく機能してない状態になっております。
そのため、現在メール送信機能を一時停止させて頂いております。
ご不便をおかけいたしまして申し訳ございません。

現在、この問題に対処するための改善を実装中です。
最速でアップデートが受理される事を期して、
まずは本件の修正のみを行ってアップデート申請を行う予定です。

他にもいくつかの不具合のご報告を頂いておりますが、
こちらにつきましても速やかに修正してアップデート申請をいたします。
バグ修正状況につきましては、随時このブログや、
http://pokedia.com/でご報告いたします。

至らない点が多く恐縮ですが、
何卒今後ともよろしくお願いいたします。

posted by genki genki on Thu 4 Dec 2008 at 04:36 with 0 comments

美谷さん
と一緒に作っていたiPhone用の手帳アプリ、
PokéDia (日本語圏ではPokeDiaと表記しています)
がiTunesストアで販売が開始されました。

pokedia

PokéDiaはiPhone/iPod touch向けの日めくり手帳です。

画面全体を一日分のページとして利用できる手帳アプリとなっています。
日記、スケジュール、ToDoリストなど日々思いついたことを画面上の好きな
位置に紙の手帳と同じ感覚で書き留めることができます。

  • 1日1画面のレイアウト
  • 翌日、前日には画面フリックで移動
  • 1年間だけでなく、何十年先まで利用できる万年手帳
  • テキストの色を黒、赤、緑、青の4色に変更できます。
  • 入力したテキストはタップした後、ドラッグしたりページをフリックすることでページ内の別位置や、別の日付に移動させることが可能。
  • iPhone発売国を含む世界84カ国の祝日情報
  • 月齢アイコン
  • 書いたメモはE-mailで転送することができます。

メモした情報は日付別のページに保存され、後から情報を見返すときも手帳をめくる感覚で操作することができます。

ss01.jpg

See Also

posted by genki genki on Wed 3 Dec 2008 at 17:36 with 0 comments

CapistranoをMerbでDataMapperを使ってる場合に、
cap deploy:migrationsを実行した時に、rake db:migrateではなく、
rake db:autoupgradeをするようにするための設定の書き方のメモです。

具体的には、以下のようにdeploy:migrateタスクを書き換えます。

config/deploy.rb

ruby>>
namespace :deploy do
desc "Run autoupgrade"
task :migrate do
run "cd #{release_path}; rake db:autoupgrade MERB_ENV=production"
end
end
<<--

これでOKです。

posted by genki genki on Tue 2 Dec 2008 at 15:04 with 0 comments

merbのsliceはRubyGemsの形で提供されているのですが、
これをmerbアプリケーションの中に展開する方法は、
freezeとunpackの2通りあります。

  • freezeは、sliceのapp/以下のみを展開する
  • unpackは、sliceの中身全部を展開する

freezeを使う目的は、sliceの挙動を一部変更する事です。
そのため、sliceをfreezeしても、config/dependencies.rbの中で
sliceに対するdependencyを削除する事は出来ません。
依然としてsliceのgemに依存したままになります。

これに対して、unpackを使った場合、gemに内在する全てのファイルが展開されるため、config/dependencies.rbの中のsliceに対するdependencyを削除しても大丈夫な状態になります。

posted by genki genki on Tue 2 Dec 2008 at 09:48 with 0 comments

merbのsliceをfreezeするには、

pre>>
% rake slices::freeze
<<--

を実行すればOKです。

これにより、MERB_ROOT(Merbアプリケーションのルートディレクトリ)の下にslicesディレクトリが(無ければ)作成され、その下に
<slice_name>というディレクトリが出来ます。
Sliceはその中にfreezeされます。

posted by genki genki on Tue 2 Dec 2008 at 09:00 with 0 comments

merbのsliceを管理するRakeタスクの一覧をメモしておきます。
以下はmerb-auth-slice-activationの場合。

pre>>
slices:merb_auth_slice_activation:copy_assets
slices:merb_auth_slice_activation:freeze
slices:merb_auth_slice_activation:freeze:app
slices:merb_auth_slice_activation:freeze:app_with_gem
slices:merb_auth_slice_activation:freeze:gem
slices:merb_auth_slice_activation:freeze:mailers
slices:merb_auth_slice_activation:freeze:models
slices:merb_auth_slice_activation:freeze:unpack
slices:merb_auth_slice_activation:freeze:views
slices:merb_auth_slice_activation:install
slices:merb_auth_slice_activation:migrate
slices:merb_auth_slice_activation:patch
slices:merb_auth_slice_activation:preflight
slices:merb_auth_slice_activation:setup_directories
slices:merb_auth_slice_activation:spec
slices:merb_auth_slice_activation:spec:controller
slices:merb_auth_slice_activation:spec:default
slices:merb_auth_slice_activation:spec:html
slices:merb_auth_slice_activation:spec:mailer
slices:merb_auth_slice_activation:spec:model
slices:merb_auth_slice_activation:spec:view
slices:merb_auth_slice_activation:stubs
<<--

posted by genki genki on Tue 2 Dec 2008 at 08:57 with 0 comments

merb-mailerを使ってメールを送信するための設定方法のメモです。

config/init.rbもしくは、config/environments/***.rbの中で、
以下のように設定を記述します。

sendmailを使う場合

ruby>>
Merb::BootLoader.before_app_loads do
Merb::Mailer.config = {
:sendmail_path => '/usr/sbin/sendmail'
}
Merb::Mailer.delivery_method = :sendmail
end
<<--

SMTPを使う場合

ruby>>
Merb::BootLoader.before_app_loads do
Merb::Mailer.config = {
:host => 'smtp.yourdomain.com',
:port => '25',
:user => 'user',
:pass => 'pass',
:auth => :plain,
:domain => "localhost.localdomain"
}
end
<<--

See Also

posted by genki genki on Mon 1 Dec 2008 at 22:55 with 0 comments

MerbではRSpecを使ってテストをするのが標準構成になっていますが、
merb-genが生成したアプリケーションのひな形では、
rake specの実行結果は色付きにはなっていません。
これを色付きにするためには、
spec/spec.optsの中で以下のように設定します。

spec/spec.opts

pre>>
--color
<<--

これだけです。

posted by genki genki on Mon 1 Dec 2008 at 15:41 with 8 comments
Contents rssrss
光ファイバーを二次元振動させて走査するAR用ディスプレイ
因果の取り違え
Swift2's defer for CoffeeScript
mongodb-3.0からcreateIndexのdropDupsが無くなったらしい
mongodb-3.0以降のWiredTigerの設定を動的に変更する方法
一般楕円の高速生成アルゴリズムへの道標
farro mantecatoのレシピ
Droonga関連の記事のまとめ
RuntimeErrorの特定のメッセージに限定してrescueする方法
jQueryでscriptタグを実行せずにappendする
Tags
memomerbお知らせpokediarailsrubysliceDMedgegitiphonecapgemnewsthorzshイベント紹介authbug
Comments rssrss
瀧内元気 瀧内元気: MacOS版は以下にあります genki/ViMouse 01/16 05:40
dsjf dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これでも出... 01/08 23:23
瀧内元気 瀧内元気: おお、チェックしてみます。thx! 12/24 05:23
overisland overisland: Reeder for iPhone もこの UI を実装していますね。 12/24 05:13
瀧内元気 瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 http:... 12/01 12:20
tkawa tkawa: http://devcenter.heroku.com/articles/rails31_herok... 12/01 10:47
瀧内元気 瀧内元気: どもー。いまはgithubに置いてあります https://github.com/genki/irb... 07/10 08:31
ともち ともち: こんにちは! すばらしいプログラムをありがとうございます。しかし、merbiのドメイン、切れているみ... 07/10 02:30
Services from s21g
YOMU Web小説リーダー
YOMUは、Web小説の読み上げに特化したiPhoneアプリです。
補助探
公開されている補助金・助成金情報を集約し、条件に合う制度を探しやすくするサービスです。
jotter.me
個人開発者のためのホスティング一体型ノートサービス
ハンドミラー
iPhone向けの手鏡アプリ
ツイプロ(twpro)
Twitterプロフィールの高速検索エンジン