2011/01/11

fancybox のバグが直っていた

これまで fancybox の 1.3.1 を利用していたが、内部のテキストボックスやテキストエリアでカーソルキーによる左右移動ができなかった。
fancybox を最新(1.3.4)にアップデートしたら直った。
changelog を見ると、1.3.2 で直ってたのかな。
見逃していた。

2011/01/04

Devise でタイムアウトまでの時間を変更する

現在のシステムでは Devise を認証システムとしているのですが、タイムアウト時間がデフォルトで 30 分となっています。
タイムアウト時間の確認はこんな感じでできます。(User は generate したモデル名により変わる)
% rails c
irb(main):001:0 => User.timeout_in
=> 1800 secondes
User.timeout_in が使用されているのは、ここでわかる。
というわけで、User.timeout_in を上書きしてやればうまくいきそうだが、ちょっとかっこわるい。
やっぱり、application.rb や production.rb なんかで config.hogehoge でやりたい。
調べてみたらこんな感じでできるようだ。(とりあえず2時間に変更する)
module App
  class Application < Rails::Application
    # some settings

    # devise settings
    config.devise.timeout_in = 2 * 60 * 60 # timeout seconds

    # some settings
  end
end
確認してみる。
% rails c
irb(main):001:0 => User.timeout_in
=> 7200
うん変わってる。(secondsがどっか行ったが)
config.devise の実体は Devise モジュールで、ソースを見るとその他にも多くの設定が行えるのがわかる。
devise 関連の設定は config.devise で行うと把握しておけば大丈夫だろう。

-- 2011-01-28 追記
# このほうがいいね
# config.devise.timeout_in = 2 * 60 * 60
config.devise.timeout_in = 2.hours

あけましておめでとうございます

年末は尻すぼみになってしまっていたこの blog
今年も不定期ながら更新していく予定です。
ネタは相変わらず Rails3 ネタがメインかなと。
IS03 を早々に入手しているのでそのうち andoroid ネタや IS03 ネタもやりたいです。
PHP を学習せねばならん状況になっているので、そちらも何か書くかもしれません。

ともかく、今年もよろしくお願いいたします。

2010/11/26

blogger に新しいはてブボタンを導入してみた

使いやすくなりました! はてなブックマークボタン

新しいはてブボタンができたということで早速導入。
  • blog タイトルの隣に blog 全体のブックマークボタン
  • 各エントリの下部にエントリオンリーのブックマークボタン
の二種を配置したかったので、ちょっと作業が必要だった。
まず、上記のリンクから自分のサイト用のスクリプトを作成。
<a
  href="http://b.hatena.ne.jp/entry/http://pinzolog.blogspot.com/"
  class="hatena-bookmark-button"
  data-hatena-bookmark-title="tail -f pinzo.log"
  data-hatena-bookmark-layout="standard"
  title="このエントリをはてなブックマークに追加">
    <img
      src="http://b.st-hatena.com/images/entry-button/button-only.gif"
      alt="このエントリをはてなブックマークに追加"
      width="20"
      height="20"
      style="border: none;" />
</a>
<script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>

  1. blogger のダッシュボードからデザイン→htmlの編集で、編集画面を表示する。
  2. ウィジェットのテンプレートを展開にチェックを入れて、テンプレート内部を編集できるようにする。
  3. //div[@id='header-innder']/div[@class='titlewrapper']/h1[@class='title']/b:include[@name='title']の直後に上記のスクリプトを配置する。(ただ、'このエントリーを'は取り除いた)
  4. //div[@class='post-share-buttons']の直後に下記のスクリプトを配置する
    <a 
      expr:href='&quot;http://b.hatena.ne.jp/entry/&quot; + data:post.url'
      class="hatena-bookmark-button"
      expr:data-hatena-bookmark-title='tail -f pinzo.log : &quot; + data:post.title'
      data-hatena-bookmark-layout="standard"
      title="このエントリーをはてなブックマークに追加">
        <img
          src="http://b.st-hatena.com/images/entry-button/button-only.gif"
          alt="このエントリーをはてなブックマークに追加"
          width="20"
          height="20"
          style="border: none;" />
    </a>
    <script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
    
  5. 作業終了。お疲れ様でした

新しいはてブボタンはなかなか便利ですね。
ただ、alt から'このエントリーを'を取り除いたのがきいてない気がするぞ
※ちなみに、はてブボタンのソースは実際は一行ですが、適宜改行・インデントしてあります

2010/11/25

? にのっていない gmail のキーボードショートカット

d : cc がはじめから入力可能(テキストエリアが表示されている)なメール作成
b : cc と bcc がはじめから入力可能なメール作成
ただし c のように Shift と組み合わせての別窓表示は不可。

Shift + o : 別窓でメールを表示

ほかにもあるかもしれない

2010/11/23

愛用している Google Chrome 拡張機能

以前少し書いたとおり、メインのブラウザは Goocle Chrome です。
職場では Windows7、開発環境は VMWare 上の Ubuntu、移動中にいじるノートPCも Ubuntu と様々な環境をふらふらすると、ブックマークと拡張機能の同期がかかせません。
それでいて、サクサク動いて firefox ほどではないにしても十分な拡張があります。

そんなわけで、せっかくだし自分の愛用している拡張機能を列挙しておこうと思う。
AutoPatchWork
定番の AutoPagerize 系のやつ。画面上であまり主張しないのが好み。

Better Gmail (Unofficial)
色々と GMail を便利にしてくれるらしい。いいなと思うのは添付ファイルのアイコンぐらいでそんなに恩恵を感じない。

Bubble Translate
翻訳用の拡張。
Rails3 とか使ってると英語サイトバリバリ見ないとダメ。これは必要な部分のみその場で翻訳してくれるので非常に重宝する。

Chrome Reader
Google Reader と連携する拡張機能。
気になった blog をその場で登録できる。その場でタグを指定できるのがいい。
アイコンで登録しているかどうかもわかるし、remove もその場でできる。
必要な機能を最低限の労力で利用できる。

Chromed Bird
ほぼ発信専門でそんなに TL を眺めないので、これぐらいで十分。

ChromeMilk
最近はもっぱら Google Task なので、そろそろ無効にしておこうかとも思ってるけど、RTMの拡張機能。
時間指定してリマインダー飛ばせるのは重宝するのだが、どうしても GMail やカレンダーと連携できる Google Task を使ってしまう。

Create Link
見てるページのアンカータグを作ってくれる。
blog 書くとき用。このエントリでは使いまくり。

CSSViewer
カーソル上のエレメントの css が一望できる。便利。
colorzilla の代わりに入れた。
カーソルで指すことのできない要素(コンテナ系とか)は見れないのが難点。

Gmail Fixed Width Text
メールは当幅じゃなきゃ。
ブラウザで GMail 見るときに当幅フォントで表示してくれる。

Google Mail Checker Plus
Thunderbird を窓から投げ捨てて、GMail 一本に統一したので導入した。
新着がないときにクリックした場合、GMail をひらいてくれる時と、空の吹き出しが表示される時がある。
条件がよく分からん。

Google Quick Scroll
ぐぐったサイトで、さらに目的の場所までナビゲートしてくれるエスコート上手な拡張機能。

IE Tab
ページを IE コンポーネントで表示してくれる拡張。
最近使わないけど、やっぱりあったほうがいいし、いつ使うことになるかわからないからいれてある。

Incredible StartPage - より使いやすいChromeのスタートページ
どっちかっていうといれたままになってるだけの拡張機能。
ブックマークはこちらのほうが見やすい。
でもよく使うサイトは見れない。
素のスタートページとどちらがいいかはお好み次第。

Lite Bookmarks
Google Bookmark 検索用拡張機能。
いろいろ使ってみたけど、これが一番シンプルで使いやすかった。

Neat Bookmarks
Chrome のブックマーク用の拡張機能。
基本的にブラウザのブックマークにはほんとによく使うものしか登録しないので、一覧表示できるやつが欲しかった。
常に別タブで開くことができるオプションがあれば言うことないんだけどな。

SmoothScroll
スクロールをスムーズにしてくれるらしいが、実は実感したことがない。
そっこーいれたため、これが当たり前になってるからだろうか??

Taberareloo
一番使う拡張機能かも。
主にブックマークに使用していて、はてブと Google Bookmark にブックマークして、Evernote にサイトをクリップ、そしてブックマークしたよって twitter へ投稿する。
これを一発でやってくれる。
Evernote の拡張とかあれはダメだ。クリッピングにかかる時間が長すぎる。

はてなブックマーク GoogleChrome 拡張
はてブの拡張。一応ブックマークとして利用もしているけど、サブ程度(メインは Google Bookmark)。
ブックマーク自体も Taberareloo 経由なので、この拡張は 100% 純粋に他ユーザのコメントを見るため用。
Firefox の拡張と違って、タブを使わないので、サイトとコメント同時にみられるのは便利だと思う。

とまあ、タイトルの割には大して利用していない拡張もあったけど、気にしない。

2010/11/11

unite.vim で :UniteWithInput 時に tab で補完がきかなくなった

vim で unite.vim を愛用しているんだけど、最新に更新したら使いにくくなった。
Rails 開発時の使い方はこんな感じ
・vim を立ち上げたら :cd $RAILS_ROOT/app でカレントディレクトリを app ディレクトリへ
・C-f に :UniteWithInput file を登録してあるので、状況に応じて C-f
・cont<tab><enter> で unit.vim のウィンドウに controllers ディレクトリのファイル一覧を表示
・ファイルを絞り込むなり、C-n でカーソル移動なりして開く
だいたいこんな感じで、ファイルのオープンを行ってた。
それが、なぜか tab でディレクトリの補完がきかなくなった(^Iが入力される)
また、ディレクトリ名の入力だけではダメで、最後に / を入れないとディレクトリ内部のファイルを列挙してくれないようだ。
(tabで補完できていた頃は気にしていなかっただけかもしれないが)
ちょっと unite.jax とにらめっこしてこよう。

[追記]
ありがたいことに機能追加していただけました。

2010/11/09

Rails3 で POP before SMTP

Rails3 で POP before SMTP にてメール送信できるまで。

ジェネレータで mailer を作成する。
rails g mailer TestMailer

config/application.rb にメール設定を追加
module Sample
  class Application < Rails::Application
    # ---- なんかいろいろ ----

    # mail setting
    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
      :enable_starttls_auto => false,
      :address => 'smtp.example.com',
      :port => 587,
      :domain => 'localhost',
      :user_name => 'user',
      :password => 'password'
    }
  end
end

メール本文を erb で。
<%= @text %>

配信メソッドを mailers/test_mailer.rb に追加。
# -*- coding: utf-8 -*-
require 'net/pop'
class TestMailer < ActionMailer::Base

  # テストメールを配信する
  def test
    @text = 'this is test mail' # インスタンス変数で view にデータを渡せる
    mail(
      :subject => 'Test mail',
      :from => 'from@example.com',
      :to => 'to@example.com'
    )
    authenticate
  end

  private
  # 認証メソッド
  def authenticate
    Net::POP3.auth_only(self.smtp_settings[:address], 110, self.smtp_settings[:user_name], self.smtp_settings[:password])
  end
end

実行
rails runner "TestMailer.test.deliver"

これで、deliver メソッドでの配信前に POP3 の認証が終わっているのでメールの送信ができる。
mailer をたくさん作るなら、ActionMailer::Base を拡張するようにしたほうがいいかな。

参考にしたサイト:てらじろぐ | ActionMailer設定色々

Rails3 のメール送信で "hostname was not match with the server certificate" というエラーが出た場合には

Rails3.0.1 にてメール送信のテストをしているとこんなエラーがでた。
/usr/lib/ruby/gems/1.8/gems/railties-3.0.1/lib/rails/commands/runner.rb:50: /usr/lib/ruby/1.8/openssl/ssl.rb:123:in `post_connection_check': hostname was not match with the server certificate (OpenSSL::SSL::SSLError)
        from /usr/lib/ruby/1.8/net/smtp.rb:582:in `tlsconnect'
        from /usr/lib/ruby/1.8/net/smtp.rb:562:in `do_start'
        from /usr/lib/ruby/1.8/net/smtp.rb:525:in `start'
        from /usr/lib/ruby/gems/1.8/gems/mail-2.2.9/lib/mail/network/delivery_methods/smtp.rb:115:in `deliver!'
        from /usr/lib/ruby/gems/1.8/gems/mail-2.2.9/lib/mail/message.rb:1928:in `do_delivery'
        from /usr/lib/ruby/gems/1.8/gems/mail-2.2.9/lib/mail/message.rb:228:in `deliver'
        from /usr/lib/ruby/gems/1.8/gems/actionmailer-3.0.1/lib/action_mailer/base.rb:401:in `deliver_mail'
        from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.1/lib/active_support/notifications.rb:52:in `instrument'
        from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
        from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.1/lib/active_support/notifications.rb:52:in `instrument'
        from /usr/lib/ruby/gems/1.8/gems/actionmailer-3.0.1/lib/action_mailer/base.rb:399:in `deliver_mail'
        from /usr/lib/ruby/gems/1.8/gems/mail-2.2.9/lib/mail/message.rb:228:in `deliver'
        from (eval):1
        from /usr/lib/ruby/gems/1.8/gems/railties-3.0.1/lib/rails/commands.rb:39:in `eval'
        from /usr/lib/ruby/gems/1.8/gems/railties-3.0.1/lib/rails/commands/runner.rb:50
        from /usr/lib/ruby/gems/1.8/gems/railties-3.0.1/lib/rails/commands.rb:39:in `require'
        from /usr/lib/ruby/gems/1.8/gems/railties-3.0.1/lib/rails/commands.rb:39
        from script/rails:6:in `require'
        from script/rails:6
TLS接続を使用としてエラーになっているみたいなので、TLS接続をしないようにすればいいらしい。(今の環境はPOP before SMTPなのでTLSは必要ない)
config/application.rb にて smtp_settings に設定を追加すればメール送信できた。
config.action_mailer.smtp_settings = {
  :enable_starttls_auto => false, # ←これ
  :address => 'example.com',
  :port => 587,
  :domain => 'localhost',
  :user_name => 'user',
  :password => 'password'
}

2010/11/06

Rails3 で RJS の page オブジェクトを拡張する

例えば、facebox や fancybox のような Lightbox 系のスクリプトを使う場合、毎度毎度スクリプトを出力するコードはかかないですよね。
で、一度サーバ側で処理が必要な場合が多いので、Rails ではたいてい RJS などを使って AJAX 処理をすると思います。
その場合、helper に処理を書いてしまうのが楽なのですが、引数に page オブジェクトを渡す必要があります。
def popup(page, partial_name, locals)
  # popup 内の html を定義してある div を非同期更新
  page[:popup].replace_html :partial => partial_name, :locals => locals
  # facebox はたしかこんな感じで出せたと思う。うろ覚え
  page << '$.facebox($("#popup").html());'
end
でも、page.popup(partial_name, locals) とかけたほうがスマートな気がする。 page オブジェクトは ActionView::Helpers::PrototypeHelper::JavaScriptGenerator のインスタンスなのでこれを拡張してみる。
class ActionView::Helpers::PrototypeHelper::JavaScriptGenerator
  def popup(partial_name, locals)
    self[:popup].replace_html :partial => partial_name, :locals => locals
    self << '$.facebox($("#popup").html());'
  end
end
単純に page を self に書き換えただけ。ところがこれだとエラーがでる。 self に [] が定義されていないらしい。 というのも、page オブジェクトの各種メソッドが定義されているのは、さらに内部のモジュールである GeneratorMethods だからみたい。 というわけで、
module ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods
  def popup(partial_name, locals)
    self[:popup].replace_html :partial => partial_name, :locals => locals
    self << '$.facebox($("#popup").html());'
  end
end
これで OK