I ♥ WordPress

あれ?
2008/09/17 01:22 posted by kunkichi

今気づいた、今日は火曜日だからほんとは『C言語』の時間だった、、、

明日やります〜

[時間割:読書]『チームビルディングの技術』『頭のいい人の短く深く眠る方法』読了
2008/09/17 01:11 posted by kunkichi

先週までの『読書』の時間に、この2冊を読み終えたので、ちょっとまとめておきます。

チームビルディングの技術―みんなを本気にさせるマネジメントの基本18
関島 康雄
日本経団連事業サービス
売り上げランキング: 19500

前回読んでいた『チーム力を作る3ステップ』がとても良かったので、チームとかコーチング系の本をもう一冊読んでより理解を深めようということでこれをチョイス。

『チーム力を作る3ステップ』が仮想のシチュエーションを用いて、チーム作りのコツというかポイントをすぐに実践できそうな感じで説明していたのに対して、こちらはちょっと読み物というか、チームマネジメントの理論を実例を交えてきちんと証明している感じ。でもそれほど分厚いわけでもなく、こちらはこちらで非常に良くまとめられてると思います。

同じテーマの本を2冊読むと、ポイントはだいたい同じところになるので、より理解が深まっていいね。

  • チームであることのメリットを生かさなければ意味がない。つまり、人数分以上の成果を出して初めてチーム。
  • 目標が明確でかつ共有できるもの、すなわち「達成可能なレベル」であれば、各自が「自律的」に行うことができる。
  • 「学習」していくのがチーム。
  • 人を「育てる」のがチーム。「期待」→「努力」→「成長」のプロセス。
  • 「共有」や「変化」のためには、手順の合意が必要。つまり、「標準化」「ルール」
  • 「どうして」「だから」「それなら」
  • 「Ah-ha」で振り返れること。これを次に生かすこと。
  • 「育てる力」と「育つ気持ち」。環境作りと目標を持たせること。

こうやってみるとほんと大事なことは同じなんだなと再実感。

頭のいい人の短く深く眠る法―頭と体が100%活性化する最高の眠り方
藤本 憲幸
三笠書房
売り上げランキング: 13571

時間割にそって勉強を始めてから、より時間に対する意識が上がってきたこともあって、もっと時間を有効に使えるにはどうすれば?ということで、睡眠時間の質を「濃く」することで「短く」すればもっと時間ができるんじゃないか?と思って選んだのだけど、、、

ごめんなさい、これはちょっと僕には合わなかった。言ってることはわかるんだけど、なんか文体とが好きになれないというか、もっというと例証が万人に納得できるレベルで書いてあるとは思えなかった。もう少しhowtoな内容を期待していたのに、くどくどと精神論を言われた感じでそれだけでもうええわ、となってしまって、一応読み切ってはいるのだけど、得るものは全くなかったなぁ。(個人差はあるのかもだけどね)。

ただまあ「睡眠時間」をもっと有効活用したいというのはまだあきらめてないので別の本をまた探してみるつもりです。

[時間割:Perl]『ミニマルPerl』その3
2008/09/16 23:53 posted by kunkichi

月曜日は「Perl」です。今日はこれまで出てきた起動オプションをプログラムのタイプ別にまとめるところから。そのまま写しちゃうのはアレなので多少いじってみました。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 204732
一次オプションクラスタ 用途
-wl 出力 -wで警告表示はお決まりな感じ。-lで行末処理。
# perl -wl -e 'print "Hello, World."'
Hello, World.
#
-wnl 入出力 -nで入力処理のフィルタ。
# echo "Hello,World." | ¥
> perl -wnl -e 's/World/Dolly/g;print;'
Hello,Dolly.
#
-wnla フィールド処理(セパレータは空白文字) -aで空白をセパレータとしたフィールド処理を指定。
# echo "1 2 3" | ¥
> perl -wnla -e 'print $F[2];'
3
個々のフィールドは@Fに入る
-wnlaF’セパレータ文字列 フィールド処理(セパレータは任意文字) -aでフィールド処理を指定、そして-Fでセパレータ文字列を指定。awkっぽい。
# echo "1,2,3" | ¥
> perl -wnlaF',' -e 'print $F[2];'
3
レコード定義クラスタ 用途
-00 段落モード 段落ごとに番号をつけてみる。# cat sample.txt
This is paragraph1.
 
This is paragraph2.
 
This is paragraph3.
# perl -wnl -00 -e 'print "$.: $_";' sample.txt
1: This is paragraph1.
2: This is paragraph2.
3: This is paragraph3.
slapcatしたデータとかこれで処理すればよさげ。
-0777 ファイルモード ファイルごとに番号をつけてみる。# cat sample2.txt
This is paragraph4.
 
This is paragraph5.
 
This is paragraph6.
# perl -wnl -0777 -e 'print "$.: $_";' ¥
> sample.txt sample2.txt
1: This is paragraph1.
 
This is paragraph2.
 
This is paragraph3.
 
2: This is paragraph4.
 
This is paragraph5.
 
This is paragraph6.
 
スイッチクラスタ 用途
-s スイッチで引数による変数処理を追加 例えば-flagで変数$flagを有効化してみる# cat sample.pl
#!/usr/bin/perl -wl -s
 
our( $flag );
 
if( $flag ){
  print "フラグが有効化されました。";
}else{
  print "フラグは無効のままです。";
}
実行すると以下。# ./sample.pl
フラグは無効のままです。
# ./sample.pl -flag
フラグが有効化されました。
モジュールクラスタ 用途
-M’モジュール名 モジュールを有効化する。 モジュールがインストールされているかの確認に使える。# Perl -M'Net::SMTP' -e ''
#
何も出力されなければモジュールはインストールされている。エラーが出力されたら印すt−ルされていない。
プログラムクラスタ 用途
-e ‘実行するPerlのコード コマンドラインから実行したいコードを書く。

上書き編集クラスタってのもあるのだけど、これはまだ出てきていないのでスルー。

でこれらをあらかじめエイリアスとして指定しておけばちょっと便利かも。
# cat .bashrc
alias perl_o='    perl -wl           ' # 出力
alias perl_io='   perl -wnl         ' # 入出力フィルタ
alias perl_iop=' perl -wpl         ' # 入出力フィルタでprintを使う
alias perl_f='     perl -wnla       ' # フィールド処理
alias perl_fp='   perl -wpla       ' # フィールド処理でprintを使う
alias Perl_o='    perl -00 -wl     ' # 段落モードで出力
alias Perl_io='   perl -00 -wnl   ' # 段落モードで入出力フィルタ
alias Perl_iop=' perl -00 -wpl   ' # 段落モードで入出力フィルタでprintを使う
alias Perl_f='     perl -00 -wnla ' # 段落モードでフィールド処理
alias Perl_fp='   perl -00 -wpla ' # 段落モードでフィールド処理でprintを使う

でもスクリプトではこうは行かないのである程度は覚えないと行けない、ということで順序。

ワンライナーの場合

# perl [スイッチクラスタ] [レコード定義クラスタ] [一次オプションクラスタ] [プログラムクラスタ]

スクリプトの場合

#!/usr/bin/perl [スイッチクラスタ] [レコード定義クラスタ] [一次オプションクラスタ]
〜以下コード〜

基本は一次オプションクラスタがあって、それにいろいろ追加した上で、コード部分を書くって言う流れになると。

こういうオプションを駆使した使い方はあんまりやったことなかったのだけど、僕の日常の作業だとオプションを指定せずに(-wTぐらいはつけます)ベタなスクリプトを書くよりも、こっちのほうが活躍する機会は多いかも。そのうちちょっと試してみよう。

[時間割:Python]『みんなのPython』その5
2008/09/14 21:59 posted by kunkichi

木曜日の『Python』の勉強結果をアップしてなかったので。ファイル処理から。

みんなのPython
みんなのPython
posted with amazlet at 08.08.21
柴田 淳
ソフトバンククリエイティブ
売り上げランキング: 50252


ファイル処理

  • openとかcloseとかほとんど他言語と変わらない。
  • ファイルオブジェクト。ファイルハンドルみたいなのと同じ。
  • ファイルオブジェクトに対してメソッドを使っていろいろ処理。
  • 1行づつ処理するには readlines()メソッドが便利。
    f = open("aaa","r")
    for i in f.readlines():
      i
  • ファイルオブジェクト自体をfor の対象にすることもできる。
    f = open("aaa","r")
    for i in f:
      i
  • 全部読み込む場合はread()メソッド、1行だけ読み込む場合はreadline()メソッドもあり。
  • 書き込みの場合はwrite()メソッド、シーケンスとかの場合はwritelines()メソッドもあり。
    f = open("aaa","r")
    f2 = open("bbb","w")
    for i in f.readlines():
       f2.write(i)
    f.close()
    f2.close()

スクリプトファイル

  • 拡張子は「.py」
  • SHEBANG。”#!/usr/bin/env python”とか。
  • pythonでは、関数とかは最初に宣言してmainをあとに書く感じなのね。シェルスクリプトっぽい。
  • ファイルを直接実行した時のみ実行、みたいな特殊なブロックもあり。
    if __name__ == '__main__':
      〜コード〜
  • コマンドライン引数には、sysモジュールを使うと、sys.argvに文字列のリストとして登録される。
    #/usr/bin/env python
     
    import sys
     
    print sys.argv
    # ./aaa.py aaa bbb
    ['./aaa.py', 'aaa', 'bbb']

ちょっとしたツールとして使うために必要な情報が揃ってきた感じです。

[時間割:サーバ]『Linuxカーネル徹底解析』読了
2008/09/11 00:33 posted by kunkichi

水曜日は『サーバ』の時間。ということで、カーネルの勉強をしようということで選んだ「Linuxカーネル徹底解析」を読み終わりました。

Linuxカーネル徹底理解 (日経BPパソコンベストムック)
日経BP出版センター
売り上げランキング: 94500

とりあえず、一通り読んでみて、なんとなくOSの全体的な処理のイメージみたいなものが見えてきた感じです。個人的に特に面白かったのは以下あたり。

  • ファイルシステム。これは一番面白かったし、過去ディスクI/Oには常に悩まされてきたので。inodeにファイル名が含まれないとか、ページキャッシュとの連携の仕組みとか、LVMのスナップショットの原理とか、なんか今まで悩んだり疑問に思ってたけどわからなかった、たくさんのことがやっとつながった気がして、すごい納得した。
  • メモリのところは、上でも書いたけど、一番はページキャッシュかな。スワップ処理とかのほうがメモリ絡みだと悩んでる人多いと思うんだけど、DBサーバみたいにメモリどっぷり使うようなサーバ管理したことってそんなにないんだよね。でもスワップインの処理は面白かったです。
  • あと、ブートシーケンスも外せない。でもここは他の記事に比べるとちょっと浅め。別の本でもうちょっと深く勉強して、ディスクレス&オンメモリで動くFWとかLBとか作りたい!
  • プロセスやらページキャッシュやらネットワークやら、全般的に「ステータスに応じた処理や状態遷移」ってのは日頃からもっと意識するようにしなきゃ。
  • デバイス関連はさすがにちょっと難しかったです、、、、

まずは概要がつかむっていうのが当初の目的だったので、それについてはある程度果たせた気がするし、最初の書籍としてはとてもよかった気がします。それに現時点で「C言語の知識が絶対的に足りない」ってこともわかったので、今やっている「C言語」の勉強の正当性が証明されて、モチベーションが多いにあがりました。

さて、次はどうしようかな。Linuxカーネルについてさらに進めてもいいんだけど、そのためにはCをもう少し勉強したほうがいいかなという気もするので、もう少しマクロな視点、というかハードウェアな部分も含めてコンピュータそのものの理解を深めてみるということで、これを選んでみました。

コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (上)
デイビッド・A. パターソン ジョン・L. ヘネシー
日経BP社
売り上げランキング: 37621

トピック的にはマクロかもしれないけど、パラパラっと見た感じアセンブリやらマシン語やらかなり細かいところまで出てきて、既に若干くじけそうですが(爆)なんとかがんばりたいと思います

[時間割:C言語]『はじめてのC言語完全入門』その4
2008/09/10 01:30 posted by kunkichi

火曜日は『C言語』です。張り切っていってみよう!

今日は11章「変数と定数」から。

はじめてのC言語 完全入門 (標準プログラマーズライブラリ)
塚越 一雄
技術評論社
売り上げランキング: 420963


  • Cでは変数の宣言が必要。
    ex) int a とか int a = 1。後者は初期化も一括。
  • sizeof で変数やデータ型のメモリ上のサイズを調べることができる。
  • 定数の場合はconstで宣言する。ちなみに定数は大文字で定義することが一般的
    ex) const int A = 1
  • 列挙型。複数の定数をまとめて宣言。これちょっと今までなかったタイプの型だな。
    enum { a, b, c }
  • 列挙された定数=列挙定数は自動的に0,1,2…と値が割り当てられる
  • 値を指定することもできる。
    ex) enum { a, b=4, c }
    この場合、a、b、cはそれぞれ0、4、5となる。つまり、指定した場合でもその次の値は+1。
  • 列挙に名前を付けることができる。ex) enum DAY { MONDAY, TUESDAY, WEDNESDAY, … }
    これをさらに変数宣言で使用できる。
    ex) enum DAY w;
    でこれに列挙された定数を代入できる。
    ex) w = MONDAY; ・・・上の例だと結局のところ0になる。
  • タグの指定と変数宣言は一括で書ける
    ex) enum DAY { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } var;
  • 型自体を作る感じと言った方がわかりやすいかも。

列挙型ってちょっと使いどころがピンとこなかったのだけど、いろいろ調べてみたところ、以下のサイトでなんとなく雰囲気はつかめた感じ。

ポイントをまとめると、

  • enum を用いると、 複数の数字に一意な「名前」を 付ける事が出来る。つまり、「名前」で判断すればよいということ。
  • フラグをたてるような場合に、フラグ名と値の関連を考えずにフラグ名だけで考えれるので便利。defineとかだとそれを意識しないといけない
  • switch文とか特に便利。
  • 配列とそろえると連想配列的な使い方も可能。
  • 値は整数のみ
  • 基本的な手順は以下。
    1. 列挙型の定義・・・タグを使ってenum型を定義する
    2. 変数宣言・・・定義された列挙タグを使って変数として定義
    3. 変数を使う・・・変数に列挙定数を代入したり。

簡単なスクリプトを試しに作ってみた。
#include <stdio.h>
 
enum weekday { MONDAY,
               TUESDAY,
               WEDNESDAY,
               THURSDAY,
               FRIDAY,
               SATURDAY,
               SUNDAY } w;
 
main()
{
  w = WEDNESDAY;
 
  switch(w){
  case MONDAY:
       printf("月曜日です。\n");
       break;
  case TUESDAY:
       printf("火曜日です。\n");
       break;
  case WEDNESDAY:
       printf("水曜日です。\n");
       break;
  case THURSDAY:
       printf("木曜日です。\n");
       break;
  case FRIDAY:
       printf("金曜日です。\n");
       break;
  case SATURDAY:
       printf("土曜日です。\n");
       break;
  case SUNDAY:
       printf("日曜日です。\n");
       break;
  }
  
  return 0;
}

内部的には整数だけど確かにこれだと値は意識しなくていいね。

[時間割:Perl]『ミニマルPerl』その2
2008/09/08 22:50 posted by kunkichi

月曜日は「Perl」です。今日はdieとwarnについて。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 204732
  • warnでSTDERRへの出力が可能。print STDERR “〜”と同じ。
  • dieはデフォルトで255を返す。
  • dieやwarnの出力内容に”¥n”をつけると、エラー情報(発生した行番号とかスクリプト名とか)が抑止される。
  • and/orを使った論理演算子は、if/then、if/elseを簡潔に書ける。
  • andはorよりも優先される点に注意。必要な場合はカッコをつける。
    ex) A or B and C ⇒ A or ( B and C)
    なので、AとBの結果、Cを実行したい場合は、
    ex) ( A or B ) and C
  • 逆にAの結果、BとCを実施するようなケースをwarnとexitでうまく使う。
    ex) A or warn “〜” and exit 255;
  • PerlでもawkみたいなBEGIN、ENDが使える!
  • BEGINは初期化とかチェックとかで使える。例えば、とあるスイッチが指定されている場合はBEGINブロックの中で特別な処理を含めた初期化を行い、ENDでサマリ的な内容を出力するとか。
  • $,で配列を出力する場合のセパレータというか文字列を指定可能。デフォルトは”"。配列を”"で括るとスペースになる。”"で括った場合のデフォルト値も$”で指定可能。

やっぱりPerlは特殊変数多いなぁ、こんなの使ったことないや。この辺はチートシート作っておくと便利かも。

次は、ここまで出てきた起動オプションをいろいろなプログラムのタイプ向けにパターン化・標準化したオプションクラスタの予定。

『日経Linux』でカーネル特集始まった
2008/09/08 20:58 posted by kunkichi

一時期はたくさんあったLinux関連雑誌だけど、今では冠にLinuxとあるのは『日経Linux』だけになってしまったなー。で唯一残ってる『日経Linux』なんだけど、あの大きさと値段がどうしても気に入らなくて、ほとんど買うことなかったんだよね。

ただし、今月からは別。


日経Linux - 2008年10月号

<<特別連載>> 図解 触って学ぶLinuxカーネル

各種のツールを駆使してカーネルの中を実際にのぞいて見ます。それにより,カーネルの仕組みを体で学びます。第1回は準備編として,メモリー管理とマルチタスクの仕組みを解説します。

第1回●メモリーとプロセスの管理

「触って学ぶ」っていうところは実際に体験することでより理解が深まりやすいと思うしなかなかよさげな感じ。ただし、やっぱり「ソース読んで」っていう部分とセットだからこそ、知識と体験が組合わさると思うので、ソースへの理解も深めていかないと。しばらくは買ってみようかなと思います、でもCD-ROM要らないからもちょっと安くなってほしいなぁというのは強い願い、、、

で、僕に取ってはそんな微妙な『日経Linux』だけど、ムックは悪くないのもありました。まあ初心者向けはちょっとおいといて、今読んでる『カーネル徹底解析』含めて↓の辺は、浅くもなく深くもなく、全体像をつかむにはなかなかよい内容だったので紹介しておきます。

Linuxカーネル徹底理解 (日経BPパソコンベストムック)
日経BP出版センター
売り上げランキング: 25440
自分で作るLinux OS (日経BPパソコンベストムック)
日経BP社
売り上げランキング: 100399

[時間割:Python]『みんなのPython』その4
2008/09/05 00:56 posted by kunkichi

木曜日は『Python』です。ループの続きから。

みんなのPython
みんなのPython
posted with amazlet at 08.08.21
柴田 淳
ソフトバンククリエイティブ
売り上げランキング: 50252


ループの続き

  • breakとかcontinueとかおなじ。
  • シーケンスは何でもforで使える。リストやら文字列やら。
  • 辞書とかの組み込み型メソッドにはシーケンスを返すようなメソッドとかがあるのでこの辺と組み合わせて。
  • whileもだいたい同じ。でもdo〜whileはない。do〜while的なのはbreakを使う。

関数

  • def 関数名 ([引数]):
  • もちろんインデント!
  • 関数の定義は呼び出しより前。ここはシェルっぽい。
  • 関数では変数のスコープが関数内のローカルとなる。
  • 関数呼び出し時に引数を変数名でキーワード指定すると順番を気にしなくてもよい。
  • デフォルト値の定義も普通。
  • 返り値も普通。リストや辞書も返せる。

まあこの辺はどの言語もだいたい一緒かな。

次回はいよいよファイル操作。

時間割を変更
2008/09/04 02:00 posted by kunkichi

コツコツと続けている時間割だけど、ちょっと見直しました。

  • 水曜日の『サーバ』と『OS(カーネル)』と土曜日の『自宅サーバ』は統合しました。分ける意味あんまりない感じがしたので。
  • 金曜日の『統計学』はちょっとあきらめました。1日2教科は、アウトプットまで考えると、片方だけになるか、どっちも中途半端になるか、だったので。トピックは1日1つのほうが頭がすっきりします。
  • 毎日の通勤時の『読書』はいわゆる「すきま時間」なので、1週間全部で2時間ぐらいのイメージで。

ってことでまあとりあえずは「20%の法則」の8時間は達成できるかなと。なんせアウトプットが結構時間かかるんだよね、まあこれももっとうまくやれるようになればもうちょっと効率良くなるかなと期待。

OFFが多いなー(笑)でもまあ気分が乗ると2時間ぐらいで一気に本読めちゃったりする時もあるので、最低限ここまではやろうというノルマ的な目標です。達成率もちゃんと管理するので、またこれでがんばります。

新しい時間割↓
jikanwari20080903.jpg

このページの先頭へ