┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
┃ ■┃
●┃● ● オ ブ ジ ェ ク ト 倶 楽 部 ■ ┃
┃ ■ ┃
┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
No.156 2006/9/20
■ I N D E X
┃
┣【事務局より】事務局長就任挨拶
┣【プログラミング】ゆるーいHaskell[5]
┣【PF】アジャツール - Agileなツール紹介[15]
┗【アンケート】気になるシステム業界 ホントのところ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━1 s t ■━
■
┗【事務局より】事務局長就任挨拶
こんにちは、天野勝です。
この度、オブジェクト倶楽部の事務局長になりました。
主宰の平鍋健児をはじめ、同好の士が集まっている永和システムマネジメント
の人たち、そしてオブLOVEファンのステキな笑顔が見られる、そんなステキな
倶楽部になるように、事務局長の仕事を楽しみながら運営をしていきたいと思
います。
今後とも、よろしくお願いいたします。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2 n d ■━
■
┗【プログラミング】ゆるーいHaskell[5]
こんにちは、西川です。暑い夏が終わって大分過ごしやすくなってきました。
もっと涼しくなればいいのに。さて今回はリストを扱う基本的な関数をいくつ
か紹介したいと思います。まずはmapからです。
■リストの各要素に関数を適用する関数map
> ghci
Prelude> let add1 n = n + 1
Prelude> map (add1) [0..4]
[1,2,3,4,5]
ghciではletを使って関数を定義することができます。引数に1を加え値を返す
関数add1を定義しました。map関数は第二引数のリストに対して第一引数の関数
をそれぞれ適用するという処理をおこなう関数です。上の例では[0,1,2,3,4]の
リストの各要素にそれぞれ1を足しています。map関数では第一引数の関数を第
二引数のリストの各要素に適用する関数です。イメージとしてはこんな感じで
す。第一引数の関数をf、第二引数のリストを[x0,x1,..xn](n個の要素を持つリ
スト)とします。
map f [x0,x1,x2,..xn]
=> [f(x0),f(x1),f(x2),..f(xn)]
map (add1) [0..4]
=> map (add1) [0,1,2,3,4]
=> [add1 0,add1 1,add1 2,add1 3,add1 4]
=> [0+1,1+1,2+1,3+1,4+1]
=> [1,2,3,4,5]
なんとなく理解していただけたのではないでしょうか。map関数の型を見てみま
しょう。
Prelude> :t map
map :: (a -> b) -> [a] -> [b]
map関数の第一引数は(a -> b)という型を持つ関数です。map関数のように関数
を引数としてとる関数のことを『高階関数(higher order function)』[*1]と呼
びます。
Prelude> :t iterate
iterate :: (a -> a) -> a -> [a]
Prelude> take 10 (iterate (add1) 0)
[0,1,2,3,4,5,6,7,8,9]
■関数を繰り返し適用する関数iterate
iterateは第一引数の関数を第二引数に適用したその結果をさらに第一引数の関
数の引数にする、という処理を延々繰り返す関数です。延々繰り返すので結果
は当然無限リストになってしまいます。今回はtake関数をつかって先頭から10
個だけを取得しています。前回も紹介した関数takeも勿論リストを扱う基本的
な関数の1つです。
iterate f x
=> x:iterate f (f x)
=> x:f x:iterate f (f (f x))
=> x:f x:f (f x):iterate f (f (f (f x)))
=> ...
iterate add1 0
=> 0:iterate add1 (add1 0)
=> 0:add1 0:iterate add1 (add1 (add1 0))
=> 0:add1 0:add1 (add1 0):iterate add1 (add1 (add1 (add1 x)))
=> ...
■たたみこみ関数foldr、foldl
次はfoldr,foldlです。foldr、foldlはリストをたたみこむようなイメージから、
俗に『たたみこみ関数』と呼ばれています。まずは型を見てみましょう。
Prelude> :t foldr
foldr :: (a -> b -> b) -> b -> [a] -> b
Prelude> :t foldl
foldl :: (a -> b -> a) -> a -> [b] -> a
名前も似てますが型もよく似ています。それぞれ動作させてみましょう。
Prelude> let add x y = x ++ y
Prelude> foldr add "0" ["1","2","3","4","5"]
"123450"
Prelude> foldl add "0" ["1","2","3","4","5"]
"012345"
この例だと単純に第二引数である「"0"」が右についたか左についたかの違いに
しか見えません。実はfoldr、foldlはもう少しややこしい関数なのでもうちょっ
とひねった例をあげます。
Prelude> let sub x y = x - y
Prelude> foldr sub 0 [1,2,3,4,5]
3
Prelude> foldl sub 0 [1,2,3,4,5]
-15
結果が異なりますね。foldr、foldlは右からくっつく、左からくっつくというだ
けの違いではありません。
Prelude> let sub' x y = "(" ++ x ++ "-" ++ y ++ ")"
Prelude> foldr sub' "0" ["1","2","3","4","5"]
"(1-(2-(3-(4-(5-0)))))"
Prelude> foldl sub' "0" ["1","2","3","4","5"]
"(((((0-1)-2)-3)-4)-5)"
余談ですが、Haskellでは関数名にシングルクォートを使うことができます。
sub'関数はsub関数のアレンジなのでシングルクォートをつけてみました。
foldrは第一引数の関数を右から優先的に適用します。foldlは第一引数の関数
を左から優先的に適用します。上記の例からfoldr、foldlはそれぞれ以下のよ
うなイメージで評価されていることが分かります。
foldr f x [x0,x1,..xn]
=> f x0 (foldr f x [x1,..xn])
...
=> f x0 (f x1 (..(foldr f x [xn])))
=> f x0 (f x1 (..(f xn x)))
foldl f x [x0,x1,..xn]
=> foldl f (f x x0) [x1,..xn]
...
=> foldl f (..(f (f x x0) x1)) [xn]
=> f (..(f (f x x0) x1)) xn
foldr、foldlの例はちょっと難しかったでしょうか。私も上手く使えないこと
が多々ありますが、徐々になれていけば良いと思います。今回紹介した関数の
他にもリストを操作する関数は沢山あります。他の関数についてはぼちぼち紹
介していきますのでお楽しみに。次回はタプルについてお話します。(西川)
[*1]: http://ja.wikipedia.org/wiki/%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-4&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-4&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-4&choice=2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━3 r d ■━
■
┗【PF】アジャツール - Agileなツール紹介[15]
●はじめに
2ヶ月ほど前にISOT(国際文具・紙製品展)が開催されました。業者のためのイベ
ントなのですが、一般公開の日があり、筆者も初めて参加してみました。
様々なメーカーが出展して新製品の紹介をしていました。今回の記事では、そ
の中で、会場の各所で目にとまったホワイトボードの紹介をしてみます。さら
に最近筆者の回りで流行っているホワイトボードについても紹介します。
●貼ってはがせるホワイトボード
筆者は以前の連載[*1]でホワイトボードを設置の仕方で分類し、その解説をし
たことがあります。その後、別タイプのホワイトボードの解説もしました。[*2]
今回ISOTで見かけたのは、前回紹介したものとは事なるまた新しいホワイトボー
ドでした。タイプとしては壁に貼れるタイプになるのですが、その特性が若干
異なります。
[*1] : http://www.objectclub.jp/ml-arch/magazine/123.html
[*2] : http://www.objectclub.jp/ml-arch/magazine/126.html
1つはポストイットで有名な3M社の「貼ってはがせるホワイトボード」[*3]でし
た。これはポストイットで使われている弱粘着性の糊を使って、ホワイトボー
ドシートを壁面に貼り、使用できるというものです。マグネット方式とは異な
り、スチール壁以外でも貼って使用することができます。使用した後は、はが
して丸めて持ち運びができます。糊の粘着が弱くなった時のために固定するた
めのテープまで用意しているという周到さです。
[*3] : http://www.office-online.co.jp/SHOP/43797/list.html
次に紹介するのは、「吸着性」のホワイトボードのタイプです。このタイプは
小さな吸盤がビッシリ裏面に配置されてあり、平らな壁面に貼ることができま
す。例えばガラス窓やガラスのパーティション、もちろんスチールのパーティ
ションにもつけることができます。タイプはいろいろありますが、ホワイトバ
リュー[*4]という商品は吸着性のホワイトボードで、さらには内部に鉄箔が仕
込まれていてマグネットを使用することもできます。筆者もサンプルを取り寄
せて使用してみましたが、思ったより吸着性能がよく、ガラス面に貼れるのは
かなり便利だと感じました。
[*4] : http://www.koho-pr.co.jp/index.html
他にもホワイトボードペーパー[*5]という粘着性ホワイトボードもあるようで
す。こちらはレーザープリンターで自由に印刷できるのが特徴のようですね。
[*5] : http://www.dragon-net.co.jp/wbp/wbp.htm
●携帯用ホワイトボードを自作する
最近携帯用ホワイトボードを自作するのが流行っています。このホワイトボー
ドを自作した人たちは、本当にカバンにホワイトボードをしのばせて「携帯」
しています。材料は100円ショップで売っているホワイトボードシートと、それ
を貼る素材です。素材はなんでもよく、アクリル板や厚紙、クリップボードな
どがよく使用されているようです。
壁に貼るタイプの貼れるホワイトボードシートも一般に流通していますので、
近くに100円ショップがなくても、若干高めではありますが通販で購入すること
もできます。鉄箔を含んでいるタイプのホワイトボードシートならば、マグネッ
トも使用することができてさらに便利です。
自作のメリットは、自分の趣味嗜好に応じてカスタマイズできるという点です。
一般に購入できるホワイトボードでは、ほとんどといってよいほど枠がついて
しまいます。自作ならば枠なしで軽量化したホワイトボードを自作することも
可能ですし、スチレンボードに貼ることで軽量化を図ることもできます。
何を隠そう、オブジェクト倶楽部主催の平鍋氏は携帯用ホワイトボードを自作
して持ち歩いています。出先で何かを説明する時によく使用しています。また、
オブジェクト倶楽部の水越氏はカバーつきのクリップボードをホワイトボード
にして、日々のtodoを記入してtodo管理に使用しています。オブジェクト倶楽
部事務局長の天野氏は、B3サイズ(B4サイズ2枚)のホワイトボードでふりかえり
(KPT)をしています。
●環境に合わせて工夫する
前半は市販品、後半は自作品を紹介しました。最近では「lifehack(ライフハッ
ク)」という言葉が世間で流行っています。日々の生活に便利なようにツールを
自分で考えたり、自作したりすることをこう呼びます。思えば「hack」という
言葉はソフトウェアの世界では悪い意味としてとられてきました。しかし元々
は自分が使いやすいようにソフトウェアに手を加えることを「hack」と呼び、
そのようなhackをできるエンジニアを「hacker(ハッカー)」と呼びます。
以前からハッカーとは「悪質な技術者」のことではなく「優れた技術者」のこ
とだと言う人々は多かったのですが、世論は全て「ハッカー」という言葉を悪
質なエンジニアの意味で使ってきました。筆者は「lifehack」という言葉が流
行り、いつか「ハッカー」という言葉が一般的に「優れたエンジニア」として
使われることを期待しています。
以前のオフィスでもそうでしたが、必ずしもスチールの壁が使えるというもの
ではありません。環境にツールが作用されてしまうのはちょっと悲しいですね。
貼って剥がせるホワイトボードや、吸着型ホワイトボードは、そういった環境
の制約を越えるための1つの方法です。
さらに言うとツールは購入してからが勝負です。購入してからも「lifehack」
つまり日本語で言う「工夫」をこらして、皆さんの環境にぴったりのツールと
使い方を造りあげることができたら素晴しいですね。(懸田)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=M002-15&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=M002-15&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=M002-15&choice=2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━4 t h ■━
■
┗【アンケート】気になるシステム業界 ホントのところ
今週は「どんなスポーツやってますか?」のホントのところ。エンジニアはど
うも軟弱なイメージを持たれやすいらしいのですが、それは偏見かも。今どき
のエンジニアの皆さんはかなりスポーツ経験者が多いようです。お休みもかな
り趣味として楽しんでいらっしゃるようです。スポーツの秋にちなんで、皆さ
んに聞いてみましょう。
サッカーやフットサル。
http://www.ObjectClub.jp/special/kininaru/vote?vol=122&choice=0
ジムなどでワークアウト。
http://www.ObjectClub.jp/special/kininaru/vote?vol=122&choice=1
マラソン。
http://www.ObjectClub.jp/special/kininaru/vote?vol=122&choice=2
武道(柔道、空手、合気道、相撲など)。
http://www.ObjectClub.jp/special/kininaru/vote?vol=122&choice=3
野球。
http://www.ObjectClub.jp/special/kininaru/vote?vol=122&choice=4
サイクリング。
http://www.ObjectClub.jp/special/kininaru/vote?vol=122&choice=5
水泳。
http://www.ObjectClub.jp/special/kininaru/vote?vol=122&choice=6
ダンス。
http://www.ObjectClub.jp/special/kininaru/vote?vol=122&choice=7
そんな元気ありません。
http://www.ObjectClub.jp/special/kininaru/vote?vol=122&choice=8
それは秘密です。
http://www.ObjectClub.jp/special/kininaru/vote?vol=122&choice=9
ちょっと語らせて!
詳細をこのメールに返信ください!!
アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「お仕事しながら、どんなお菓子食べてますか?」の結果は公開中。
ぜひご覧下さい。
⇒http://www.ObjectClub.jp/special/kininaru/vol121/PlonePopoll_results2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記
こんにちは、編集人です。深夜にセミナー用の資料を作っているときに、突如
ノートパソコンのキーボードが一部テンキーに!!こんなとき慌てれば慌てる程
パニックに・・・。「どうやったら解除出来るんだっけ!?」半泣き状態で既に
格闘時間は二時間。そろそろ寝て明日の朝やろうと諦めたときにNumlockがオン
になっていたことが判明しました。
「急いでいるときほど冷静に!」いい教訓になりました。
今週の強引な一言
*** 雨だれ、石をうがつ(ことわざ) ***
長いあいだ根気よく努力していれば、小さなこともいつか成功するといこと。
同じように根気よく努力すれば、いつかその想いも通じるということ。諦めな
いで!
(上田雅美)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
● ご意見、ご感想は ⇒このメールに返信ください
〇 配信中止、アドレス変更は ⇒http://www.ObjectClub.jp/community/object_ml/help/
〇 免責事項、過去の記事は ⇒http://www.ObjectClub.jp/community/object_ml/
■ 発行:オブジェクト倶楽部 ⇒http://www.ObjectClub.jp/
■ 編集代表:平鍋 健児
Copyright (c)2003-2006 オブジェクト倶楽部. All Rights Reserved.
powered by Eiwa System Management, Inc.