2011-01-01から1年間の記事一覧

レガシーコード改善ガイド 第8章 どうやって機能を追加すればよいでしょうか?

スプラウトメソッド・ラップメソッドの欠点 レガシコードで考慮すべき最も重要なことは、多くのコードにテストが存在していないことです。そらに悪い状況では、テストの整備が難しい場合があります。前回までにスプラウトメソッドとラップメソッドについて説…

phpunit/test_helpersで、依存関係を取り除く

php

http://d.hatena.ne.jp/yokotaso/20111223の話の続きです クリスマスイブは、イチャイチャ依存し合ているコードを排除すべく色々調査。PHPのグローバル関数を使ってクラスを作ると、グローバル関数に依存したクラスが出来上がる。グローバル関数に依存してい…

PHPでグローバル関数の依存性を排除するにはどうすれば…

php

レガシーコードを改善ガイドの中で、接合点という話が出てくる。 接合点とは 接合部(seam)とは、その場所を編集しなくても、プログラムの振る舞いを変えることのできる場所である。 とどのつまり、ソースコードを編集しないで、振る舞いを変更するためにはど…

レガシーコード改善ガイド1章

ソフトウェア変更 要件の追加とバグの修正 バグ修正・要件追加など、色々な見方があるが、技術的に大切なことは、振る舞いが変更されるかどうかです。新しい振る舞いの追加と既存の振る舞いの変更には大きな違いがあります。 ソフトウェアで一番大切なことは…

色々な言語でクイックソートしてみる

Haskellのquicksortがすごい綺麗と聞いて Haskell quicksort :: (Ord a) => [a] -> [a] quicksort [] = [] quicksort (x:xs) = let smallerSorted = quicksort [ a | a <- xs, a <= x] biggerSorted = quicksort [ a | a <- xs, a > x] in smallerSorted ++ …

TDD Boot Camp 横浜で初めてGroovy触ったらかっこよすぎワロタwwww #tddbc

1日たってしまいましたが、11/06にTDD Boot Camp 横浜に参加してきました。詳しい記事は、id:absj31さんの記事が素晴らしくまとまっているので、ご覧くださいませ。 TDD Boot Camp 横浜に参加してきた #tddbc - Diary of absj31 TDD BCの感想と、Groovyを初…

第17の戒律 技術調査記4

前回までは、高階関数の話をしていましたが、 なぜ、クロージャーの値が保存されることになるのか見てみたいと思います。 まずは、globberをの中にあるletを分解してlambdaに戻します。 (define gobbler ((lambda (x) (lambda (food) (set! x food) (cons fo…

コマンドラインパスワードをかっこよく表示したい

パスワードの確認のための表示したい。でも、全部表示するのは、セキュリティ上よろしくない。 そんな時のために、sedとawkとshで、おしゃれな表示にしてみる。 yokotasoをパスワード表示のときに、yo******みたいな表示できたらいいなと。 まずは、実験して…

MySQLのバージョン番号だけ取り出す

MySQLのバージョン番号だけ取り出したい誰得な需要があったので… MySQLのバージョンを取り出す MySQLには、いくつかバージョンを取り出す方法があります。 mysqlのオプションを使う mysqlのワンライナーを使う #その1 mysql --version #mysql Ver 14.14 Dis…

FibBuzz

面白そうな問題があったのでやってみた。 1から100の数に対して、フィボナッチ数ならFibを、5で割り切れるならBuzz、両方は、FizzBuzz (use srfi-1) (define (fib? n) (letrec ((fib (lambda(fn-1 fn-2) (let ((fn (+ fn-1 fn-2))) (cond [(= n fn-1) #t] [(…

shellスクリプトTips

コマンドの出力を受け取る #dir=`pwd`は古い…らしい dir=$(pwd) #値を変えたいとき(必ず、現在位置) dir="$(pwd)" # 〃 くないとき(実行時のパスが保存) ファイル探索⇒ソート⇒最初のファイルバス 01.sh,02.sh,03.shみたいな名前で、最新の処理を走らせた…

第17の戒律 技術調査記3

高階関数 公開関数というのは、戻り値を関数にする関数のことです。 x,yを引数とするaddを定義します。xの値だけ固定したadd3を定義します。 これによって、add3は、引数に3を加える関数を返す関数になります。 (define add (lambda(x) (lambda(y) (+ x y)))…

第17の戒律 技術調査記1

scheme修行を読んでいて、わからないことがあったので、調査。 ちょっと、現状を整理してみます。 第17の戒律(予備版) (let ( (x ...)) ...)に対して(set! x ...)を用いる際には、それらの間に少なくとも1つの(lambda ...を置くべし。 set!の使用時に、名…

第17の戒律 技術調査記2

A:それで、(let...)は、約にたちましたか? B:まったく。(let...)と(set!...)は、その間に(lambda...を入れないで使っても 何かを覚える役には役立ちません。 この一文がまったく理解できないので、過去に引数で与えられた食べ物を記憶しておく関数を作りま…

継続渡し形式

継続渡し形式が私にはよく理解できなかったので、細かく追って見ました. http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3A%E4%BD%BF%E3%81%84%E3%81%9F%E3%81%84%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E7%B6%99%E7%B6%9A%E5%85%A5%E9%96%8…