最近の変更サイトマップ

アルトネリコ

微妙にネタバレ含むので、見たい人だけ続きを見て下さい。

ツンデレ+主人公より立場が上+ドジっこ(+ょぅι゙ょ)=シュレリア様

このトリプル(クアッド)コンボで、落ちないやつがいるだろうか、いやいない(反語)。

ヤバい、ヤバ過ぎる何がヤバいって <align center> シ ュ レ リ ア 様 が 超 絶 ヤ バ い </align> いやなに、アルトネリコの話なんですがね…。ゲームの面白さも然ることながら、シュレリア様が最高。シュレリア様にお目にかかれただけで、元は取れましたとも、ええ。本気でそう思ってます。シュレリア様に誓ってそう思ってます 正直言って、スクール水着って好きじゃなかったんですよ。でもね、わたくし、これを期に考え方を改めさせて頂きました。 <align center>いいじゃな〜い、スクール水着</align> タマ姉なんて、もう目じゃありません。タマ姉と、よっちと、ちゃると、UMAと、いんちょと、るーこを全部足したって、シュレリア様の足元にすら及びません。だって、 <align center>プレイ中ずっとにやけてたもの</align> ……………きんもー☆ と、とにかく、アルトネリコ、普通に面白いです。ハマります。買って6日になりますが、プレイ時間は50時間を超えようとしていま す。クリアだけなら30時間くらいで出来きますが、クリアだけとは言わず、色々なおまけ、やりこみ要素を是非とも堪能して頂きたい作品です。 そして、何より <align center> シュレリア様に悶殺されて下さい </align>

スワップの最適化

※注:本記事内容はv10.5 Leopard以降には適用できません。詳細

私は、Macは常に起動状態で使っている。出かける時や寝るときも基本はスリープモードなので、本当に電源が落ちている日は、年間通しても片手で数えられるくらいだと思う。「Macはそれだけ安定してるんだ!みんなも使おう!!」と言いたい訳じゃないよ、ホントに(笑

だが、ずっと付けっぱなしだと、システムが徐々に重くなって行く。たまの再起動後の軽さと言ったら、感動ものだ。それくらい重くなる。

この現象は、スワップファイル(仮想メモリ)の断片化が原因らしい。OS Xのスワップはデフォルトの設定だと、/private/var/vm 下に、まず64MBのファイルが確保される。それが埋まると64MB→128MB→256MB…の容量のスワップファイルが次々と生成されていく仕組みのようだ(10.4系の場合)。で、こいつらが断片化していくことで、動作速度に支障をきたすらしい。

この設定を変更するには、/etc/rc の205行目あたりにある、/sbin/dynamic_pager を変更する。ググってみると、/System/Library/StartupItems/VirtualMemory/VirtualMemory を書き換えるという説明が多いが、うちの環境(10.4.4)ではVirtualMemoryディレクトリが存在しなかった(一応、自前でVirtualMemoryディレクトリ以下を作ってみた物の、反映はされなかった)。

変更前:/sbin/dynamic_pager ${encryptswap} -F ${swapdir}/swapfile
変更後:/sbin/dynamic_pager -H 268435456 -L 1073741824 -S 536870912 ${encryptswap} -F ${swapdir}/swapfile

オプションはそれぞれ、
-H : スワップを生成する条件となる、空きメモリ容量
-L : スワップを削除する条件となる、空きメモリ容量
-S : スワップのサイズ
ということらしい。上の例だと「空きメモリが256MB以下になったら、512MBのスワップを作り、空きメモリが1GB以上になったらスワップを削除する」という動作になる。ここで言う空きメモリとは、物理メモリと仮想メモリ(スワップ)の合計の空きという点に注意されたい。

変更後、再起動して確認してみたところ、きちんと512MBのスワップファイルが出来ていた。再起動してまだ間もないため、効果の程はわからないが……。

2006-02-17 追記

前よりも重くならなくなったような気がしないこともない……。でも、既に512MBのスワップファイルが2つも出来てるんですけど(ー ー;)。Mac OS Xは、ホント大喰らいだなぁ。物理メモリ512MBじゃ、正直足りない………。

2006-03-14 追記

最適化前よりはスリープを繰り返しても重くならなくなった(気がする)。まぁ、Thunderbirdの常時起動を止めたり、必要外のソフトはすぐに終了するようにしたため、その影響も幾分かあるのだろうけど。

2006-12-02 追記

-H -S -L で指定する値には「(-Lのサイズ) &gt; (-H のサイズ) + (-S のサイズ)」という関係があるので、独自の値を設定する際には注意の程を。

2007-01-29 追記

某掲示板から参照されていたので、メモリが256M/512M/1GBの場合の設定例を考えて見た。参考にどうぞ。

■256MBの場合: -H 268435456 -L 1358954496 -S 1073741824
物理メモリが256MBではスワップに依存した動作が不可避なので、始めからガツンとスワップを確保して、常時スワップ有りで運用する。この設定ではスワップを1GBとしているが、HDDの使用効率を考えると512MB程度にしてもいいと思う。まぁ、256MBな人は早急に物理メモリ512MB、可能なら1GBに増設した方がいいと思う。操作感や作業効率を考えたら、512MBにする費用なんて微々たるものだと思う。

■512MBの場合: -H 268435456 -L 1073741824 -S 536870912
この場合も256MB程ではないにせよ、スワップ頼みの運用になるので512MB単位でスワップを確保し、常時スワップ有りとする。

■1GBの場合: -H 67108864 -L 352321536 -S 268435456
場合によってはスワップ無しでの運用も見込める為、スワップ生成・削除条件を緩めに設定。

デフォルトのスワップの動作が64MB→128MB→256MB→…なのは、メモリが潤沢に使えるという前提で、HDDの使用効率を考えての事だと思う。通常用途には充分なメモリを積んでるけど、たまたまメモリが足りなくなったから、ちょっとだけスワップを使って一時しのぎをしよう、みたいな。

あるいは、メモリをBTOで沢山載せさせる為の、Appleの策略とか………なわきゃないかw

あ、ちなみに、大規模なシステムアップデート(多分カーネルがらみの)が入ると、/etc/rcが設定前のものに戻る(アップデータに含まれる/etc/rcで上書きされてしまう?)ので、注意されたし。

Garbage collection

不要になった動的確保したメモリ空間を、システムが自動的に開放してくれる仕組み garbage collection。カタカナ表記だと「ガベージコレクション」となるが、英語の発音的には「ガーベッジコレクション」と表記するのが、正しいのではないかと思うのだけれど……。その辺、どうなってるんだろう。

そんな時はGoogle先生にお任せ!ということで、各単語での検索結果を調べてみた。

単語 件数
ガベージコレクション 23600
ガーベジコレクション 9310
ガーベッジコレクション 9470
ガービジコレクション 1
ガービッジコレクション 27

なかなか興味深い結果になった。

ガベージが一番多いのは当然として、ちょっとだけ原音に近いガーベジガーベッジ連合が<em>ガーベジ</em>勢力と、拮抗している点は面白い。一番原音に近いと思われるガービッジの結果は、同じような疑問を持った人々の、掲示板でのやりとりだった。……やっぱり疑問に思う人っているのね。

ググってみて、気になった点。

  • 用語解説系サイトではガベージガーベジが併記されているところが多いが、どっちかと言えばガベージをメインに据えている(ガーベジガベージの解説ページにリダイレクトされることが多い)。
  • でも、e-Wordsだけは、あくまでもガーベジ派の模様(ガベージがリダイレクトされる)。大好きだよe-Words。

なんか、うまい日本語訳無いものかねぇ。

NSArrayとNSTableViewとNSArchiverを学ぶ

どのクラスも、まぁ、その名前の通り。NSArrayは配列を、NSTableViewはテーブルビュー(Winで言う所の、エクスプローラで表示方法を「詳細」にした時に表示されるような形式)を、そしてNSArchiveはデータの保存に関するクラスである。

Windowsに関するプログラミング技法は全然知らないので比較はできないが、とにかくどのクラスも便利過ぎる。「この値を格納しろやー」「このデータを『商品名』フィールドに表示してくれやー」というメッセージを、それぞれのインスタンスに送るだけで、きっちりと期待通りの動作をしてくれる。

何より凄いのが、NSArchive。各オブジェクトに -encodeWithCoder: プロトコルを実装してやれば、保存したいオブジェクトに含まれる、別のオブジェクトまでを全て一発で保存してくれる。そうやって保存したデータの読込みは、NSUnarchiver クラスで一発OK。面倒な保存/読込み処理を、これらのクラスに丸投げできて、非常に便利便利。

前回のNSSoundとあわせて、簡易サウンドプレーヤを作る為の材料は、これで揃った。あとは実際に製作に取りかかるのみだ。頑張るぞー!!

メソッドのポインタ

Objective-Cのメソッドのポインタを取得して、メソッドをCの関数として呼び出す事が出来るのだとか。

// イニシャライズ
id obj = [Hogehoge new] ;
// メソッドのセレクタ取得
SEL method = @selector(methodOfHogehoge);
// セレクタからメソッドのポインタ取得
IMP func = [Hogehoge instanceMethodFor:method];<br />
// 関数としてメソッド methodOfHogehoge を実行
func(obj, method);

肝となるのは、instanceMethodFor: メソッド。こいつがセレクタ(メソッドの内部識別子)から、メソッドのポインタを探し出してくれる。その返り値を、IMP型で受け取るとあら不思議、Cの関数呼び出しの形でObjective-Cのメソッドが実行できちゃった。ただし、引数として元のメソッドが含まれるオブジェクトのインスタンスと、メソッドのセレクタを渡してやらないといけない。

とりあえずObjective-Cの勉強は一段落したが、俯瞰してみるとObjective-Cが「Cの枠組みの中でオブジェクト指向を目指した言語」であるということがよくわかる。そのお陰かCの流れを汲んだオブジェクト指向言語であるC++と比べて、言語規模は格段に小さい(と思う)。

表記方法がかなり特殊ではあるが、初心者がオブジェクト指向を学ぶには、Objective-Cは結構いい言語なのでは?と思ったりした。

start.txt · 最終更新: 2016-05-07 17:46 by decomo
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0