GS Collectionsハンズオンに行ってきた

by orekyuu 0 Comments

関ジャバのGSCollectionsハンズオンに行ってきました。

GS Collectionsとは

ゴールドマンサックスが開発したオープンソースのコレクションフレームワーク。
Github: https://github.com/goldmansachs/gs-collections
Mavenリポジトリ: http://mvnrepository.com/artifact/com.goldmansachs/gs-collections/6.2.0

ハンズオンの内容

GSCollectionsKataをクローンして、落ちているユニットテストを通していくって感じの内容でした。
興味があるならこれから始めるのが良いかもしれません。

GSCollectionsを使った感想

StreamAPIと比べて多くのメソッドが提供されていて使いやすい!けど、APIが大きいのでチーム開発で使うには他の人を巻き込むのに苦労しそうだとは思った。
懇親会のLTでやっていたFunctions.throwing()で例外を投げるラムダを書けるのが良い感じ。

customer.getName()がExceptionをthrowsしている時、ラムダで書くとこんなかんじになって腹立つけど。

customers.collect(customer -> {
            //ピャアアアアアアアアアアア
            try {
                return customer.getName();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
            
        });

Functions.throwingを使えば楽に書ける

customers.collect(Functions.throwing(Customer::getName));

こんなかんじでかなり嬉しい便利メソッドがあったりする。

不満点としてはnullかもしれない戻り値でOptionalが使われていないって所。
これが結構もやもやする。detectという条件に一致するものを検索して最初に見つかった要素を返す操作があるんだけど、こういうのがOptionalで返ってくると嬉しいなーと思った。

そういった要望とか不満点はStackOverflowに投げてくれとのことでした。日本語版でも質問の答えは返ってこないかもしれないけど、書いていれば対応する流れができるかもらしいです。

おしまい

BitbucketのIssueを見れるIntelliJのプラグイン作った

by orekyuu 0 Comments

無題

学校のプロジェクト演習でタスクの管理にBitbucketのIssue使ってるんだけど、ブラウザ開いて確認するのも面倒だなと思ってIntelliJで見れるようにしてみた。

BitbucketIssuesのToolWindowを開くと最初に認証画面出てくるのでそれをやった後使えるようになります。
機能としてはステータスのフィルタと担当者のフィルタがかけれるのと、Rowをダブルクリックでブラウザで見ることができます。

良かったら使ってみてください。
ダウンロード

SpringBootでCSRFを無効にせずAjaxを使いたい

学校での作品制作してる時に詰まったAjaxをCSRFトークン無効化せずにやる方法をメモ代わりに書いておく。

headでcsrfトークンを埋め込む

<meta name="_csrf" th:content="${_csrf.token}" />
<meta name="_csrf_header" th:content="${_csrf.headerName}" />

リクエストヘッダーに、metaタグから取得した値を設定する

<script type="text/javascript">
    var token = $("meta[name='_csrf']").attr("content");
    var header = $("meta[name='_csrf_header']").attr("content");
    $(document).ajaxSend(function(e, xhr, options) {
        xhr.setRequestHeader(header, token);
    });

    $(function() {
        $('#button').on('click', function() {
            $.ajax({
                url : 'url',
                type : 'POST',
                data: {
                    project: "Test"
                }
            }).done(function(data) {
                $("#message").text("成功");
            }).fail(function(data) {
                $("#message").text("エラー: " + data.statusText);
            });
        });
    });
</script>

参考: http://terasolunaorg.github.io/guideline/5.0.0.RELEASE/ja/Security/CSRF.html#ajaxcsrf