追記

Don'tStopMusic

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

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

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


2009-06-03 この日を編集

_ [Rails] acts_as_readonlyable は test 環境では無効になる このエントリーを含むブックマーク

README にも書いてあるんですが、はまったのでメモ。

test の時に SELECT だけスレーブにクエリを送りたくて DB 設定してもマスターにクエリが行きました。何故かと思って調べたところタイトルの通りでした。

acts_as_readonlyable は、(たぶん)トランザクション中の一部の SELECT だけスレーブに行くとおかしなことになり兼ねないので、トランザクションを開いているとマスターに問い合わせるようになってるようです。

一方 use_transactional_fixtures=true でのテストは、テスト毎の fixture の初期化にトランザクションのロールバックを使います。つまり、テストでは常にマスターにクエリが行きます。

ということで test の時に SELECT だけスレーブにクエリを送るということはできなさそうです。use_transactional_fixtures=false は辛いのでやりたくないですし。あるいは汎用性のある acts_as_readonlyable の改造の仕方があればいいんですが。

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

_ なおゆき [かれこれ半月くらいcommitしていただけるのを待っています。 明日ですかね。]

_ だて [すみません。昨日コミットしましたよ。 結局テストは諦めたのできちんと動作確認お願い。]


2009-05-19 この日を編集

_ [適当] Wolfram|Alpha knows Matz このエントリーを含むブックマーク

Wolfram|AlphaでMatzと検索するとちゃんとまつもとさんが検索結果に出てきました。

Matz - Wolfram|Alpha

Wikipedia を情報ソースに使っているようなので、検索されるのは当たり前といえばそうなんですが、例えばCategory:Computer programmersにある人名を検索しても、Paul Graham も P. J. Plauger も Sam Ruby も駄目でした。しかし、Dennis Ritchie、Brian Kernighan、 Bjarne Stroustrup、Guido van Rossum、 Larry Wall はひっかかるので言語開発者なら OK なのかも。基準が良く分かりません。

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

_ なおゆき [3ヶ月ぶり]


2009-05-11 この日を編集

_ [Ruby] Ruby 1.9 でケブンリッジ このエントリーを含むブックマーク

いい加減 Ruby 1.9 使おうと思う今日この頃です。ということで、rbuyでケブンリッジ - さかぐちのはてな日記とロジックは同じで Ruby 1.9 対応にしてみました。このプログラム、標準添付のライブラリだけで実行できるのが良いですね。

#!/usr/bin/ruby19
# coding: EUC-JP
require 'open-uri'
require 'rexml/document'
 
YMA_API_URL = "http://jlp.yahooapis.jp/MAService/V1/parse"
APPID = "your-yahoo-application-id"
DEFAULT_TEXT = <<END
こんにちは。皆さんお元気ですか?私は元気です。
この文章は、イギリスのケンブリッジ大学の研究の結果
人間は文字を認識するとき、その最初と最後の文字さえ合っていれば
順番は滅茶苦茶でもちゃんと読めるという研究に基づいて
わざと文字の順番を入れ替えてあります。
どうです?ちゃんと読めちゃうでしょ?
ちゃんと読めたら反応よろしく。
END
 
def kebunridge(word)
  return word unless word.size >= 4
  word[0] + word[1..-2].chars.sort_by{rand}.join + word[-1]
end
 
sentence = DEFAULT_TEXT
url = URI.encode(YMA_API_URL + "?appid=" + APPID + "&sentence=" + sentence.encode("UTF-8") + "&results=ma")
open(url) do |f|
  result = REXML::Document.new(f)
  words = result.elements.collect("ResultSet/ma_result/word_list/word/reading"){|reading| kebunridge(reading.text.chomp) }
  puts words.join(" ").encode("EUC-JP")
end                               

ファイルの文字エンコーディングは EUC-JP とします。ついでに、kebunridge は短くして result.elements には趣味で collect 使ってます。

1.9 対応のポイントは……というほどのことはないのですが

  1. マジックコメント # coding: EUC-JP を追加 (Ruby 1.9 ではソースファイルの文字エンコーディングをマジックコメントで明示する必要がある)
  2. require 'jcode' 不要 (Ruby 1.9 では元から「文字単位」でアクセスできる)
  3. require 'kconv' 不要 (Ruby 1.9 では元から String が文字エンコーディングの変換のメソッドを持つ)
  4. 文字エンコーディングの変換には String#encode

くらいですね。

2009/05/14追記

ちなみに、open-uri は良きに計らって、ウェブから取得したテキストに適切なエンコーディングを付与しようとしてくれます。

$ ruby19 -ropen-uri -e 'p open("http://www.yahoo.co.jp/").read.encoding'
#<Encoding:UTF-8>
$ ruby19 -ropen-uri -e 'p open("http://geocities.yahoo.co.jp/").read.encoding'
#<Encoding:EUC-JP>
$ ruby19 -ropen-uri -e 'p open("http://www.google.co.jp/").read.encoding'
#<Encoding:Shift_JIS>

(google は UserAgent によっては Shift_JIS で返す模様。)

ただ、HTTP ヘッダ Content-Type の charset を見てますので、HTML の meta タグには charset が書いてあるけど、HTTP ヘッダには text/html しか書いてないようなサイトの場合、返る String は ASCII-8BIT になります。

$ ruby19 -ropen-uri -e 'p open("http://www.cnta.gov.cn/").read.encoding'
#<Encoding:ASCII-8BIT>

こういう場合には、何らかの方法で調べて正しいエンコーディングをセットしてください。

読んでからセットする場合
$ ruby19 -ropen-uri -e 'p open("http://www.cnta.gov.cn/").read.force_encoding("gb2312").encoding'
#<Encoding:GB2312>
最初から知ってる場合
$ ruby19 -ropen-uri -e 'p open("http://www.cnta.gov.cn/", "r:gb2312").read.encoding'
#<Encoding:GB2312>

2009-02-06 この日を編集

_ [メモ] xttの動かし方 このエントリーを含むブックマーク

MOONGIFT で紹介されていた xtt ですが、まだ作りかけらしく README すらないので Rails を知ってないと動かすのは難しいです。また、起動はできても使っているとしばしばエラーになるので、まだ常用は無理ですね。

環境

以下が必要です。予めインストールしておいてください。

  • Ruby 1.8.6 or 1.8.7
  • Rails 2.1.1
  • MySQL 5.x
gem
  • bj 1.0.1
  • tinder 0.1.6
  • fastercsv 1.2.3
  • googlecharts 1.3.6
  • hpricot 0.6
  • net-toc 0.2

gem は

rake gems:install

でまとめてインストールできます。が、エラーになったりするので、手動でインストールするなら、

# gem install bj -v=1.0.1 
# gem install tinder -v=0.1.6 
# gem install fastercsv -v=1.2.3 
# gem install googlecharts -v=1.3.6
# gem install hpricot -v=0.6
# gem install net-toc -v=0.2

ダウンロード

  1. github の xtt の masterにいく
  2. download ボタンを押す
  3. zip か tar の好きなほうを選んでダウンロードしてください

セットアップ

database.yml

config/database.yml を用意します。

$ cp config/database.sample.yml config/database.yml

サンプルは sqlite3 を使いますが、sqlite3 では使えない SQL 関数を用いていたりしますので、MySQL を使うように修正してください。例えば、

development:
  adapter: mysql
  database: xtt_development
  host: localhost
  username: xtt
  password: xtt
 
production:
  adapter: mysql
  database: xtt_production:
  host: localhost
  username: xtt
  password: xtt

あとは MySQL のデータベースを作ります。

$ mysqladmin -u root -p create xtt_development
スキーマのロード

migration が用意されてません。db/schema.rb からテーブルを作成します。以下の rake タスクを実行してください。

$ rake db:schema:load
environment.rb の修正:hpricot

gem のインストール具合によっては起動時にエラーになります。もし以下のようなエラーが出た場合には、config/environment.rb を修正してください。

/usr/lib/ruby/site_ruby/1.8/rubygems.rb:149:in `activate': can't activate hpricot (= 0.6, runtime), already activated hpricot-0.6.164 (Gem::Exception)

修正箇所は以下の通りです。とりあえずバージョン指定を外します……

旧: config.gem :hpricot, :version => '0.6'
新: config.gem :hpricot
environment.rb の修正:secret

また、デフォルトで記述されている secret が適当なので、以下のようなエラーが発生します。

  Secret should be something secure, like "e059db7575e806c7e80573aa36b4e1ad".  The value you provided, "SEKRIT", is shorter than the minimum length of 30 characters

secret 用の文字列を生成してくれてますので、config/environment.rb を修正して secret を置き換えます。

旧:
  config.action_controller.session = {
    :session_key => '_tt_session',
    :secret      => 'SEKRIT'
  }
旧:
  config.action_controller.session = {
    :session_key => '_tt_session',
    :secret      => 'e059db7575e806c7e80573aa36b4e1ad'
  }

起動してみる

おそらくこれで起動するようになりました。development モードでとりあえず起動してみます。

$ ./script/server

http://127.0.0.1:3000/ (ホスト部分は環境に合わせて変えてください)でアクセスして、ログイン画面が表示されたら成功です。

ユーザ登録とアクティベーション

ログイン画面からユーザ登録画面に遷移できないので、

http://127.0.0.1:3000/users/new

に直接アクセスしてください。ユーザ名、メールアドレス、パスワードなどを入力して「Sign up」ボタンを押せばユーザが作れます。

log/development.log にアクティベーション用の URL が出力されてますので、それの /activate 以下をコピペしてブラウザでアクセスしてください(ちゃんと設定してればメールを飛ばしますが)。これでユーザ登録が完了です。

Your account has been created.
 
  Username: date
  Password: date
 
Visit this url to activate your account:
 
  http://tt.entp.com/activate/dcfcf42d7f3124febbfe64722b2310d634232ff6

というようなログが出力されるので、

http://127.0.0.1:3000/activate/dcfcf42d7f3124febbfe64722b2310d634232ff6

にアクセスします。

これでアクティベート&ログインされるので、やっと使うことができます。


2009-01-29 この日を編集

_ [Rails] gettext のトリッキーな使い方 このエントリーを含むブックマーク

課題

あるテンプレートのあるメッセージを条件によって出し分けたいとします。テンプレート全体を別ファイルに分けるほどには差分がなく、テンプレートに出し分けのロジックを書くには条件のパターンがちょっと多い(しそもそもロジックはなるべく書きたくない)のが悩みどころです。

例えば、ちょっとしたチャットアプリがあり、これを子ども向けと大人向けにそれぞれ提供するとします。別々の Rails アプリとして稼動させるのもリソースの無駄なので、child サブドメインは子ども向け、adult サブドメインは大人向けとして、同じアプリケーションインスタンスで動かします。

子ども向けも大人向けも、使い方はまったく同じで表示されるメッセージが多少違うだけです。テンプレートをコピーして少しだけ書き変えるのも重複が多くて後々メンテナンスで困りそうです。高齢者向けや女性向けも提供予定なのでなおさらです。

提供先によって違うメッセージは次のような組み合わせとします。子ども向けだけ違うのが面倒そうなところです。

大人向け
発言する
高齢者向け
発言する
女性向け
発言する
子供向け
発言(はつげん)する

トリッキーな解決方法

で、なんとか手抜きな解決方法がないかと思った結果、gettext を以下のように使うことにしました。

gettext の po ファイルには以下のように書きます。

msdig "post"
msgstr "発言する"
 
msdid "child|post"
msgstr "発言(はつげん)する"

今アクセスしているアプリケーションが大人向けなのか子供向けなのかの状態を変数 @target に格納しているとします。@target は "child" か "adult" です。

そして、テンプレートには以下のように書きます。

_(s_("#{@target}|post"))

二重にしているのがみそです。@target が child のときには、

_(s_("child|post")) → _("発言(はつげん)する") → "発言(はつげん)する"

@target が adult のときには、

_(s_("adult|post")) → _("post") → "発言する"

となります。


2009-01-08 この日を編集

_ [私生活] ジョンソンボディケア エクストラ24時間ローション が個人的にヒット このエントリーを含むブックマーク

但し書き

Ruby やネットとは1ミリも関係ないです。ジョンソンボディケアが個人的にヒットしたので書いておきたくなりました。

問題とその解決

顔のお手入れに書きましたが、毎年冬場には手足、特に脛の肌が乾燥していました。乾燥すると痒くなって仕事の集中の妨げにもなるしで困ったものでした。「でした」と過去形なのはこの冬はその状態にならなくなったからです。タイトルにあるジョンソンのボディケアローションが役に立ちました。

遍歴

これにたどり着くまでにいろいろ試しています。軽くご紹介。

乳液

まあ、100円ショップの安い乳液ですが。栄養は補給されてつやつやになるものの結局乾燥しているという見た目変な状態になりました。

ベビーオイル

ジョンソンのベビーオイルです。多少効果はありますが、塗ってからしばらくべたつくのと、効果が長続きしないので日に何度も塗り直さないといけないのが難点です。毎日会社で塗り直すのはさすがに面倒。

オリーブオイル

食用ではなく化粧品のオリーブオイルです。これも効果はあるものの、ベビーオイル同様に長続きしません。

ケラチナミン

医薬品だけあって効果はばつぐんです。ただ、やたらべたつくのと値段が高いので毎日塗る気になれないのがネックでした。

ジョンソンボディケア エクストラ24時間ローション

最終的解決策がこれ。お風呂上りに塗っておけば後は一日何もしなくてOK。べたつきもほとんどありません。今冬はシーズン前から使っているのが功を奏してか、今のところ乾燥肌知らずです。誰にでも効くかはわかりませんが、乾燥肌で困っている方には試してもらいたい一品です。


2009-01-01 この日を編集

_ あけましておめでとうございます このエントリーを含むブックマーク

エンジン・サマーを読みながら年を越しました。(エンジン・サマーは買いましたが)一昨年くらいから図書館から本を借りて読んでいます。利用している図書館のサイトでは新しく入った書籍の一覧が見れるので、気になる本があったら片端からネットで予約を入れるという借り方をしています。ジャンル買いをする性質なので買う本だけ読んでいたらきっと読まなかっただろう本も読めるようになりました。去年はマンガや新書も含めて100冊くらい読んだようですが(去年の4月末から読書メーターに記録をつけるようにしました)、今年はもうちょっと読みたいですね。 あとはアウトプットを増やすこと。まずはこの日記をせめて週一くらいで更新します。

最近のコメント:

  1. だて (06-04)
  2. なおゆき (06-04)
  3. なおゆき (05-20)

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