パルカワ2

最近はFlutterをやっています

YAPC::Hokkaido 2016 SAPPOROに行ってきた

雪のせいで飛行機が遅れ、欠航し、振替した便はまたもや遅れといった感じで大変でしたが、行ってきました。僕はトークをするわけでもなく、以下で書いたとおり僕は呑んだくれただけです。

tech.pepabo.com

北海道は結構な頻度で行っておりましたが、今回も最高であったことを共有させていただきます。

飛行機が欠航して帰れなくなってしまい、とにかく北海道をエンジョイしなければと思い、円山動物園にも行った。平日だったので、人も少なく最高であった。

北海道在住の友人にも数年ぶりに会えて良かった。
トドショー見たくておたる水族館まで行ったけどやってなくて悲しかったので、また北海道行きたい。
トドショー | おたる水族館

というわけで楽しかった。YAPC::Kansaiも行きたい。
YAPC::Kansai 2017 OSAKA

吉祥寺.pm でエンジニア立ち居振る舞いについて話してきた

そうです、吉祥寺です。
今はPerlはまったくやっておらず、Android Javaと戯れる日々ですが、はてなブログで話題になっていたお題「エンジニア立ち居振舞い」について話してきました。

ありがとうございました!!

マンガでわかる大人のADHDコントロールガイド を読んだ。

マンガでわかる大人のADHDコントロールガイド

マンガでわかる大人のADHDコントロールガイド

togetter.com
これを読んで結構当てはまるな〜と思ったので読んだ。
困っていることチェックシートを眺めてると「なるほどね〜」という気持ちになった。

DeepLinkのドキュメントを自動生成する

アプリには、DeepLinkというのがある。DeepLinkとは、各アプリ画面に紐づくURIで、めんどいので詳細は省く。Androidアプリでは、Airbnbが公開している DeepLinkDispatch というライブラリがあって、それを使えばActivityにアノテーションを指定するといい感じにそのActivityに遷移するところまでやってくれる。

github.com

ギョームでもそれを利用しているのだけど、DeepLinkを追加したり更新したりしてもwikiのドキュメントを更新するのを忘れがちであった。なので、アノテーションプロセッサでドキュメント生成を自動化出来ないかなーと思ってやってみた。

github.com

服買い替えてる

悲しいことに30歳に近づいてきたので、そろそろ大学生のときに買った服着るのやめるかと夏頃思い立ち、服を買い換え始めた。

僕は何事にもレベルがあると思っていて、なにか新しくやるときはレベルを大きく3つくらいに分けたあとに次に目指すべきは何か考える。

今回は、「シャレてない」「外してない」「シャレてる」の3つに分けて、自分は言わずもがな「シャレてない」の部類だったので、まずは「外してない」を目指すことにした。

「外してない」になるために必要なのはなにか考えて、以下を満たせば「外してない」のでは?と思ったので、それを満たすように服を買った。

  • 上が明るい色の時は下は暗い色にする
  • 下が明るい色の時は上は暗い色にする
  • 白黒だけにはならないようにする
  • 一昔前の量産型大学生にならないようにする
  • チェック柄やボーダーは買わない
  • 雑誌を見て、良さそうならそれを買う
  • 金額はあんまり気にしない

やってみると結構お金がかかってつらい事がわかった。
あと変化に気づく人が案外多くて、CTOには「色気づいた」などと小馬鹿にされましたが無視しました。

ButterKnifeのView lists便利

AndroidアプリのViewのXMLは、平べったくなるように書いてる。
今までは、ある条件を満たす時にはAとBとCを消して、満たさない時はAとBとCを表示するみたいな事をやりたい時に全部のViewを指定していた。

そうすると後で何かViewを追加した時にどちらかの方では変更し忘れるとか起きうる。変化に弱い。

@BindView(R.id.hoge_name)
View hogeNameView;

@BindView(R.id.hoge_address)
View hogeAddressView;

@BindView(R.id.hoge_tel)
View hogeTelView;

void onCreate() {
  ...
  ButterKnife.bind(this);
  ...
}

public void hideHoge() {
  hogeNameView.setVisibility(View.GONE);
  hogeAddressView.setVisibility(View.GONE);
  hogeTelView.setVisibility(View.GONE);
}

public void showHoge() {
  hogeNameView.setVisibility(View.VISIBLE);
  hogeAddressView.setVisibility(View.VISIBLE);
  hogeTelView.setVisibility(View.VISIBLE);
}

ButterKnifeのview listsを使うとこう書ける。ひとまとめに出来るので、変更が起きた時も変更しやすい。

@BindViews({
  R.id.hoge_name,
  R.id.hoge_address,
  R.id.hoge_tel
})
List<View> hogeViews;

void onCreate() {
  ...
  ButterKnife.bind(this);
  ...
}

public void hideHoge() {
  ButterKnife.apply(hogeViews, new ButterKnife.Action<View>() {
    @Override public void apply(View view, int index) {
      view.setVisibility(View.GONE);
    }
  });
}

public void showHoge() {
  ButterKnife.apply(hogeViews, new ButterKnife.Action<View>() {
    @Override public void apply(View view, int index) {
      view.setVisibility(View.VISIBLE);
    }
  });
}

ただこのブログを書いてる時に以下のようなコードを書いた場合、値はどうなるんだろうなぁと思った。確かめてはないけど、VISIBLEのままだとハマったりしそう。

@BindView(R.id.hoge_name)
TextView hogeNameView;

@BindViews({
  R.id.hoge_name,
  R.id.hoge_address,
  R.id.hoge_tel
})
List<View> hogeViews;

onCreate() {
  hogeNameView.setVisibility(View.VISIBLE);

  ButterKnife.apply(hogeViews, new ButterKnife.Action<View>() {
    @Override public void apply(View view, int index) {
      view.setVisibility(View.GONE);
    }
  });

  hogeNameView.getVisibility();  //=> ???
}

もっと早く使っとけば良かった。もしくはもっといい方法があれば知りたい。