画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

最近読んだ本

かな〜り前にAmazonの50%セールで購入した。もう1年くらい前かも。 読みやすい本だし、役に立つなぁと思った事が多かったので、何かあったらまた読み返したい。 しかし、途中でしばらく読まなくなった期間もあったので、結構忘れている気がする。。。 その気になれば一気に読める本だと思う。




瞑想の事がちょっと書いてあった。2つあって、集中瞑想と、観察瞑想の2つがあるらしい。 他にもいろいろとためになることが書いてあったのでよかった。

Sync Project with Gradle Fileのショートカットを登録した

ブランチ切り替えたり、ちょっと修正した時に、build.gradleが変わってしまって、エディタ部分の右上のSync Nowを毎回クリックするのが面倒くさくてショートカットないかなーと思ったら、デフォルトでは設定されてなかったので、設定した。

Keymapでgladle syncとか調べてもらえるとすぐ気がつくと思う。

どういうショートカットキーを設定するのか、非常に悩む。

Syncという事で、

shift + command + s

を設定した。保存っぽい印象になっちゃう気もするなー。と思う今日この頃。

「SOFT SKILLS ソフトウェア開発者の人生マニュアル」という本を読んでる

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

Rebuild.fmに何度か出演している、Higeponさんがオススメしていて、日本語版が出たというので買ってみて読んでる。

d.hatena.ne.jp

ソフトウェア開発者として生きていく為に技術以外の必要な事が一通り書かれているという感じ。もっと早く読みたかったなぁという本。ソフトウェア開発者として生きていくぞ!という気持ちで就職活動してる人とか、新卒数年目の人とか、もうおっさん側の人間だわーという人とか。いろいろな人が読んで役に立つと思います。

まだ最初の方で読み終えるまでには時間がかかりそうだけど、読み終えたらこれはめっちゃいい本だから絶対読んだほうがいいよ!って読んでない人に渡そうと思ってます。Kindle版がないので、読むの結構大変。。。。。

一言で言うと最高なので意識が高まればこのページのリンクから本を購入してみてください:D

gitで特定のファイルの変更を無視する

Android StudioのPreview版を使っていると、 Instunt runを使うために

Instant Run requires a newer version of the Gradle plugin.

と言われてアップデートしてねと言われてアップデートされる。 けども、まだalpha1とかなので、それはコミットしたくない。

そのまま使いながら開発してると、それがdiffとして出てきてしまうので、そこだけ無視したかった。

参考 http://qiita.com/usamik26/items/56d0d3ba7a1300625f92

設定

git update-index --assume-unchanged build.gradle
git update-index --assume-unchanged app/build.gradle

解除

git update-index --no-assume-unchanged build.gradle
git update-index --no-assume-unchanged app/build.gradle

具体的にどのファイルが更新されるのかは、環境によって違うかもしれない。

現在assume-unchangedなファイルがあるかどうかは以下で確認出来る

git ls-files -v | grep ^h

assume-unchangedとskip-worktreeの違いについて調べてみようとして、 実際にbuild.gradleが更新されるmergeを行ったのだけども、 どちらのケースも同じような以下のメッセージが出たので違いがよくわからなかった。 僕のテスト方法がダメだったのかもしれない。

error: Your local changes to the following files would be overwritten by checkout:
        build.gradle
Please, commit your changes or stash them before you can switch branches.
Aborting

まぁ、参考したqiitaの説明をよむ感じだとassume-unchangedを使っとくのが無難な気がするのでそうしとこうという感じ。

そして、たまにこの設定をしているのを忘れていて、build.gradleを修正したはずなのに、何でgit diffしても変更してない事になっているんだ!!!という事態になる事があるので注意。

Butter Knifeを8系にアップグレードする

前回のお話

mapyo.hatenablog.com

前回は過去に6から8にアップグレードしたメモが出てきたので書きました。 今回は8にアップグレードした時にやったことを書きます

最初に

butterknife/CHANGELOG.md at master · JakeWharton/butterknife · GitHub

こちらをまず読む。 大きな変更点としては、@Bind@BindViewに変更になっています。

あとは、unbindの部分。

build.gradleを修正

compile 'com.jakewharton:butterknife:8.0.1'
apt 'com.jakewharton:butterknife-compiler:8.0.1'

置換

今回も置換コマンドを使ってやります

perl -pi -e "s/butterknife.Bind/butterknife.BindView/g" **/*.java
perl -pi -e "s/\@Bind/\@BindView/g" **/*.java

importの部分の修正と、アノテーションの変更の部分

FragmentのonDestroyViewに入れている部分の対応

今までは以下のようにしていましたが、

ButterKnife.unbind(this);

http://jakewharton.github.io/butterknife/#reset

↑によると、以下のようにして対応する必要がありそうです。 これは手作業で直していくのがよさそうかな。。。

public class FancyFragment extends Fragment {
  @BindView(R.id.button1) Button button1;
  @BindView(R.id.button2) Button button2;
  private Unbinder mUnbinder;

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fancy_fragment, container, false);
    mUnbinder = ButterKnife.bind(this, view);
    // TODO Use fields...
    return view;
  }

  @Override public void onDestroyView() {
    super.onDestroyView();
    mUnbinder.unbind();
  }
}

おわり

という感じで終わりです。僕の作っているアプリではこれの修正で大丈夫そうでした。 さくっと出来るので、やれる時にやっとくのがよさそうです。

Butter Knifeの6系から7系にアップグレードした時のメモ

ちょっと前に8系が出た今日この頃ですが、6系から7系にアップグレードした時のメモを発掘したのでブログ書いときます。

参考ページ

yslibrary.net

置換する

必要な情報は参考にしたページに書かれてあるので、置換に使ったコマンドだけ挙げときます。

perl -pi -e "s/\@InjectViews/\@Bind/g" **/*.java
perl -pi -e "s/\@InjectView/\@Bind/g" **/*.java
perl -pi -e "s/ButterKnife.inject\(/ButterKnife.bind\(/g" **/*.java
perl -pi -e "s/ButterKnife.reset\(/ButterKnife.unbind\(/g" **/*.java
perl -pi -e "s/import butterknife.InjectView/import butterknife.Bind/g" **/*.java

この辺のコマンドを上から順番に流しとけば少なくとも僕の環境では大丈夫でした。@InjectViewくらいしか使ってなかったので移行も比較的楽でした。

※置換コマンドを実行する順番には注意してください

所感

置換の部分に関しては、置換を失敗してもコンパイルの段階でエラーになってくれるので、比較的えいやでやってしまって大丈夫そうかなと思いますたぶん。

Instant Runを使っていて、ClassNotFoundExceptionになってどうしようもないとき

Clean Projectとか、Android Studioエミュレータを一度終了して起動したりとか、 いろいろ試したけどダメだった。 一度この状態に入ると、Instant Runをやめても解決されなかった。。。謎。

File -> Invalidate Caches / Restart

をするとよさそうというのを見つけた

qiita.com

でもこれでもダメな時があった。。。

結果、gradle-wrapper.propertiesに書いてある、gradleのバージョンを現在の最新版の2.11にアップすると解決した。 StackOverFlowのどこかに書いてあったのを見つけてバージョンアップしたけど、どこだか忘れてしまった。。。