オライリー電子書籍:Kindle版とオライリー版の違い

↓は最近買ったMac OS Xの解説書。

Learning Unix for OS X Mountain Lion
Learning Unix for OS X Mountain Lion

本書は紙、オライリーのeBook(DRM Freeのpdf/epub/mobi/DAISY)、Amazon
Kindle版の3バージョンが入手できる。価格はそれぞれ1,554円(Amazon.jp)、12.99ドル(o’reilly
media)、753円(Kindle Store JP)で、Kindle版が一番安かったので、今回はKindle版を購入してみた。

ただ、日本のKindle
Storeの本は現状、Kindle/iOS/Androidのいずれかでしか読めない(Mac版Kindleアプリは、日本のKindle
Storeに対応していない!)。利便性を考えると、多少高くてもオライリー版のeBookの方が良かったかな。。。

……と思いながらKindle版を読んでみたところ、冒頭にアップグレードオプションの提示があった。Kindle版の購入者は、$4.99の追加料金を支払うことで、オライリー版にアップグレード出来るらしい。Kindle版とオライリー版の違いは以下。

☆Kindle
・DRM付き
・mobi(Kindle用の電子書籍フォーマット)のみ

☆オライリー
・DRM Free
・mobi/ePub/PDF/DAISYが入手可

他に、オライリー版だと「Lifetime Update」が付くらしい。たぶん、正誤訂正のこと。逆にいうと、Kindle版は初版の誤りがそのまま残ってるのか…?

ともあれ、オライリーの電子書籍には基本的に2つのバージョンがあることがわかった。オライリーから直接販売されている「フルバージョン」と、オライリー以外で販売されている「廉価版制限付きバージョン」である。

● 2013-03-10追記

Kindle版は、クラウド上で蔵書管理したり、読書の進捗を別のデバイス間でも共有できるのに対し、Kindle以外で購入した書籍をKindle(端末|アプリ)で読む場合には、蔵書管理や進捗共有ができない。したがって、オライリー版は、Kindle版の完全上位互換ではない。

個人的には、(2013-03-10現在)PCで閲覧できないという不便さを考えてもなお、管理の容易さや進捗共有の便利さから、オライリー書籍はKindle版を好んで買っている。とはいえ、オライリー・ジャパンの電子書籍は現状Kindle版が皆無で、ほとんどpdf版しか入手できないのだけど…

『カンフーマック』を読了

カンフーマック ―猛獣を飼いならす310の技
カンフーマック ―猛獣を飼いならす310の技

オライリーのpdf電子書籍を買ったのはこれが初めてなのだけど、Macで快適に読むことができた。最近iPad miniも買って本格的に電子書籍を読む環境が整ったので、今後はオライリー本は電子書籍メインで買っていこうと思う。(とか言いつつ、カレンダー目当てで『インタフェースデザインの心理学』買ったり。。。)

で、本書『カンフーマック』について。原著は、300個のtipsを雑然と並べたものだったらしい。訳者は本書に惚れ込んだようで、それらのtipsを整理し、章立てして体系性を持たせ、さらにMac初心者向けの基礎知識の補充やiCloudの解説、Mountain Lionでの動作確認等、原著にこれでもかというほどの+αを載っけている。本書に関して、原著と邦訳のいずれを選ぶべきか問われたら、迷わず邦訳をオススメする。

一方、本書が他人に勧められる本かというと、正直言って微妙。。。300個も載っているのだから、1つや2つ、いや10個や20個くらいは「これは」というtipsが見つかる。私も、Spotlightの使い方を教えてもらった。

ただ、一つ一つのtipsはあくまで表面的なので、本としての「栄養価」は今ひとつに感じられる。これで3000円近くするのはちょっとなあ、という印象。本屋で立ち読みして、気になるtipsがいくつも見つかったら買ってもいいかも。

Essential ActionScript 3.0 読書メモ 第30回 定数

定数(Constants)は、最初に定義した値が変わることのない変数である。定数を作るには、varキーワードの代わりにconstキーワードを用いる。伝統的に、定数は全て大文字で名付ける。値の変わらない静的変数の定義は次のように書く。

static const IDENTIFIER = value;

値の変わらないインスタンス変数/ローカル変数を定義するには、次のように書く。

const IDENTIFIER = value;

定数として定義された変数に値を再代入しようとすると、エラーになる。

定数は、典型的には、固定値によってプログラムの設定を定義する静的変数として用いられる。例えば、ブログの背景色を設定するプログラム中で、背景色の色を定義するには、次のように書く。

public class Blog {
  // それぞれの色に対応する数値を設定
  public static const BACKGROUND_RED = 1;
  public static const BACKGROUND_GREEN = 2;
  public static const BACKGROUND_BLUE = 3;
 
  // 背景色の初期値を設定
  private var background = Blog.BACKGROUND_BLUE;
 
  // backgroundに入っている値を元にして背景色を実際に設定
  private function setBackground () {
    if (background == BACKGROUND_RED) {
      // 背景色を赤に
    } else if (background == BACKGROUND_GREEN) {
      // 背景色を緑に
    } else if (background == BACKGROUND_BLUE) {
      // 背景色を青に
    }
  }
}

定数は、プログラムを動かすために必須の要素ではない。定数を使わなくても、同じように動くプログラムは作れる。しかし、定数は、数値の目的を分かりやすくしてくれる。また、値を変更する際にも、定数定義の箇所だけを書き換えれば、その定数を使用した箇所は全て書き換わるため、メンテナンス性も向上する。

なお、プログラム中にそのまま書かれた数値のことをmagic numberという。magic numberを多用したプログラムは、作り変える際に苦労する。

今日の進捗:182→186/1644

Essential ActionScript 3.0 読書メモ 第29回 個数の不明なパラメーターを扱う

静的変数の次は静的メソッド、なのだけど、1つ節を抜かしていたので、そちらを先に。「個数の不明なパラメーターを扱う(Handling an Unknown Number of Parameters)」。

メソッドを呼ぶ際、必須パラメーターに不足があるとエラーになる。同様に、メソッドが必要とする以上の個数のパラメーターを与えてもエラーになる。

引数の数が動的に変わるメソッドを定義するためには、「…」パラメーターを用いる。「…」パラメーターは、メソッドが受け取った引数を格納する配列を定義する。単独でも、名前のあるパラメーターと一緒にも使える。

例:

public function getAverage (…numbers) {
  var total = 0;

  for (var i = 0; i < numbers.length; i++) {
    total += numbers[i];
  }

  return total / numbers.length;
}

getAverage(1, 2, 3); // 2
getAverage(1. 2, 3, 4, 5); // 3

配列numbersが、引数を全て受け取って格納する。

「…」パラメーターは、名前のある変数と一緒にも使える。その場合、「…」パラメーターは引数の最後に配置しなければならない。
例:

public function newArticle(title, …tags) {
  this.title = title;
  for (var i =0; i < tags.length; i++) {
    this.tags[i] = tags[i];
  }
}

newArticle(“editor”, “emacs”, “vim”); // title = “editor”; tags = (“emacs”, “vim”)
newArticle(“language”, “ActionScript”. “PHP”, “Ruby”); // title = “language”; tags = (“ActionScript”, “PHP”,
“Ruby”)

Essential ActionScript 3.0 読書メモ 第28回 静的変数

これまでに、インスタンス変数とインスタンスメソッドを使って、オブジェクトの性質や振る舞いを定義する方法を学んできた。続いて、クラスそれ自身の情報を制御したり、機能を創りだしたりする方法を学んでいく。今回は、静的変数について学ぶ。

今まで学んできたインスタンス変数は、クラスの特定のオブジェクトに関連する変数だった。対して、静的変数(Static Variables)は、クラスそれ自身に関連する変数である。

例えば、ダイアログボックスのクラスにおける、新しいダイアログボックスのサイズの初期値だとか、自動車を表すクラスにおける、自動車のインスタンスの最高速度などである。

インスタンス変数と同様、静的変数はクラス定義の中で変数定義を行う。しかし、静的変数の定義は必ずstatic属性を含まなければならない。
例:

class SomeClass {
  static var identifier = value;
}

インスタンス変数と同様、アクセスコントロール修飾子によって静的変数のアクセス権限を制御することもできる。静的変数には、インスタンス変数と同様、public, internal, protected, privateの4種類のアクセスコントロール修飾子が利用できる(アクセスコントロール修飾子を伴わない場合は、internal)。
例:

class SomeClass {
  private static var identifier = value;
}

静的変数にアクセスするには、次のような書き方をする。

SomeClass.identifier = value;

SomeClassはその静的変数を定義したクラスである。クラス名と変数名の間には「.(ドット)」をつける。

静的変数を定義したクラスの内部であれば、クラス名はなくても構わない。が、多くのプログラマーは、クラス内部で静的変数にアクセスする場合にもクラス名をつける。

同じクラスの中に、同じ名前の静的変数とインスタンス変数は同居できる。例として、Blogというクラスの中に、titleという静的変数とインスタンス変数があると考える。クラス名を指定せず、単にtitleと書いた場合は、titleはインスタンス変数を表す。静的変数にアクセスできるのは、Blog.titleという風に、クラス名を伴って書いた場合だけである。

今日の進捗:366→384/3546