Strings of Life

PHP/Phalcon/MySQL/JavaScript/RegExp/Ruby/Perl/ActionScript

2013年02月

今使っているMacBook AirのSSDは128GB。OSとアプリ、音楽を入れておく位なら何とかなります。が、VMWare Fusionで仮想化したOSを使うには手狭。CUIのみなら1GBもいきませんが、GUIが付くと数GBは当たり前。Windows 7なら、インストール直後でも10GBくらい食います。

今までは外付けHDDにOSを置いて使っていたのですが、出来ればWindows7も持ち歩きたい。しかし、常時使うわけではないのでSSDには置きたくない。

ということで今回、SDカードにOSを置いて使ってみることにしました。購入したのはこちら↓

Transcend SDXCカード 64GB Class10 永久保証 [フラストレーションフリーパッケージ (FFP)] TS64GSDXC10E
Transcend SDXCカード 64GB Class10 永久保証 [フラストレーションフリーパッケージ (FFP)] TS64GSDXC10E [Personal Computers]

ベンチマーク結果は以下。
Results	23.00	
	System Info		
		Xbench Version		1.3
		System Version		10.8.2 (12C3006)
		Physical RAM		4096 MB
		Model		MacBookAir5,2
		Drive Type		APPLE SD Card Reader
	Disk Test	23.00	
		Sequential	23.67	
			Uncached Write	24.82	15.24 MB/sec [4K blocks]
			Uncached Write	23.41	13.25 MB/sec [256K blocks]
			Uncached Read	16.01	4.69 MB/sec [4K blocks]
			Uncached Read	42.48	21.35 MB/sec [256K blocks]
		Random	22.37	
			Uncached Write	9.97	1.06 MB/sec [4K blocks]
			Uncached Write	14.84	4.75 MB/sec [256K blocks]
			Uncached Read	520.07	3.69 MB/sec [4K blocks]
			Uncached Read	109.66	20.35 MB/sec [256K blocks]
Class10なので、SDカードとしては速い部類に入るのだろうけど、スコアは内蔵SSDの20分の1、外付けHDD(USB 3.0)の2分の1です。ただし、Random Readでは、HDDを上回る好スコアを叩き出しています。小さなファイルをたくさん置いて、保存用に使うには良い選択だと思います。

一つ難点なのは、SDカードを挿した状態でも、奥まで入り切らないこと。要は、こういう状態(写真)になります。出っ張ってるので、挿しっぱなしは危険な感じがします。挿しっぱなしで持ち歩けるなら、音楽ストレージとしても使用できるかなー、と思ってたのですが、それは無理そう。


ちなみに、Windows 7の仮想環境(.vmwarevm)をSDカードに置いて起動した状態での、Windowsエクスペリエンスインデックスは以下。

06

「ゲーム用グラフィックス」が低いため、Aeroを有効にしているとかなり重い。が、Aeroを切りさえすれば、まあ我慢できるかなレベルのパフォーマンスにはなる。

35

↑のように、対象となる通知の上にマウスポインタを載せた状態で右クリック(2本指クリック)すると、「アップデートを隠す」と表示される。これをクリックすれば、以後、隠すと選択したソフトウェアについてはアップデート通知が出なくなる(上の画像の場合、iTunes)。

アップデートを表示するように戻したい場合はメニューバーのStore>「すべてのソフトウェア・アップデートを表示」(ただし、すぐには回復しない?)。

14



この情報、本来ならOS X:ソフトウェア・アップデートの使用を停止する方法(アップルサポートページ)に載せるべきだと思うんですが、アップルのサポートページにはLionまでの方法しか載っていません。

日本語のページを検索しても、「アップデート通知全般を止める方法(システム環境設定>ソフトウェアアップデート>「アップデートを自動的に確認」のチェックを外す)」しか見つかりませんでした。

この記事の内容は、英語でググって見つけたMac Observerの記事を参考にしています。

再帰関数(recursive function)とは、自分自身を呼ぶ関数である。
function trouble () {
  trouble();
}
↑のように、関数内で自分自身を呼ぶことで繰り返し処理を行う。再帰関数について注意が必要なのは無限再帰である。trouble()は再帰の終了条件が設定されていないため、無限に自分自身を呼び出し続ける。再帰関数を書く際には、再帰の終了条件をあらかじめ設定しておくべきである。

再帰の古典的な例は、階乗計算である。
function factorial (n) {
  if (n < 0) {
    return; // 無効な入力なので終了
  } else if (n <= 1) {
    return 1;
  } else {
    return n * factorial(n-1);
  }
}

factorial(3) // 6
factrorial(5) // 120

もっとも、同じ処理はループを使うことでも実現できる。
function factorial (n) {
  if (n <0) {
    return;
  } else {
    var result = 1;
    for (var i = 1; i <= n; i++) {
      result = result * i;
    }
    return result;
}
再帰は複雑な問題を簡単な処理で解くことができる。しかし、関数を繰り返し呼び出すことは、ループに比べると処理の効率が悪いことが多い。また、Flashの実行環境は再帰の最大回数に制限を設けており、初期値では1000回までとなっている。


今日の進捗:2526→2553/20168(kindle用書籍フォーマット、mobi形式でのページ数)

プログラミングの常識ではありますが、PHPでも浮動小数点数の比較には注意が必要です。例えば、次のプログラム。
$a = 8;
$b = (0.1 + 0.7) * 10;

if ($a == $b) {
  echo '等しい';
} else {
  echo '等しくない';
}
「(0.1 + 0.7) * 10 = 8」だから、出力は「等しい」! と思いきや、「等しくない」と出力されてしまいます(実行環境によって誤差があるようですが…)。

これは、(0.1 + 0.7)の結果が、PHPの内部では 0.79999999999999991118...のようになっているからです。ちなみに、$b = 0.8 * 10; とすると、「等しい」と出力されます。浮動小数点数について詳しくは、PHPマニュアル:浮動小数点数を参照して下さい。


では、浮動小数点数の比較をするにはどうすればよいか? これもPHPマニュアルに書いてあるやり方ですが、
$a = 8;
$b = (0.1 + 0.7) * 10;
$epsilon = 0.00001; // 小数点数の丸め誤差上限

if (abs($a - $b) < $epsilon) {
  echo '等しい';
} else {
  echo '等しくない';
}
という風に、小数点数の丸め誤差上限を定めた上で、2つの値の差分の絶対値をとって誤差を測定すればよいのです。ここでは、小数点以下5桁の精度で比較しています。実験してみたところ、上のプログラムであれば、小数点以下40桁の精度でも「等しい」という結果が出ます。

多くのActionScriptのネイティブクラスと同様、Functionクラスのインスタンスもリテラル・シンタックスでつくることができる。関数リテラルは標準的な関数宣言と同様の文法だが、関数名は必要ない。
var square = function (n) {
return n * n;
}

square(5); // 25
関数リテラルは組み込み関数のflash.utils.setInterval()と一緒に使われることがある。次のような書き方をする:

setInterval(functionOrMethod, delay)

setInterval()関数はインターバル(一定時間ごとに動作する機能)を設定し、自動的に関数又はメソッドをdelayミリ秒ごとに実行する。インターバルが設定されると、interval IDとなる数字が設定され、setInterval()から返る。Interval IDは変数に代入できる。したがって、後からそのタイマーをclearInterval()によって停止することができる。


今日の進捗:208→211/1644

このページのトップヘ