IntelliJ IDEAで括り放題 #intellijidea

職場の同僚に教えてもらったのだが、Surround selection on typing quote or brace を有効にするといいかもしれない。

括弧やクォートで括り放題になる。

括っている文字の置き換えもIDEAさんがいい感じにやってくれる。

どういうことかというと。。

これを。。

f:id:su-kun1899:20170326211259p:plain

こうして。。

f:id:su-kun1899:20170326211331p:plain

違う括り文字を選ぶと。。

f:id:su-kun1899:20170326211406p:plain

こうなるのだ!

設定方法

Editor > General > Smart Keys で、Surround selection on typing quote or brace にチェックを入れるだけ!

f:id:su-kun1899:20170326211528p:plain

モブプログラミングやってみたら最高だった #MobProgramming

今日チームでモブプログラミングを初めてやってみたのだけれど、最高だったのでテンションのままにブログを書く。

きっかけ

ふりかえりでたまたまJoy.Incの話になり、あの会社は全部ペアでやってるらしく、ペアプロしたくなるという話をした。

そうしたら、なんとチームメンバー全員(自分含め3人)がちょうど本を持っており読んでいる、読もうとしているところだった。

ジョイ・インク 役職も部署もない全員主役のマネジメント

メンバー全員ペアプロの経験は殆どないに等しく、全然わからない笑
でも、とにかく試してみようよという話になった。

ただしチームメンバーは3人のためペアが組めない。
そこで、Scrum Gathering で見たモブプログラミングでやってみよう、ということになった。

なお、モブプログラミングについても当然経験はなく、ペアより多い人数の場合はモブと呼ぶ、くらいの理解しか無かった。

2017.scrumgatheringtokyo.org

どうやったか

  • 小さい会議室を半日確保
    • 大きいディスプレイをひとつつなぐ
    • ドライバーを中央に、ナビゲーター2人が横に付く
  • 最初に実装するフィーチャーに対し、全員でタスクだしをする
    • ソロでやるとしたら何からやるか、みたいな感じで付箋に書き出す
    • 順番に並べて、ドライバーの前に配置する
  • ドライバーの順番をじゃんけんで決めて、タスクに取り掛かっていく
    • ドライバーは「まず〜します」みたいな感じで発言
    • 気になったところあればワイワイガヤガヤ
  • 端末は個別のものを使用、ドライバー交代時にディスプレイを繋ぎなおす感じ
  • 20分~30分を目処に、キリの良いところで交代
    • 交代のタイミングで、git push するので、続きからはじめる
    • 休憩は交代のタイミングで適宜
  • プルリクやコミットは相談しつつ
    • レビューが同時進行なので、作業内容振り返る感じ
    • 皆で最終確認してからmerge
    • CIが通ったらハイタッチ(するくらいの気持ちで)

モブプログラミングの風景

f:id:su-kun1899:20170323221037p:plain

どうだったか

楽しい。

緊張感もあったのだけれど、やってみるととても楽しかった。

ただ、チームメンバー間での信頼関係や、敬意の有無がとても大切になるだろうとは感じた。

集中力が高まる。

協力体制になるので、他のことに気を取られる余裕がそもそもない。

完成度が高まる

これはある程度できあがった成果物ではなく、思考過程も踏まえた上で議論できるので、抜け漏れがなかったり、ブラッシュアップがしやすいからかもしれない。

スピードが上がる(かも)

時間的にはどうだったかという話だと、ソロでもできたかもしれないけど、せいぜいプルリクエストを出すところくらいまでだっただろうという肌感。

レビューしてもらって修正、マージまで同じ量終わらせるのは無理だったと思う。

3人というのがいい。

これはたまたまだったけど、3人というのはとてもいいと思う。

2人だと意見の相違があったときに、対立構造っぽくなってしまう。

また3人より多いと、熟練度がないとどうしても濃度が薄まりやすくなるのではないか。

レビューコストが下がり、質は上がる

例えばデータパターンが必要なテストコードなどは、同時進行だとレビューコストがすごく下がる。

どうしてもコードから意図を汲み取るのが難しいものをリアルタイムで一緒にやると理解が早く、アドバイスの質も上がった。

勉強になる。

他の人の作業を見られるのは、興味深いし刺激にもなる。

単純な成果物の質だけではなく、過程を見られるのは大きい。

どこから書くのか?みたいなこともそうだし、なぜそうするのか?というのも聞ける。

端末が別なのも、個々人で使ってるツールとか知られて、かえって良かったと思う。

難易度高いものに効果が高そう。

完成度の話とも連動するけど、試行錯誤の段階から意見や考えがアウトプットされ、協力体制で作れるのは大きい。

課題みたいなもの

遊びが少ない

集中度が高まって生産性は間違いなく上がると思うんだけど、疲労度は大きい。

また、ちょっと気になってることへの寄り道とかもしづらい。
(時にその寄り道が別のどこかで大きな効果を生むことがあるはず)

毎日1日中ずっと、というのは結構辛いだろうな、と思う。

少なくとも今は。

場所の確保

オフィスによるんだろうけど、自分のところでは数時間まとまった単位で場所を確保するのは難しい。

モブプロを実施する頻度を上げたいと思った時に、壁になるかも。

まとめ

モブプログラミング最高だった。みんなやればいいと思うし、積極的に勧めて行きたい。

メンバーも好感触で、とりあえず週一は固定でやろう、やりたいタスクがあったら適宜でやろうという話になってる。

これが正しいやり方かは分からないし、一回やってみただけで何言ってるんだと思われるんだろうけど、それくらい大きな感動があった。

モブプログラミングいいですよモブプロ。

はやくまたやりたい。

application.ymlの値をJavaアプリケーション側で受け取る #SpringBoot

org.springframework.beans.factory.annotation.Value を使うとよい。

ただし、まとまった単位で管理したいときは @ConfigurationProperties を使うのがよさげ。

@Configuration
public class AppConfig {
    @Value("${spring.datasource.schema}")
    private String schemaName;

    public String getSchemaName() {
        return schemaName;
    }
}

参考

blog.y-yuki.net

SpringBootでMybatisの設定を動的に書き換えられないか挑戦してみた(失敗した)

MyBatisのConfigをJava側で動的に書き換えられないか調べてみた。
結果できなかったんだけど、備忘録として。

stackoverflow.com

org.apache.ibatis.session.Configuration に値を突っ込むことでどうにかなりそう? configuration.getVariables().put("global_param", "123");

できない。。

SqlSessionFactoryとかSqlSessionTemplateはAutowiredできるので、SQLの発行直前にConfigを引きずり出して値を突っ込んでみるも、うまくいかず。。

Befor the mapper xml files are parsed?

mybatis-user.963551.n3.nabble.com

Jorge, make sure that config.getVariables().put() is called befor the mapper xml files are parsed.

I do not know if this behaviour is intentional but varable replacement work for mybatis-config.xml and also form mappers but just during loading time.

どうもmapper.xmlをparseする前とか、Config(ファイル)を読む前に突っ込めばうまくいく?
Spring-mybatisだとどこでやってるんだろう。。

MybatisAutoConfiguration?

github.com

たぶんSqlSessionFactoryの生成あたりでやってそうな雰囲気はある。
けど既存に影響を与えない形でうまくいく方法が浮かばない。。ので現時点では諦めることにした。

JavaScriptのargumentsオブジェクトは配列じゃないのか。。 #javascript #js

JavaScriptでargumentsオブジェクトは配列っぽいけど配列ではないらしい。 なので配列のメソッド呼ぼうとしてもエラーになる。

ES2015以前

Array.prototype.slice.call で配列に変換してあげるのがよいっぽい。

var args = Array.prototype.slice.call(arguments);

でもsliceするわけじゃないのに、sliceでやるのって違和感。。

ES2015以降

Array.from を使うのがよいみたい。
これは分かりやすくて良い。

let args = Array.from(arguments);

参考

Javaの文字列結合はどうしたものか #java

以前はStringBuilderかStringBufferがお約束だったけども、String#joinがJava8から追加されてどうしたらいいものか。

StringJoinerなんてのもある。
というかString#joinは内部的にはStringJoinerを使っているらしい。

色々記事を漁ってみたものの、パフォーマンスには大きな差が無さそう。

Stringが文字列(操作)に関して一番表層にいるクラスと考えると、String#joinを使うのが無難そうかなぁ。
String#joinで事足りるのであればString#joinを使うのがよい気がする。

参考