あ、あれ?
最近ちょこちょこ読んでるTypes and Programming Languagesなんですが、どうも全体をパラ見した感じA正規化とかの話題はないっぽい? 或いはλ式の変換式とかでの議論はないっぽい?
ちょっと期待はずれでしょんぼり。
まあパラ見で英語が読めるほど英語力ないので数式とかBNFしか読んでないですからね、見落としてる可能性は高いのです。どっかに載ってる事を期待して読み進めます。
最近ちょこちょこ読んでるTypes and Programming Languagesなんですが、どうも全体をパラ見した感じA正規化とかの話題はないっぽい? 或いはλ式の変換式とかでの議論はないっぽい?
ちょっと期待はずれでしょんぼり。
まあパラ見で英語が読めるほど英語力ないので数式とかBNFしか読んでないですからね、見落としてる可能性は高いのです。どっかに載ってる事を期待して読み進めます。
内容難しいし英語だし。。。
正直何度も読み返すのは英語な分だけ労力がバカにならないのでメモしながら読まざるを得ないと感じました。
というわけで数学的なつぶやきが今後増えるかも。
#計算理論の基礎も読んでるしね! 全然基礎じゃねえよあれ!
今年に入ってからなんかやたらとラノベ読んでます。
気まぐれに大人買いしたけんぷファーに始まって "文学少女"、ごくペン、電波的な彼女、バカとテストと召喚獣、嘘つきみーくんと壊れたまーちゃん、サクラダリセット、それはゾンビですか?、俺と彼女が魔王と勇者で生徒会長、オオカミさんシリーズ、シュガーダーク、森口織人の陰陽道。一巻から随時買っているそれゾンとサクラダリセット以外全部大人買いです。
久しぶりに調べてみたらウィザーズブレインも持っている分から続刊しているのでぼちぼち買うかなと思ってたりします。
ソードワールド2.0のリプレイも余さず買ってるので今年の文庫読書量半端ねえす。こんなにラノベに類する文庫読んでるの10年ぶりぐらいです。高校時代に戻ったかのようですよ。当時と違ってブルーバックス読んでませんが。
#いやでもプログラミングとか数学とかで専門書は読んでるからなあ。
感想は次以降のエントリに書き。。。気が向いたら書きます。
つかアフィリエイト稼ぎにいっぱいリンク貼るつもりで書き始めたエントリなんですが、多すぎてめんどくさいのでストアにしました。
というわけでこちらどぞー。
ひさしぶりでもない気もしますが履歴見ると二週間ポチってなかったみたいなのでひさしぶりです。
今年に入ってからはまりっぱなしの計算論。お次はわんくま勉強会名古屋#13の懇親会でオススメされた本。
セッション中に「CPS変換周りは資料が全然なくて理解度が低い」とか「CPS変換とβ簡約を一気にやっちゃうA正規化なんてのがあります」とか言ったらそこら辺の議論が載ってますよと教えてくれました。
おうち帰ってとりあえず検索してみたらいぇいご! どうも邦訳はないようです。
ちっくしょう紹介してくれた人自動形式証明とか研究してる人だもんなー。脳的セレブは英語すらすら読めちゃうんだろうなー。
とか愚痴りつつぽちり。読めない訳じゃないからね。
ここで久しぶりの囲碁の本。
最後は本ではなくてCD。
何となく聞いてたら歌いたくなったのでおぼえる事にしました。
でもiTunesで見つからなかったのでCDでポチり。
歌いやすくていいですね。PVがいまいち気に入りませんが。
以前のエントリに書いたとおり、ちょこちょこ計算論を読んでます。
でも集合論をちゃんと勉強したことのない長月には難解です。
本当にゆっくりゆっくりと理解しながら進むことにします。今まで一度読んでわかった気になって薄っぺらなままきているので、ここで一回ちゃんと数学的な基盤を自分の中に作っておくべきだと思いました。
ので、ちゃんと読んでちゃんと考えて、考えた事はメモして行こうと思います。
とりあえず初メモ。
例1.3.2.に出てくる1変数関数pred(x)=xー1について。
定義)
pred(0)=0=zero(),
pred(x+1)=x=p21(x, pred(x))
理解のために手で展開してみる。
pred(0)=0
pred(1)=pred(0+1)
=p21(0, pred(0))
=p21(0, 0)
=0
pred(2)=pred(1+1)
=p21(1, pred(1))
=p21(1, pred(0+1))
=p21(1, p21(0, pred(0)))
=p21(1, p21(0, 0))
=p21(1, 0)
=1
pred(3)=pred(2+1)
=p21(2, pred(2))
=p21(2, pred(1+1))
=p21(2, p21(1, pred(1)))
=p21(2, p21(1, pred(0+1)))
=p21(2, p21(1, p21(0, 0)))
=p21(2, p21(1, 0))
=p21(2, 1)
=2
超納得いった。手をうごかすの大事ですね。
あとblogとかで数式書くのめんどくせえ。誰かWLW用にTeXプラグインとか作ってくだしあ。
長月はマンガが大好きです。たくさん読んでます。
たくさんあっていちいちblogには書かないんですが、今回は読後感がよいのでちょっと書いてみます。
今回紹介するのは上橋菜穂子さんの獣の奏者のコミカライズ版第二巻です。
NHKでアニメが放映されていて割と名前が売れている作品だと思うのですが、本作品は上橋原作の他メディア展開版の中では一番のお気に入りです。
藤原カムイさんの精霊の守人コミカライズ版もすごかったんですが、本作は同様に「広く」てすごいです。さらにエリンがかわいい。すごく子供らしさが出てます。
獣の奏者序盤では生き物に興味津々で子供らしくかわいらしいエリンが大きな見所ですが、その見所をマンガらしい形で表現出来ています。
アニメ版が正直あんまりかわいくなかったのでその分マンガ版でかわいいエリンを堪能してます。
アニメ版をちょっと見てやめた人も一度読んでみては?
今度はTRPG関連。発売予定忘れてた。
中さんに言われるまで忘れてました。中さんは入手済みの模様。
最近忙しいからGM出来ないかもなーなので、情報量では同等のはずの中さんマスターを楽しもうかと思います。
というわけでまた本を発注しました。
計算論読んでて集合論の知識不足を感じたので集合の本を。
最近λ計算とか圏論とかに興味を持ってるものの前提知識不足で全然理解が進みません。来年四月ぐらいにわんくま勉強会 in 東京でλ計算の話しようかと思っているのに間に合うんでしょうか。
というわけで最近読んでる/読み直したい本のエントリ四つ目。
何度読んだかわからないというか、GMやってる都合上周りの誰より参照時間が長い以下四冊。
この辺りはゲームやっててGMってめんどくさいなーと10年ぶりに思ったので、「ただ遊んでたあの頃とは違うのだよ!」と補助ツール作ろうかとか思ってます。せっかくなのでSilverlightで。
とりあえず全て非公式さんところのキャラシーと同等以上には使いやすいSW2.0全ルール対応のキャラシーとか戦闘中に必要な情報を整理して可視化したいなーと妄想してます。フルスクラッチ久しぶりなのでオラワクワクしてきたぞーって感じなのです。
こんなのも読んでます。女声曲歌いたすのです。具体的に言うとspercellの君の知らない物語とかLOVE&ROLLとか。
同様にハイトーンボイスを安定して出すためにもう一冊読んでます。読んでますというか歌ってます。こっちはむしろABCとかJanne Da Arcとか要するにyasuくんの曲をちゃんと歌いたいから始めました。
Movable Typeとかロリポが重くて投稿エラー起きるので一旦区切って次でゲーム関連を。
前回の投稿がエラーでちょんぎれたので続きを。今回は途中で止まってるけど理解度とか忘れ具合の関係で頭から読み直したい本を。
以下その内読み直したい積ん読を列挙。
上二つどっちも分厚いです。どっちも普通の本なら一冊分ぐらいは読んだのにまだ途中です。
下のは最初数ページしか読んでません。圏論の基本的なところを定義しているところだけ読んでみました。圏論の前に集合とか勉強した方がいい気がしてます。
久しぶりのポスト。WLWにこっちのblogの設定してみたテストだったりしたりしなかったり。
日記的ネタとして最近読んでる本について読んだ分だけ感想を書いていくキャンペーンをやろうかと思いつきました。多分いつものごとく続かないです(えー
とりあえず今回は読んでる本を列挙。
Silverlightで開発するデータ駆動アプリケーションだけ毛色が違いますね。
基本的に家ではSICP、会社でSilverlightで開発するデータ駆動アプリケーション、お風呂かベッドで計算論を読んでます。
次にその内読み直したい積ん読。
久しぶりの読書感想文ですよっと。
今回から13回に分けて紹介するのはC++テンプレートテクニック。επιστημη/高橋晶著です。
光栄な事に長月は本書の査読に参加させていただいていて、見本をいただいているので世間に出る一足先に、世界一早い内容のレビューをお送りします。(他の査読者の方々まだレビューしてないですよね? どきどきw)
今回扱うのは第一章。生き字引επιさんが書くC++がテンプレートに至る経緯のお話です。
本章はテンプレートによる多彩なテクニックの紹介に先駆けて、C++の昔話と言えばεπιστημηというぐらいC++の昔話に定評のあるεπιさんが、なぜC++にテンプレートが導入されたのか、その問いの答えにつながるテンプレート以前のC++で作られたコンテナのあり方と、なぜそれに不満があったのかを解説しています。
第一章の最初ではC++で使われたSmalltlk風コンテナがどういった物かを解説しています。Smalltalk風のコンテナとは、Object型を根に持ついわゆるピュアOOなオブジェクト階層を利用した物ですね。OOPに傾倒したならC++に限らず一度は通る道です。
C/初期C++で汎用のコンテナを作成する場合、究極的にはvoid*のコレクションにたどり着きます。たとえそれが他のOOPLに見られるObject型を根にした継承階層を利用した物であっても、本質的にvoid*から離れられていません。キャストでいっぱいのコードを見たことありませんか?
void*の呪縛から解き放たれるために必要と考えられたのがAdaで言う汎用体の様な総称型プログラミングの概念でした。
C++なりの総称型プログラミングの解としてのテンプレートですが、まだここでは扱いません。ここではテンプレート実装以前のC++で利用された、プリプロセッサによる擬似的なテンプレートについて語られます。
#defineプリプロセッサディレクティブや##プリプロセッサディレクティブを利用したテンプレート風コンテナのコーディングや、そうして作られたコンテナの使用法を、メリット/デメリットを交えて解説しています。これらにもまだ不満があることから、テンプレートの組み込みへの欲求が高まったと言います。
これらはεπιさんのお得意とするところですね。Cマガなどでのεπιさんの記事を読んだことがあるなら、Smalltalk風コンテナやgenerics.hの記事に見覚えのある方も多いでしょう。その意味では目新しさはありませんが、これから始まるこゆーい世界の入り口です。ウォーミングアップもかねて復習しましょう。
次回は第二章についてお送りします。
結城浩先生の秘密の国のアリスが新しくなって再登場ですよ。
詳細はこちら。 http://www.hyuki.com/d/200811.html#i20081104033448
結城先生の本は読みやすくて有名なので期待でいっぱいです。と、言いつつこの本より先に数学ガールシリーズを読みたいんですが今積読が多くて購入を踏みとどまっています。
でも今月はやねさんもなんかだすらしいので揺れ動き中。くそう読書の時間が欲しい。。。
最近本を買ってばっかりで読んでません。一応毎日10ページとかは読んでるんですが遅々として進みません。
もうちょっと読書に時間を割きたいところ。
今回の衝動買いは以下の通り。
・独習C 第2版 ハーバート・シルト
にわかにC#をちゃんと身に着ける必要が出てきたのでわんくまの方でオススメを聞いたんですが、その後勉強する理由もなくなって保留しようと思っていたのに立ち読みしたら我慢できずに買ってました。
こういうところで自重しないからお金がないない言う羽目になるんですね。
・依田流 並べるだけで強くなる古碁名局集 マイコミ囲碁ブックス 依田 紀基
これも本屋で立ち読みの結果購入。
久しぶりに依田先生の本買って見るかと思ったのと、太田雄三の棋譜が結構多めに入ってたからです。
秀策のライバルとして有名な太田雄三なんですが、この人の碁は躍動感とか遊び心に満ちている感じがして好きです。それに結構中向きな指向っぽいのが厚みとか模様好きの長月としては共感するところなのです。
何気にこれら以外にもこれまでちょこちょこ買ってたりするんですが、めんどくさくてblogには上げてません。
読書メーカの方でそこそこトラックしてるので、長月が何を読んでいるか興味があればどうぞ。
また本の虫がうずきだした長月です。
こんな本買っちゃいました。
・Symbian Architecture 携帯電話OSの設計と進化 Ben Morris
OSの設計と進化とか言われると気になります。タネンバウム先生のAmeba本も欲しいです。高いです。誰か買ってください。
買ったもののまだ読んでません。一緒に買った神様のパズル読んでます。
・神様のパズル ハルキ文庫 機本 伸司
詳しくはこのエントリで。
他にも届いてないものの発注してしまった本もあります。
・Efficient C++ パフォーマンスプログラミングテクニック ダブ ブルカ
よくC++はC言語より大きいとか遅いとか読みづらい言われますが、書き方次第でむしろC言語より効率いいよ? という趣旨の本です。
立ち読みした感じではC++脳がないとわかりずらいです。
読むものいっぱいでよだれでそうです。
ついでに以下欲しい本リスト。
・数学ガール 結城 浩
・数学ガール フェルマーの最終定理 結城 浩
・Short Coding ~職人達の技法~ Ozy
・Boost C++ Libraryプログラミング 稲葉 一浩
・新訂版 More Effective C++ スコット・メイヤーズ
話題の神様のパズル読んでみました。
北方謙三の三国志のしおりで気にはなってたんですが手付かずでした。
結論から言うと面白いですね。これ。
一方の主人公である天才少女のクライマックスへの道筋がちょっと勢い足りないかなと思いましたが、全体的には軽快で味付けも薄くなくて良いです。
重厚なSFを期待している方には向きませんがそういう方は多分表紙で選びませんよね。
ノリはラノベに近いと思います。軽いのでラノベメインの読書家にもお勧めしやすいです。
肝心なネタの説得力に関しては、長月が宇宙論や量子力学に疎いので大して参考にはなりませんが、質量とエネルギーが等価であるという原則に対しての光子場理論はなんとなく丸め込まれました。しかし無に対して外から力を掛けるとビッグバンが発生するのくだりが良くわかりません。つまりどこか納得できていないという事です。
次に人の扱いとか振る舞いに関しては、前述の通り沙羅華が盛り上がるまでに勢いが足りない感じがしました。主人公である綿貫が本筋に対して影響が薄く、脇筋での印象が強いのも残念なところかもしれません。映画が失敗したのはこういうところに原因があるのかもしれませんね。
できるだけネタばれを避けて書きましたが、それだけオススメできるということでもあるので是非読んでみてください。軽く読めるので気軽にどうぞ。
主にわんくま同盟の中さんにそそのかされて買ってしまいました。
1. オンナノコになりたい 三葉
2. オンナノコになりたい コスプレ編 三葉
しかし葵さんが女装しても誰もうれしくないので実戦する予定は今のところありません。
#やるなら買ってあげるよといわれてちょっとゆれたのは内緒。
長月はAmazonからのお勧めレターを購読しています。意外と鋭いところをついてくるからです。
今日も今日とてAmazon一押しの本情報が届きました。Amazonが長月へと送るおススメの決定版!
http://www.amazon.co.jp/gp/product/4758010846/ref=pe_snp_846
泣いていいですか?
また間が空きました。そしてやっぱり購入予定だけです。
ここ半年ほど面倒なのでPerlスクリプトでアフィリエイトリンクを出力してるんですが、数ヶ月前からAmazonのURLが書籍情報を含んでるようなので、今回ちょっと改良してURLから自動で取得するようにしてみました。
やってみたらシリーズでも副題が含まれていたりいなかったりで意外とポリシーが感じられません。Amazon割といい加減みたいです。
そんな訳でツール出力のリンクを以下に。
ぼく、オタリーマン。 よしたに
かりん 11 影崎 由那
メイドをねらえ ~中林校長の野望~ 1 まっつー
屍姫 5 赤人 義一
しおんの王 5 安藤 慈朗
かしまし~ガール・ミーツ・ガール 5 あかほり さとる
二代目はこすぷれーやー 2 甘詰 留太
ビームコミックス エマ 8巻 通常版 森
桜蘭高校ホスト部 10 葉鳥 ビスコ
シューピアリア 1 ichtys
シューピアリア 2 ichtys
シューピアリア 3 ichtys
シューピアリア 4 ichtys
水滸伝 7 北方 謙三
水滸伝 8 青龍の章 北方 謙三
プログラミングのための線形代数 平岡 和幸
薄荷廃園の主人と執事。 なるしま ゆり
GUNSLINGER GIRL 8 相田 裕
Venus Versus Virus 5
久しぶりに購入予定です。
最近発注がめんどくさくてサボる傾向があるようです。ギフト券の期限が近づかないと発注しません……orz
そんな訳でたっぷりある今月の購入予定どーん。多いのでコメントはなしです。
ゼロの使い魔〈10〉イーヴァルディの勇者
となりの801ちゃん
ゆきまるパック100%
黒執事 1
桜雪-ichtys作品集
会長はメイド様! 2
グラビテーションEX 1
ツマヌダ格闘街 1
プリンセス・プリンセス+ 1
史上最強の弟子ケンイチ 24
Grandeek ReeL 1
ハチワンダイバー 2
しおんの王 5
純情無敵オトメ少年
すもももももも 7
ユーベルブラット 5
ドージンワーク 3
ゆびさきミルクティー 8
ARIA 10
tactics 9
鋼の錬金術師 16
EREMENTAR GERAD-蒼空の戦旗- 4
EREMENTAR GERAD 12
Binary Hacks
デキる上司
何かとスケジュール管理が苦手な長月がそろそろ勉強するかと衝動買いした本。
何故一般的なタイムマネジメントTipsがエンジニアに向かないのかの説明から始まって解りやすく取っ掛かり易いテクニックの紹介。基本的なツールの使用方法。高度なテクニックとツール使用の応用と進んでいく。
エンジニアと銘打ってあるのでプログラマ向けだと思っていたら、どうもプログラマではなくシステム管理者向けらしい。ただ、どちらも状況としては大きく違うものではなく、割り込みが多く作業がいつでも積もっている物なのでほぼそのままで流用できると思っていい。
書かれているテクニックは一般的に行われているものと大差ないし、熟練したエンジニアであれば自然と身につけているものも多い。ただ、それぞれのテクニックにほんの少しエンジニアらしいマニアックなツール等が顔を出す。
この本のテクニック全てでなくても、いくつかやりやすいものを採用することで改善されるものもあるはずなので、出来るだけ多くの人に読んでもらいたい一冊。
久しぶりの購入予定です。購入予定書き出してから一年ですよ。だからなんだといわれるとアレなんですが。
少年は剣を・・・
Sound Horizonの新曲。やっぱりゲームの主題歌とかなんですね。Revo氏がそっちの人なので仕方ないですが。
EREMENTAR GERAD 11
先月の買い忘れ。というか発注時点で予約できなかった物。
東先生あまーいらぶーいマンガかいてくれないかなー。この人の絵であまーいの読んでみたい。
DRAGON SISTER! 2―三國志百花繚乱
DRAGON SISTER! 3―三國志百花繚乱
先月の買い忘れと数ヶ月前の買い忘れ。
TS物好き且つ三国志好きな長月にはたまらんですよこれ。
ネコサス:シックス―完全版
エクストラ・イグジステンス
なんか塩野氏にハマリ倒してる今日この頃です。
長月の買った分の印税でいいものを食うが良いさ。
Rozen Maiden 7
東京赤ずきん 4
出てたんですね、新刊リストにばっちり載ってたのに気付きませんでした。
もしかしたら幻冬社のアタリ見てなかったのかもしれませんね。
史上最強の弟子ケンイチ 22
アニメ放映開始したとかなんとか。とりあえず見てません。
B型H系 3
ツンデレ、ツンデレ。
解錠ジャンキー・ロック 1
久しぶりの山秋のマンガ見ました。
今まで何処で何描いてたんでしょう?
かしまし~ガール・ミーツ・ガール~ 4
そろそろ終わりそうなかんじですか?
とりあえずはずむくんかわいい(´Д`*)ハァハァ
E’S 14
またバトル物な展開になってきたという噂のE's。何気に超能力バトル嫌いではないので期待です。
みなみけ 3
どくとくのテンポが人気のみなみけ。今日の5の2も含めたファンブックが同時に発売するようです。
鋼の錬金術師 15
なんかもう惰性っぽいので早く終わらないかなーとか思ってる長月は非国民ですか?
LOVELESS 7
なんかまたドロドロしてきたとか何とか聞いてワクテカしまくってます。
お久しぶりです。最近将棋にはまっててブログとか忘れてました。
書く事は色々アリそうですがぶっちゃけ将棋で忙しいのでしばらく放置します。
でもとりあえず今月の購入予定だけはのっける予定。
んであ発注忘れのおかげでたっぷりある今月来月の購入予定。
かんなぎ 1
TYPE-MOONのアンソロで密かにお気に入りの高梨えり。オリジナルの単行本は初めてです。
アンソロのノリで書いてるならはずれはないだろうと期待してます。
屍姫 2
屍姫 3
二巻を買い忘れてました。あとで買おうと思ってそれも忘れるというとぼけっぷり。三巻発売に乗じて購入です。
げんしけん 8
ついに最終巻と思っていたら違うんですね。なにやら書き下ろしを含んでいるようなので楽しみにしてます。
真月譚月姫 4
いつの間にか英語版まで出てたんですね。とりあえず安牌佐々木少年月姫の第四巻です。
GUNSLINGER GIRL 7
本屋で見かけて出てるの知ってたんですが結局スルーされてしまった一冊。
手持ちがなかったんだよう……
陽だまりのピニュ 2
ひさしぶりのこがわみさき。
長月はこがわみさき大好きっこなのでちょー期待です。
ゆびさきミルクティー 7
作者の痛い恋愛観が大好評のゆびさきミルクティーも七巻です。思ってたより長く続いてますね。
だんだん先が見えなくなってきたのでしばらくは生暖かく見守ろうかと思います。
ホーリーランド 13
いやほんとヒキがうまい。毎度毎度次の巻が楽しみになってる本です。
キックの人との決着が楽しみです。
かりん 9
新キャラも出てきて王道ラブコメ一直線の匂いがぷんぷんかりん。今回で活躍するはずの新キャラに期待。
個人的には忍(小説オリジナルキャラ)とけんt……ぐふっ(吐血)
とりあえず絵が荒れてるのが何とかなってることを祈ります。
#八巻の健太の横顔なんてもう目も当てられない……
桜蘭高校ホスト部 9
ホスト部ペースはやいデスね。人気があるからページ数多い感じですか?
でも一話辺りのページ数が多くなると一冊辺りのかわいいハルヒ率がさがるんですが……
ガールフレンド 4
人気出てきたのか割と長く続いてますね。
数話で終わっても不思議じゃなくオムニバス具合だったので意外です。
すもももももも 5
なんか普通のバトル物になってきたのが残念です。
もうちょっと華麗にギャグ方向へ捌いて欲しかった気もします。
ユーベルブラット 4
ブロッケンブラッド
この他にもAmazonで捕捉され次第買う予定の本が二冊控えてる塩野干支朗次。気がつけばはまってます。なんか妙に絵がツボなのです。
将棋に忙しくて読んでる暇ないので技術本はなしです。Winnyの技術あたり衝動買いしそうですが、それはそれで別エントリで扱います。
ことのはの巫女とことだまの魔女と
発売日にAmazon覗いても在庫切れだった本。初回限定版でてから見てみたらあるじゃん(´Д`;)
てな訳で絵買いです。
#その割にティンクルセイバー勝手ないけどナー。
駿河城御前試合
ほんとはシグルイが欲しいんだけど今から中古で全巻揃えるの骨っぽいからとりあえず小説をと。
全然違うという書評を良く見かけるんですけどとりあえずで。
DEATH NOTE 12
ついに終わりましたねデスノ。
噂で月がとってもアレだったとか納得できないとか色々聞きますが、どうやって終局に持って行ったのか楽しみにしてます。
ARIA 9
アリアも9巻まできました。AQUAの頃とあわせると12巻ですね。長期連載です。気が付けば浪漫倶楽部よりも長くやってるんですね。
夢空界で彫れた天野節、今もARIAで楽しませて貰ってます。
#クレセント・ノイズ再開はないんですかね?
tactics 8
tactics8巻。意外と長く続いてます。1巻を読んだ感想ではあまり長くは続かないだろうと思ってたんですが、予想を裏切って続いてます。
しかしそろそろ佳境ですかね。10巻にとどくか?
史上最強の弟子ケンイチ 21
YOMI編にはいってから微妙な感じのケンイチですが、ここまで集めてきたので惰性でも最後まで行きたい所です。
そろそろ何か起こるんじゃないかなーとか期待もしてたりします。
#アニメ化おめでとうございます。
鋼の錬金術師(14)
まあなにも言う事ないでしょう。まだもうちょっと続きそうですが、最後まで買いつづけたいと思います。
黒神(4)
クロたんかわいい(´Д`*)ハァハァ
前もそんな事言ってた気がしますが、クロたん可愛いです。茜さんも美人さんです。パク・ソンウのおにゃのこ大好きです。
そんな訳で前巻が悪くなかったので次も買います。
HELLSING 8
やっとでました。ひらこー遅筆やねん(´Д`;)
なにやら本誌の方では名言飛び出しまくりで燃えてるようですが、単行本の方も期待できますよね?
てな訳でヘルシング買います。
ドージンワーク 2
ほほえましくていいですね。
何気にこの作者のホームページをしげしげと眺めてた事があったりします。たしかFate/stay night関連でweb漫画描いてらっしゃったんじゃないかなと。プラトニックマジシャンかな?
ゼロの使い魔〈8〉望郷の小夜曲(セレナーデ)
7間までだと思ってたら既に8巻出てました。ペースはえーってばよ(´Д`;)
ゼロの使い魔(7)
気付けば出てました。ペースはえーなおい。
Effective C++ 原著第3版
cppllで出るぞって言ってたので随分前から欲しいと思ってたんですが、憂鬱本とかC++ Coding Standardとかまだ読めてなかったりとかしたんで保留してました。
でも我慢しきれずに発注。
桜蘭高校ホスト部(クラブ) (8)
以前一気に揃えたときに一つだけ変えなかった巻です。
ハルヒがたまに可愛いのがツボです。殿になりたい(´Д`*)ハァハァ
NHKにようこそ! (5)
発注忘れてた気がしたんですがまだ発売前なんですね。
多分発注時にはまだ予約出来なかったんでしょう。
組込みソフトウェア開発のための構造化モデリング 要求定義/分析/設計からソースコード作成までソフトウェア開発上流工程の基本を構造化手法に学ぶ
Effective C++と並んで衝動買い。ぶっちゃけ広告にやられました。
丁度今自社勉強会の為に「C言語での組込み開発でも使えるオブジェクト指向概念」の参考資料作ってるのでこう言う本はとてもツボなのです。
姉妹刊の組込みソフトウェア開発のためのオブジェクト指向モデリングも気になりんぐなんですが、ぶっちゃけオブジェクト指向よりも構造化の方が今一わかってないんで構造化の方を優先しました。
構造化自体はわかってるんでしょうけどねぇ、POAとかDOA辺りの手法と何処らへんで線を引いたら良いのかが今一わからないんですよね。まあこの際勉強しなおしです。
少女セクト
少女セクト 2
なんか広告見てたら気になったので紹介を見てみたら中々長月好みの内容っぽい。なのでギフト券の威力に任せてとりあえず買ってみることに。
ワンダフルディズ 1
これもなんとなくからギフト券で大人の余裕コンボで購入決定。
実は中身全く知りません。
かりん 8
そろそろ終わりですかね? 前巻がいいところだったので超期待。
伊賀ずきん 5
最終巻です。乙女チック忍者かわいくて好きだったんですけどね。
次の連載に期待です。
妄想少女オタク系 1
お試し買い。タイトルに惹かれました。
DEATH NOTE 11
そろそろ佳境ですかね。本誌の方を読んでないので後どれぐらい続くのか今一わかりませんが、先はそう長くなさそうです。
#てかヒカ碁と同じ轍を踏んでる気がします(´・ω・`)
エマ 6
エマ 7
最近買い忘れキングな長月なんですが、八ヶ月忘れてるのは尋常ではないです。
出ないなーとか思っていながら調べなかったのは痛恨のミスです(´・ω・`)
カテゴリ:フリークス 3
セキレイ 3
極楽院二つ。セキレイが最近とても気になります。ツンデレッ娘がそろそろ仲間になる頃ですか?(*´∀`)
そう言えば僕の好きな先生集めてる途中だった。
エア・ギア 14
惰性ではあるものの何とかライフラインを保ってるようです。もう少し買いつづけそうです。
#きっとエロっぽい展開だから(*´∀`)
HEAVEN/メビウス
じゃんぬですよー。インディーズボックス買い忘れました……orz
ななついろ★ドロップス
18禁なのでお子様はリンク先へのアクセスきんしー。
ラズ・メリディアン 1
結賀さとる絵は微妙に好みから外れてると思ってたんですが。この本の表紙を見た瞬間間違いだったと気付きました。
はい、結賀絵好きです。E'sの絵は微妙なんですがこの漫画の絵はかなりツボです。
中見てないんでちょっぴり冒険なんですが、E'sでストーリテラーとしての結賀さとるは評価しているので信じて買ってみます。
かしまし~ガール・ミーツ・ガール 3
長月がTS物スキーなのは当blogでも幾度となく語られていますが、TSスキーなら誰でも注目していると思われるかしましの新刊です。
いやまあ新刊と言うには日が経ちすぎてるんですが、買いそびれてそのまま忙しくて発注も出来ない日々に突入したので今更発注と言うことになりました。
EREMENTAR GERAD-蒼空の戦旗 3
先月青い方マダー? と書いたら出ましたね。
赤いほうが届いて折り込みに書いてあってちょっとビックリしました。
EREMENTAR GERADは青い方のが楽しみになってきた長月です。
私立聖カトレア小学校 2
可愛い。
毒吐いたり恋したり友情を暖めたり喧嘩したり。小学生は大忙しです。
そんな小学校生活を描いたほのぼの四コマ。可愛いですよ、是非一読あれ。
エア・ギア 13
なんだか最近この漫画のストーリーが頭に残らなくなってきました。
もう惰性もいいところです。そろそろ買うのやめようかなぁ(´・ω・`)
ブラック・ラグーン 5
かっこいい戦うおねーさんは好きですか?
この漫画には戦うおねーさんがたくさん出てきます。戦うおにーさんも出てきますが今一影が薄いのでまあどうでも良いです。
広江礼威の描くかっこいい戦うおねーさんはほんとにかっこいい。躍動感溢れるおねーさんを見たいなら読んでみては如何でしょうか?
鋼の錬金術師 13
おにくの人大暴走。お子様三人残りましたがどうなるんでしょうね?
若干惰性で買ってる感が否めなくなってきたハガレン、次の展開に期待です。
黒神 3
クロたん可愛い。てかこの漫画のおにゃのこ綺麗。パク・ソンウの描くおにゃのこ大好きです。
でもこの三巻がターニングポイント。ここで面白いと思えなければ次は買いません。
今の所評価は微妙です。
ホーリーランド 12
キック使いのおにーちゃんとの決着が気になります。
ただそれだけで買います。この漫画気の引き方うまいですよね。巻の切り方とか。
ここからは技術本。
例によって未発注。購入候補達です (一冊は既に購入済ですが)。
憂鬱なプログラマのためのオブジェクト指向開発講座
先月達人プログラマ発注時に衝動買いしちゃった本です。
しかも実はまだ読めてないです。達人プログラマも読めてない。忙しすぎです(゚д゚;≡;゚д゚)
プログラムデザインのためのパターン言語―Pattern Languages of Program Design選集
しかし本は欲しくなる訳で、本の虫な長月は毎月なんか買わないと気がすまないようです。
今の所候補はこれ。
C++ Coding Standards―101のルール、ガイドライン、ベストプラクティス
とかいいつつ、こんな本も欲しかったり。
久しぶりにC++本欲しいなーとか思うわけですよ。憂鬱本もC++本な訳ですが(´ω`)
DEATH NOTE 10
ニアタンピンチ(´Д`*)ハァハァ
な所で終わった前巻。今回で脱出するはずですが、その後の展開が楽しみです。
食玩少女レアだもん!!
なんかちょー久しぶりにかのえゆうしの名前を見たので気になって発注してしまいましたw
EREMENTAR GERAD 10
レンタンに激しく萌えるEREMENTAR GERADもはや10巻。今回も先輩は大暴れしてくれるんでしょうか?
とりあえず青いほうマダー?(AA略
シュガシュガルーン 5
なんだか若干惰性になってきた感があるシュガシュガルーンなんですが、また今回盛り上がりどころっぽいので期待です。
XXXHOLiC 8
最近四月一日が可愛くみえる長月です。やばげ……
道士郎でござる 8
前巻のラストが大ピンチの所で終わってるのでちょー期待大です。
道士郎の活躍よりも殿がどうするのかに要注目。
E’S 13
これも長いですね、光琉タンの秘密が明らかになるのはいつの日か。ちょっぴりおぢさん待ちくたびれてきたですよ?
ここからは購入予定ではなく購入候補。
技術書は高いのでぽんぽん買えないのです(つД`)、
#とか言いつつ先月三冊買ってるのは内緒(´ω`)
達人プログラマー―ソフトウェア開発に不可欠な基礎知識 バージョン管理/ユニットテスト/自動化
今一番欲しい本。
こないだリファクタリングが今一番欲しいと書いてたんですが、あのエントリ投稿後勢いで買ってしまったので、繰り上がり当選で達人プログラマが一番欲しい本と相成りました。
プログラムデザインのためのパターン言語―Pattern Languages of Program Design選集
これもかなり欲しい本。
ただ、GoF本をもうちょっと理解して使いこなせるようになってからかなと思わないでもなかったりするので中々手が出ません。
Code Complete第2版〈上〉―完全なプログラミングを目指して
Code Complete第2版〈下〉―完全なプログラミングを目指して
コーディングスタイルとかリファクタリングとかテストとかいわゆるアジャイル開発で使われる技法に注目中の長月なんですが、アジャイル開発なんて言葉が欠片も耳にかすらない頃に、既にこの本がその大切さを訴えていたんですよね。
Microsoft社員凄いですね。先見の明ありすぎです。
ていうか最近もてはやされてる手法って、結局は昔から言われてきた事を明確に整理し直しただけなんでしょうね。
久しぶりに街中へ出てジュンク堂へ。立ち読みしてきました。
とりあえず評判見て気になってた本を中心に立ち読み。その後、以前立ち読みで買うぞーと決めた本をもう一度品定め。
結果以下の本が購入リストにリストアップされました。
プログラムデザインのためのパターン言語―Pattern Languages of Program Design選集
GoF本買うときには既に目をつけていた本。
その後本のタイトルを忘れて思い出してからでいいやと放置されていたのが今回めでたく発掘されました。
ピープルウエア―働きやすい職場をつくる人間関係の極意
以前立ち読みしたときは買いだと思ってたんですが、昨日立ち読みした感じだとまだ早いって言うか優先度落としてもいいかなって感じになりました。
なのでリストには入るものの優先度低で。
プログラマの数学
お値段ゆえに買いそうになりました。
2000円台はお安いと感じるのはちょっと危険かもしれません。
達人プログラマー―ソフトウェア開発に不可欠な基礎知識 バージョン管理/ユニットテスト/自動化
今長月的に二番目欲しい本。
長月の今現在の主な興味の方向であるバージョン管理、ユニットテスト、自動化が一冊に詰まってます。これでリファクタリングまで詳しく取り扱ってくれたら完璧だったんですけどね(´・ω・`)
リファクタリング―プログラムの体質改善テクニック
続いて今長月的に一番欲しい本。
評判だけで欲しくてたまらなかったんですが、立ち読みしてみてより欲しくなりました。なんか今でも勢いで発注しそうです。
ゲーム開発者のためのAI入門
残念ながら時間切れでこれまで手が回らなかったんですが、久しぶりにタイトルを見かけて「あー、やっぱりこう言う分野すきだなぁ」と再確認した次第です。
やっぱり長月はローレベル分野だいすきっこらしいです。
Code Complete第2版〈上〉―完全なプログラミングを目指して
Code Complete第2版〈下〉―完全なプログラミングを目指して
第二版が出る前から欲しかった本。
でも高いんですよね……今回二冊合計12000円超え……orz
前の版でも8000円ぐらいしてましたしね……(´・ω・`)
はじめて学ぶソフトウェアのテスト技法
最近長月大注目のテスト技法周辺です。
次のプロジェクトでは周りの誰が何を言おうとテストファースト開発をしてやる! ぐらいの勢いでテストの大切さを噛み締め中な長月なのです……orz
11月の発注忘れ分、12月に発注できなかった分を含めて発注。
真月譚月姫 3
しっかりTYPE-MOONに洗脳されている長月です。
佐々木少年氏の絵も割と好みなのでとりあえず買いです。後はアニメ版ほど酷くならない事を祈るだけ……
少年魔法士 (13)
これ実はとある人に貰ったんですが、その人の家に置き忘れて帰ってきちゃったんですよね。
でもその人の家遠いのでとりに行くのもアレな感じなので結局買う事に(´・ω・`)
いちご100%(19)
なんか終わりが見えないマンガですよね。
そろそろ終わりかと思っても信用できない。なんて言うかしっかりジャンプ的……
Death Note(9)
いわずと知れた人気作品。
L亡きあと長月的にどうも盛り上がらないんですが、本誌をチラ見したときにぉ? と思った辺りが収録されるはずの巻なのでちょっと期待です。
道士郎でござる(7)
なんだかへっぽこなはずの主人公がかっこいいマンガ。
保身的なのか思い切りが良いのか良くわからない性格です。なんて言うか切れるタイプなんですかね。長月も割と開き直るタイプですが、また違った開き直り方をするので見ててあーとかへーとかうははとか思う事多いです。
エア・ギア (12)
そろそろ惰性な感じ。
新展開キボンヌヽ(`Д´)ノ
ガールフレンド (3)
なんとなく好きな感じ。
これに出てくる女の子は何かと魅力的です。
ガールズザウルスDX (5)
女性恐怖症の主人公が女性に囲まれるという設定に惹かれて買い始めたものの、最近なんか期待はずれ感満開だったりする漫画。
女性恐怖症って感じじゃないんですけど(´・ω・`)
げんしけん(7)
先月も書いた気がしますけど、長月はヲタ物結構好きです。
自分がヲタだったり同人活動の経験あったりマンガ部経験あるおかげでげんしけん中々楽しいです。最近のヲタ物って実際をよく見てますよね。
ソウルイーター (5)
これも惰性になりつつ。
そろそろ売却を考え出す頃な感じ。
これが私のご主人様 (4)
解りやすく絵萌えな一冊。
LOVELESS(6)
なんて言うか可愛い。立夏たん萌え(´Д`*)ハァハァ
色んな感情に悶えるちょっぴり早めの思春期立夏たん可愛い(´Д`*)ハァハァ
でもがゆんだけにいつ終わるんだろうかなんて不安もあったりなかったり(´・ω・`)
プラトニックチェーン (4)
実は密かに渡辺浩弐のテイスト好きです。
でもプラチェはアンソロのが面白いと思います。
今回無いけどね(´・ω・`)
俺フェチ いちごちゃん気をつけて!(2)
俺フェチ いちごちゃん気をつけて!(3)
いちごちゃん初々しくて可愛い(´Д`*)ハァハァ
アキハバラ@DEEP 1
タイトル買い。
中身を全く知らないので結構冒険。
ARIA 8
以前も書きましたが天野こずえ萌え(´Д`*)ハァハァ
長いことファンやってるなー(´∀`)
史上最強の弟子ケンイチ (19)
これいちご100%と同じ巻数なのにいちご100%と違って飽きてません。何気に凄いですね。
この漫画何気にバトル物でループ系とエアギアとかぶり気味なんですけどエアギアとどう違って飽きてないのか自分でも良くわかりません。
これを突き詰めると長月の嗜好の本質に辿りつくんでしょうね。
B型H系 (2)
なんとなく買い始めてなんとなく好き系。
なんとなくオススメです。
びんちょうタン 1
タイトル買いその2。
ゆびさきミルクティー (6)
この漫画、どのヒロインよりも主人公の女装であるユキが一番萌えるんですけど(ぇ
ZOMBIE-LOAN (6)
今月の桃穴第一弾、Rozen Maiden 6も買わなきゃですよ。何故かAmazonで引っかからないんですが(´・ω・`)
ゼロの使い魔〈6〉贖罪の炎赤石(ルビー)
こないだ揃えたと思ったらもう続編が。
タイミングって怖いですね。
ここから下はどれか買うけどどれを買うか迷ってる本。
プログラマの数学
結城さんの本はわかりやすいと定評があるので割と安心感ありますね。
そう言いつつCマガジンの連載以外読んだ事ないんですけども。
とりあえずプログラマがプログラマの為に書いた数学本なので、そう極端にわかりにくい事は無いはずと思って読んでみたい本。
ピープルウエア―働きやすい職場をつくる人間関係の極意
なんだか先日書いたエントリでオススメ本に入れてた気がしないでもないですが実はまだ持ってません(テヘ
基礎からはじめるUML2.0
どうも設計とか分析とか重要になる位置に立ちそうな感じなのでというか既に立ってる感じなので、そこらを重点強化しようかと。
指し当たっては興味の対象になりがちなUMLから始めようかなとか思った次第です。
今月の購入予定
みなみけ(2)
桜庭コハルなんとなく好きです。
なんとなくな感じの内容がとてもなんとなく好きです。
史上最強の弟子ケンイチ 18
今買ってる中ではトップクラスにオススメ。
典型的を通り越して過剰なまでのビルディングロマンス。わかりやすくていいです。
鋼の錬金術師12
オススメだとかなんとかは言わずもがな。
映画にまでなっちゃってるのでうち見てる人なら知らない人のが少ないでしょう。長月も読んでんだぐらいに思っといてください。
東京赤ずきん3
ぢつはエロ漫画家時代から微妙に好きだった玉置勉強の一般誌連載物。
なんか一般誌向けでもアレな内容ですけどね。モロじゃないだけで。
SYNTHIA THE MISSION 2
TYPE-MOON系アンソロで見かけた事あるなーと買ってみたら割と面白かった物。
2巻出るまでに1巻売ってなかったら2巻買おうと思ってたんですが、なんかこないだの一世売却の時にも1巻が生き残ってたので買う事に。
鉄壱智2
なにげになるしま好きです。
もうちょっと展開がはやかったらなーとか思ったりもしますがね。ていうか原獣文書と少年魔法士終われるんですか?(´Д`;)
プラネットラダーみたいなグダグダ感溢れる終わり方は嫌ですよ?
NHKにようこそ!4
ヲタ物好きです。アキハバラ奮闘記とか買ってるぐらいですから嫌いなはずありません。
NHKにようこそも中々後味悪くて好きなのです。自虐的ですね。
年上の彼女3
これまたエロ漫画家時代から注目の甘詰留太が描く一般誌向け漫画。
やっぱりアレなんですけどね。モロじゃないだけで。
この人の絵好きだったはずなのに最近なんか気に食わない感じがするので今回で打ち止めの危険も。
原獣文書8
今月のなるしま第二弾。今月なるしま二冊出るので買い忘れてた物をついでに。
ゼロの使い魔〈4〉誓約の水精霊
ゼロの使い魔 (5) トリスタニアの休日
気が付けばなんだかんだでラノベ読んでる長月です。
なんか最近お気に入りのゼロの使い魔シリーズ。今月でそろえようと四巻五巻を購入です。
巻数で見ればそろそろ終わっても良い頃なんですけど、主人公は現代に帰れるんでしょうか? 三巻時点ではそんな兆候全く無しなのでちょっぴり気になります。
解きながら学ぶC言語
新人……ではないんですけど、技術力に不安の残る同僚を鍛える為の教材として選ばれた一冊。
新人なのはこっちなんですがいつの間にか教育係だったりフォロー役だったりムードメーカだったり即戦力だったり八面六臂の大活躍です。いや、ベテランさん達がフル稼働中でよそ事出来ないからほんの少しでも手が開いてる長月が使われてるだけなんですけどね。だから手なんてあいてねぇってば! こっちもいっぱいいっぱいだってば!!(#゚Д゚)ノ彡☆バンバン
ソフトウェア職人気質―人を育て、システム開発を成功へと導くための重要キーワード
なんだか最近言語とかテクニックとかアルゴリズムとか研究系の本よりもこういったプロジェクト管理とか設計とかの方面に興味津々です。
いやまあ下っ端PGの長月には縁遠い世界なんですけどね。いつかはこれらを駆使すべき立場になる予定なので今の内に勉強をと。
ていうかこういった本はマクロな立場で書かれてますけど、書かれているのはプロジェクトを上手く運ぶ方法なんですから、当然個人単位のミクロな状況にも使えるテクニックや考え方なんてのもあるんですよね。そう言う個人で適用できるテクニックとかを吸収して仕事の効率を上げていくのも一法ですよね。
OK、納得した。値段は見ない。
……orz
例によってAmazonで補足出来ない物もある訳ですがリンクはまた後日って事でタイトルだけ覚え書き。
少年魔法士13 なるしまゆり
真月譚月姫3 佐々木少年
追加発注。
リーンソフトウエア開発~アジャイル開発を実践する22の方法~
アジャイル開発。無縁です。無縁ですが興味はあります。
いつかこんな開発手法で開発できるかもしれないと夢見るのは悪い事ではないはずです。
布教するにもその知識が無いと布教できないのです。渋る人を論破しなければならないのです。わかりやすく説明できないといけないのです。
だから勉強の為に買うのです。と自分に言い訳。とりあえず積読の本先に読もうな……orz
ゼロの使い魔(2) 風のアルビオjン
ゼロの使い魔(3)
なんとなく微妙にラノベにはまりぎみかもです。
お手軽でいいですよね。通勤で往復二時間電車に乗ってると一日で読めてしまうのが難点ですが……orz
伊賀ずきん(4)
伊賀ずきん可愛いです。乙女チック忍者と言うフレーズもお気に入りです。
なんとなく、そこはかとなく、なにげなく可愛い伊賀ずきん。皆様にもオススメですよ。
今月の購入予定。
ARIA(7)
先月の買い忘れ。
この人の漫画萌え。夢空界以来のファンです(´Д`*)ハァハァ
いちご100%(18)
そろそろ惰性かなー? と思い始めた所で上手く引っ張られて気が付けばもうすぐ20巻。なんだかんだで面白いので今しばらく買いつづけられるでしょう。
かりん(7)
鼻血吹く吸血鬼って設定にやられました。1巻をジャケ買いしてどっぷりはまってます。
かりんたん可愛いよ可愛いよかりんたん(´Д`*)ハァハァ
XXXHOLiC(7)
ツバサはこないだの売却されました。
ツバサ読んで無いとわからないネタとか出てくるんでXXXHOLiCも売りかなーと思った物の、何気にお気に入りなのでおいときました。そもそもツバサはついでだしね。
セキレイ(2)
乳が妙に気になります。とりあえず極楽院だから買ってるのかも。
すもももももも(3)
何気に今割と一押しに近い所にいるお気に入りのシリーズ。
絵とか話とか突っ込みたい所はありますが、割とこうお馬鹿で好きです。
シュガシュがルーン(4)
以前紹介しましたね。詳しくはhttp://blog.nagatsuki-do.net/archives/2005/06/post_141.phpで。
ホーリーランド(11)
割と人気のシリーズですよね。
ドラマにもなったとか。幸か不幸か未だドラマ版は未確認。
なんか書くこと無いので今月のコミック購入予定。
EREMENTER GERAD(10)
買い忘れその1
Rozen Maiden(5)
買い忘れその2
Death Note(8)
なんか惰性って感じがしなくもなくなってきた。
L氏んでから自分的に盛り上がらないんですよね。
ARIA(7)
実際買うのは初回特典版ではないです。でもいまAmazonで検索しても通常版が引っかからないのですよぅ……orz
tactics(7)
もうちょっと展開早いとおにーさん嬉しいなぁ……
School Rumble(10)
ついに二桁ですね。でもこれ最初面白かったけど今は結構惰性っぽい。慣れたら何て事ないテイスト(´・ω・`)
神to戦国生徒会(4)
今回面白くなかったら売り決定。なんでこれ買い出したんだろ? ストレスでいくつか衝動買いした時の奴かな?
道士郎でござる(6)
最近お気に入り。この人の漫画割と成り行き任せで面白い。
黒神(2)
クロたんかわええ(´Д`*)ハァハァ
かしまし(2)
TS! TS!( ゚∀゚o彡
久しぶりに依田ノートを読み返し中。
なんとなく思いつきで読み返し始めた物の、割とアリな行動だったみたいです。
忘れてますね、棋理。しばらくまともに囲碁打ってないですからね。打ってないというか触れてないですから……orz
改めて読んでみると、内容は良書なんだけど構成はダメだよなーとか割とありがちな感想が浮かんできました。そんな感想見飽きましたかそうですか。
まあそんな訳でリハビリにしばらく棋書読み漁ってみるかなとか思う次第です。さしあたっては達人囲碁指南シリーズ読破とか。
良書。
もうすぐ組込みプログラムをお仕事で書く立場になるので勉強の為に買ってみました。どうやらこの選択は正解のようです。
組込み系の世界で利用される技術を比較的わかりやすく読みやすくまとめています。
専門分野の本だけあって少々前提知識を必要としますが、この本に興味を持つ人なら大丈夫でしょう。
入門者向けの物をお求めなら「はじめて読む486」やなぜ動くのかシリーズをオススメします。
とりあえず恋文日和1ヤバイ、面白い。伊達に賞取ってない。マジ面白い。
割と甘いしラブレターというアイテムを軸にアーキタイプな流れで見せる恋愛物ですが。なにやらノリとかテンポが良いんですかね? なんか面白い。
恋愛物スキーにはオススメです。
ていうかなんか作家買いできそうな勢いですよどうしよう。
続いてシュガシュガルーン1。
絵とかラブに関しては安野モヨコなので問題ないだろうと思った通り美味しくいただけました。さすが安野です。
ただ、安野の漫画って割と現実に沿ったものが多いんで、ファンタジーの部分どうなの? と思ってたんですが、漫画賞の寸評にあったように割としっかりファンタジーしてる感じがします。いや、ファンタジーって言うかメルヘンですか? まあそんな感じ。
なんて言うか少女向けだけあってかわいい恋って感じですね。
やっぱり恋愛物スキーにオススメです。
仕事中に右手人差し指の先を切り、さらに右手中指の爪が割れて先の方が五分の一ほど剥がれかけな長月です。皆様はご健勝でしょうか? 長月は本人も仮想世界への代理人も割と不健康な感じです。皆様はご自愛ください。
さて、キーボードが少し打ちづらいながらも基本的に左利き寄りの両利きの為割と生活には支障ないのでいつも通りエントリは追加される訳です。今日はもうそろそろ見てる方々も飽きてきたであろう GoF本 第4章から Decorator パターンです。
Decorator パターンはオブジェクトに動的に責任を追加するパターンです。ロジックとしては前回取り上げた Composite パターンと似ています。Composite パターンは、コンテナとプリミティブなクラスを同じクラス階層に置く事でツリー状にお互いを包含する構造を作り出し、部分と全体に差を無くすパターンでした。Decorator パターンの場合も、Composite パターンでも行われた様に、全体を俯瞰する為のルートクラスを用意し、Decorator に当たるサブクラスではルートクラスのオブジェクトへの参照を持つ事で連鎖します。Composite パターンとの違いはルートクラスのインターフェイスが最大化しない事ですかね。
Decorator パターンは、個々のオブジェクトに責任を追加し、且つ他のオブジェクトへの影響を最小化すべき時。責任の追加に加えて、責任の削除が出来るべき時。サブクラス化による責任追加が現実的ではない時。等に利用されます。
Decorator パターンは継承を用いた拡張よりも柔軟です。また、クラス階層の上位のクラスが、所謂「スーパーマンクラス」になる事を防ぎます。
しかし、ある Decorator クラスが装飾しているクラスはその Decorator クラスと同一ではないので、同一性に期待したコーディングが出来ない。非常に似通った小さなクラスが氾濫する。と言う欠点も持ちます。
前述の通り Decorator パターンは Composite パターンと似通っています。構造を良く見てみれば内部に持つオブジェクトが一つに制限された Composite パターンに見えます。しかし Decorator パターンはオブジェクトの集約を目的としている訳ではありません。Decorator パターンはオブジェクトに責任を追加します。
長月は Decorator パターンを余り使った事がないんですよね。もしかしたらやってるかもしれませんが、意識して使った事って少ないです。なんと言うか、動的に責任を追加する場面が余りないというか。そんなトリックが必要になるほど複雑な物を作ってないというか。そもそも殆どプログラム書いてな……げふっ(吐血
まあそんな訳で今回はここまで、次回はおそらく長月の理解度が本書中一番低い Facade パターンをお送りします。
今日は構造に関するパターンの三つ目、Composite パターンをお送りします。
Composite パターンは複数のオブジェクトを合成します。また、合成されたまとめオブジェクトを一様に扱えるのが特徴です。
プリミティブなオブジェクトを組み合わせる事で複雑なオブジェクトを構成する事はままあると思います。しかし、その時にそれらのオブジェクトを一様に扱う事に困難を覚えた事はありませんか? 例えば、プリミティブなオブジェクトをまとめて扱う方法としてコンテナへの格納は一手でしょう。しかし、プリミティブなオブジェクトとプリミティブなオブジェクトを集めたコンテナは別物です。いくつかのオブジェクトをまとめた物と、単一のオブジェクトを区別なく扱う。それが Composite パターンの提供する合成です。
Composite パターンでは、プリミティブなクラスとコンテナクラスを同じクラス階層に置きます。詰まり一つの抽象クラスがコンテナでも、プリミティブなクラスでもあるのです。
例として GUI コンポーネントを考えてみましょう。GUI コンポーネントには、Button や Label、Inputbox の様なプリミティブなコンポーネントや、Window や Panel 等の、他のコンポーネントを内包するコンポーネントが考えられます。Window クラスや Panel クラスは他のコンポーネントオブジェクトを内包するコンポーネントなので ContainerComponent から派生します。Button クラスや Label クラスはプリミティブなコンポーネントなので PrimitiveComponent から派生します。さて、これらを統一的に扱うにはどうしますか? ContainerComponent と PrimitiveComponent に共通の親クラス Component があれば良いですよね。これで Composite パターンの言う形になりました。これは ContainerComponent をノード、PrimitiveComponent をリーフとしたツリー構造と言えます。Composite パターンは、再帰的に複合オブジェクトを構成していくパターンなのです。
Composite パターンでは、その構成要素であるノードに当たるクラスも、リーフに当たるクラスも区別しません。その特徴によってクライアント側のコードはノードであるかリーフであるかを意識せずにコーディング出来るようになります。また、部分と全体に区別の無い構造なので、柔軟な構成の変更が出来ます。
しかし、設計を過度に一般化するというデメリットも持ちます。
実装の面で言えば、Composite パターンは、その構造上ツリー構造の持つメリットデメリットを同じように持つようです。また、ルートに当たるクラスは自らの子孫であるクラスのインターフェイスをほぼ全て持つことになります。これはインターフェイスの最大化と呼ばれる好ましくない設計の一つです。
Composite パターンは Decorator パターンと共に良く使用されます。この場合、Decorator パターンは Composite パターン側のインターフェイスに合わせる必要があり、若干割を食うようです。
Composite パターンを用いた構造では、内部の操作に Iterator パターンが良く用いられます。
Composite パターンは割と良く使われているはずです。なんと言うか、オブジェクト指向の本を読むと必ずこういった感じの設計について書かれてますし。文中で挙げたコンポーネントクラスの様に、素直に考えれば Composite パターンになる場合も多いからです。
しかしそれだけに、経験だけで書いている方も多いのではないでしょうか? Composite パターンが持つメリットデメリットを再確認する為にも一度勉強しなおしてみるのも一手ですよ。
では今回はここまで、次回は Decorator パターンをお送りします。
構造に関するパターンの二つ目は、前回も書いた通り Bridge パターンです。
Bridge パターンは Handle/Body とも呼ばれ、割と良く使われているパターンだと思います。Bridge パターンはパブリックなクラスの定義と実装を分離し、それらを独立に変更できるようにしたパターンです。
実装の分離と言うと pimpl イディオムを思い出しますね。あれも Bridge パターンの一形態だと思います。しかし Bridge パターンでは、実装の分離に関する思惑が pimpl イディオムとは違います。Bridge パターンは、実装上の汎化関係にあるクラスの関係を意味上の汎化関係を分離します。一般的に汎化関係は抽象クラスと継承を用いて表現されますが、クラス階層の中に実装上の汎化関係と意味上の汎化関係が混在すると、それぞれを独立に変更する事が困難になります。
そんな場合、Bridge パターンを用いて実装と意味の階層を分離します。クライアントが参照する物は意味の階層、意味の階層の中で実装上必要とする物は実装の階層で定義する事で、クラス階層単位でのインターフェイスと実装の分離を実現します。
Bridge パターンは抽出されたクラスとその実装を分離し、実装を動的に選択したり交換したりしなければならない場合、抽出されたクラスとその実装を両方ともサブクラス化によって拡張可能にする場合、抽出されたクラスの実装が変更によってクライアントに影響を与えるべきではない時、C++のような言語で実装を隠蔽したい時、複数のオブジェクト間でクライアントから隠蔽した状態で実装を共有したい場合等に使用されます。
C++のような言語で実装を隠蔽するというのはまさに pimpl イディオムですね。一番良く使われる Bridge パターンではないでしょうか。
Bridge パターンと Adapter パターンはクラス同士を繋ぐという関係では同じです。しかし Adapter パターンは既にあるクラス等、設計後に適用される事が多いのに対し、Bridge パターンは抽出されたクラスと実装を分離する為に、言い換えれば外部に向けた設計と実装を分離する為に、設計の早期に適用されます。
長月は割と最近まで Bridge パターンを軽視していました。Bridge パターンというより pimpl イディオムですね。Exceptional C++ を読んでからは考えを改めたのですが、実装の隠蔽以外の意味で使用する Bridge パターンも馬鹿に出来ませんね。解っているつもりでやっぱり「ああなるほど」と思う所もいくつかありました。いや、本は読むものです。
では今回はここまで、次回は Composite パターンをお送りします。
今回から数回は構造に関するパターンのカタログです。今回は Adapter パターンを取り上げます。
Adapter はあるクラスのインターフェイスを別のインターフェイスに変換します。変換と言うとなんだか齟齬があるように感じますね。なんと言うか、所謂ラッパクラスです。
あるコードの中でクラス Hoge のオブジェクトが使われていた時。何らかの理由で関連性の無い Piyo を同じコードで使いたくなる事があったとします。その時、Hoge と Piyo のインターフェイスがたまたま一致していればコードの修正量は少なくて済みますが、そう言う事は稀で、どうしても Piyo のインターフェイスに合わせて修正する必要が出てきます。Adapter は、Piyo をラッピングしてインターフェイスを合わせる事で、そのジレンマを解消します。長月が実際に遭遇した例で言えば長月の書いた画像クラス AILImage を、とあるライブラリの DIBBitmap 操作関数に渡す為に AILImg2DIBWrapper クラスでラップして渡した事があります。その時は Adapter パターンとか意識してなかったんですが今考えると Adapter パターンですね。これはオブジェクトに対する Adapter パターンと呼ばれます。
また、上記の例では AILImg2DIBWrappter の中に AILImage のインスタンスを持ち、転送関数で処理を委譲していましたが、向こうのライブラリで用意されている DIBBitmap クラスのインターフェイスと、AILImage の実装を多重継承した AILImg2DIBAdapter も考えられます。DIBBitmap クラスからの継承が必要な場面ではこちらを選ぶべきでしょう。こちらはクラスに対する Adapter パターンと呼ばれます。
Adapter は再利用したいクラスが望んだインターフェイスを持たない場合や、既存の複数のサブクラスを利用したいが、さらにサブクラス化してインターフェイスを合わせる事が現実的ではない場合、等に活躍します。
クラスに対する Adapter では、Adapter クラスが再利用されるクラスのサブクラスになる為、メンバ関数をオーバーライド出来ます。その代わり、クラス階層を見たとき、Adapter クラスが再利用されるクラスの下に来るので、再利用されるクラスとそのサブクラス全てを適合させたい場合にはクラスに対する Adapter では上手く行かないという事になります。
オブジェクトに対する Adapter では、クラスに対する Adapter でのジレンマである、複数のサブクラスを賄う Adapter の構築が可能です。しかし、クラスに対する Adapter と違い、再利用されるクラスのメンバ関数をオーバーライドする事は出来ません。これを実現するには、再利用されるクラスのサブクラスを定義し、そのサブクラスで任意のオーバーライドを行い、サブクラスに対する Adapter を定義する事で実現できますが、余計な間接性を持たせる事にもなります。
オブジェクトに対する Adapter パターンは Bridge パターンと良く似た構造を持ちます。しかし、Adapter が外部表現 (インターフェイス) に重点を置くのに対して、Bridge は内部表現 (実装) に重点を置きます。また、何らかのオブジェクトをラップする事に関して Adapter パターンは Decorator パターンと似ています。しかし Adapter がインターフェイスを変更するのに対して、Decorator ではインターフェイスを変更せずに機能を追加します。その結果、Decorator の方が透過性が高く、再帰的なオブジェクト構造の構築を可能としています。そして Proxy パターンも再利用されるクラスを自らの背後に隠す点では同じですが、Proxy はインターフェイスを変更しません。
長月的に Adapter はとても便利です。特にジェネリックスプログラミングで威力を発揮すると思います。ジェネリックスプログラミングでは、ジェネリック関数の内部で特定のインターフェイスを必要とする事が多く、ジェネリック関数に放り込みたいクラスが必要なインターフェイスを持っていない事があります。そう言った時 Adapter はとても重宝します。
個人的に便利な物が多い構造に関するパターン、次回取り上げるのは Bridge パターンです。所謂ハンドル-ボディイディオムって奴ですね。pimpl イディオムも Bridge パターンと言えますね。C++に於ける pimpl にはソースファイルの依存性軽減とか Bridge パターン本来の目的とは違う物も含まれるので Bridge パターンそのものとは言えないかも知れませんけどね。
では、今回はここまで。(=゚ω゚)ノシ
GoF本も割と久方ぶりに読んでる訳ですが、今読むと前よりちょっと理解できる感じです。一応腕上がってるんですかね?
今回からは第4章に入ります。第4章は構造に関するパターンが詳解されています。構造に関するパターンの要点は二つ。オブジェクトやクラスを合成する事、まとめられたクラスやオブジェクト群がむやみに強く結合しない事です。「分割し、統治せよ」をオブジェクト指向の世界で如何に実現するか、その妙技を集めた章と言えます。
いくつかのオブジェクトやクラスを合成したいと言う要求は良く発生します。また、それを前提として書かれるクラスやオブジェクトも多いでしょう。しかし、オブジェクトを合成するだけでは不満なのです。複数のオブジェクトやクラスを持ちつつも、それぞれの依存度を最小化したいのです。影響を局所化出来てこそ大きな構造には価値があります。
本章では上記の様な要求に対する解が七つ詳解されています。その七つのパターンを列挙しておきます。
構造に関するパターンはそれぞれいくらかの関連を持ちます。設計の軸になる部分で良く使用されたりするので、これらのパターンの複合的な物になる事が多いようです。それらの関連については本章の最後で語られます。本blogでも、最後に取り上げる予定の Proxy パターンのエントリかまとめのエントリで書く予定です。
個人的に本章は割と好きです。いろいろなロジックに触れるのが楽しいのです。その意味で第5章の振る舞いに関するパターンも面白いトリックが満載で好きです。本章のパターンは割とどっしりとした印象で、第5章のパターンは派手な印象ですね。ぱっと見て効果が実感しやすい第5章のパターンも良いですが、最終的な開発コスト等、地味ながらも重要な部分で威力を発揮する本章のパターンも長月の脳の肉欲を大きく満足させます。
ただ、これらのパターンは選択が重要になりますので、本章は特に精読して各パターンをしっかり把握しておきましょう。
さて、今回は第3章最後のパターン、Singleton です。なんと言うかみんな知ってそうですが……
Singleton はアプリケーション中にあるクラスのインスタンスが一つしか存在しない事と容易なアクセスを保証するパターンです。複数の選択肢はあれど、同時に一つしか存在してはいけない場合に威力を発揮します。グローバル変数のアクセシビリティにインスタンス数の制限を加えた物と言えます。
Singleton はその簡単な構造とは裏腹に、インスタンスへのアクセスを制限したりコントロールしやすい、制限を掛ける数が任意に調整でき、状態を持て、C++等の静的メンバ関数の仮想化を許さない言語でも仮想関数を扱える等から、クラスメソッドだけのクラスを使うより柔軟性がある。と言うメリットがあります。
今までに挙げてきた複合オブジェクトの生成に関わるパターン、Abstract Factory や Builder、Prototype 等はアプリケーション内で複数必要となる事が少なく、高いアクセシビリティを必要とするので、Singleton を用いて実装される事が多いでしょう。それで無くとも Singleton は割と便利なので使用する機会は多いと思います。しかし、Singleton は拡張されたグローバル変数なので、グローバル変数が持つ欠点は多くの場合 Singleton にも当てはまります。
さて、今回まで何度かに渡って生成に関するパターンを扱いましたが、これらはシステムの構成に柔軟性を与える為の物です。Factory Method に代表されるサブクラス化や、Abstract Factory や Builder、Prototype が威力を発揮するオブジェクトコンポジション、これらは柔軟性を高める為の方法論です。それらを上手く使いこなしたアプリケーションに現れるオブジェクト生成の為の設計パターン、それが第3章で詳解されているデザインパターンなのです。
デザインパターンは若干の複雑度と引き換えに柔軟性をもたらします。パターンの選択肢が増えれば増えるほど設計は洗練されるでしょう。この機にデザインパターンを勉強してみるのは如何でしょうか?
今回は第3章に於ける複合オブジェクトの生成に柔軟性を持たせる為のパターンについての最後の項です。今回は Prototype パターンについてをお送りします。
Prototype は生成するオブジェクトを雛型から複製する事で賄うパターンです。ですので、クライアントクラスでは生成過程で各部品の生成を各部品のプロトタイプオブジェクトが持つ複製メソッドに委譲します。詰まり、プロトタイプオブジェクトに生成を依頼するクライアントクラス側で適宜プロトタイプオブジェクトを挿げ替えれば様々な組み合わせの複合オブジェクトを生成する事が出来ます。
Prototype は、インスタンシエートされるクラスがどの様に構成されるかが静的に決定しない場合、詰まり実行時に決定される場合の動的構成や、何らかのクラスに於てインスタンスの取り得る状態が少ない場合に、あらかじめ雛型を用意しておく事でインスタンシエートの手間を省く等の用途で使用されます。
Prototype パターンも、Abstract Factory パターンや Builder パターンと同じく生成プロセスから生成の詳細を分離します。しかし他の生成に関するパターンよりも実行時の動作に重点を置いている為、他のパターンよりも柔軟性が高く、生成するオブジェクトの追加や削除が容易です。また、柔軟性が高い為、値や構造の組み換えによってオブジェクトの仕様を変更できます。
構成の柔軟性に於て高いアドバンテージを持つのに対して、実装の面ではいくらかの不利な点を持ちます。Prototype はオブジェクトの複製によってインスタンスを生成するので、Prototype を適用するクラスには複製関数が必須となります。また、複製に掛かるコストが高い場合にも適さないでしょう。ただし、複製のコストは COW (Copy On Write) な実装をする事で軽減できます。しかしそれもまた複雑度を上げるので一つのトレードオフでしょう。
Prototype は Abstract Factory の実装としても使えます。Abstract Factory に雛型の集合を持たせ、オブジェクトの生成は雛型の複製で行うのです。また、Composite パターンや Decorator パターンの様に、多くのオブジェクトを集約したり連鎖させるパターンとも相性が良いでしょう。これは複合オブジェクトの生成に関するパターンに共通していますね。
長月は Prototype の理解度が低い上に、使用した記憶もありませんし、オブジェクトの構成は静的に決まって欲しいので動的な構成は注目度が低く、Prototype にはこれと言って言える事が無いんですが、これも何らかの事情で実行時までオブジェクトの構成が決定できない場面に出くわしたら重宝するんでしょうね。きっと、多分、おそらく。
で、次回は第3章最後の項、生成に関するパターンの大トリ Singleton です。なんか Singleton だけは今更何を言うまでも無くみんな知ってるんじゃないかという気がしないでもないんですが、順番なので次は Singleton をお送りします。ではまた。
第三章のパターンも今回で半分以上をクリアですね。今回は Factory Method をお送りします。
Factory Method はオブジェクト生成の為のインターフェイスだけを規定して、実際の生成はサブクラスに任せます。これは結構頻繁にやりますよね。本によっては仮想コンストラクタと呼んでいます。
あるクラスの中で別のクラスのインスタンスを利用するが、実際に利用するクラスが事前に解らない状況は割と頻繁にあると思います。特にライブラリ等、後にも多用する予定のクラスなんかはそう言う状況も多いと思います。そう言うときには Factory Method の出番です。多くの場合コンストラクタの中で new すると思いますが、そこを生成関数に書き換えてしまいます。そして生成関数は仮想関数にしてしまうのです。後は違うインスタンスを返したい時には適宜欲しいインスタンスを返す生成関数を実装したサブクラスを用意するだけです。
Factory Method は特定の実装をコードから分離します。これは Abstract Factory や Builder もそうであったように拡張や入れ替えを容易にします。
ただし、Factory Method にはサブクラスの定義を強要すると言う欠点もあります。特にサブクラスを必要としていない時には一つの悩み所でしょう。これに対して、C++ではテンプレートを使うと言う選択肢があります。テンプレートパラメータによって返すオブジェクトを返す生成関数を持つクラスを用意するのです。或いは生成関数をファンクタにしてしまうのも良いでしょう。ポリシークラスという選択肢もあります。テンプレート様様ですね。
Abstract Factory や Template Method は良く Factory Method を利用します。
Abstract Factory は Factory Method を用いて実装されますし、Template Method は Factory Method を内部で呼び出します。Abstract Factory のエントリで書いた CreateWindow() 関数は Factory Method に当たります。
Factory Method はそれなりに熟練した方なら言わずとも利用しているであろうパターンです。特にC++等ではコンストラクタを仮想にする事が出来ないので自然とこう言う手法を編み出す人も多いようです。長月は自力で編み出した訳ではありませんが、Effective C++ で仮想コンストラクタの手法を知って以来、GoF本を買うまで Factory Method とは知らずに利用していました。知らない方もこれを機に Factory Method を含めたデザインパターンを勉強してみては如何でしょうか?
今回は生成に関するパターンその2、Builder パターンです。
Builder も Abstract Factory に似て、実装を差し替える為のパターンです。 Abstract Factory が利用するオブジェクトの実装を差し替える様に、Builder はオブジェクト生成の実装を差し替えます。詰まり、Abstract Factory がオブジェクトの実際を気にせずオブジェクトを生成出来るようにしたのと似て、Builder はオブジェクトの構成や、それを実現する為の機能を気にせずに生成出来るようにします。Abstract Factory が生成されたオブジェクトのインターフェイスの共通性に主眼を置いているのに対し、Builder は生成されるオブジェクトの生成過程の共通性に主眼を置いています。
えーと、解りにくいですね。要するに、同じ生成ルーチンで色んなオブジェクトを生成出来るようにすると言う事です。
これは生成したいオブジェクトがたくさんの部品や組み合わせで構成されている場合等に有効です。また、内部表現の差し替えが用意になります。これは生成の為の実装詳細が局所化されると言う事も意味しますし、詳細が局所化されるという事は、それらを利用する生成過程の細かいコントロールが可能になると言う事でもあります。
Builder パターンはしばしば Composite パターンと共に使用されます。何らかの複合 (Composite) オブジェクトを生成する為に Builder が利用されるのです。また、Builder が必要とする部品を提供する為に Abstract Factory や Factory Method も利用できるでしょう。
今回はジェネリックスプログラミングに近い立ち位置にあるパターンである Builder を紹介しました。生成に関する限り、Builder はポリシークラスの様な役割を果たします。個人的にはポリシークラスの方が好みなので余り出番がないんですが、ジェネリックスプログラミングのパラダイムをサポートしてない言語を使うときには便利そうです。
さて、本エントリで Builder に興味を持たれた方、是非本書や増補改訂版Java言語で学ぶデザインパターン入門等でデザインパターンを勉強してみては如何でしょうか?
前回投稿後すぐに書き始めたのに途中で寝ちゃったおかげで結局この時間ですよ'`,、(´∀`)'`,、
ついにパターンのカタログまで来ました。今回は Abstract Factory パターンです。
Abstract Factory は何らかのインスタンスを必要とする時に、その実装に関わる具象クラスを明確にせずに生成する為のマネージャクラスを用意するパターンです。それなりに構造化された設計のプログラムなら、HogeManager とか HogeCreator 見たいなクラスがあったりするでしょう。そう言ったクラスは多くの場合 Abstract Factory を用いて設計されているのではないでしょうか。
このパターンは、抽象クラスとサブクラスを用いて場合によって実装をスイッチする際等に活躍します。本書に載っている例で言えば、複数の look-and-feel 規格に対応したアプリケーションを書く場合、実際に使用する look-and-feel に拠らないウィジェットクラスを書くために Abstract Factory を利用しています。
Abstract Factory を簡単にまとめると、何らかのオブジェクトの集合に対して複数の実装系がある時、生成用のアクセスポイントを持つマネージャクラスを用意し、実際の生成はサブクラスに任せる構造です。
例えば、複数のプラットフォームに対応したアプリケーションを書く場合、各プラットフォーム向けのGUIコンポーネント群を定義するでしょう。その時、実装に拠らず同じオペレーションで同等の機能を呼び出す為に、各コンポーネントは抽象基底クラスから派生して実装するかと思います。しかし、生成する場面で特定の実装に触れたくないのです。Window* w = ComponentFactory::GetInstance()->CreateWindow(); で Win32 も Mac も X-Window もフォローしたいわけです。そこで生成の為のインターフェイスを持つマネージャクラスを用意し、それを派生して各実装のコンポーネントを生成するサブマネージャクラスを定義します。後はプラットフォームにあわせた具象クラスを抽象マネージャクラスに代入して、コンポーネントの生成は抽象マネージャクラスを通せばよいのです。また、Singleton パターンや Factory Method パターンとの併用も良く見られます。
ただし、パターンもいい事づくめと言う訳ではありません。メリットがあればデメリットもあります。AbstractFactory に関しては、インターフェイスの追加や削除を含む変更に弱いと言うデメリットがあります。インターフェイスの追加や削除が行われるとサブクラスまで手を加えなければなりません。この問題に関しては Andrei Alexandrescu が Modern C++ Design にて一つの解答を示しています。
生成に関するパターンはC++に於ける不可避の定数性、詰まり new 構文でクラス名が既知でならなければならない問題を最小化します。これは動的に型付けする言語では問題にならないのかもしれませんが、静的な型付けを行う言語ではまず確実に問題になる部分です。長月はC++ぐらいしかまともなOOPLに触れていないので他の言語の事情を知りませんが、生成に関するパターンはC++でそれなりに良い設計と実装を行いたければ必須の構造に思えます。
今回はそれらの生成に関するパターンの中で、Singleton や Factory Method 等の小さい粒度のパターンを除けば最も頻出するであろう Abstract Factory を紹介しました。本エントリで Abstract Factory に興味を持たれた方、是非本書や増補改訂版Java言語で学ぶデザインパターン入門等でデザインパターンを勉強してみては如何でしょうか?
改めて読むとGoF本結構退屈ですね。第2章は面白いのに(´・ω・`)
今回から第3章に入ります。ここからはパターンのカタログなので、パターンの紹介の様な形になるかと思います。今回は第3章の概要です。続けて次のエントリで Abstract Factory パターンについて書きたいと思います。
第3章では生成に関するパターンを扱っています。生成に関わるパターンのキモは二つ。生成されるオブジェクトの詳細を如何に隠蔽するか。そして実際の生成の詳細を如何に隠蔽するかです。
あるオブジェクトのクライアントはオブジェクトに対する必要条件だけを持っていたいのです。言い換えるとインターフェイスの知識のみで必要なオブジェクト群を扱えるのが理想なのです。その為に、生成されるオブジェクトの詳細を如何に隠蔽するかが重要になります。
また、クライアントではオブジェクトの生成をハードコードしたくないのです。具体的に言うと、new Hoge; 等とはしたくないのです。前述した方法の場合、Hoge の生成方法が new では無くなった場合ソースを書き換える必要があります。それは勘弁願いたいのです。なので、生成に関する知識の隠蔽も重要になってきます。
本章では上記の様な要件を満たす為のパターンを五つ詳解しています。その五つのパターンを列挙しておきます。
本章ではこれらの実装例として迷路生成プログラムを使います。迷路の生成エンジンを各種パターンを適用して設計する事でそれぞれの違いを明確にします。ここをそれなりにちゃんと読まないと実装の説明を見ても何の事やら判らないかも知れません。気合を入れなければならないと言う程ではないですが、油断はしないようにしましょう。
本項は概要の説明なので、特に技術的な事は出てきませんが、生成に関するパターンの思想が解説されています。プログラミングに於て今実装中の物の目的や思想、そして理想がわからないのは無用の混乱を生みますから、生成に関するパターンが何をどの様に目指す物なのかをきちんと把握しておきましょう。
と言う訳で、GoF本第二章です。なんか妙にだめだめな気分なのでさくっと行きます。
第二章では実例を挙げてデザインパターンの使い方を解説しています。本章で実例として上げられているのはワープロソフトです。文章、絵、図を自由に配置でき、ウィンドウシステムや look-and-feel 規格への依存を最小化し、オペレーションを統一的なメカニズムで扱う、と言った設計上悩ましい部分にデザインパターンを適用する事で柔軟性を持たせます。
本章で使われるパターンは、Composite パターン、Strategy パターン、Decorator パターン、Abstract Factory パターン、Bridge パターン、Command パターン、Iterator パターン、Visitor パターンの計八つ。それぞれのパターンについては今後のエントリに譲りますが、Composite パターンで内部表現を定義し、Iterator パターンで走査し、Strategy パターンで操作とデータ構造を分離し、Abstract Factory パターンでオブジェクトの生成とクラスの詳細を切り離し、Bridge パターンで概念と実装を分離し、Decorator パターンでUIに柔軟性を与え、Command パターンで操作に拡張性を与え、Visitor パターンで操作の実装への依存を最小化する実例を挙げています。
なんと言うか、用意された綺麗な例である事は承知の上ですが、思わずお見事と誉めたくなる仕事です。読者をデザインパターンの世界に引き込みます。実際できるのであれば自分でもこういった綺麗な設計を行いたい物です。ですから、こういった綺麗な例を見せられると嫌が応にも期待が高まります。
そんな訳で、第2章は割とへーと思うことが多いです。色々勉強できます。読む人のレベルによってはああ、そうそう、そうだよねと共感出来るでしょう。
本章は読むのが楽しい場所でもありますから、カタログ部分が重いと感じる方はここから読んでみては如何でしょうか?
なんていうか最近チョイスする本がC++ユーザに媚びてる感のある長月です。と言う事で今回は特定のプログラミング言語に拠らない物をとGoF本をチョイスしてみました。ていうかOS【第二版】はどうしたって? 避けてるんですよ、重いから。正直しょっぱなからあれは後悔しまくりです。とりあえずは今月中に何とか……orz
そんな訳でGoF本です。Erich Gamma/ Richard Helm/ Ralph Johnson/ John Vlissides著、本位田 真一/ 吉田 和樹 監訳、オブジェクト指向における再利用のためのデザインパターン改訂版です。
デザインパターンを簡単に説明すると、良い設計に現れる定石を一般化した物です。本書はそのデザインパターンと言う考え方 (定石を一般化、カタログ化して共通認識を作ると言う考え方) を提唱したガンマ先生以下四名、所謂 Gang of Four が世に送り出した論文や、パターンコミュニティで提案された、良い設計に頻出する厳選された23のデザインパターンの解説書です。今回から数回に分けて本書について書いていきます。
なお、本書については、パターンの紹介に近い形になるかと思います。なんと言うか他に書き様が無いとも……げふんげふん。
そんな訳で今回は第1章について書きます。
第1章はデザインパターンとは何かから始まり、本書で用いられている、デザインパターンのカタログの一項目としての整理の仕方、小見出しとそれに対するトピックの意味等の説明、本書で扱うデザインパターンの列挙と軽い説明、デザインパターンを設計に適用する際の指針と注意等が書かれています。
プログラミングを嗜んでる方ならデザインパターンと言う単語を見た/聞いた事がある方多いんじゃないかなと思います。でも単語は知っててもそれ何? と言う方も居られるんじゃないでしょうか? 本書で語られるデザインパターンとは、プログラミングの主に設計によく現れる定石の事、またはそれらの設計を一般化・カタログ化して共通認識を作ろうと言う考え方を言います。よく見る用法は前者ですかね。デザインパターンは粒度が様々なので、実装レベルに関わる事も多いのですが、デザインパターンは設計レベル、実装レベルの定石に関してはイディオムと呼ぶ事が多いようです。
本章では定石をカタログ化する事の意味や Gang of Four の推奨するパターンのまとめ方等が解説されています。余り知られていないけどこれは割と応用が広くて良いんじゃないかと思うパターンをお持ちの方は、ここで提示されているフォーマットに従って文書化し、デザインパターンのコミュニティに投稿すると良いでしょう。
また、本章ではデザインパターンを設計に適用する為のあれこれも解説しています。これはデザインパターンの適用と言う観点で書かれてはいる物の。デザインパターン自体が既に広く使われている設計の定石である事から、設計に関する一般的な考え方のトピックでもあります。個人的にパターンそのものよりもここで触れられている事をしっかり押さえる方が重要なんじゃないかと思います。デザインパターンを使いながら覚えるのが実践的ですかね。
と言う訳で、もはやバイブルと化した感のある本書ですが、何気にデザパタ自体を知らない様な方もまだいます。そんな方には是非読んで欲しい本です。本書では重いと言う方は、結城浩氏の増補改訂版Java言語で学ぶデザインパターン入門辺りが割と易しくてオススメだそうです。長月は読んでないのでなんとも言えません。
長月としてはデザパタはとにかく広まって欲しい物なので是非ご一読を。
あ~もう眠い、だるい、やるせない、なんかお疲れ。だから今日の感想文なし。
……嘘です。書きます。読んだのに書かないのなんか勿体無いですから。貧乏性です。
今日も今日とてC++、昨日に引き続いてハーブ・サッター著Exceptional C++ 47のクイズ形式によるプログラム問題と解法 5~8章です。
え~、まず第5章はシグニチャの自動照合、ネームスペースに関しての規則に関するあれやこれやについての問題が収録されています。
長月はネームスペース内で宣言・定義された関数の呼び出し順序とか規則とかを知っていても理解しきれてなかった様で、初めて本章を読んだ時「おぉ!?」と思った記憶があります。言ってしまえば重箱の隅をつついたトピックなんですが、今時のC++ユーザならネームスペースは極普通に使っているでしょう。そして普通に気を使っていれば大抵の場合問題は無いはずですが、レアなケースで厄介なロジックエラーを起こす場合があります。そう言った場合、殆どのケースでは本章で書かれている様な事が起きているんじゃないかと思います。そんな事例滅多に無いよと読み飛ばさずに、一通り頭に入れておきましょう。
第6章ではメモリ管理にまつわる問題を取り上げています。
言ってしまえばよく見かけるトピックです。配列とポリモルフィズムは相容れないとか、メモリ管理はポインタのラッパでやろうぜとかそう言ったトピックです。ただ、取り上げているポインタのラッパクラスが auto_ptr なのが特徴的と言えば特徴的です。この手の話題では大抵の場合 auto_ptr は使えない例として少しだけ書かれて本題は参照カウントとかリンクリストとかでスマートポインタを実装する事であったりするのですが、本書ではSTLに拘っているのか auto_ptr を上手く使おうぜと言った事が書かれています。
また、本章では operator new や operator delete の自作に関しても触れていますが、これも多くの場合に見られるちょっ速なアロケータとか空間効率の良いアロケータと言ったトピックではなく、エラーを起こさない、例外安全で例外中立なアロケータを実装すると言う安全性を重視した内容になっています。
第7章では、よく陥る罠、落とし穴、反イディオムと言った所謂アンチパターンについての問題を扱います。
オブジェクトの生存期間に関するトピックは割とああなるほどと思えました。でも、他のトピックはああこれどこかで読んだなと言った感じでした。流石にもう自己代入チェックとか暗黙の型変換はだめぽとか飽きてきました、だって大抵の本に書いてあるんだもん(´Д`;)
ああ、「例外安全で例外中立な代入演算子 (或いはコピーコンストラクタ) ならば自己代入チェックは要らない、自己代入チェックのメリットは本当に自己代入が起きた時にのみ効率的なだけ」と言う主張にはへーと思いました。が、長月は何故そう言えるのかをちゃんと理解出来てない気もします。
そして最終章の第8章です。第8章は分類しにくいトピックをいくつか扱います。なんと言うか個人的には読み物的な章でした。他の章に比べて難易度設定も低いようです。
長月は第8章最初の問題からしてやられました。T t(); と言う記述、これだけで冷静に見れば T 型の値を返す引数をとらない関数の宣言です。しかしこれが変数の宣言・初期化のすぐ下にあったら? 長月は思わず変数の宣言 (定義) に見えました。ばっちり引っかかって誤読です。
本章では const についても扱っています。この const、エラーとかが沢山出るとめんどくさくなって思考停止に陥るんですよね、結果 const 外すとか安易な道に走るか、良く考えずに思いついた事やってみてより大きなエラーを作りこむか、なんにしても悲惨です。そんな const の使うべき時使わざるべき時を割と丁寧に解説しています。特に「例え内部状態を変更しても外部から見た状態が変わらなければその関数は const である」は目から鱗でした。mutable の存在理由がやっと理解できました。
そして最後のトピックである制御フローも興味深いトピックでした。自分が意図した以上に多くのパスが存在する事もあると自覚させられました。もうちょっと注意深く読んだり書いたりしなければと思わせます。
いつもの如く駆け足なのか鈍足なのか、参考になるのかならないのか良くわからない文章ですみません。参考意見が欲しくて立ち寄って下さった方の為に書いておきます。
本書は初心者の方にはオススメしません (内心却って初心者の内に読ませた方が良いかもとも思いますが)。しかし、貴方が少しはC++を使えると言う自覚があるのならば一見の価値ありでしょう。また、効率の良いコーディングの本は読み飽きた、安全で頑強なコードの書き方が知りたいと言う方も読んでみるべきだと思います。
解りやすい文章が書けないのが申し訳ないと思いつつ本書についてはここまでで筆を置きます。
――――誰かの参考になる事を祈りつつ。
いやもういい加減囲碁関連のトピック書けっつーんですよね。ぽまいこのblogの閲覧者の8割が囲碁関連のページから来てるの知らんのかと小一時k(ry
ああもう、解ってるんですよ? だからなんか書かなきゃナーとか思ってるんですよ? でもね、今月読書強化月間だし読みたい本がコンピュータ関連ばっかりだしで仕方ないんですよ。
と、一通り言い訳した所で読書感想書籍紹介文へ。今回から2回に分けて紹介予定の本はハーブ・サッター著、浜田真理訳、浜田光之監修、 Exceptional C++ 47のクイズ形式によるプログラム問題と解法です。
本書はクイズと言う形式にする事で、実際のプログラミング現場で求められる経験の学習を意図した物です。普通の学習書がボトムアップの発想であるのに対し、本書はトップダウンの発想で書かれています。その点で言えば以前紹介した Accelerated C++ と同じです。しかし二者には大きな違いがあります。はっきり言って Exceptional C++ は初心者さんにオススメできません。理由は追々述べます。
さて、本書はクイズ形式を取っている訳ですが、第一章の項目一、詰まり一問目から飛ばしてます。
第一章はジェネリックスプログラミングとSTLについての問題ですが、項目一のイテレータにまつわる間違いを探す問題からして割といやらしい問題です。長月は一応なんとか気付きましたが、e.insert( --e.end(), TodaysDate() ); これ、どこが何故間違いなのか解りますか? おそらく長月は問題として出されてなかったら気付きませんでしたし、怪しいと思っても Why? の部分が解るまで考える事は無かったでしょう。もうしょっぱなから難易度高いです。項目二で早速 char_traits いじってるのもうわーと思いました。
この辺りが初心者さんにオススメできない理由です。文法や機能の理解であっぷあっぷしてる段階の人達には難しすぎるんです。
では気を取り直して第2章へ進みましょう。第2章では例外に対して安全なコーディングについての問題です。
C++で例外を駆使すると、何気に色々な所に潜在的な危険を孕む事になります。何気なく書いたコンストラクタは例外を投げてもリソースリークしない? 何気なく書いた関数はちゃんと例外を呼び出し元に投げる? 例外安全で例外中立なコードを書いたつもりで副作用を残してない? 第2章ではそう言った視点でコードを見つめなおす為の問題が出題されます。
例外安全なコンストラクタと例外安全な swap メンバ関数で実装する例外安全な代入演算子なんかのテクニックは必見です。
第3章では、クラス設計と継承についての章です。この章に出て来る問題は色々な書籍や掲示板やMLで見かけた事のある様な物でしょう。しかし、解決の為のテクニックに注目すべき物があります、理由や意味をC++で素直に表現する方法が書かれています。
値のセマンティクスを持つクラスの型変換や演算子のオーバーロード、関数のオーバーロード・オーバーライドとそのどちらでもなく外部スコープの同シグネチャを隠す関数、public 継承と private 継承の違いとそれらの意味、Pimpl イディオムの効用と注意点、実装継承とコンポジション、本章ではこれらの問題を扱います。
第4章では、依存性にまつわる問題を扱います。ヘッダのインクルードや Pimpl イディオム再び、前方宣言の駆使、継承からコンポジションへそして Pimpl の後ろ側へ、Pimpl イディオムを詳しく、Pimpl の最適化、等の問題が用意されています。
ヘッダのインクルードに関しては目から鱗でした。考えてみれば目に見えない依存性を生み出している事にとても驚いた物です。また、Pimpl イディオムの有効性を軽視していた事も教えられました。お前は本当にデザパタを勉強してるのかと小一時間……orz
本書は難易度が高いです。いや、難易度が高いのではなく、高級な話題が多いです。低レベル機能の実装でも高レベルの視点から考えます。実際、問題も難易度の高い物が多く、解説もいくらかの習熟と経験を必要としています。やはり初心者の方においそれとオススメ出来る物ではありません。しかし、だからこそ有益な情報が多かったと思います。
中級以上だと自負する方、本書を読んで一歩先へ行ってみませんか?
どもども、何気にまにあわなさげでひやひやな長月です。
今日はアンドリュー・コーニグ、バーバラ・E・ムー著、Accelerated C++ の13~16章をお送りします。これで Accelerated C++ に関しては最終回となります。
今回の一つ目は第13章、第13章では、ついにOOPの華である継承と動的バインド、所謂ポリモルフィズムを扱います。
本章も基本的には普通にC++の勉強をしてきた人なら問題ないかと思います。退屈なクラスの説明を読んできた人でも、本章で語られる基礎は抑えているでしょう。ただ、13.4項のハンドルクラスに関するトピックは割と重要です。結構知っている人は多いはずですが、意外とこういう設計通りに実装出来てない (或いは設計の時点で出来てない) 事が多いようです。
第14章では、メモリ管理の半自動化を行います。前章で製作したハンドルクラスを一般化して、所謂参照カウント式スマートポインタに仕立て上げます。
それなりにC++を使った事があるなら、ポインタデータメンバを持ったクラスを書いた事がある人は多いでしょう。大抵の場合 "リソースの獲得は初期化" イディオムに従ってコンストラクタでインスタンスを得、デストラクタで解放すると思います。しかし、前章から本章までで扱ったようなハンドルクラスとかホルダクラスとか呼ばれるクラスを書く時に困った事はないですか? 長月はあります。どうしてもこう言う関数が欲しい、でも包みたいクラスの書き換えは出来ない。そんな時の一般的な解決法を知りたいなら14.4.1項を熟読しましょう。
第15章では、第1~2章や第5章等で登場した文字列の入力を受けて、入力された文字列に装飾を施して出力するプログラムが再登場します。本章ではこのプログラムをデザインしなおす事で、ポリモルフィズムの実際への適用と、設計の基本に触れています。
基本だけあって、既にC++をそれなりに学んだ方や他の言語での経験が十分な方には退屈かもしれません。そういう方が求めているのはもっと技術的な事でしょう。しかし、基本だけあって大切な内容なので、入門書として本書を読んでいる方は要熟読です。また、これぐらいの事は知ってると言う方も、復習の意味でそれなりに気をつけた方が良いかと思います。
最後の章である第16章では訓戒を述べています。たった3ページの小さな章ですが、ここに書かれている事を心に留めておきましょう。
さて、四回に渡ってレビューしてきた本書はここで終わりです。本書は入門書でありながら中級、もしかすると上級のC++使いにも有益な本です。C++をかじってみた物の教科書が悪くて食傷した方、なんとなく使ってきたけどもうちょっときちんと使っていきたい方、もう腕には自信があるけど基本を振り返りたい方、新人教育でお悩みの方はこの機に一読してみては如何でしょうか?
今日も今日とて読書の日々です。考えてみれば読書強化月間とか言わなくても本読んでるよなぁ普段から。とか思わないでもないのは内緒です。
さて、今日の一冊はお馴染みアンドリュー・コーニグ、バーバラ・E・ムー著、Accelerated C++ 効率的なプログラミングのための新しい定跡 8~12章です。
前回にも言ったとおり、8章からは抽象度の高いプログラムを自分で書く立場に変わります。その手始めとして第8章ではジェネリック関数の書き方を解説しています。
ついに出ましたテンプレート。長月的にはもう無くてはならない物です。テンプレート大好き。
この章では、テンプレート関数とイテレータを使って総称的な関数を書いていきます。実質各種イテレータの解説がほとんどです。
第9章では、ついにクラスが登場します。ここから第12章まででユーザ定義型を定義する為に必要な事を解説していく展開です。
今までにも実質的に同じ物である構造体は出てきていましたが、メンバ関数などは定義していない所謂POD (Plain Old Data) でした。今回は構造体ではなく、メンバ関数も含めてクラスを定義します。以前、第四章の所で少し書いたように、構造体と共にヘッダに追い出されていた関数群がメンバ関数になる流れです。
この章の内容は普通にC++の本を読んでいたら当然の如く知っているはずの事ですね。要するにカプセル化に気を使えとかそう言った類の事です。
第10章では、メモリとデータ構造の詳細に触れていきます。他にはファイルへの入出力も少し扱っています。
ここでやっとポインタの登場です。ポインタが絡むと一気にややこしくなるのがC/C++なので、こうやってポインタを後回しにするのは良い方法だと思います。C言語ではそうもいきませんが(´・ω・`)
内容としてはポインタの絡む事をあれこれ、関数ポインタや文字列リテラルなんかにも触れています。また、メモリにまつわるあれこれも解説しています。記憶域クラスに関することやコンストラクト・デストラクトに関する事なんかが主です。
この章もまともに学習していれば問題ない所でしょう。
第11章では、抽象データ型を定義します。具体的には vector のクローンを作成する事で、抽象度の高いコンテナ等の書き方を学びます。
この章のキモはコピー絡みの部分でしょうか。代入演算子やコピーコンストラクタの定義にまつわるトピックスはしっかり理解しましょう。コンテナ型に限らず、値のセマンティクスを持ったクラスの定義に役立つ理論です。
第12章では、値のセマンティクスを持ったオブジェクトの定義を学びます。値のセマンティクスを持つと言うのは、言い換えればプリミティブ型と互換の動作をするオブジェクトと言う事です。
この章で気をつけるべきは、変換に関する問題と演算子ですね。これらの定義を誤ると構文は正しいのに意味が間違っていると言う見つかりにくいバグの元になります。この辺りの事はしっかり理解しておきましょう。
今回読んだ部分は、基本でありながら重要な部分です。文法に関しては割とすぐ覚えられると思いますが、ユーザ定義型を定義する際に気をつけるべき事等、論理的な部分に関しては気が付けば間違っていたと言った事が良く起きる部分です。これらの部分は気をつければコーディングの手間を減らし、誤ると後に手痛いバグとして帰ってくる部分なので、しっかりと理解できるまで何度でも読むべき部分でしょう。
とか言いつつ長月もそうしなければならない程度のヘボプログラマなんですが(´・ω・`)
さて、長らく続いた本書のレビューも次で最終回です。次回は13~16章を取り上げます。本書のレビューが終わったらまた何かC++関連書籍のレビューをしたいと思っているのでC++使いの方お楽しみに。では今回はここまで、さようならノシ
え~と、ごめんなさい。「今日は豪華三本立て」と言いつつ「今日」に間に合いませんでしたorz
さて、あおいろ日記豪華三本立て読書感想文フェア最後の一本はここ数日ですっかりお馴染み、A.S.タネンバウム、A.S.ウッドハル著、オペレーティングシステム 設計と理論およびMINIXによる実装【第二版】 第2章の後編です。
第2章の後半である第6項はプロセスの実装についての解説です。例としてMINIXのソースコードを挙げています。6.1項から6.4項では、ソースファイルやヘッダファイルを収めたディレクトリの構成を解説しています。また、重要なヘッダファイルに含まれる定数やマクロに付いても触れています。特に6.4項はプロセスのデータ構造体の定義が解説されているのでよく読みましょう。
6.5項から6.7項は初期化に関しての解説です。6.5項でブートストラップ、6.6項で初期化ルーチンおよびルートプロセス、6.7項で割り込みベクタについて解説しています。ここらはとても重要です。ブートストラップコードがないと何も出来ませんし、少なくともキーボードとクロック割り込みに対応しないと何も出来ません。正直この辺り重い話題ですが頑張りましょう。
6.8項と6.9項はIPCとスケジューリングについて。カーネルの特徴を大きく左右する部分です。マイクロカーネルを採用するのであればIPCには特に注意を払うべきでしょう。
6.10項ではハードウェアに依存する部分を解説しています。理屈に関してはそう難解ではありませんが、設計や実装を行うとなると、ハードウェア依存の部分をどれだけ切り離せるかがほかに大きく影響します。ハードウェアを隠蔽できるのであれば他の部分を高レベルで一般化でき、多くのマシンアーキテクチャに対応できるでしょう。
6.11項ではカーネルだけでなく一般にも公開されるユーティリティライブラリや、カーネルのみが参照するライブラリ等を解説しています。この項は関数の使い方を解説しているだけなのでさらっと読み下せるでしょう。
第2章の後半は特に骨のある内容になっています。正直読んでて眠いです。重いです。しんどいです。気合が要ります。でもそれだけに重要で飛ばせない部分が多いので気合を入れて読みましょう。
いい加減囲碁関連のエントリ書かないとお客さん減るなと思いつつ今回はここまで。ではまた。
あおいろ日記豪華三本立て読書感想文フェア第二弾は、アンドリュー・コーニグ、バーバラ・E・ムー著、小林健一郎訳、 Accelerated C++ 効率的なプログラミングのための新しい定跡 6~7章です。
今回はC++を便利に使う事に注力した前半部分の締めくくりです。8章以降は使うだけではなく、機能を提供する際に特に役立つ機能の解説へと移っていきます。それでも使う事に主眼が置かれている事には変わりませんが。
まず第6章では、第5章までに学んで来たシーケンシャルコンテナに対して、STLに用意されているアルゴリズムを適用する事を解説しています。後、記憶域クラス指定子が初登場します。意外な事にここまで出てきてなかったんですね。
この章は、言ってしまえばいくつかのアルゴリズム系関数の使い方を見ていくだけです。しかし、課題を工夫する事でイテレータアダプタやリバースイテレータ等、必要な事は大体網羅しています。
私見ですが、コンテナやイテレータの扱いには慣れている人でも、意外とイテレータアダプタを知らなかったりする事が多いようです (使う必要が無い事も多いのは確かですが……)。心当たりがある人は本章で慣れておくと良いでしょう。
第7章では、連想コンテナを扱います。連想コンテナの例題としてはお馴染みのワードカウントや対応表、英文の自動生成の製作を通して主に map の解説を行っています。
例題のプログラムを見ていると、なにやら懐かしい気持ちになります。大抵の人は上記の様なプログラムで map の勉強をしたのではないでしょうか?
すでに連想コンテナをバリバリ使ってる人は昔を懐かしみながら復習するのも良いでしょう。
さて、第7章までで抽象度の高いライブラリを使う事に関しては学べました。次章からは自分が抽象度の高いプログラムを書くにはどうすべきかに注力して展開していきます。しかしOOPらしくなるのは13章まで待たなければならないのがにくいですね。
ここまでは入門者さんにオススメの部分でした。今までの内容にも初~中級者が学ぶべき事は色々ありましたが、ある程度C++かじった人には次章以降を強くオススメしたいと思います。次章以降は今後二回に分けて書いていきたいと思います。
本当は Accelerated C++ の6~10章を予定してたんですが、予想外の掘り出し物を見つけたので。そっちのけで買ってきた方を読んでしまいました。とは言え、一応6~7章は読んでるのでそれも後で書きます。さらに、仕事の休み時間にOS【第2版】も読んでるのでそれも。今日は豪華三本立てです(・∀・)
その分一つ一つの分量少ないですが(´・ω・`)
さて、あおいろ日記読書感想文フェア第一弾は白井良明、辻井潤一著、岩波講座 情報科学 22 人工知能 第1~2章です。
第1章はご多分に漏れず本書の概要を述べています。人工知能という研究分野の成り立ちや応用分野をさらりと流した後、本書の構成を説明しています。
この中で一つの分野として自然言語処理が挙げられています。長月が興味を持っている分野がこれです。本当はどちらかと言うと人工知能よりも人工無能に興味があるんですが(´・ω・`)
第2章は問題の表現について。
人工知能は極論すれば解法のない問題を解くためのプログラムです。これと言って適したアルゴリズムの無い問題を、いかに推測し、制限し、探索するかが主題となります。なので問題解決の方法を定める際に、問題自体の形式や構造が重要になります。
本章では扱う問題を、解が曖昧でない、問題解決に探索を行う物と制限した上で、よく用いられる論理的な構造の理論を解説します。
内容としては問題の整理の仕方と所謂データ構造の理論になります。
問題を整理する方法の解説では、記法の正規化、操作の定義、制限条件の定義等に触れています。
また、データ構造に関しては、目的は探索なので、主に扱われるデータ構造はマルチウェイなツリー構造やグラフ構造です。
この辺りはアルゴリズム論やデータ構造に詳しい人は読み飛ばしても大丈夫でしょう。まださわりといった感触です。本格的になるのはもっと後の様で、少し物足りない感じでした。
なんと言うか、やはり研究者の先生方が書かれた本なので、全体としてお堅い感じがしますね。読む人によっては眠いかもしれません。題材が題材なので仕方ないのかもしれませんが(´・ω・`)
ということで、情報科学に興味があって睡眠薬を必要としている方は一読してみては如何でしょうか?(ぉ
はい、早くも浮気です。OS【第二版】は読むのに気合が要るので疲れます。今日はさらっと流したかったので楽に読める本を。
今日読んだのはアンドリュー・コーニグ、バーバラ・E・ムー著、小林健一郎訳、Accelerated C++ 効率的なプログラミングのための新しい定跡 0~5章です。全然軽くねぇ……orz
この本は、C++とSTLを便利に使ってしまおうと言う所から始まる入門書です。文法や規則の説明は必要になってから、とりあえず使ってみようよと言うスタンスで書かれています。以前書いたエントリで長月が言っていたスタンスですね。事実この方法は良いと思いました。
さて、この本は大まかに0~7章までの前半と8~10章の後半に分かれています。今回は前半の中でも0~5章について書きます。
まず第0章はC++事始めとしてお決まりの hello, world! から始まります。単純な hello, world! にも実はこれだけの物が詰まってるんだよ? と言った風情で書かれています。この辺りは C/C++ 未経験者以外は読み飛ばしても大丈夫です。
第1章では、早速 iostream を用いた入出力と string を用いた値の保存を行います。さらに、string のメンバ関数を使って、入力文字列に合わせて自動的にサイズを調整したフレームを表示したりもします。
コンストラクタやメンバ関数を巧みに使っていて、初見の時になるほどと思わされた覚えがあります。C++経験者でも意外と知らない string の使い方かもしれません。
第2章では、第1章で書いたプログラムを拡張します。第1章で書いたプログラムでは、フレームとして出力される文字列がそれぞれ string 型の変数としてハードコードされていました。それをフレキシブルな形に書き直すのが第2章の目的です。
ここまで来てやっとループです。まあここまで来てと言っても20ページ無いんですが。
残念なのが、コードが余り技巧的ではなくなって見ごたえが無い事です。必要な事に必要なだけ、そして解りやすく書かれているエレガントなコードなんですが、第1章で見たようなああなるほどと言った感動はありませんでした。
続いて第3章では、たくさんのデータを扱うと言う題の通り、コンテナが登場します。
これまでに学んで来た入出力やループを使って、生徒の宿題やテストの点数を入力し、学期の成績を計算するプログラムを作り、それを平均点の計算からメディアンを求めるプログラムに拡張すると言う段階を踏んで vector の使い方に繋いでいます。
ここでのプログラムも何か引っかかる物があります。それが解決されるのが次章です。
第4章に入ってやっと関数が登場します。前述した違和感の正体がこれです。既にプログラミングを嗜んでいる人間にとっては、長い main 関数が引っかかる訳です。
第4章では、前章で作成したプログラムを、関数を用いた物に書き直していきます。さらに、複数の生徒の成績を扱う為に、データを構造体によって関連付けたり、ちらっと例外も顔を出します。それと構造体や構造体を利用する関数をヘッダファイルに追い出したりもしてますね。後にクラスの解説へと繋がりそうです (と言うか繋がります)。
この章では sort や max 等のアルゴリズム系関数も出てきます。長月の私見ですが、どうも長月を含めた中途半端なレベルのC++使いは、STLのコンテナは良く知っていてもアルゴリズムを良く知らない様に思えます。本書を読んでいると、このやり方ならそういう偏りは出来にくいかもなあと思います。
本日の締め、第5章ではイテレータが解説されます。前章のプログラムに合否判定の機能を加える為に、vector の巡回をすると言った感じです。
イテレータは vector に特有の物ではありません。本章では、vector の部分削除や挿入に伴うコピーに起因する速度低下を不満として、list への差し替えを行います。
さらに、イテレータで範囲指定する類の関数も使い始めます。
なんと言うか、やっとSTLの本領が見えてきたと言った所でしょうか。C++はちょっと触っている人なんかはここら辺り方楽しくなってくるのではないでしょうか。
上記のレビューにもちょこちょこと書かれていますが、本書は入門書で有りながら、経験者にも有益な本でもあります。文法や機能等に着目した従来の本と違い、問題解決に着目した作りであるため、意外な所で今までもやもやしていた物が解決したりします。
自分はC++を使っているしそれなりに使えているからと思っている方も一度読んでみては?
え~と、タネンバウム本分厚いです。重いです。立ち読みには向きません。買った理由がちょっぴり解りました。
さて、今日読んだのは、A.S.タネンバウム、A.S.ウッドハル著、オペレーティングシステム 設計と理論およびMINIXによる実装【第二版】の第2章前半です。ええ、前半です。2章全部じゃないです。2章だけで122ページ有りますから、流石にさらりとは読めません(´・ω・`) 3章に至っては180ページ超えてるありさまですから……orz
そんな訳で今回は2章 (前) です。
2章のテーマはプロセスです。2章ではプロセスの概念に始まって、複数のプログラムを制御する為の理論とMINIXでの設計、MINIXを例にした実装を解説しています。
今回はMINIXでの設計の概要までを読んで思いつくまま書き殴ってみます。
まず最初はプロセスと言う概念についての解説です。本書ではプロセスモデルの解説を通して概念の説明をしています。そしてプロセスに求められる物、必要な機能の実現等の理論の解説が続きます。
プロセスと言うのは実行中のプログラムを指す言葉です。実際には千差万別であるプログラムを、統一的な方法で管理できるように抽象化した概念をプロセスと言います。
この項で解説されている基本的な概念をしっかりと理解しておかないと後に混乱する事になります。プログラムとプロセスを混同するとスケジューリング辺りでパニックに陥るでしょう。
第二項はプロセス間通信の解説です。
マルチプログラミング環境に於いては、複数のプロセス間での通信が頻繁に行われます。第二項ではそのプロセス間に於ける通信方法や、それにまつわる問題、その解決法等を解説しています。
プロセスは一つ一つ独立した物です。しかし完全に独立してしまうと、そのプログラムに必要な動作を全て実装しなければなりません。また、権限の問題で使用できない機能を利用しなければならない場合もあります。ですから、完全に独立させるよりは、必要な機能を持った別のプロセスに処理を委譲できる様にすべきなのです。そこで必要になるのがプロセス間通信であり、通信に際しての決まり事と方法なのです。
第三項は典型的なIPC問題とその解決についてです。
IPCとは InterProcess Communication の略で、プロセス間通信の事です。IPC問題と言うのは、デッドロックや同期化、競合状態に関する典型的でプリミティブな事例の事です。これを解決する事で、実際の利用時に起きる複雑な状態にも対応できると言う、不具合の最小構成の事だと考えれば良いでしょう。
第三項では、IPC問題の中でも特にありふれた問題を三つ取り上げて、その問題点と解決方法を解説しています。
第四項で解説されるのはスケジューラ、いよいよ大物登場です。
これまでの解説で棚上げにされてきた、具体的なプロセスのスイッチングやその順位の決定についての理論、与える資源 (時間や機器や機能) の調整について等、プロセス管理の根本であり煩雑で難解な部分の解説を行っています。
単に実行を開始された順で同じ量の資源を提供するのであれば複雑な事は有りません。しかし、処理には優先順位があり、実現すべき処理に必要な資源の量もそれぞれです。また、プロセスによってはスリープする事もあり、その間に何もしないのは資源の浪費になります。そう言った無駄を省き、必要な所に資源を回す為にもスケジューリングや資源の割り振りは慎重に行わなければなりません。
第四項ではこう言った問題に対する今までに行われてきた提案を解説しています。
第五項では、これまでに解説されてきた理論を元に、MINIXを題材とした設計の一例を解説しています。
内部の構成、プロセス管理、プロセス間通信、スケジューリング等について、MINIXではどの様な理由でどの様な選択をしたのかが解説されています。ここで解説されているMINIXと言うOSのプロセスに関する思想を理解しておかないと、この後に続く具体的な解説で混乱します。
ここまででも十分に厄介な第2章ですが、これまでの内容を理解していないと続く第6項で大変混乱します。
プロセスはOSの根幹をなす概念です。他のほとんどの部分から依存される部分ですから、要点だけはしっかりと掴んでおきましょう。
#(´ー`)oO(当blogのお客さんでこのエントリとかOS【第二版】に興味ある人っているのかしら? 興味ある人はコメントキボンヌ
のっけからごっつい本です。なんかこれが二冊あれば人を殴り殺すのも可能なんじゃないかって感じがします。と言うか、囲碁blogのアンテナから来る人が多い事を承知の上でこの本を選ぶ辺り、長月は捻くれ過ぎなんだなぁと他人事のように思うのでした。
今日から読み始める本は、アンドリュー.S.タネンバウム、アルバート.S.ウッドハル著、千輝順子訳、今泉貴史監修、オペレーティングシステム 設計と理論およびMINIXによる実装【第二版】です。
ページ数1200ページ越え、四割がソースコードとは言え、量も内容も大物です。正直長月なんでこんな物買ったんでしょうか? おかげさまで自作ソースコードを収めたディレクトリにFDとかHDDから起動するためのブートストラップコードとか転がってますよ'`,、(´∀`)'`,、
さて、肝心の内容ですが、今回は第一章についてです。
第一章はオペレーティングシステム概論と言うタイトルの通り、OSとは何であるかや、OSの歴史等が書かれています。また、歴史に沿って、現代のモダンなOSならばまず搭載している機能や概念等も説明されています。
OSと言う概念やOSの歴史等は基本的に読み物です。技術的な面で見れば余り役立ちません。しかし、現在から見ればチープなハードウェアとソフトウェアしかなかった時代を思うと何とはなしに感慨深い物も有ります。テープメディアや8インチFDや5インチFDの時代を知る (当時年齢一桁) 長月はこの辺りを読むと、セピア色どころか思い出すのさえ苦労する時代の思い出が蘇ります。当時は父のひざの上で訳も解らずBasicのコードを眺めていた物です。
さらに進んでMINIXの歴史を通り過ぎると、コンピュータ技術の進化を辿るように機能や構造、概念の説明が続きます。
まずは概念の説明がなされ、プロセスやファイルシステム、メモリ管理やコマンドインタプリタ、システムコール等が解説され、OSの一般的な構造へと続きます。
構造の解説では、モノリシックカーネルやレイヤ構造を持ったシステム、仮想マシン、クライアント/サーバモデル、所謂マイクロカーネルまで基本的な構造を割合丁寧に、且つ急ぎ足で説明しています。
ここまでの内容は技術的な観点で見ると余り役に立たないものが多いでしょう。第一章は全体を俯瞰した物なので抽象度が高いのです。しかし、考え方を知らなければ設計や実相の段階で無用な悩みを抱えることになるので、こういった概念も無視できない物では有ります。
本エントリを見てこの本を買おうと言う人は余り居ないと思いますが、この本を読むのであれば、まず第一章をしっかり読む事をオススメします。
しんご及びふぇるお兄様オススメのおいコーを試しに買ってみたので読んでみた。
とりあえず薄い、内容じゃなくて本の厚みが薄い。さっくり読めた。時間の無い人にはありがたい。
レビュアのオススメポイントがあまあまの恋愛模様だったわけですが、これに関してはちと微妙な所です。悪くは無いですが良くも無い感じでした。主人公二人の気持ちは割とわかり易い感じで良いと思いましたが、所々で気に食わない表現がありました。どうも中盤に多かった感じです。
章立て毎に評価するなら、第一部より第二部の方が面白く感じました。第一部は割とどうでもいい事を聞かされた感があります。かといって第二部が手放しで面白いかというとそうでもないです。主人公男に関して言えば第二部の主人公男はあまり良い印象ないです。
全体的に見ると、文体とかセンスがおとなしくゆったりした感じで長月の好みに近いです。でもボール半分外れてます。長月は割と馬鹿でアップテンポで軽い物が好きです。同時にゆったりと静かな物も好きなんですが、おいコー1に関してはちと方向が違いました。長月の好きな感じを一言で言うなら曇天です。晴れほど明るくない、でも雲間から陽は射してる、そんな感じが好きです。でもおいコー1の暗い部分はなんか暗いというより重いな感じでいやんでした。
という訳でなんか評価低そうな事書いてますが、総合的に見て評価は低くないです。悪くは無いです。少し面白いぐらいに感じます。続き次第で楽しめるかもしれないので、隙を見て少しずつ揃えていく事にします。
とりあえず第一章を読み終わっての感想。
読んでみて長月はSTLのコンテナとイテレータに関しては問題ない程度、アルゴリズムがちょっと弱いらしい。と言う事が判った。
ので、この本、クイズ形式になってるからか、傾向と対策本として使えそう。
問題集になってる本のいい所はちゃんとやれば自分の弱点がわかる事。そう言った意味ではExceptional C++はちゃんと問題集として機能してそう。
難易度に関しては、入門者や初級者にはちょっとオススメできない感じ。序文にもある通り、ある程度C++に触れた経験が無いと辛いと思う。
かといってバリバリに使ってないと無理かと言われるとそれ程でもない。ちゃんと学習してそれなりに自分で何かを作ってれば経験してる事が書いてある様に見える。
どこかのBBSやMLで相談されていて、解答を読んでなるほどと思っていた事なんかが載っていたので、割と多くの人が悩む所についての解法が書かれている感じ。
物によってはそう言った場で挙げられた解法よりよさげな事なんかも書かれているので、ある程度「濃ゆい」C++コミュニティに参加してる人なんかは読んでみても良いんじゃないかと思う。
cppll辺りに参加してる人は一読してみては?
Exceptional C++が届きますた。
これで気になってるC++本コンプまで二向聴。
Exceptional C++を読み終わったらEfficient C++かBoost本かSTL標準講座を買うつもり。
どれにしよう?(´ワ`)
その前に目の前の本をちゃんと読め? おっさる通り……orz
Modern C++ Design読んでて思ったこと。
確かに斬新、トリッキーで解りにくいところはあるけど凄いのは凄い。でもちょっとやりすぎじゃないですか?
なんかそこまでするの?(´Д`;) と思うところがいくつか。
タイプリストとか便利そうだけど、コンパイルタイムはともかくランタイムは速そうだけどそこまでやりますか? って感じ。
後を読んで必須だと思えたとしても、却ってLoki自体どうなの? と思うことになるかもしれなさげなトリッキーさ(´・ω・`)
なんか2chとかで割とえらい言われ様だった理由が理解できた(´・ω・`)
Modern C++ Design手強し(´・ω・`)
テンプレートはユーザとしては慣れてるけど実装者としては慣れてないので宇宙語に見える個所がちらほら出てくる(´・ω・`)
まだ大して難しいところには入ってないはずなのにもうこんな状況で大丈夫ですか?>俺
#それでも仕事の休憩時に読んでる中学レベルの英文法書よりは理解できる辺り何かを間違えてる……orz
Modern C++ Designを買った。
とりあえずまえがきをさらっと斜め読みしてポリシークラスの解説を読み始め。なんか大体のことは知ってるっぽい。どこで知ったのかな? と考えてみるとやねうらお氏のプロフェッショナルWindowsゲームプログラミングにもポリシークラスのことが載ってたことを思い出す (2のほうだったかもしれない)。Modern C++ Designよりあっさりしていて若干舌足らずな印象があった。そういえばプロフェッショナルWindowsゲームプログラミングにはほかにもパラメタライズドなSingletonやMediatorも載ってたはず、原点はModern C++ Designか元になったC++ジャーナルの記事なのかもしれない。
まだちゃんと読んでないのでなんとも言えないけど。ポリシークラスの概念を鑑みるにこの本ではポリシークラスが大活躍するはず。この間接性が理解を妨げそうな予感がしないでもない。気合を入れないと読み下せなさそうなのは面倒だけど、身に付けると一歩先に行けそうな内容なので頑張ってみます(´・ω・`)
C++の設計と進化、所謂D&Eがやっと届いたヽ(´ワ`)ノ
しばらく本の虫けってー(゚∀゚)Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒(。A。)
こうなるとARMも欲しくなってきたり。
あぁでもModern C++ Designも欲しい。
Exceptional C++も。
あ~その前にGame Programming Gemsのvol.2も欲しい。
ていうかAmazonのショッピングカートの後で買うリスト長すぎ。
いくらお金があっても足りない予感(´・ω・`)
追記:Modern C++ Design購入済み
追記2:Exceptional C++購入済み
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |