cutmail's blog

write the code

エンジニアリングにおける筋の良さ、悪さ

エンジニアとして多くの人と接している中で、筋の良い人、悪い人という分類ができることに気づいた。

 

ここでいう筋の良さとは、課題を解決する際に最短ルートを最初から見つけることができたり、他の人がパッと見たときにすんなり理解できるような解法を導き出せることである。

 

反対に筋の悪い人は遠回りと思えるような方法であったり、どうしてその解法に至ったのか理解し難いものを出してくるケースが多い。

 

筋の良さは経験値によるところが大きいと思うので、鍛えることができそうだ。

また筋の良さとはエンジニアリングだけでなく、専門職全般に当てはめることができるだろう。

 

自分がどちらに当てはまるかは常に気にしておきたい。

#DroidKaigi 2017で「4年続くアプリにおけるチーム開発」の発表をしました

発表中に手元においた時計の時間を勘違いしてスライドをだいぶ飛ばしてしまいましたが、立ち見が出るくらいの方々に来ていただきありがとうございました。 また質問もいくつかしていただいたりして有り難かったです。

やった自分の発表が終わったので、あとは残りのセッションを楽しみたいと思います 😁

#DroidKaigi 2017 で登壇します

droidkaigi.github.io

明日2日目 14:20 - 14:50 ROOM2 にて、Androidアプリのチーム開発について登壇します。

gkbrしてますが、是非聞きに来てください 😀

エナジードリンクを飲まなくなった

30歳を迎える少し前くらいから自然とエナジードリンクを飲まなくなった。いや、飲めなくなったといったほうがいいかもしれない。

その代わりにコーヒーを飲む頻度が増えた。

エナジードリンクを飲まなくなってから、すこぶる起きたときの体調が良くなった感じもある。

yatteiki.fmでも話題になっていたけど、エナジードリンクは糖質の塊、つまり砂糖水らしい。

あえて工数を無視して考えるということ

施策などを考えたりする際に工数は大事な要素ではあるが、最初から工数を出して並べて検討してしまったりすると、工数に引っ張られて本当に達成したい目的から外れた施策などを選んでしまいがちだったりすることがある。

そういうときは最初から工数を出さずに、目的を達成するためにできる、ありとあらゆるアイデアを一度全部出しきり(風呂敷を広げてみて)、一番目的を達成できそうなものを選ぶ。そのあとで初めて選んだ施策の工数を出してみよう。

もし工数的な部分が折り合わないようであれば、機能を削ったり、代わりの方法を検討してみると良いだろう。

ここで重要なのは、工数を考えてしまうことで、視野が狭くなり、中途半端な施策の結果、失敗の確率が上がってしまうということだ。

エンジニアが施策を考えたりする際にやってしまいがちな罠でした。

Androidアプリで使っているライブラリのライセンスをいい感じに表示する

Fablic Advent Calendar 2015 - Qiitaの12/1のエントリーです。

序章 

みなさんはAndroidアプリにOSSライブラリなどを導入した際には、 そのライブラリのライセンスなどは正しく表示していますか?

弊社でもいくつかのOSSライブラリを導入しており、設定画面の中にライセンス情報を表示するようにしています。

AboutLibrariesとは

github.com

AboutLibraries」はアプリに導入しているライブラリのライセンス一覧を簡単に作成でき、カスタマイズなどもできるライブラリです。 サポートされているライブラリであれば、プロジェクト内を検索して自動で一覧表示をしてくれます。

f:id:invent:20151201000916p:plain:w300 f:id:invent:20151201000928p:plain:w300

使い方

AboutLibrariesを使ってライセンス一覧画面を表示する方法はいくつかあり、 その一つがFragmentを取得するやり方です。

Fragmentを生成する方法

LibsFragment fragment = new LibsBuilder()
        .fragment();

Activityを継承する方法

二つ目が、提供されているベースのActivityを継承するやり方です。

public class ExtendActivity extends LibsActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        setIntent(new LibsBuilder().withLibraries("activeandroid", "caldroid").withActivityTheme(R.style.MaterialDrawerTheme).intent(this));
        super.onCreate(savedInstanceState);
    }
}

Activityを直接起動する方法

こちらはActivityのタイトルなどを設定したうえで、直接起動する方法です。 一番手軽かもしれません。

new LibsBuilder()
        .withLibraries("otto", "progress_menu_item", "snack_bar")
        .withActivityStyle(Libs.ActivityStyle.LIGHT_DARK_TOOLBAR)
        .start(this);

またどの方法でも、表示する情報などを細かく設定したり、テーマをできるようになっています。

カスタマイズの一例

.withAboutIconShown(true)
.withAboutVersionShown(true)
.withAboutDescription("description")
..withActivityTheme(R.style.MyTheme)
.withActivityTitle(getString(R.string.license))

詳しくはサンプルアプリが公開されているので、そちらをご覧ください。

任意のライブラリライセンスの追加

サポートされているライブラリ以外を使用している場合は、自動で追加はしてくれないため、下記のような設定ファイルをresディレクトリいかに配置する必要があります。

今回は ProgressMenuItemを追加してみます。 下記のようなファイル名で設定を作成します。 ただこの設定ファイルを直接作るのは大変なので、ジェネレーターが公開されています。

AboutLibraries definition builder

こちらの画面に従って入力していくだけで、設定ファイルを作ってくれます。

res/values/library_progress_menu_item_strings.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>
    <string name="define_int_progress_menu_item"></string>
    <!-- Author section -->
    <string name="library_progress_menu_item_author">hotchemi</string>
    <string name="library_progress_menu_item_authorWebsite">https://github.com/hotchemi</string>
    <!-- Library section -->
    <string name="library_progress_menu_item_libraryName">ProgressMenuItem</string>
    <string name="library_progress_menu_item_libraryDescription">Shows and stop a progress in the ActionBar.</string>
    <string name="library_progress_menu_item_libraryWebsite">http://hotchemi.github.io/ProgressMenuItem</string>
    <string name="library_progress_menu_item_libraryVersion">0.3.3</string>
    <!-- OpenSource section -->
    <string name="library_progress_menu_item_isOpenSource">true</string>
    <string name="library_progress_menu_item_repositoryLink">https://github.com/hotchemi/ProgressMenuItem</string>
    <!-- ClassPath for autoDetect section -->
    <string name="library_progress_menu_item_classPath"></string>
    <!-- License section -->
    <string name="library_progress_menu_item_licenseId">apache_2_0</string>
    <!-- Custom variables section -->
</resources>

設定を追加したライブラリを表示するようにするには、

.withLibraries("otto", "progress_menu_item", "snack_bar")

のように設定ファイルで指定した名前を引数に渡してあげます。 これでいい感じでライセンス情報を表示することができます。

f:id:invent:20151201005818p:plain:w300

最後に

明日はshobyがiOSアプリの開発について書く予定です。 よろしくお願いします。