2020-01-01から1年間の記事一覧
JavaのDBマイグレーションライブラリとしてFlywayを愛用していますが、マイグレーションが全て完了した後に、特定のSQLを流せないかなと調べてみたところ、Callbackという仕組みがあることがわかりました。 Callbacks - Callbacks - Flyway by Redgate • Dat…
この記事はRedmine Advent Calendar 2020 17日目の記事です。 Redmine Advent Calendar 2020 - Adventar チケットの担当者が変わったときに、SlackやRocket.Chatなどに通知するプラグインを作りました。 チケットの担当者が変わった時に、下記のようなメッセ…
View customize plugin の v2.8.0 をリリースしました。 onozaty/redmine-view-customize - GitHub Insertion position として Bottom of all pages が選べるようになりました。 HTML bodyの末尾に埋め込まれるような形になります。これを利用すると、Redmin…
ブラウザでのテストだけではなく、ちょっとしたブラウザ操作の自動化にもSeleniumを利用するのですが、久しぶりに起動すると、各ブラウザのDriverが古くでエラーになる、、みたいなことが多々発生していました。 今更ながら、他の方々はどうやってこの問題を…
SeleniumでChromeDriverで実行した際に、ヘッドレスモードだとエラー、ヘッドレスモードにしないと成功するといったテストがありました。 エラー内容は下記のような感じで、要素が操作できないといったものでした。 org.openqa.selenium.ElementNotInteracta…
XMLをCSVに変換するツールxml2csvを作りました。 JUnitのXMLをCSVに変換する処理書いていて、これは汎用的にできるなーってことで、Goの勉強も兼ねて書きました。 マッピング情報を元に、XMLからCSVに変換します。 $ xml2csv -i input.xml -m mapping.json -…
特定ユーザに対して一部管理者メニューを非表示にしたいといった要望です。(2つあって、2つ目の方) 一律非表示ならば、CSSで出来るのですが、特定ユーザに対してのみ適用したいのでJavaScriptで書く必要があります。 以下のサンプルでは、ユーザID:10のユー…
初期ユーザ(user_id=1)を、削除やロックできないようにしたいという要望です。(2つあって1つ目の方) ボタンを非表示にするだけなので、CSSで対応します。 設定内容 Insertion position: Head of all pages a[data-method="put"][href="/users/1?user%5Bstatu…
Redmine Japan 2020というイベントでView customize pluginについて発表しました。 資料はこちら。 Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020 from onozaty まつもとさんの基調講演、前田さんの招待講演…
JUnitの結果を一覧で見たいなーってことで、CSVファイルに変換するツールを作りました。遅いテストを探すのに、EXCELでソートしたかったからです。 JUnitの結果XMLファイルが配置されているディレクトリ(Gradleだとbuild/test-results/testとか)と、出力ファ…
redmine.org には、プラグインの情報を登録できる仕組みがあります。 登録したものは、下記で公開されます。 Plugins - Redmine プラグインには、Identiferというプラグインを一意に表す識別子があり、上記サイトでもIdentiferを入力し、それがURLになるよう…
上記の問い合わせに対応したサンプルコードを書いてみました。 チェックボックスをチェックしたら、テキストボックスを無効化します。 設定内容 Insertion position: Bottom of issue form $(function() { const checkbox = $('#issue_custom_field_values_1…
JavaのデータベースマイグレーションのライブラリであるFlywayですが、SQLファイルだけでなく、Javaのコードによるマイグレーションにも対応しています。 https://flywaydb.org/documentation/migrations#java-based-migrations やり方は簡単で、SQLファイル…
View customize plugin の v2.7.0 をリリースしました。 onozaty/redmine-view-customize - GitHub 2つの機能追加、改修を行っています。 プロジェクト識別子で対象ページを指定可能に プロジェクト識別子(正規表現)で対象ページを絞ることができるようにな…
リビングでのオンラインミーティングの悩み 在宅勤務で毎日オンラインミーティングがあるのですが、 PCデスクはリビングにおいてあるのでリビングで作業している (元々家にいるとき暇があればPC触っているので、家族がいるところに置きたくてリビングにして…
在宅勤務中の出退勤がもう少し見える化できないかなぁと思って、attendance-recorder という出退勤を記録、参照できるアプリケーションを作りました。 github.com Spring Bootで作ってます。 APIを叩いて出勤、退勤を記録して、それをWeb上で見れるような形…
第18回 redmine.tokyo にて、『「伝わるチケット」の書き方』というタイトルでLTさせていただきました。 第18回勉強会 - redmine.tokyo 資料はこちら。 「伝わるチケット」の書き方 from onozaty www.slideshare.net 一番重要なのは「チームの他のメンバのこ…
CSVを読み込んでRedmineのチケットを新規作成、更新するツール、redmine-issue-loaderのバージョン2.3.0をリリースしました。 変更点は下記の2つです。 HTTPタイムアウトの設定を変更可能に デフォルト10秒だったのですが、親子関係が激しい状態だとタイムア…
下記自作ライブラリをJCenterとMaven Centralに公開した際の手順を残しておきます。 (後から記憶をたどって書いているので、抜けがあったらすいません...) 公開の流れとしては、下記のようになります。 Bintrayにアップロード JCenterに公開 JCenterからMave…
ShortcutKey2URLの新バージョンをリリースしました。 2つの機能追加を行っています。どちらも利用者の方から要望があったものになります。 候補のインタラクティブな絞り込み ショートカットキーの候補をインタラクティブに絞り込んで表示できるようにしまし…
上記の問い合わせに対応したサンプルコードを書いてみました。(これが求めているものなのかはちょっと怪しいかも...) 期日まで残り3日になったらチケット画面に警告を表示します。 設定内容 Path pattern: .* Insertion position: Bottom of issue detail $(…
PostgreSQLのCOPYコマンドをJavaで簡単に利用するためのライブラリとして、PostgreSQL COPY Helper を作りました。 登録したいデータの構造を表すクラスを定義しておいて、、 @Table("items") public class Item { @Column("id") private final int id; @Col…
View customize plugin の v2.6.0 をリリースしました。 onozaty/redmine-view-customize - GitHub 中国語のマージリクエストをいただいたので、そちらをマージしてのリリースとなります。
java.sql.Timeには、下記のようなLocalTimeとの間で変換を行うメソッドがあります。 public LocalTime toLocalTime() Time java.sql.Time.valueOf(LocalTime time) ただ、これらメソッドは秒までしか対象にしておらず、ミリ秒が破棄されています。 /** * Obt…
github.com 上記の問い合わせに対応したサンプルコードを書いてみました。 親のカスタムフィールド(キーバリュー形式のリスト)が選択されたら、子のカスタムフィールドを有効化するコードです。 Redmineのデフォルトのスタイルだと、input:disabledのbackgro…
先日Twitter上で外部キーが話題にあがっていました。自分も大昔は外部キーを重要視していませんでしたが、1x年以上たった今では、様々な制約等を使って、RDBMS上でデータの整合性を保つべきと考えています。 なぜ制約を使うのか データの不整合を、プログラ…
上記の問い合わせの中で、カスタムフィールドを3カラム表示したいといったのがあったので、サンプルコードを書いてみました。 設定内容 Path pattern: .* Insertion position: Bottom of issue form $(function() { const field1 = $('#issue_custom_field_v…