読者です 読者をやめる 読者になる 読者になる

Redmine 3.3 で導入された"+"ボタン

[programming] Redmine

Redmine 3.3 で"+"ボタンが追加されて、さまざまなオブジェクトの作成が、一か所にまとまりました。 f:id:onozaty:20160717010201p:plain

個人的には、メニューに統一感が出るのと、ニュースやバージョン作成へのルートが短縮されるので、とても良い変更だと思っています。

ただ、この変更に合わせて、今まで頻繁に使われていたであろう「新しいチケット」タブが消えることになり、それに対してのインパクトがとても大きかったようで、設定で元の形に戻せるような形になりました。

慣れの部分も大きいとは思いますが、確かにタブとして見えていた方がわかりやすく、ユーザにとってよりアクセスしやすいと思います。ただ、もしも素早く新しいチケットを作りたいということならば、accesskey使うと良いのではと思っています。

accesskey

サイト上でのショートカットを割り当てる方法として、リンクやテキストボックスに対してaccesskey属性としてキーを割り当てることができます。 accesskeyの実行方法はブラウザによって異なります。WindowsのFirefoxだとAlt+Shift、ChromeだとAltといった感じです。Macだと、たいていCtrl+Altだったかと。(すいません調べてないです)

Redmineでは、accesskeyとして7が新しいチケット作成に割り当てられています。 なので、もしもWindowsのFirefoxで新しいチケット作成画面に飛びたい場合には、Alt+Shift+7 で飛ぶことができます。

画面見ただけだと気が付かない機能ですが、とても便利だと思っています。

Redmine: ステータスに応じて、カスタムフィールドの表示を切り替える (View customize plugin)

[programming] Redmine

ステータスが却下になったら、カスタムフィールドを表示したいといったIssueがあがっていたので、スクリプトを書いてみました。

設定内容

Path pattern

チケットの作成、編集ができる可能性のある画面を対象にします。

/issues

Code

Type:JavaScriptとして下記を設定します。

$(function() {

  // 表示の切り替え
  var changeVisibility = function() {

    var visible = $('#issue_status_id').val() == '6';

    if (visible) {
      $('#issue_custom_field_values_1').parent().show();
      $('.cf_1').show();
    } else {
      $('#issue_custom_field_values_1').parent().hide();
      $('.cf_1').hide();
    }
  };

  // 現時点のもので表示切替
  changeVisibility();

  // ステータスが変わったタイミングで切り替え
  $('#all_attributes').on('change', '#issue_status_id', function(e) {
    changeVisibility();
  });

  // ステータス変更時などにDOMが差し替えられるので
  // フォームの内容が書き変わるたびに表示切替
  var _replaceIssueFormWith = replaceIssueFormWith;
  replaceIssueFormWith = function(html){

    _replaceIssueFormWith(html);

    changeVisibility();
  };
})

AnsibleでテンプレートエンジンのJinja2を使う

[programming] Ansible

AnsibleではテンプレートエンジンのJinja2が使えます。

なので、for文やjoin、mapなど使えるので、結構柔軟な記述ができたります。

単に一部のプロパティを取り出して結合ならば、map + join で行けます。

  vars:
    items:
      - name: name1
        value: value1
      - name: name2
        value: value2
  tasks:
    - name: map join sample
      debug:
        msg: |
          {{ items | map(attribute='value') | join(',') }}

リストのプロパティの組み合わせで文字列を作り出し、改行で結合しようとした場合、mapとjoinの組み合わせでやるのは難しそうだったのでforで書いてみました。

  tasks:
    - name: for sample
      debug:
        msg: |
          {% for item in items %}
          {{ item.name }} {{item.value}}
          {% endfor %}

いろいろ出来そうですね。

Redmine 3.3.0 リリース

[programming] Redmine

Redmine 3.3.0 がリリースされましたので、いつも通りAltasにboxをあげておきました。

下記ですぐにRedmine 3.3.0が試せます。

vagrant init onozaty/redmine-3.3
vagrant up

いろいろ良さそうな機能が入ってますし、バグもたくさん直っているので、すぐにでも3.3.0にあげたくなりますね!

ちなみに、チケットコピー時に親チケットの番号はデフォルトで引き継がれるようになったので、下記のプラグインは役目を終えることとなりました。

Redmine: チケット作成時に処理を行う (View customize plugin)

[programming] Redmine

「チケット作成時に、カスタムフィールドの値を使って他の項目の値を変えたい」といった相談をいただいたので、View customizeで書いてみました。

例として、チケット作成時に、キー・バリュー形式のカスタムフィールドから選択されている内容を取り出して、それをタイトルの先頭に挿入してみます。

設定内容

Path pattern

チケットを作成する画面ということで、新規作成とコピーを対象にします。

/issues/(new|[0-9]+/copy)

Code

Type:JavaScriptとして下記を設定します。

$(function() {
  $('#issue-form').submit(function() {
    // 題名の先頭にカスタムフィールドの値を埋め込む
    var subject = $('#issue_custom_field_values_1 option:selected').text() + ':' + $('#issue_subject').val();
    $('#issue_subject').val(subject);
  });
});

clickイベントじゃなくてsubmitにしている理由としては、click以外でも登録することができる(たとえば題名欄でリターンなど)ためです。

(過去に書いたやつで、click限定で書いてしまっていたやつがあったような気もするので、そっちも直しておかないと、、)

デスクトップPC(Lenovo H520s)のHDDをSSDに変更

自宅のデスクトップPCでストレスを感じることが多くなってきたので、HDDからSSDに移行することにしました。

対象のPCは、Lenovo の H520s という4年くらい前に購入したPCです。

SSDは、CrucialのTLCで480GBのものを購入しました。

このSSDには、Acronis True Image HDのライセンスがついているので、移行はこのソフトを使います。アクティベート方法と、シリアルナンバーが書かれた紙がはいっているので、それにしたがってインストールします。(ソフト自体は、日本語にも対応しているので、英語わからなくても迷うことはないかと)

「ディスクのクローン作製」というメニューがあるので、そのままウィザードに従って進めるだけです。思った以上に簡単に終わりました。

元のHDDを外して、SSDに付け替えます。SSDが2.5インチなので、付け替えには下記を使用しました。

ベンチマークの結果です。(左がHDD、右がSSD)

f:id:onozaty:20160530184016p:plain

メーカ値だと、シーケンシャルな読み込みで540MB/秒となっていますが、今回SATA2.0での接続となった(SATA3.0が見当たらなかった)ため、そこで頭打ちとなっているのかもしれません。

かなり快適になった(vagrant upで1分待たされる&ひきずられて動作が重たくなるといったことが無くなった)ので、大満足です。