メッセージ。 - diary

2006-03-22

# SIベンダーはゼネコンです

 
 効率のいいプログラムを書いたほうが
 支払われる開発費が少ないなんてこんなプログラマを
 バカにしたようなことを平気でやる企業があるなんて異常だと思います。

この問題の本質は、プログラマの給与を見ても分かります。プログラマの給与形態は、たいてい基本給+残業代です。つまり、「労働時間と生産性の間に正比例の関係がある」という考え方です。また、たいていの企業では、できるプログラマとできないプログラマの間に大きな給与格差がないですが、同じ考え方に基づいています。「できるプログラマとできないプログラマの間で、生産性には大きな開きがない」と。

要は、ソフトウェアベンダーが、ソフトウェアを部品の1つとしか考えておらず、プログラマをライン工としか考えていないということです。ぼくは電機メーカー系のSEをやっていたのでとくにそう思うのかもしれませんが、日本のソフトウェア業界は、旧来の重厚長大産業の論理でビジネスをやっているところが多いのではないかと考えています。そしてそれは、給与やものづくりの仕方だけではなくて、ゼネコンのような多重下請け構造にもつながっているだろうと。
2006-03-22 19:43:26 / ふじさわ / Comment: 0 / Trackback: 0

# 働くことと暮らすこと

 とは、居場所、なのではないだろうか。

 労働組合は「既に雇われている人たち」の組織だから、その人たちの利益になることをまず追求するのは当然といえば当然だが、春闘とやらで気勢を上げる前に、もう少し社会的公正ってやつに気を配ってはもらえないか。「弱者の見方」を自称するなら、賃上げよりもまず雇用機会の拡大をめざすべきではないか。

  新規採用者は現在の組合員ではないので、新規採用ストップに反対する組合員はだれもいないのではないか。正規社員を採用するために賃金カットを受け入れ てくれと組合員を説得することはなかなか難しいことだろう。結局、どの企業でも(B案)の採用抑制とパートへの置き換えによる人件費カットを選ぶことになる。
 
  しかし、企業にとって望ましいのは、賃金カットをして正社員の新規採用を続けることである。

 今週のエコノミスト誌には、「娘、息子の悲惨な職場」というタイトルが出ています。このシリーズも4回目ですから、反響が大きいのでしょう。30歳前後の厳しい雇用の現実が描かれている。いまは、正社員として働こうと思えば、長いサービス残業などに耐えなくてはならず、かといって働いた時間どおりの賃金を受けたいと思えば、フリーターやアルバイターという立場に甘んじなければならない人が多いんですね。この厳しさの原因は、何か?

こういう意見を言ってくれる人がいるのはうれしい。
ぼくなんかが付け加えて言えることはないけど、個人的には、いまよりもっとお年寄にインセンティブがあればいいなぁと考えている。お金じゃなくて、小飼さんの言う居場所みたいなものが。

彼らにだってできることがあるし、彼らにしかできないことがある。いまの日本の社会は、お年寄の価値を単に捨ててしまっている。それはとても非合理的なことだし、悲しいことだと思う。お年寄だって、働きたいはず。なにかの役に立っていると実感したいはずだ。
2006-03-22 08:17:25 / ふじさわ / Comment: 0 / Trackback: 0

2006-03-21

# OSC2006に参加した感想をちょろっと

OSC2006に参加した感想をちょろっと書こうかなっと。結論から言うと、予想以上に面白かったですよ。行ってみるまでは不安でしたけどね。「お客さん来てくれるかな?」とか「楽しんでもらうべき核たる内容はなんだろう?」とか。

でも、実際その場に行ってみると杞憂で。個人的には、Wiki世界の外にいる人と直接話せたのが大きかったですね。Wikiばなに参加するほどではないけど、キーワードとしては知っているぐらいの人。そういう人たちから生の声を聞けたのは大きいかなと思うんですよね。雑談ばっかりしてたので、具体的な成果があるわけじゃないですけど。

たとえば、「会社でWikiを使いたいけど、パソコンにソフトウェアをインストールするのは禁止されている」という人がいました。「どうすればいいですか?」と言われて、「あーなるほどねー。あーするのはどうだろう、こんな手は使えないかな」と話すのは結構楽しかったです。いままで気づいていなかった需要を見たような気がして。

あとは、「趣味でホームページを作りはじめたところなんですけど……」というご婦人とも会話しました。「Wikiっていうのは誰でも編集できるWebサイトツールです。掲示板を設置する感覚で使えます」みたいな感じで説明してね。「そういう説明で分かってもらえるか? 興味を持ってもらえるか?」というのは、やっぱりやってみないと分からないので有意義でした。普段そういう方とお会いすることはあまりないので。

ほかにも、けっこういろんな人が見ていってくださいました。ブースの前に座って雑談・立ち読みなんて、お客さんに訴求するか不安だったんですが、それを覆す感触を得られました。また、少しではありますが、Wikiばなのことを知ってもらえたと思います。「お話しできて良かったです」と言ってくださる人もいて、Wikiばならしい、手作りと雑談の良さを確認できるものになったと思います。もちろん、反省と改善をすべきところは、まだまだあるでしょうけどね。
2006-03-21 18:34:56 / ふじさわ / Comment: 0 / Trackback: 0

# 本当にとりとめのない話

昨日はインドカレー屋さんでカレーを食べたよ。すごく慣れなれしい店員さんがいて面白いお店。「ピッピッピッのピッと。4000円いただいてもよろしいですかたまには?」。「たまには?」。息をするように冗談を言われて、こちらは咄嗟に返事を返せない。インドの人なんだけど、すごいね。日本語が上手なだけじゃない。人間として懐の深さを感じさせられる。

それでね。そのお店でインドの音楽DVDみたいなのが流れてて、ちょっと感じるところがあったんだ。どうもインド人はダンスが好きみたいで、そのDVDもダンスミュージックのようだった。若い男の人と女の人が、さまざまなシチュエーションで歌っていく構成。ストーリー仕立てになっていて、ちょうどカラオケのバックで流れる映像みたいな感じと言ったらいいかな?

そのなかの1シーン。若い男女が田舎道をバスに揺られたり、畑の脇道を歩いたりしながら旅をしているみたいだった。その旅の間中、二人でずっと歌っていて、なんとも楽しそう。バスの乗客や畑で働く娘さんたちも効果的に使われていてほのぼのムードなんだよね。ぼくは流行り音楽やダンスが苦手なほうだけど、そのDVDはけっこう楽しめた。それでね、思ったんだ。日本の映像とはちょっと違うなって。

日本の映像には、あんな風に農作業をする娘さんが出てこない。バスに揺られる田舎道の乗客たちが、音楽のバックで使われるのもあまり見ない。日本の映像は、生活というものを肯定的に描いていない気がした。テレビドラマも、ニュースも、CMも、ただひたすら無機質な素材ばかり使っていて、生活の存在が感じられないように思う。漁師さんとか、農家の人とか、いまでも日本にいるのかなぁと、ぼくなんかは考えてしまう。

毎日食べるご飯は、どこかで誰かが作ってるはずなのに、そういうものがさっぱり分からない。ご飯だけじゃなくて、身の周りのいろんなもの、いろんな人の暮らしがまったくぼくには想像できない。それがなんか、つまらないなぁと。たとえばぼくと同い年ぐらいの人が、農家として野菜を作ってたり、田舎のサラリーマンをやってたり、政治家の卵や工場の工員として働いてたりするはずで。彼らはぼくだったかもしれないし、ぼくは彼らだったかもしれない。

なんとなく、そういう彼らの暮らしを知りたい。自分が今暮らすところだけじゃなくて、誰かが暮らす土地にも何かがあると知りたい。生活というものは、もっと肯定的に捉えられるような気がする。そしてそれらはいま、路傍の石として放っておかれているような気がする。
2006-03-21 17:32:51 / ふじさわ / Comment: 8 / Trackback: 0

# ものづくりと生活

 
 褒められることを目的にしている者はartistではないのだ

小飼さんとは気が合わないときも多いのだけど、これは同感だなぁ(まったくの蛇足だけど、小飼さんのブログは、「Dan the ○○」というやつが自意識、褒められ目的を感じさせるのであまり楽しめない。この結句はないほうがいいんじゃないだろうか……。<余計なお世話)。shiroさんのコメントも、考えさせられるものがあったのでメモ。

 「芸術は、ちょうど毎日の食べものと同じように、人間の生命にとって欠くことのできない、絶対的な必要物、むしろ生きることそのものだと思います。しかし、なにかそうでないように扱われている。そこに現代的な錯誤、ゆがみがあり、そこから今日の生活の空しさ、そしてそれをまた反映した今日の芸術の空虚も出てくるのです。」 (岡本太郎、「今日の芸術」、1954)
 
 50年以上経ってもなお、芸術と生活の解離、あるいは文化の生産者と消費者の解離は縮まらないどころか大きくなっているようです。表現の専門家が創ったものをそうでない者が消費するという構図にあまりに慣らされてしまったために、せっかくネットという表現媒体を手にしても、消費されることを目的としてしか表現できなくなってしまった人も多いように見受けられます。
2006-03-21 16:21:45 / ふじさわ / Comment: 1 / Trackback: 0

2006-03-19

# Momokaのソースコード、お見せするの恥ずかしいですけど

昨日、hirofummyさんが興味を示してくださったので、現状のMomokaのソースコードを公開します。http://nnri.dip.jp/~yf/source/Momoka-0.36.tar.gzhttp://nnri.dip.jp/~yf/source/Momoka-0.35.tar.gz(えーと。まともそうなほうを持ってってくださいm(_ _)m)

一応動くコードなんですが、データがない状態ではテストしてないので、たぶんまだインストールしてもうまく動かないです。コード眺め用ということで、お願いします。あと、main関数に近いところを中心に、コードが汚ないのもご容赦を。動きがありそうなところは、あとでリファクタリングするつもりでした。

パーサ部分はこんな感じです。けっこう手抜きです。

(define-module momoka.kcdp3
  (use srfi-13)  ;; string-prefix?
  (use text.html-lite)
  (export text->kcdp kcdp->html kcdp->text kcdp->t))

(select-module momoka.kcdp3)

(define (with-lines lines proc)
  (string-join (map proc lines) ""))

(define (div istring divider)
  (map (lambda (e) (string-trim-both e)) (string-split istring divider)))

(define (getlines lines pattern)
  (let1 plen (string-length pattern)
    (let loop ((lines lines) (out '()))
      (if (null? lines)
          (values (reverse out) lines)
          (if (string-prefix? pattern (car lines))
              (loop (cdr lines) (cons (string-drop (car lines) plen) out))
              (values (reverse out) lines))))))

(define (text->kcdp istring)
  (let loop ((lines (string-split istring "\n"))
             (out   '()))
    (if (null? lines)
        (reverse out)
        (let1 line1 (car lines)
          (cond ((string-prefix? "*" line1)
                 (loop (cdr lines)
                       (cons (cons 'caption (string-drop line1 1)) out)))
                ((string-prefix? "-" line1)
                 (receive (lis remain) (getlines lines "-")
                   (loop remain
                         (cons (cons 'list lis) out))))
                ((string-prefix? ">" line1)
                 (receive (lis remain) (getlines lines ">")
                   (loop remain
                         (cons (cons 'quote lis) out))))
                ((string-prefix? "|" line1)
                 (receive (lis remain) (getlines lines "|")
                   (loop remain
                         (cons (cons 'table
                                     (cons "|"
                                           (map (lambda (e) (div e "|")) lis)))
                               out))))
                ((string-prefix? "," line1)
                 (receive (lis remain) (getlines lines ",")
                   (loop remain
                         (cons (cons 'table
                                     (cons ","
                                           (map (lambda (e) (div e ",")) lis)))
                               out))))
                (else (loop (cdr lines) (cons (cons 'plain line1) out))))))))

;; (define ecapt (lambda (e) #`"*,|e|"))
;; (define equot (lambda (e) #`">,|e|"))
;; (define elist (lambda (e)
;;                  (with-lines e (lambda (f) #`",|f|\n"))))
;; (define eelse values)

(define (pp-table obj)
  (define (add-pad istring len)
    (string-append istring (make-string (- len (string-size istring)) #\ )))
  (let* ((div  (car obj))
         (body (cdr obj)))
    (let1 nums
        (let loop ((body body) (nums '()))
          (if (null? body)
              nums
              (loop (cdr body)
                    (let l2 ((record (car body)) (nums nums) (out '()))
                      (cond ((null? record)
                             (reverse (append (reverse nums) out)))
                            ((null? nums)
                             (l2 (cdr record)
                                 nums
                                 (cons (string-size (car record)) out)))
                            (else
                             (l2 (cdr record)
                                 (cdr nums)
                                 (cons (max (string-size (car record))
                                            (car nums))
                                       out))))))))
      (string-join
       (map (lambda (r)
              (string-append
               #`",|div| "
               (string-join
                (let loop ((b r) (nums nums) (out '()))
                  (if (null? b)
                      (reverse out)
                      (loop (cdr b)
                            (cdr nums)
                            (cons (add-pad (car b) (car nums)) out))))
                #`" ,|div| ")))
            body)
       "\n"))))

(define (kcdp->t kcdp . opts)
  (let-keywords* opts ((ecapt :capt  (lambda (e) #`"*,|e|"))
                       (equot :quote (lambda (e)
                                       (with-lines e
                                                   (lambda (f) #`">,|f|"))))
                       (elist :list  (lambda (e)
                                       (with-lines e
                                                   (lambda (f) #`"-,|f|\n"))))
                       (etabl :table (lambda (e) (pp-table e)))
                       (eelse  :else  values))
    (string-join
     (let loop ((kcdp kcdp) (out '()))
       (if (null? kcdp)
           (reverse out)
           (let1 kcdpe (car kcdp)
             (cond ((equal? (car kcdpe) 'caption)
                    (loop (cdr kcdp) (cons (ecapt (cdr kcdpe)) out)))
                   ((equal? (car kcdpe) 'list)
                    (loop (cdr kcdp) (cons (elist (cdr kcdpe)) out)))
                   ((equal? (car kcdpe) 'quote)
                    (loop (cdr kcdp) (cons (equot (cdr kcdpe)) out)))
                   ((equal? (car kcdpe) 'table)
                    (loop (cdr kcdp) (cons (etabl (cdr kcdpe)) out)))
                   (else (loop (cdr kcdp) (cons (eelse (cdr kcdpe)) out)))))))
     "\n")))

(define (kcdp->html kcdp linep)
  (kcdp->t kcdp
           :capt  (lambda (e)
                    (format #f "<h3><span class=\"title\">*~a</span></h3>"
                            (linep e)))
           :list  (lambda (e)
                    (format #f "<ul>~a</ul>"
                            (string-join
                             (map (lambda (f) #`"<li>,(linep f)</li>") e)
                             "\n")))
           :quote (lambda (e)
                    (format #f "<blockquote class=\"quote\">~a</blockquote>"
                            (string-join
                             (map (lambda (f)
                                    #`">,(linep f)") e)
                             "<br />\n")))
           :table (lambda (e)
                    (format
                     #f "<table class=\"wiki-table\">~a</table>"
                     (string-join
                      (cons
                       (format #f "<tr class=\"wiki-tr\">~a</tr>\n"
                               (string-join
                                (map (lambda (f) #`"<th class=\"wiki-th\">,(linep f)</th>")
                                     (cadr e))
                                ""))
                       (map (lambda (line)
                              (format
                               #f "<tr class=\"wiki-tr\">~a</tr>\n"
                               (string-join
                                (map (lambda (f) #`"<td class=\"wiki-td\">,(linep f)</td>")
                                     line)
                                "")))
                            (cddr e)))
                      "")))
           :else  (lambda (e) (format #f "~a<br />" (linep e)))))

(define (kcdp->text kcdp linep)
  (kcdp->t kcdp))

(provide "momoka/kcdp3")
2006-03-19 09:53:50 / ふじさわ / Comment: 1 / Trackback: 0

2006-03-18

# ディレクトリとハイパーリンク

今日はOSC2006に行ってきました。いろんな人とお話しできて楽しかったです。
それで、帰りの電車の中で、shinoさんhirofummyさんと話していたのですが、予想外に面白がってくれたディレクトリとハイパーリンクの話を書いてみます。

たとえばWikiエンジンを作っていると、データ構造をどうしようといつも考えます。Wikiなのだから、ページタイトルとページ本文を対にした構造が基本です。「ラルク アン シエル」といったタイトルと「1996年に結成されたロックバンド」といった本文を、対にして保存するわけです。

しかし、「ラルク アン シエル」の説明は、必ずしも「1996年に結成されたロックバンド」と一意に決まるわけではありません。たとえば最近では、メンバーの一人であるハイドの身長がどうの、という話題でWikipediaの編集合戦が発生しました。つまり、誰かが思う「ラルク アン シエル」と、別の人が思う「ラルク アン シエル」は違うわけです。

これは、いろんなものごとに対して当てはまります。たとえば「ビール」は、ある人にとって「すごくおいしい飲み物」ですが、別の人からは「ただの苦い飲み物」です。また別の人から見れば、「当社の主力商品」かもしれません。

なにごとにもいろんな側面があって、見る人や立場が違えば意味が違うわけです。Wikiでもこういったブレを包含できたら、あるいは「ものごとの側面」という情報を利用できればなぁと思います。ちょっと前に、はてなの近藤さんが個人レベルでは「人々の意見は全て正しい」と書いていましたが、こういう感じ。みんなの意見を包含できるシステムにしたい。

そうしたとき、側面という情報が大事だと思うんですよね。どんなものごとも、たくさんの側面を持ちます。ある側面から見たときと、別の側面から見たときで結果が違うのは自然なことです。Wikiのデータ構造にも、この「側面」という情報を持たせたい。「○○さん」から見たときの「ラルク アン シエル」は「1996年に結成されたロックバンド」という感じです。

それで、まぁ少し端折るんですけど、ハイパーリンクはまさにこういう感じだと思うんです。さっき挙げた近藤さんの日記へのリンクで言うと、「このページ」から評価すると、「http://d.hatena.ne.jp/jkondo/20060312/1142098012というリンク先にある文章」は、『個人レベルでは「人々の意見は全て正しい」』として評価(意味を切り取り)できるわけです。

別の言い方をすると、「主語、述語、目的語」で物事を表現するということです。単なるWikiは、述語と目的語しかなかった。主語がなくて、一般化されたものを述語として書くべきとされたわけです。百科事典のようなサイトを作るのにWikiが適しているのはこういう理由です。匿名というのも同じベクトルです。逆にハイパーリンクは、「あるページ」(主語)から、「別のページ」(目的語)を、「リンクアンカーのテキスト」(述語)を用いて表現していく仕組みです。

考えをさらに一歩進めます。ぼくはWebやハイパーリンクを、「すごいなぁ。大ブレークしたし面白いなぁ」と思います。なんでかなぁと考えるわけですよね。ハイパーリンク以前と以降で何が違うのか、ハイパーリンク以前は何があったのか。ハイパーリンクではないものとして、何があるのか。

とりあえず思い付くのは、ディレクトリなんです。ディレクトリは、述語と目的語でものごとを表現する仕組みですね。あるディレクトリにファイルがいくつかあって、それぞれのファイルが「なんのために」そこに存在するかは、表現できない。ディレクトリにはそれを表現する仕組みが備わっていません。

収集がつかなくなってきたので、とりあえずまとめます。
- 述語と目的語でなにかを表現する仕組み:ディレクトリ、従来のWiki
- 主語、述語、目的語でなにかを表現する仕組み:ハイパーリンク、ぼくが作りたいと思っていたWiki

YASWiki2ではこういうことをやろうとしていましたし、その前のYASWikiもこの問題を意識していました。Momokaのマーク機能もその延長線上にあります。桶さんがTumikiで実装している2つのキーでページを指定する機能も、たろうさんがProfListで実現している人と属性でなにかを表現する機能も、いろいろ狙っているでしょうけど、同じ問題を意識しているのだろうと考えています。

まぁ、単にこんなこと考えてますということで。なんの話からこんなことになったんでしたっけ?
2006-03-18 23:23:14 / ふじさわ / Comment: 1 / Trackback: 0

# 「防衛庁の公務PC、私物が半数、警察は4割」

ウィニー問題:防衛庁の公務PC、私物が半数、警察は4割−今日の話題:MSN毎日インタラクティブ

そりゃそうだろうなぁと思う。官公庁に限らず、こういうことはいろんなところで行われているはず。ただし、ぼくはそれが悪いとは思わない。公私は混ざるものと考えるからだ。警察官になる人は、警察官になりたいから、あるいはそこでやりたいことがあったからなったはず。それを消しさることはできない。単なる歯車として、部品として便利に使うことはできない。

業務効率を高めるため、コンピュータの勉強をする人がいる。経済を勉強する人がいる。新聞をとることだって、社会を学ぶ効果がある。それらに経費は支払われない。そうして身につく能力、知識は、個人に属するものだからだ。逆に企業や組織が、そういったことを学ばせようとしてもうまくいかない。組織は歯車や部品で成り立つのではない。

人間は工業製品でない。もっとやわらかくて、変わりやすくて、デリケートで、相性の問題を持つ、しかし潜在的なエネルギーを秘めた、文字どおり有機的なリソースだ。そこから何かの機能だけを取り出すことはできない。いろいろな機能とエネルギーを、混ざったまま扱わねばならないし、それでいいとぼくは思う。
2006-03-18 10:58:25 / ふじさわ / Comment: 0 / Trackback: 0

2006-03-17

# ぼくはじぶんのあたまがおかしくなったのかとおもいました

はてなブックマーク - ステータス200なのに「その商品はありません」

きょうぼくは、はてなブックマークをよんで、「これはおかしい」と思うぶんしょうをみつけました。それなのにみんなは、「さんこうになる」とか「べんきょうになる」とかいっていて、ぼくは「みんなどうしたんだ。目をさませ!」と思いました。

ぼくはじつは、はてなのあかうんとを持っているので、はてなブックマークはあまりつかったことがないけれども、それでも「みんな目をさませ!」とつたえたかったので、はてなブックマークをつかって「それはおかしいんじゃないの?」とかきました。

でもそれはうまくかけていないような気がしたので、やっぱりもともとの人のブログサイトに、コメントすることにしました。でも、コメントをしたつもりが、ブログにはかいたものが乗りませんでした。ぼくは心ぱいになって、じぶんのにっきページにおなじことをかきました。

でも、ぼくのいうことはだれもきいてくれませんでした。ぼくはじぶんのあたまがおかしくなったのかと思いました。そして、やっぱりじぶんがまちがっているのかと思いました。あした友だちのリカちゃんにあうので、じぶんがまちがっていないか、こいちじかんといつめるつもりです。
2006-03-17 22:14:47 / ふじさわ / Comment: 0 / Trackback: 0

# AA折れ線グラフ

OSS WEB|column|今日の一行|2006年3月

遅ればせながら、ぼくも解いてみました。ぜぇぜぇ。

(define (plot istring)
  (receive (nlist nlmax nlmin)
      (let loop ((cl (string->list istring)) (curr 0)
                 (cmax 0) (cmin 0)
                 (out '()))
        (if (null? cl)
            (values (reverse out) cmax cmin)
            (case (car cl)
              ((#\R) (loop (cdr cl) (+ curr 1)
                           (max cmax curr) (min cmin curr)
                           (cons (cons curr #\/) out)))
              ((#\F) (loop (cdr cl) (- curr 1)
                           (max cmax curr) (min cmin curr)
                           (cons (cons (- curr 1) #\\) out)))
              (else (loop (cdr cl) curr cmax cmin
                          (cons (cons curr #\_) out))))))
    (let yloop ((yaxis nlmax))
      (when (>= yaxis nlmin)
        (let xloop ((xaxis 0) (nlist nlist))
          (if (null? nlist)
              (begin (display "\n") (yloop (- yaxis 1)))
              (begin (display (if (= (car (car nlist)) yaxis)
                                  (cdr (car nlist))
                                  #\ ))
                     (xloop (+ xaxis 1) (cdr nlist)))))))))

力技が好きです。でも象さんのほうがもーっと好きです☆

TODO: リファレンスマニュアルのgauche.sequenceを読んでみること。
2006-03-17 22:00:36 / ふじさわ / Comment: 0 / Trackback: 0

# 商品がなくても200を返そう。そのかわりに……

ステータス200なのに「その商品はありません」

「商品がないときは404を返そう」という指摘。それは違うんじゃないの?とコメントを書きこんだつもりが(すぐには?)反映されなくて、手元にテキストも残ってなくて不安なのでここにメモ。

「商品がない」のと「ページがない」のは違う。たとえばWikiで、存在しないページにアクセスすると、200と編集画面が返ってくる。ここで404と編集画面を返すとおかしくなる。404と「Not Found」もだめ(まぁ議論の余地がありそうだけど)。HTTPのレイヤーでページがないのと、Wikiのレイヤーでページがないのは違うからだ。

これと同様に、Webアプリケーションのレイヤーで「商品がない」のとHTTPレイヤーで「ページがない」のは違う。たしかにこれは、システムの仕組みが分からない人には混乱のもとだ。だけど、エンジニアリング的には正しいはず。また、検索エンジンにしてみても、「商品がない」のと「ページがない」のは違うものと認識した設計をするのが本筋のはずだ。

Web設計者が本来やるべきことは、存在しない商品にできるだけリンクが貼られないようにするURL設計や、もし在庫切れ商品にアクセスされた場合には「その商品は売り切れです。次の入荷は……」、「在庫切れ、または絶版商品です。同様の商品をお探しの場合は……」といった表示を返すことじゃなかろうか。
2006-03-17 10:30:04 / ふじさわ / Comment: 11 / Trackback: 0
recent days<< | >>old days