2006年08月31日

あっという間に3週間

8月のアクセス統計というのを見たところ、訪問者数 437 ページビュー
6186 でした。 アクセスしていただいた皆さん、ありがとうございました。

夏休み期間が終わってしまったので、更新頻度は不定期になるとおもいますが、地道に更新していきたいナ、と考えています。

こんごともよろしくお願いいたします。 (_o_)
続きを読む
posted by yamachan at 23:59| Comment(2) | TrackBack(0) | 日記

2006年08月28日

ありえないSELECT文

アリエナイ設計、というカテゴリを追加してみました。

これは僕が見た Notes/Domino アプリで驚いた、いえ正直に言えば呆れた書き方をしたものの記録です。 知ってて当然、という感じであまり説明されない、基本的な事柄が中心になるとおもいます。

さて今日のびっくりは、ありえないSELECT文です。

ある日、とあるアプリのスケジュールエージェントが動作しないという相談がありました。 テスト環境では動くのですが、本番に配置すると何故か動作しない、そうで。

動作しない、と簡単に言われても、ちゃんとした動作ログが無いのでよくわかりません(これもアリエナーイ)。 そこで、以前にご紹介した ログ生成クラス をさっくり組み込んで動作を確認し、問題に対応しました。 で、ログ機能は今後のために残しておくことになりました。

さて数日後、アプリの担当者から連絡がありました。 「謎の文書が表示されている」 という怪現象が発生しているそうで。 しかも日に日に増えているとか。 こ、これは考えるまでもありません、原因はアレです。
続きを読む
posted by yamachan at 21:57| Comment(0) | TrackBack(0) | アリエナイ設計

2006年08月23日

NotesColor の240色って?

NotesColor (NotesColorObjectクラス) では240色が利用できますが、アイコンと違い、デザイナーズヘルプには全色は載っていないようです。 なので簡単な表を作成してみました。

続きを読む
posted by yamachan at 23:11| Comment(0) | TrackBack(0) | 雑談

2006年08月22日

ログ生成用クラス (6)

三回に分けて掲載した LotusScript コードを 20060822_CoreLog_v100.txt にまとめました。 使用する時は適当なスクリプトライブラリの Declarations セクションにでも貼りつけてください。

CoreLog クラスは最低限の機能しか実装していないため、誰が書いても似たようなコードになると考えます。 著作権等を主張することはありませんので、自由にご利用ください。

なにか不具合を発見された方、より良いコードを書かれた方、フィードバックいただければ嬉しいです。続きを読む
posted by yamachan at 00:10| Comment(0) | TrackBack(0) | my設計パターン

2006年08月21日

ログ生成用クラス (5)

ログ生成用クラス (4) に引き続き、CoreLog クラスの残りの実装をみていきましょう。 まずは処理のメインとなる2つのメソッドです。
  ' ---- Public methods ----

Public Sub logText(message$)
Me.getLog().AppendText(message$)
Call Me.getLog().AddNewLine(1)
End Sub

Public Sub traceText(message$, level%)
If level% <= Me.getTraceLevel() Then
Me.getTrace().AppendText(message$)
Call Me.getTrace().AddNewLine(1)
End If
End Sub
続きを読む
posted by yamachan at 22:48| Comment(0) | TrackBack(0) | my設計パターン

2006年08月20日

ログ生成用クラス (4)

ログ生成用クラス (3) に引き続き、CoreLog クラスの実装をみていきましょう。 今回はゲッターとセッターを抜き出してみました。

関係ありませんが、ゲッター と言えば、僕の心に浮かぶのは このページ。 いつも僕に勇気をくれます。
  ' ---- Getter/Setter methods ----

Public Sub setTraceLevel(level%)
If (0 < level% And level% < 100) Then
Me.traceMaxLevel% = level%
Else
Me.traceMaxLevel% = 0
End If
End Sub

Public Function getTraceLevel() As Integer
getTraceLevel = Me.traceMaxLevel%
End Function

Public Function getLog() As NotesRichTextItem
Set getLog = Me.itemDetail
End Function

Public Function getTrace() As NotesRichTextItem
Set getTrace = Me.itemTrace
End Function
続きを読む
posted by yamachan at 07:27| Comment(0) | TrackBack(0) | my設計パターン

2006年08月19日

ログ生成用クラス (3)

ログ生成用クラス (2) で使い方をご紹介した CoreLog クラスの実装を順にみていきましょう。 まずは最低限ということで、内部変数コンストラクタ 部分のみを抜き出してみます。
Public Class CoreLog
Private traceMaxLevel As Integer
Private logDoc As NotesDocument
Private itemDetail As NotesRichTextItem
Private itemTrace As NotesRichTextItem
Private timeStart As NotesDateTime

' ---- Constractor/Destractor methods ----

Sub New(doc As NotesDocument, level%, logType$)
Dim session As New NotesSession

If doc Is Nothing Then
Set Me.logDoc =
session.CurrentDatabase.CreateDocument
Me.logDoc.Form = "fLogCore"
Else
Set Me.logDoc = doc
End If
Set Me.timeStart = New NotesDateTime(Now())
Me.logDoc.Start = Me.timeStart.LSLocalTime
Me.logDoc.Executant = session.UserName
Me.logDoc.Status = "pending"
Me.logDoc.Type = logType$
Set Me.itemDetail =
createRichtextMember(logDoc, "Detail")
Set Me.itemTrace =
createRichtextMember(logDoc, "Trace")
Me.setTraceLevel(level%)
End Sub

Sub Delete
Delete Me.timeStart
End Sub

End Class

続きを読む
posted by yamachan at 00:02| Comment(0) | TrackBack(0) | my設計パターン

2006年08月18日

ログ生成用クラス (2)

ログ生成用クラス (1) に引き続き、ログ生成用クラスの使い方をご紹介します。

ログ機能は常に出力されるものですが、トレース情報 はレベル付けされた出力になります。 以下の単純な例を見てみてください。
  Dim aCoreLog As New CoreLog(Nothing, 2, "Sample")

Call aCoreLog.traceText(|レベル0|, 0)
Call aCoreLog.traceText(|レベル1|, 1)
Call aCoreLog.traceText(|レベル2|, 2)
Call aCoreLog.traceText(|レベル3|, 3)
Call aCoreLog.traceText(|レベル4|, 4)

Call aCoreLog.closeLog()
CoreLog クラスを生成する時の、第二引数が最大のトレースレベルの指定になります。 そして traceText() メソッドの第二引数が、出力する情報のレベル値を指定しています。

最大トレースレベル以下のレベル値が指定された場合のみ、メッセージがトレース欄に追記されます。 上記の例では最大トレースレベルとして 2 が指定されていますから、レベル0〜レベル2 の行だけが実際のログ文書に保存される仕組みになっています。
続きを読む
posted by yamachan at 00:15| Comment(0) | TrackBack(0) | my設計パターン

2006年08月17日

ログ生成用クラス (1)

Java: デザインパターン、JUnit、Log4J にも書きました、ログ生成用の簡単な LotusScript クラスをご紹介します。 まずは簡単な使い方をみてください。
  Dim aCoreLog As New CoreLog(Nothing, 2, "Sample")
Call aCoreLog.logText(|処理 開始|)

' 実際の処理...

Call aCoreLog.logText(|処理 終了|)
Call aCoreLog.closeLog()
"Sample" の部分はログのタイプを示す文字列で、自由に設定が可能です。続きを読む
posted by yamachan at 00:04| Comment(0) | TrackBack(0) | my設計パターン

2006年08月16日

Java: デザインパターン、JUnit、Log4J

僕が Java で学んだことで最も重要なことは、デザインパターン の大切さだとおもいます。

これまでの開発経験から、ノウハウをカタチにし、再利用する大切さはわかっていたつもりでした。 ライブラリ化とか。 でも、いろいろなプロジェクトに関わってみて、技術的なことよりも、コミュニケーションに由来する問題が多いことに気がつきます。

続きを読む
posted by yamachan at 21:17| Comment(3) | TrackBack(0) | 雑談

2006年08月15日

プロフィール文書に関する愛憎劇 (2)

プロフィール文書に関する愛憎劇 (1) のようにプロフィール文書の扱いに悩んでいたのは、実は過去のこと。 最近の僕は 「通常の文書とプロフィール文書のハイブリッド」 な設計にしています。

仕組みは簡単で、管理ビューを1つ作成し、設定情報を通常の文書として管理するようにします。 で、その文書の更新の際に、Postsave で変更をプロフィール文書に反映させます。 例えば以下のような感じで。
続きを読む
posted by yamachan at 00:17| Comment(0) | TrackBack(0) | my設計パターン

2006年08月14日

プロフィール文書に関する愛憎劇 (1)

僕がとっても愛用し、かつ常に悩まされている仕組みに プロフィール文書 があります。

例えば僕の管理している Web システムは三桁近い数の Web サイトがあって、それぞれが独立した Notes DB です。 見た目はいろいろバラエティ豊かですが、設計は統一されています。 細かいところまで全部、プロフィール文書で設定できるようにしてみました。

プロフィール文書は手軽に使用できますし、システムにキャッシュされるだけあってパフォーマンスも良さげなんですが、、、トラブル発生時に問題解決に手間取ることも多いです。 普通の文書と違って、簡単にはアクセスできないのが困りものです。
 続きを読む
posted by yamachan at 05:06| Comment(0) | TrackBack(0) | my設計パターン

2006年08月13日

DBアイコンに漢字を?

僕は絵心が皆無なので、DBアイコンの作成にはいつも苦労します。 ふと思いついて 漢字 をアイコンにしてみました。 とりあえず、単純に処理(二値化)してみた結果がこちら。

夢を忘れちゃいけないよぉ

32x32 って漢字にもちょうど良さげではないでしょうか。 慣れがあるのか、目的のDB を探すのが早くなった気がします。 タブに表示されるアイコンも識別しやすく、よい感じです。

でも、安易に見えるのか (いや、安易ですけど)、僕のまわりではあまり評判は良くないです...。
posted by yamachan at 00:33| Comment(2) | TrackBack(0) | 雑談

2006年08月12日

Querysave 依存症からの脱却?

他人の開発した Notes DB の修正を依頼されることがあります。 その場合にまず確認するのは、主に使用されているフォームの Querysave ルーチンですね。Querysave 部分が非常に長い場合、可能ならばその依頼を断ることにしています。

元の設計者にまったく罪は無くて、単に僕の趣味にあわないコードなだけなんですが、それはきっと僕にとって、あまり楽しくない仕事になるだろうから...。

常に必須なフィールドのチェックが無ければ、僕の Querysave はたいてい、以下のようにシンプルなものです。
Sub Querysave(Source As Notesuidocument, Continue As Variant)
If Source.FieldGetText("SaveControl") = "on" Then
Msgbox "アクションボタンを押して処理してください (破棄する
場合は保存の問い合わせで「いいえ」を選択)"
Continue = False
End If
End Sub
続きを読む
posted by yamachan at 00:28| Comment(535) | TrackBack(0) | my設計パターン

2006年08月11日

はじめまして yamachan です

もともとは C/Java あたりをやってたハズなんですが、職場に Notes が導入されてからは趣味でいろいろ作って遊んでいました。 なにせお手軽ですし。

気がつくといつのまにか、Notes/Domino 関連の仕事がメインになっていたりします。 でも ほぼ独学 ということもあり、自作のアプリを見せると、他の Notes 開発者の方に絶句されたりしますが...。

来年には Hannover が来て、RCP(Javaの開発環境Eclipseのコアが汎用化したもの) ベースの世界がうまく実現されれば、もっと面白いことができるかも、とちょっと期待してます。

さくらインターネット利用中だと さくらブログ が無料で使えるってんで、とりあえず Blog を開設してみました。 たまに妙な解説っぽいのを掲載してみようかと考えています...。
続きを読む
posted by yamachan at 00:03| Comment(4) | TrackBack(1) | 日記