メタプログラミングRuby第2版を読んだ

メタプログラミングRuby 第2版

メタプログラミングRuby 第2版

本書はレビューに参加させていただき、本を頂いていたものなんだけども、1版やレビューで読んでいたこともあり、なかなかきっちり読み終えられていなかったものを会社の読書会にて読了した。なお、今もオンライン読書会にてさらに精読中。

本書の第1版はRubyを学び始めたころ、初めてのRubyプログラミング言語 Rubyに続いて読んだ記憶がある。確か当時は中級者向き的なことが書かれていて、大丈夫かなあなんて思っていたはずだ。

本書はタイトル通り、Rubyにおけるメタプログラミングを解説する本で、シンプルなものからRailsやいくつかのGemの場合まで、様々な場合について教えてくれる。Rubyプログラマの間ではとても有名な名著で、影響を受けた人はとても多いと思う。メタプログラミングというと難しいものや不思議なものにとらえられがちなものだけど、本書を通じて理解が深まり決して不思議なものでないというところまでたどりつけることと思う。

タイトルで敬遠する人がいるかもしれないけど、今では一通りRubyの文法、制御構造や良く使うメソッドなんかをさらったあとはこの本を読んでみるべきだと思っている。この本にはRubyを楽しいと思うための要素が詰まっていると思うからだ。プログラミング初学者はRubyはなんでもできるのだなあと柔軟性にただ感心するだろうし、他言語から来た人はRubyの柔軟さに良くも悪くも驚くと思う。けど、ここらへんこそがRubyなんだと思う。冒頭にあるMatzの「Rubyは君を信頼する」にグッと来た人も多いんじゃなかろうか。応えたくなるのが人情である。

また、本書は1版の時と異なり2版はオライリーから出版されているが、訳は変わらず信頼と実績の角さんなので、なんか訳が不自然で読みにくいということもない。Rubyを学ぶ万人にオススメしたい本である。

アルゴリズムとデータ構造を読んだ

アルゴリズムとデータ構造

アルゴリズムとデータ構造

アルゴリズムとデータ構造についておすすめの本を聞いてみたらおすすめされたので買って読んでみた本。 いわゆる名著ではあるがいかんせん古い。古典の部類。原著著者は超有名人である。

ニクラウス・ヴィルト - Wikipedia

アルゴリズムとデータ構造について振り返りたく読んでみたのだけど、とても古い。訳書(本書)の初版が1990年、原著は1975年!なお、本書は新訳らしく別の更に古い訳本があるらしい。 古くて何が困るかというと、サンプルコードはまあ擬似コード的にごまかして読むにしても、バブルソートが泡立ち分類と訳されるなど訳語のセンスにだいぶ乖離感があるのがつらかった。

言葉遣い的にもなんだか読みにくいなあと思ってしまい、途中で投げてしまいそうな危機感が出てきたので本の内容には疑問を持たず、とりあえず全部流して読むことにして通読した。本書をさらったことを土台にして、

アルゴリズムイントロダクション 第3版 第1巻: 基礎・ソート・データ構造・数学 (世界標準MIT教科書)

アルゴリズムイントロダクション 第3版 第1巻: 基礎・ソート・データ構造・数学 (世界標準MIT教科書)

なんかを読んで理解を深めていこうと思っている。

あまりちゃんと読めてないのでこうすごかったとも言いにくいんだけども、木構造とハッシュについてはすごくしっかり語られている印象を受けた。他で疑問に思ったときに参照すると理解が深まったりするかなあなんて思っている。他にもベーシックな配列等基本的なデータ構造、ソート、再帰などに触れられている。数学的な論拠を逐一示しながら進むので、数学好きな人は嬉しいのかもしれない。

考具を読んだ

考具 ―考えるための道具、持っていますか?

考具 ―考えるための道具、持っていますか?

いつもの技術書ではなく実用書というたぐいの本を読んだ。何かのきっかけで何年か前にもらったものだと思うが、ずっと本棚にしまわれたままのものだった。まあせっかくだしぐらいの勢いでざーっと読むことに。

本書は結構有名な本のようで、ググると結構な絶賛の記事も出てくる。奥付を見ると初版は2003年、実際読んでる本は2009年の29刷ということで結構な人気であったことは間違いなさそう。

内容としてはカラーバスなどのインプットするための方法やブレスト等のアウトプットの方法まで、色々なアイデア出しのための方法と道具について書かれている。現在から見るとだいたいが当たり前な方法に思えるのだけど、もしかするとこの本らがきっかけになって広まったのかもしれないなと思ったりした。だいたいが既知のものなので、目新しさという意味では面白くなかった。まあ私が技術職で特別にアイデアマンであることを求められてるわけでも、自身でなりたいと思っているわけでもないので真剣味が足りないという可能性はある。逆に言えば、アイデア出しの方法等についてまったく知らないという人にとってはきっと当時と変わらず良い書籍なのだろうと思う。

全然本の内容とは関係ないけども、こういう本は分かりやすく書かれていることはもちろんだけど、前提知識があまり必要とされていないので読書がものすごく早く進んだ。数時間もかかってないと思う。技術書読むのにはエネルギー使うもんだなあと比べて思ったりした。

ネットワークはなぜつながるのかを読んだ

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

誕生日のプレゼントにいただいたネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識を読んだ。 かねてからよく言われる古典的な良い本であるが、LANとかの仕組みまでは知らないなあと思ってウィッシュリストへ入れておいたものだった。

いわゆるネットワークエンジニアではないところの多くのエンジニアの人たちだとそこまでローレベルな話を気にする人は少ないものだと思うので、そういうレベルからすると知らない話がたくさんあって、TCP/IPの仕組みをよく考えると知らない、なんて人は学ぶところが多くあると思う。

僕は昔々に情報セキュリティスペシャリストという資格をとったことがあるんだけれども、そこで勉強したことよりも通信の始まりから終わりまでのことが書かれており、最初に書いておいて通り、LAN以後のことはよく知らなかったので興味深く読ませてもらった。一方、OSI7階層モデルのなどの話は全然されない。あくまで本書の最初に書いてあるとおり、ウェブブラウザからリクエストが飛んで行ったらどうなるか、という話をされる。ウェブブラウザからLANを通りルータからプロバイダ、そしてインターネットへ…と流れていく通信を、各機器の役目や通信プロトコルの仕組みを通して順次説明されていく。

実際僕がプログラマとして本書で勉強したことが役立つかと言われると、既にある程度理解している立場からすれば万が一役立つことがあるかもしれないぐらいの感じではある。ただ一通りに通信の仕組みに触れられているので、何かで必要になった時に理解が早まるきっかけを持っておくという意味では浅く広く得た知識が役に立つかもしれない。しかし、きっとネットワークを扱う事自体を本職とする人たちからすればまるで足りないだろう。ただ、通信の仕組みがまるで想像できない人や、逆にエンジニアとの話をする上で共通の知識を身に着けたいという人は一読しても良いと思う。まるで仕事に関係がない人でもネットワークって不思議だなあって思ってる人は楽しく読めるかもしれない。

これだけはおさえたい 文系プログラマーの数学知識 基礎の基礎を読んだ

これだけはおさえたい 文系プログラマーの数学知識 基礎の基礎 (プロフェッショナル「確実」養成講座)

これだけはおさえたい 文系プログラマーの数学知識 基礎の基礎 (プロフェッショナル「確実」養成講座)

文系プログラマにはありがちだと思う数学コンプレックスみたいなものが僕にもあって、折を見てちょくちょくとそれっぽいことを勉強している。どこかで紹介されていたのでウィッシュリストに入れていたところ、誕生日に買っていただいたので読んでみた。

全体の感想としては、特に数学に苦手意識のある人のための本ではなく、ただ単に高校で学ぶ数学の基礎を並べた感じだった。僕としてはそれで数学が理解できているなら今頃数学コンプレックスなんぞ持っていないわけで、主語の大きさに負けて巻き込まれてしまったというのが正直なところである。 コラムのうちのいくつかや、章の最後に数学の知識はコンピュータで言えばこういうところに使われているという話も申し訳程度で、数学の楽しさを伝えてくれるものではないと感じた。

肝心の数学自体の解説も特に分かりやすいと思うことはなかった。教科書と何ら変わりないと思う。常々数学の問題を解く際に疑問に思っている、唐突な「XをYに置き換えると~」というような「え?なんで置き換えるの。じゃあ最初から置き換えといてよ」みたいないかにも数学の苦手な人が思いそうな疑問はスルーだったし、「文系プログラマー」というのは煽りだったのだなと思う。

数学は論理というが、こういう解き方は最初から解き方を知っている人の解き方なので、それは暗記というものだと思う…別にそれ自体を問題と思っているわけではない。実際に大学受験の際は僕は理解せずに暗記だけで結構な点数を取れていたから。ただやっぱり自分で活かせる知識として理解したいと思う僕にその解説では困る。

この本は文系のカリキュラムゆえ数学に長く触れていないだけで特に数学が苦手ではなかった人が知識をさらうのには良いのかもしれない。僕にはもうちょっと根本的な、数学概念とでもいうのか、そういうところから改めて入ったほうが良いような気がした。

MHXの村、集会所の全てのクエストを終えたので主に操虫棍の感想

プレイ時間は300時間ほど。

MHXは4のシステムベースに作られており、マップ等グラフィック的なことも変わりなく見える。グラフィックの美麗さを売りにしているゲーム&プラットフォームではないけども、時代が進むにつれて良くなっていって欲しいとは思う。WiiのMH3HDを見ると特にそう思ったりする。音楽は四天王を中心に良かった。誕生日のウィッシュリストからサントラもいただいたのでゲーム外でも楽しく聞いている。操作性は狩技を中心に不満がある。特にギルドスタイル用の2個狩技をセットできるパネルがないのが問題。下画面にパネルを設置せずともショートカットはあるが、ゲージの溜まり具合を管理しないで良いと思う人はいないだろう…システムでは今回は大量のチケットが手に入ることもあり、アイテムボックスのページ拡大等を考えて欲しかったり、モンハンの伝統となっている不便さをそろそろ解消しても良いのではと思う。

クエストは水増しが多すぎると思った。狩猟、環境不安定狩猟、捕獲と同じモンスターに対してクエストが3つあったりする。ジャギイ20頭とかの狩猟が村、集会所合わせると7、8個はあったり、採取もクエスト数が多い上に内容が同じものが多く「何回特産キノコ集めんねん!」と言いたくなるぐらいある。明らかに数だけ増やしたでしょって感じである。村最終はそこそこやりごたえがあるものだったが今までのにと比べると簡単。特に四天王おかわりは他の最終に比べて楽勝だった。

今回の一番のシステムの売りであるスタイルと狩技は概ね良いシステムであったと思う。ストイックな変なリアルさもモンハンの良さであると思うけども、こういう必殺技というノリはやはり楽しい。ただスタイル、狩技は武器種によって使える使えないの差がありすぎだと思う。 僕は操虫棍のギルドスタイルメインでクリアしたけども、狩技は基本的に絶対回避と絶対回避臨戦という武器種非依存の回避技ばかり使っていた。まあこの2種は全狩技中でも最強クラスだと思うが。

操虫棍の固有狩技3種の感想はこんな感じである。

  • エキスハンター
    • 苦労なく3種エキス集められる上に効果時間の上書きもできて便利だけど、頼らずとも困らない時間でエキス集めるぐらいの腕はある
  • 虫纏い
    • 怯み値が高く比較的使える狩技だったけどもエキスによって性能が変わる上に張り付き続けないと意味が無いというプレイの制限をされるし、後述飛翔蟲斬波との連携を考えると効果時間目一杯使えないことも多い
  • 飛翔蟲斬波
    • それ自体のモーション値は悪くないが、飛翔蟲斬波の動作にかかる時間分、赤エキス取って殴ってるほうがダメージがあるので使う意味が無い。単発攻撃ではないので眠らせて…っていうのも難しい。虫纏いとの連携を考えると威力は増えても自由度が制限され、結局ベストタイミングで出せずに無理をして反撃をもらうというオチになる

スタイルでも操虫棍は今作最強スタイルと名高いブシドーとの相性が非常に悪い。詳細は公式等見てもらうとして、取りにくい位置にあるエキスを取らなければいけないときは印弾を当てての一発勝負になる。プロハン様なら問題ないのかもしれないが…って思わざるをえない制限。制限が自力ジャンプできないとかなら僕も最初からブシドーで快適にヒュンヒュン避けられたのに。

HR100前後から違う武器でも遊んだけども他武器のブシドー、特にガンナーでのブシドーは快適で、2chで「ムシドーはマゾ用」と書かれていたのが非常によく分かった。ただ強すぎる感が否めないので次回作以降は調整待ったなしだと思う。

ブシドーガンナーでヒュンヒュン避けながらバシバシ撃ちまくるのは気持ち良いので剣士に飽きた頃にやってみるのはオススメ。ガンナーをちゃんとやったのは今作が初めてなんだけども、特に体の長い奴に貫通弾をキメるのが気持ちよかった。

あと、今回はたまたま飲み会の席上で教えてもらったモンハン好きプログラマ同士の集まるSlackに招待してもらったことをきっかけとしてそのコミュニティの中でよく一緒に狩りに出かけたけども、今回はそこの方々のおかげでより楽しく遊べた。入りたい方は教えていただければ招待するので是非。

Rack::VCR についてのメモ

techlife.cookpad.com

VCRというRequest Specのときに実際のレスポンスを記録しておいて高速に外部APIらとのテストをするためのGemがあるんだけども、APIを提供する側があらかじめレスポンスを用意して他に使わせることを目的とした逆転の発想のGem。使いそうな気がする。