28 Feb 2013, 11:21

百科事典のようなワクワク感!IT技術者のための「ストレージの原則と技術」を読みました

ストレージ技術を学ぶための決定版(だと思った)、「ストレージの原則と技術」について1/3くらい読んだので書評します。

網羅的な内容盛り沢山で座右の字引に

ストレージ技術についての広範囲な内容が、網羅的に記述されている。

ディスクのことから始まり、RAIDやキャッシュの機能、ネットーワークの仕組み、セキュリテイ、コピー技術などなど・・・

全ては書けないので、詳しくは以下のリンクから目次を参照されたし。
http://www.impressjapan.jp/books/3351

まるで、こどもの時の百科事典を開くようなワクワク感を感じながら読んでいる。知っている知識でも、しばらく思い出さないと記憶が薄れてきてしまうので、良い復習でもある。

この本は、EMCの教育部が書いたものらしい。
ところどころに、EMC製品の宣伝が出てくるのはご愛嬌。

ストレージとホストの関係、ネットワークでのつながりについて理解できる

仕事では、ストレージ側のソフトウェアを解説している。しかし、未だにサーバやネットワークとの関係性を知らなかった。いつか網羅的に記述されている書籍で、まじめに勉強しようと思っていたが、本書がまさにその題材にうってつけだった。

SANやNASの仕組みやホストインタフェースなど、詳しく書いてある。
不足していたネットーワークやサーバ分野の知識を学べることは嬉しい。

最新技術についていくための勉強ができる

最新技術用語も詳しく解説されている。以下、書籍より引用。

  • デデュプリケーション
  • ユニファイドストレージ
  • 仮想プロビジョニング
  • FCoE
  • フラッシュドライブ
  • ストレージ階層化
  • ビッグデータ

最新技術は、ITmediaだったり、ITproのRSSを購読することで付いて行こうとしてたつもりだったが、知識が断片的だったり、やる気がなかったりでちっともついていけてないのが現状だ。

最新技術に関するトピックが詳しく書かれているので、足りない用語や技術を補填できる。
メールを読んでも、会議にでても理解できないことがままあったりして、そういうときにすぐ調べたりすればいいんだけれども、そこをいつも怠けてしまう。

この機会に、集中して知識を入れ込むことで、置いてけぼりにならないようにしたい。

26 Feb 2013, 14:12

C言語のデバッグ加速!Eclipse CDTでのgdb機能がメチャクチャ便利だ。

Eclipse CDTには、グラフィッカルなgdbインタフェースがついてきます。

これが最近便利すぎるので、オススメ機能をここらでまとめときます。

基本的な設定方法

コンパイルオプション

まずは実行ファイルを作るときにコンパイルオプションで以下を追加。

CPPFLAGS += -g -O0

-g : GDB用のデバッグ情報を実行ファイルに含める。

-Oo : コンパイラに最適化をさせない。

ルックアップパスの設定

デバッグ・パースペクティブにソースが現れないときは、ソースのパスが設定されていない。

Can’t find a source file at : hogehoge…

[ウィンドウ] > [設定] > [C/C++] > [デバッグ] > [ソース・ルックアップ・パス] から追加したいソースがあるフォルダを追加する。

GDBを実行してみる

デバッグ・パースペクティブからF11を実行できればOK。

ソースを見ながらブレークポイントをはって、ステップ実行

ソースを見ながらブレイクポイントをはれるのが嬉しい。

貼る方法も、解除する方法も、クリックひとつだ。

はった場所は、別のビューから確認できる。

2013_0226_gdb_0.png

構造体や変数のなかもスケスケ丸見え

gdbの恩恵は、変数や構造体の中身を見て、さらに値を書き換えて実行できるところだ。

構造体のネスト構造を中の中まで確認できるのがとても嬉しい。

また、xUnitではテストしづらい部分もブレークを貼って手動で値を書き換えてテストスルことができる。痒いところに手が届くとは、ここから始まった。

変数や構造体の参照は、[変数ビュー]で確認できる。

図は複雑怪奇なaddrinfo構造体とsockaddr構造体。

中身の値まで丸見えだ。なんなら、書き換えも同じビューで可能。

2013_0226_gdb_01.png

また、ソース上で変数の上にカーソルを移動するだけでも確認できる。

ステップ実行で、セグメンテーション違反した箇所まで移動できる

これについては、以前記事にまとめたので、こちらを参照。

ステップ実行のためのよく使用するショートカットも以下にまとめます。

起動 F11 gdbを起動する
再開 F8 gdbを再開する。
はじめはmainで止まるので、F8でブレイクポイントまで移動することを
ステップイン F5 ステップ実行をする。
一行ずつプログラムを進めることができる。
ステップオーバー F6 関数単位で実行する。
関数の頭でステップオーバーすると、
関数内にはいらずに次の処理へすすむ。
結構使う。
ステップ・リターン F7 現在の関数がreturnするまでを実行する。
まあまあ使う。

 

他にも、ウォッチポイントを簡単に設定できたり、逆アセンブリ結果を表示できる。

とにかく高機能だ。

こんな便利なものが、無料で使えるならば、利用しない手はないだろう。

補足

  • Eclipse 3.7 Indigoでは、gdb7.4以降のバージョンが動作しないようだ。

Undefined maintenance set command: “python print-stack off”. Try “help maintenance set”.

のようなメッセージが出るはず。そんなときは、

  • Eclipse 4.2 Junoにアップグレードする。
  • gdbをダウングレードする。

のいづれかが必要。自分はcygwinで一つ前のgdbのバージョンに設定したら動いた。

Eclipse Community Forums: CDT ≫ Error message from debugger back end

  • Eclipseを使ってない場合はInsightという方法もある。

26 Feb 2013, 12:41

Eclipse プラグイン「Glance」でのインクリメンタル検索が便利な件

Eclipse CDTを使っていると、インクリメンタルサーチがけっこう貧弱に感じる。
かといって、検索機能を起動するまでもなくさくっと調べたい。

そんなときには、「Glance」がけっこう良かった。

eclipse-glance – Incremental Text Search and Highlight in Eclipse – Google Project Hosting

 

 

Glanceプラグインを利用すると、インクリメンタルサーチがサクッと、ハイライトが綺麗に検索できます。便利!


Glanceインストール方法

ツールバーの[ヘルプ] > [Eclipseマーケットプレイス]から[Glance]を検索。
あとは、指示に従ってインストール。

Glanceのキーバインドを変更する

標準のキーバインドだと「Ctrl + Alt + F」が割り当てられている。
これは、Eclipse CDTキーバインドのデフォルトでのキーバインドと重複している。

既存のインクリメンタルサーチ[Ctrl + J]をGlanceでのサーチに置き換えるのがよい。

ツールバーの[ウィンドウ] > [設定] > [一般] > [キー]を選択。
検索窓から[Ctrl + J]で引っかかったコマンドをアンパインドする。
次に[Open Glance]のキーバインドを[Ctrl + J]に割り当てる。

Glance使用例

こんな感じ。

24 Feb 2013, 22:19

[本]Jenkins (オライリー・ジャパン)を読んだ読書メモ

オライリー社から出版されている[Jenkins](かえる本)を読んだ読書メモです。

 

トピック満載な網羅的説明

この本を読んで思ったことは、

とにかく詳しい

です。 400p近くあり、けっこう分厚いです。
インストール方法、設定方法も、いろんなOSに対する方法が書かれています。
(Ubuntu,OpenSUSE,Redhat,CentOS,Windows….etc.)
手とり足取りといった感じです。

言語はJavaをベース。ただ、多言語への言及も詳しいです。

コード品質のためプラグインの解説、通知方法なども、網羅的に様々なものが紹介されています。 つまり、これ一冊あればなんでも載っているような印象を受けました。

高度な話題としては、分散ビルドや自動化デプロイメント、継続的デリバリなども取り扱われています。(熱を入れて解説されています)このへんは個人的にはよくわかりませんでした。

gitによるJenkinsの使い方の解説が詳しい

版数管理については、Subversionとgitによる解説がされています。

Gitの説明が詳しくて重宝しました。Git Pluginの設定方法が細かく説明されていました。
gitとJenkinsを組み合わせようとすると、ネット上の情報が頼りでした。
他の書籍では、ここまで詳しくはないです。

継続的インテグレーションの目的を明確に

以下、印象に残ったフレーズの覚書。

継続的インテグレーションとは、フィードバックを素早く返すようにすることで、リスクを低減させるものです。

定期的にビルドジョブを走らせる方法は、実際には継続的インテグレーションではありません。

とくに先週は、静的解析ツールを実行しわすれたばっかりにけっこう泥沼にハマってしまったので、そんな体験を思い出す度に、フィードバックを速く返すことの重大さを意識するのだった。

おまけ

なお、この本はネットでも無料でダウンロードできるみたい。(英語だけど)

Download Jenkins: The Definitive Guide

 

 

 

17 Feb 2013, 10:25

[本]IPv6ネットワークプログラミングを読んだ感想

仕事で、ひょんなことからIPv6のコーディングが必要になったので、読んでみた。

この本のよいところは、IPv4からIPv6へ移植する方法が豊富なコードとともに紹介されているのところだ。言語はC言語。

IPv6に関する知識的な部分よりも、実装方法があるところがよい。
個人的には、手っ取り早く実装して定時退社したいという考えなので、そんな思いに合致した。

前半では、IPv4からv6へ移行するための新しい関数や構造体が解説されている。
getaddrinfo関数の使い方やsockaddr構造体の使い方など、ことこまかく解説されている。

こういう知識はネット上にも探せばあるのだけれども、ネットの情報は断片的なので、本にまとまっている知識を読んだほうがずっとはやく吸収できる。

さらには、この関数たちはIPv6へ移植するときはもう使ってはいけないとか、こうやって移植するんだよという例も紹介されている。

addrinfo構造体はOpen-Closed Principleに従っている?

IPv6への移植だけではなくて、今後さらにアドレスファミリーが増えたときにも拡張できるような、より汎用的な方法が紹介されている。

  • Switch文はなるべくつかわないようにしよう
  • sockaddr_in/in6ではなく、sockaddr_strorage構造体をつかいましょう

C言語のソケットプログラミングで使うaddrinfo構造体が、
Open-Closed Principleな構造なことであることに気づいた。

Open-Closed Principle、略してOCP。
“拡張性に優れて修正不要な設計原則”の意味。

開放/閉鎖原則 – Wikipedia

addrinfo構造体は今後のアドレスファミリーが増えた場合にも備えて、
sockaddr構造体を、ポインタとして保持するという設計が、
拡張性を考慮しているんだなーと思った。

17 Feb 2013, 09:44

TC 技術検定 3 級 テクニカルライティング試験 (TW) 受験しました

はじめに

TC 技術検定 3 級 テクニカルライティング試験を受験した感想です.

ここにも合格体験記がたくさんあるみたい.

動機について

去年の重点目標の一つは, 日本語を正しく書くこと.

産まれた時から日本人をやっているが, まだまだ日本語をうまく使えないため, なにかテコ入れしておくかなと思ったのが動機だ.

また, 仕事では, コーディングする時間よりも, ドキュメント作成に割く時間の方が圧倒的に多い. メールや仕様書, 障害報告資料作成などなど, いままで人格を否定されるまでにイジメを受けてきたので, なんとか見返したいと思い立ったのが, 動機だ.

資格として頑張れば, モチベーションを保てるかと思った.

試験対策・勉強法について

テクニカルコミュニケーション協会の公式参考書を利用して学習を進める.

当日の感想

試験は新宿の工学院大学で実施された.

東京だけで, 140 人くらい. うん, まだまだマイナーな試験だと思った. 試験時間は 1 時間半. 途中退室可.

全て記号を選ぶ選択形式. マークシートではないところも, なんだかマイナー. ちなみに, 試験申し込みもネットからはできずに, 資料請求と郵便振込みなところもマイナーさを感じた.

リーダブルドキュメントを目指せ!

この資格の勉強は, リーダブルコードを読むのと同時進行で進めた.

おわりに

これからも, ブログを書くことで, 文章力を向上させていこうと思う. 試験問題は知識的な部分も多いか, 大事なのは普段の生活で実践できるかだ.

別に, 不合格だって, くやしくないもん.

追記

不合格だった…orz

14 Feb 2013, 13:05

[TopCoder日記] SRM 570, Division 2, Level 1 : Chopsticks

TopCoder SRM570に参加した記録です。

当日の感想

今回で3回目の参戦。
英語の問題文にひるまないだけの度胸はついた。
当初思っていたよりも難しくはないことは分かった。

プログラミングをしているよりも、白紙に向かっていろいろと数式を書いている時間の方が長い。プログラミングは、考えた解法をそのまま書くだけと言った感じ。

言語の壁という点では、英語よりもC++の知識が乏しいのがつらい。
vectorの使い方がわからなかったり。(配列のサイズの求め方がわからん!)

わからなくなったら独習C++を元にガンパル。

Level 1 : Chopsticks

問題

異なる長さの箸がN本ある。
同じ長さのペアの数がパーティーに招待できる人数。
さあ、招待できる人数の最大値を求めよ。

システムテストで落とされた。なぜだろう。
連想配列を利用して、参考書を見ながらもう少し綺麗に書きなおした。
連想配列が空気を吸うように使いこなせればいいな。

/*  TopCoder
 *  SRM       : 570
 *  Division  : 1
 *  Level     : 2
 *
 *  Created on: 2013/02/14
 *      Author: tsu_nera<fox10225fox@gmail.com>
 */
 
#include <algorithm>
#include <iostream>
#include <map>
#include <numeric>
#include <set>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
 
#define FOR(i,s,e) for (int i = int(s); i != int(e); i++)
#define FORIT(i,c) for (typeof((c).begin()) i = (c).begin(); i != (c).end(); i++)
#define ISEQ(c) (c).begin(), (c).end()
 
class Chopsticks {
 
public: int getmax(vector<int> length) {
 
  map<int, int> dic;
 
  for (int i = 0; i < (int)length.size(); i++) {
    dic[length[i]] = 0;
  }
 
  for (int i = 0; i < (int)length.size(); i++) {
    dic[length[i]]++;
  }
 
  int ans = 0;
  map<int, int>::iterator it;
  for (it = dic.begin() ; it != dic.end(); it++) {
    ans += ( (*it).second /2);
  }
 
  return ans;
 
}
 
};

Level 2 : RobotHerbDiv2

問題

ロポットが与えられた配列と規則に従って移動する。

最終的に移動した場所の原点からの距離を求めよ。

規則を漸化式に起こそうとしたが、途中で時間切れ。

11 Feb 2013, 22:35

gitを使って技術書を写経をするためのステップメモ

技術書の写経について、TDDで有名な@t_wadaさんのこんなツイートを発見した。

https://twitter.com/t_wada/status/9000231741

これを参考に、gitを使ってどのように写経をするか、個人用にまとめメモしとく。

ローカルで使えるSCMを用意

$ git init
$ git add .
$ git commit -m ‘first commit’
$ git checkout -b 1st

章ごとに”xst”というブランチを切っておく。

「ほんたった」などで対象の本を固定

たいていのお手本は電子書籍を利用するので、特に不要。
電子書籍化されていない写経本はScanSnapで電子化する。

ひたすらサンプルコードを写して実行

ガンバァ━━(`・д・´)ノ━━!!る

実行するたびにコミット(コミットログにページ番号を含める)

$git commit -m”xx”

xxはページ番号。加えて、コメントも書いてもよい。

疑問点があったらコミットログや本に書き込む

電子書籍を使っているので、Acribatのコメント機能を使って書き込んでしまいます。
コメントがあとで検索で引っかかるのが快適。

章ごとにタグを打つ

成果をmaster branchにマージ

$ git checkout master
$ git merge 1st

master branch にもどって、1st branchをマージする。

章ごとにタグを打つ

$ git tag -a -m ‘1st end’ 1st

章ごとにタグを打つ。節や区切りがいいところまででもいい。

githubにも反映

$ git push origin master

git pushでローカルからgithubに反映する。(githubとの連携はここでは省略)

新しい章に移るごとにブランチを切る

$ git checkout -b 2nd

 

以下、手順を繰り返して章ごとにイテレーションしていく。
今年の目標ははたくさん写経することなので、ガンバァ━━(`・д・´)ノ━━!!ります。

11 Feb 2013, 01:08

定時退社するための魔法のWindowsコマンドを教えよう

定時のベルがなる。しかし、帰れない。そんな日がいつも続く。
そこで、朝一にパソコンで叩くだけで定時退社できるという魔法のポポポーンコマンドを紹介。

Windowsのコマンドプロンプトから以下を管理者権限で実行だ。

at 17:40 SHUTDOWN /S /F /T 600

以下、解説。

環境

Windows 7

シャットダウン用コマンド shutdown

Windowsをコマンドラインからシャットダウンするためのコマンドは”shutdown”だ。

Win7JP RCウィンドウズ7の総合情報&カスタマイズ- Windows 7でコマンドプロンプトで電源操作を行うには(終了操作を禁止した状態でWindowsを終了するには)

 

いろいろと、指定オプションがあるが、今回は以下を使う。

/F :強制シャットダウン
/S: シャットダウン
/T : 時刻を指定する。

10分後に強制シャットダウンするためには、以下を実行。

SHUTDOWN /S /F /T 600

※大文字注意

指定時刻に実行するためのコマンド at

Windowsのコマンドプロンプトで指定時刻にコマンドを実行するためには、atコマンドを利用する。

スーパーユーザーのためのWindowsコマンド再入門:at――指定時刻にアプリケーションを実行 – ITmedia エンタープライズ

 

 

コマンドプロンプトを管理者権限で起動して、

at

と実行すると、登録されているタスクが表示される。

at [時刻] [指定コマンド]

で、指定時刻に指定コマンドを実行できる。

実行結果

C:\Windows\system32>at 17:40 SHUTDOWN /S /F /T 600
新しいジョブをジョブ ID = 1 で追加しました。

C:\Windows\system32>at
状態 ID     日付                    時刻          コマンド ライン
——————————————————————————-
        1   今日                    17:40         SHUTDOWN /S /F /T 600

C:\Windows\system32>

 

ナントいう屈辱!定時退社できない!そんなときの救済コマンド

魔法のコマンドが実行されたけれども、定時退社できないというポポポーンな状態のときの救済コマンドがこれ。

SHUtDOWN /A

救済コマンドというよりは、地獄落ちのコマンドだ(´・ω・`)

10 Feb 2013, 02:42

断片的なプロ意識に感銘!プログラマは[CleanCoder]でプロの感性を学ぼう。

ロバート・C・マーチン(ポブおじさん)の[CleanCoder]を読んだ感想を書きます。

 

ああ・・・あのときこうすりゃよかったよ、みたいな

先入観では、プログラマとはなにかを悟った筆者が”プログラマとはこうあるべきである”という結論をズバズバといっていくものと思っていた(帰納的)。

実際は、ポブおじさんの失敗談がこれでもかと紹介されて、”プロならばこう振る舞う”という感じで語られていく。

個人的体験を元に,”こうだ”と語られる(演繹的)。

全体を通して、断片的なエッセイが書くテーマに対してまとめられたようになっている。
プログラミングの本だけれども、コードはほとんど登場しない。コードを作るときの思想が語られている。

そんな断片的で、個人的にこころに残ったフレーズを引用しながら感想を書きます。

個人的に印象に残ったこと

テストの必要性について

自動テストユニットって、どのくらいのコードを書けばいいの?その質問に答える必要があるのか?全部だ!ぜ・ん・ぶ。

(第1章 プロ意識)

この言い切りが、潔かった!ぜ・ん・ぶだ!
TDDは規律で、どんなに追い詰められているときでも規律を厳守することで、自分のペースを保つのだと説明されてる。なるほど・・・。

ソフトウェアのプロが抑えるべき最低限のこと

プログラマがおされるべき最低限のこととして、以下の視点を上げている。

  • デザインパターン (Gof、POSA、など)
  • 設計原則 (SOLIDの原則、コンポーネントの原則など)
  • 方法論 (XP、アジャイル、ウォーターフォール、など)
  • 規律 (TDD、オブジェクト思考、構造化設計、CI、ペアプロ、など)
  • 成果物 (UML、DFD、状態遷移表、フローチャート、構造チャート、、ディシジョン・テーブルなど)

(第1章 プロ意識)

自分の場合は、知っているものもあれば、まだまだ知らないこともある。
プログラマの必須科目として、学び続けていきたい。

具体的には、今年はデザインパターンを勉強したい!

第2章「ノー」という

できないことに「ノー」ということについて、凄まじい体験談を引用しながら説明されている。

Is Good Code Impossible? | Rapture In Venice: iOS, Android Mobile Development Shop

 

 

こんな状況になっても、誰に責任があるのかといえば、”ノー”と言わなかった人に責任がある。プロのプログラマは、できないことには”ノー”という。

逆に”イエス”といったことは絶対にやり通す。そのため、安易な見積もりを元に”イエス”とは言ってはいけない。イエスの責任感が説かれている。

見積もりについて

見積もりに関するこんな視点も新鮮だった。

見積もりは数値ではない。見積もりは確率分布だ。

(第10章 見積もり)

工数は、楽観値、標準値、悲観値の3つの視点で考えることが大事だ。

自分の場合も、終わりますというのは標準値(楽観値?)を考えていたが、コレは3つの視点で考えることが必要だと思った。

練習について

日々の練習を通して、”型”を身につけることの重要性を解いている。

必要になった時に完全な動きが自動的にできるようになることが、最終的な目標である。

プログラミングの型というのは、プログラミングの問題を解くためのキーボードやマウスの動きの練習である。

解き方はすでにわかっている問題を解きながら身体の意思決定の練習をするのだ。

(第6章 練習)

型を身につける、キーバインドやホットキーの使い方に習熟するようにする。
いつも忘れないようにしたい。

個人的には、今年はTopCoderを頑張ろうと思っている。

TopCoder, Inc.TopCoder, Inc. | Home of the world’s largest development community

これは、アルゴリズムの勉強が第一の目的だ。
別の目的としては解けなかった同じ問題を繰り返して練習することで、その問題で使われているアルゴリズムを息をすうようにコーディングできるようにすることがある。

まとめ

断片的に、様々な発見がある。また時間を置いて読めば、別の発見が得られそうだ。