書評:ふつうのLinuxプログラミング、あるいはHTTPサーバーについておおざっぱに

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道

OSの仕組みをちゃんと理解しておこうと思って買ってみた。

以前、「Working With UNIX Processes」という本を読んで、プロセスの仕組みがだんだんわかってきたので、OSの他の部分も知りたいということで次に読んだのがこれ。

読む前のレベル

  • メインで使うのはRuby。最近、Objective-Cも書き始めた。つまり、ゆとりプログラマー。
  • C言語はWebの入門記事をちょろっとやった程度。ポインタとか構造体とかよくわからない…
  • 実務ではサーバーがLinux(Ubuntu)で、基本的な作業はひととおりできる。
  • Working With UNIX Processes」を読んだので、多少プロセスについては前提知識がある。

もうちょっとC言語を勉強すべきだった

内容としては、OSの基本的な概念を紹介し、それらを操作するためのC言語の関数とコード例が出てくる。対象読者のところで、C言語の基本的な理解を前提としているのは、本当そのとおりだった。構造体がバンバン出てくる。あと拙者にはfputc,putc,fputs,putsの区別がつかなかった。

出直してきます…orz

HTTPサーバーをなんとなく理解

とはいえ、最後の方に出てくるHTTPサーバーのコード例はとても勉強になった。

ソケットAPIの説明が簡略だったため、詳しく理解することはできなかったものの、なんとなくHTTPサーバーが何をしているのかがわかった。

  1. getaddrinfo(3)で自分(つまりサーバー)の情報(ホスト、プロトコルなど)を取得する。
  2. 取得した情報を使ってsocket(2)でソケットを作る。ソケットはファイルディスクリプタ(ただの通し番号)として参照される。
  3. そのソケットに対してbind(2)してlisten(2)する。(詳しい説明がなかったので、ここらへんよくわからない…)
  4. そのソケットに対してaccept(2)する。これをすると、サーバーはクライアントからの接続を待つ。接続に成功したら、接続したソケットを返す。
  5. 接続したソケットはファイルディスクリプタなので、fdopen(3)を使って読み書きできる。リクエストを読んで、レスポンスを返す処理はここで行う。(接続したソケットへの書き込みはそのままクライアントに返されるのだろうか…?ここらへんもよくわかってない…)
  6. 複数のリクエストをさばくには、5.の処理を並列化する必要があるので、fork(2)を使って子プロセスにこの処理を任せる。親プロセスはすぐにもう一度accept(2)してリクエストを待つ。

おおざっぱな流れはこんな感じで理解した。

リクエストを読んでレスポンスを返す処理は、とても地味な処理だった。TCP/IPに従ってリクエストをパースして、その結果にもとづいてレスポンスを決めるような処理だったと記憶してる。

並列化はコード例ではマルチプロセスでの実装だったけど、他の実装も知りたい。

残る疑問

入門書ということもあり、途中はしょった部分があったので、いくつか疑問が残った。

  • ソケットAPIがやってることが謎。bind(2)してlisten(2)する部分が何をやってるか不明。
  • 接続したソケットへの出力はそのまま接続先のクライアントに出力されるんだろうか?この背後でまだいろいろやってそうな気配を感じる。
  • 処理が終わった子プロセスはゾンビ化すると思うんだけど、どうやってwait(2)して終了させるんだろう?
  • マルチプロセス以外の並列化の実装も知りたい。C10K問題というキーワードも関連してくる気がするし、node.jsもここらへんに関する技術な気がする。

本書では、次に読むべき本としていくつか紹介されているので、それらを読めば疑問が解決しそう。とてもありがたい。ネットワークに関する本であればこれとか。

UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI

UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI

  • 作者: W.リチャードスティーヴンス,W.Richard Stevens,篠田陽一
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 1999/07
  • メディア: 単行本
  • 購入: 7人 クリック: 122回
  • この商品を含むブログ (35件) を見る

↑高いw

書評:iOS SDK Development

iOS SDK Development

iOS SDK Development

iPhoneアプリの開発を担当しそうな気配を感じ取ったので、8月後半からぼちぼち読み始めていた。実際に10月から担当することが確定してからは2週間くらいちゃんと読み始めて、いまようやく6章/10章が終わったところ。もう10月になっちゃうので、いったんここまで読んだ感想をまとめておきます。

おおまかな内容(6章までだけど)

  • まずツイートアプリを作る。途中、iOS6から導入されたSocialフレームワークやAuto layoutの説明が入る。i18nについてもふれる。
  • ツイートアプリを改修しながら、Obj-Cについて学ぶ。GCDも出てくる。本書はARCを使うためメモリ管理についてはそんなに詳しくなさげ。
  • レシピアプリをStoryboardsなしで作る。Interface Builderの使い方を学ぶ。
  • レシピアプリをStoryboardsを使って作りなおす。ナビゲーションも出てくる。

※7章以降はiCloudとかアニメーションとかテストの話が出てくるらしい

iOS6, iPhone5に対応済み

本書を読んでる最中にiOS6、iPhone5がリリースされた。僕の場合は、AmazonではなくPragmatic Bookshelfここ)で買ったんだけど、iPhone5が発売されてからたった数日で本書のアップデートが行われた。6章までだけど、たしか以下のポイントについて変更されていたような気がする。

iPhoneアプリの開発環境は目まぐるしく変化するから、自動アップデートがない紙の書籍はすぐに使えなくなってしまう。初心者であるほど、古い環境と新しい環境をアタマの中で置換しながら本を読んでいくのは難しい。なるべく電子書籍を買って、最新の情報にもとづいて勉強した方がいいと思う。

テンプレートに頼っていない

これがとてもいいと思った。初心者向けの参考書にありがちなXcodeのテンプレート頼りなサンプルコードは一切ない。すべてのプロジェクトはまず「Single View Application」で作成する。その後、Storyboardsを使ってナビゲーションを追加する(残念ながら今のところタブは出てきてない)。テンプレート頼りなサンプルコードを見て勉強したところで、いざ実践に入ったときにすぐに限界が来るのではないかと思った。Rails初心者がScaffoldから始めたせいで、脱Scaffoldが最初の関門になる感じに似ている。

本書にしたがって実際にプロジェクトを進めていけば、View Controllerを追加し部品をその上に乗っけてSegueでつなげてナビゲーションにはめ込むような作業がおのずと身につく。とても実践的な知識が身についてよかった。

英文を読むだけの価値は十分にある

本書は英語で、しかも中身が詰まっていて、読み進めるのがしんどい。でも、この本には「最新」かつ「実践的」な情報が詰まっているので、本屋に並んでいるような初心者向けの本よりはるかに役に立った。英語というハードルを考えても、これは読む価値のある本だと思った。

HTMLから始めたド素人がwebサービスをリリースするまでに読んだオススメの本10冊

 どうも、naotyです。年末なので、他のエンジニアの方々にならって、僕も一年のまとめをしようと思います。

 昨年5月に、就活にあきてエンジニアになろうと思ってから1年7ヶ月後、おかげさまでひとつのwebサービスを公開できるまでになりました。お世話になった方々への感謝の意味と、あと昔の自分と同じように、これからエンジニアの道を歩み始めようとしているあなたへのエールの意味を込めて、これまで読んできた技術書のなかでオススメのものを10冊まとめてみました。ぜひ参考にしてください。

HTML/CSS

HTML/XHTML&スタイルシートレッスンブック―ステップバイステップ形式でマスターできる

HTML/XHTML&スタイルシートレッスンブック―ステップバイステップ形式でマスターできる


 一番はじめに買った本。なにを買っていいのかわからなかったので、とりあえずAmazonのレビューが高いものを買いました。最初なので、別になんでもいいような気もします。

Ruby

たのしいRuby 第3版

たのしいRuby 第3版


 たのしいですよ、Ruby。ただ、最初はRubyの環境を整えるまでで挫折する可能性が高いですね、"Windows"の場合は。ええ。

Rails

Ruby on Rails 3 アプリケーションプログラミング

Ruby on Rails 3 アプリケーションプログラミング


 僕が最初にRailsと出会った頃は、まだRails2.3.6とかだったと思いますが、Rails3以降では、この本が一番分かりやすいし、初心者でも分かってきた人にも合ってるいい本だと思います。でも、will_paginateを紹介してるところで、「そこはKaminariだろうがぁ!」と言いたいところ。
Railsについては、いろんなサイトやブログで情報が発信されているし、Rails自体もいろんなことを覚えなくてはいけないため、本だけではとても十分とは言えません。ググりましょう。

JavaScript(jQuery)

jQuery逆引きマニュアル Webデザインの現場で役立つ基本と実践

jQuery逆引きマニュアル Webデザインの現場で役立つ基本と実践


 個人的な意見では、なまのJavaScriptの参考書(サイ本など)から勉強しようとすると間違いなく挫折すると思ってます。CSSが分かってきたら、たぶんjQueryもなんとか理解できると思ってます。少なくともサイ本よりは。この本を読む前に、すでにサイ本を挫折するなどして、JavaScriptの雰囲気はわかっていたということもあるので、この本だけではJavaScriptの理解は不十分だと思います。特にTitaniumなんかやる場合は、jQueryじゃなくてサイ本的なのが必要かもしれません。

ネットワーク

小悪魔女子大生のサーバエンジニア日記 ――インターネットやサーバのしくみが楽しくわかる

小悪魔女子大生のサーバエンジニア日記 ――インターネットやサーバのしくみが楽しくわかる


 紹介した10冊のなかで一番読みやすいです。インターネットの仕組みの基本的なこと(IPアドレス、MACアドレス、DNSなどなど)をかわいいイラストをふんだんに使って説明している本です。webサービスをリリースするにあたって直接ためになったわけではないんですが、ド素人だった僕には「そもそもインターネットとは?」的な部分の理解ができてよかったです。

サーバー全般

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)


 「サーバー、サーバーっていうけど、サーバーってなんなの?」っていうときに読んだ本です。上で紹介した本に比べると、いきなり難しくなります。なんとなく負荷分散とか、そもそも負荷って何よ?ってところを理解できました。

webサーバー(nginx)

ハイパフォーマンスHTTPサーバ Nginx入門

ハイパフォーマンスHTTPサーバ Nginx入門


 どうやらApacheよりnginxの方が速いし設定もラクというのを聞いてnginxを使っているんですが、いまのところ日本語で書かれたnginxの本はこれしかないような気がします。インストールから細かい設定まで詳しく説明されています。これと合わせて、nginxのwikiも参考にされるといいかと思います。

DB(MySQL

Linux-DB システム構築/運用入門 (DB Magazine SELECTION)

Linux-DB システム構築/運用入門 (DB Magazine SELECTION)


 これは最初から読んですぐに挫折したのですが、途中のインデックスに関する説明がとてつもなくわかりやすかったので、ピックアップしました。SQL文の解説とかはのってませんので、まるっきりの初心者にはオススメできません。

エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド

エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド


 はじめてのLinuxMySQLをインストールする際に参考にしました。rpmでのインストールから、my.cnfの書き方を参考にしましたが、まだ1/3も読んでません。おそらくこれからサービスを本格的に運用するにあたって真価を発揮すると思われる一冊です。

セキュリティ

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践


 CDが付属されていて、読みながら実践して確認できるタイプの本です。実践しながらなのでとてもわかりやすいし、実際にセキュリティの穴を確認できるので危機感をもてます。また、セキュリティ上の問題が類型化されているため、体系的に学ぶことができて初心者でも読みやすかったです。また、PHPが中心ですが、Rubyの僕でも問題はありませんでした。

  • -

 オススメの10冊は以上です。ここにはないけど、Linuxの初歩やバージョン管理システムなど、まだまだ覚えることはたくさんあります。もちろん、技術書を読んだだけでは、プログラムは書けるようにはなりません。実践していく中で、こうした本に載った知識を吸収していくことが必要だと思います。

 それでは、(なんかエラそうだけど)初心者の方がいち早く成長して、素敵なプロダクトをリリースすることを期待しています。差し支えなければ、himazinz.comも宜しくお願い致します。

「初めてのJavaScript」は初心者向けじゃない!

初めてのJavaScript 第2版

初めてのJavaScript 第2版


 現在、このテキストでJavaScriptの基礎をしっかり学ぼうとしています。が、初心者がこれを読んでも「?」な感じになると思いました。その理由は、

  1. 用語がムズい。例えば、「オブジェクト指向」の意味がわかってないと厳しいかも。
  2. 字がちっちゃくてとっかりにくい。
  3. 図とかないし、色もないし、なんかいかつい。

の3つかな。でも、逆に「勉強した」感はものすごく得られるはず。勉強大好きっこにはオススメかも。


 このテキストが終わったら、次はこっちに行きたい!

JavaScriptパターン ―優れたアプリケーションのための作法

JavaScriptパターン ―優れたアプリケーションのための作法

わかりやすかったテキスト(Rails, jQuery編)

 初心者の拙者にとっては、理論的な話より、ハウトゥが具体的に書かれているものの方が役に立ちました。その結果、以下のような逆引きリファレンス的なテキストを重宝してます。(一方で、オライリーの本がホコリをカブってる…)

Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応

Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応


jQuery逆引きマニュアル Webデザインの現場で役立つ基本と実践

jQuery逆引きマニュアル Webデザインの現場で役立つ基本と実践

「PHP逆引きレシピ」を買いました

 初級者から中級者へ脱皮したい人向けだというレビューを参考にこんな本をかいました。パッと見、見やすい。効果の程は、ジワジワくると思う。

PHP 逆引きレシピ (PROGRAMMER’S RECiPE)

PHP 逆引きレシピ (PROGRAMMER’S RECiPE)