<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>func09</title>
	<atom:link href="http://www.func09.com/wordpress/feed" rel="self" type="application/rss+xml" />
	<link>http://www.func09.com/wordpress</link>
	<description>Ruby, Rails, ActionScript、JavaScriptなどの話題</description>
	<pubDate>Tue, 18 Nov 2008 02:01:54 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>ja</language>
			<item>
		<title>[rails] ユーザーのパスワード忘れ処理を簡単に生成してくれるプラグインforgot_password ( with Restful-authentication)</title>
		<link>http://www.func09.com/wordpress/archives/348</link>
		<comments>http://www.func09.com/wordpress/archives/348#comments</comments>
		<pubDate>Mon, 17 Nov 2008 18:05:21 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<category><![CDATA[ruby on rails]]></category>

		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=348</guid>
		<description><![CDATA[はじめに

Railsとrestful-authenticationの組み合わせで、パスワード忘れの機能を実装するにあたって、いろいろと参考になるものを探していたところ、簡単に機能を実装できるプラグインがあったので紹介。 [...]]]></description>
			<content:encoded><![CDATA[<h2>はじめに</h2>

<p>Railsとrestful-authenticationの組み合わせで、パスワード忘れの機能を実装するにあたって、いろいろと参考になるものを探していたところ、簡単に機能を実装できるプラグインがあったので紹介。</p>

<p><strong>forgot_password</strong>プラグイン<br />
<a href="http://github.com/greenisus/forgot_password/tree/master">http://github.com/greenisus/forgot_password/tree/master</a>
</p>

<p>
restful-authenticationを使う事前提で、script/generate forgot_passwordというジェネレータでちゃちゃっとパスワードを忘れた人用のページを作ってくれます。実際にやってみます。
</p>

<h2>準備</h2>

<p>まずはプロジェクトのインストールから</p>

<div class="syntax_hilite"><div id="code-11">
<div class="code">% rails forgot_password_sample<br />
% cd forgot_password_sample/</div>
</div></div>

<p><br /></p>

<p>つづいてプラグインのインストール。gitコマンドが必要です。</p>

<div class="syntax_hilite"><div id="code-12">
<div class="code">% script/plugin install git:<span style="color:#FF9933; font-style:italic;">//github.com/technoweenie/restful-authentication.git</span><br />
% script/plugin install git:<span style="color:#FF9933; font-style:italic;">//github.com/greenisus/forgot_password.git </span></div>
</div></div>

<p><br /></p>

<p>そして、認証とパスワード忘れのジェネレーターを実行。</p>

<div class="syntax_hilite"><div id="code-13">
<div class="code">% script/generate authenticated --include-activation user sessions<br />
% script/generate forgot_password forgot_password user</div>
</div></div>

<p><br /></p>

<p>forgot_passwordプラグインによって、以下のファイルが追加・編集されている</p>

<ul>
<li>追加ファイル

<ul>
<li>db/migrate/xxxxxxxxxxxxxx_create_forgot_passwords.rb</li>
<li>app/models/forgot_password.rb</li>
<li>app/models/forgot_password_mailer.rb</li>
<li>app/controllers/forgot_passwords_controller.rb</li>
</ul></li>
<li>修正ファイル

<ul>
<li>config/routes.rb</li>
</ul></li>
</ul>

<hr />

<p><span id="more-348"></span></p>

<h2>修正</h2>

<p>アクティベーション用のルートを設定。config/routes.rbに追加</p>

<div class="syntax_hilite"><div id="ruby-14">
<div class="ruby">map.<span style="color:#9900CC;">activate</span> '/activate/:activation_code', :controller =&gt; 'users', :action =&gt; 'activate', :activation_code =&gt; <span style="color:#0000FF; font-weight:bold;">nil</span></div>
</div></div>

<p><br /></p>

<p>forgot_passwordのバグなのか、パスワード用のモデル名にpassword以外を使うと、メール送信の行が２行、それも片方は存在しないクラス名で作られています。</p>

<p>app/controllers/forgot_passwords_controller.rbを修正して、使わない方の行をコメントアウトしておきます。</p>

<div class="syntax_hilite"><div id="ruby-15">
<div class="ruby"><span style="color:#008000; font-style:italic;"># 50行目をコメントアウト</span><br />
<span style="color:#008000; font-style:italic;">#PasswordMailer.deliver_reset_password(@user)</span><br />
ForgotPasswordMailer.<span style="color:#9900CC;">deliver_reset_password</span><span style="color:#006600; font-weight:bold;">&#40;</span>@user<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div></div>

<p><br /></p>

<h2>確認</h2>

<p>パスワード忘れを表すテーブルが追加されました。</p>

<div class="syntax_hilite"><div id="code-16">
<div class="code">% cat db/migrate<span style="color:#008000;">/*_create_forgot_passwords.rb </span></div>
</div></div>

<p><br /></p>

<div class="syntax_hilite"><div id="ruby-17">
<div class="ruby"><span style="color:#9966CC; font-weight:bold;">class</span> CreateForgotPasswords &lt;ActiveRecord::Migration<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">up</span><br />
&nbsp; &nbsp; create_table <span style="color:#996600;">"forgot_passwords"</span> <span style="color:#9966CC; font-weight:bold;">do</span> |t|<br />
&nbsp; &nbsp; &nbsp; t.<span style="color:#CC0066; font-weight:bold;">integer</span> :user_id<br />
&nbsp; &nbsp; &nbsp; t.<span style="color:#CC0066; font-weight:bold;">string</span> :reset_code<br />
&nbsp; &nbsp; &nbsp; t.<span style="color:#9900CC;">datetime</span> :expiration_date<br />
<br />
&nbsp; &nbsp; &nbsp; t.<span style="color:#9900CC;">timestamps</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">down</span><br />
&nbsp; &nbsp; drop_table <span style="color:#996600;">"forgot_passwords"</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div>
</div></div>

<p><br /></p>

<p>パスワードの再設定を申請する名前付きルートとパスワードを再設定するルートが追加されています。</p>

<div class="syntax_hilite"><div id="code-18">
<div class="code">% head config/routes.<span style="">rb</span></div>
</div></div>

<p><br /></p>

<div class="syntax_hilite"><div id="ruby-19">
<div class="ruby">ActionController::Routing::Routes.<span style="color:#9900CC;">draw</span> <span style="color:#9966CC; font-weight:bold;">do</span> |map|<br />
&nbsp; map.<span style="color:#9900CC;">forgot_password</span> '/forgot_password', :controller =&gt; 'forgot_passwords', :action =&gt; 'new'<br />
&nbsp; map.<span style="color:#9900CC;">change_password</span> '/change_password/:reset_code', :controller =&gt; 'forgot_passwords', :action =&gt; 'reset'<br />
&nbsp; map.<span style="color:#9900CC;">resources</span> :forgot_passwords<br />
<br />
&nbsp; map.<span style="color:#9900CC;">logout</span> '/logout', :controller =&gt; 'sessions', :action =&gt; 'destroy'<br />
&nbsp; map.<span style="color:#9900CC;">login</span> '/login', :controller =&gt; 'sessions', :action =&gt; 'new'<br />
&nbsp; map.<span style="color:#9900CC;">register</span> '/register', :controller =&gt; 'users', :action =&gt; 'create'<br />
&nbsp; map.<span style="color:#9900CC;">signup</span> '/signup', :controller =&gt; 'users', :action =&gt; 'new'<br />
&nbsp; map.<span style="color:#9900CC;">activate</span> '/activate/:activation_code', :controller =&gt; 'users', :action =&gt; 'activate', :activation_code =&gt; <span style="color:#0000FF; font-weight:bold;">nil</span></div>
</div></div>

<p><br /></p>

<h2>サーバを起動</h2>

<div class="syntax_hilite"><div id="code-20">
<div class="code">% rake db:migrate<br />
% script/serve</div>
</div></div>

<p><br /></p>

<p>
サーバを起動して確認。<br />
通常のrestful-autenticationのノリでユーザーを登録したあと
</p>

<h3>パスワード再設定の申請フォーム</h3>

<p>
<strong>http://localhost:3000/forgot_password</strong><br />
にアクセスすると、パスワードを再設定するためのメールフォームが表示されます。
</p>

<p><img src="http://www.func09.com/wordpress/wp-content/uploads/2008/11/0263691b55290991f340b165eac416ae.jpeg" alt="" title="0263691b55290991f340b165eac416ae" class="alignnone size-full wp-image-349" /></p>

<p>
登録したメールを入力してサブミットすると、パスワードをリセットするためのURLがメールで通知されました。
</p>

<p><img src="http://www.func09.com/wordpress/wp-content/uploads/2008/11/e8ce2a3fac1deea4dc5ec27bca87c634.jpeg" alt="" title="e8ce2a3fac1deea4dc5ec27bca87c634"  class="alignnone size-full wp-image-351" /></p>

<p>
メールに記載されたURLを踏むと、パスワードの再設定画面が現れます。<br />
<strong>http://localhost:3000/change_password/:reset_code</strong>
</p>

<p><img src="http://www.func09.com/wordpress/wp-content/uploads/2008/11/f9d741da818ef9778e8471841613b975.jpeg" alt="" title="f9d741da818ef9778e8471841613b975"  class="alignnone size-full wp-image-352" /></p>

<h2>最後に</h2>

<p>
毎回同じファイルを書くのはバカバカしいのでこういったプラグインを使うのもありですね。<br />
パスワード用のテーブルを生成しなければならないのをどう捉えるかにもよりますが、restful-authenticationで作ったモデルを全くいじらなくて良いのはコードが分離して見通しが良いです。
</p>

<p>
とりあえず自分は勉強のために、これから自分なりに実装してみようと思ってますけど。
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/348/feed</wfw:commentRss>
		</item>
		<item>
		<title>[rails] restful-authenticationの使い方　基本編</title>
		<link>http://www.func09.com/wordpress/archives/280</link>
		<comments>http://www.func09.com/wordpress/archives/280#comments</comments>
		<pubDate>Sat, 15 Nov 2008 14:39:27 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<category><![CDATA[ruby on rails]]></category>

		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=280</guid>
		<description><![CDATA[はじめに

Railsでの認証機構はrestful-authenticationで決まりらしいのですが、いざ自分で新しい機能を実装しようと思うとなかなか骨があってどう組んで良いものか悩んでしまう。

ユーザー認証のあるサ [...]]]></description>
			<content:encoded><![CDATA[<h2>はじめに</h2>

<p>Railsでの認証機構はrestful-authenticationで決まりらしいのですが、いざ自分で新しい機能を実装しようと思うとなかなか骨があってどう組んで良いものか悩んでしまう。</p>

<p>ユーザー認証のあるサービスには欠かせないであろうパスワードを忘れた人への対策処理を実装してみようと思うのだけど、えらく長くなりそうなので、とりあえず基本的なrestful-authenticationの使い方を。</p>

<h2>準備</h2>

<ul>
<li>railsのプロジェクト「auth_sample」を生成</li>
<li>restful-authenticationのインストール</li>
<li>aasmのインストール</li>
<li>script/generate authenticated</li>
</ul>

<div class="syntax_hilite"><div id="c-24">
<div class="c"><span style="color: #808080; font-style: italic;">// プロジェクト生成</span><br />
% rails auth_sample<br />
% cd auth_sample<br />
<br />
<span style="color: #808080; font-style: italic;">// プラグインインストール</span><br />
% script/plugin install git:<span style="color: #808080; font-style: italic;">//github.com/technoweenie/restful-authentication.git</span><br />
% script/plugin install git:<span style="color: #808080; font-style: italic;">//github.com/rubyist/aasm.git</span><br />
<br />
<span style="color: #808080; font-style: italic;">// 雛形の生成（メールアクティベートとaasmによる状態管理を有効にしておく）</span><br />
% script/generate authenticated --include-activation --aasm user sessions</div>
</div></div>

<p><br /></p>

<p>続いて</p>

<ul>
<li>config/environment.rbにuserモデルのオブザーバーを定義</li>
<li>config/routes/rb

<ul>
<li>/activateのルートを設定</li>
<li>usersのresourcesにsuspend,unsuspend,put,purgeを追加</li>
</ul></li>
<li>AuthenticatedSystemのインクルード</li>
</ul>

<div class="syntax_hilite"><div id="ruby-25">
<div class="ruby"><span style="color:#008000; font-style:italic;"># config/environment.rbに追加</span><br />
config.<span style="color:#9900CC;">active_record</span>.<span style="color:#9900CC;">observers</span> = :user_observer<br />
<br />
<span style="color:#008000; font-style:italic;"># config/routes.rbに追加</span><br />
map.<span style="color:#9900CC;">activate</span> '/activate/:activation_code', :controller =&gt; 'users', :action =&gt; 'activate', :activation_code =&gt; <span style="color:#0000FF; font-weight:bold;">nil</span><br />
map.<span style="color:#9900CC;">resources</span> :users, :member =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span> :suspend =&gt; :put, :unsuspend =&gt; :put, :purge =&gt; :delete <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<br />
<span style="color:#008000; font-style:italic;"># app/controllers/applications.rbに追加</span><br />
<span style="color:#9966CC; font-weight:bold;">include</span> AuthenticatedSystem<br />
<br />
＃</div>
</div></div>

<p><br /></p>

<p>を追加しておく。</p>

<p>さらに、このままではaasm用のクラスを読み込めないので<br />
vendor/plugins/restful-authentication/rails/init.rb<br />
に下記の追加</p>

<div class="syntax_hilite"><div id="ruby-26">
<div class="ruby"><span style="color:#008000; font-style:italic;"># vendor/plugins/restful-authentication/rails/init.rb</span><br />
<span style="color:#008000; font-style:italic;"># この行を追加してaasmを読み込む</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> File.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span>File.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">".."</span>, <span style="color:#996600;">"lib"</span>, <span style="color:#996600;">"authorization"</span>, <span style="color:#996600;">"aasm_roles"</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div></div>

<p><br /></p>

<p>ここまでで、基本的なrestful-authenticationの準備は終わり。</p>

<p>rake db:migrateして、サーバを起動し</p>

<ul>
<li>新規登録

<ul>
<li>http://localhost:3000/signup</li>
</ul></li>
<li>ログイン

<ul>
<li>http://localhost:3000/login</li>
</ul></li>
<li>ログアウト

<ul>
<li>http://localhost:3000/logout</li>
</ul></li>
</ul>

<p>次回はパスワード再設定を実装してみます</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/280/feed</wfw:commentRss>
		</item>
		<item>
		<title>Rails2.2の新機能i18nを使ってみる</title>
		<link>http://www.func09.com/wordpress/archives/262</link>
		<comments>http://www.func09.com/wordpress/archives/262#comments</comments>
		<pubDate>Wed, 12 Nov 2008 15:33:17 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<category><![CDATA[ruby on rails]]></category>

		<category><![CDATA[i18n]]></category>

		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=262</guid>
		<description><![CDATA[はじめに

Rails2.2ではついに国際化が標準で搭載されることになった。

Rails 2.2 リリースノート日本語訳

これまでRuby on Railsで作ったアプリの検証メッセージなどを日本語化する場合は
gettextを使う方法がデファクトスタンダードだったけれど、正直めんどくさいし、初心者にはとっつきにくかった。

ということで正式版が登場する前にi18nを試してみよう。



準備

まずはプロジェクトを作成してedge版を展開する。


% rails sample
% cd sample
% rake rails:freeze:edge




次に必要なプラグインをインストールする
localized_datesとi18nを入れる。

http://github.com/clemens/localized_dates/tree/master
http://github.com/mattetti/i18n/tree/master


% script/plugin install git://github.com/clemens/localized_dates.git
% script/plugin install git://github.com/svenfuchs/i18n 




次にi18nを初期化してロケールファイルを読み込む処理を用意
config/initializers/init_i18n.rb
というファイルを作成して


I18n.default_locale = 'ja-JP'
LOCALES_DIRECTORY = "#{RAILS_ROOT}/config/locales/"
LOCALES_AVAILABLE = Dir&#91;"#{LOCALES_DIRECTORY}/*.{rb,yml}"&#93;.collect do &#124;locale_file&#124;
&#160; File.basename&#40;File.basename&#40;locale_file, ".rb"&#41;, ".yml"&#41;
end.uniq.sort




を記述する。

デフォルトのロケールを日本語にしてconfig/locales/以下にあるロケール名.rb、ロケール名.ymlを読み込む。

次にロケール用のファイルを用意する


touch config/locales/ja-JP.rb
touch config/locales/ja-JP.yml




サンプルアプリをscaffoldで作成する

日本語化の準備ができたのでサクっとscaffoldでメモ帳など作ってみよう。


% script/generate scaffold note title:string body:text




app/models/note.rbを編集する


# app/models/note.rb
class Note &#60;ActiveRecord::Base
&#160; validates_presence_of :title, :body
&#160; validates_uniqueness_of :title
end




確認

ではサーバを起動して確認してみよう


% rake db:migrate
% script/server




失敗。
翻訳が見つからないそうだ。

config/locales/ja-JP.rb

を以下のように編集して、基本的な翻訳メッセージを用意してやる。


&#123;
&#160; :'ja-JP' =&#62; &#123;
&#160; &#160; # date and time [...]]]></description>
			<content:encoded><![CDATA[<h2>はじめに</h2>

<p>Rails2.2ではついに国際化が標準で搭載されることになった。<br /><br /></p>

<p><a href="http://webtama.jp/series/railstips/articles/17">Rails 2.2 リリースノート日本語訳</a><br /><br /></p>

<p>これまでRuby on Railsで作ったアプリの検証メッセージなどを日本語化する場合は
<a href="http://www.yotabanana.com/hiki/ja/ruby-gettext-howto-ror.html?ruby-gettext-howto-ror">gettext</a>を使う方法がデファクトスタンダードだったけれど、正直めんどくさいし、初心者にはとっつきにくかった。<br /><br /></p>

<p>ということで正式版が登場する前にi18nを試してみよう。</p>

<p><span id="more-262"></span></p>

<h2>準備</h2>

<p>まずはプロジェクトを作成してedge版を展開する。</p>

<div class="syntax_hilite"><div id="code-38">
<div class="code">% rails sample<br />
% cd sample<br />
% rake rails:freeze:edge</div>
</div></div>

<p><br /></p>

<p>次に必要なプラグインをインストールする<br />
localized_datesとi18nを入れる。<br /><br /></p>

<p><a href="http://github.com/clemens/localized_dates/tree/master">http://github.com/clemens/localized_dates/tree/master</a><br />
<a href="http://github.com/mattetti/i18n/tree/master">http://github.com/mattetti/i18n/tree/master</a><br /><br /></p>

<div class="syntax_hilite"><div id="code-39">
<div class="code">% script/plugin install git:<span style="color:#FF9933; font-style:italic;">//github.com/clemens/localized_dates.git</span><br />
% script/plugin install git:<span style="color:#FF9933; font-style:italic;">//github.com/svenfuchs/i18n </span></div>
</div></div>

<p><br /></p>

<p>次にi18nを初期化してロケールファイルを読み込む処理を用意<br />
config/initializers/init_i18n.rb<br />
というファイルを作成して<br /></p>

<div class="syntax_hilite"><div id="code-40">
<div class="code">I18n.<span style="">default_locale</span> = <span style="color:#CC0000;">'ja-JP'</span><br />
LOCALES_DIRECTORY = <span style="color:#CC0000;">"#{RAILS_ROOT}/config/locales/"</span><br />
LOCALES_AVAILABLE = Dir<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC0000;">"#{LOCALES_DIRECTORY}/*.{rb,yml}"</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="">collect</span> do |locale_file|<br />
&nbsp; File.<span style="">basename</span><span style="color:#006600; font-weight:bold;">&#40;</span>File.<span style="">basename</span><span style="color:#006600; font-weight:bold;">&#40;</span>locale_file, <span style="color:#CC0000;">".rb"</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#CC0000;">".yml"</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
end.<span style="">uniq</span>.<span style="">sort</span></div>
</div></div>

<p><br /></p>

<p>を記述する。<br /><br /></p>

<p>デフォルトのロケールを日本語にしてconfig/locales/以下にあるロケール名.rb、ロケール名.ymlを読み込む。<br /><br /></p>

<p>次にロケール用のファイルを用意する</p>

<div class="syntax_hilite"><div id="code-41">
<div class="code">touch config/locales/ja-JP.<span style="">rb</span><br />
touch config/locales/ja-JP.<span style="">yml</span></div>
</div></div>

<p><br /></p>

<h2>サンプルアプリをscaffoldで作成する</h2>

<p>日本語化の準備ができたのでサクっとscaffoldでメモ帳など作ってみよう。</p>

<div class="syntax_hilite"><div id="code-42">
<div class="code">% script/generate scaffold note title:string body:text</div>
</div></div>

<p><br /></p>

<p>app/models/note.rbを編集する</p>

<div class="syntax_hilite"><div id="code-43">
<div class="code"># app/models/note.<span style="">rb</span><br />
class Note &lt;ActiveRecord::<span style="">Base</span><br />
&nbsp; validates_presence_of :title, :body<br />
&nbsp; validates_uniqueness_of :title<br />
end</div>
</div></div>

<p><br /></p>

<h2>確認</h2>

<p>ではサーバを起動して確認してみよう</p>

<div class="syntax_hilite"><div id="code-44">
<div class="code">% rake db:migrate<br />
% script/server</div>
</div></div>

<p><br /></p>

<p><div id="attachment_264" class="wp-caption alignnone" style="width: 510px"><a href="http://www.func09.com/wordpress/wp-content/uploads/2008/11/b9abd9359c9801972c24977bdc258170.jpg"><img src="http://www.func09.com/wordpress/wp-content/uploads/2008/11/b9abd9359c9801972c24977bdc258170.jpg" alt="失敗" title="日本語になってない" width="500" height="336" class="size-full wp-image-264" /></a><p class="wp-caption-text">失敗</p></div></p>

<p>失敗。<br />
翻訳が見つからないそうだ。<br /><br /></p>

<p>config/locales/ja-JP.rb<br /><br /></p>

<p>を以下のように編集して、基本的な翻訳メッセージを用意してやる。</p>

<div class="syntax_hilite"><div id="code-45">
<div class="code"><span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; :<span style="color:#CC0000;">'ja-JP'</span> =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; # date and time formats<br />
&nbsp; &nbsp; :date =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; :formats =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; :default&nbsp; &nbsp; &nbsp; =&gt; <span style="color:#CC0000;">"%Y-%m-%d"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :short&nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span style="color:#CC0000;">"%e %b"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :long&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span style="color:#CC0000;">"%B %e, %Y"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :long_ordinal =&gt; lambda <span style="color:#006600; font-weight:bold;">&#123;</span> |date| <span style="color:#CC0000;">"%B #{date.day}, %Y"</span> <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :only_day&nbsp; &nbsp; &nbsp;=&gt; <span style="color:#CC0000;">"%e"</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; :day_names =&gt; %w<span style="color:#006600; font-weight:bold;">&#40;</span>日曜日 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日<span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; :abbr_day_names =&gt; %w<span style="color:#006600; font-weight:bold;">&#40;</span>日 月 火 水 木 金 土<span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; :month_names =&gt; <span style="color:#006600; font-weight:bold;">&#91;</span>nil<span style="color:#006600; font-weight:bold;">&#93;</span> + %w<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">1</span>月 <span style="color:#800000;">2</span>月 <span style="color:#800000;">3</span>月 <span style="color:#800000;">4</span>月 <span style="color:#800000;">5</span>月 <span style="color:#800000;">6</span>月 <span style="color:#800000;">7</span>月 <span style="color:#800000;">8</span>月 <span style="color:#800000;">9</span>月 <span style="color:#800000;">10</span>月 <span style="color:#800000;">11</span>月 <span style="color:#800000;">12</span>月<span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; :abbr_month_names =&gt; <span style="color:#006600; font-weight:bold;">&#91;</span>nil<span style="color:#006600; font-weight:bold;">&#93;</span> + %w<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">1</span>月 <span style="color:#800000;">2</span>月 <span style="color:#800000;">3</span>月 <span style="color:#800000;">4</span>月 <span style="color:#800000;">5</span>月 <span style="color:#800000;">6</span>月 <span style="color:#800000;">7</span>月 <span style="color:#800000;">8</span>月 <span style="color:#800000;">9</span>月 <span style="color:#800000;">10</span>月 <span style="color:#800000;">11</span>月 <span style="color:#800000;">12</span>月<span style="color:#006600; font-weight:bold;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; :order =&gt; <span style="color:#006600; font-weight:bold;">&#91;</span>:year, :month, :day<span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; :time =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; :formats =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; :default&nbsp; &nbsp; &nbsp; =&gt; <span style="color:#CC0000;">"%a %b %d %H:%M:%S %Z %Y"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :time&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span style="color:#CC0000;">"%H:%M"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :short&nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span style="color:#CC0000;">"%d %b %H:%M"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :long&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span style="color:#CC0000;">"%B %d, %Y %H:%M"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :long_ordinal =&gt; lambda <span style="color:#006600; font-weight:bold;">&#123;</span> |time| <span style="color:#CC0000;">"%B #{time.day}, %Y %H:%M"</span> <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :only_second&nbsp; =&gt; <span style="color:#CC0000;">"%S"</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; :am =&gt; <span style="color:#CC0000;">''</span>,<br />
&nbsp; &nbsp; &nbsp; :pm =&gt; <span style="color:#CC0000;">''</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
<br />
&nbsp; &nbsp; # date helper distance in words<br />
&nbsp; &nbsp; :datetime =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; :distance_in_words =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; :half_a_minute&nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span style="color:#CC0000;">'30分'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :less_than_x_seconds =&gt; <span style="color:#CC0000;">'{{count}} 秒以下'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :x_seconds&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span style="color:#CC0000;">'{{count}} 秒'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :less_than_x_minutes =&gt; <span style="color:#CC0000;">'{{count}} 分以下'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :x_minutes&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span style="color:#CC0000;">'{{count}} 分'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :about_x_hours&nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span style="color:#CC0000;">'約 {{count}} 時間'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :x_days&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span style="color:#CC0000;">'{{count}} 日'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :about_x_months&nbsp; &nbsp; &nbsp; =&gt; <span style="color:#CC0000;">'約 {{count}} ヶ月'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :x_months&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span style="color:#CC0000;">'{{count}} ヶ月'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :about_x_years&nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span style="color:#CC0000;">'約　{{count}} 年'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :over_x_years&nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span style="color:#CC0000;">'{{count}} 年以上'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
<br />
&nbsp; &nbsp; # numbers<br />
&nbsp; &nbsp; :number =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; :format =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; :precision =&gt; <span style="color:#800000;">3</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :separator =&gt; <span style="color:#CC0000;">'.'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :delimiter =&gt; <span style="color:#CC0000;">','</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; :currency =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; :format =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :unit =&gt; <span style="color:#CC0000;">'¥'</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :precision =&gt; <span style="color:#800000;">2</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :format =&gt; <span style="color:#CC0000;">'%u%n'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
<br />
&nbsp; &nbsp; # Active Record<br />
&nbsp; &nbsp; :activerecord =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; :errors =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; :template =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :header =&gt; <span style="color:#CC0000;">"{{model}}でエラーが発生しました"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :body =&gt; <span style="color:#CC0000;">"以下のメッセージを確認してください:"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :messages =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :inclusion =&gt; <span style="color:#CC0000;">"は、リストに含まれていません"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :exclusion =&gt; <span style="color:#CC0000;">"は、有効な値ではありません"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :invalid =&gt; <span style="color:#CC0000;">"は、妥当な値ではありません"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :confirmation =&gt; <span style="color:#CC0000;">"は、確認できません"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :accepted&nbsp; =&gt; <span style="color:#CC0000;">"は、入力できません"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :empty =&gt; <span style="color:#CC0000;">"は、何も入力されていません"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :blank =&gt; <span style="color:#CC0000;">"は、空白です"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :too_long =&gt; <span style="color:#CC0000;">"は、長すぎます ({{count}}文字以下)"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :too_short =&gt; <span style="color:#CC0000;">"は、短すぎます ({{count}}文字以上)"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :wrong_length =&gt; <span style="color:#CC0000;">"は、桁数が合っていません({{count}}桁必要です)"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :taken =&gt; <span style="color:#CC0000;">"は、有効ではありません"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :not_a_number =&gt; <span style="color:#CC0000;">"は、数字ではありません"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :greater_than =&gt; <span style="color:#CC0000;">"は、{{count}}文字を超えて入力されています"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :greater_than_or_equal_to =&gt; <span style="color:#CC0000;">"は、{{count}}文字以上入力されています"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :equal_to =&gt; <span style="color:#CC0000;">"は、{{count}}と同値です"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :less_than =&gt; <span style="color:#CC0000;">"は、{{count}}文字未満です"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :less_than_or_equal_to =&gt; <span style="color:#CC0000;">"は、{{count}}文字以下で入力されています"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :odd =&gt; <span style="color:#CC0000;">"は、端数が入力されています"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; :even =&gt; <span style="color:#CC0000;">"は、偶数が入力されています"</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div></div>

<p><br /></p>

<p><img src="http://www.func09.com/wordpress/wp-content/uploads/2008/11/step2.jpg" alt="" title="エラーが日本語化された" width="500" height="307" class="alignnone size-full wp-image-266" /></p>

<p>エラーメッセージが日本語になった！<br />
でもnoteとかTitleとかBodyとか中途半端だ。<br />
Modelの属性名もちゃんと日本語化したい。<br /></p>

<h2>モデルの属性名を翻訳</h2>

<p>config/locales/ja-JP.ymlを以下にように編集して、サーバを再起動する</p>

<div class="syntax_hilite"><div id="code-46">
<div class="code">ja-JP:<br />
&nbsp; activerecord:<br />
&nbsp; &nbsp; models:<br />
&nbsp; &nbsp; &nbsp; note: ノート<br />
&nbsp; &nbsp; attributes:<br />
&nbsp; &nbsp; &nbsp; note:<br />
&nbsp; &nbsp; &nbsp; &nbsp; title: タイトル<br />
&nbsp; &nbsp; &nbsp; &nbsp; body: 本文</div>
</div></div>

<p><br /></p>

<p><img src="http://www.func09.com/wordpress/wp-content/uploads/2008/11/step3.jpg" alt="" title="モデルの属性名が日本語化された" class="alignnone size-full wp-image-267" /></p>

<p>おー、モデルの属性値も日本語化された。<br />
完璧、完璧。<br /><br /></p>

<p>しかし、New Noteとかの文言も日本語化したいと思うのが親心というもの。</p>

<h2>モデル以外の文言も翻訳する</h2>

<p>config/locales/ja-JP.ymlを以下のように編集</p>

<div class="syntax_hilite"><div id="code-47">
<div class="code">ja-JP:<br />
&nbsp; activerecord:<br />
&nbsp; &nbsp; models:<br />
&nbsp; &nbsp; &nbsp; note: ノート<br />
&nbsp; &nbsp; attributes:<br />
&nbsp; &nbsp; &nbsp; note:<br />
&nbsp; &nbsp; &nbsp; &nbsp; title: タイトル<br />
&nbsp; &nbsp; &nbsp; &nbsp; body: 本文<br />
&nbsp; label:<br />
&nbsp; &nbsp; notes:<br />
&nbsp; &nbsp; &nbsp; new_note: 新しいノートを作成<br />
&nbsp; &nbsp; &nbsp; create: 作成する<br />
&nbsp; &nbsp; &nbsp; back: 前の画面へ</div>
</div></div>

<p><br /></p>

<p>そしてapp/views/notes/new.html.erbを</p>

<div class="syntax_hilite"><div id="code-48">
<div class="code">&lt;h1&gt;&lt;%= t<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">'label.notes.new_note'</span><span style="color:#006600; font-weight:bold;">&#41;</span> %&gt;&lt;/h1&gt;<br />
<br />
&lt;% form_for<span style="color:#006600; font-weight:bold;">&#40;</span>@note<span style="color:#006600; font-weight:bold;">&#41;</span> do |f| %&gt;<br />
&nbsp; &lt;%= f.<span style="">error_messages</span> %&gt;<br />
<br />
&nbsp; &lt;p&gt;<br />
&nbsp; &nbsp; &lt;%= f.<span style="">label</span> :title, t<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">'activerecord.attributes.note.title'</span><span style="color:#006600; font-weight:bold;">&#41;</span> %&gt;&lt;br /&gt;<br />
&nbsp; &nbsp; &lt;%= f.<span style="">text_field</span> :title %&gt;<br />
&nbsp; &lt;/p&gt;<br />
&nbsp; &lt;p&gt;<br />
&nbsp; &nbsp; &lt;%= f.<span style="">label</span> :body, t<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">'activerecord.attributes.note.body'</span><span style="color:#006600; font-weight:bold;">&#41;</span> %&gt;&lt;br /&gt;<br />
&nbsp; &nbsp; &lt;%= f.<span style="">text_area</span> :body %&gt;<br />
&nbsp; &lt;/p&gt;<br />
&nbsp; &lt;p&gt;<br />
&nbsp; &nbsp; &lt;%= f.<span style="">submit</span> t<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">'label.notes.create'</span><span style="color:#006600; font-weight:bold;">&#41;</span> %&gt;<br />
&nbsp; &lt;/p&gt;<br />
&lt;% end %&gt;<br />
<br />
&lt;%= link_to t<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">'label.notes.back'</span><span style="color:#006600; font-weight:bold;">&#41;</span>, notes_path %&gt;</div>
</div></div>

<p><br /></p>

<p>ちょっと冗長な気がするけど気にしない気にしない<br />
サーバを再起動して確認すると<br /><br /></p>

<p><img src="http://www.func09.com/wordpress/wp-content/uploads/2008/11/step4.jpg" alt="" title="すべての文言が日本語になった" class="alignnone size-full wp-image-268" /></p>

<p>できたー。<br />
基本はロケールファイルにハッシュで翻訳メッセージを記述していき<br />
tメソッドで呼び出すという感じみたいだ。<br /><br /></p>

<p>gettextほどお手軽ではないけれども、今後スタンダードになっていくのだから今から覚えておいても損はないはずだ。</p>

<h2>ファイル一式</h2>

<p>今回作成したファイル。<br /><br /></p>

<p><a href='http://www.func09.com/wordpress/wp-content/uploads/2008/11/sample.zip'>sample.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/262/feed</wfw:commentRss>
		</item>
		<item>
		<title>Mac Leopard環境でActionMailerでメール送信できない時に見直すこと</title>
		<link>http://www.func09.com/wordpress/archives/254</link>
		<comments>http://www.func09.com/wordpress/archives/254#comments</comments>
		<pubDate>Mon, 10 Nov 2008 15:15:32 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<category><![CDATA[ruby on rails]]></category>

		<category><![CDATA[postfix]]></category>

		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=254</guid>
		<description><![CDATA[結論

可能性として


Postfixが起動していない
プロバイダのOP25B対策


がある

プロセス

今日何時間も格闘したのでメモ。

MacでRails開発している際、普通にはActionMailerでメール [...]]]></description>
			<content:encoded><![CDATA[<h2>結論</h2>

<p>可能性として</p>

<ul>
<li>Postfixが起動していない</li>
<li>プロバイダのOP25B対策</li>
</ul>

<p>がある</p>

<h2>プロセス</h2>

<p>今日何時間も格闘したのでメモ。</p>

<p>MacでRails開発している際、普通にはActionMailerでメールを送信できない。</p>

<div class="syntax_hilite"><div id="code-55">
<div class="code">config.<span style="">action_mailer</span>.<span style="">raise_delivery_errors</span> = true</div>
</div></div>

<p><br /></p>

<p>の場合</p>

<div class="syntax_hilite"><div id="code-56">
<div class="code">Errno::<span style="">ECONNREFUSED</span>: Connection refused - connect<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div></div>

<p><br /></p>

<p>メール送信時にこんなエラーが出るはず。</p>

<p>で、そもそもNet::SMTPが使えていないっぽいのです。</p>

<div class="syntax_hilite"><div id="code-57">
<div class="code">% irb<br />
&gt;&gt; require <span style="color:#CC0000;">'net/smtp'</span><br />
&gt;&gt; smtp = Net::<span style="">SMTP</span>.<span style="">start</span><span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#CC0000;">'localhost'</span>, <span style="color:#800000;">25</span> <span style="color:#006600; font-weight:bold;">&#41;</span><br />
Errno::<span style="">ECONNREFUSED</span>: Connection refused - connect<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div></div>

<p><br /></p>

<p>ふむふむ。25ポートが空いてないっぽい。
そりゃそーだ。メールサーバ起動してないもん。。</p>

<div class="syntax_hilite"><div id="code-58">
<div class="code">sudo postfix start</div>
</div></div>

<p><br /></p>

<p>これで起動する。
Linuxの生活になれて、Postfixが起動していないというオチを考えてなかったため、ここまでに３時間くらいかかってます。</p>

<p>chkconfig的なものってないですかねぇ？</p>

<p>それでも送信できない場合は、そもそもmailが使えてない可能性が。</p>

<div class="syntax_hilite"><div id="code-59">
<div class="code">% echo <span style="color:#CC0000;">'Hi'</span> | mail -s test mitsuru.<span style="">haga</span>@gmail.<span style="">com</span><br />
% tail /var/log/mail.<span style="">log</span></div>
</div></div>

<p><br /></p>

<p>これで送信が成功しているかチェックしましょう。
プロバイダのOP25B対策で送信できていない可能性があるので、各プロバイダでリレーホストを調べて
/etc/postfix/main.cf
に追加します。</p>

<p>例えば、うちはKDDIなので</p>

<div class="syntax_hilite"><div id="code-60">
<div class="code">relayhost = relay-mta.<span style="">auone</span>-net.<span style="">jp</span></div>
</div></div>

<p><br /></p>

<p>こんな感じで追加しておきます。</p>

<p>以上</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/254/feed</wfw:commentRss>
		</item>
		<item>
		<title>gemが1.3.xにバージョンアップできない件</title>
		<link>http://www.func09.com/wordpress/archives/252</link>
		<comments>http://www.func09.com/wordpress/archives/252#comments</comments>
		<pubDate>Mon, 10 Nov 2008 11:41:17 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=252</guid>
		<description><![CDATA[うちの環境でgemが1.1.1から1.3.1にアップデートできなくなる現象に陥った。

環境はMac OS10.5.5, ruby 1.8.6, gem1.1.1


Moon% sudo gem update --sy [...]]]></description>
			<content:encoded><![CDATA[<p>うちの環境でgemが1.1.1から1.3.1にアップデートできなくなる現象に陥った。</p>

<p>環境はMac OS10.5.5, ruby 1.8.6, gem1.1.1</p>

<div class="syntax_hilite"><div id="code-64">
<div class="code">Moon% sudo gem update --system<br />
Updating RubyGems<br />
Bulk updating Gem source index for: http:<span style="color:#FF9933; font-style:italic;">//gems.rubyforge.org/</span><br />
Nothing to update</div>
</div></div>

<p><br /></p>

<p>http://blog.segment7.net/articles/2008/09/26/rubygems-1-3-0</p>

<p>ここを見ると、gem1.1とgem1.2にはupdate --systemにバグがある模様です。
上記ページに従って</p>

<div class="syntax_hilite"><div id="code-65">
<div class="code">gem install rubygems-update<br />
update_rubygems</div>
</div></div>

<p><br /></p>

<p>とすれば最新のgemがインストールされます。</p>

<p>僕の環境の場合、</p>

<div class="syntax_hilite"><div id="code-66">
<div class="code">sudo gem install rubygems-update<br />
sudo update_rubygems</div>
</div></div>

<p><br /></p>

<p>とsudoをつけて実行しました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/252/feed</wfw:commentRss>
		</item>
		<item>
		<title>[Ruby] 集合知プログラミング 03</title>
		<link>http://www.func09.com/wordpress/archives/250</link>
		<comments>http://www.func09.com/wordpress/archives/250#comments</comments>
		<pubDate>Sun, 19 Oct 2008 14:44:11 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<category><![CDATA[集合知]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=250</guid>
		<description><![CDATA[オライリー「集合知プログラミング」のPythonサンプルコードをRubyに翻訳していく作業ログ。３回目。



2.3.4 評者をランキングするのサンプルコードをRuby化


def top_matches&#40; prefs, person, n=5, similarity=:sim_pearson&#41;
&#160; scores = prefs.keys.select&#123;&#124;i&#124; i != person&#125;.map do &#124;other&#124;
&#160; &#160; &#91; method&#40;similarity&#41;.call&#40;prefs,person,other&#41;, other &#93;
&#160; end
&#160; return scores.sort.reverse&#91;0...n&#93;
end

p top_matches&#40; critics, 'Toby', 3 &#41;
# =&#62; &#91;&#91;0.99124070716193, "Lisa Rose"&#93;, &#91;0.924473451641905, "Mick LaSalle"&#93;, &#91;0.66284898035987, "Claudia Puig"&#93;&#93;




2.4 アイテムを推薦するのサンプルコードをRuby化


def get_recommendations&#40; prefs, person, similarity=:sim_pearson &#41;
&#160; totals = &#123;&#125;
&#160; sim_sums = &#123;&#125;
&#160; prefs.keys.each do &#124;other&#124;
&#160; &#160; 
&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>オライリー「集合知プログラミング」のPythonサンプルコードをRubyに翻訳していく作業ログ。３回目。</p>

<p><span id="more-250"></span></p>

<p>2.3.4 評者をランキングするのサンプルコードをRuby化</p>

<div class="syntax_hilite"><div id="code-70">
<div class="code">def top_matches<span style="color:#006600; font-weight:bold;">&#40;</span> prefs, person, n=<span style="color:#800000;">5</span>, similarity=:sim_pearson<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; scores = prefs.<span style="">keys</span>.<span style="">select</span><span style="color:#006600; font-weight:bold;">&#123;</span>|i| i != person<span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="">map</span> do |other|<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#91;</span> method<span style="color:#006600; font-weight:bold;">&#40;</span>similarity<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="">call</span><span style="color:#006600; font-weight:bold;">&#40;</span>prefs,person,other<span style="color:#006600; font-weight:bold;">&#41;</span>, other <span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; end<br />
&nbsp; return scores.<span style="">sort</span>.<span style="">reverse</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">0</span>...<span style="">n</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
end<br />
<br />
p top_matches<span style="color:#006600; font-weight:bold;">&#40;</span> critics, <span style="color:#CC0000;">'Toby'</span>, <span style="color:#800000;">3</span> <span style="color:#006600; font-weight:bold;">&#41;</span><br />
# =&gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">0</span>.<span style="color:#800000;">99124070716193</span>, <span style="color:#CC0000;">"Lisa Rose"</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">0</span>.<span style="color:#800000;">924473451641905</span>, <span style="color:#CC0000;">"Mick LaSalle"</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">0</span>.<span style="color:#800000;">66284898035987</span>, <span style="color:#CC0000;">"Claudia Puig"</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#93;</span></div>
</div></div>

<p><br /></p>

<p>2.4 アイテムを推薦するのサンプルコードをRuby化</p>

<div class="syntax_hilite"><div id="code-71">
<div class="code">def get_recommendations<span style="color:#006600; font-weight:bold;">&#40;</span> prefs, person, similarity=:sim_pearson <span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; totals = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; sim_sums = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; prefs.<span style="">keys</span>.<span style="">each</span> do |other|<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; # 自分自身とは比較しない<br />
&nbsp; &nbsp; next if other == person<br />
&nbsp; &nbsp; sim = method<span style="color:#006600; font-weight:bold;">&#40;</span>similarity<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="">call</span><span style="color:#006600; font-weight:bold;">&#40;</span> prefs, person, other <span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; # <span style="color:#800000;">0</span>以下のスコアは無視<br />
&nbsp; &nbsp; next if sim &lt;= <span style="color:#800000;">0</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; prefs<span style="color:#006600; font-weight:bold;">&#91;</span>other<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="">each</span> do |item|<br />
&nbsp; &nbsp; &nbsp; item_name = item<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; # まだ見てない映画の得点のみ算出<br />
&nbsp; &nbsp; &nbsp; if !prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="">key</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>item_name<span style="color:#006600; font-weight:bold;">&#41;</span> or prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>item_name<span style="color:#006600; font-weight:bold;">&#93;</span> == <span style="color:#800000;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; # 類似度 * スコア<br />
&nbsp; &nbsp; &nbsp; &nbsp; totals<span style="color:#006600; font-weight:bold;">&#91;</span>item_name<span style="color:#006600; font-weight:bold;">&#93;</span> ||= <span style="color:#800000;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; totals<span style="color:#006600; font-weight:bold;">&#91;</span>item_name<span style="color:#006600; font-weight:bold;">&#93;</span> += prefs<span style="color:#006600; font-weight:bold;">&#91;</span>other<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>item_name<span style="color:#006600; font-weight:bold;">&#93;</span> * sim<br />
&nbsp; &nbsp; &nbsp; &nbsp; # 類似度を合計<br />
&nbsp; &nbsp; &nbsp; &nbsp; sim_sums<span style="color:#006600; font-weight:bold;">&#91;</span>item_name<span style="color:#006600; font-weight:bold;">&#93;</span> ||= <span style="color:#800000;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; sim_sums<span style="color:#006600; font-weight:bold;">&#91;</span>item_name<span style="color:#006600; font-weight:bold;">&#93;</span> += sim<br />
&nbsp; &nbsp; &nbsp; end<br />
&nbsp; &nbsp; end<br />
&nbsp; end<br />
<br />
&nbsp; # 正規化したリストを作る<br />
&nbsp; rankings = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; totals.<span style="">each</span> do |item_name,total|<br />
&nbsp; &nbsp; rankings &lt;&lt;<span style="color:#006600; font-weight:bold;">&#91;</span> total / sim_sums<span style="color:#006600; font-weight:bold;">&#91;</span>item_name<span style="color:#006600; font-weight:bold;">&#93;</span>, item_name <span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; end<br />
&nbsp; <br />
&nbsp; # ソート済みのリストを返す<br />
&nbsp; return rankings.<span style="">sort</span>.<span style="">reverse</span><br />
&nbsp; <br />
end<br />
<br />
p get_recommendations<span style="color:#006600; font-weight:bold;">&#40;</span> critics, <span style="color:#CC0000;">'Toby'</span> <span style="color:#006600; font-weight:bold;">&#41;</span><br />
# =&gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">3</span>.<span style="color:#800000;">27445961524987</span>, <span style="color:#CC0000;">"The Night Listener"</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">2</span>.<span style="color:#800000;">95467531335197</span>, <span style="color:#CC0000;">"Lady in the Water"</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">2</span>.<span style="color:#800000;">34855517312818</span>, <span style="color:#CC0000;">"Just My Luck"</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#93;</span></div>
</div></div>

<p><br /></p>

<p>引数similarityで、使用する類似性関数を切り替える。Rubyでは</p>

<div class="syntax_hilite"><div id="code-72">
<div class="code">method<span style="color:#006600; font-weight:bold;">&#40;</span>:method_name<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="">call</span></div>
</div></div>

<p><br /></p>

<p>というような形で、シンボルまたは文字列でメソッド名を指定することでメソッドをコールできます。
<a href="http://www.ruby-lang.org/ja/man/html/Object.html#method">http://www.ruby-lang.org/ja/man/html/Object.html#method</a></p>

<p>オリジナルのPythonのサンプルコードではタプルオブジェクトが多用されているが、Rubyでは配列に置き換えている。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/250/feed</wfw:commentRss>
		</item>
		<item>
		<title>[Ruby] 集合知プログラミング 02</title>
		<link>http://www.func09.com/wordpress/archives/247</link>
		<comments>http://www.func09.com/wordpress/archives/247#comments</comments>
		<pubDate>Wed, 15 Oct 2008 16:15:24 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<category><![CDATA[集合知]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=247</guid>
		<description><![CDATA[オライリー「集合知プログラミング」のピアソン相関によるスコア計算のサンプルプログラムをRubyに置き換えたもの




def sim_pearson&#40; prefs, person1, person2 &#41; [...]]]></description>
			<content:encoded><![CDATA[<p>オライリー「集合知プログラミング」のピアソン相関によるスコア計算のサンプルプログラムをRubyに置き換えたもの</p>

<p><span id="more-247"></span></p>

<div class="syntax_hilite"><div id="code-77">
<div class="code">def sim_pearson<span style="color:#006600; font-weight:bold;">&#40;</span> prefs, person1, person2 <span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <br />
&nbsp; # 両者が互いに評価しているアイテムのリストを取得<br />
&nbsp; si = prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person1<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="">keys</span> &amp; prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person2<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="">keys</span><br />
<br />
&nbsp; # 要素の数を調べる<br />
&nbsp; n = si.<span style="">size</span><br />
<br />
&nbsp; # 共に評価しているアイテムがなければ<span style="color:#800000;">0</span>を返す<br />
&nbsp; return <span style="color:#800000;">0</span> if n == <span style="color:#800000;">0</span><br />
<br />
&nbsp; # 配列をブロックで収集し、合計するメソッド<br />
&nbsp; def map_sum<span style="color:#006600; font-weight:bold;">&#40;</span> list, &amp;block <span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; list.<span style="">map</span><span style="color:#006600; font-weight:bold;">&#123;</span>|i| yield<span style="color:#006600; font-weight:bold;">&#40;</span>i<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="">inject</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">0</span>.<span style="color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span>|res,item| res += item <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; end<br />
<br />
&nbsp; # すべての嗜好を合計する<br />
&nbsp; sum1 = map_sum<span style="color:#006600; font-weight:bold;">&#40;</span> si <span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span>|i| prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person1<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; sum2 = map_sum<span style="color:#006600; font-weight:bold;">&#40;</span> si <span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span>|i| prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person2<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<br />
&nbsp; # 平方を合計する<br />
&nbsp; sum1_sq = map_sum<span style="color:#006600; font-weight:bold;">&#40;</span> si <span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span>|i| prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person1<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span> ** <span style="color:#800000;">2</span> <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; sum2_sq = map_sum<span style="color:#006600; font-weight:bold;">&#40;</span> si <span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span>|i| prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person2<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span> ** <span style="color:#800000;">2</span> <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<br />
&nbsp; # 積を合計する<br />
&nbsp; p_sum = map_sum<span style="color:#006600; font-weight:bold;">&#40;</span>si<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span>|i| prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person1<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span> * prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person2<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<br />
&nbsp; # ピアソンによるスコアを計算する<br />
&nbsp; num = p_sum - <span style="color:#006600; font-weight:bold;">&#40;</span> sum1 * sum2 / n<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; den = Math.<span style="">sqrt</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#40;</span> sum1_sq - sum1 ** <span style="color:#800000;">2</span> / n <span style="color:#006600; font-weight:bold;">&#41;</span> * <span style="color:#006600; font-weight:bold;">&#40;</span> sum2_sq - sum2 ** <span style="color:#800000;">2</span> / n <span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; return <span style="color:#800000;">0</span> if den == <span style="color:#800000;">0</span><br />
&nbsp; <br />
&nbsp; return num / den<br />
&nbsp; <br />
end<br />
<br />
puts sim_pearson<span style="color:#006600; font-weight:bold;">&#40;</span> critics, <span style="color:#CC0000;">'Lisa Rose'</span>, <span style="color:#CC0000;">'Gene Seymour'</span> <span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div></div>

<p><br /></p>

<p>pythonでリスト内包を使っての合計は、Rubyで書くとmapとinjectを組み合わせたものになると思う。
これはPythonに比べ長くなってしまい、読みにくかった上に繰り返し出現するのでmap_sumというショートカット用のメソッドを用意した。</p>

<div class="syntax_hilite"><div id="code-78">
<div class="code"># 長ったらしい<br />
sum1 = si.<span style="">map</span><span style="color:#006600; font-weight:bold;">&#123;</span>|i| prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person1<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="">inject</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">0</span>.<span style="color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span>|res,item| res += item <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div></div>

<p><br /></p>

<div class="syntax_hilite"><div id="code-79">
<div class="code"># python版<br />
sum1 = sum<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span>prefs<span style="color:#006600; font-weight:bold;">&#91;</span>p1<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>it<span style="color:#006600; font-weight:bold;">&#93;</span> for it in si<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div></div>

<p><br /></p>

<p>Ruby版は式を評価する順番が、単純に左から右へ読めばいいのに対し、Python版では式の評価箇所が飛び飛びなのが、Pythonがわからない人間には辛いが、慣れればリスト内包の方が奇麗な気がしてくるから不思議だ。</p>

<p>両者の評価しているアイテムを収集する場合は、Hash#keys同士を&amp;演算子で、集合の積を抽出するのがRubyらしいのかなと思う。</p>

<div class="syntax_hilite"><div id="code-80">
<div class="code"># 両者が互いに評価しているアイテムのリストを取得<br />
si = prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person1<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="">keys</span> &amp; prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person2<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="">keys</span></div>
</div></div>

<p><br /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/247/feed</wfw:commentRss>
		</item>
		<item>
		<title>JavaScriptで文字列リテラルは Stringクラスのインスタンスではない</title>
		<link>http://www.func09.com/wordpress/archives/244</link>
		<comments>http://www.func09.com/wordpress/archives/244#comments</comments>
		<pubDate>Tue, 14 Oct 2008 11:20:18 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[javascript]]></category>

		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=244</guid>
		<description><![CDATA[最近人にプログラミングを教えるというような事があって、「オブジェクトの正体」を理解してもらおうという目的から
いろんなリテラルをinstanceofにかけていました（FireFox3のFireBugで）。


&#91; [...]]]></description>
			<content:encoded><![CDATA[<p>最近人にプログラミングを教えるというような事があって、「オブジェクトの正体」を理解してもらおうという目的から
いろんなリテラルをinstanceofにかけていました（FireFox3のFireBugで）。</p>

<div class="syntax_hilite"><div id="code-84">
<div class="code"><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">1</span>,<span style="color:#800000;">2</span>,<span style="color:#800000;">3</span><span style="color:#006600; font-weight:bold;">&#93;</span> instanceof Object <span style="color:#FF9933; font-style:italic;">// =&gt; true</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span> a:<span style="color:#800000;">0</span>, b:<span style="color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#125;</span> instanceof Object <span style="color:#FF9933; font-style:italic;">// =&gt; true </span></div>
</div></div>

<p><br /></p>

<p>こんな感じで。
しかし文字リテラルの挙動が期待と違っていました。</p>

<div class="syntax_hilite"><div id="code-85">
<div class="code"><span style="color:#CC0000;">"a"</span> instanceof Object <span style="color:#FF9933; font-style:italic;">// =&gt; trueかと思いきやfalse</span><br />
<span style="color:#CC0000;">"a"</span> instanceof String <span style="color:#FF9933; font-style:italic;">// =&gt; trueかと思いきやfalse </span></div>
</div></div>

<p><br /></p>

<p>ちょっと待ってほしい。
文字リテラルも文字列クラスのインスタンスですよー、なんて解説をしようと思ってたのに
これじゃぁ、文字リテラルはStringオブジェクトじゃないという事になってしまう。</p>

<p>事実として</p>

<div class="syntax_hilite"><div id="code-86">
<div class="code"><span style="color:#CC0000;">"hoge"</span>.<span style="">sub</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">"o"</span>,<span style="color:#CC0000;">"a"</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#FF9933; font-style:italic;">// =&gt; &quot;hage&quot; </span></div>
</div></div>

<p><br /></p>

<p>というコードが実行できるのだから、文字列リテラルがStringオブジェクトじゃないと話が合わない。だってsubメソッドはStringのインスタンスメソッドじゃないか！</p>

<h2>結論</h2>

<p>答えはここにありました。</p>

<p><a href="http://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide/Literals#.e6.96.87.e5.ad.97.e5.88.97.e3.83.aa.e3.83.86.e3.83.a9.e3.83.ab">Literals - MDC（文字列リテラル）</a></p>

<p><a href="http://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide/Predefined_Core_Objects/String_Object#.e6.96.87.e5.ad.97.e5.88.97.e3.83.aa.e3.83.86.e3.83.a9.e3.83.ab.e3.81.af_String_.e3.82.aa.e3.83.96.e3.82.b8.e3.82.a7.e3.82.af.e3.83.88.e3.81.a8.e3.81.af.e5.88.a5.e7.89.a9">String Object - MDC #文字列リテラルは String オブジェクトとは別物 </a></p>

<blockquote>
  <p>文字列リテラルの値でなら、String オブジェクトのどんなメソッドでも呼び出すことができます。JavaScript が自動的に文字列リテラルを一時的な String オブジェクトに変換し、メソッドを呼び出し、その一時的な String オブジェクトを破棄するのです。String.length プロパティを文字列リテラルで使うこともできます。</p>
</blockquote>

<p>という事なんですって。</p>

<p>つまり、文字列リテラルの状態では確かにStringのインスタンスではないけれど、メソッドを呼び出す時はJavaScriptがStringオブジェクトに変換していると。なるほど。</p>

<p>ちなみにこのエントリーの内容はMozilla FireFoxでしか試していませんし、Mozillaのサイトでしか結論を見つけていませんので、他のブラウザでどうなのかは一切調べてませんので悪しからず。誰か暇な人は調べてトラバください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/244/feed</wfw:commentRss>
		</item>
		<item>
		<title>[Ruby] 集合知プログラミング 01</title>
		<link>http://www.func09.com/wordpress/archives/241</link>
		<comments>http://www.func09.com/wordpress/archives/241#comments</comments>
		<pubDate>Mon, 13 Oct 2008 15:23:33 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=241</guid>
		<description><![CDATA[オライリーの「集合知プログラミング」を購入したので読み始めている。
最近はプログラミング本よりビジネス本が読みたい気分なんだけど、何故か買ってしまった。買ってしまったからにはちゃんと読もう。

でもこの本のサンプルコードは全部Pythonで書かれている。Pythonはちょっとかじったことがある程度で全然覚えていない。特に乱用されているリスト内包がよくわからない。

ので、本書内で出てくるサンプルコードを淡々とRubyコードに翻訳していく。自分のメモ用なので本書のどのページのどれだとかをいちいち書くこともないと思う。試しに一本やってみたが、Rubyへの翻訳はそんなに難しくない。難しいのはPythonのコードを写経し、エラーが出ずに動かすまでだ。


critics = &#123;
&#160; 'Lisa Rose' =&#62;
&#160; &#123;
&#160; &#160; 'Lady in the Water' =&#62; 2.5,
&#160; &#160; 'Snakes on a Plane' =&#62; 3.5,
&#160; &#160; 'Just My Luck' =&#62; 3.0,
&#160; &#160; 'Superman Returns' =&#62; 3.5,
&#160; &#160; 'You, Me and Dupree' =&#62; 2.5,
&#160; &#160; 'The Night Listener' =&#62; 3.0
&#160; &#125;,
&#160; 'Gene Seymour' =&#62; 
&#160; &#123;
&#160; &#160; 'Lady in the [...]]]></description>
			<content:encoded><![CDATA[<p>オライリーの「集合知プログラミング」を購入したので読み始めている。
最近はプログラミング本よりビジネス本が読みたい気分なんだけど、何故か買ってしまった。買ってしまったからにはちゃんと読もう。</p>

<p>でもこの本のサンプルコードは全部Pythonで書かれている。Pythonはちょっとかじったことがある程度で全然覚えていない。特に乱用されているリスト内包がよくわからない。
<span id="more-241"></span>
ので、本書内で出てくるサンプルコードを淡々とRubyコードに翻訳していく。自分のメモ用なので本書のどのページのどれだとかをいちいち書くこともないと思う。試しに一本やってみたが、Rubyへの翻訳はそんなに難しくない。難しいのはPythonのコードを写経し、エラーが出ずに動かすまでだ。</p>

<div class="syntax_hilite"><div id="code-88">
<div class="code">critics = <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; <span style="color:#CC0000;">'Lisa Rose'</span> =&gt;<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Lady in the Water'</span> =&gt; <span style="color:#800000;">2</span>.<span style="color:#800000;">5</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Snakes on a Plane'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">5</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Just My Luck'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Superman Returns'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">5</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'You, Me and Dupree'</span> =&gt; <span style="color:#800000;">2</span>.<span style="color:#800000;">5</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'The Night Listener'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">0</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; <span style="color:#CC0000;">'Gene Seymour'</span> =&gt; <br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Lady in the Water'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Snakes on a Plane'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">5</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Just My Luck'</span> =&gt; <span style="color:#800000;">1</span>.<span style="color:#800000;">5</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Superman Returns'</span> =&gt; <span style="color:#800000;">5</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'The Night Listener'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'You, Me and Dupree'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">5</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; <span style="color:#CC0000;">'Michael Phillips'</span> =&gt; <br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Lady in the Water'</span> =&gt; <span style="color:#800000;">2</span>.<span style="color:#800000;">5</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Snakes on a Plane'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Superman Returns'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">5</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'The Night Listener'</span> =&gt; <span style="color:#800000;">4</span>.<span style="color:#800000;">0</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; <span style="color:#CC0000;">'Claudia Puig'</span> =&gt; <br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Lady in the Water'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">5</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Snakes on a Plane'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'The Night Listener'</span> =&gt; <span style="color:#800000;">4</span>.<span style="color:#800000;">5</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Superman Returns'</span> =&gt; <span style="color:#800000;">4</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'You, Me and Dupree'</span> =&gt; <span style="color:#800000;">2</span>.<span style="color:#800000;">5</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; <span style="color:#CC0000;">'Mick LaSalle'</span> =&gt; <br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Lady in the Water'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Snakes on a Plane'</span> =&gt; <span style="color:#800000;">4</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Just My Luck'</span> =&gt; <span style="color:#800000;">2</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Superman Returns'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'The Night Listener'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'You, Me and Dupree'</span> =&gt; <span style="color:#800000;">2</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; <span style="color:#CC0000;">'Jack Matthews'</span> =&gt; <br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Lady in the Water'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Snakes on a Plane'</span> =&gt; <span style="color:#800000;">4</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'The Night Listener'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Superman Returns'</span> =&gt; <span style="color:#800000;">5</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'You, Me and Dupree'</span> =&gt; <span style="color:#800000;">3</span>.<span style="color:#800000;">5</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>,<br />
&nbsp; <span style="color:#CC0000;">'Toby'</span> =&gt; <br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Snakes on a Plane'</span> =&gt; <span style="color:#800000;">4</span>.<span style="color:#800000;">5</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'You, Me and Dupree'</span> =&gt; <span style="color:#800000;">1</span>.<span style="color:#800000;">0</span>,<br />
&nbsp; &nbsp; <span style="color:#CC0000;">'Superman Returns'</span> =&gt; <span style="color:#800000;">4</span>.<span style="color:#800000;">0</span><br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span><br />
<br />
def sim_distance<span style="color:#006600; font-weight:bold;">&#40;</span> prefs, person1, person2 <span style="color:#006600; font-weight:bold;">&#41;</span><br />
<br />
&nbsp; si = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person1<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="">each</span> do |key,value|<br />
&nbsp; &nbsp; si<span style="color:#006600; font-weight:bold;">&#91;</span>key<span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#800000;">1</span> if prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person2<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="">include</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>key<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; end<br />
&nbsp; return <span style="color:#800000;">0</span> if si.<span style="">size</span> == <span style="color:#800000;">0</span><br />
<br />
&nbsp; sum_of_squares = <span style="color:#800000;">0</span><br />
&nbsp; si.<span style="">each</span> do |key,value|<br />
&nbsp; &nbsp; sum_of_squares += <span style="color:#006600; font-weight:bold;">&#40;</span>prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person1<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>key<span style="color:#006600; font-weight:bold;">&#93;</span>-prefs<span style="color:#006600; font-weight:bold;">&#91;</span>person2<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span>key<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> ** <span style="color:#800000;">2</span><br />
&nbsp; end<br />
<br />
&nbsp; return <span style="color:#800000;">1</span> / <span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#800000;">1</span> + sum_of_squares <span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <br />
end<br />
<br />
puts sim_distance<span style="color:#006600; font-weight:bold;">&#40;</span> critics, <span style="color:#CC0000;">'Lisa Rose'</span>, <span style="color:#CC0000;">'Gene Seymour'</span> <span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div></div>

<p><br /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/241/feed</wfw:commentRss>
		</item>
		<item>
		<title>Shur.inにブックマークレットの機能を追加しました。</title>
		<link>http://www.func09.com/wordpress/archives/239</link>
		<comments>http://www.func09.com/wordpress/archives/239#comments</comments>
		<pubDate>Fri, 10 Oct 2008 13:42:05 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[Webサービス]]></category>

		<category><![CDATA[ruby on rails]]></category>

		<category><![CDATA[日記]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[Shur.in]]></category>

		<category><![CDATA[サービス]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=239</guid>
		<description><![CDATA[Shur.inにブックマークレットの機能を追加しました。

ページ内の「もっと」をクリックして、下の方にある
「このリンクをブックマークに登録すると、今見ているページをわりと短くできるよ」
というリンクをブックマークに登 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://shur.in/">Shur.in</a>にブックマークレットの機能を追加しました。</p>

<p>ページ内の「もっと」をクリックして、下の方にある
「このリンクをブックマークに登録すると、今見ているページをわりと短くできるよ」
というリンクをブックマークに登録してください。</p>

<p>今見ているページをいつでもわりと短くすることができます。</p>

<p>気が向いたらFireFoxのプラグインとかにしたいっすね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/239/feed</wfw:commentRss>
		</item>
		<item>
		<title>URLをわりと短くするサービス「shur.in」を作った。</title>
		<link>http://www.func09.com/wordpress/archives/237</link>
		<comments>http://www.func09.com/wordpress/archives/237#comments</comments>
		<pubDate>Wed, 08 Oct 2008 16:26:06 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/237</guid>
		<description><![CDATA[URLをわりと短くするサービスhttp://shur.in/をリリースしました。



最近はてな界隈で話題のIT業界のえがちゃん
サービスの内容はどうあれ、週に１つ２つはサービスをリリースする勢いは見習いたいものだと感 [...]]]></description>
			<content:encoded><![CDATA[<p>URLをわりと短くするサービス<a href="http://shur.in/">http://shur.in/</a>をリリースしました。</p>

<p><a href='http://shur.in/' title='shurin.jpg'><img src='http://www.func09.com/wordpress/wp-content/uploads/2008/10/shurin.jpg' alt='shurin.jpg' /></a></p>

<p>最近はてな界隈で話題の<a href="http://blog.livedoor.jp/ikiradio/">IT業界のえがちゃん</a>
サービスの内容はどうあれ、週に１つ２つはサービスをリリースする勢いは見習いたいものだと感心していた。</p>

<p>で、えがちゃんが作ってる数多くのサービスの中で
<a href="http://egachan.net/mini/">サイトURL短縮君</a>つー、tinyurlライクなサービスがあって
URL圧縮サービスの仕組みとか全く考えたことが無かった僕は、えがちゃんやるなーと思っていたのだけど
ただ単に<a href="http://qurl.com/">qurl.com</a>のAPIを叩いているだけだった。
全然サービスでもなんでもねーー。</p>

<p>というわけで自分で考えつつ作ってみた。実装は３〜４時間くらいで、ドメイン取るのに時間がかかった・・・。</p>

<p>仕組みは簡単で</p>

<p>2,176,782,336（36の6乗）からランダムに数字を選んで、それをPKとしてDBにURLを保存。
PKの数字を36進数に変換して一緒に保存しておくだけ。</p>

<p>rubyは36進数の相互変換が超ラクチンなので簡単だった。</p>

<div class="syntax_hilite"><div id="code-90">
<div class="code">code = rand<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">36</span>**<span style="color:#800000;">6</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="">to_s</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">36</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
code.<span style="">to_i</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">36</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div></div>

<p><br /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/237/feed</wfw:commentRss>
		</item>
		<item>
		<title>パスワードをシンプルに管理できるHummingPassというサービスをリリースしました。</title>
		<link>http://www.func09.com/wordpress/archives/235</link>
		<comments>http://www.func09.com/wordpress/archives/235#comments</comments>
		<pubDate>Sun, 28 Sep 2008 10:08:31 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[HummingPass]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/235</guid>
		<description><![CDATA[

パスワードをシンプルに管理できるHummingPassというサービスをリリースしました。ベータ版です。

HummingPassβ

mixiやTwitterやGoogleなど、どんどん増えていくアカウント情報をオン [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.func09.com/wordpress/wp-content/uploads/2008/09/screenshot_large_1.jpg' title='screenshot_large_1.jpg'><img src='http://www.func09.com/wordpress/wp-content/uploads/2008/09/screenshot_large_1.jpg' alt='screenshot_large_1.jpg' /></a></p>

<p>パスワードをシンプルに管理できるHummingPassというサービスをリリースしました。ベータ版です。</p>

<p><a href="http://hummingpass.com">HummingPassβ</a></p>

<p>mixiやTwitterやGoogleなど、どんどん増えていくアカウント情報をオンライン上で一括管理するためのサービスで、タグによる分類が可能です。</p>

<p>もともと自分のために作っていたのですが、２週間前のRails on Award 2008の存在をしり、ほぼ全部作り直しました。</p>

<p>デザイン、コーディング、JavaScript、システム、サーバ、全部ひとりでやりました。</p>

<p>どうぞ、よろしくお願いします。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/235/feed</wfw:commentRss>
		</item>
		<item>
		<title>[Rails] 個人Webサービス</title>
		<link>http://www.func09.com/wordpress/archives/233</link>
		<comments>http://www.func09.com/wordpress/archives/233#comments</comments>
		<pubDate>Fri, 26 Sep 2008 14:42:35 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/233</guid>
		<description><![CDATA[こんにちはfunc09です。

Rails on Award2008に出品すべく、Webサービスを誠意作成中です。

僕はHTMLオペレーターから始まり、デザイナに転向し、Flashデベロッパに転向し、今プログラマ兼サー [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちはfunc09です。</p>

<p>Rails on Award2008に出品すべく、Webサービスを誠意作成中です。</p>

<p>僕はHTMLオペレーターから始まり、デザイナに転向し、Flashデベロッパに転向し、今プログラマ兼サーバ管理者という節操のないWeb人生を渡って来ていますので、デザインからサーバ構築まで全部ひとりでやってます、というのが最大の売りです。</p>

<p>今週末中にはリリースできると思うので、よろしくおながしまつ。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/233/feed</wfw:commentRss>
		</item>
		<item>
		<title>[ruby] インスタンス変数を連番で作る</title>
		<link>http://www.func09.com/wordpress/archives/232</link>
		<comments>http://www.func09.com/wordpress/archives/232#comments</comments>
		<pubDate>Wed, 17 Sep 2008 04:55:35 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/232</guid>
		<description><![CDATA[タイトルの通り。

Hogeクラスにhoge1〜hoge10までのインスタンス変数を作って、パブリックメソッドにする場合、以下のような感じで書ける。


class Hoge
&#160; attr_accessor * [...]]]></description>
			<content:encoded><![CDATA[<p>タイトルの通り。</p>

<p>Hogeクラスにhoge1〜hoge10までのインスタンス変数を作って、パブリックメソッドにする場合、以下のような感じで書ける。</p>

<div class="syntax_hilite"><div id="code-92">
<div class="code">class Hoge<br />
&nbsp; attr_accessor *Array.<span style="">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">10</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span>|i| <span style="color:#CC0000;">"hoge#{i}"</span>.<span style="">to_sym</span> <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; def initialize<br />
&nbsp; &nbsp; <span style="color:#800000;">10</span>.<span style="">times</span> do |i|<br />
&nbsp; &nbsp; &nbsp; self.<span style="">instance_variable_set</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">"@hoge#{i}"</span>.<span style="">to_sym</span>,i<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; end<br />
&nbsp; end<br />
end<br />
<br />
hoge = Hoge.<span style="">new</span><br />
p hoge<br />
p hoge.<span style="">hoge1</span></div>
</div></div>

<p><br /></p>

<p>もっときれいに書けるかな</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/232/feed</wfw:commentRss>
		</item>
		<item>
		<title>Flashが埋め込まれているURLを調べる</title>
		<link>http://www.func09.com/wordpress/archives/231</link>
		<comments>http://www.func09.com/wordpress/archives/231#comments</comments>
		<pubDate>Sat, 30 Aug 2008 13:21:59 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[actionscript2.0]]></category>

		<category><![CDATA[actionscript3.0]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/231</guid>
		<description><![CDATA[ブログパーツのようなFlashで、いろいろなサイトに埋め込まれるSWFの
埋め込まれているページのURLを取得する方法。


import flash.external.*;
var locationHref:Strin [...]]]></description>
			<content:encoded><![CDATA[<p>ブログパーツのようなFlashで、いろいろなサイトに埋め込まれるSWFの
埋め込まれているページのURLを取得する方法。</p>

<div class="syntax_hilite"><div id="code-96">
<div class="code">import flash.<span style="">external</span>.*;<br />
var locationHref:String = String<span style="color:#006600; font-weight:bold;">&#40;</span>ExternalInterface.<span style="">call</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">"function(){return location.href}"</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</div></div>

<p><br /></p>

<p>ExternalInterface.callの１番目の引数は、呼び出すJavaScriptのメソッド名という事になっていますが</p>

<div class="syntax_hilite"><div id="code-97">
<div class="code">ExternalInterface.<span style="">call</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">"myMethod"</span>,<span style="color:#CC0000;">"args1"</span>,<span style="color:#CC0000;">"args2"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</div></div>

<p><br /></p>

<p>は単純に以下のようなJSが実行されているものと考えられるので</p>

<div class="syntax_hilite"><div id="code-98">
<div class="code">eval<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">"myMethod"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="">apply</span><span style="color:#006600; font-weight:bold;">&#40;</span>window,<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC0000;">"args1"</span>,<span style="color:#CC0000;">"args2"</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</div></div>

<p><br /></p>

<p>まぁ、ようするに無名関数をFlash側で引数としてあげればいいと。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/231/feed</wfw:commentRss>
		</item>
		<item>
		<title>軽量なPHPフレームワークCodeIgniter</title>
		<link>http://www.func09.com/wordpress/archives/230</link>
		<comments>http://www.func09.com/wordpress/archives/230#comments</comments>
		<pubDate>Wed, 27 Aug 2008 14:41:20 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/230</guid>
		<description><![CDATA[CodeIgniterというフレームワークがなかなか良い。

PHPのフレームワークではCakePHPをよく利用するのだけれど、使えば使うほど何がゴールなのかわからないフレームワークだなと感じる。非常にRuby on R [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://userguide.cilab.info/">CodeIgniter</a>というフレームワークがなかなか良い。</p>

<p>PHPのフレームワークではCakePHPをよく利用するのだけれど、使えば使うほど何がゴールなのかわからないフレームワークだなと感じる。非常にRuby on Railsに似ているのだけど、RailsはRubyだから成り立っているような側面が多いから、結局PHPで実装しようとすると非常に中途半端になる。CakePHPは高機能だけど、おせっかいだし、そのおせっかいさも中途半端だなと思う。Railsも随分おせっかいだけど、かゆいところに手が届きすぎるくらい徹底的におせっかいだ。</p>

<p>CodeIgniterは見るからにシンプルで軽量。PHPでスクラッチやセミスクラッチするのは面倒だけど、おおげさなフレームワークは必要ないような時はぴったりだと思う。</p>

<p>最低限のMVCは用意されていて、あとはPHPとヘルパーライブラリでがんばれ、フレームワーク特有の俺節はあんまりないよ。そんなフレームワークな感じがする。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/230/feed</wfw:commentRss>
		</item>
		<item>
		<title>passengerで開発環境(development)</title>
		<link>http://www.func09.com/wordpress/archives/229</link>
		<comments>http://www.func09.com/wordpress/archives/229#comments</comments>
		<pubDate>Tue, 26 Aug 2008 02:46:56 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/229</guid>
		<description><![CDATA[一ヶ月に１エントリーは書かないと・・・。

PassengerでRailsのdevelopment環境を動かす方法。
恐らくPassenger2以降のみです。


&#60;VirtualHost *:80&#62;
&#160; &#160; ServerName www.hoge.com
&#160; &#160; DocumentRoot /home/hoge/hogeproject/public
&#160; &#160; RailsEnv development
&#160; &#160; RailsAllowModRewrite off
&#60;/VirtualHost&#62;




参考
http://w.koshigoe.jp/study/?%5BRuby%5D+Passenger#l20
]]></description>
			<content:encoded><![CDATA[<p>一ヶ月に１エントリーは書かないと・・・。</p>

<p>PassengerでRailsのdevelopment環境を動かす方法。
恐らくPassenger2以降のみです。</p>

<div class="syntax_hilite"><div id="code-100">
<div class="code">&lt;VirtualHost *:<span style="color:#800000;">80</span>&gt;<br />
&nbsp; &nbsp; ServerName www.<span style="">hoge</span>.<span style="">com</span><br />
&nbsp; &nbsp; DocumentRoot /home/hoge/hogeproject/public<br />
&nbsp; &nbsp; RailsEnv development<br />
&nbsp; &nbsp; RailsAllowModRewrite off<br />
&lt;/VirtualHost&gt;</div>
</div></div>

<p><br /></p>

<p>参考
http://w.koshigoe.jp/study/?%5BRuby%5D+Passenger#l20</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/229/feed</wfw:commentRss>
		</item>
		<item>
		<title>JavaのString#hashCode()をRubyで再現</title>
		<link>http://www.func09.com/wordpress/archives/228</link>
		<comments>http://www.func09.com/wordpress/archives/228#comments</comments>
		<pubDate>Wed, 02 Jul 2008 06:52:22 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/228</guid>
		<description><![CDATA[Javaで作ってあるアプリをiPhoneに移植しようと思ったが、まずObjective-Cがわからないので、Rubyに移植してみようと考えた。

移植元のアプリの中でさらっとString#hashCode()を使っていて困った。

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#hashCode()


この文字列のハッシュコードを返します。String のハッシュコードは、次の方法で計算します。
 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]


上記の通りの計算をしてもRubyでは同じ数値にならない。
どうもJavaのintとRubyのIntegerは挙動が違うからのようだ。

java のInteger int 最大値超えるとどうなるの&#60;br/>
http://becomehappy.orz.hm/smithlog/article.php?id=370

Javaのintは-0x80000000~0x7fffffffの間をぐるぐるループしているらしい。&#60;br/>
最大値（2147483647）を超えたら最小値（-2147483648）に戻してやる気遣いが必要だ。

というわけで作ってみたのが下記。

hashcode_gen.rb


#!/usr/bin/env ruby

module EmurateJavaStringHashCode
&#160; def to_hashcode
&#160; &#160; max = 2 ** 31 - 1 # Javaのint最大値
&#160; &#160; min = -2 ** 31 # Javaのint最小値
&#160; &#160; h = 0
&#160; &#160; n = self.size
&#160; &#160; n.times do &#124;i&#124;
&#160; &#160; &#160; h = 31 * h + self&#91;i&#93;
&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Javaで作ってあるアプリをiPhoneに移植しようと思ったが、まずObjective-Cがわからないので、Rubyに移植してみようと考えた。</p>

<p>移植元のアプリの中でさらっとString#hashCode()を使っていて困った。</p>

<p><a href="http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#hashCode()">http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#hashCode()</a></p>

<blockquote>
この文字列のハッシュコードを返します。String のハッシュコードは、次の方法で計算します。<br/>
 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
</blockquote>

<p>上記の通りの計算をしてもRubyでは同じ数値にならない。
どうもJavaのintとRubyのIntegerは挙動が違うからのようだ。</p>

<p>java のInteger int 最大値超えるとどうなるの&lt;br/>
<a href="http://becomehappy.orz.hm/smithlog/article.php?id=370">http://becomehappy.orz.hm/smithlog/article.php?id=370</a></p>

<p>Javaのintは-0x80000000~0x7fffffffの間をぐるぐるループしているらしい。&lt;br/>
最大値（2147483647）を超えたら最小値（-2147483648）に戻してやる気遣いが必要だ。</p>

<p>というわけで作ってみたのが下記。</p>

<p>hashcode_gen.rb</p>

<div class="syntax_hilite"><div id="code-106">
<div class="code">#!/usr/bin/env ruby<br />
<br />
module EmurateJavaStringHashCode<br />
&nbsp; def to_hashcode<br />
&nbsp; &nbsp; max = <span style="color:#800000;">2</span> ** <span style="color:#800000;">31</span> - <span style="color:#800000;">1</span> # Javaのint最大値<br />
&nbsp; &nbsp; min = -<span style="color:#800000;">2</span> ** <span style="color:#800000;">31</span> # Javaのint最小値<br />
&nbsp; &nbsp; h = <span style="color:#800000;">0</span><br />
&nbsp; &nbsp; n = self.<span style="">size</span><br />
&nbsp; &nbsp; n.<span style="">times</span> do |i|<br />
&nbsp; &nbsp; &nbsp; h = <span style="color:#800000;">31</span> * h + self<span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; while h &lt;min || max &lt;h<br />
&nbsp; &nbsp; &nbsp; &nbsp; h = max - <span style="color:#006600; font-weight:bold;">&#40;</span> min - h&nbsp; <span style="color:#006600; font-weight:bold;">&#41;</span> + <span style="color:#800000;">1</span> if h &lt;min<br />
&nbsp; &nbsp; &nbsp; &nbsp; h = min - <span style="color:#006600; font-weight:bold;">&#40;</span> max - h&nbsp; <span style="color:#006600; font-weight:bold;">&#41;</span> - <span style="color:#800000;">1</span> if max &lt;h<br />
&nbsp; &nbsp; &nbsp; end<br />
&nbsp; &nbsp; end<br />
&nbsp; &nbsp; h<br />
&nbsp; end<br />
end<br />
<br />
class String<br />
&nbsp; include EmurateJavaStringHashCode<br />
end<br />
<br />
key = ARGV.<span style="">first</span><br />
puts key.<span style="">to_hashcode</span></div>
</div></div>

<p><br /></p>

<p>確認用のjava
HashCodeGenerator.java</p>

<div class="syntax_hilite"><div id="code-107">
<div class="code">public class HashCodeGenerater <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; public static void main<span style="color:#006600; font-weight:bold;">&#40;</span>String argv<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; System.<span style="">out</span>.<span style="">println</span><span style="color:#006600; font-weight:bold;">&#40;</span> argv<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="">hashCode</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div></div>

<p><br /></p>

<p>テストスクリプト
test/test_hashcode_gen.rb</p>

<div class="syntax_hilite"><div id="code-108">
<div class="code">require <span style="color:#CC0000;">'test/unit'</span><br />
<br />
$:.<span style="">unshift</span> <span style="color:#CC0000;">"#{File.dirname(__FILE__)}/../"</span><br />
$:.<span style="">unshift</span> File.<span style="">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span>__FILE__<span style="color:#006600; font-weight:bold;">&#41;</span><br />
<br />
class HashCodeGenTest &lt;Test::<span style="">Unit</span>::<span style="">TestCase</span><br />
<br />
&nbsp; def test_random<br />
&nbsp; &nbsp; <span style="color:#800000;">10</span>.<span style="">times</span> do<br />
&nbsp; &nbsp; &nbsp; str = <span style="color:#006600; font-weight:bold;">&#91;</span>Array.<span style="">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>rand<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">20</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span>rand<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">256</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="">chr</span><span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="">join</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="">pack</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">"m"</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="">chomp</span><br />
&nbsp; &nbsp; &nbsp; j = `java HashCodeGenerater <span style="color:#CC0000;">'#{str}'</span>`<br />
&nbsp; &nbsp; &nbsp; r = `ruby hashcode_gen.<span style="">rb</span> <span style="color:#CC0000;">'#{str}'</span>`<br />
&nbsp; &nbsp; &nbsp; assert_equal<span style="color:#006600; font-weight:bold;">&#40;</span>j,r<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; end<br />
&nbsp; end<br />
&nbsp; <br />
end</div>
</div></div>

<p><br /></p>

<p>テスト結果</p>

<div class="syntax_hilite"><div id="code-109">
<div class="code">Loaded suite test/hashcodegen_test<br />
Started<br />
.<br />
<span style="">Finished</span> in <span style="color:#800000;">1</span>.<span style="color:#800000;">478273</span> seconds.<br />
<br />
<span style="color:#800000;">1</span> tests, <span style="color:#800000;">10</span> assertions, <span style="color:#800000;">0</span> failures, <span style="color:#800000;">0</span> errors</div>
</div></div>

<p><br /></p>

<p>ちゃんと通りました。</p>

<p>--</p>

<p>ついでにCでも書いてみた。</p>

<div class="syntax_hilite"><div id="code-110">
<div class="code">#include &lt;stdio.<span style="">h</span>&gt;<br />
#include &lt;string.<span style="">h</span>&gt;<br />
<br />
int strhashcode<span style="color:#006600; font-weight:bold;">&#40;</span> char *word <span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<br />
int main<span style="color:#006600; font-weight:bold;">&#40;</span> int argc, char** argv<span style="color:#006600; font-weight:bold;">&#41;</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; printf<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">"hashcode = %d<span style="color:#000099; font-weight:bold;">\n</span>"</span>, strhashcode<span style="color:#006600; font-weight:bold;">&#40;</span>argv<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; return <span style="color:#800000;">0</span>;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span><br />
<br />
int strhashcode<span style="color:#006600; font-weight:bold;">&#40;</span> char *word<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; int len,i,h = <span style="color:#800000;">0</span>;<br />
&nbsp; len =&nbsp;strlen<span style="color:#006600; font-weight:bold;">&#40;</span>word<span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
&nbsp; for <span style="color:#006600; font-weight:bold;">&#40;</span>i=<span style="color:#800000;">0</span>; i&lt;len; i++<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; h = <span style="color:#800000;">31</span> * h + word<span style="color:#006600; font-weight:bold;">&#91;</span>i<span style="color:#006600; font-weight:bold;">&#93;</span>;<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; return h;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div></div>

<p><br /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/228/feed</wfw:commentRss>
		</item>
		<item>
		<title>[works] eyeVioがHDビデオに対応</title>
		<link>http://www.func09.com/wordpress/archives/227</link>
		<comments>http://www.func09.com/wordpress/archives/227#comments</comments>
		<pubDate>Mon, 30 Jun 2008 12:41:09 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[actionscript2.0]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[works]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/227</guid>
		<description><![CDATA[eyeVioがHD動画に対応してます。

http://eyevio.jp/

今回もいつも通り、動画のプレイヤーと、JavaScriptあたりをやりました。

FlashPlayerは7で作っているのでExternal [...]]]></description>
			<content:encoded><![CDATA[<p>eyeVioがHD動画に対応してます。</p>

<p><a href="http://eyevio.jp/">http://eyevio.jp/</a></p>

<p>今回もいつも通り、動画のプレイヤーと、JavaScriptあたりをやりました。</p>

<p>FlashPlayerは7で作っているのでExternalInterfaceクラスが使えないわけですが、
それでも一生懸命JavaScriptと連携しています。</p>

<p>SWFからダイナミックにHTMLのレイアウトを弄ったりして、なかなか楽しいです。</p>

<p>今回途中で非同期処理の管理に嫌気がさしたのでAS2用のスレッドライブラリを作りました。</p>

<p>AS3ではSparkの「そうめん」のような素晴らしいライブラリがあるんですが、AS2向けでシンプルなのは見つからなかったので
自作で</p>

<div class="syntax_hilite"><div id="javascript-112">
<div class="javascript"><span style="color: #003366; font-weight: bold;">new</span> Sequence<span style="color: #66cc66;">&#40;</span><br />
&nbsp; <span style="color: #003366; font-weight: bold;">new</span> Wait<span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; <span style="color: #003366; font-weight: bold;">new</span> XMLLoad<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'hoge.xml'</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; <span style="color: #003366; font-weight: bold;">new</span> Wait<span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; <span style="color: #003366; font-weight: bold;">new</span> FunctionJob<span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>,<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">normalfunc</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">start</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</div></div>

<p><br /></p>

<p>こんな感じで書けるように。</p>

<p>もともとのソースコードのコールバック関数をそのまま弄らずシーケンス処理に組み込めるように
関数をひとつのスレッドとして利用できるようにしたのが正解でした。</p>

<p>非同期の整理のつもりでスレッドライブラリを作りましたが、メソッドが集中しやすいコントローラー系クラスの処理分散にも効果を発揮してウハウハ。</p>

<p>時代遅れのAS2なので、気合いをいれて拡張していくつもりはサラサラないけど、
気が向いたら公開したいですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/227/feed</wfw:commentRss>
		</item>
		<item>
		<title>KDDIのSMTPリレーサーバ</title>
		<link>http://www.func09.com/wordpress/archives/226</link>
		<comments>http://www.func09.com/wordpress/archives/226#comments</comments>
		<pubDate>Wed, 25 Jun 2008 14:39:22 +0000</pubDate>
		<dc:creator>haga</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/226</guid>
		<description><![CDATA[家のサーバから外にメールが送信できなくて、ハマっていたのだけど
プロバイダのOP25Bという対策の所為だということに、やっと気付いた。

うちはKDDI
下記のページを探すのに２〜３時間かかった。

http://www [...]]]></description>
			<content:encoded><![CDATA[<p>家のサーバから外にメールが送信できなくて、ハマっていたのだけど
プロバイダのOP25Bという対策の所為だということに、やっと気付いた。</p>

<p>うちはKDDI
下記のページを探すのに２〜３時間かかった。</p>

<p><a href="http://www.auone-net.jp/support/trouble/mail_other.html">http://www.auone-net.jp/support/trouble/mail_other.html</a></p>

<p>relay-mta.auone-net.jp</p>

<p>KDDIはサポートサイトをFlexで作ったり、Macで表示されなかったり
かなり酷いと思います。。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/226/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
