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を使うのがよい気がする。

参考

SpringBootでH2の管理コンソールを使う #springboot

spring:h2:console:enabled をtrueにするだけ。

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb;MODE=MYSQL
    username: sa
    password:
  h2:
    console:
      enabled: true

SpringBoot起動後、下記にアクセスすると利用できる。 http://localhost:8080/h2-console

参考

web-dev.hatenablog.com

SpockでJavaの無名クラスを使ったらCircleCIがコケた #circleci #java #spock

CircleCIがテストの途中にタイムアウトでこけた。

command mvn test took more than 10 minutes since last output

ログを見ても途中で止まっており、結果としてもタイムアウトなので検討つかない。
もちろんローカル環境では発生しない。

RevertなりなんなりしながらTry&Errorを行うと、どうもSpockでインターフェースを返すメソッドをMockにする際、無名クラスを使っているところが原因の模様。

インターフェースはこんな感じ

public interface HomeCarePlanner {
  String getName();
}

テストはこんな感じ

given:
def hogeMock = new Hoge(){
    @Override
    String getName() {
        return 'dummy'
    }
}
hogeService.get(*_) >> hogeMock

対応

無名クラスを使わずに、GroovyMockしてあげたら発生しなくなった。
根本原因は分からない。。(´・ω・`)

def hogeMock = Mock(Hoge)
hogeMock.getName() >> 'dummy'
hogeService.get(*_) >> hogeMock

ジョイ・インクを読んだ #JoyInc #ポエム

「ジョイ・インク 役職も部署もない全員主役のマネジメント」を読んだ。

ある意味ぶっ飛んだ会社の話。

突拍子もないいくつもの仕組みが、「なぜ、そうするのか」次々に裏付けされていく。
どういう文化にしたいのか、どう向かっていくのか。

そして終盤、筆者のエモーショナルなメッセージは胸を打つ。

そうだよ、仕事には喜びがなければいけない。

成功が幸福を運んでくるのではない。
幸福になると成功するのだ。

人生の終わりに、「もっと家族との時間を過ごしておけばよかった」なんて思うことがあってはいけない。

喜びを目指そう。
自分を、家族を、仲間を、ユーザーを、喜ばせよう。

明日家を出て仕事に向かう時、思わず口笛を吹いてしまうような喜びを。

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

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

JavaのStreamで独自ソート #java

sortedにComparator

Streamで独自ソートするにはsortedにComparatorを渡してやればOK

List<Person> personsSortedByName = getPersons().stream()
  .sorted(new Comparator<Person>() {
    @Override
    public int compare(Person person1, Person person2) {
        return person1.getName().compareTo(person2.getName());
    }
  }).collect(Collectors.toList);

Lambdaで書けます

List<Person> personsSortedByName = getPersons().stream()
  .sorted((person1, person2) -> person1.getName().compareTo(person2.getName()))
  .collect(Collectors.toList);

Comparator#comparing が使えます

List<Person> personsSortedByName = getPersons().stream()
  .sorted(Comparator.comparing(Person::getName))
  .collect(Collectors.toList);

逆順にしたい

逆順にしたいときは Comparator#reversed を使えばOKです。

List<Person> personsSortedByName = getPersons().stream()
  .sorted(Comparator.comparing(Person::getName).reversed())
  .collect(Collectors.toList);

参考

www.task-notes.com