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

Justin Bieber - Purpose World Tour (2016年8月13日@幕張メッセ)

[music]

Justin Bieber(ジャスティン・ビーバー)のライブに嫁さんと2人で参加してきました。今回の日本公演は、幕張メッセの国際展示場1~3での2日間で、初日の8月13日に参戦です。

昨年末のアメリカン・ミュージック・アワードでのパフォーマンスを見てから、ライブで見たくてしょうがなかったので、日本に来てくれてとてもうれしいです。

VIPの300番台だったので、とても近くで見れました。

Cold Waterと、Love Yourselfの引き語りで鳥肌が立ち、全体通してJustinのパフォーマンス(特にダンス)はすっごくかっこいいです。

アンコールのSorryは、雨を降らせた中でのパフォーマンスでびっくりしました。(アメリカン・ミュージック・アワードでも雨を降らせてたので、定番だったのかもしれません)

ショーを見ている感じで、感動しっぱなしで、あっという間にコンサートの1時間半が終わってしまいました。

次は3、4年後くらいですかね… 今から待ち遠しいです。

VIP特典

VIPの特典は、トートバックとキャップ、ネックストラップでした。猛暑の中、開場まで待つ必要があったので、キャップには救われました。

あと、グッズ販売でもVIP用のファストレーンがあって、長蛇の列に並ばずにグッズを買えたのは、とても大きな特典でした。

スタンディングについて

13日のVIPスタンディングが酷かったといった話がTwitterなどで流れていました。

確かにスタンディング(ALにいました)はかなり押し合いに近い状態になっていて、ある程度覚悟(オープニングの2、3分前に、歓声とともに、後ろから割り込んでくる流れがあって、そこからちょっとヤバイ雰囲気だった)はしていたものの、踏ん張るのは結構きつかったです。足が筋肉痛になりました(苦笑)。

自分の周りでは、Twitterであったような怪我人や喧嘩する人などは見受けられませんでした(すくなくとも気が付かなかった)。もしかしたら、もっときついブロックがあったのかもしれません。

手を伸ばしてスマートフォンで動画撮影している人も確かに多くて、ポジションによっては全然見えなくなる時があったので、そこはちょっと残念でしたが、許可されていることだし、スタンディングで隙間がないので、しょうがないのかなと(ただ、自分の頭に後ろの人の手が当たった状態がずっと続いているのはちょっと…)。自分は後ろの人が気になって、手を伸ばして写真を撮ることもないのですが、このあたりのマナーってどうあるべきなんですかね。

とはいえ、自分自身がVIPスタンディングで後悔したかというと、そういったことは全くなく、近くで見れたのはとても良かったし、スタンディングでぎゅうぎゅうになるのもライブの一環として楽しめました。ただ、同じ会場で怪我人が出たり、喧嘩がおきていて、ライブを楽しめない人が出ていたならば残念です。

セットリスト

  1. Mark My Words
  2. Where Are Ü Now
  3. Get Used To It
  4. I'll Show You
  5. The Feeling
  6. Boyfriend
  7. Cold Water
  8. Love Yourself
  9. Been You
  10. Company
  11. No Sense
  12. Hold Tight
  13. No Pressure
  14. As Long as You Love Me
  15. Children
  16. Life Is Worth Living
  17. What Do You Mean?
  18. Baby
  19. Sorry

観客の反応がひどくて、曲数大幅に減らされた!といった噂も流れていましたが、海外アーティストで1時間半のライブは、結構普通だと思います(逆に2時間超えると得した気分)。

気になったので他の会場でのセットリスト見てみましたが、だいたい20曲前後で、構成はほとんど変わりませんでした。

関連リンク

Redmine 3.3 で"+"ボタンを有効にしながら、「新しいチケット」タブも表示する (View customize plugin)

[programming] Redmine

Redmine3.3で追加された"+"ボタンはとても良いと思うのですが、「新しいチケット」タブが消えるといったところは、それなりにインパクトが大きいようです。

だったら両方有効にすれば、、、ということで、Redmineの設定としては、"+"ボタンを有効にしておきながら、View customize pluginにて「新しいチケット」タブを表示します。

設定内容

Path pattern

全画面を対象とします。

.*

Code

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

$(function() {
  var newIssueSub = $('.menu-children a.new-issue-sub');

  if (newIssueSub.size() == 1) {
    // "+"ボタンで「新しいチケット」が表示され時のみ、タブにも追加
    $('#main-menu > ul > li > a.issues').parent()
      .after($('<li>').append(newIssueSub.clone().attr('class', 'new-issue')));

    if (location.pathname == newIssueSub.attr('href')) {
      // 新しいチケットに選択を切り替え
      $('#main-menu > ul > li > a.issues').removeClass('selected');
      $('#main-menu > ul > li > a.new-issue').addClass('selected');
    }
  }
});

対処後の画面イメージ

両方表示されるようになりました。これでどっちを有効にするかで揉めることは無くなりますね!(インタフェースとしては、統一性が無くてダメな感じになりますが…)

f:id:onozaty:20160815000449p:plain

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限定で書いてしまっていたやつがあったような気もするので、そっちも直しておかないと、、)