10/28: 実践! テスト・ファースト

前職の頃から一部マニアの間ではXPエクストリーム・プログラミング[W]の信奉者として有名だった不肖鎌ヶ迫です(一部誇張あり)が、その一部については今でも実践しております。
昨日今日と、現在手掛けているプロジェクトのサーバサイドJavaアプリのカスタマイズを行っておりました。既存のコードを流用しようと思えば流用できたのですが、ドメインが微妙に分かれている上に今後もカスタマイズが発生する可能性があり、下手に継承して後々困るのも面倒なので、インタフェースを揃えてパッケージからして別に実装することにしました。
コピペは諸悪の根源、継承関係が成り立たないのであればきっちり実装です(staticなロジックのみのクラス? 何のこと?)。と、その前にテストクラスを実装します。はい、テスト・ファーストですね。テストに合わせてクラスを実装するという、ある意味では矛盾しているような、しかし実に理に適った実装方法です。
「クラスを実装できる ← インタフェースが決まっているハズ ← テストを書けるはず」「テストを書けない → インタフェースが決まっていない → まだ実装すべきでない」というシンプルな理屈です。クラスに修正が必要な場合は、当然、テストを修正するのが先です。これを徹底することで、単体レベルのバグ数をかなり抑え込むことができます。
問題は、テストクラスを実装しない場合に比べて見掛けの実装が増えることです。ただ、デバッグと仕様変更の対応、メンテの手間を考えると、テスト・ファーストをしっかり実践した方が工数が減ると経験的に言えます。この点を定量的に示すことができれば、導入の敷居は下がることと思います。
10/26: NP_MyGoogleMaps 0.7
Nucleus CMSからGoogle Maps APIを利用するためのプラグイン、NP_MyGooleMaps 0.7を公開します;
NP_MyGoogleMaps_0.7.zip [208????]
今回の更新の目玉は、位置情報にトラックバックPingを送信できるようになり、マーカをクリックした時に表示される情報ウィンドウにトラックバック元のリンクが表示されるようになったことです。同一ブログ内の連携のみならず、外部サイトのブログとも有機的に連携するようになります。
NP_MyGoogleMapsについての不具合報告やご要望等ございましたら、この記事もしくはjapan.nucleuscms.orgの該当フォーラムにてコメントを下さいませ。
03/29付記: このバージョンは古いものです。最新版はNucleus CMSカテゴリから取得して下さい。
10/25: NP_MyGoogleMapsはどこへ行くか
このところ更新が途絶え気味なNP_MyGoogleMapsですが、佐藤(な)さんのブログにて紹介して頂きました。どうもありがとうございます。
さて、このプラグインについてですが、ごく基本的な機能についてはほぼすべて実装し終えたのかな、と感じています。フォーラムにて要望をいくつか頂きましたが、ズームレベルの指定以外については直近の対応は考えていません(ごめんなさい > サクラキャンドルさん)。
食べ歩きに便利そうな位置情報へのトラックバックについて、実は先週頭の時点で実装済みだったのですが、記事そのものへのトラックバックと位置情報のトラックバックとがゴッチャになるのはNGかな、と考えています。しかし、記事へのトラックバックを位置情報へのトラックバックとして一緒くたに扱うと、まったく関係ない位置情報とトラックバック元が関連してしまう可能性が高いので、今の実装のままでもよいのかな、とも考えています。近日中には結論を出しますので、次回のver 0.7リリースまでしばらくお待ち下さいませ。
» 続きを読む
10/21: 『ソフトウェア開発の持つべき文化』 その1
先週末からNP_MyGoogleMapsの更新がほとんど止まってしまっています。すみません。その理由は、何冊か買い込んだ書籍を読んでいるから、です。最近映画化されたスラップスティック[G]なSF作品『銀河ヒッチハイク・ガイド』(旧訳は既読)の続編、『宇宙の果てのレストラン』(新訳)を2日で読み終え、次に取り掛かったのが『ソフトウェア開発の持つべき文化』です。
ワインバーグ[G]やデマルコ[G]といった古今東西のコンピュータ書籍の名著・必読書を引用しながら、ソフトウェアを開発する組織が持つべき文化について解説しています。よりよいソフトウェアを開発するためには、表層的なソフトウェア開発プロセスの導入だけでは不十分であり、組織として有機的に活動するための "文化" という共通のコンテキストが必要である、というスタンスで書かれています。また、抽象論に陥ることなく具体的な解説や例示がなされており、各章末に「文化を生かすもの」「文化を殺すもの」がまとめられているので、非常に理解しやすく、かつ、実践的な内容になっています。
対象となる読者は、ソフトウェア開発のマネージャやリーダー、あるいはそれを目指しているエンジニア、といったところ。もちろん、「生涯一プログラマ」なあなたにもお薦めできます。原著はおよそ10年前に出版されたとのことですが、内容は今でも十分に通用します。と言うより、現実がようやくこの書籍に追い付き始めたという印象。もう少し読み進めたら、また改めてこの書籍について書いてみたいと思います。
» 続きを読む
10/14: NP_MyGoogleMaps 0.6
Nucleus CMSからGoogle Maps APIを利用するためのプラグイン、NP_MyGooleMaps 0.6を公開します;
NP_MyGoogleMaps_0.6.2.zip [362????]NP_MyGoogleMaps_0.6.1.zip [206????]NP_MyGoogleMaps_0.6.zip [209????]
今回の更新で、画像の表示サイズを指定できるようになりました。画像の登録時にフォームが空(または0)の場合は、自動的にファイルサイズを取得してDBに格納します。これにより、情報ウィンドウが画面からはみ出して表示されることがなくなりました。
この他に、プラグインの更新時にALTER TABLE等が必要な場合は管理画面から実行できるようにしました。ただし、NucleusのMySQLユーザにALTER権限が必要です。ALTER権限がない場合は、管理画面のSQL文をコピペしてご利用下さい。
もう一点、JavaScriptで利用するグローバル変数にプレフィックス mygmap_ を付けました。これで、他のプラグインと変数名が衝突することはなくなると思います。
リンクにデフォルトのズームレベルを設定する実装も行ったのですが、非同期処理との関連のためか、地図が正しく描画されないといった問題が発生したため、今回のリリースからは外しました。余裕があれば再度挑戦してみますが、無理っぽい場合は諦めます ;-)
2005/Oct/16補筆: 画像サイズを指定しない場合に登録/更新がされないバグがありましたので、修正した0.6.1をupしました。
2005/Oct/17補筆: $PREFIX_gmap_loc_itemテーブルのCREATE文に修正を加えた0.6.2をupしました。NP_MyGoogleMapsを導入しても上記のテーブルが生成されていない場合は、0.6.2に更新してみて下さい。
03/29付記: このバージョンは古いものです。最新版はNucleus CMSカテゴリから取得して下さい。
10/14: 合宿&旅行 最終日
ようやく今回で最後です。長々とお付き合い下さり、ありがとうございます。
さて、合宿&旅行の最終日@伊豆高原 ヴィラージュ伊豆高原。昨晩は酒を飲んでバタンキューに近かったので、朝7時半に起床。こんな時間からすることがあろうはずもなく、朝風呂へ。しかし折角の露天風呂が雨天風呂(!)になっており、湯温も微妙に低め。内湯でじっくり暖まってから、露天風呂を楽しみました。
荷物を少しでも減らすべく、朝食は昨晩の残りモノ。モソモソ食べているうちにチェックアウトの時間。玄関のテディ・ベアに別れを告げて、オルゴール博物館へ。色々なオルゴールがありました。しかし、打楽器やオルガンまでオルゴールに組込むとは... 畏るべき技術者根性を見ました。
昼食は伊豆高原ビールの運営するうまいもん処で海鮮を楽しみました。のみならず、地ビールの飲み比べセットを全員が注文。テーブルに所狭しと並ぶビアグラス31個は壮観で、店内の注目の的でありました。期間限定のペールエールが特に美味しかったです。
ちょっとここまでのんびりし過ぎていたようで、昼食後の軽い運動として伊豆高原駅までダッシュ。切符を買って電車にギリギリ間に合いました。あとはもう、昨晩の残りモノをつまみながらチビチビやりつつ一路東京駅を目指して帰路についたのでありました。
10/12: NP_MyGoogleMaps 0.5
Nucleus CMSからGoogle Maps APIを利用するためのプラグイン、NP_MyGooleMaps 0.5を公開します;
NP_MyGoogleMaps_0.5.zip [163????]
今回の更新はMySQL 4.0.x対応がメインです。ver. 0.5以前を利用していらっしゃる方は、alter tableする必要がありますのでご注意下さい(詳細はmygooglemaps/help.htmlを参照して下さい)。ただし、BOOLEANもBOOLもTINYINT(1)のシノニムなので、ALTER TABLEしなくても問題なく動作する可能性があります。
NP_MyGoogleMapsについてご要望等ございましたら、この記事もしくはjapan.nucleuscms.orgの該当フォーラムにてコメントを下さいませ。
03/29付記: このバージョンは古いものです。最新版はNucleus CMSカテゴリから取得して下さい。
10/12: 合宿&旅行 二日目
私事にて恐縮ですが、今しばらくお付き合い下さい。
さて、合宿&旅行の二日目@天城湯ヶ島 白雲楼。前日の酒が抜け切れず、朝食はパスしてしまいました。9時になったので朝風呂を浴びてから30分間のカオスタイムを楽しみ、10時に出発。バスに揺られて天城峠を越え、ループ橋で目を回しながらおよそ2時間で河津駅に到着。駅近くの喫茶店で一休みしてから、伊豆高原駅へ。
到着後、旅行のみの参加者と合流し、昼食を食べに鮪屋へ。人気の店らしく、かなり待たされた後、とろけるような大トロと頭トロの炙り丼を堪能しました。うーむ、至福です。
そんなこんなしているうちにチェックインの時間が近付いてきたので、この日の宿であるヴィラージュ伊豆高原へ向います。途中、怪しい少年少女博物館なる怪しい建物があったのが気になりましたが、無事に到着しました。窓から海が見え、背後は大室山。中々の眺望です。
チェックイン後は夕飯の買い出しです。鍋と餃子の材料を買い込んで宿に戻り、さっそく夕飯の準備開始。久し振りに餃子を包みましたが、思いの外に上手く出来てちょっと満足でありました。
そして夕食。鍋を皆でつつきながらビールやら焼酎やらを飲みつつ談笑です :-) この日のベルギービールでは、ドゥシェス・ド・ブルゴーニュ[G]やティママン・ブランシェ[G]が人気でした。そう言えば、昨日もランビックが人気でしたね。うーむ、ランビックのフルーティな風味がよかったのかも。
そんなこんなで二日目は過ぎてゆきました。
10/11: 合宿&旅行 初日
私事で恐縮ですが、MyGoogleMapsのデモも兼ねて、この連休の簡単な旅行記を。この連休は、伊豆へ旅行に行きました。前半は湯ヶ島で大学のサークルのOB合宿、後半は伊豆高原で友人と旅行です。
初日。東京駅に集合して踊り子号で修善寺駅まで直行し、まずは修禅寺観光です。その前に禅風亭なゝ番というお蕎麦屋さんで昼食。名物の禅寺そばを頂きました。手打の麺がとても美味しかったのですが、特筆すべきは何と言ってもお土産のワサビ。葉の付いたワサビが丸々一本、一膳に必ず付いてきます。さすが、伊豆と言えばワサビ、ワサビと言えば伊豆ですね。
食事を終えたら修善寺観光開始です。まずは修禅寺の(元?)鎮守である日枝神社にお参り。それから修禅寺へ。しかし! 修禅寺の本堂は改装工事中でお参りできずじまいでした。仕方なしに隣の社務所に設置された賽銭箱に賽銭を放り込もうとしたその時、害虫除けの高周波発振器の直撃を受けてしまいました。どうやら私は害虫レベルのようです。
気を取り直して、修禅寺すぐそばの独鈷の湯へ。河原の中に湯船があるのですが、入浴はできず、足湯としてのみ利用できるようでした。それから指月殿、十三士の墓と参り、蕎麦屋に忘れた傘を回収して修善寺観光は終了。
修善寺駅に戻ってから、バスで本日の宿である白雲楼へ一路向かいます。雲行きは怪しいながらも何とか雨に降られることなく、無事に到着しました。
一息ついたら早速お風呂に入り、一日の汗を流します。宿の中を散策しているうちに夕食の時間です。夕食後は全員で合奏でありました。私はコントラバス[W]担当なのですが、楽器が大きく運搬が大変、かつ湿気に弱い弦楽器(当日の天気予報は雨でした)ということで楽器は持参せず、演奏を聴くだけでした。それでも楽しませてもらいました。
その後は楽しい宴会です。ブーン・フランボワーズ[G]、ウルトラマウル[G]、リンデマン・ピーチ[G]といった甘めのランビックを中心にベルギービールを数本差し入れましたが、中々に好評でした。それにしても久し振りに飲んだ日本酒は強烈でした。やっぱりビールと焼酎以外は体が受け付けてくれないようです :-)
10/07: NP_MyGoogleMaps セールストーク
NP_MyGoogleMapsのヘルプファイルから抜き出しました;
- 位置情報はDBに格納しますので、複数の記事から参照できます。
- 登録された位置情報は、ポインタとして地図上に表示されます。
- ポインタをクリックすると、その位置情報の詳細が表示されます (非同期処理)。
- 位置情報を参照するブログ記事がある場合、その記事へのリンクも表示されます。
- → これにより、記事とブログの双方向のリンクが生成されます。
- 単一の地図上に、表示できる範囲内のすべての位置情報が表示されます。 (非同期処理)
- → これにより、位置情報間に緩い関連が生成されます。
- 結果、記事と位置、位置と位置、記事と記事が有機的にリンクされます。
- 地図はポップアップウィンドウで表示されます。
- 地図ウィンドウを一つ開くと、以降は同じウィンドウを使い回します。
- 別の位置情報を開く場合でも、ウィンドウをリロードしません。
- ポップアップウィンドウのサイズを編集画面で設定できます。
- 位置情報の編集画面もポップアップで表示されます。
- プラグインの管理画面からも位置情報を編集できます。
- シンプルな入力値チェックを実装しています。
どうでしょうか? ここをこうすればもっとattractiveなプラグインになる! というご意見ございましたら、どうぞコメントをお寄せ下さいませ。
10/07: Google SitemapsでSEO
(株)吉田鎌ヶ迫でブログを開始してから3ヶ月が経過し、記事の数も100を越えました。トップページから直接参照できなくなった記事も増え、SEO[W](検索エンジン最適化)を考えなければならない時期になったようです。
まずは第一段として、Google Sitemapsの利用を開始しました。詳細についてはFAQ(日本語訳)を参照して頂くとして、大まかに言えば、サイトに存在するコンテンツURLの一覧をGoogleに予め登録しておくことで、サーチボットがファイルを取りこぼすことがなくなる、という仕組みです。
この機能の実現には、Google Sitemaps用のskinファイルを利用しました。デフォルトの設定では複数ブログ利用時のFancyURLに対応していなかったので、テンプレートを一部変更して利用しています。
10/06: NP_MyGoogleMaps 0.4
Nucleus CMSからGoogle Maps APIを利用するためのプラグイン、NP_MyGooleMaps 0.4を公開します;
今回の更新は、管理面の強化が中心です。位置情報の登録・更新時に、入力値のチェックを行うようにしました。また、情報の新規登録なのか既存の情報の更新なのか分かりやすくするための、確認ダイアログも表示するようになっています。
ただし、記事にMyGoogleMapsタグを埋め込んで位置との関連を作成する箇所については、まだ入力チェック処理を実装していません。これについては、次回のマイナーバージョンアップで対応する予定です。
直後に補筆: 上記について簡単にですが対応してみましたので、0.4.1を公開します。
03/29付記: このバージョンは古いものです。最新版はNucleus CMSカテゴリから取得して下さい。
10/05: NP_MyGoogleMaps 0.3.2
Nucleus CMSでGoogle Maps APIを利用するためのプラグイン、NP_MyGoogleMaps 0.3.2を公開します;
今回はマイナーバージョンアップですので、0.3.1から機能に変更はありません。細々とした修正が中心となっています。
お気付きの方もいらっしゃると思いますが、右側の「ナビ」メニューに、地図ナビを追加しました。現時点ではまだ登録している位置情報が少ないこともあり、あまり使い出がないかも知れません。しかし、今月からはこれまで以上にアクティブに日常生活を送る予定ですので、地図上にマーカがたくさん並ぶ日も近いことと思います。
また、些細ですが、プログラミングカテゴリからNucleus CMSカテゴリを分離しました。
03/29付記: このバージョンは古いものです。最新版はNucleus CMSカテゴリから取得して下さい。
10/05: アクセス過多!?
先日、このブログにて自作のNucleus用プラグイン "NP_MyGoogleMaps" を公開いたしました。昨日から急に弊社ブログの動作が重くなり、すわslashdotted? などと妄想を膨らませておりました。
昨日の昼過ぎぐらいから今朝までサーバ処理が重い状態が続いていたのですが、このままでは弊社の信用に係わるということで原因を調査し、結果、検索エンジンのサーチボット[G]が弊社ブログへ頻繁にアクセスしていたためにDoS攻撃[W]状態になっていたことが判明しました。ちょっと脱力。
このままでは問題があるので、robots.txtの設定を変更し、サーチボットのファイルアクセス数自体を減らすようにしました。これでもまだDoS状態が続くようであれば、アーカイブ(過去の記事)へのアクセスなども制限する必要がありそうです。
10/04: NP_MyGoogleMaps 0.3
Nucleus CMSでGoogle Maps APIを利用するためのプラグイン、NP_MyGoogleMaps 0.3を公開します。
0.2からの変更点は以下の通りです;
- 削除フラグの挙動を実装
- 地図ウィンドウの使い回し
前者については、管理(編集)画面で位置情報に削除フラグを立てられるようにしました。後者については、既に地図を別ウィドウで開いていた場合には、その地図を使い回すように変更しました。これに伴い、スキン変数が一つ追加になり、インストール手順が1ステップ増えました。詳細についてはヘルプファイル(mygooglemaps/help.html)を参照して下さい。
今回の更新では特に、地図ウィンドウの改善に着目して下さい:-) 地図を開いた後で別のリンクをクリックした場合、これまでの版ではそんなことお構いなしにリロードしていたため、地図がパッと切り替わるイメージでした。今回の更新で、地図をリロードさせることなくスムーズに視点が移動するようになりました。これについては過去の記事(最下部の日記)で実感できると思います。
補筆: IEで利用できないDOMのプロパティを使っていましたので、0.3.1に更新しました。
03/29付記: このバージョンは古いものです。最新版はNucleus CMSカテゴリから取得して下さい。
10/03: NP_MyGoogleMaps 0.2
バージョンを上げると文字化け、というのもイケていないので、昼食後のマッタリとした休息時間を返上して、クイックハックしました。プラグインファイルの文字コードをeuc-jpに変更し、DBに登録されるテキストもeuc-jpになるよう修正したNP_MyGoogleMaps 0.2を公開します。
こちらのバージョンをはじめから利用すれば、以降のバージョンアップに伴う文字化けの心配はありません。インストール等、その他の詳細については、以前の記事を参照して下さい。
また、未検証ですが、zipに含まれるファイルの文字コードをutf-8にし、プラグインの編集画面でブログの文字コードとしてutf-8を指定することで、utf-8版のNucleusでもご利用になれると思います。
NP_MyGoogleMaps 0.2についてのご意見ご感想ご要望等は、こちらのトピックへコメントをお寄せ下さい。
03/29付記: このバージョンは古いものです。最新版はNucleus CMSカテゴリから取得して下さい。
» 続きを読む
10/03: NP_MyGoogleMaps 0.1
それらしく動き始めましたので、NP_MyGoogleMaps 0.1を公開します。正式リリースではありません。ご自身の責任の下でご利用下さい。ライセンスはNucleus CMSに準拠します。
NP_MyGoogleMaps 0.1 (euc-jp版)
NP_MyGoogleMapsは、Google Maps上の位置データとブログの記事とをリンクさせ、Google Mapsからブログ記事を表示するという機能を提供する、Nucleusのプラグインです。NP_GoogleMapsと違い、単一の地図に複数の位置情報を表示させることができます。これにより、ある記事が参照している位置や、その位置に近い別の位置に関連した記事を、地図から参照することができるようになります。
現在、euc-jp版しか用意できていません。文字コードに関連する処理の整理が完了したら、utf-8版も提供する予定です。
注意点として、Google MapsがInternet Explorerではutf-8でしか動作しないため、ファイルやDBに登録する文字コードがeuc-jpとutf-8が混在しています。以降の版で整理する予定ですが、NP_MyGoogleMapsのバージョンアップに伴い、DBに登録したデータ等に文字化けが発生する可能性があります。この点についてはご了承下さい。
もう一点。管理画面の削除チェックボックスは動作しません。その他ToDoについては、プラグイン管理画面のヘルプ(mygooglemaps/help.html)から参照できますので、そちらをご覧下さい。
その他、不具合やご要望等ございましたら、このトピックにコメントを付けて下さい。
03/29付記: このバージョンは古いものです。最新版はNucleus CMSカテゴリから取得して下さい。
» 続きを読む

