TimberLandChapel's Tech Blog

TimberLandChapel provide Tips, tech note and scribbling.
Updated my site as English site for APAC users.
TLC.com .Metrix 4.0 Beta1 released

サイトの日本語化方法はこちら

Syndication

News

INETAJ

情報処理関係官公庁

SQL Server

TLC.com

Microsoft

クリエイティブ・コモンズ

http://www3.clustrmaps.com/

9月 2007 - Posts

Access 2007 の CREATE TABLE には文字列型の列について

「Unicode 圧縮 - Yes/No」 を GUI で設定するのに相当するキーワードとして,

[WITH COMPRESSION]

があります。

これが。。。

Access 2007 だとキーワードとして認識されていないように思います。

型指定の後に記述しても,WITH が有効なキーワードとして認識されないとエラーになってしまいます。

何か情報をお持ちの方ご協力を。

written by TimberLandChapel

Posted by timberlandchapel | with no comments
Filed under:
シナリオと要件
VB.NET から Excel の COM オブジェクトを操作する場合の注意点
http://blogs.timberlandchapel.com/blogs/timberlandchapel/articles/1149.aspx
で紹介したように,VB.NET から Excel の COM オブジェクトを操作する際には,.NET のマネージコードから COM を操作するための一風変わった作法が必要になります。

今回は,Excel のブックに罫線を描画する方法を紹介します。

Excel ブックを開いて,罫線を描画する

前回の「Excel COM オブジェクトを正しく解放するためのコツ」で紹介した4つのコツを頭に入れて丁寧にコードを書きます。

また,Excel の罫線は次の6つのパーツの組み合わせとして作成することになります。

  • 上端線
  • 下端線
  • 右端線
  • 左端線
  • 内部水平線
  • 内部垂直線

罫線の描画に関しても,[Borders] コレクションと [Border] オブジェクトが関わるため,一旦 [Borders] コレクションの参照を作成する必要があります。

罫線を描画する
Dim targetRange As Excel.Range = Nothing
Dim targetBorders As Excel.Borders = Nothing
Dim targetRightBorder As Excel.Border = Nothing
Dim targetLeftBorder As Excel.Border = Nothing
Dim targetTopBorder As Excel.Border = Nothing
Dim targetBottomBorder As Excel.Border = Nothing
Dim targetVerticalBorder As Excel.Border = Nothing
Dim targetHorizontalBorder As Excel.Border = Nothing
 
Try
    targetRange = [worksheet].Range("A3:C5")
 
 
    targetBorders = targetRange.Borders
    targetRightBorder = targetBorders.Item(Excel.XlBordersIndex.xlEdgeRight)
    targetLeftBorder = targetBorders.Item(Excel.XlBordersIndex.xlEdgeLeft)
    targetTopBorder = targetBorders.Item(Excel.XlBordersIndex.xlEdgeTop)
    targetBottomBorder = targetBorders.Item(Excel.XlBordersIndex.xlEdgeBottom)
    targetVerticalBorder = targetBorders.Item(Excel.XlBordersIndex.xlInsideVertical)
    targetHorizontalBorder = targetBorders.Item(Excel.XlBordersIndex.xlInsideHorizontal)
 
    With targetRightBorder
        .LineStyle = Excel.XlLineStyle.xlContinuous
        .Weight = Excel.XlBorderWeight.xlThin
        .ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic
    End With
    With targetLeftBorder
        .LineStyle = Excel.XlLineStyle.xlContinuous
        .Weight = Excel.XlBorderWeight.xlThin
        .ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic
    End With
    With targetTopBorder
        .LineStyle = Excel.XlLineStyle.xlContinuous
        .Weight = Excel.XlBorderWeight.xlThin
        .ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic
    End With
    With targetBottomBorder
        .LineStyle = Excel.XlLineStyle.xlContinuous
        .Weight = Excel.XlBorderWeight.xlThin
        .ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic
    End With
    With targetVerticalBorder
        .LineStyle = Excel.XlLineStyle.xlContinuous
        .Weight = Excel.XlBorderWeight.xlHairline
        .ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic
    End With
    With targetHorizontalBorder
        .LineStyle = Excel.XlLineStyle.xlContinuous
        .Weight = Excel.XlBorderWeight.xlHairline
        .ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic
    End With
 
Finally
    If Not targetHorizontalBorder Is Nothing Then
        Marshal.ReleaseComObject(targetVerticalBorder)
    End If
    If Not targetVerticalBorder Is Nothing Then
        Marshal.ReleaseComObject(targetVerticalBorder)
    End If
    If Not targetBottomBorder Is Nothing Then
        Marshal.ReleaseComObject(targetBottomBorder)
    End If
    If Not targetTopBorder Is Nothing Then
        Marshal.ReleaseComObject(targetTopBorder)
    End If
    If Not targetLeftBorder Is Nothing Then
        Marshal.ReleaseComObject(targetLeftBorder)
    End If
    If Not targetRightBorder Is Nothing Then
        Marshal.ReleaseComObject(targetRightBorder)
    End If
    If Not targetBorders Is Nothing Then
        Marshal.ReleaseComObject(targetBorders)
    End If
    If Not targetRange Is Nothing Then
        Marshal.ReleaseComObject(targetRange)
    End If
End Try

コード中の [worksheet] 部分には,[worksheet] オブジェクトの参照を指定してください。

それぞれの [Border] オブジェクトに対して,[LineStyle],[Weight],[ColorIndex] の3つのプロパティを指定することで基本的な罫線を描画することができます。

好みの罫線を描画するためには Excel の [マクロの記録] 機能を利用して VBA コード内にプロパティの値を記録させるとよいでしょう。

罫線を消去する

罫線を描画する操作を行えば,当然罫線を消去する操作も行う必要が出てくるでしょう。

[LineStyle] プロパティに指定する [XlLineStyle] 列挙体に,値 [xlLineStyleNone] が存在しますが,これは罫線の指定をしないことにはなりません。

罫線の指定を解除するためには [Constants] 列挙体の 値 [xlNone] を指定します。

罫線を解除する
targetBorder.LineStyle = Excel.Constants.xlNone

これで罫線の指定を解除することができます。

written by TimberLandChapel
Posted by timberlandchapel | with no comments

Excel 2007 用 2003 互換リボン の現在ベータテストを行っています。

【Office Excel】Excel 2007 に Excel 2003 に似せたメニューを追加する
http://blogs.timberlandchapel.com/blogs/timberlandchapel/archive/2007/09/06/office-excel-excel-2007-excel-2003.aspx

ダウンロードはこちら 

【Office 2007】TLC.com Excel 2007 用 「Excel 2003 互換メニュー」 アドイン ベータ
http://blogs.timberlandchapel.com/files/folders/officesystem/entry1544.aspx

インストールパッケージの更新を行いました。

Excel のリボン定義の一部がいつの間にか変更になったようで,一部リボン定義のロード時にエラーが発生します。

この問題に対処した新しいパッケージを用意いたしました。

既存のベータパッケージをアンインストールして,新しいパッケージを導入してください。

大変お手数をおかけいたします。

powered by TimberLandChapel

Posted by timberlandchapel | with no comments
Filed under: ,

Community Server を 2007 にアップグレードしたわけですが,自前日本語化ファイルの問題点を修正してからはよく動いてくれているようです。

が。。。

水面下では,ハンドルされない例外がけっこう発生して,ログにたまっていました。

ここでは,中でも深刻そうな2つのエラーに対する情報と対処をまとめておきます。

ここで紹介する対処法は,現在 TLC.com サイトに適用して経過をみている最中です。ご自分のサイトに適用する際には,充分検証した上で行ってください。これらの対処法を適用した結果について,TLC.com は一切責任を負いかねます。

■エラーその1

エラーメッセージ:パディングは無効なので、削除できません。/Padding is invalid and cannot be removed.

例外タイプ:CryptographicException

【所感】

おそらく ViewState の暗号化・複合化に際して発生しているエラーなのですが,どうも原因がよくわかりません。

「思い出泥棒の泥棒日記」
http://blog.livedoor.jp/chikara191919/archives/50809446.html

という方のサイトでは,ロードバランス時の問題として報告されています。

ただ,このエラーが発生するのが,どうもトラックバックスパムのような異常に大きなポストバックに反応しているように見受けられます。

実際の一番の対策は,IP フィルタリングなのかもしれません。

【対策】

ひとまず,上記のサイトで紹介されていた,<machineKey> の固定を試みています。

【経過】

<machineKey> の固定を行った後も,いくつか同様のエラーが発生しているようです。やはり,トラックバックスパムの対策を強化したほうがよいのかな。。。

 

■エラーその2

エラーメッセージ:入力文字列の形式が正しくありません。

例外タイプ:FormatException

【所感】

1.検索ロボットが巡回をしてくるたびに発生しているようです。

/themes/default/search/indexpostlist.aspx に何か問題が。。。これも根本がよくわかっていません。

ToDotNet

http://todotnet.com/archive/0001/01/01/7472.aspx

では,直接は関連が薄そうですけど,検索ボット関連の記事だったのでひとまず対策をしてみます。

(しかし,CS 2007 だとデフォルトブラウザの上書きで対策しているような気がするんですが。。。)

2.追記

http://forums.asp.net/t/934913.aspx

ここでは,検索ボットが .axd をクロールする際に起こっているようだと議論されています。

【対策】

ブラウザ定義ファイル

http://msdn2.microsoft.com/ja-jp/library/ms228122(VS.80).aspx

ブラウザ定義ファイルを Yahoo Slurp と Googlebot 用に作成して経過を見ています。

robots.txt

で .axd ファイルのクロールを禁止して経過を見ています。

【経過】

現在経過を見ています。indexpostlist.aspx のソースを読んだ方がよいかな

(追記)ブラウザファイルの定義だけでは対策としては不十分なようです。

powered by TimberLandChapel

シナリオと要件

[Microsoft Office] は,[Office 2007] のリリースに際して画期的な UI の革新を行いました。
[リボン] と呼ばれる,従来よりも大きなアイコンで,「結果志向」のメニュー配置を目指したインターフェイスが採用されています。

この [リボン] ですが,使いなれてくると
「ソフトウェアの中で,どんな機能系統として設定されているか」ということを理解していないといけない [メニュー] 形式より
「今何をしたいのか」,「何を操作したいのか」に集中していることでけっこう使い勝手がよいと思います。

しかし,

リボンの中で自分の使いたい機能を探していませんか?

特に [Office 2003] 以前から Excel をある程度使い込んでいた方に多いと思うのですが,
「Office 2003 では [ツール] にあったアノ機能はどこいった?」
という経験はありませんか?

せっかくの結果志向インターフェイスも,機能を探してあっちへこっちへクリックして探していてはだいなしです。

そこで,

以前のメニューで覚えている機能はそのまま見つけられた方がよい

というコンセプトで,Excel 2003 形式のメニューをアドインとして作成しました。

この記事は,
Microsoft Excel 2007 に基づいて記述しています。

Excel 2007 向け Excel 2003 形式互換メニュー

まずはイメージでご覧ください。

interop00

互換メニューは,[Excel 2007] の [COM アドイン] として,[リボン] 内の1つのタブとして追加されます。
[互換] タブの中に従来と同じような形式でメニューを作成しています。
[互換] タブを利用することで,今までの感覚にしみ込んでいる「何がどこにある」を利用することができます。

ダウンロードはこちら

インストール手順

Excel 2007 向け Excel 2003 形式互換メニューのインストール手順をまとめます。

interop01

インストールパッケージをダウンロードします
    パッケージは [zip] 形式で提供しています。
    ダウンロードした [zip] ファイルを解凍してください。

interop02

[Setup.exe] を実行します
    互換メニュー自体のインストールを行う [msi] ファイルの他に,前提となるコンポーネントの設定を行うためのファイルが含まれています。
    [Setup.exe] を使用すると,前提コンポーネントを自動的にセットアップします。


  ヒント 
前提となるコンポーネント
互換メニューは [Visual Studio 2005 Tools for Office Second Edition] の [Office 2007 アドイン] として開発しています。このため,以下のコンポーネントが動作のために必要です。
  • .NET Framework 2.0
  • 2007 Microsoft Office プライマリ互換アセンブリ
  • Visual Studio 2005 Tools for Office SE Runtime
  • Visual Studio 2005 Tools for Office Language Pack
これらのコンポーネントが事前にインストールされていることが分かっている場合は,[msi] のみの実行でインストールを行うこともできます。

interop03

警告が表示された場合は実行を許可します
    発行元の登録は行っていません。

interop04

動作に必要なコンポーネントが表示され,使用許諾が表示されます
    インストールされるコンポーネントを確認して,[同意する] をクリックしてください。

interop05

[インストール] をクリックします
    [2007 Microsoft Office プライマリ互換アセンブリ] がインストールされていない場合のみ確認されます。

interop06

必須コンポーネントのインストール状況が表示されます。

interop07

[互換メニュー] 自体のインストールウィザードが起動します
    [次へ] をクリックします。

interop08

インストールフォルダを指定して [次へ] をクリックします

interop09

[次へ] をクリックしてインストールを開始します

interop10

interop11

10インストールが完了したら,[閉じる] をクリックしてウィザードを終了します

ここまでで,互換メニューのインストールが完了しました。

interop12

12Excel 2007 を起動して [互換] タブが追加されていることを確認します


  ヒント 
アドインの設定を確認する
[互換] タブが表示されない場合は,
[Excel のオプション] > [アドイン] の中で [COM アドイン] の設定を確認してください。
同様に
[Excel のオプション] > [セキュリティセンター] > [セキュリティセンターの設定] > [アドイン] の設定を確認してください。

interop12

interop12 

powered by TimberLandChapel

Workflow Foundation の環境を再構築しようと,ダウンロードセンターから Windows SDK をダウンロードしなおしました。

が,

この SDK のファイル 1.32 GB のけっこうなサイズをしています。どこでエラーを起こしたものか,ダウンロードしたファイルが破損していたようです。

SDK コンポーネントのインストール中に 「cab ファイルの破損によるエラー」 で停止しちゃいました。

久しぶりのダウンロードエラー?

ダウンロードしなおすとして,ハッシュのチェックをしておこうかと思い,いつも使っていた MD5 の計算をするフリーツールを探すも。。。HDD のどこかに埋もれてしまって見つからず。

せっかくなので,かねてからインストールしようとは思っていたものの,特段急を要さないので放置していたツールを導入

HashTab Shell Extension by Cody Batt

http://www.beeblebrox.org/index.php

Windows の機能をちょろっとだけ拡張して,ファイルのプロパティにハッシュ値を並べたタブを追加してくれます。

1.32 GB を計算させてもそんなに待ち時間もなく,

  • MD5
  • SHA1
  • CRC-32

の3つのハッシュを計算してくれます。

ファイルの属性をみるためのプロパティに必要な情報を付加してくれる,というユーザービリティがよいですね。

先送りしていましたが,使ってみてかなり満足です。

written by TimberLandChapel

Posted by timberlandchapel | with no comments
Filed under:

東京都特別区は,平成20年から廃棄物最終処分場の延命を目的として,主にプラスチックの処理方法を変更します。

(情報ソースは,東京都のサイトより各特別区のサイトを参照したほうがよいかも。ソースが散逸しているのもよくないですが)

主旨を乱暴に2つにまとめてしまうと

  • プラスチック類の分別リサイクルを推進する
  • リサイクルできないプラスチック類はサーマルリサイクルする

ということになります。

埋め立てる量を減らすために,なるべくリサイクルする。それでもだめなら効率よく燃やして熱源再利用する。ということになります。

ゴミの分別回収・リサイクルに住民も参加して徹底している自治体にとってみれば,何をいまさら。という内容でしょう。

しかし,この2つの方針も全部の特別区が採用しているわけではありません。

サーマルリサイクルしか行わない。としている暴挙ともとれる方針を打ち出している特別区もあります。

まぁ,この是非を議論しようというわけではありません。

■TLC の住む地区では,来月10月からモデルケースとしてプラスチックのリサイクルが始まります。

そこで,TLC 家では,さらに1か月先行でモデルケースを適用し,プラスチック類を真剣に分別するとどのくらい燃やせないゴミが減るかを実験しています。

結果

■ほぼ捨ててしまうものがない状態

まぁ,これは少し言いすぎですが,容積にして 80 % 程度,重量にすると 90 % を超えるプラスチックを分別することができています。

ものはついでなので,

リサイクルマークを真剣に見て,現状特別区の収集体制でリサイクルできそうなものを全部やってみました。

http://www.city.seto.aichi.jp/organization/seiso/tokushuu/recyclemark.html

結果,生ゴミと汚れがひどくて洗浄できないプラスチック製品ぐらいしか捨てるものがない。

我が家では,とくにインパクトがあったのがでした。

チラシ,再利用可能な箱,紙袋,封筒と2週間ぐらい貯めて,同じ系統のものをまとめて紙ひもでくくる。とこれだけで燃やせるゴミ自体も半減。となかなかいい感じです。

さて,こうなってくると情報処理で何かできないか?

今回の分別の基本になったのが,各製品にほとんどあたりまえについている「リサイクルマーク」です。

なんですが,やはり製品によっては表記されていなかったり,各パーツにすべては書いていなくて,どこかにまとめて書いてあったり,となかなかいざ分けるとなると「わからない」という状況もありました。

加えて,基本路線は「各自治体の分別基準に従ってください」

そして,自治体の分別基準はてんでバラバラというわけです。

方や,情報を集約して取り出しやすく。というのは我々の情報処理がもっとも得意とするところですね。

ゴミの分別データベースというのは,世の中に既にいくつか存在しているようなのですが,これも意識のある自治体が単独で作成しているようなものがほとんどです。

しかも,Perl ベールの文字列データを羅列しているような簡単な作りがちらほらと。

データ集約するとなると,基本となる系列は2つあるのではないかと今回は考えます。

製品名-分別パーツのマッピングデータベース

分別パーツに対する自治体別分別基準の横断データベース

技術的な問題はほとんどないのですが,製品名情報を集約するとなると商標などの関係でなかなか難しいのかなとも思ってしまいます。(wiki 形式などにして責任分散させるというのも手でしょうか)

一方,分別基準の横断データベースは,「各自治体の意識の違い・対策の違い」を評価する・意識改善させるのにいいのでは? と思いました。

ただ,こういった事業はやはり個人だけでは利害関係の調整がうまくいかないでしょうから,しっかりとバックボーンをつくった方がよいのでしょうね。

NPO 法人として何かできることがあればいいのですが。。。

シナリオと要件

[Microsoft Expression Design] は Microsoft 社の新しいユーザーインターフェイスを提供するプラットフォーム向けの描画/デザインツールです。
http://www.microsoft.com/japan/products/expression/expression-design/default.mspx

[Expression Design] はベクター画像を描画する機能を前面に押し出して提供されています。公式サイトには機能概要や FAQ なども用意されていますが,まだまだ情報は少ないのではないでしょうか?
方や,ベクター画像に造詣が深い方だとすんなりと使える機能セットになっているんでしょうか?

今回は,4コマの色塗り程度にしかグラフィックツールを利用していない TLC が,「野生の勘で [Expression Design] を使ったらこうなった」を何回かに分けて報告しようと思います。
画像デザインにあまり慣れていない開発者視点で解説していけるといいですね。

この記事は,
Microsoft Expression Design 4.0.2712.0 に基づいて記述しています。

TLC.com Community Stage のヘッダー画像を作成してみた

最初からベクター画像に手を出すとハードルが高い気がしたので,最初は TLC.com のヘッダー画像の合成をやってみます。

今まで描いてきたいくつかの画像をまとめて,TLC.com のキャラクタが散らばった画像を作成します。
仕上げに,Community Server のテーマにあるような上から下がってくるグラデーション効果を入れましょう。
こんなイメージの画像を [Expression Design] を使用して合成しいきます。

EXP01

新規ドキュメントを [カスタム] で作成します。
    今回は横長になるようにピクセルを調整しておきます。
    この辺はあとでトリムをかけるので適当なサイズでまずは始めます。

EXP02

合成する画像を貼り付けます。
    [ペイント] などのグラフィックエディタ上でコピーしたクリップボード内の画像を貼り付けることもできます。
    [エクスプローラ] から画像ファイルをドラッグアンドドロップすることでも貼り付けることができます。

ここでは,

  • キャンバスにいくつかの画像をちりばめる
  • 貼り付けた画像の角度を調整して模様っぽくアレンジする

といった風に作業していきます。


  ヒント 
[エクスプローラ] から D & D した画像のサイズ
[エクスプローラ] から直接ドラッグして画像を貼り付けると,キャンバスのサイズと画像自身のサイズとの比率にあまり関係なく引き伸ばされた状態で展開されてしまう印象があります。

貼り付けた画像のサイズ調整つまみを使用して適度な大きさに調整してあげましょう。

EXP03

左上の [選択内容] ツールをクリックします。
    現在選択している画像の隅に四角いアイコンが表示されます。
    この状態にすると,画像のサイズを調整したり,歪ませたり,回転させたりすることができます。

EXP04

画像を回転させます。
    四隅の■アイコンの少し下あたりにポインタをもっていくと,曲った矢印のアイコンに変化します。
    矢印アイコンの状態でドラッグすることで画像を回転させることができます。


  ヒント 
回転軸の調整
画像の回転を行う際の回転の中心は,[選択内容] ツールを使用してる状態で,画像の内部に表示されている白抜きの○アイコンです。
このアイコンもドラッグすることが可能で,回転の中心をずらすことができます。

EXP05

画像をちりばめる。
    2~4を繰り返して,画像をちりばめます

ここまでで,既定の [Layer 1] が完成します。
レイヤーは画像を重ね合わせていくための透明なシートのようなものです。

EXP06

レイヤーを追加します
    グラデーションを作成するためのレイヤーを追加します。
    右下の [レイヤ] パネルの左下,歯車のアイコンをクリックして,[新規レイヤ] をクリックします。

EXP07

EXP08

グラデーションをかける四角形を追加する
    ツールバーで [四角形] を選択して,下地の画像を覆うように描画します。

追加した四角形にグラデーションをかけて,下地の画像が適度に透けるように設定していきます。

EXP09

四角形をグラデーションで塗りつぶす
    [外観] パネル内の既定で「白地に赤い斜線」が表示されているタブをクリックします。
    このタブが四角形の塗りつぶしを調整する機能です。
    タブのすぐ隣に4つ並んでいる四角のうち [グラデーションの色] をクリックします。
    既定では黒から白へのグラデーションが設定されているので,カラーパレットの下に表示されているバーを使って色を変更します。
    今回は淡い青から白へのグラデーションを作成するので,黒い色が表示されているポインタをクリックしてから,好みの青になるようにカラーパレットをつかって調整します。

EXP10

グラデーションを透過させます
    下地の画像を透けて見せるために,四角形に透過を設定します。
    [外観] パネルの中で [不透明度] を 80 位に設定して,透過させます。

EXP11

10 グラデーションの方向を変更します
    既定のグラデーションは左から右へかけられているので,効果を回転させて上から下へ変更します。
    [外観] パネルの中で傾いた四角のアイコン [オブジェクトの塗りつぶしの移動,拡大縮小,回転,または傾斜] をクリックします。     [回転] を -90.0 に設定します。

EXP12

11 グラデーションを調整します
    既定のグラデーションだと少々薄い気がしたのでグラデーションを調整します。
    グラデーションの色を指定しているカラーバーに表示されている色の■と [境界] を表わしているポイントをドラッグして,好みグラデーションになるように調整します。


  ヒント 
調整している間にグラデーション境界が増えてしまう
グラデーションのカラーバーを操作している際に,バーをクリックしてしまうと [境界] が増えてしまいます。
境界を増やしてしまうと,縞模様が均等になりづらく,見た目が乱れやすくなってしまいます。
しかも増やしてしまった境界を簡単には削除できないようなので,クリックしてしまったらすぐ Undo して [属性] をもとに戻してしまった方がよいでしょう。

グラデーションを好みの色合いに調整したら完成です。

EXP13

12 画像をエクスポートする
    [Expression Design] で作成する画像は,ベクター画像になります。
    通常の画像として使用するためには,[エクスポート] してしまいましょう。
    [ファイル] から [エクスポート] をクリックすることで画像を保存できます。
    今回は [png] ファイルにエクスポートしました。

[Expression Design] は,いろいろな [モノ] をオブジェクトとして認識するので,「とりあえず配置してあとから調整する」というプラクティスが取りやすいような気がします。
ふつうのグラフィックエディタではレイヤーを何枚も何枚も重ねながらちょっとづつ処理していかなければならない作業が,とくに意識せずにできるようです。
次回からは実際にベクター画像を作成しながら,[Expression Design] の能力を引き出していきたいと思います。

Posted by timberlandchapel | with no comments
Filed under:

長らく放置していましたが,TLC.com Community Stage を

Community Server 2007 ベースにアップグレードしました。

障害報告は便宜的に「雑談フォーラム」をご利用ください

http://blogs.timberlandchapel.com/forums/17.aspx

■今回のアップグレードに関していくつか情報をまとめています。

今後もいくつか追加していく予定です。

これもいつからの仕様変更なのか正確には調べていません。

TLC.com の CS は 1.x → 3.0 (2007) とガツンとアップグレードしたためにぽろぽろと影響がでています。

このブログでは ← な感じの広告やアンケートシステムをサイドバーに表示するためにニュース欄を利用していました。

1.x のニュース欄には自由にタグを挿入できていたので,レイアウトも含めてかなり自由度の高い編集ができていました。

これが,2007 では <script> タグや <iframe> タグは通常の文字列としてサニタイズされてしまい,意図したとおりに表示されないばかりか,全体のレイアウトを破壊してしまいます。

KB:ニュース欄には高度なスクリプティングを行うタグはサニタイズされる

対策: 

アンケートが表示できないのも困るので,このブログではテーマ自体を改造して表示させています。

Theme/blogs/[ThemeName]/theme.Master ファイル内の 「NewsSidebar」 関連の記述の直下に直接 html ソースを挿入しています。

ここでのポイントは,

Theme/blogs/[ThemeName]/Skins

内に保存されている,該当箇所の Web コントロールのソースを直接いじってもうまくいかないということでしょうか。

みための改造を静的ソースでやってしまうためには,theme.Master を改造してしまうのが手っ取り早いようです。

※ theme.Master の改造はバックアップファイルを作成した上で,自己責任で行ってください。

TLC.com で利用する CS のバージョンを 2007 にしました。

この際に利用する言語ファイルを 2.1 向けのものから自分で改造したわけです。

言語のリソースファイルは大きくわけて次の3つの系統になっています

  • ユーザー向けのインターフェイスの言語
  • 管理者向けコントロールパネルの言語
  • サイトが送信するメールの内容に関する言語

このうち,メールのテンプレートになる「email.xml」 に罠が潜んでいました。とくに 2007 に限ったことではなく,もともとそういう仕様だたのですが,

メールテンプレート中にテキストテンプレートと HTML テンプレート書くため,

HTML テンプレートに自然と「<br>」タグを書き込んでいました。

KB 「言語リソース”email.xml” に<br>タグを挿入してはいけない」

現象:

email の送信時に言語リソースの xml 解釈で問題を起こし,ハンドルされない例外となるため,画面がエラー通知画面に遷移してします。

これは,フォーラムへの投稿・返信,コメントの投稿,PM の送信など,サブスクリプションメールや通知メールに関する動作が起動される箇所で発生してしまう。

エラー情報: 

x 行目にある開始タグ 'br' と、終了タグ 'div' とは対応していません。 行 y、位置 z です。

このエラーは 「コントロールパネル>レポート>例外レポート」 に報告されます。 「ハンドルされない例外を含む」 をチェックして表示するとよいでしょう。

まとめ

日本語リソースを独自に作成する場合は,html タグを編集している間についつい「<br>」タグを挿入してしまいます。

「email.xml」 内の <br> <br /> タグを検索して一括で除去してしまえば問題は解決します。