2008年4月13日日曜日

現在編集しているファイル名をクリップボードに

人に説明する際に、ファイル名や抜粋がクリップボードにコピーしたくなることがある。
以下を vimrc にでも追記すれば :FN や :FL で簡単にコピーできる。
# visual 選択中の :FL は抜粋になる


" 'ファイル名' をヤンク/クリップボードのバッファにコピー
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
command! FN let @"=expand("%:p") | if has("gui_running") | let @*=@" | endif

" 'ファイル名 :L行番号' をヤンク/クリップボードのバッファにコピー
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! s:get_filename_with_line_number(s, e)
let result = expand("%:p")." :L".line(".")
if a:s == a:e
let @" = result
else
let result .= "\n===\n"
let result .= join(getline(a:s, a:e), "\n")
let @" = result."\n==="
endif

if has("gui_running")
let @* = @"
endif
endfunction
command! -range FL call s:get_filename_with_line_number(<line1>, <line2>)

2008年4月12日土曜日

SICP てきとー要約:1.1 The Elements of Programming

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html

強力なプログラム言語は、単なるコンピュータへの命令手段ではなく自分のアイデアをまとめるフレームワークでもある。そのため、プログラミングでは言語に用意されている単純なアイデアを複雑なアイデアに組み上げる仕組みについて意識すべきだ。強力といわれるあらゆる言語には 3 つの機構がある。
  • 最も単純な式
  • それを組み合わせる手段
  • また、それを抽象化する手段
プログラミングでは手続きとデータという 2 つの要素を扱い、強力なプログラム言語ではそれらを抽象化したり組み合わせたりできる。

この章では単純な数値データのルールについて説明する。

2008年4月7日月曜日

Redmineの工数詳細を100件に制限

工数登録が多くなると表示がかなり遅くなるので、
100 件で制限しておく。
全部表示したい場合は csv を指定すれば OK。

=====================================
app/controllers/timelog_controller.rb
=====================================

def details
sort_init 'spent_on', 'desc'
sort_update

####### 変更開始
#@entries = (@issue ? @issue : @project).time_entries.find(:all, :include => [:activity, :user, {:issue => [:tracker, :assigned_to, :priority]}], :order => sort_clause)
find_param = [:all, {:include => [:activity, :user, {:issue => [:tracker, :assigned_to, :priority]}], :order => sort_clause}]
if 'csv' != params[:export]
find_param[1][:limit] = 100
end
@entries = (@issue ? @issue : @project).time_entries.find(*find_param)
####### ここまで

@total_hours = @entries.inject(0) { |sum,entry| sum + entry.hours }
@owner_id = User.current.id

send_csv and return if 'csv' == params[:export]
render :action => 'details', :layout => false if request.xhr?
end

Redmineに工数確認機能を追加2

工数入力は同じ課題がしばらく続くことが多いので、
入力補助として履歴に最近入力した課題への工数入力のリンクを増やしてみた。

----------------------------------------
app/views/my/blocks/_hourhistories.rhtml
----------------------------------------
<h3>入力工数履歴</h3>

<ul>
<% sql =
"select user_id, spent_on, sum(hours) as day_hour" +
" from time_entries" +
" where user_id = #{user.id}" +
" group by spent_on" +
" order by spent_on desc" +
" limit 5"-%>
<% for entry in TimeEntry.find_by_sql(sql) %>
<li><%= "#{entry.spent_on}: #{entry.day_hour} h" %>
<% end %>
</ul>

<%= link_to "詳細", :controller => "man_hour" %>
<p>
<% sql =
"select distinct issue_id " +
" from time_entries" +
" where user_id = #{user.id}" +
" order by spent_on desc" +
" limit 10"-%>
<h3>最近工数入力した課題</h3>
<ul>
<% i = 0 %>
<% for entry in TimeEntry.find_by_sql(sql) %>
<% if entry.issue %>
<li>[<%= link_to '工数入力', :controller => 'timelog', :action => 'edit', :issue_id => entry.issue_id %>]
<%= link_to_issue entry.issue %> <%= entry.issue.subject %>
<% end %>
<% end %>
</ul>