         return callback err, null if err or data is null
         timeEntries = data.time_entries
         callback null, timeEntries
+# }}}
 
   getActivity: () -> # {{{
     @get PATH_ACTIVITY, null, {type: "atom"}, (error, feed, response) =>


  robot.respond /redmine activity/i, (msg) ->
    getActivity()

  # *(sec) *(min) *(hour) *(day) *(month) *(day of the week)
  new cronJob('*/10 * * * * *', () ->
    checkUpdate()
  ).start()

  robot.hear /.*(#(\d+)).*/, (msg) ->
    id = msg.match[1].replace /#/, ""
    return if isNaN id
    redmine.Issue(id).show null, (err, issue) ->

      for i, v of issue.children
        spent_hours += v.spent_hours || 0
      msg.send "#{url} : #{issue.subject}(予: #{estimated_hours}h / 消: #{spent_hours}h) - #{issue.project.name}"
  # }}}

  robot.respond /redmine[\s]+([\S]*)[\s]*実績(詳細)?/, (msg) -> # {{{
    command = msg.match[1]
    return if msg.message.match /(check|チェック)/
    d = getPrevKadobi(robot, Date.yesterday())
    params =
      from: d.toYMD()
      to: d.toYMD()
    isDetail = true if msg.match[2]

    redmine.TimeEntry().get params, (err, timeEntries) ->
      return msg.send 'Error!: ' + err if err or timeEntries is null
      return msg.send "#{params.from} 〜 #{params.to} に誰も実績入れてません!" unless timeEntries.length
      messages = {}
      for k, v of timeEntries
        id = v.user.id
