今月の Software Design : 2013/06 ( その 6 )

 「今月の Software Design 」の 6 月号の投稿の最終回です。

 

○ Linux カーネル観光ガイド

 Direct Mapper にキャッシュ機構を加えたカーネル v3.9 の新機能 "dm-cache" についてのお話です。内容としては、まず Device Mapper とは何で、どんなものかについて、実際に Device Mapper を利用した環境を見ながら解説してくれています。そして、各種マッピング方式についての紹介と、v3.9 から加わった "dm-cache" がどんなもので、どういう仕組みかについて解説してくれています。

 

○ Monthly News from jus

 jus 研究会のレポート記事です。具体的には、徳島大会で講演された中野先生の "異業種と積極的に関わるべき" という発表の紹介になります。記事の最後に講演の映像と資料の URL が掲載されています。

 

○ Hack For Japan

 Hack For Japan の運営スタッフによる座談会のレポート記事です。昨年はどういった活動を行なって、何が良くて、何が課題だったかについて、具体的な過去の事例の紹介を交えながら紹介しています。また、OpenData の取り組みについての反省と、今後どういったことが必要になってくるかについて、そして現在どういった取り組みを実施しているかについての紹介をしています。

 

○ 温故知新 IT 昔話

 70 年代後半に登場した、マルチユーザ/マルチタスクの 8 bit OS "MP/M" についてと MP/M の実行形式 PRL についての仕組みを紹介しています。最後に MP/M の "協調型システム" という名の (ほぼ) セキュリティフリーなファイルシステムについて紹介しています。

 

○ Inside View

 前回紹介した、自前で開発中の IaaS 型プライベートクラウド基盤 "Clover" についての記事です。なぜ OpenStack をやめて Clover の開発に踏み切ったのか、そして環境構築作業はどういった手順で行われるのかについて紹介しています。Clover の開発経緯については、仮想マシンだけではなく物理マシンやデバイスも同時に管理できる環境が欲しかったのでそうしたと言っています。

今月の Software Design : 2013/06 ( その 5 )

 「今月の Software Design 」の 6 月号の投稿の第 5 回目です。

 

○ 開眼シェルスクリプト

 /dev/tcp と Netcat を利用したお手軽 tcp/ip 通信の使い方と、これらを使った軽量なファイル転送処理の方法について紹介しています。また後半では、ssh コマンドを使ってリモートでのコマンド実行をローカルで実行したようにパイプに渡す処理について紹介してくれています。具体的には、ssh コマンドを使ってリモートで実行したコマンドを標準出力で受け、結果をパイプに渡すことで、リモート・ローカル間でシームレスにデータのやり取りが行える手法を紹介しています。

 前半、後半どちらの内容も非常に実践的で面白いです。

 

○ 仮想ネットワークの落とし穴

 昨今話題の SDN と呼ばれているネットワークの仮想化についての記事です。記事では、どういった背景でこれが注目され、何がどう良くなる(と期待されている)のかについてと、SDN の形態とそれぞれの形態を実現するための手法についての紹介をしてくれています。この各種手法の紹介については、ファブリックネットワークにおける ECMP の実現手法と、エンドポイントモデルにおけるトンネリング手法、そして OpenFlow という3回構成で解説をし、初回はファブリックモデルにおいて各ネットワークパスの帯域を効率的に利用する TRILL や SPB について、それぞれどういったもので、どんな問題があるのかについて、わかり易く解説してくれています。

 

○ Debian Hot Topics

 公式パッケージについてのお話です。公式パッケージとはどんなもので、何が嬉しくて、どんな区分があって、どうやって取り入れられるのかという内容になります。公式パッケージとして取り入れられるまでの流れの一連の流れのうち、"ソフトウェアの事前調査" と "コミュニティにリクエストを投げる方法" について、過去の経緯を含めてどうなっているのかという内容を比較的詳しく紹介してくれています。

 非常に興味深い内容です。公式パッケージ化されまでに、どういったプロセスで何が行われ、(パッケージを上げる側として) 何に気をつけるべきかというのがよく分かる内容だと思います。

 

○ Ubuntu Monthly Report

 今年の 2 月に公開されたスマフォ&タブレット向けの Ubuntu Touch の紹介記事です。現在サポートされている Nexus 4 や Nexus 7 などの実デバイスに対するインストール方法と、開発環境の構築、そして自作のアプリをインストールした Ubuntu Touch で動かすといった内容になります。

 興味深いです。Nexus 7 が欲しくなりました。

 

○ RedHat 恵比寿通信

 筆者の小島さんが出会った人たちのおもしろエピソード集のような内容です。内容としては、80 年頃にサンでネットワークファイルシステムの開発を手がける若きエンジニアに日本人社員(先輩)が説教を飛ばし、後にその若者が UNIX 界隈の大物として歴史上の人物になる話。納入した機器の修理のためサウジアラビアに単身派遣され、そこでパフォーマンスを発揮する若手社員の話。ソフトウェアの選択に際して OSS を選択するのが常識になった日の話などになります。

 他にも 2 つほど別の話がありましたが、特に上記の話が非常に面白かったです。最後に紹介されている『ソフトウェア・グラフィティ』が面白そうだったので思わず買ってしまいました。

 それと「先輩」が誰なのかが最後に出てくるのかと思いましたが、結局出て来ませんでした。一体誰なんでしょう。

今月の Software Design : 2013/06 ( その 4 )

 「今月の Software Design 」の 6 月号の投稿の第 4 回目です。

 

○ リアルタイム分散処理 Storm

 リアルタイム分散処理システム Storm について、Storm とはどんなもので Hadoop とはどう違い、どういったことが出来るのか、そしてどういうアーキテクチャでどのように動作するかについて解説しています。また後半では、実際に入力の単語数をリアルタイムに計測する Storm プログラムを示し、ソースコードの中の処理を解説しています。また記事の最後で、記事で紹介したサンプルプログラムや Storm のインストーラを紹介しています。

 

○ Hive で Hadoop を活用してみませんか!

 Hive とは何で、どういう動きをするのかについて SQL と比較して解説しています。ここでは、 Hive が提供する SQL ライクなクエリ言語 HQL によって HDFS からデータを取得する仕組みについて紹介しています。特徴としては、where 節を指定した HQL を発行すると、裏で MapReduce ジョブが実行されるので、大規模なデータに対する処理でも短時間に結果を取得できます。記事の後半では、実際に Hive を動かしながら、どうやって使い、何に注意するかについて解説してくれています。

 

○ Ubuntu 13.04 "Raring Ringtail"

 今年 4 月にリリースされた ubuntu-13.04 について、昨年 4 月にリリースされた v12.04 と比べて何がどう変わったかについていろいろ紹介してくれています。まず Unity が更新されたことによるアイコン表示等の変更についてと、ファットな環境ながらも Nexus7 用の Ubuntu が提供された事を紹介しています。また、バックグラウンド側のトピックとして、カーネルのバージョンが 3.8.5 になったことと、Upstart のバージョンが 1.8 になったことについて取り上げて言います。またこれによって、ファイル変更からプロセスの起動ができる upstart-file-bridge や、upstart のイベント追跡ツール upstart-monitor そして user session といったツールが追加された事を取り上げています。そして、X Window System に変わって Mir ディスプレイサーバを利用することで、デスクトップ環境だけではなくモバイル環境に向けてますます進出してゆくといった内容を書いています。

 

○ プログラム知識ゼロからはじめる iPhone ブックアプリ開発

 先月に引き続き、写真集アプリ開発を通した Xcode の使い方についての内容になります。今回は、前回簡単な GUI 操作だけで作成した写真集アプリに、前後へのページ移動と、写真をタップしてページ遷移するイベントハンドラの登録処理の方法について解説しています。

 

○ ハイパーバイザの作り方

 前回に引き続き、ゲスト OS とハイパーバイザとの間での処理の行き来について解説してくれています。具体的には、ゲスト OS がハイパーバイザの介入が必要な処理( I/O の発行とか)を発生させ、処理がハイパーバイザ側 (vmm.ko) に移った際に、各種レジスタを退避させ、イベントのパラメータから処理が分岐するまでについてのソースコードを解説してくれています。

 ハイパーバイザの介入が必要な処理は、外の世界とやり取りする処理だと思うので何となくわかりますが、/usr/sbin/bhyve にハンドルさる必要がある処理とは一体なんだろうか?

 

今月の Software Design : 2013/06 ( その 3 )

 「今月の Software Design 」の 6 月号の投稿の第 3 回目です。

 今回は、第二特集「あなたの知らない UNIX コマンドの使い方」について、要約と感想を書いてゆきます。

 

○ 第二特集①:UNIX/Linux で必須のファイルシステムの基礎

 ファイルシステム周りの諸所の操作を行うためのコマンドの使い方について紹介しています。具体的には ext4 ファイルシステムの作成、マウント、リカバリ、そしてリサイズを行うためのコマンドの使い方について簡単に紹介しています。

 ザッと読むといい感じに章立てられていますが、遠回りな説明のしかたであったり、未定義の単語をいきなり使ってくるなど若干読みづらい内容です。例えばファイルシステムの作成のくだりで、TRIM という聞きなれない単語が註釈も無しにいきなり登場します。話はこれについてのサポートに及びますが、結局 TRIM が何なのかを説明せず、加えて hdparam コマンドが TRIM のサポートを確認するコマンドであるかのような書き方をしています。

 冒頭の書き出しから察するに初心者向けの記事だと思うので、この書き方は正直かなり微妙です。

 

○ 第二特集②:いざというときに備えるコマンド

 GNU/Linux サーバの保守やトラブル対処の際に "使える" コマンドについて紹介してくれています。具体的には、ディスクを食い散らかす原因を特定する際、プロセスが死ぬ際の原因特定の際、VM ディスクイメージ消失の対処の際、そして設定ファイルの変更チェックや複数ファイルの一貫性チェックをする際などにおいて、重宝するコマンド及びテクニックを紹介してくれています。最後に、マルチコアに対応した高速アーカイブツールの pbzip2 について触れています。

 非常に良かったです(目から何かが落ちました)。このパートで紹介されている内容を活用できれば、問題に対処するための強烈な武器が増えるだけではなく、これまで書いてきたシェルスクリプトをより「カッコよく」書けるようになるんじゃないかと思います。

 

○ 第二特集③:サーバ運用と自動化に役立つ厳選コマンドリファレンス

 FreeBSD 環境のサーバ管理や設定コマンドについて、タイトルにもあるように厳選して紹介しています。具体的には、ネットワーク系のサーバ管理及び、DHCP や HTTP のクライアントツール、ファイルシステムやジョブ管理ツール、最後にモダンな仮想端末ツールの tmux やキーカスタマイズツールについて紹介してくれています。

 

○ 第二特集④:GUI が苦手とする作業を効率良く解決するために、デスクトップでもコマンドが活躍する

 デスクトップ環境として GNU/Linux を使っているユーザ向けに「CLI 環境使いこなせると便利だよ」という内容になります。記事では、例としてメーリングリストの一覧編集を行うシェルスクリプトを記述方法を丁寧に解説しています。また後半では CLI 環境を便利に使うための3つのツールを紹介しています。

 内容は初心者向けですが、非常によくまとまっていて読み易いです。またメーリングリストのメンバーを編集するシェルスクリプトについても、非常にエッセンスが詰まった内容で、コマンドは覚えてきたけどシェルスクリプトを書いたことが無い人に勧めたい内容の記事です。

 

 全体的に読み易く、各パートの内容もおおよそシステム管理周りに絞られていて読みごたえのある特集でした。

 

今月の Software Design : 2013/06 ( その 2 )

 「今月の Software Design 」の 6 月号の投稿の第 2 回目です。

 今回は、今月の特集『ちゃんとオブジェクト指向できていますか?』についての要約と感想になります。

 全体の構成としては、前半部分はオブジェクト指向におけるプログラムの設計についてのお話で、後半は各言語でどうやって書くかという形になっています。

 それでは、以下でそれぞれのパート毎に見てゆきます。

 

○ 第一特集①:オブジェクト指向の基礎を学ぶ

 オブジェクト指向で書くとどんな風に嬉しいのかについて保守性の観点から示しており、また実際に Hello World を拡張したプログラムをオブジェクト指向のテクニックを駆使して作成し、個々のテクニックのポイントについて紹介しています。後半では、オブジェクト指向プログラミングのスキルを上達させるためにはどうすればいいかという点について書いています。具体的には、if 文や for 文を減らし getter/setter はなるべく使わないようにしましょうといった注意と、コードを書く前にラフでクラス図書けよといった心構えについて、またどういった本が参考になるかといった参考書の紹介、そして最後により一般的なソフトウェアエンジニアとしての学習スタイルについての紹介をしています。

 オブジェクト指向プログラミングを熟練者になるためには何に注意し、何に心がけるべきかといった具体的かつ的確な内容で、非常に勉強になる内容です。また、デザインパターンリファクタリングについての名著の紹介がなされており、オブジェクト指向を本格的に学ぶためのファーストステップの記事として読んでおいて損はない内容だと思います。

 

○ 第一特集②:オブジェクト指向の学び方、教え方

 構造化設計によって作られるプログラムや、手続き型プログラミングと比べて、オブジェクト指向プログラミングがどのように違い、どのような考え方をして設計するかといった話になります。具体的には、構造化手法では手続きといった処理を中心として考えますが、オブジェクト指向ではデータ型(クラス)を中心に考え、それらの抽象化してゆくという考え方をする点で異なるといった内容です。

 こちらも読んでいて非常にわかり易く、エッセンスの詰まった内容です。構造化手法と何がどう違って、何が重要なのかという事をズバっと言ってくれています。またオブジェクト指向的な発想をする上で重要な3つの視点という事で、オブジェクト指向的な考え方のフレームワークを提供してくれています。

 短い文章ながらも、オブジェクト指向について体系的に学ぶ上での概要を掴むには非常によい内容だと思います。

 

○ 第一特集③:組み込みからクラウドまで、オブジェクト指向は隅々と!

 組み込み系の分野におけるオブジェクト指向での開発形態がここ10年くらいで進んできたよというお話です。タイトルに「クラウド」と書いてありますが、クラウドについてのお話は出て来ません(一瞬だけ業務系でのオブジェクト指向開発も進んでるよという話ができますが、それだけです)。後半では、アスペクト指向や関数型とオブジェクト指向のいいとこ取りをした Scala を引き合いに出して、オブジェクト指向について知らないと、更に発展的な話題にもついて行けないよという話をしています。

 これまでのパート1、パート2とは毛色が違うお話です。何だかフツーな事が書いてある印象です。

 

○ 第一特集④:JavaScriptオブジェクト指向

 JavaScript におけるオブジェクトとは何かという話から、プロトタイプベースのオブジェクト指向について、プロトタイプとは何で、インスタンスとプロトタイプの関連、そして JavaScript における継承とは何かということについて解説してくれています。最後に実践的な話題として、JavaScript を使った動的な Web ページの例で、内部状態を保持する部分をインスタンス化するとことでコードの見通しを良くするサンプルを示しています。

 僅か4ページで JavaScript におけるオブジェクトとは何で、プロトタイプベースのオブジェクト指向について簡潔にまとめられており、非常に読み易い内容です。

 

○ 第一特集⑤:PHPオブジェクト指向

 簡単な会計処理を例に PHPオブジェクト指向機能を使ってプログラムを書くとこんな感じだよという例を示しています。クラス設計は、機能と処理の分離という観点から行なっています。

 恐らくこの記事のポイントは、ラスト1ページ後半に書かれている『どういったクラスを設計して、それぞれにどういった機能や処理を持たせるか』といった内容じゃないかと思うのですが、内容が短すぎて何を伝えたいのか十分にわからないのが若干残念な感じです。

 

○ 第一特集⑥:Perl によるオブジェクト指向入門

 Perl でのオブジェクト指向プログラムの書き方の基礎的な話をしています。具体的には Perlポリモーフィズムをどうやって使うかについて、日付オブジェクトに対する演算処理を例に解説しています。

 何だかちょっと物足りない内容です。オブジェクト指向プログラムを実現するために、オブジェクトではない Perl の組み込みデータタイプをどうやってオブジェクト化するかについては、もっと深淵な仕組みがあるように思えるのですが、その辺ほとんど触れられていないのが残念です。

 

 特集記事全体の感想としても、何だかちょっと物足りない感じです。前半の設計論については、これについて調べる取っ掛かりの内容として非常に面白かったのですが、後半の各言語でどうやって書くかについては、内容的にも文量的にも中途半端な感が否めません。各記事の粒度やレベル感もバラバラな上、JavaScriptPHPPerl という言語のセレクションも謎です。

 やるんだったら、第二特集までぶち抜いて『オブジェクト指向言語機能の特徴のうち、コレとコレとコレについて各言語だとこう書くんだ!』といった内容を、上記の言語に加えて Ruby, Python, Scala, Scheme, Clojure くらいまで(あるいはもっと)網羅的に取り揃えてくれたら、まとめ記事として価値あるモノになったんじゃないかと読んでいて思いました。

 

今月の Software Design : 2013/06 ( その 1 )

 「今月の Software Design 」の 6 月号の投稿の第 1 回目です。

 今回は新連載を含む 5 つの記事について要約と感想を書きます。

 今月号の特集前に書かれた記事は非常に充実した内容で、特に『結城浩の再発見の発想法』と『enchant』は凄かったです。enchant の記事に至っては、要約するのが申し訳ないと思えるほどです。

 それでは以下のフォーマットでそれぞれについて要約と感想を書いてゆきます。

 

○ 記事のタイトル
( 1 行目 ) 記事の要約
( 2 行目以降 ) 感想

 

○ 自宅ラックのススメ

 自宅にラックを置くことを検討している人に向けた内容の記事で、ラックの寸法についてと、搬入・搬出時の注意点、そしてどんなラックを選びどこに置くべきかについて細かく書いてくれています。

 

○ 結城浩の再発見の発想法

 今月号から始まった新連載で、毎号各ソフトウェア的なテクニックについて取り上げて、当該テクニックの背後にはどんな発想があるのかという事を解説していくようです。今回はバッファについて、バッファとは何で何故必要で、どんなモノがあるかについて、技術的な説明に加えて、より一般化させたバッファという概念について説明しています。

 初っ端からとてつもない内容の記事です。「バッファとは何か?」という一見途方もない質問について僅か 2 ページで簡潔かつ丁寧に説明しています。

 巷では『コンピュータとは何か?』『オペレーティングシステムとは何か?』『ネットワークとは何か?』について、それぞれ 1000 ページ近くの本によって説明されていますが、一つのテクニックながらも深遠な「バッファ」について程よいレベル感で、且つとても共感できる形でまとめられている凄まじい記事です。

 

○ enchant

 enchant.js が文字通り物理的に誕生するまでのお話です。清水氏の前に現れた一人の天才と、後に enchant.js を生み出すもう一人の天才との出会いについて、そして enchant.js が誕生するまでについてのお話がプロジェクトX風に語られています。そして『つまるところenchant.js とは何なのか?』について、戦線を支える兵站という切り口でこれを論じています。

 胸の奥が熱くなり、読んでいて元気が出てくる内容です。

 

○ 偏愛キーボード図鑑

 先月紹介していた Dvorak キーボードについてのお話です。具体的には、どんなキーボードがどこで買えて、どんなモノかという紹介と、通常の Qwerty 配列のキーボードのシグナルを変換してやるデバイス QIDO についての紹介をしています。

 

○ はんだづけカフェなう

 深圳で開催された Maker Faire のイベントのレポート記事です。内容は、筆者の坪井さんが出展された ARM プロセッサのデバッガなどについてと、他にどんなモノが出典されているかについて紹介した現地のレポートになります。

今月の Software Design : 2013/05 (その7)

 「今月の Software Design 」の5月号の最後の投稿です。

 最近 Web+DB Press の内容がとても気になります。

 SD は Unix Magazine 亡き今、国内の IT 系雑誌の最高峰の地位に君臨してきました。扱う記事の内容も比較的レイヤが低くて難易度的にも高いと言われています。

 これに対して同じ技評から出版されている WEB+DB Press は比較的レイヤが高くて難易度も比較的易しいと言われていましたが、最近の WEB+DB Press の内容の充実ぶりには目を見張ります。

 残念ながらまだ併読できていませんが、もし余力ができたら WEB+DB Press についても書いてゆきたいです。

 それでは今月も以下のフォーマットで要約と感想を書いてゆきます。

 

○ 記事のタイトル
( 1 行目 ) 記事の要約
( 2 行目以降 ) 感想

 

○ 温故知新 IT むかしばなし

 コンピュータに関する歴史的資料(機材)を集めた世界のコンピュータ博物館と日本の計算機博物館についてのお話です。国内の博物館については、国立科学博物館東京理科大学の近代科学資料館、そして和光市のり科学研究所について紹介しています。また、情処がコンピュータ関連資料を Web 上に公開している「コンピュータ博物館」についても触れています。

 コンピュータそのものの歴史も面白いですが、個人的にはコンピュータと産業の歴史の方が興味深いです。今でこそ当たり前のようにコンピュータを使いインターネットにつながっていますが、元々コンピュータもインターネットも産業の為に存在していたわけではありませんでした。そこにコンピュータを作る会社が出てきて、ソフトウェアを作る会社が出てきて、やがてインターネット関連企業が出てきて、その過程で GNU みたいなのが生まれて、自由と暴利の間でルックアンドフィール訴訟や IBM 産業スパイ事件なんかに見る抗争があって、知財やら特許では IBM や MS 、Apple などといった特許ヤクザが幅を利かせるなどといったことがあって今日まで至るわけですが、こうした産業史にとても興味をひかれます。

 

○ Inside View: ① Hadoop は基幹業務をどう変えるのか

 ソフトバンクモバイルが Hadoop を導入した話です。なんで Hadoop が必要で、どのような環境でどう使うか、そして今どういった状況にあるかといった話について書かれています。最後に Hadoop 以外の選択肢についての考察をしていますが、オープンソースであるという理由でやっぱり Hadoop がいいという結論で記事を締めくくっています。

 よい内容だと思います。要約にも書きましたが、どういう環境でどのように使っていき、組織としてどう対応するかといったことが書かれているので、ソフトバンクモバイル的には Hadoop とどう向き合ってゆくのかが伝わってきます。

 

○ Inside View: ② インターネットサービスの未来を創る人たち

 サイバーエージェントが利用するプライベートクラウドのミドルウェアのお話です。これまでサイバーエージェントは、IaaS 型プライベートサービスを OpenStack を使って運用していたけど、運用を自動化したいとかで内製のミドルウェアの開発を初めたよという内容です。

 ご冗談でしょう、サーバーエージェントさん。あなたついこの前(2ヶ月前)の Software Design で、運用上の問題や信頼性云々でデータベースとサーバを内製から OSS に、自作からベンダーに切り替えたなんて事を言っていましたがもうお忘れですか?

 ソーシャルゲームやアメーバを作っている片手間でより良いモノが出来るほど OpenStack は単純なものじゃないですし、とかくこういったモノは信頼性を必要としますから、トラブった時に内製だとコミュニティの協力が得られないというリスクも承知の上なんでしょうか。