2009/01 | 2009/02 | 2009/03
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

2009年2月 1日

このサイトはコンピュータに損害を与える可能性が

Googleの全検索結果に「このサイトはコンピュータに損害を与える可能性」,人為的ミスで(ref. ITPro)

めちゃ巻き込まれてました。

一瞬何が起こったのかさっぱり分からんかったけど、サイト管理データベースにルート("/")が入ったのか…。意外にも、Googleのアキレス腱の1つが露呈した形に。

▲top

投稿者 ただ : 23:48 | トラックバック (0) カテゴリー ; News

2009年2月 2日

画面設計、やめたらどうなる

最近の話題より。

「画面をどう実現するかを考えて要件分析する」というのは本末転倒。だけど、最初に画面を固めるとそうなりやすいし、結果として工数増加につながるよ、というのを言いたかったのですよ。 *1

Agile派の意見として、masayangさんがいろいろ書かれているのを読んで、何回も読み返してみたんやけどなんか引っかかると言うか、違和感があって…なんでかなぁと思ってたら、

Flex Builderを使うことで、いろいろなデザインがすぐに作れてしまい、また見栄えもよい。すると「いつでも変えられるから」「良い物がすぐにできるから」という理由で要求仕様のハードルが高くなったり、延々と仕様変更が出るなどして、プロジェクト遅延が発生しやすくなってしまう。これは画面仕様が未確定なプロジェクトによくあるという。*2

そう、画面を後から考える、というかフレキシブルに考えようとすると、こういうことになるんだよ。これが、結局はウォーターフォール型であってもAgileであっても、行きつく先としては同じなんじゃなかろうかと。見せれば見せるほど、ユーザーの意識も画面に向くのでなおのこと画面に対する要求は増えるやろうし。だから、画面はある程度決めておかなければいつまで経っても終わらない、なんてことになりやすいんではないかと。「ゴールがなくなった」案件って、発注側にも受注側にも辛いと思うし、やっぱりどこかで妥協する必要があると思われ。

WFだと、開発の後工程にならないと『現行(じゃない)物理モデル(B)』の問題点はだれも指摘できない。だって、それは発注側担当者の妄想の中にしか存在しないから。*3

おそらく、これが一番危険な罠なんだろうな…画面設計以前に。システム開発を何回やかって、慣れてるユーザー企業とかならともかく、初めて発注します、とかで結構規模が大きかったりとかすると悲惨ですよ、まさに。現行の物理モデルもなければ理想とするモデルも規定できないんやから。おまけに現行も理解してないのに理想を言うから余計にイメージが湧かない、作ったものと希望するものが一致しない。

で、コンサルが入ると余計な画面設計書が…というのが*1なんだろうか? 画面設計書なんて要らないと思えばそう発注側に説明すればいいと思うんですが。そうはいかないんでしょうか。ユーザーによって注目するところはまちまちです、それが画面だったり、データ構造だったり。

▲top

投稿者 ただ : 21:50 | トラックバック (0) カテゴリー ; 仕事関係

2009年2月 6日

やっぱり見積は追い着いてないよな

じゃあ見積りもアジャイルでやりましょう!(ref. CNET Japan)

ここを見る限り、Agileの開発においても、開発手法が小刻みの反復になっただけで見積枠はそのままなんだよな…。ユーザー企業にとっても、予算が無尽蔵にあるならやりましょうやりましょうになるけど、結果的には仕事を「いただいている」ベンダー側にとっては利益を削ってでもやることになるわけで…Win-Winなんてうまくいってるのって、少ない方に分類されるんとちゃうか?

アジャイルプロセス協議会なんてのがあるらしい。けど、ほとんどアウトプットがない…企業単位で会員募集してる上に、会員規約見たら「守秘義務条項」がついてた。せめて個人単位で参加できるように規約見直しては。

ジュンクで立ち読みしてたら、「閉店です」って声かけられた。

▲top

投稿者 ただ : 22:24 | トラックバック (0) カテゴリー ; 仕事関係

2009年2月 8日

20世紀少年 第2章

やっぱり、いつもどおりレイトショーで。

1週間くらい前にテレビでやってた第1章を見たので、観てみるかぁ…と思って観に行ったんですが。うーん。内容は濃かったのか薄かったのか、よう分からんかった。第1章もところどころ端折って、できるだけ流れが滞らないようなつくりになってるんやなぁ、と思ってたから、第2章もそんなんなんやろうなとは思ったけど。

なんか、ぴょんぴょん飛んでるって感じやった。

平愛梨さんいいわー。

▲top

投稿者 ただ : 23:41 | トラックバック (0) カテゴリー ; お出かけ

2009年2月 9日

勉強会とライブラリ

勉強会って開くと助成金がでるんや、いいこと知った。…けど、今の状態じゃ勉強会なんて開こうにも開けそうにないな。

それより、気になったのがこっちやったりして。

経営者が自社ライブラリの開発に予算を割きたくない理由(ref. 売り切れました)

うん…まぁ分からんことはない。というか、仕方ないな、というのは分かったけど、ほんまにどうにもならんのかな…。資産とかの管理がややこしくなるからやりたくないんやろうな。そもそも、ライブラリって資産になるのか? (情報資産であることはもちろん分かってる、会計上の資産ってこと)

なんてーか、ライブラリを拡充すれば、手間が減って仕事の効率がよくなるやん、ってのは誰もが思うところやけど、現実問題として、それが難しいというのが上から導き出される主張なわけで、A社からの受託案件でライブラリ化できるところがあったとして、それをB社の案件に流用しようとしたとき「どう明細に載せるねん=B社に説明すんねん」ということのようなんよね。

…だから「ライブラリとして別個に予算を立てる」…となると資産がどうの、という話に(たぶん)なる。あぁ…こんがらかる。

そんでもって、余計に話を難しくさせるのが人月ベースの工数見積というのがあるわけで、ライブラリを使って工数を減らそうとすると、その分売上が減る…そりゃライブラリなんて要らん、ってなるわな。

▲top

投稿者 ただ : 22:22 | トラックバック (0) カテゴリー ; 仕事関係

2009年2月14日

大雨の中必死に走った

マニュアル作成がなかなか終わらず、できたと思って上長に送ったのが夜も23時をとっくに過ぎた後。

…さらに気がつけば23時30分を回っているではないか。おまけに雨降ってるし。

雨が降ってなかったら時間の計算も余裕でできるけど、この雨のお陰で終電間に合うか分からん。雨降って風も強いのに、そんな中必死に走った。なんとか終電には間に合ったけど、思ったより早く着いてどっと疲れた。なんか、風邪に潮気が混じってたのかやけに潮臭かった(自分の濡れた髪とか)。

▲top

投稿者 ただ : 00:49 | トラックバック (0) カテゴリー ; 仕事関係

2009年2月16日

春が来たと思ったら雪が来た

昨日は春の陽気やった(所によっては夏日とか、有り得ん)のに、今日帰ってるときには雪が降ってきたぞおい。どうなってんだ。

ああやっと、難局を乗り切った。あとは平穏に事が済むのを待つのみです。初めてRAIDの構成をまともに設定した。めっちゃドキドキした…。おまけにHDD抜いたり挿したり。

明日からはまた別の作業の残りを片付けねば…。

▲top

投稿者 ただ : 22:54 | トラックバック (0) カテゴリー ; 仕事関係

2009年2月20日

acts_as_taggable_on_steroids X will_paginate

今は、もう、動かない、そのこーまんどー。というか、もうwill_paginateはプラグインではないらしいんですが。ええ、つまり script/plugin install ... が。

gem版ではなくプラグインでのwill_paginateなので古いんですが、こいつとacts_as_taggable_on_steroidsを組み合わせて使おうとすると、Model.tag_listで止まる…。という現象に会社でRubyの復習をしてたときに遭遇。

vendor/plugins/will_paginate/lib/will_paginate/finder.rb:92:in `method_missing_without_paginate'
vendor/plugins/will_paginate/lib/will_paginate/finder.rb:93:in `method_missing'
vendor/plugins/acts_as_taggable_on_steroids/lib/acts_as_taggable.rb:155:in `tag_list'
app/views/b/list.rhtml:7:in `_run_erb_47app47views47b47list46rhtml'
app/views/b/list.rhtml:5:in `each'
app/views/b/list.rhtml:5:in `_run_erb_47app47views47b47list46rhtml'
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:338:in `send'
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/base.rb:338:in `execute'
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template_handlers/compilable.rb:29:in `send'
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/template_handlers/compilable.rb:29:in `render'

script/consoleで確認してみたら、tag_listを保存(Model.save)するときにもエラーが起こる。

SystemStackError (stack level too deep):
/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:93:in `method_missing_without_paginate'
/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:93:in `method_missing'
/vendor/plugins/acts_as_taggable_on_steroids/lib/acts_as_taggable.rb:173:in `save_tags'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:173:in `send'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/callbacks.rb:173:in `evaluate_method'

うーん。意味が分からん。なんでmethod_missing_without_paginateなんや。method_missing_without_paginateなんて関数宣言されてないし…とか探してたら、Railsじゃ関数のオーバーライドをするときにalias_method_chain(ref. The Kumagmatic Kumagrammers)を使うとwith_xxxとwithout_xxxが作られるのか。method_missing_without_paginateはVB.net風に言えばMyBase.method_missing()でmethod_missing_with_paginateはMyClass.method_missing()か。まあ自分で処理できんかったらMyBaseで処理するわな、確かに。

/vendor/plugins/will_paginate/lib/will_paginate/finder.rb

      def method_missing_with_paginate(method, *args, &block)
        # did somebody tried to paginate? if not, let them be
        unless method.to_s.index('paginate') == 0
          return method_missing_without_paginate(method, *args, &block)
        end
      ...(続く)

とりあえず、method_missing_without_paginateを呼び出す前のところにデバッグコード入れたら、mapがないってたくさんmap map map 吐き出したから。なんでやろーとさらに悩み続けて、ActiveRecordは普通に中身吐かせたら[]で出てくるのにArrayじゃないんやな、なんと紛らわしい。

/vendor/plugins/acts_as_taggable_on_steroids/lib/acts_as_taggable.rb

      def tag_list
        return @tag_list if @tag_list

        if self.class.caching_tag_list? and !(cached_value = send(self.class.cached_tag_list_column_name)).nil?
          @tag_list = TagList.from(cached_value)
        else
          tags2 = self.tags.find(:all)
          @tag_list = TagList.new(*tags2.map(&:name))

        end
      end

      def save_tags
        return unless @tag_list

        tags2 = self.tags.find(:all)
        new_tag_names = @tag_list - tags2.map(&:name)
        old_tags = tags2.reject { |tag| @tag_list.include?(tag.name) }

        self.class.transaction do
          if old_tags.any?
            taggings.find(:all, :conditions => ["tag_id IN (?)", old_tags.map(&:id)]).each(&:destroy)
            taggings.reset
          end

          new_tag_names.each do |new_tag_name|
            tags << Tag.find_or_create_with_like_by_name(new_tag_name)
          end
        end

        true
      end

というわけで、明示的にtag.find(:all)として配列にしてやった。…にしても、なんでpaginateと組み合わせるとうまくいかんのやろ、暗黙の型変換(?)がうまく機能しない様子。いわゆるプラグイン同士の相性というか、食べ合わせの問題? Railsみたいに人気になると、こういうこともあるのね。Rubyの設計思想も何か影響あるのかしらん。

▲top

投稿者 ただ : 19:19 | トラックバック (0) カテゴリー ; PinMarch Samples , プログラミング単語帳 , プログラミングとか

2009年2月23日

足の感覚がなくなった

母方の法事に引っ張られていきました。

読経の間の正座がこれほどまでに辛くなったとは、我ながら驚きです。

大学時代の体育で、ひざの筋肉を伸ばす運動をしていたときは全然余裕だったのに…ああ時が経つとは恐ろしいですね。

しかも、正座をしている間に血が通いにくくなっていくのが感覚として分かると言うか、これは足伸ばしたら確実に痺れるなというのが分かるからなおのことこれからの処理に困ると言うか…どうしましょうって感じですね。最終的には足の先が冷たくなってるのが分かります。

よく、正座をした後に足を触ると跳ね上がる、なんてのがありますが、それを通り越してました。触っても動かないですね、足が痺れるまでは。さらに言えば、動かせないです。

…多分もっとうまい正座のやり方(姿勢の問題)があるんだろうな。

▲top

投稿者 ただ : 23:36 | トラックバック (0) カテゴリー ; お出かけ

2009年2月24日

DAVのRails実装を試した

先日のプラグインのインストール方法をメモっておきます。

$ script/plugin install acts_as_taggable_on_steroids
# gem install will_paginate

やっぱりプラグインのインストールがどうにも手間な気が。script/pluginコマンドでのインストールは各プロジェクトにファイルが残るから容量の無駄っぽく見えるけど、結局のところWindowsでも同じような形でDLL Hellを解消させることになってしもたんやから、何が何でもgemっていうのもなぁ。gemとscript/pluginで揺れ動いてるのは分からんでもないけど(必要なプラグインはgemから自動的にダウンロードさせるような仕組みを作ってあるけど、そうするように自分でコードを組まんとあかん)。やっぱり、script/pluginのほうが開発者にとっても利用者にとってもシンプルで分かりやすいんとちゃうかなぁ。

あと、will_paginateのscript/pluginでのインストールは今もいけるけど、レポジトリがsvnではなくgitになってしまってる。gitは最近の流行のようで、svnから乗り換える人もこれから増えるんやろうね。でも、gitクライアントをわざわざ導入せなあかんのよね…使おうと思ったら。どうにかならんもんでしょうか。

そんで、DAVについていろいろ見てたらRailsでDAVをするプラグインを見つけてしまったので試してみることに。WebDAVは、簡単に書けばFTPやらSFTPを使わなくても、HTTP(S)のポートだけを使ってファイルのやり取りができるようになる仕組み(WindowsではWebフォルダ)なんやけども、ApacheのDAVをそのまま使うとユーザーがapacheになってしまうからどうしようかなぁと思ってたんよね。でもRailsで実装してるのがあれば、読み書きするファイルの所有者はRailsを動かしてるユーザーになるからファイルの管理がFTP並みに楽になる。HTTPなので認証を通して処理を振り分けるなんてことも簡単になる。これだからやっぱりDAVは面白そう(けどそこから先のアイデアがなかなか出てこん)。

$ script/plugin install http://svn.liverail.net/svn/plugins/railsdav
# gem install unicode mime-types

日本語が使えない、って書いてあったけど、無理やり使えるようにした。…直接開いたら化けるけど、ダウンロードとアップロードに日本語は使える。なんでiconvで'latin-1'→'utf-8'なんてことをしてるんやろう? そりゃ日本語使えんでしょう(WinXPのWebフォルダでのファイル名のやり取りはutf-8みたいやねんけど、昔のプログラムじゃCP932とかあるから困りもの)。Ruby以外じゃ文字コード判定のプログラムがいくつか出てるのに、Rubyじゃあんまりそんな情報ないな…なんでやろう。

Apacheモジュールでのmod_dav+mod_encodingが意味なさないから日本語対応は独力でしないとあかんのが苦しい。自分で実装しようと思ったならCGI実装になるやろうけど、CGIで遅い処理がモジュールになってるんでは…と思うとなんか実装して使えるんやろうかという思いにもなる。今回mongrel+railsdavという一種のCGI実装っぽい実装を試して速度的にそれほど気にならないってのが分かった。日本語処理がちょっとネックになるけど。

▲top

投稿者 ただ : 23:19 | トラックバック (0) カテゴリー ; プログラミングとか

2009/01 | 2009/02 | 2009/03