2014年7月31日木曜日

本 : 『Steal Like an artist』 感想とレビュー


このエントリーをはてなブックマークに追加


クリエイティブの授業 STEAL LIKE AN ARTIST "君がつくるべきもの"をつくれるようになるために
(Kindle版は洋書のみ:Steal Like an Artist: 10 Things Nobody Told You About Being Creative。自分はこちらを読みましたが、難しい言い回しなどはなく、すごく読みやすかったです。)

とても良い本でした。自分が良いと思ったもの、好きなものから影響を受けた結果が自分自身や自分の作品になるんだ、だからいろいろ探そう、というお話。
You are, in fact, a mashup of what you chose to let into your life. You are the sum of influences. (...) We are shaped and fashioned by what we love.
創作以外の、生き方的な面でも参考になるので、軽く読める自己啓発本としても良いと思います。例えば7つの習慣などは正しすぎて少し重く、そうは言っても…と感じる面もあるのですが、好きなもの、尊敬できる人を真似よう、というやり方であればできる気が、やりたいと思える気がします。

印象的だった言葉を幾つか引用。訳は適当に自分で書いているので、雰囲気だけつかんで頂ければ。
if you copy from one author, it's plagiarism, but if you copy from many, it's research
(一人の著者からコピーしたらそれは盗用だが、たくさんからコピーすればそれは研究だ)
 たくさんの人の生き方を真似すれば、それが自分自身だ、とも言えます。
You don't like to look like your heroes. you want to see like you heros.
(ヒーローのように見えたいんじゃない。ヒーローのように見たいんだ。)
あの人だったらどう考えるんだろう、と考え続けるということ。
If you have two or three real passions, don't feel like you have to pick and choose between them. Don't discard. Keep all your passions in your life. (...) "Let them talk to each other. Something will begin to happen."
(本当に好きなことが2つか3つあるなら、どれかを選ばなくてはいけないなんて思う必要はない。捨てちゃダメだ。すべての情熱を持って生きるべきだ。(...) きっと何かが起こり始める。)
なにかを諦めて一つのことに専念するべき、という考え方もありますが、自分はこちらの考え方が好きです。好きなものがたくさんあるって良いことですよね。



全体の文量も長すぎず、一つ一つのメッセージの区切りが短いので読み返すにもちょうど良い感じです。おすすめ。

2014年7月29日火曜日

本 : 『The Functional Art』 感想とレビュー


このエントリーをはてなブックマークに追加


The Functional Art: An introduction to information graphics and visualization を読みました。インフォグラフィックスを広い範囲で解説している本で、インフォグラフィックスのそもそもの目的(示したい情報を明確にする事であって、単純化することではないし、もちろん装飾することでもない)や、どういう時にどういう図を使うべきか(値の比較をしたいなら、ほとんど常に棒グラフが優れている。円の面積や色の濃さによる表現は比較には向かない)などから、人がどのように視覚を認識しているかなどを扱っています。

個人的には 80 点くらい。こういう系統の他の本は特に読んだことがないので、なんとなくの採点です。こういう領域に興味があるのであれば、一読して損はしないと思いますが、あまり興味がなさそうな人に「これ面白いよ、勉強になるよ」と言って薦めるほどではない、という感じです。

Part 1 が、 foundation という事で、インフォグラフィックスとビジュアリゼーションの基礎や考え方の紹介です。もともとこの辺りが知ってみたかったので勉強になりました。結構理屈っぽいので、自分でインフォグラフィックスを作りたい、と思って読む人にとっては少しまどろっこしいかもしれませんが、いろいろ引用されていて、よく考えられて書かれている気がします。

Part 2 の cognition パートの、視覚と脳に関する話は、その辺りの知識がなかったけど興味があった、という人にとっては良いのかもしれません。Part 1 で紹介されている、どういう時にどういう図を使うべきか、どういう図がわかりやすいか、などの裏付けといった意味合いの気もするので、興味がなければ読み飛ばしても問題ない気がします。自分は他の本でこういう話は読んだ事があったので、軽く読み飛ばしました。

Part 3 は practice という事で、著者が扱ったプロジェクトについて。Part 1 の復習といった感じです。

Part 4 はインタビュー。

こうして振り返ると、Part 1 と Part 3 だけ切り出して、コンパクトにしてもう少し値段が手軽になっていればもっと良かったような気がします。Part 2 も Part 4 も価値がないわけではないのですが、削って安くできるならそうして欲しかったです。

3行まとめ

  • 伝えたいメッセージからインフォグラフィックスを作る。グラフィックス(見た目)を先行させない
  • インフォグラフィックスは情報を単純化するのではなく明確にする
  • 見る人の知性を信頼する

2014年7月27日日曜日

Java : Zip から複数ファイルを解凍して保存する


このエントリーをはてなブックマークに追加
  1. ZipInputStream を作る
  2. ZipInputStream.getNextEntry でエントリー(ファイル)を取得する
  3. ZipInputStream.read で中身を読み込む
  4. 読み込んだ中身を FileOutputStream に書き込む
  5. 2,3,4 の繰り返し
  6. ZipInputStream.close
以下、サンプルコード。Zip 内にディレクトリ構造がある事は想定していない、単純なコードにしています。
Android で外部ストレージ(SDカード)にエクスポートしたデータをアプリのディレクトリに戻すために使用したコードの一部。

try {
    // infilePath で zip ファイルが指定されているとする
    ZipInputStream zipInputStream =
            new ZipInputStream(new FileInputStream(infilePath));
    ZipEntry zipEntry;
    int len;
    byte[] buffer = new byte[1024];

    while((zipEntry = zipInputStream.getNextEntry()) != null){
        // outFolder で出力先のディレクトリが指定されているとする
        FileOutputStream fileOutputStream = new FileOutputStream(outFolder + "/" + zipEntry.getName());
        while ((len = zipInputStream.read(buffer)) > 0) {
            fileOutputStream.write(buffer, 0, len);
        }
        fileOutputStream.close();
    }
    zipInputStream.close();

} catch (Exception e) {
    // エラー処理
}

Java : 複数ファイルを Zip に圧縮して保存する


このエントリーをはてなブックマークに追加
  1. ZipOutputStream を作る
  2. zip に入れるファイル毎に ZipOutputStream.putNextEntry で ZipEntry を追加する
  3. ZipOutputStream.write を書き込む
  4. 2, 3 の繰り返し
  5. ZipOutputStream.close
Android でアプリのデータを外部ストレージ(SDカード等)にまとめてエクスポートするために使いました。 以下サンプルコード。
try {
    // String outfilePath で出力先のファイルパスが指定されているとする
    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outfilePath));
    byte[] buffer = new byte[1024];
    int len;

    // 引数などで String[] files として zip に追加したいファイルのファイルパスが指定されているとする
    for(String file : files) {
        InputStream in = new FileInputStream(file);
        out.putNextEntry(new ZipEntry(file.getName())); // path名からファイル名だけにしておく
        while ((len = in.read(buffer)) > 0) {
            out.write(buffer, 0, len);
        }
        in.close();
        
    }
    out.close();

} catch(FileNotFoundException e){
    // エラー処理
} catch(Exception e){
    // エラー処理
}

アニメ : アルドノア・ゼロ 感想 第4話まで


このエントリーをはてなブックマークに追加
今期一番楽しい。3話以降、結構火星側の機体に弱点があることも見えてきているみたいなので、これからも頭脳戦でどうにかしていく展開に期待できそう。
あと音楽もすばらしい。サントラ期待。でも挿入歌は別なのかな?

地球側の人々

イナホが冷静すぎて常識人の範疇を超えてるけど、なんか背景あるのかなぁ。インコは普通に有能な常識人、という感じ。生き残って欲しい。死んだときの絶望感は多分半端ない。カームに、火星殲滅すべしという強硬派になるフラグが立ってるけど、イナホとかと敵対する未来もありうるかも?常識人っぽいので大丈夫だとは思うけど。あとは15年前の事件の生き残りの大佐とか、その事を気にかけている艦長とかこの辺りの伏線回収が楽しみ。

スレイン

精神的な安定感のなさが、イナホとの対比になっている感じ。出撃志願は、前線で、姫の保護か、暗殺者側を牽制しようとするとかかな。4話までは地球側チームの活躍がメインなので、何かを決意したっぽいこれからどう動くかに期待。

姫様と影武者

影武者の利用について「懐疑派の護衛隊長が無理やり…」と4話で従者の人が言っていたけど、この護衛隊長はどの陣営で、どうなったんだろう?暗殺者側で、後で本物の姫様を殺せばいいと思っていたのか、単純に地球人を信用していなかったから影武者を使うことにしたのか。

前者なら姫様はどうやって逃げたのか?という疑問が起こるので、正解は後者で、現在隊長含めて護衛隊が一人も姫様の側にいないのは、あの暗殺事件で全滅したとかかな(地球人による暗殺を警戒していたのなら、護衛隊の内何人かくらい本物の方に残していそうなもんだけど)。

本物の姫様が「あれは影武者でした」と報告できる前に戦争始まっていること含めて、この辺が伏線なのかご都合なのかはよくわからない。姫様に裏があったらそれはそれで面白いけど、どちらかといえば純粋に姫様であって欲しい。

敵機

ニロケラスもそうだったけど、機体本体にはそれなりに地球側の攻撃が通るし、パワー比べでも一瞬で負けるわけではないのですね。火星移住から40年くらいらしいので、オーパーツ(アルドノア)で得た力以外はそこまで圧倒的な差はないということでしょうか。単機で突っ込める程性能の優位性はない気がしますが、そこは火星騎士同士の領土争い優先?今後火星本国から量産機投入とかありえるのかな?地球側としては物量作戦で各個撃破が可能そうだけど、通信系が破壊されているから逆に各個(隊)撃破されているという感じか。

用語

APU  : 補助動力装置(Auxiliary Power Unit)。メインエンジンを起動するために必要な圧縮空気の供給、また駐機中における各装置(エアコンなど)への動力の供給に用いられる。

HE弾 : 榴弾(High Explosive)。弾の内部に火薬が詰められた砲弾を指す。

AP弾 : 徹甲弾(Armor-piercing shot and shell)。装甲に穴をあけるために設計された砲弾。

ライデンフロスト効果 : 液体をその沸点よりはるかに熱く熱した金属板などの高温固体に滴らすと、蒸発気体の層が液体の下に生じて熱伝導を阻害するために、液体が瞬時に蒸発してしまうのを妨げる現象。
要するに、銃弾の沸点をはるかに超えたビームサーベルによって、銃弾とビームサーベルの間に気体が発生し、銃弾がビームサーベルを横滑りして弾かれた、ということかな?こんなの普通知らないし、知識として知っていても思いつかないでしょう。。。

2014年7月26日土曜日

Android : startActivityForResult がすぐ Activity.RESULT_CANCELED を返してしまう(もしくは ConnectionResult.startResolutionForResult が)


このエントリーをはてなブックマークに追加
原因は、startActivityForResult を呼ぶ起動元の Activity の launchMode を singleInstance にしてしまっていた事でした。singleTask に変更して解決。

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleInstance" > <!--これ-->
    (...)
</activity>

launchMode については Y.A.M の雑記帳 : Android launchMode の違いに詳しく解説されているのでそちらを参照です。要するに、singleInstance の Activity はそれ単体でタスク(Activity のスタック)になるという設定なので、singleInstande のアクティビティから startActivityForResult を呼んで別の Activity を積むことができない、という事でした。

startActivityForResult で呼ぶ起動先のアプリが singleTask, singleInstance の場合も同じ問題が起こりそうです(singleTask, singleInstance のアクティビティはタスクのルートとなるので)。

Google Drive Android API を使おうとサンプルにそっていた際に、ConnectionResult.startResolutionForResult でこの問題に遭遇していたのでその辺りを探してしまっていましたが、問題はもっと基本的なところにありました。
無事、接続・認証の表示が出るようになり、これで先に進めそうです。

参考 : Android - startActivityForResult immediately triggering onActivityResult

2014年7月25日金曜日

Android : ActionBar の overflow アイコンを変える(ActionBar に入りきらなかったメニューをリスト表示するアイコン)


このエントリーをはてなブックマークに追加

アプリのテーマの Style で android:actionOverflowButtonStyleで指定します。styles.xml で以下のように設定。

<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light">
    <!-- Customize your theme here. -->
    <item name="android:actionOverflowButtonStyle">@style/ActionBarOverFlow</item>
</style>

<style name="ActionBarOverFlow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:src">@drawable/overflow</item>
</style>

ここで指定する src に指定するアイコン画像のサイズは、ActionBar のアイコンに指定するサイズ(32x32dp。xhdpi なら 64x64px、xxhdpi なら 96x96px。)と合っている必要があるようです。大きいサイズの画像を指定したところ、overflow メニューアイコンの表示が大きくなってしまいました。scaleType を fitCenter にしたところ画像のサイズは正常になったものの、アイコンサイズ自体は大きなままに。width 系のパラメータを設定しても変えられず。

ちなみに標準の overflow アイコンは ic_menu_moreoverflow_normal_holo_dark、ic_menu_moreoverflow_normal_holo_light、ic_menu_moreoverflow とかその辺りです。

参考 : Changing overflow icon in the action bar