cutmail's blog

write the code

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

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

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

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

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

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

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アプリの開発について書く予定です。 よろしくお願いします。

読了「ソフトウェア開発の名著を読む 第二版」

ソフトウェア開発に関する10冊の書籍を紹介している。
ソフトウェア開発を始めたばかりの人など、どういう本から読んだら良いかわからない時に手にとって見ると良い感じの内容だった。
いくつか読んだことがない本もあったので、これを期に読んでみようと思う。

  1. プログラミングの心理学
    • ソフトウェア開発の人間的側面について
  2. 人月の神話
    • 見積もりとスケジューリングの単位としての「人月」の危険性を指摘した不朽の名著
  3. ピープルウェア
    • ソフトウェア開発における人間的側面を重視し、人間中心に考えることの大切さを説く
  4. デッドライン
    • 人間中心のプロジェクト管理について、デマルコが小説形式で表現した作品
  5. ソフトウェア職人気質
    • ソフトウェア開発を「工学」ととらえることをやめて、「職人気質」という基本へ回帰せよと提唱する
  6. 達人プログラマー
  7. コードコンプリート
  8. プログラミング作法
  9. リファクタリング
    • マーチン・ファウラーの不朽の名作
  10. ビューティフルコード
    • 「美しいコード」について、33名の著名なプログラマーがそれぞれの想いを語る超大作

ソフトウェア開発の名著を読む 【第二版】 (技評SE選書)

ソフトウェア開発の名著を読む 【第二版】 (技評SE選書)

「ALLIANCE 人と企業が信頼で結ばれる新しい雇用」を読んだ

LinkedIn創業者であるリード・ホフマンによる、終身雇用ではない、人と企業の新しい雇用関係についての本。 人と企業の長期的関係のために、定期的に仕事を変えたりする期間を「コミットメント期間」と呼び、本書では3つのコミットメントタイプについて解説している。

  • ローテーション型
    • 会社との相性が将来的にどうかを評価する
  • 変革型
    • 従業員のキャリアを一変させ、会社に大きな変革をもたらす
  • 基盤型
    • コアバリューを守り伝える

それぞれのタイプごとに狙いや期間の長さ、更新に関してなども違う。

また印象に残った点として、社員には社外のネットワークを徹底的に活用することを推奨することや、退職したOBなどとも関係を続けることが企業にとって長期的に大切だということが挙げられていた。

ALLIANCE アライアンス―――人と企業が信頼で結ばれる新しい雇用

ALLIANCE アライアンス―――人と企業が信頼で結ばれる新しい雇用

第一回testotips.ioに参加してきた

3/19にクックパッドさんで行われたtestotips.ioという勉強会に参加してきました。 testotips.ioはテスト/テスト・ツール周りのtipsを持ち寄って情報共有したいというところから始まったとのことです。

testtips.ioのs.ioは塩→塩味

第一回目のテーマはAppiumでした。

以下メモ。

Appiumの中身とその周辺Tips(仮)

@Kazu_cocoaさん

Appiumのテスト結果レポートをSahaginで作ってみる

@nosonosonosoさん

AppiumのPHPクライアントを使う上で行っている工夫

@takahashi22さん

  • 背景、やりたいこと
    • アプリの品質向上とより高頻度でのリリース
    • クラッシュを削減する方法の必要性
  • 手法

    • Appium, Espresso
  • システム全体蔵

  • アプリテスト自動化の現状
    • まずはAndroid
    • 並列実行可能、ID指定は4.3以上
    • WebViewへの切り替えも実用的に動いている
      • ログインとか
    • UI操作のスモークテスト的な位置づけでAppiumを利用
    • UIの細かい機能はespresso

Appiumを使ってiPhone Safari、Andorid Chromiumを使ってアプリをテストするTips

@HC_asagiさん

  • Excelに書いたシナリオテストからテストを実行

Running appium tests on Jenkins

@vishaljaynさん


Appiumを実際に使っている方の発表が多く、まだ使っていない自分としては導入してみてもいいかなと思えました。 次回はユニットテストなど、もう少し低レイヤーのテーマでやるとのことでした!

第9回potatotipsでAndroidアプリ開発のログ出力について発表をしました #potatotips

既に先週のことですが、弊社でpotatotips#9を開催いたしました。

バタバタしてしまいましたが、たくさんの方に来て頂き、そこそこ盛り上がってのではないかと思います。

他の方の発表まとめなどはこちら。

AndroidとiOSのtipsを共有するpotatotips #9に参加してきたので発表内容まとめてみた!

自分はLog周りの話と、Timberの紹介をしました。