書籍紹介

今までに読んできた本、そして読みたい本について紹介していきます。

2011年4月17日

Oracle Master Database 11g Bronze(1Z0-018:Bronze DBA11g)

を受験した。

「徹底攻略ORACLE MASTER Bronze DBA11g教科書[1Z0-018]対応 (ITプロ/ITエンジニアのための徹底攻略)」を隅々まで解いたこともあって、正解率75%で「1Z0-051 11gSQL基礎I」よりも簡単に合格することができ、1Z0-051とあわせてOracle Master Database 11g Bronze認定となった。

できれば、Oracle Databaseを自分の環境にインストールして、Enterprise Managerのインターフェイスは一通り触っておくとよいと思う。

把握しておくべき部分は次の通り。
・ブロック、エクステント、セグメントの違い
・データベースバッファキャッシュ、共有プール、ラージプールの違い
・SQLチューニング・アドバイザとSQLアクセス・アドバイザの違い
・完全リカバリと不完全リカバリ(Point in Time)の違い
・一貫性バックアップと非一貫性バックアップの違い

2011年4月13日

俺のコードのどこが悪い?

俺のコードのどこが悪い?―コードレビューを攻略する40のルール

コードレビューに関する分野の書籍は珍しく先月発売された新書で、書店で平積みされていたので思わず手にとって買ってしまった。実際に読んでみると、どうすればコーディングミスを減らしたり、保守性を上げられるかについて、技術的なアプローチだけでなく仕掛けづくりについても書かれており、新人が読むための教育書という位置づけだけでなく、レビュアーも参照すべき一冊である。

7つの習慣

7つの習慣―成功には原則があった!

偏見というフィルターを通して物事を見ないこと。
主体性を持って物事に取り組むこと。
目的をもって行動すること。
優先順位をつけること。
Win-Winの関係で相手を信頼すること。条件に合わない場合には、取引を行わないという選択肢も検討すること。
自分を理解してもらうためには、まず相手を理解すること。

新しい知見を取り入れることができ、とても参考になった一冊である。
通勤時間に読むのが良いかもしれない。

2010年11月23日

ダメな"システム屋"にだまされるな!

という30年近くシステム屋さんを勤めるエンジニアが書いた一冊。思わずはっと感じることが多かったので読んだ感想を書いてみる。

http://price.zaiteku.jp/products/detail/4822230341

1.ハードの値段が下がってもソフトの値段が下がらない理由
ハードは性能が良くなるのに値段が下がる一方で、ソフトウエアはそうならない理由は、パッケージを適用する風潮があるものの依然として業務フローをパッケージに合わせず、業務フローに合わせてソフトウエアを開発することにある。これはユーザーがそうしたいからではなく、パッケージを作るリスクを避けるベンダーが受託開発をし続けたい思惑が強い。


2.なぜITを導入するのか?
経営の意志決定を早くしたり業務効率を改善するためのIT導入するはずにもかかわらず、なぜか導入することが目的になっている。これもベンダーの提案力が弱いせいか、はたまたシステムの稼動がスタートであるユーザーに対して稼動がゴールであるベンダーとの思惑の違いなのか??


3.多忙と徹夜を「喜ぶ」最悪の"システム屋"
どんな仕事も計画的であれば多忙と徹夜は最小限に押さえられるはずだが、受託業務の仕事なので受注の波を平準化することは難しくそううまくはいかない。ただ、徹夜でことを成し遂げることがすごいと思われると勝手に考えてしまう被害者妄想は捨てるべきだ。


4.「コンサルタントになりたい」という逃避願望
僕もいまの会社に入るときに将来何になりたいかという質問に対して答えた一言。いまの仕事の単価が低いからより儲けるためにコンサルタントになりたいとか、プログラムを組む製造現場に飽きたからとコンサルタントという名前を言葉にしてはいけない。

単価が低いならば作業効率をあげる工夫をせよ、プログラムを飽きるというのはその仕事のやり方に工夫がないからである。違う道に進もうとしてはいけない。


5.「1人月150万円」が「年収1800万円」ではない理由
6.派遣契約と請負契約について

請負契約は派遣契約に比べて責任が大きいため会社で背負うリスクも大きいのである。従って会社は利益を沢山得るようになっている。

というのは建前であって請負契約のリスクも個人が背負っているわけにもかかわらず、給料だけが低い。個人に責任がかかるようであれば、いっそのこと派遣契約で仕事を会社は得るようにするか、利益を社員にフィードバックして労使ともに円満でなければならない。


7.「ネットだから低コスト・低品質」で良いのか?
前の会社では仕事と趣味の境界線が曖昧であったと言えると思う。仕事には責任が伴うはずだがネットでのシステム開発は専ら品質向上の取組が少ないように今の会社に入って思う。ただ最近はそうではないのかもしれない。。。


8.このままでは"システム屋"の給料は下がり続ける
9."35歳定年説"は、勉強で乗り越えられる

自分は付加価値をあげるための勉強をたえずし続けられているかかなり怪しい。前の会社にいた同僚はいまでも高いモチベーションで挑戦し続けている。自分も見習わなければ他の技術者となんら代わり映えがなくなり、結果的には安い給与の新入社員(マクロにいえば人件費の安い外国のエンジニア)にとって代わられる。


最後に・・・
システムエンジニアは技術者としてのプロフェッショナルである必要があると同時にそもそもサービス業としてシステムを売っている側面があることを忘れてはいけない。

サービス業だからこそ客への配慮を欠かさないようにしなければならない。つまり、システムが分からないからと客をばかにしたり、傲慢であってはいけない。また、最終的な解を自分の中に持っていたとしても課題に対する提案については選択肢を与える努力を怠ってはいけない。(システム化は手段であって目的ではないため、システム化提案の中のひとつには、あえてシステム化しないという提案も時には必要である。)


来年同じ文章を見返して、どこまで自分の中で努力できているかを振り返ることとしたい。

2010年9月15日

あの航空機事故はこうして起きた

飛行機もパソコンもコンピュータでできており操作するのが人間であるという点は同じである。ただ、ミスが死亡事故に繋がるかそうでないかは大きな違いである(コンピューターが生命にかかわるものであれば同じかもしれない)。

「あの航空機事故はこうして起きた」という書籍は発生したミスの原因を追求すべき対象が多くの場合間違っていることを教えてくれる。


(引用)
日本では「ミス」を事故の原因であるかのようにとらえる傾向があるが、「何故ミスを犯したのか」が真の事故原因である。ミスの原因を個人の「たるみ」と断じ、事故防止のための再教育と称して「精神教育」が行われることがある。「ミス」をするのは人間である以上避けられない。作業者に緊張を強いればミスは増加するのは当然であろう。いろいろな分野で安全より効率・利益が優先されて、操作をしているのは人間であることが忘れられている。


自分でもよくありがちなことなので肝に銘じておきたい。

2010年1月18日

今月のネットワークの本

これだけは知っておきたい ネットワークの常識

sanonosaさんが著者にかかわっています。表紙にある通り入門者から中級一歩手前の方向けのネットワーク概要を説明してある書籍です。ネットワークエンジニアを目指すならば必ず知っておかなければならない内容が具体的に前半に記載されており非常に評価できますが、後半はどんどん一般論になってきてしまっているところが少し残念です。

書籍のレベルのターゲットとするところとネットワークエンジニアとして知るべき範囲が微妙にずれてしまっているところがあるのですが、それだけネットワークの常識はますます広くなりつつあるのかなと見受けられます。

アプリケーションエンジニアもWebアプリケーションを開発しているならばその下位レイヤーとなるネットワーク部分について見識を深めることは決して悪い話ではないと思います。特にスリーウェイハンドシェイクについては基本中の基本かと思うので、その概要がうまく説明されている本書は読んでおくべき一冊かと思います。

2009年10月12日

可用性を極限までに高める

Webサービスをやっていてもなかなか可用性を高めるためのノウハウを学習することは難しい。というのも大容量トラフィックを体験することが小規模サービスにおいてはまれであり、可用性の検討を迫られるのは、マスコミに取り上げられるなど、急な時が多い。

そんな時に技術者はそこから調べているようでは手遅れであることがほとんどので、前例に学ばないことはない。というわけで、今日読みたい本は4Gbpsを超えるWebサービス構築術である。ライブドアで実際に仕事をしていた人の著書だけに内容に対する期待は大きい。

2009年7月23日

SEのフシギな生態 失敗談から学ぶ成功のための30ヶ条

平成15年に出版された本だが、久しぶりに読んでみると今でもなにも現状が変わっていないんだとあらためて思い知らされる。こうすれば失敗するというところが書かれているだけに、仕事を進める上で押さえておきたいポイントが見えてくるので、非常に参考になる。

2009年7月 7日

今月の読んだ書籍

 

一冊目は、きたみりゅうじ作のSE業界のよくある話を漫画にした作品。デフォルメしてある部分もあると思いきや、意外にあたっていて、楽しく読める本。
二冊目は、今話題のクラウド・コンピューティングとは一体何か、そしてクラウド・コンピューティングが向かう先は何なのかというのがわかる本。自分もブログで分散と集中の歴史を過去書いたが、この本の中でもクラウド・コンピューティングという現象はキャッチセールスのように生まれた言葉ではあるものの、時代の流れの中でおのずと生まれた現象を示した言葉であることを書いている。

2009年5月 7日

CakePHPガイドブック

cakePHPの少ない書籍のうちの一つです。基本的な部分から押さえていきたい場合には、お勧めの一冊になると思います。cakephp.jpg

2008年10月 7日

今月のお勧め本

日経NETWORKなどで見た書籍紹介などを元に私が興味のある本について紹介したいと思います。

パケット解析手法ミニ実験でつかむパケット解析手法

サーバー/インフラを支える技術サーバ/インフラを支える技術
前職では最小投資で最大限の投資効果を得るようなインフラ整備をしなければならない状況だったので、この必要性は非常によくわかる。

サービス開始時点においてはできるだけコストを少なくしながらも今後のことを考えて拡張性にも配慮していかなければならない。Webサービスを開発したり運用していようとしている人は読んでおかなければならない一冊だと思う。

2008年5月28日

SEが読むべき本

日経NETWORKの書籍紹介から、面白そうと思われる書籍をピックアップしました。

こんなSEはいらない

SEを極める50の鉄則

2008年4月 6日

30日でできる! OS自作入門

本屋で立ち読みしていてあついなぁと思った一冊。まとまった時間が取れる時に本を買ってがっつりしくみを勉強したい。

30日でできる! OS自作入門

2008年1月21日

SE出世双六

SE出世双六

SEの出世物語を描いた双六。キャリアパスを選んで進めていくことが出来、資格を取得しながらコマを進めていく。ITスキルがなくても楽しめるので、技術者と一緒でなくても出来るところがよいかもしれない。実際にやってみたが、ポイントがある程度ないとうまく前に進めない。そして後は運のみが左右されるようになっているようだ。

2007年1月22日

Adobe Flex 2: Training from the Source

Adobe Flex 2: Training from the Source

Flex2の書籍が現在まったくといって良いほど言ってない。インターネットドキュメントも皆無に等しく、この書籍は洋書でありながら期待するところは多い。

2006年11月 6日

COALESCE

取り出したデータがNULLのとき、「-」表示をしたい場合などはどのようにされていらっしゃるだろうか?たとえばプログラム側でデータを取り出してきて、NULLだったら代わりに「-」を出力するというロジックが思いついた場合には、COALESCEというSQL92の関数の利用を検討すると良いと思う。

たとえば、hogehogeフィールドからデータを取得したい場合には、

SELECT COALESCE(hogehoge, '-')
FROM table_name;

とすることでhogehogeがNULLだった場合に-が返るようになる。SQL92対応なので、基本的にはどのRDBMSでも対応しているはず。COALESCEは引数を無制限にとるので、COALESCE(a, b, c)ならばaがNULLならbが、bがNULLならcが利用されるといった形になってとても便利である。

このようなテクニックが数多く掲載されているプログラマのためのSQL 第2版はSQLを日ごろ利用している人でも一見の価値があると思う。

2006年10月22日

人月の神話

「ソフトウエア開発プロジェクト遅れたからといって人員を増やせば、チームの規模は肥大化して内部コミュニケーションが指数関数的に複雑化し、プロジェクトがさらに遅れる」と指摘している本『人月の神話―狼人間を撃つ銀の弾はない』。実は1975年に出版されており、26年経った今でも同様のことが議論されているなんて言うのは驚きである。開発しているものはどんどん進化(?)しているが、そのやり方にはあまり進歩が見られないという、ソフトウェア工学の難しさでもある。

2006年9月19日

正規表現

多くのプログラミング言語でも正規表現は実装されているが、実はかなり奥深い。そして、普通の人が聞いたら間違いなく「性器表現」と勘違いする不思議な言葉だ。現在、Oreillyから出版されている『詳細 正規表現 第2版』を読んでいて改めて正規表現について認識する必要があると考え、以下のとおりまとめてみた。これは今後順次改訂していく予定です。

正規表現の種類
正規表現にはPerlやPHP, Java, .NET, Python, Ruby, sedに実装されているNFAとawk, egrep, MySQLで実装されているDFAというものがある。NFAは従来からある正規表現であり、記述方法で動作速度が決まる。つまり、どれだけでも遅い正規表現を書くことが出来る(ひどい場合ではSegumentation Faultとなり、実行できない)と言うことになる。NFAで正規表現を記述するにはそれなりの知識と経験が必要になる。
一方で、DFAは最適化される正規表現であり、効率の悪い正規表現も実行動作前(コンパイル時)に最適化されて実行することになる。


文字クラス
リテラルをグループ化して、いずれか1つをあらわす。

[a-z] 小文字のアルファベットすべて
[^a-z] 小文字のアルファベット以外(「^」を最初におくと文字クラスが否定される)
[0-9] 数字すべて
[a-zA-Z] 大文字小文字を含むアルファベット
[a-zA-Z&[^mM]] 大文字小文字を含むアルファベット。但しMおよびmは除外される。


グループ
複数のパターンを表す。

(a|bc) aまたはbc
(?!a|bc) aでもbcでもない(否定形)


量子指定子
前に付くリテラルならびに文字クラス、グループを修飾する。

* 0文字以上
+ 1文字以上
? 0または1文字
{2,5} 2文字以上5文字以下
{,5} {0,5}の省略
{3,} 3文字以上


NFA拡張(Perl拡張)
NFA拡張にはキャプチャなし括弧(?: ...)、先読み(?= ...)、戻り読み(?<= ...)がサポートされている。
(?:aaa|bbb) aaaまたはbbb。但し(aaa|bbb)と異なり、括弧の中は$1で取得できないようにする(つまりメモリを節約することができる)。

(?<=aaa)bbb 直前にaaaがくるbbbにマッチ(先読み)。
(?<!aaa)bbb 直前にaaaがこないbbbにマッチ(否定先読み)。
aaa(?=bbb) 直後にbbbがくるaaaにマッチ(戻り読み)。
aaa(?!bbb) 直後にbbbがこないaaaにマッチ(否定戻り読み)。


・モード修飾子
多くの言語の場合には、大文字小文字の区別なしや改行を無視するiやxのモードを言語側で用意している。たとえば、Perlでは
$a =~ /a-z/i; #大文字小文字のアルファベットにマッチ
$a =~ /abc
def/x; #abcdefにマッチ(正規表現内の改行とタブを無効化する)
だが、正規表現内でもこれが利用できる。
(?i:[a-z])、(?:x:abc
def)で代用できる。iモード修飾子の場合には、正規表現内で大文字小文字を区別しないケースとするケースを混在させられる便利な修飾子といえる。


・欲張り型と非欲張り型
NFAにはバックトラックと言う機構によってパターンマッチングを行っている。バックトラックを抑止する方法が欲張り型であり、後続のマッチ文字列に配慮することなくマッチングする。逆に量子指定子の働きを最大限抑制する方法が非欲張り型である。いずれもNFAでサポートされている。
.++または(?>.+) 任意の文字列を欲張り型でマッチ(この場合はほとんど全ての文字列にマッチすることになり、後続するマッチ文字列の指定があれば失敗することになる)
.+? 任意の文字列を非欲張り型でマッチ。.+?aは[^a]+と同義となる。また、.*?aは[^a]*と同義。バックトラックが起こらない分だけ、それぞれ同義のマッチ文字列の方が早い。

2006年9月16日

The Definitive Guide to Symfony (Definitive Guide)

Symfonyに関する解説本が出版される見込みです。まだ日本語版なんて遠い先ですが、Symfonyは少しずつ定着しつつあるフレームワークのひとつになりそうな予感があります。

今後のWebプログラミングにおいては、フレームワークに対する理解もまた重要なスキルのひとつになることは間違いなさそうです。(クライアントアプリケーションプログラミングにおいては、フレームワーク(ロジックとビューを分離して、コントローラーで制御する)はRADにおいて当たり前のように使われているわけで、ようやくWebプログラムもそれに追いついたのかもしれない)

2006年9月 1日

プログラマ主役型プロジェクトのススメ ~ソフトウェア開発現場で本来の力を発揮するために~

プログラマ主役型プロジェクトのススメ ~ソフトウェア開発現場で本来の力を発揮するために~

職場の人から薦められて読んだ本。

端的に言えば、プログラマは取って代わることのできる工場労働者、プロジェクトマネージャーを筆頭に組織的な仕事をしているというのが一般的な考え方とされているが、この本では、納品物を製作するプログラマこそ不確定要素をどんどんつぶしてプロジェクトを成功させることができる唯一の職種であると説いている。

ソフトウエア開発は、製造業ではなく、サービス業とされる理由は、無形というあまりに納品物が不確定なのものをいかにしてエンドユーザーに満足してもらうかというところにあると思う。なぜ工場労働者であってはいけないか、そして明日からの仕事の仕方について考えさせられる一冊である。

2006年8月27日

成功への情熱―PASSION

成功への情熱―PASSION

京セラ会長の稲盛さんの著で、松下電器創業者の松下幸之助さんの影響を強く受けた本です。

なぜ会社は福利厚生や待遇を充実させるのか?
企業は最大利潤追求が目的でなければならないと考えていた僕は、この理由がよくわからなかったが、この本を読んでよくわかった。

経営者ならびに従業員は私利私欲のために仕事をしてはならないからだ。

私利私欲を持たないようにするには、現状に不満を持たないような心のゆとりが必要だ。心のゆとりを持つようにするためには、(他人を思いやれるような)人間らしく生きていくための最低限の待遇が必要だ。だから成熟した会社は従業員に多いくらいの福利厚生と待遇を与えているのだと。

仕事をするということはどういうことなのかを考えさせられる一冊です。

2006年7月 2日

あの航空機事故はこうして起きた

あの航空機事故はこうして起きた

一見、ITとは関係のない本のようにも思えるが、技術ならびに運用面においては非常に参考になる一冊。

トラブルが発生した場合、多くの日本人はなぜトラブルが発生したのかではなく、誰がトラブルを起こしたのかということに注目する傾向がある。

人間は必ずエラーを起こすものであり、そのエラーが発生しないようにコンピューターシステムによってエラーを未然に防いだり、エラーが発生したとしても、安全な方向に制御するのが本来のシステム設計の考え方である。

しかしながらエラーが発生したときに犯人探しを行うようではそこに改善を行う余地がないことにこの本は警鐘を鳴らしている。

2006年6月11日

Webアプリケーションの脆弱性

Webアプリケーションには主に14の脆弱性が含まれるらしい。

・XSS(Cross Site Scripting)
不正なスクリプトを埋め込ませることでクッキー情報などを他サイトに送りつけ不正取得などを可能にする。
参考サイト:マルチバイトの落とし穴

・Script Insertion
リクエスト内容がそのまま表示されてしまう脆弱性を悪用し、Javascriptをはじめとするスクリプトを埋め込むことで掲示板などを訪れたユーザーのCookie情報を取得したり、フィッシングを仕掛けたりできる。

・SQL Injection
正規のSQLに不正なコードを埋め込むことで、異なる条件による問い合わせや、まったく予期されない問い合わせを可能にする攻撃手法。

・CSRF(Cross Site Request Forgeries)

・ヌルバイト攻撃
ヌルバイトは文字列の終了を示すC言語の仕様を悪用した攻撃手法。バイナリセーフでない場合には、ヌルバイト以降に不正なコードを仕込むことでコード内に含まれるチェック機構をバイパスできる。

・Directory Traversal
予期しないディレクトリへのアクセスを可能にする攻撃手法。チェックさえ正しくされていればこのようなことは起こらないが、上位ディレクトリへのアクセスを許してしまうことで、Webアプリケーション実行ユーザーが許可されているファイルを取得できてしまう。

・HTTPレスポンス分割攻撃

・インクルード攻撃
PHPが外部URIをインクルードできてしまうため、他サイトの悪意あるコードを実行できてしまう。includeファイルにユーザーが入力可能な文字列を含めてしまうということ自体がそもそも脆弱性である。

・eval利用攻撃

・外部コマンド実行攻撃

・ファイルアップロード攻撃

・セッションハイジャック
セッションキーを無理やり指定してプログラムを実行させ、実行してしまったユーザーのセッション情報を後ですべて取得する方法。

・スパムメール踏み台攻撃
メール送信フォームが任意のユーザーに送れる場合に利用可能な攻撃方法。メール送信フォーム自体がスパムメール送信装置となってしまう。


XSSとSQL Injectionはかなり有名だが、ほかにも多くの脆弱性が考えられるとは。
PHPサイバーテロの技法にはこれらがサンプルコードとともに掲載されているので非常に分かりやすい。

2006年4月 2日

セキュリティウォリア―敵を知り己を知れば百戦危うからず

セキュリティウォリア―敵を知り己を知れば百戦危うからず

リバースエンジニアリングの手法を中心に前半は説明が続いており、興味のある人には詳しく説明されいて良いと思う。

自分がこの本を読んでよかった点は、当たり前が当たり前でないという別の認識ができたことだと思う。

たとえば、「ソフトウエアのライセンスキーを入力するような場面では、製造元は適当に入力しても正しいライセンスキーが入力されないようにロジック開発に苦心しているが、そもそもライセンスキーを比較するというロジックが無効にされてしまうようなことがあれば、まったくもってそれらは無意味であるということである」などです。

4,800円とかなり高価な書籍ではあるが、読んでも損はないと思います。