2005-09-11(日)
■[プログラム]データベースにスクリプトを格納

PofEAAのサンプルで、商品の区分によって料金の計算方法が違う場合の処理の書き方というのがあって、冗談で「区分テーブルにJavaScriptとかGroovyとかのスクリプトを持っとけばおk」と言ってみたんだけど、あながち使えないわけではない手法なんじゃないかと思ってみました。
サンプルでは、商品としてソフトウェアを扱っていて、その区分が「表計算」「文書作成」「データベース」というのがあってそれぞれ収益の計算方法が違うことになっているのですが、普通にプログラムとして書いてしまうと区分が増えたり計算方法がちょっと変わったりするたびにシステム屋さんにお伺いをたてないといけなくなるわけです。
そういうのを、システム屋さんを通さず使う人が自分達でどうにかしたいという要求は必ずあると思うので、その場合にはデータベースに計算ルールを入れるのは有効かと。
で、そのとき気になる信頼性の問題ですが、「区分テストテーブル」みたいなものを作って、入力値と期待値を数パターン入れれるようにして登録のときにテストを走らせる仕組みにすればいいかなと。
2005-08-22(月)
2005-08-20(土)
■[プログラム]フィジカルを鍛える意義

「実際にはこんな難しい処理を書くことはないよね」という中で、こういう問題を解くことにどういう価値があるか。
ぼくの考えでは
- 計算可能な処理と不可能な処理の性質の違いを実感する
- 計算可能な処理の場合、どういう処理ならどういうプログラムになるかを実感する
というのが大切なんじゃないかと思っています。
同じ問題を解決するのに、プログラムが組めない人ほど難しい処理を書こうとして、プログラムが組める人ほど簡単な処理で解決するという傾向を目にします。技術系MLで非常に高度な処理をしたいという質問を目にすることがありますが、ほとんどの場合は、「こうすればそんな処理必要ないよ」で解決したりしてます。
で、そういうのの原因として「どういう処理がどういう難しさのプログラムになるかアタリがつけれてない」っていうのがあると思うんです。
で、これがシステムの仕様策定のときに深くかかわると思います。
ぼくは、要求を聞いて仕様を決めるときに、本当に大切なことは「計算不可能・計算困難な要望を受け入れないこと」だと思っています。その上で要求を実現していく。
要求として計算不可能な処理や計算困難な処理を受け入れてしまうと、どんな手法を用いたとしても、どんな管理技術を用いたとしても、そもそもシステム化不可能なわけです。でも、人間なら簡単に処理しているので、ぱっと見、システムでも簡単に処理できると思ったりしてしまうんですね。で、実装してみて、実現困難なことに気づく。戻り発生。劇的に。根本的に。
デスマっていうのは能力的に困難なことをするときに起こりやすいと言われるわけですが、実際には、計算不可能なことをやろうとしてるということも大きく影響してる気がします。
要するにね、処理を書く前に決まっている勝負というのがあると思うんですよ。
その勝負を決めるのがフィジカル。
つまり、難しい処理を書かないためにこそ、基礎体力が必要だと思うのです。難しい処理を書くためじゃなくね。
イメージとしては、ロナウジーニョがなんだか最小限にしかボールにさわらずに簡単に相手をかわしちゃってるって感じで*1、簡単で誰にでもできるように見えるスーパープレイを続発してるけど、でもそのためにはバランス感覚が必要で、それを実現するのが内側の筋肉の強さという感じです。ボールをすごく速く蹴ったりすごく遠くに蹴ったりするのに必要な外側の筋肉とは違う、内側の筋肉。
簡単にプログラムを組んでるように見せるための力。
■[プログラム]フィジカルの問題(易2)

易しめの(だと思っている)問題
(1)
- A誌、B誌、C誌の3誌の月刊誌がある
- 3誌について2004年の一年分をそれぞれ持っている
- それらの合計36冊の中からランダムに10冊抜き出せ
(2)
- B誌は最新情報をダイジェストで、A誌はB誌より1ヶ月遅れで詳細記事を、C誌はA誌より3ヶ月遅れで入門記事を扱っている
- そのためC誌→B誌→A誌の順番で同じ話題を読むのがわかりやすい
- (1)で抜き出した10冊を、新しい話題から先に、わかりやすく読めるように並べ替えよ
条件
- シャッフルや並べ替えには、APIやライブラリ、言語機能などを使ってもよい。
- むしろ、あたえられた環境はフル活用
- 並べ替えの回数が少ないほどエライ
*1:サッカーを詳しく知ってるわけじゃないので、例にだせるのは超有名人
2005-08-19(金)
masataka_k
西さんは、一台3000万円なら出しても、1800台x2万円は出さないとおもふ。いや、チップ製造がYAMAHAだったら出すかな。。。
nowokay
そしたらG社でバーンと1000台くらい一括購入で!
何に使えるかは不明ですけどね。(^^
2005-08-18(木)
■[プログラム]フィジカルの練習問題(易)

やっぱり3目並べは難しめなので、ちょっと簡単な問題を。
- x,yの2つの整数が与えられるとする。ここでx >= yとする
- 「o」という文字をy行x列表示せよ
- ただし対角線部分は「x」を表示する
で、この問題をちょっと難しくする条件。というか方法を知ってるか知らないか。
- 掛け算割り算を使わない。
- 足し算引き算の演算回数の合計はxの3倍以内とする
- 演算回数にはforループでのカウンター加算は含めない
koichik
(易) で 3×2 の場合はどう表示するの?
nowokay
あ、
xxx
xxx
になっちゃいますねぇ。「左上から右下への対角線」という条件加えましょうか。
x,yも自然数としたほうがいいですね。
のんべ
全員が渡れりゃいいのかな?
渡った後はどうなっても可?
nowokay
全員向こうに渡りきればOKっすよ。
あとの彼らの生活については関知しません。そんな家族構成で幸せに生活できるのかと。
のんべ
全員渡りきるけど、最後に渡った人とメイドと犬しか残らない
メイドと誰を残すと幸せか?って、そりゃ問題の趣旨が違うか。
nowokay
そか、向こう岸で食べられてしまうのはOKかってことですね。
それはそれで最短の手を求めようとすると問題むずかしくなるのでなかなかいいかもしれません。
nowokay
あ、メイドに全員渡らせればいいだけか。
向こう岸で食べられていいけど「息子が2人揃って母がいないとき、娘が2人揃って父がいないときは、メイドは食べられてしまう。向こう岸で犬が一匹取り残されると死んでしまう」とか条件がつけばいいのかな?
- http://d.hatena.ne.jp/taka_2/20050818
- [開発]フィジカルの練習問題(易) (きしだのはてな)
- http://d.hatena.ne.jp/kikaineko/20050818
- http://d.hatena.ne.jp/egap/20050819
- [開発]フィジカルの練習問題(難) (きしだのはてな)
- http://d.hatena.ne.jp/swat/20050819
- http://d.hatena.ne.jp/koichik/20050819
- http://d.hatena.ne.jp/koichik/20050821
- http://d.hatena.ne.jp/teabreaks/20050823
- [java]フィジカルの練習問題(易)
- 小船の問題
- http://d.hatena.ne.jp/ysakata/20050827


怖さがあるんですよね。MS-Accessがまさにそれだけど。
きっちり線引きしてあれば使える方法だと思います。
> 区分テーブルに処理
オブ厨の僕としては、コマンドオブジェクトを項目にXtream等使ってシリアライズして突っ込む、という超荒業も考えてしまいました。(やりすぎ)
やっぱ人の名前覚えるのは、飲み会のために大切です。
JavaScriptなら問題ナシ(・∀・) > プレーンテキスト