Hatena::ブログ(Diary)

Project Hews by 木南英夫

2011-12-19

iOSプログラミング第2版の翻訳本を出版しました

iOSプログラミング 第2版

iOSプログラミング 第2版

f:id:hkinami:20111219221745j:image

iOSプログラミングというiPhone/iPadプログラミング書籍翻訳して、ピアソン桐原から出版しました。

# 同僚と3人で手がけたのですが、いろいろあって、3倍楽しめました!

書籍の内容は、Xcodeの使用方法から、基本的なGUIパーツを使ったプログラミング、そして、PushNotificaitonまで、非常に幅広くiOSプログラミングテクニックを解説しています

各章の最後には、「チャレンジ課題」や「より興味のある人へ」というセクションがあり、勉強会の教材としても有効です(私も勉強会で使用しています!)。

以下、各章で取り扱っている内容の紹介です。

第1章は、おきまりHello, World的なプログラミングサンプルを使った入門の章です。

第2章と第3章では、Objective-Cメモリ管理概要を説明します。これらの章をきちんと理解することで、本格的なiOSプログラミングの基礎を理解することが出来ます

第4章と第5章では、Core LocationとMapKitフレームワークを扱いますAndroidでもそうですが、やはり、Mapアプリケーションを動かす事で、モバイルアプリケーション醍醐味を味わう事が出来ます

第6章と第7章では、ビューのスクロール、ズーム、ページング、画面間のナビゲーションなどを解説します。

第8章では、iPhoneの加速度センサーを扱う事で、デバイスの扱い方を学びます

第9章では、通知のメカニズムを理解し、アプリケーション内での自動回転の実装方法を解説します。

10章、第11章、第16章では、Table View、Table View Controller、データソースを扱いますiOSアプリケーションではとてもよく使用されるパターンです。

12章は、UINavigationControllerでドリルダウンインターフェイスとNavigation Barの使用方法を解説します。

第13章では、カメラでの写真撮影方法画像を表示、保存する方法を学びます

第14章では、iPad用のUIPopoverControllerとモーダルView Controllerについて学びます。さらに、iPhoneiPadの両方でネイティブ実行できる方法を取り扱います

第15章では、データの保存とロードの方法特に、NSCodingプロトコルを使ってデータアーカイブする方法を扱います。この章ではマルチタスキングと、アクティブバックグラウンド、一時停止などアプリケーションの状態遷移への対応についても説明します。

第17章はCore Data入門です。データの保存とロードにNSManagedObjectContextを使う方法を解説します。

第18章、第19章では、国際化とローカリゼーション、NSUserDefaultsなどを取り扱います

第20章では、マルチタッチ機能の追加と、タッチイベントについてさらに学びます

第21章では、Instrumentsアプリケーションや、Xcodeスキームとスタティックアナライザについて解説します。

第22章と第23章では、レイヤとCore Animationフレームワークを扱います

第24章では、Objective-C重要な特徴であるブロックカテゴリを扱います。(ちなみに、ブロック概念は、新しいマルチスレッドプログラミングパラダイムであるGCD(グランドセントラルディスパッチ)を有効活用するためにも必要です。)

第25章では、Webサービスへのアクセスで使用する、NSURLConnection、NSXMLParserや、WebViewを取り扱います

第26章では、UISplitViewControllerを解説します。

第27章では、音声とビデオ再生方法を説明します。

28章では、Bonjourを使ってネットワーク上のデスクトップアプリケーションを見つけるiOSアプリケーション作成します。

第29章では、Push Notificationを取り扱います

そして、最後訳者補記では、「Xcode4.2を使ったQuizアプリケーション」ということで、最新のXcodeを使用したサンプルの作り方を解説しています

内容的には中級者向けの内容の濃い本ですが、実際に演習を行いながら進める事で、入門者の方でもiOSの全体像を理解できるのではないかと思います

興味があるかたは、ぜひ、本屋さんで手に取ってご覧下さい。

2011-08-10

Programming Android感想

Programming Android

Programming Android

Programming Androidをざっと読んだので、ちょっとした感想です。

この本の章立ては、以下のようになっています。

  • Chapter 1 Your Toolkit
  • Chapter 2 Java for Android
  • Chapter 3 The Ingredients of an Android Application
  • Chapter 4 Getting Your Application into Users’ Hands
  • Chapter 5 Eclipse for Android Software Development
  • Chapter 6 Effective Java for Android
  • Chapter 7 Building a View
  • Chapter 8 Fragments and Multiplatform Support
  • Chapter 9 Drawing 2D and 3D Graphics
  • Chapter 10 Handling and Persisting Data
  • Chapter 11 A Framework for a Well-Behaved Application
  • Chapter 12 Using Content Providers
  • Chapter 13 Exploring Content Providers
  • Chapter 14 Multimedia
  • Chapter 15 Location and Mapping
  • Chapter 16 Sensors, NFC, Speech, Gestures, and Accessibility
  • Chapter 17 Communication, Identity, Sync, and Social Media
  • Chapter 18 The Android Native Development Kit (NDK)

一言でいうと、中上級者向けのAndroid解説書といったところです。

以下、ちょっと気になった章です。

Chapter 2. Java for Android

Androidの本にしては珍しく、Javaの基本を解説しています。

InterfaceやAnonymous Classなど、Androidアプリを書くときにJava初心者がつまずきやすい点をきちんと解説していることろは、とてもよいと感じます。

Capter 6. Effective Java for Android

この章は、Android開発で必要になる実践的な項目が丁寧に解説されています。

特に、AsyncTaskやThreadの解説などは、ネットワークアプリケーションを組む上で重要ポイントなので、独立した節として解説している点は好感が持ています。また、初心者本ではあまり触れられないAIDLやPercelableの解説もよいと思います。

Chapter 16 Sensors, NFC, Speech, Gestures, and Accessibility

NFCは、Android 2.3の肝となる機能であり、この章のなかでも比較的丁寧に解説されている点が良い点だと思います。だた、NFC以外の項目がかなりあっさりとしている点が少し気になります。

Chapter 16 The Android Native Development Kit (NDK)

NDKは完全に上級者向けの機能ですが、Native Activityなど必要な部分をきちんと解説してる点がよい点だと思います。このあたりの解説書は比較的少ないので、重宝しそうです。

全般的にいうと、凝ったサンプルコードをのせずに、シンプルなサンプルを、きちんと言葉で説明している本だと思います。ソースコードを実行しないでも、本を読むことで理解が進むという意味では、読み物的な技術書好きな人向けでしょうか?

少し、もの足りない点は、Android 3.0がほとんど解説されていない点ですが、これは、執筆時期の関係でしかたがないと思います。また、項目によって解説の量のばらつきが大きいのも少し気になりました。

2011-08-06

Android SDK 開発クックブックのレビュー

Android SDK 開発クックブック

Android SDK 開発クックブック

今年のはじめから翻訳のお手伝いをしていた、「Android SDK開発クックブック」がPEARSONから発売されています。

この本の特徴は、Androidの代表的な機能をサンプルプログラムを中心に解説している点です。

例えば、自分アプリにちょっとプログレスバーを付けたりSMSの送信機能を付けたいときに、基本的な使い方のサンプルコードをみながら理解することができます。

もちろん、基本的なサンプルをそのまま使用する事もできますが、ここを手がかりに本当に自分がやりたいことを掘り下げていくことができます。たとえば、SMSを送信するには、SEND_SMSパーミッションを設定する、SmsManagerを取得する、sendTextMessageを使用して送信するということが理解できると、あとは、対応するリファレンスマニュアルを掘り下げることができます。

以下、本の目次と簡単な感想です。

第1章  Android の概要

Androidの歴史とともに、初期のAndroid搭載機器(HTC Dream/G1からSamsung Galaxy S)のCPURAMサイズなどのスペックが載っています。

HTC Dream/G1の名前をみると、感慨深いものがあります。)

また、Android SDKインストールからマーケットのアップロードまでの概要が記載されています。

第2章 アプリケーションの基本:アクティビティとインテント

Androidといえば、やはり、まず、アクティビティとインテントという定石どおりの展開です。

アクティビティのライフサイクルや、暗黙的なインテントの使い方などが解説されています。

ちょっとしたTipsとしては、「スクリーン方向の強制に載っているandroid:screenOrientation="portrait/landscape"の指定のほかに、ハードキーボードスライドして出された場合の処理として、android:configChanges="orientation|keyboardHidden"を指定する」といった情報などでしょうか?

第3章 スレッドサービス、レシーバ、アラート

ネットワーク関連の処理を行う場合にはさけて通れないスレッド処理、バックグラウンドで走るサービスレシーバーを使用したアプリケーションウィジェットレシピが載っています。

ウィジェットアプリケーションに対してダイナミックなショートカットを作れるという点でAndroidの肝なので、ちょっと押さえておきたいところです。

第4章 ユーザインタフェースのレイアウト

一般的な開発者が苦労するユーザーインタフェースのレイアウトのレシピです。

基本的なレイアウトからテキスト操作方法プログレスバーの使い方などが載っています。Tipsとしては、SeekBarのスライディングボックス画像を指定するあたりでしょうか?

第5章 ユーザインタフェースイベント

物理キープレイスの受け取り方法(onKeyDown/onKeyUp)やジェスチャやOpenGL ESの使い方といった、かなりマニアックな使用方法レシピが載っています。

このあたりは、実際に動くサンプルがあるというのは、最初の一歩としてはとても貴重だと思います。

第6章 マルチメディア技法

画像イメージや音声データハンドリング方法レシピが載っています。

音声を録音する方法などは、普段はあまり使われない機能なので、ちょっと勉強になりました。

第7章 ハードウェアインタフェース

カメラ、オリエンテーション、電話Bluetoothなどのレシピが載っています。

特にBluetoothは、興味はあってもなかなか使ってみる機会がないので、出発点としては有用だと感じました。

第8章 ネットワーキング

SMSとHTTP GET/POSTのレシピが載っています。

HTTP POSTのサンプルはとてもシンプルですが、さりげなくAsyncTaskの使い方を説明していたりします。

第9章 データストレージ技法

共有プリファレンスSQLite データベースコンテンツ・プロバイダーのレシピが載っています。

共有プリファレンスは設定画面を作る手間をぐっと簡単にしてくれるので、覚えておいて損の無い機能だと思います。また、データの件数が多くなる場合に必要となるSQLiteの使い方も解説されています。

10章 位置情報に基づくサービス

Android本ではお約束位置情報とMapsの使い方です。

Tipsとしては、ジオコーディング、逆ジオコーディングの使い方のあたりでしょうか?Maps上に画像を配置するOverlayの使い方などもMapsを使いこなす上では必須の項目ですね。

11章 高度な Android 開発

カスタムビュー、ネイティブコンポーネント、セキュリティ、プロセス間通信、バックアップマネージャ、アニメーションなど、かなり高度な項目が取り上げられています。

バックアップマネージャを使えるようになると、アプリケーションによっては、他のアプケーションとの差別化につながるかもしれません。

12章 デバッグ

DDMS、adb、LogCatの使い方が簡単に説明されています。

TraceViewは普段あまり使わないのですが、きちんとパフォーマンスチューニングするときには活躍するツールなので、一度は使ってみておきたい機能です。

全体的な感想

この本自体は、初心者向けではなく、ある程度Androidの開発ができる開発者が、使用法をちょっと思い出すときの取っ掛かりとして有用な本だと感じています。

約300ページという分量のなかにサンプルコードが多く掲載されているため、プログラム自体の詳細な説明はありませんが、必要なポインターにたどり着くにはちょうどよい感じです。

ちなみに、著者の柴田芳樹さんは、『プログラマー”まだまだ”現役続行』などの自著の他、『プログラミング言語Java 第4版』や『Effective Java 第2版』など多くの本の翻訳も手がけています。このため、今回の翻訳では、原著者と連絡をとりながら、すでに動作しなくなっているサンプルコードの修正や、Javaコーディングスタイルに合わせたソースコードの修正など、日本語版に向けた多くの改善が入っているようです。

2011-08-01

Androidの6x6cm(ロクロク)を使ってみました

リリースから2ヶ月もたってしまいましたが、Androidアプリの6x6cm(ロクロク)を使ってみました。

http://www.6x6.cm/

使ってみての第一印象は、「シンプル楽しいカメラアプリ」です。

特徴は、撮ってすぐにエフェクトをかけて、TwitterとFacebookにアップロードできるという点です。

作者のブログにかいてあったように「ちょっとみてみて!」という気持ちをシンプル表現できるような気がします

やはり、楽しいのはエフェクトです。

ベランダからとった前の公園の遊具写真に、Toyのエフェクトをかけたら箱庭のようになりました。

f:id:hkinami:20110801180715j:image:w360

その他にも、いくつかのエフェクトをかけてみました。

行きつけのカフェをsepiaで

f:id:hkinami:20110801180718j:image:w360

今日一言をnegativeで

f:id:hkinami:20110801180717j:image:w360

Lineでエフェクト

f:id:hkinami:20110801180716j:image:w360

写真をとって、コメントを入れて、見てもらうというサイクルが楽しくなりました。

ちなみにFacebookに投稿すると以下のように表示されます

f:id:hkinami:20110801180719p:image

しばらく、つかってみようと思います

2011-03-20

検索エンジンはなぜ見つけるのか

「検索エンジンはなぜ見つけるのか」という本を献本していただいたので、早速読まさせていただきました。

すでに、生活の一部と化している検索エンジンの基本を、ともて身近な例を使って説明されています

冒頭で記憶に残ったのは「検索エンジンが、実はどんなしくみで動いているのか、疑問を持つ方は少なくないと思われます」という言葉でした。

確かにそういわれるとかなり興味のある話題なのですが、すでに空気のような存在になっている検索エンジンなので、疑問を持つ事を忘れてしまっていたなぁというのが僕の感想でした。

そういった観点で読み進めてみると、この本は、検索エンジンに対する興味をたくさん刺激してくれる本です。

内容的には、以下のような構成になっています

  • 第1章 検索エンジンの目指すもの: 利用者の情報要求に対して、ウィブ上の情報資源のなかから最善の情報を見つけ出してくる
  • 第2章 集める: クローラの役割と課題(分類問題、学習
  • 第3章 整理する: 「最低のコスト」で高速に検索を実行する(検索対象文書量とスループット
  • 第4章 検索する: 利用者に「最善の検索結果」を返す(スコア、パーソナライゼーション、リコメンデーション

各章で、図書館や出雲の国の神々などの比喩を使用することで、とてもイメージしやすい形で技術の説明があります

エンジニアという観点でみると3章のアルゴリズム的な部分はとても面白く感じましたが、今後の可能性という意味では、やはり、4章の「検索する」という部分が一番興味深いです。ウェブページのスコアが「非ゼロサムゲーム」であり「囚人のジレンマ」が発生することや、「多義語、類義語」の問題、パーソナライゼーション、リコメンデーション課題など、こらから技術の方向性を考えさせられる内容です。

また、この本のもう一つの魅力は脚注にあると思います最後まで読み終わった後に脚注だけを追ってみると、また新たな興味がわいてきます

かなり短時間で読める本ですが、細かく読むことで色々な発見ができる本だなぁと感じました。

2010-12-07

Android 2.3 (Gingerbread)が公開

ようやく、Android 2.3 (Gingerbread)が公開されました。

今回の機能的な追加は、いろいろなサービスハードウェアへの対応と、ゲーム作成のためのグラフィックスやNDKのエンハンスなどがメインです。

全般的には、Gingerbread対応ハードウェアや、サービス(VIOPやNFCなど)が市場に出てきてから威力を発揮する機能が多いように感じます

今回のアップデートでは、クストララージスクリーンの宣言はあるものの、フレームワーク的にはタブレット対応は見送られ、このあとの、Honeycombでの対応となるようです。

今回、開発関連の機能に関しても、数多くの拡張が行われています。気になるのは、新しいUIビルダーです。見た目は、それほどドラスティックには変更されていないようですが、細かい点で、使いやすくなっているようです。

  • 新しいUIビルダー (Eclipse Plugin)
  • HierarchyViewerのエンハンス
  • Debugビルドの簡略化(<application>に、android:debuggableを指定する必要がなくなった。)
  • パフォーマンスチューニング用にStrictModeが追加
  • ProGuardのサポート
  • NDKで、Activityのライフサイクルが扱えるようになった
  • monkeyrunnerの追加
  • adbの場所が変わった。<SDK>/tools/adbから <SDK>/platform-tools/adbになった。PATH環境変数の変更が必要
  • Dev Guideに、「Testing」の項目が追加 (前からあったかも、、、)
  • Dev Guideに、「Web Applications」の項目が追加(前からあったかも、、、)

ちなにみ、毎回わかりにくいバージョン番号ですが、今回、ADTバージョンが0.9から、8.0へと変更されています。ちょっと、焼け石に水的な気もしますが、普段はあまり気にならないので、まぁ、よしとしましょう。

ちなみ、今回のバージョン一覧です。

Android 2.3 Platform

  • API Level 9
  • SDK Tools, Revision 8
  • Android Development Tools (ADT) 8.0.0
  • Native Development Tools (NDK) Revision 5

2010-11-27

ユニークAndroid本2冊

プロフェッショナルAndroid ゲームプログラミング

プロフェッショナルAndroid ゲームプログラミング

久々に、2冊のユニークAndroidの本に出会いました。

 一冊は、「プロフェッショナルAndroidゲームプログラミング」です。

 この本は、Androidの基本言語であるJavaと、それを補うC言語ネイティブライブラリを組み合わせたハイブリッドアプリケーション作成ガイドです。

 入門本ではなかなか取り扱えない、JNI(Java Native Interface)、Java OpenGLだけではなく、ネイティブコードによるOpen GLといった、かなり現実的な解説まで踏み込んでいます。

 もう一冊は、「Android アプリUIデザイン& プログラミング」です。

 日本人で唯一のADP1のファイナリストの渡嘉敷さんが、ご自身のアプリ開発の経験を通して、アプリの開発の全体像を解説しています。

 この本がユニークな点は、プログラミングではなく、アプリ開発のプロセスを扱っているという点です。具体的には、アイデアの探し方から、実現性の確認、デザイン、設計、実装、マーケットへのリリースフィードバックの分析までを扱っています。

 特に、デザインのパートには、多くのパートでその重要性に触れられています。僕を含めて、多くのプログラマーが、デザインに対して不安を感じていると思うので、とても有用な本だと感じました。

 2冊の本を読んで感じたのは、最近アプリケーション価値の中で、特にユーザーインタフェース比重が高くなってきているということです。

 そして、優れたユーザーインタフェースは、単純なデザインフェーズで作られるものではなく、アプリケーション開発全体のプロセスを通して作られるものだということに、気がつかされました。

 最近Android開発者を見ていて気がつかされるのは、このような開発プロセスが、一人、もしくは、数人の開発者によって行われているという点です。これは、一昔前には、企画、開発、営業といった企業で行われていた開発プロセスです。それが、たった一人の開発者の中で行われ、世界中ユーザー価値提供できる可能性があるという所に、Android価値があるような気がします。