Eテレ感想メモ
Eテレ見てたら面白かったので忘れないようにメモ。
- めざせ!会社の星「部下も必見!デキる課長の極意」
- 定期的にコミュニケーションの場を設ける。
- やっぱり話しかけづらいし、忙しい時は聞くのも大変なので。
- やるなら朝がいいらしい。これって朝会っぽい。
- 人に任せる。
- 細かく砕いて定期的にレビューする。
- 定期的にコミュニケーションの場を設ける。
- スタンフォード白熱教室 第1回「ブレーンストーミングで可能性を探せ」
- Yes, But じゃなくて Yes, And
- 座るより立ってやった方がいい
- これも上述の朝会と似てるなぁ。
fizzbuzzでもいろんな書き方がありますね。今の僕ならこう書く
なんとなくネットサーフィンしていたら上記の記事に出会い、
なるほど色んな書き方がある物だなと感じました。
でも個人的にはあまり好きではない書き方だったので
(応用2のFizzBuzzFozzの時にメソッドを呼び分けているのですが
このロジックは抽象化してメソッドにいれたほうが好みなので)
今の自分ならこう書くだろうというのを書いてみました。
※使い慣れないrubyなので慣用表現に誤りがあるかもしれませんが
そこはご了承ください。
#!/usr/bin/ruby puts '【基本】「まず基本的な FizzBuzz 問題を実現するプログラムを書きなさい' class Array def fizzbuzzify self.map do |i| case true when i % 15 === 0 then 'FizzBuzz' when i % 5 === 0 then 'Buzz' when i % 3 === 0 then 'Fizz' else i end end end end puts (1..100).to_a.fizzbuzzify puts '【応用1】「同じ処理を 100 まで、200 まで、1000 までの配列にそれぞれ適用しなさい」' puts (1..100).to_a.fizzbuzzify puts (1..200).to_a.fizzbuzzify puts (1..1000).to_a.fizzbuzzify puts '【応用2】「1000 までの場合だけ、30 の倍数の時に "FizzBuzzFozz" にしなさい」' class Array def fizzbuzzfozzify if self.count != 1000 then return self.fizzbuzzify end self.map do |i| case true when i % 30 === 0 then 'FizzBuzzFozz' when i % 15 === 0 then 'FizzBuzz' when i % 5 === 0 then 'Buzz' when i % 3 === 0 then 'Fizz' else i end end end end puts (1..100).to_a.fizzbuzzfozzify puts (1..200).to_a.fizzbuzzfozzify puts (1..1000).to_a.fizzbuzzfozzify puts '【応用3】「1000 までの場合だけ、標準出力でなく、hoge.txt に出力するようにしなさい」' class FizzbuzzFozzOutput def initialize(array_or_maxnum) case array_or_maxnum when Array then @array = array_or_maxnum when Integer then @array = (1..array_or_maxnum).to_a else @array = (1..(array_or_maxnum.to_i)).to_a end end def execute if @array.count === 1000 then File::open('hoge.txt', 'w') {|f| f.puts @array.fizzbuzzfozzify } else puts @array.fizzbuzzfozzify end end end FizzbuzzFozzOutput.new(100).execute FizzbuzzFozzOutput.new(200).execute FizzbuzzFozzOutput.new(1000).execute
まず、基本のFizzBuzzのロジックをオープンクラスで標準のArrayクラスのインスタンスメソッドとして追加します。
(標準のArrayに置くべきか、別のFizzBuzzArray的なクラスを作った方がいいかはちょっとよくわかりません。)
配列をFizzBuzz化する、という意味で Array#fizzbuzzify という名前を付けています。
なんとなく動詞っぽい気がしますが英語が得意でないので実際のところどうかはよく知りません。
応用1ではそれぞれの配列作ってfizzbuzzifyするだけです。
応用2では新たなロジックが出てくるので、それをまたArrayクラスのインスタンスメソッドとして追加します。
今度は Array#fizzbuzzfozzify としました。
1000までの場合という意味を厳密に考えるとめんどくさいので、とりあえず
1000個の要素の配列だった場合にFizzBuzzFozzが出るようにしています。
それ以外の場合は Array#fizzbuzzify に委譲します。
これで呼び出し側ではメソッドを呼び分ける必要はなく、どんな配列でも
Array#fizzbuzzfozzify を呼べばいいようになりました。
続いて応用3ですが、今度は出力先が変わります。
出力するメソッドをどこに置くかですが、Arrayに置くのもどうかと思ったので
新規で FizzbuzzFozzOutput クラスを作り、excecute メソッドで出力先が変わるロジックを吸収することにしました。
あと色気を出して、コンストラクタに配列だけじゃなく数値でも受け取れるようにしています。
いやらしいですね。
ソフトウェア工学的な読み物まとめ
個人的に何度でも読み返したい記事
- ソフトウェア工学とは何か ... 1992年の記事
- ¿·¤·¤¤¥½¥Õ¥È¥¦¥¨¥¢³«È¯¼êË¡ ... 2000年の記事
- - データベースの進化的設計 ... 2003年の記事
- Life is beautiful: ソフトウェアの仕様書は料理のレシピに似ている ... 2006年の記事
- 仙石浩明の日記: 「ソフトウェア開発」は「モノ作り」ではない ... 2006年の記事
調査したい
http://www.phpactiverecord.org/
と
http://framework.zend.com/manual/ja/zend.db.table.html
を使って
それっぽい業務モデルをActiveRecordパターンとTableDataGatewayパターンで実装してみて比較したい
mac で iTerm や emacs を自分的に快適に使う設定
※screenのための設定なども追記しています。
自分はemacsユーザ。
コントロールキーは配置的にfnキーにしたい。
メタキーは配置的にcommandキーにしたい。
(optionキーはどうも慣れなかった)
ただし普通にcommandキーを潰してしまうと、
command+tab(アプリ切り替え)
command+v(ペースト)
command+space(ひらがななどの変換)
などの基本的なショートカットまで使えなくなってしまうのでそれは避けたかった。
ネットに埋もれる先人たちの知恵を拝借した結果、
以下のように設定することにした。
KeyRemap4MacBookを使ってコントロールキーとfnキーを入れ替える
- Change Control_L Key (Left Control)
- Control_L to Fn にチェックを入れて有効に
- Change Fn Key
- Fn to Control_L にチェックを入れて有効に
iTerm のキーボード設定を追加する
ブックマーク > プロファイルの管理 > キーボード設定 から
キーの組み合わせ | 動作 | メモ |
---|---|---|
cmd-shift-hex code 0x25 | ^[を送信 % (!) | emacs Query replace |
cmd-shift-hex code 0x3c | ^[を送信 < (!) | emacs ページ一番上への移動 |
cmd-shift-hex code 0x3e | ^[を送信 > (!) | emacs ページ一番下への移動 |
cmd-hex code 0x62 | ^[を送信 b (!) | emacs 後の単語への移動 |
cmd-hex code 0x64 | ^[を送信 d (!) | emacs 単語の削除 |
cmd-hex code 0x66 | ^[を送信 f (!) | emacs 前の単語への移動 |
cmd-hex code 0x67 | ^[を送信 g (!) | emacs Goto line |
cmd-hex code 0x6c | ^[を送信 l (!) | emacs lowercaseへ変換 |
cmd-hex code 0x75 | ^[を送信 u (!) | emacs UPPERCASEへ変換 |
cmd-hex code 0x77 | ^[を送信 w (!) | emacs リージョンコピー |
cmd-hex code 0x78 | ^[を送信 x (!) | emacs コマンド入力 |
ctrl-num-← | ^[を送信 [5D (!) | screen 右のスクリーンへ切り替え |
ctrl-num-→ | ^[を送信 [5C (!) | screen 左のスクリーンへ切り替え |
ctrl-shift-num-← | ^[を送信 OD (!) | 別のscreen 右のスクリーンへ切り替え |
ctrl-shift-num-→ | ^[を送信 OC (!) | 別のscreen 左のスクリーンへ切り替え |
commandキーをメタキーに変えてしまうのではなく
よく使う組み合わせのみ登録する方針にしました。
.screenrc
bindkey "^[[5C" next bindkey "^[[5D" prev
別の.screenrc
bindkey "^[OC" next bindkey "^[OD" prev
256色対応
http://d.hatena.ne.jp/milk1000cc/20090205/1233792728
をやりました。
array_chunk_pad的な
なるほどー。この使い方は初めて見ました。
これは便利そう。
ただ一つ気になったのが、 array_chunk と array_pad で分割数の 2 が重複して出てくるところ。
調べてみたら array_chunk には足りない要素を埋めるための引数、機能がないんですね。あってもよさそうなのに。。
まぁでも以下のように簡単なラッパ関数を書けばいいかな。
<?php function array_chunk_pad(array $input, $size, $pad_value, $preserve_keys = false) { $chunks = array_chunk($input, $size, $preserve_keys); $chunks[] = array_pad(array_pop($chunks), $size, $pad_value); return $chunks; } $fruits = array( 'apple', 'orange', 'strawberry', 'banana', 'cherry', ); ?> <table border="1"> <?php foreach (array_chunk_pad($fruits, 2, ' ') as $chunk): ?> <tr> <?php foreach ($chunk as $fruit): ?> <td><?php echo $fruit ?></td> <?php endforeach ?> </tr> <?php endforeach ?> </table>