3月末で完了予定だったクライアントの作業が続いています。
膨大な量のCSVファイルをAccessのmdbのテーブルに分割します。
チームのT君が先行していて、一旦SQL serverにCSVを読み込んで、ストアドプロシジャーで分割します。
問題はCSVファイルが何十Gもあること。
T君によると2GのCSVでストアドプロシジャーを動かしたら、2時間半経っても終わらなかったとのこと。
メモリが1G程度では到底足りないと言っていました。
ええっ、1G以上載っているマシンを私は持っていません。
現在T君のストアドを改造して、自分用のデータ変換に使おうとしています。
まだまだ時間がかかりそうです。
今日は霞ヶ関で2件の打合せ。
くたくたになって帰ってきました。
その中の1件目は4月からのお仕事の、I社の方からの引継ぎ。
1年間のお仕事なのですが、開けてみて分かったのは、バックアップ等の保守作業が半分以上だということ。
それで少し悩んでいます。
私の本来の仕事は開発だったはず・・・。
与えられた仕事の中で、創造性を発揮するしかないでしょうか?
つまらない仕事をすごいプロジェクトに変えるという、トム・ピーターズのアジテーションに乗っかるべきでしょうか。
開発は前半に集中するので、後半は選手交代も視野に入れて、お仕事をすることにしたいと思います。
選択肢を、ただ可能性があることや理にかなっていることだけに制限していると、
自分が本当に欲していることから切り離されてしまい、
あとは、妥協の産物しか生まれません。
—-ロバート・フリッツ
最近は読書とはご無沙汰ですが、相変わらず、Amazonでは本を買っていますし、週1回、近所の本屋さんで、見て回っています。
先週買った本は、ベストセラーになっている、梅田望夫の「ウェッブ進化論」、サン・テグジュペリの名言集、齋藤孝(選・訳)の「サン=テグジュペリ 星の言葉」、400ページ近くある名言集、今泉正顕の「名言大語録」。
どうもインパクトのある短い言葉に弱いようです。
読んでいる最中の本は、前出「ウェッブ進化論」と、トム・ピーターズの「リーダーシップ魂」、スーザン・ヘイワード編の「人生を思い通りに生きる知恵の言葉」、創藝舎の「グーグル完全活用術」。
もう一度、どっぷりと文学の世界に浸ってみたい今日この頃ですが。
今日はホームに設定しているMSNの占いによると、運勢は星ひとつだったのですが、いいニュースが3つも。
まず、クライアントとの打合せで、時間はかかっても良いから、いいものを作ってほしい、との話があり、事実上、スケジュールの延長が認められました。
今まで、3月末の納期の大きなプレッシャーの元で仕事をしていただけに、一気に気が楽に。
(気を緩めてはいけませんが)
もうひとつは、次の仕事がほぼ決まったこと。今度は1年という長期になりそうです。
最後に、原因不明のjavascriptの「アクセスが拒否されました」のエラーが出る件、問題のPCが壊れて、別のPCを持ってきて接続してアクセスしたら、現象が出なくなりました。
この件は苦戦して、サーバーのアクセスログとnslookupから、まずプロバイダはniftyを使っていること、ルータは、Aterm BR 1500hを使っていることまで突き止めました。(クライアントでは、このことさえも知っている人がいませんでした)
それで、niftyで接続するときにプロキシを使っているかどうかサポートに問い合わせたのですが、どうやら、それはないらしい。それでルータの設定へと絞り込まれました。マニュアルをダウンロードして調べたのですが、該当するような設定はありません。サポートに問い合わせると、ファームを最新にしてくれとの一点張り。
それで、どうしようか迷っているうちに、今日の連絡。クライアントは、もう完了にしてもいい、とおっしゃってくれました。
この様子では、問題はルータではなく、壊れたPCに特有の問題だったようです。
ともあれ、頭痛の種が3つ消えました。
昨日は2日分仕事をした、と書きましたが、そのコアな部分は午前9時から11時までの2時間で、最難関と思われる部分を突破しました。
進むときは進む。
不思議なものです。
でも、こういう凝縮された時間も、はたから見たらぼんやりしているだけのような、一見無駄な時間があればこそなんですよね。
日ごろ頭の中で、ああでもない、こうでもない、と悩み、リハーサルを繰り返し、そして・・・。
凝縮された2時間を迎える。
あっけないです。
明日は客先でデモ。また頑張ります。
昨日は風邪でほとんど進捗がなかったので、今日はがんばり、たぶん2日分の成果。
今日、はまったバグは、またSQLなのですが、あるSQL文の実行で80万レコードの集合ができます。
正解は4レコードなのですが。
これはダイナミックにSQL文を生成しているのですが、調査の結果、ループでまわしてUNIONクエリーを作るところで、うっかり、DISTINCTを入れ忘れたことが原因です。
Accessの場合はSELECT文はFROM句が必須です。それで定数を返すSQLなのですが、必ず存在するテーブルを使用しました。
2つ以上のUNIONは問題ありませんでした。
自動的にDISTINCT になるので。
問題は1つのSELECTのとき。
本来レコードは1つなのですが、FROM句で指定したテーブルのサイズになりました。それがJOINで次々に増幅して、80万レコードに。
というバグでした。
大事なときに、風邪を引いてしまいました。
熱はないのですが、咳と喉が痛い。
頭もぼんやりしています。
今日は、1日、頭が冴えませんでした。
こういうときは、エキナセアを飲んで早く寝るに限ります。
風邪が治った後は、体が前より丈夫になっているそうですが、とりあえず、頭がぼんやりは何とかしないと・・・。
また明日、頑張ります。
昨日は1日、リファクタリング。
今日のクライアントのデモに間に合いました。
効果はというと、4Kステップ以上あったプログラムが、800ステップに減少しました。
これだけでもかなりの効果です。
保守がかなり楽になると期待します。
逆に言うと、今まで、あまりにも余計なコードを書いてきたということで、反省しています。
まあ、こういう風に、気づいたときにリファクタリングしていくのが正しいやり方だと思います。
少しずつ前進・・・していると思いたい。
リファクタリングしている時間がなくて、同じようなコードが複数できたことが、また悩みの種。
そのせいで、少しずつ時間をロスしているのは分かるのだが、1,2日のリファクタリングの時間が取れない。
どこかで決断すべきだが、いったいどこで?
「良いと思われる計画を
今すぐに実行する方が、
来週、完全な計画を
実行するより、ずっと良い。
—-ジョージ・パットン」
リファクタリング開始!