will and way

ただの自分用メモを人に伝える形式で書くことでわかりやすくまとめてるはずのブログ

Androidの開発にはIntelliJでも良いじゃんと気づいた話

f:id:matsuokah:20161204181038p:plain

IntelliJをインストールしていながらもAndroid Studioを使っていたが IntelliJAndroidプロジェクトを読み込んでみたら、Android Studioと全く同じように開発できた。

そして、上位互換だった。そんな話。

社会人になってからの職歴とエディタ歴は

ざっくりこんな感じ。

IntelliJに1年だけデビューしておき、その後は惰性でアップデートしていたので損してたな〜。

Android StudioIntelliJの若干古いバージョンがベースとなって無料配布されているだけ

Android Studio2.2はIntelliJ IDEA 2016.2がベースとなっている。

IntelliJ最新バージョンは 2016.3である。

Constraints Layoutは2016.2ベースのAndroid2.2に含まれているのに対し、2016.3の機能となっている。

メリット/デメリット

メリット: Kotlinの最新の機能がいち早く使える

ちょっとしたメリット. どっちも持ってるならIntelliJを使うという選択をすべき。

What's New in IntelliJ IDEA - 2021.3

上記の2016.3 whats newにも記載されていますがKotlinのPostfix Completionが先行して使えるようになっている。

Postfix Completionというのは以下のGIFのようなコード補完機能です

f:id:matsuokah:20161204171400g:plain

いわゆるLiveTemplateをその変数にスコープを絞った機能といった所。

以下のGIFはLiveTemplateで同じコードを書いた場合。変数を絞り込んでいく手間を感じる。

f:id:matsuokah:20161204171834g:plain

ちなみに、Android Studio 2.2ではまだ使えない

blog.jetbrains.com

上記の記事によると

Note that the feature depends on platform changes made in IntelliJ IDEA 2016.2 and is therefore unavailable in Android Studio 2.2;

ということで、Android Studio 2.2ではこの恩恵を授かれない。LiveTemplateは使える。

もちろん、IDEとしての機能はIntelliJを使ったほうが先に使えるので、そのアドバンテージはあると思います。

デメリット: IntelliJのほうがAndroidの最新機能を使えるようになるのが遅いかも

Android Studi 2.2 Release
-> 2016/09/19 Release!

IntelliJ IDEA 2016.3 GA: Java 8 and ES6, Debugger and UI improvements, and a Ton More
-> 2016/11/22 Release

  1. IntelliJ 新機能(Android Studioのベースとなるバージョン)
  2. Android Studio(ここでAndroidの機能が追加)
  3. IntelliJ(IntelliJAndroid Studioと同等の機能が追加される)

というアップデート順だとしたら、Androidの新機能が使えるようになるのは若干遅いかも?

Android Studioで試験的に導入してから、IntelliJに導入してるのだろうか。

Android StudioからIntelliJへの移行をするには?

Android SDKを設定する

  1. Android Studioの設定からAndroid SDKのパスを設定する

  2. Confiture > Project Defaults > Project Structure f:id:matsuokah:20161204172242p:plain

  3. SDK > + > Android SDK f:id:matsuokah:20161204172331p:plain

これでAndroidプロジェクトが作成・ビルド可能になります。

f:id:matsuokah:20161204173032p:plain

見慣れた編集画面。

Kaptを使っている場合はgenerateStubsを有効化する

kapt {
    generateStubs true
}

上記の設定を入れるだけで筆者の環境ではビルドできた。

before : 17sec after : 20sec

コンパイル時間が若干、長くなる。

参考:
qiita.com

IntelliJユーザーとAndroid Studioユーザーが共存できるのか?

できます。 Code Styleの設定ファイルなんかも、形式が同じなのでAndroid Studioの設定をExportしてIntelliJに読み込むとも可能

メルカリでロードバイクを売った話と防犯登録の手続きでハマった話※追記あり

全然、最近乗ってなかったので持ち腐れと思いメルカリで売ってみた。その時の話。

自転車を譲渡するって意外と大変だなーって思った事が意外とあった。
特に自転車の場合は防犯登録があるが、手続きの順序をしらないと手間が増えるのでメモ書き程度に残してみた。

TR;DR

1. メルカリで売ってみる

実は使ったことがなかったので、売るシステムがどんなものか知りたくて使ってみた。

写真を投稿する

写真は約4枚。ロードバイクの全体像、おまけ、そして保証書(シリアルナンバー)の写真を投稿した。

価格の設定

強気に設定してたら何度か値段交渉をされましたが、どれもYahooオークションでの相場を遥かに下回る価格だった。
そういうもんかと思ってたら、メルカリの通知で「このくらい下げてみましょう」というサジェストが来た。

実際下げてみると、だいたい妥当な交渉額が提示されたのでそれで手を打つこととした。

合計30万くらいかかったロードバイク・アクセサリが14万円で売れた。
ロードバイクは型落ち品の値落ちが激しい部類のようで、他のバイクもだいたいそんなもんだった。

交渉ははっきり断る

個別で販売するのが面倒で、アクセサリをおまけとして売っていたら、別売のコメントがいくつもついた。
全部断った。何度も運送会社とやり取りするのがだるい。

2. ロードバイクを送る

他のロードバイク販売者の輸送方法をみてたらカンガルー自転車輸送便が紹介されていた。
最初はヤマトなどを使おうと思っていたが、他の運送会社では自転車を扱う場合には大きい荷物として送るので、輸送費が非常に高くなってしまうようだった。

カンガルー自転車便はレンタル箱代と輸送費で1万円以内に収まるので割安で送ることができる。

  1. 輸送申請(料金前払い)
  2. 輪行箱が届く
  3. 集荷
  4. 配達

という流れになっていて、輸送申請から集荷までは約1週間かかった。輪行箱が届く日は申請日から3, 4日以降でないといけないらしく気長な感じ。

箱が届く

f:id:matsuokah:20161127161612j:plain

フタはこんな感じ

f:id:matsuokah:20161127161613j:plain

フタには説明書が貼り付けてある

f:id:matsuokah:20161127161614j:plain

箱の横面には高価品などの扱いが書かれている。

f:id:matsuokah:20161127161618j:plain

前輪を外していれる

f:id:matsuokah:20161127161619j:plain

フロントフォークに傷がつかないようにプチプチで包んで送りました。

すっぽり入る

f:id:matsuokah:20161127161621j:plain

ハンドルを曲げて入れる必要があったのと、ペダルを外す必要があった。
ペダルレンチを持ってなかったので、近くの自転車ショップに持っていって外してもらった。

ペダルもプチプチに。

受取の評価を待つ

メルカリでは受取人の評価と販売人の評価をして初めてお金が入るシステム。 それによってトラブルが起きないようになっているようだった

簡単に出品できたのと手数料がヤフオク(落札額の10%)に比べて格安だったのでなかなかよかった。

防犯登録の抹消と再登録

抹消は本人がするか、譲渡先に書類を渡すことで再登録の手続きと同時に行うことができる。

正しくは

抹消は本人がするか、譲渡先に書類を渡すことで再登録の手続きと同時に行うことができるのは同じ都道府県内の譲渡のみ。譲渡先と都道府県が一致しない場合は管轄が変わるため、先に抹消手続きを完了してからでなければ、他県で手続きすることができない。

神奈川県の自転車防犯協会に問い合わせた所、上記のような回答がもらえた

必要な書類とは

  • 防犯登録のときにもらった防犯登録のお客様控え
  • 譲渡証明書

のどちらか。

神奈川県の自転車防犯協会によると、

譲渡証明書の書式は定めておりません。サンプルがありますのでダウンロードしてご使用ください

と、サンプルが載っている。これは自治体ごとに必要書類が変わるかもしれないので、譲渡元と譲渡先の防犯登録の管理団体に問い合わせるのがベスト

marble diagram

marble diagramとは

Reactiveプログラミングの説明に使われるあの図の名前。

f:id:matsuokah:20161109005612p:plain

RxMables#mapより転載

X軸を時間、Y軸をストリームとしていて、4つの登場人物は以下の通り

○: input data event
X: error event
|: complete event
中間の□: transformer

つまり、

データ入力イベントが発火→transformerでデータの変換→出力という一連の流れを表している。

何のために使われている?

Reactive Programmingは数多くのオペレータ(transformer)があります。その役割の説明のために使われている。

ジムに行き始めて4ヶ月が経った

健康診断で2年連続

  • LDLが高い
  • 血中脂肪が高め
  • 貧血

と言われ、男性の貧血は稀ということで精密検査まで受けたにも関わらず原因不明。この5年間風邪もひかず、全くもって健康体だと思ってたのに悔しい。

一念発起して体質改善をすべくジムに行き始めて早4ヶ月。なかなか健康体になってきたと思うので、まとめてみた。

f:id:matsuokah:20161022191353p:plain 毎週2,3回は行っていて、帰宅が遅くなったときは家でやってるので週3は筋トレする時間を確保している。

f:id:matsuokah:20161022191632p:plain

f:id:matsuokah:20161022191635p:plain

f:id:matsuokah:20161022192222p:plain

体脂肪率は11%前後、身長174cmに対し、標準体重65.8kgまでもう少し!

ジムに行き始めて変わったこと

  • 体が軽くなったとかは感じないw
  • 食生活を気にするようになった

体調のブレは少なくなったように感じる。筋力が上がったからではなく、生活習慣が変わったから。
ゲームで夜更かしすることが多かったが、程々で寝るようになった。結論、自分の体は睡眠が重要みたい。

食生活を意識する

  • フレッシュフルーツ、ドライフルーツ、ナッツ類を多く食べる
  • 定期的にプロテインを飲む
  • 常温かそれより温かい水を飲む
  • グルテンを避ける(GI値の低い物をなるべく選ぶ)
  • スナック類、カップラーメンは食べない

グルテンフリーはジョコビッチの本で知った。アレルギーではないけれど、積極的には食べないようにしている。
付き合いや出してもらったものは喜んで食べてる。ラーメンは4ヶ月位食べてない。

プロテイン事情

最初はSAVASなどのプロテインを飲んでいたが甘いのが好きではないので、最近は甘味料が入っていない無添加のプロテインを飲んでいる。 無添加なのでホエイ以外入っていない。ビタミン類も取りたいので、無糖の青汁を混ぜて飲んでいる。

プロテインだけ→低脂肪牛乳みたいな味
青汁→青臭い

プロテイン + 青汁 → 抹茶オレ

普通に美味しい。もともと、プロテインのみで飲んでたが、この記事を書く1週間くらい前に発見して、かなり感動した。

成分表

f:id:matsuokah:20161022195821j:plain
プロテイン

f:id:matsuokah:20161022195846j:plain
青汁

自宅の筋トレ

家には重さ調節が1kg~10kgでできるダンベル2個フィットネスマットだけ置いている。
フィットネスマットはなくても良いんだけど、汗を床につけたくないし、下の階の人に迷惑かけたくないという理由も兼ねて。

家で体幹トレーニングしながら動画を見るのは相性がいい。
たまった録画の消費、Youtube見ながらプランクやらV字バランスしてる

長友の本は良かった。けど、naverまとめでやり方は見つかる

来る健康診断

去年は会社の健康診断が10月〜11月頃に行われた。今年の健康診断では超健康体な結果を叩き出すんだ!!

続・Mac OSXの設定をAnsibleで9割以上自動化する

blog.matsuokah.jp

今年の1月に書いた記事では

  • Ansibleをインストールの自動化
  • Ansibleによるアプリのインストールや設定の自動化

の2つを行いました。

今回の記事では

  1. masによるアプリのインストール
  2. Ansibleのアップデート
    1. それに伴い、defaultsコマンドのv1系の実装を削除
  3. 終了後の通知
  4. その他あるべきディレクトリ構成にリファクタ

を、行いました。

1. masを使う

前回、できていなかったものが、AppStoreからアプリのインストール。

Macでの開発環境構築をできる限り自動化する。 - Qiita

という記事の中でmas-cliが紹介されていたので使ってみた。 mas-cliとはコマンドラインでAppStoreのアプリケーションをインストールできるようにしたアプリケーション。

  • 署名・審査を通過したアプリケーションソースなので安全
  • 自動的にアップデートされる

という2点の理由から、brew-caskよりもこちらのほうがなにかといい。

1. brewでmasをインストール

brewでインストールするアプリリストに追加

2. AppStoreのログイン情報を設定ファイルに記載

mas signin ${ID} "${PASSWORD}"

という形式でサインインしてから、インストールします。masのroleでは最初にsignoutし、signinしてからアプリのインストールを開始しています。

3. アプリのリストを記載

mas_applications:
  - {name: 'Slack', store_hash: 803453959}
  - {name: 'CCMenu', store_hash: 603117688}
  - {name: 'Apple Configurator 2', store_hash: 1037126344}

試しで3つだけアプリケーションのIDを列挙しました。 nameは使われないですが、hashだけだと何のアプリケーションかがわからなくなるので。

4. アップデート

自動アップデートを有効にしてれば、不要ですが

mas upgrade

で、AppStore経由でインストールしたアプリをすべてアップデートすることができます。

mas-cliを使う上でのTIPS/NOTICE

1. アプリのリストを取得する

もし、PCを乗り換えるならmasをインストールして下記のワンライナーを実行すれば、AppStore経由でインストールされているアプリ名とハッシュがgroup_varsに記載するべきフォーマットでリストされる

~/W/provisioning ❯❯❯ mas list | sed -e"s/\([0-9]*\)\ \(.*\)\ (.*/- {name: '\2', store_hash: \1\}/"
- {name: 'Apple Configurator 2', store_hash: 1037126344}
- {name: 'Xcode', store_hash: 497799835}
- {name: 'Word Writer', store_hash: 931198233}
- {name: 'Keynote', store_hash: 409183694}
- {name: 'iMovie', store_hash: 408981434}
- {name: 'CCMenu', store_hash: 603117688}
- {name: 'Evernote', store_hash: 406056744}
- {name: '1Password', store_hash: 443987910}
- {name: 'Slack', store_hash: 803453959}
- {name: 'Dash', store_hash: 449589707}
- {name: 'LINE', store_hash: 539883307}
- {name: 'GarageBand', store_hash: 682658836}
- {name: 'LadioCast', store_hash: 411213048}

2. CLI経由だとインストールできないケースがある

CCMenu

CCMenu

CCMenuというアプリケーションは何故か、AppStoreからGUIで操作しないとインストールできなかった

3. AppStoreよりもbrew caskのほうがアップデートが進んでるケースが有る。

Alfredはcaskだと最新の3系がインストールされます。AppStoreからDLすると2系になってしまいました。(2016/10/08現在)

2. 通知する

MESSAGE="Provisioning is successfull, please restart or re-login"
osascript -e "display notification \"${MESSAGE}\" with title \"osx-provisioing\""
say "${MESSAGE}'"

終わったあとこちらをフックしています。通知センターに通知して、sayコマンドで再起動を促すメッセージを喋らせてます。

f:id:matsuokah:20161008182332p:plain

いい感じだ〜

github.com

【読書】Unixという考え方 ― その設計思想と哲学

きっかけはgithubのissue

この本を読むきっかけになったのは
emacs界隈ではデファクトであるmagitvimに持ってきた
vimagitのとあるissueのやり取り。

そのissueとはAny plans to add blame command?
つまり、blameの実装予定はあるのか?という質問である。

その中でauthorは一つのことをうまくやるというUnixの哲学に基づき、その提案は棄却すると回答し、vim-fugitiveというプラグイン:Gblameを案内した上で、won't fixとして片付けている。

僕にとってこれは少しカルチャーショックを受けると同時にUnixの哲学に絶大な好奇心を抱いた。

大学の頃にそんな話を授業で聞いたけど完全に忘れてしまっていた。Amazonで調べてみるとあるじゃないか。即ポチった。

プログラムとして何に集中すべきか

この本が繰り返し伝えることは、「一つのことをうまくやること」だった。まさにissueの回答そのもの。

プログラム(プロダクト)として何が素晴らしいのか?ということは、常々、少ないバイト数、速さ、省メモリなど様々な視点があるが、
Unixという哲学では「小さいこと」が美しいと定義付けている。

それはすべてを包括しており小さいことは

  • 依存が少ない
  • 使い方がシンプルになるので、使いやすい
  • 小さいプログラムはプログラム自体が必要とするメモリへの展開が小さくて済む
  • メンテナンスしやすい
  • 組み合わせやすい

つまり、小さいものを組み合わせて大きいことをしようということだ。

Unix|(パイプ)がまさに「組み合わせで大きいことをしよう」表現している。
標準出力を次のプログラムに渡すことで、自分の好きな出力を得ることができる。

ファイルをcatしたら、grepしたいかもしれないし、sedしたいかもしれない。もしパイプという概念がなく、catがそれらを内包するしかなかったらどうなるだろう。

欲しい機能があっても、catに組み込まれない限り使えないので不便極まりない上に、installする上で依存するプログラムも大きくなるのでビルドにも時間がかかるだろう。

こう振り返ってみると、なんてよくできた哲学なんだ。。。と感銘他ならなかった。

登場した本

Unixという考え方 ― その設計思想と哲学

エンジニアはなぜ勉強し続けるの?

今日、後輩とのランチで「なぜエンジニアは勉強し続けなければならないのか?」という話題になった。

結論は 「エンジニアという職業は手段を売り物にしているから

そして、「手段」は新しいものがでてきては、古いものは使われなくなるサイクルがとてつもなく早い。

毎年のiOS/AndroidSDKのアップデートでは新たなAPIがどんどんでてくるし、
Githubにはかなりの数のライブラリが毎日、公開されてるわけで。

したがって、勉強をしないということは

  1. 「手段」を磨いたり新しいものを取り入れることが出来ない
  2. 効率的な実装の選択肢が減る
  3. 切り捨てられる技術を使い続ける
  4. 腕を磨いているエンジニアと相対的に市場価値が下がる

一言で言うと、「エンジニアとして死んでる

また、技術のアップデートは新しいものを取り入れる以外のことも必要。
例えば以下のようなもの。

  • 規格
  • 哲学
  • 概念
  • パターン

これらは使う技術が変わっても、使いまわせる財産になると思う。

腕を磨くこと、新しいものに目をキラキラさせることはエンジニアの素養の一つとして大事にしていきたい。