| @技術/プログラミング

昨日のやつ(Ruby の Enumerable#inject() - portal shit!)、「使い方間違ってるだけだろwww」みたいな感じの言及があったのでもうちょっと調べてみた。やりたかったのは以下のようなこと。日付の範囲をレシーバーにした Enumerable オブジェクトをつくって、日付をキーにグルーピングされたハッシュを作りたかった。

Date.today.beginning_of_month.upto(Date.today.end_of_month).inject({}) do |result, date|
  result[date] = Document.where(:created_at.gt => date).and(:created_at.lt => date)
end

これを実行しようとすると

NoMethodError: undefined method `[]=' for Tue, 01 May 2012:Date

と言われる。

しかし以下のようにしたら意図した通りのハッシュを作ってくれた。

Date.today.beginning_of_month.upto(Date.today.end_of_month).inject({}) do |result, date|
  result[date] = Document.where(:created_at.gt => date).and(:created_at.lt => date)
  result
end

ふむふむ〜、ナルホディウスですぞ〜〜〜〜〜。Enumerable#inject の引数がハッシュではなく配列のときは最後の result はいらないのだけど、ハッシュのときはいるらしい。

ルbyーーー1.9.2-p290 + レールズ 3.2.2 での現象です。

| @技術/プログラミング

Ruby の Enumerable#inject 、引数にハッシュ指定するとループの一回目はハッシュとして処理するけど二回目以降 Integer として処理しようとして死ぬ。

ルby−−−−−−−−−1.9.2-p290 での現象です。

| @WWW

自分にとってTwitterでfavする行為、面白いものを見つけてきて☆をつけて遊ぶというか、DJが面白レコード発見してきて人に自慢するのに似た感覚があって、@wyinoue さんとか、箸を転がしただけでも50favされるような人をfavるのは掘ってる感がなくてつまらないと感じる。

| @技術/プログラミング
  • 旧ブログのタグが引き継げていないのでタグを引き継ぐ(なぜか失敗する。DataMapper の挙動怪しい)

  • Production でも SQLite で動いているので変える

    • MySQL が妥当なとこだろうけど MongoDB にしてみたら Lokka 用の MongoDB Mapper の開発につながってよさそう。

仕事で勉強したことを趣味グラミングに生かして、趣味グラミングで学んだことを仕事に反映できたらいいと思う。

| @技術/プログラミング

ポータルシットを AutoPagerizable にしました。

pager のない theme だったら単純に theme をいじって次のページへのリンクに rel="next" とか rel="prev" とかつけて、AutoPagerize させたい HTML エレメントに class=" autopagerize_page_element" とか書くだけで AutoPagerizable になるけど、自分で使ってる theme は yayugu/dm-pagination に依存してるので、プラグインをつくってモンキーパッチした。

こんな感じ。

module Lokka
  module AutoPagerize
    def self.registered(app); end
  end
end

module DataMapper
  class Pager
    private
      def link_to(page, contents=nil, rel={})
        %(<a href="#{uri_for(page)}" rel="#{rel[:rel]}">#{contents || page}</a>)
      end

      def previous_link
        li 'previous jump', link_to(previous_page, option(:previous_text), {:rel => "prev"}) if previous_page
      end

      def next_link
        li 'next jump', link_to(next_page, option(:next_text), {:rel => "next"}) if next_page
      end
  end
end

ついでに LDRizable になるように hentry と hfeed の設定もしといた。

| @技術/プログラミング

Amazon へのリンクを生成する Lokka Plugin を作りました。テストがないのでまだ単独のリポジトリとしては公開していないけど、以下でコードは取得できます。

lokka/public/plugin/lokka-amazon_associate at portalshit · morygonzalez/lokka

Update 2012-04-15

いつまで経っても全部テスト書けそうにないのでテストほぼないけどとりあえず単独のリポジトリとして公開しました。

使い方ですが、プラグインを LOKKA_ROOT/public/plugin/ に入れた後、ブラウザで www.example.com/admin/plugins/amazon_associate にアクセスしてご自身の Associate Tag と Access Key ID と Secret Key を入れます。

お使いの Lokka の theme を開いて、本文を表示している部分を associate_link() というヘルパーメソッドに渡します。たとえば entry.haml が

.body
  = @entry.body

となっているなら、

.body
  = associate_link @entry.body

というようにします。

そんで本文中で以下のように書きます。(P_BLOG の頃に使っていた ISBN/ASIN 変換プラグインと同じように使えるようにしました)

<!-- ISBN=PRODUCTID -->

そのうち画像のサイズとか選べるようにしたいですね。

24時間キャッシュするようにしてるけど、 Earthquake.gem で Growl するプラグインの画像をキャッシュするコードを真似てます。

マジで感謝。

| @Mac/iPhone

youpy さんと negipo さん作の Dropbox を使って私家版 gyazo をやるやつ、便利に使ってたんだけど、Gyazo.app の上に画像ファイルをドロップしてアップロードする機能がなかったので改良した。便利です。

使い方ですが、まずDropbox の Public フォルダ内に gyazo というフォルダを作ります。その後上のファイルをダウンロードしてきて、 /Applications/Gyazo.app/Contents/Resources/script と置き換えてください。ちなみに9行目の

url = 'http://dl.dropbox.com/u/2611378/gyazo/' + File.basename(file)

の ‘2611378’ という数字は僕の Dropbox のユーザー ID なんで、ここはご自分のものに置き換えてください。

Dropbox のユーザー ID は普通に使ってる分には分からないので、以下の手順で調べてください。Dropbox の Public フォルダで適当なファイルを選んで右クリックすると Dropbox メニューがでるので、そこから「パブリックリンクのコピー」を選びます。するとクリップボードに Dropbox のユーザー ID を含んだ URL がコピーされるのでそこから取得してください。

22f55e1caf9da3fef24c352bb6eb2a21.png (713×156)

まだ Dropbox のアカウントを持ってない方は以下のリンクから作ってもらえると幸福が実現します。