dm-tagsとwill_paginateをいっしょに使ったらエラー

dm-core 0.10.1
dm-tags 0.10.1
will_paginate 3.0.0 (agnostic)

INNER JOIN `taggings` ON `post`.`id` = `taggings`.`taggable_id`
INNER JOIN `taggings` ON `post`.`id` = `taggings`.`taggable_id`

あからさまにエラーが出るこんな部分を含むSQLがはかれていた。
詳細は今から調べる

irb(#<DataMapper::Query:0xb785548c>):005:0> @links[0].inspect == @links[1].inspect
=> true


   925      # @api private
   926      def normalize_links
=> 927        links = @links.dup # @links.length == 2

...

   953
   954              # set @repository when appending conditions
   955              original, @repository = @repository, DataMapper.repository(repository_name)
   956
   957              begin
# ここでrelationと同じsubject, value, modelのrelationがappend_conditionによって@linksに入れられてしまう。
=> 958                append_condition(subject, value, model)
   959              ensure
   960                @repository = original
   961              end
   962        end

ここまではわかった。ただ958行目で処理してrelationに入っているものと同じrelationがappend_conditionによって@linksに入れられてしまう状況が正しいのかどうかわからない。

とりあえずdm-coreをいじってなんとかした。もうちょっと調べて書き直す。

いつも思う事なのだが、プレイリストを作るのが苦手だ。他人や友達の作ったよくできたmixやプレイリストを聞いていて感心する度に、自分はなんでこんな風にうまく曲をまとめる事ができないんだろうと思う。
何度もプレイリストを作りかけて、こういう感じの曲で1時間から2時間くらいの間で、と3,4曲くらい選んだところでやめてしまう。Geniusも試してみたけど、いまいちすぎて全然使っていない。

3,4曲選んだらあとは自動的に補完できないだろうか。最近はやりのこのへんの技術でなんとかできそうな気もしないでもない。

http://www.gatsby.ucl.ac.uk/~heller/bsets.pdf

rot3dで遊んでみた

以前Sciptographer http://scriptographer.org/を使ってみた時は安定していなかったのですぐに消してしまったが、バージョンがあがってCS3でも安定して使えるようになっていたのでちょっと触ってみた時の話。

とりあえずスクリプトを書く前に公開されているtoolを見ていたら、rot3dというプラグインが便利そうだったので試してみました。

rot3dはイラストレーターで作ったパスの名前に座標の情報を書き込むと、ドラッグで3dモデルのように回転できるようになるプラグインです。exampleが非常にわかりやすく作られているので、それを読んで実際にドラッグしたり中身を見てみるとだいたいの感じはつかめると思います。

http://scriptographer.org/scripts/interactive+tools/rot3d/

イラレを使っていてたまに使いたくなる立体的な矢印を作ってみました。

試行錯誤がし易くて、ドラッグで向きをいろいろと変更できるところが使い易かったです。多分普通に作るとすごくめんどくさい。。

元のaiファイルはこちら

http://dl.getdropbox.com/u/59046/arrow.ai

日記

One Off's, Remixes and B Sides(Domu) (TRUCD196)

One Off's, Remixes and B Sides(Domu) (TRUCD196)

Spiral Recordsで試聴して、よかったので買ってみた。聴きやすくていいかんじ。
Spiral Recordsは並べてあるCD全部試聴できるし、品揃えが独特で面白い。たまに行くと普段あんまり出くわさないようなCDを買えるから好き。

http://www.spiral.co.jp/f_guide/records/index.html

今日は外にいる間に5回くらいコーヒーを飲んだけれど、一番美味しかったのは大坊珈琲店の珈琲だった。

【閉店】大坊珈琲店 (ダイボウコーヒーテン) - 表参道/コーヒー専門店 [食べログ]

途中で立ち寄った洋書店で"Grid Systems"と"Typographic Systems of Design"を見つけて、買おうかと思ったけどAmazonの方が安かったのでやめた。洋書店ってAmazonに食い潰されたリしないんだろうか。

Grid Systems: Principles of Organizing Type (Design Briefs)

Grid Systems: Principles of Organizing Type (Design Briefs)

Typographic Systems of Design

Typographic Systems of Design

datamapper + Log4r

普通にこれでいい (dm-core 0.10.0)

dm_logger = Log4r::Logger.new("dm_log")
out = Log4r::FileOutputter.new("file", :filename => "./log/foovar.log")
dm_logger.outputters = out

DataMapper.logger = dm_logger
DataObjects::Mysql.logger = DataMapper.logger

(以下意味ない感じ)

こうして

require 'forwardable'

module DataMapper
  class << self #:nodoc:
    attr_accessor :logger
  end 

  class Log4rCompatLogger
    extend Forwardable
    attr_accessor :auto_flush
    attr_accessor :level
    def_delegators(:@inner_logger, :fatal, :error, :warn, :info, :debug)

    def initialize(logger)
      @inner_logger = logger
      self.level = @inner_logger.level
      self.auto_flush = true
      DataMapper.logger = self
    end 
  end 

end

こうした

dm_logger = Log4r::Logger.new("dm_log")
out = Log4r::FileOutputter.new("file", :filename => "./log/foovar.log")
dm_logger.outputters = out

DataMapper::Log4rCompatLogger.new(dm_logger)