LPIC 201 受けてきました

非常にいまさらながら LPIC 201 試験受けてきました。結果から言うと合格でした。(気合を入れたのは)一週間程度でしたが、難易度としては高めで、101, 102 と比較すると記述問題の割合が増えている感じでした。

試験範囲については、いろんなところで言及されているのでそちらに丸投げして、実際にどういう問題と、傾向だったのか今後の試験対応の為に記録しておきたいと思います。

まず、当たり前の事ですが、全体的に満遍なく問題が出題されていました。配分に関して詳細には覚えていないですが、全 60 問の内各章 7~10 問ずつくらいの出題数でした(勿論偏りは在ると思いますが)。あと、101、102 を受験した時よりも日本語が意味不明ということは無かったです(慣れた?)。

試験対策には今回もチョコ本を使用しました。ただ、2 年くらい前に購入した本だったので内容は 3 版。いま出てるのは 4 版。そして、問題の ver は 3.5 だったはず。僕が使用したのは 3.0 対応本なので、基本的に役に立たない感じ。試験費用が高いのでコレ以上お金かけたくない僕はコレで戦うことにしました。

Amazon の星の数を見れば分かる通りあまり評価が高くないです、この本。その理由が誤植云々と書かれているんですが、それよりも内容の薄さが目立ちます。
勿論、出力結果を表示してあの手この手で理解のしやすさを重視して書かれているのであろう事を考えているのだろうと思います。ただ、内容が試験のヤマをはるように書かれているため全体的な知識の保管としては役不足でした。この本の役割は、あくまでも全体的な出題傾向を図る程度に使用することを推奨します。事実この本の知識確認の問題レベルは低すぎるため、解けたところで大した効果は得られないと思います。

問題集

じゃあ結局お金払って問題集のサービスを使えば良いのかというと、どうも違いました。以下 WEB 問題二種考察。

Ping-t

有名ドコロで言えば、Ping-t がありますが、掲示板を見た限りで言うと、問題集の内容と異なる問題が多いとのことでした。あくまでも知識を補完する為、試験の傾向を分析した問題設定なので仕方ないといえば仕方ないです。使うことを否定しないですが、銀の弾丸では無いです。特に 101, 102 の問題が無料で公開されてるので見てみると分かるんですが、あまり解説が良くなかったり。問題に焦点を当てた解説ではなく、関連問題の解説を全部含んで載せてるので情報量多い割に問題毎の解説が同じことがザラ。読むのがめんどくさくなります。あとシミュレーションのコンソール画面の色が見辛い。

クラムメディア

後、WEB 問題で有名なのはクラムメディアです。クラムメディアはお金払うの嫌で WEB の無料版のみ使ってました。内容的には当たらずとも遠からずです。まぁ所詮無料なので古い内容のものと、一部のみ公開だろうということでこんなものか位ですね。ただ、自分の知識の穴埋めにはちょうど良く、出題傾向もチョコ本より正確ですのでコレは良かったです。時間をあまり勉強に使いたくないなら、取り敢えず問題をやって、わからない範囲、内容の調査を繰り返すといいです。こちらは効果ありでした。全く同じ問題かな? ってのは数問程度で、後はひねりが加わったのが 2、3 割程度と残りは想定よりも難しめの問題でした。

出題内容雑感

最初にも書きましたが、記述の問題数が多くなってる印象だったので、正確にコマンドとオプションを使えないといけなかったり、コマンドの中にファイルパスが入ってくる事が複雑さを増していました。まぁファイルパスは Level-1 を取っていれば想像が容易にできるのではないかなと思います。個人的に食わせ者だったのはカーネルの make オプションと、/proc 以下のファイルでした。普通にチョコ本、問題集で触れてなかった話がガンガン出題されているのでデバイス周りは鬼門かなぁと思います。特に普段使いで Linux を使っていない場合は。

ネットワークコマンド周りは一時期無線のセットアップに苦心していただけあって全く問題なく、あぁ昔やったやったと思いながら解けました。これもまた、最近の便利な Ubuntu とかを laptop で使ってると直面しない問題なので、受験される方はコマンドラインから laptop の無線 LAN 接続をやっといたほうがいいと思います。

予想通りと言えば予想通りでしたが、個人的にはカーネル周りと DNS の問題が難しかったので、個人的にサーバを運営していない (していても使わない) 人は実機で試しましょうとしか言えないですね、はい。最後に、問題全体の印象として、構築運用を行う技術者を対象にしているだけあって、目的をシミュレーションし、トラブルシューティングを行う様な問題が多かったです。これは記述、選択関係なく全体的に多く出てました (多分 5 割くらいはシミュレーション)。なので、設定ファイルからどういう情報が読み取れるのか、またコマンドを実行した際に返ってくる出力でどういう状況が想定できるかが問われます。要するに実機触れってことですね。VM はあまり推奨しません。実機で。後 MacUNIX 系コマンド入ってるからといってそちらを使おうとするのも論外です。仕様が異なるので役に立ちません。

というわけで、今回は 201 の問題傾向の反芻でした。次は 202 受けたいんですが、クレジットカードの関係で今月内の受験は無理かもしれません。あとやる気(ここ重要)。今回のでやはりこれくらいの規模の試験は一週間位勉強すれば受かる事が分かったんで取りたくなったら受けてきます。


今回 DMM さんに時間いっぱい吸われましたし... 金剛さん...

お金払いたくなかったから買わなかったけどもしかしたら良いかもしれない書籍 (本屋で立ち読み済み)

HTTP の教科書

Web の勉強をするなら取りあえず買っておけば良いんじゃないかという感想を持った一冊。HTTP という Web 初心者を殺しにかかってる謎のプロトコルを分かりやすく仕組みから解説しています。そしてプロトコルってなんぞやって所も解説されていてコレ一冊読めば大枠は大体書いてる状態。ただし、HTTP の話なので途中からはやはり初心者殺しのステータスコードとリクエストヘッダーの説明ラッシュになってしまいますが、細かい仕様の部分は読み飛ばしてしまって、後から疑問に思った時に参照すれば良いかと思います。というワケで目次を見てみましょう。

目次

第 1 章 Web とネットワークの基本を知ろう
第 2 章 シンプルなプロトコル
第 3 章 HTTP の情報は HTTP メッセージにある
第 4 章 結果を伝える HTTP ステータスコード
第 5 章 HTTP と連携する Web サーバー
第 6 章 HTTP ヘッダー
第 7 章 Web を安全にする HTTPS
第 8 章 誰がアクセスしているかを確かめる認証
第 9 章 HTTP に機能を追加するプロトコル
第 10 章 Web コンテンツで使う技術
第 11 章 Web への攻撃技術

こうやって目次を見ると本当に一通りの内容を解説している本だと言う事が良くわかります。割とプロトコルステータスコード、HTTP ヘッダーについて解説している本はあったりするんですが、そこに認証の話や SSL、攻撃の話も同一の本でしているのはこの本くらいな気がします。割と、攻撃についてはセキュリティ本でとか、SSL に関してはサーバー関係の本でとか、ネットワークの本でみたいなのが多いです。後、Web の性質上どうしても仕方ないんですが、Apache の設定についての話とか、PHP とか他の言語ありきの話とかが多いのも今までの困り者だった気がします。コレから Web を勉強するのに言語とかサーバー構築を先にある程度理解してる奴がどんだけ居るんだよみたいな話ですよね。なので、この本は一発目に読んでもこの本だけでこの本の内容を理解出来るんじゃ無いでしょうか。読み切るのに他の本は多分要らないです。

これだけもてはやしておいてなんですが、大学で教材として使いたいとちょっと思ってウチの学生に最後まで読ますのは困難を極めると思い至った次第でした。良い教材になる気がするけど、ステータスコードの話以降が小難しい... プロトコルの話だけでも読ませるっていうのでも良いきはしますが。他の先生方は教科書の指定にはどういう観点で選んでるのか気になる今日この頃でした。

世界でもっとも強力な 9 のアルゴリズム

コンピュータの世界に足を踏み入れると必ずと言っていい程話題に出てくるアルゴリズムを (紹介 | 解説) している本。アルゴリズムといっても概要程度の内容で、簡単に説明してくれているおかげですこぶる読みやすく、この本から身近なアルゴリズムの事を知れば良いんじゃないかな、と言える内容でした。完全に読み物です。絶対読むべきとはいかないまでも中々良い本ですし、ページ数もそんなに多くないので読書をあんまりしない人向けの本なんでしょうかね。

目次

第 1 章 イントロダクション
第 2 章 検索エンジンのインデクシング
第 3 章 ページランク
第 4 章 公開鍵暗号
第 5 章 誤り訂正符号
第 6 章 パターン認識
第 7 章 データ圧縮
第 8 章 データベース
第 9 章 デジタル署名
第 10 章 決定不能性とは何か
第 11 章 まとめ

2 章から 10 章までが各アルゴリズムになっており、各章にて解説という形です。読めば完全にアルゴリズムの中身が分かるわけでは無いですが、これらのアルゴリズムの存在を知らない人は先ず読むべき位の位置づけの本でした。アルゴリズムを全く意識していない (そもそも何それみたいな) のは非常にシステム業に携わる人間としては危ないのでどうにかしんと駄目よって人に是非読ませたいです。後、学生にもこういうモノを知っておいて欲しいというのは指導側の我がままでは無い筈。

ページランクの辺りでシミュレータを作ったみたいな話があるんですが、面白そうなんでヒマがあったら僕も作ってみましょうかねぇ。多分そんなに難しくない気がします。後は、個人的に前からやりたいって思ってるのはパターン認識というか機械学習の辺りですかねぇ。


そういえば、最近入門者向けの本を何冊か読んでるので、一度そういう本と内容を纏めた記事を書いても良いかも知れないですねぇ。 まぁ本を読む習慣が無い人に何言っても読まないっぽいんで、本以外に何か手を考えたい所ではありますが、取りあえず学習意欲が上の人からフォーカス当てて何かしら考えるとします。

C の復習

この間データ構造の勉強をしている学生を見て、久しぶりにアルゴリズムとデータ構造の復習をしたくなり、ヒープソートを書いて見ました。ヒープソートは大まかな処理自体は知っていたけど、作った事も特になく、C の復習を兼ねて書きました。

コードは gist にあげてるのでそちらを参照。ヒープソートを実装する時に取りあえず、アルゴリズム辞典でアルゴリズム自体の確認を行い、実装の流れでした。以前にクイックソートを書いた事があり、その時にも再帰を使ったので調子に乗って再帰で作ったんですが、結果から言うとコードの量が多くなったので、単にループだけで実装するのが正解だった気がしますが、まぁそれなりに綺麗に書けたので良しとします。

今回アルゴリズム辞典見て実装したわけなんですが、やっぱり数式出されると頭が理解するのに時間が掛かるのが自分の弱点だなぁと思ったので、定期的にアルゴリズム辞典に書かれてるモノを実装していきたいなぁと思う次第でした。リハビリ大事。

Rails で CSS 読み込みと && Haml を使って HTML 5 の meta タグ記述

CSS 読み込み順序

SCSS を読み込む順序を付ける方法は下記の記事を参考に分かったのですが、今ひとつ CSS が分からなかったので調べてみました。

結果としては下記の記事で解決出来ました。

要するにこういう事でした。

/*
 *= require_self
 *= require twitter_bootstrap/bootstrap.min.css
 *= require twitter_bootstrap/bootstrap-responsive.min.css
 *= require_tree .
 */

分かってしまうとほんとに何でも無いですね。``*= require #{assets/以下からのPATH}``で出来ちゃうんですから。

Haml で HTML 5 の meta タグ

そんな特筆する事でもないんですが、軽く疑問に思って <meta charset="utf-8"> の指定を他の奴に倣って書いたら動いたのでこれも記録。

%meta{ :charset => "utf-8" }

これだけ。

rails の備忘録

attr_accessible の挙動を忘れないように記録。

class LineItem < ActiveRecord::Base
  attr_accessible :product, :product_id, :id, :updated_at, :cart_id, :created_at

  belongs_to :cart
  belongs_to :product
end

上記のモデルを作成していたとすると、attr_accessible によって指定した DB のカラムに対して読み書きが出来る権限を LineItem クラスに付ける事ができる。指定していない場合 ActiveModel::MassAssignmentSecurity::Error というセキュリティエラーを吐く。これは 3.2.3 以降の仕様みたいです。

また、belongs_to は 参照元のテーブルから参照先のテーブルにアクセスする為の関連づけを行う見たいですね。この場合は carts テーブルと products テーブルへ関連づける為のモノです。この時 LineItem は Cart クラスと Product クラスに属する事になります。属する対象のクラスのインスタンスの一つに属するのでこの時の指定は単数形で書きます。

逆に Product クラスは下記のような has_many によって関連付けを行うようです。has_many は自身のモデルから対象のモデルへ 1 対多で関連を持つので対象のクラスは複数形で記述するようです。割とこの辺みそっぽい。ちなみに相互参照時にはどの様なモデルの設計かを意識する必要がある見たいですねー。Product (サービス) から見ると LineItem (商品項目) は複数内包しているものなので Product モデルに書く、と。という事は、同様に Cart モデルにも has_many :line_items してあげる必要があるって事ですよね。結構納得しました。

has_many は所有者 (モデルのインスタンスの一つ) が所有物 (モデル) を宣言してるっていうイメージだと理解しやすかったですね。
逆に belongs_to は物 (モデル) が自分の主人 (モデルのインスタンスの一つ) を宣言するってことで、関係性の整合性が取れるってことですね。

class Product < ActiveRecord::Base
  has_many :line_items
  before_destroy :ensure_not_referenced_by_any_line_item

  private
  def ensure_not_referenced_by_any_line_item
    if line_items.empty?
      return true
    else
      errors.add(:base, '品目が存在します')
      return false
    end
  end
end
class Cart < ActiveRecord::Base
  # attr_accessible :title, :body
  has_many :line_items, dependent: :destroy
end

before_destroy はその名前の如く、モデル (この場合は Product) が destroy (モデルのレコードを削除する) を実行する前に実行されるメソッドのシンボルを書いておくようです。まぁ名前のまんまなので特に疑問に思わなかったんですが、一応忘れたときの為に書いておきます。