2007/02/28

Blogger Widgetで「続きを読む」を自動化。-- 2

本来であればBlogger Templateのマニュアルなりを読んでから取り掛かるべきなんでしょうが、いつもの如く現物合わせでやっています・・・。

Blogger TemplateStyle設定を書き加える事で指定したタグ範囲内を、単独で表示する時とその他の場合で表示/表示を切り替える事で実現するのが常道のようで、これは現在のBetaの取れた新しいBloggerの枠組になる以前に使われていた方法の転用的な物です。この辺りに関してはクリボウさんのページが時系列含めて分かりやすいかと思います。

ですが投稿された記事のURLを変数的な形で<A>タグの参照先として指定できないため、ルールを理解した上で記事のURLを推測するか、投稿後に確認したURLを再編集で書き込む必要があります。

そこで前回のPostではJavascriptを使い描画時に「続きを読む」リンクを動的に作成する機能をWidget内に組み込みました。


他に組み込んでいたScriptとの競合でイベントが無限ループに突入してStack over flowが発生というブラクラのような状態になってしまったりとかって問題もありましたが、現在私の環境(テンプレート)では稼動中です。

今は次の段階として他のテンプレートでの動作に関して検証しています。

基本的に私のテンプレートでのDOMは以下のように構成されています。

<DIV class=”post-body”>には記事本文が、続く<DIV class=”post-footer”>以下に記事へのURLとなるLink<a title=”permanent link” class=”timestamp-link”>で記述されています。

これにより現在のコードはこの”timestamp-link”というclass名を含む<a>タグを探してその内容を利用していますが、そもそもclass名は書式指定であり、これに頼る探索では汎用性に欠けるようです。

そこで他のサイトをInspectorで調べて回ったのですが、<a>タグのtitle=”permanent link” 指定はかなりの割合で設定されているようです。


上記のようにpost- body<div>タグに対してpost-footer<p>タグとなっていますが、記事へのリンクは要素 title=”permanent link”とされた<a>タグ内で記述されています。

つまりはpost-body (本文)のタグと同列のclass=”post-footer”で指定されたタグ内から要素 title=”permanent link”とされた<a>タグからURLを取得するようにすると、現状のかなりのテンプレートでも動作するかと思います

現在はこのような変更と合わせてLoad時間を短縮できるようにコードに手を入れています。またCurrentなソース(Javascipt)はここからダウンロードしてください。

続きを読む・・

2007/02/27

Blogger Widgetで「続きを読む」を自動化。

Bloggerでの「続きを読む」の方法ですが、アンカーの張り方(取得の仕方)がどうにも納得がいかない。

一度投稿してURLを見つけてから再度編集するって作業がどうにも面倒だったので、自動的にRead Moreなタグを挿入するWidgetを作ってみました。

本当はBloggerの機能自体でキレイにやる方法があるんじゃないかと思ったりもしてるんですが、どこを探してもその方法は見つからない。

基本的にはクリボウさんのページとか、Envyさんページを参考にはして、手書きで真面目にアンカー張れば動くようにはなったんですが、<div class="fullpost">は許せても、<div class="readmore">の書き方には納得がいかなくて。

そんな感じで、他の方法を検索したりするのが面倒になって作ったのがこのWidgetです。(導入済み)



Widget内でテンプレート的に設定できるようになっていますので、タグの文面の変更や画像を使う事も可能で、動作は InternetExplorer7 Firefox2.0 Opera9.10で確認しました。

強引なScriptですので制約があります。「続きを読む」機能は複数記事を表示している時に働いて欲しい機能ですが、その際に各記事の後ろに<span class="post-timestamp">で括られた記事単体を示すURLにAnchorを張った<a>タグが必要だという事です。


この制約は「続きを読む」で使うURLをその部分から取得しているからです。いくつのBloggerなサイトを見てみましたが、いくつかのサイトでは使われているようです。これは設定されているTemplateに依存するのですが、BloggerのTemplate書式・構造にそんなに詳しくないので未だ検討中ではあります。

と、ここまで書いて記事タイトルとかから取ってこようと変更中。

キーワードはpermanet link。これを<a>タグのTitle要素に入れているケースがかなり多いみたいのなので、そちらからURLを引っ張るように調整してみます。

興味のある方はどうぞご自由にお試しくださいというか、まて続報 !! (笑
※もっと簡単なやり方があるよとかって話が来そうで怖いですが・・・。

続きを読む・・

2007/02/26

Dojo -- JSONPに挑む。 【白帯編】

取り敢えずAjaxなライブラリとして使い始めたDojoですが、使い方というか流儀みたいなのがそれなりに理解出来たような気がするので、次の一歩としてJSON、それもCross Domainな呼び出しをする為にJSONPをと思っています。

JSONPServiceも他所様のサービスではなく自前で提供をと考えていますので、Server側のArchitectureも合わせて考慮する必要があり、PHPというのがPrivateな利用面ではMajorityなんでしょうが、個人的な好みからASP.NETで挑みます。

Sever側からはベタな手法としてRespone.Write()で手作りとかってのもあるんですが、ここはオシャレなLibraryを使ってみたいと思い、今回はJayrockを使ってみました。


JayrockLGPLでライセンスされており、単純な入出力のFormatter/Parserという面の他に、HTTP Handlerを利用したJSON-RPC的な実装も可能なかなり強力なLibraryです。

今回は取り敢えずJSONPな出力をするaspxなページを取り敢えず作ってみました。Jayrockのサンプルから引用したコードを新規のaspx.csに貼り付けた感じですが、JSONPの動作/雰囲気を掴むにはこんなもので十分かと。

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using Jayrock.Json;
using Jayrock.Json.Conversion;

public partial class jsonpTest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        string callBackFunctionName = null;

        if (Request["callback"] != null)
        {
            callBackFunctionName = Request["callback"];
            Response.Write(callBackFunctionName + "(");
        }

        using (JsonWriter writer = CreateJsonWriter(Response.Output))
        {
            writer.WriteStartObject();              //  {
            writer.WriteMember("Name");             //      "Name" : 
            writer.WriteString("John Doe");         //          "John Doe",
            writer.WriteMember("PermissionToCall"); //      "PermissionToCall" :
            writer.WriteBoolean(true);              //          true,
            writer.WriteMember("PhoneNumbers");     //      "PhoneNumbers" :
            writer.WriteStartArray();               //          [ 
            WritePhoneNumber(writer,                //            { "Location": "Home",
                "Home""555-555-1234");            //              "Number": "555-555-1234" },
            WritePhoneNumber(writer,                //            { "Location": "Work",
                "Work""555-555-9999 Ext. 123");   //              "Number": "555-555-9999 Ext. 123" }
            writer.WriteEndArray();                 //          ]
            writer.WriteEndObject();                //  }
        }

        if (Request["callback"] != null)
            Response.Write(");");
    }

    private  void WritePhoneNumber(JsonWriter writer, string location, string number)
    {
        writer.WriteStartObject();      //  {
        writer.WriteMember("Location"); //      "Location" : 
        writer.WriteString(location);   //          "...", 
        writer.WriteMember("Number");   //      "Number" :
        writer.WriteString(number);     //          "..."
        writer.WriteEndObject();        //  }
    }

    private  JsonWriter CreateJsonWriter(TextWriter writer)
    {
        JsonTextWriter jsonWriter = new JsonTextWriter(writer);
        jsonWriter.PrettyPrint = true;
        return jsonWriter;
    }
}

ちなみにaspxファイルはこんな感じてデフォルトで作成された物から最初の一行以外は全部削ります。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="jsonpTest.aspx.cs" Inherits="jsonpTest" %>

そしてクライアントになるhtmlファイルはこんな感じです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <script type="text/javascript" src="../dojo/dojo.js"></script>
    <script type="text/javascript">
        
        dojo.require("dojo.io");
        dojo.require("dojo.io.ScriptSrcIO");
        dojo.require("dojo.json");

        function testJSONP() {
        dojo.io.ScriptSrcTransport.bind({
          url: 'http://ilgvkteq.sv05.fsdotnet.net/ngm/jsonpTest.aspx'
          ,transport: "ScriptSrcTransport"
          ,jsonParamName: "callback"
          ,load: function(type, data, event, req) {
            showResult(data);
            }
        });
        }

        function showResult(result) {
            document.getElementById('output').innerHTML =dojo.json.serialize(result);
        }
    </script>
  </head>
  <body>

    <input type="button" onclick="testJSONP()" value="Test JSONP"/>
    <br /><br /><br />
    <div id="output"></div>

  </body>

</html>

このBloggerPost(記事)にはScriptを埋められないので、動作してる画面はこんな感じ。



ボタンを押すと、



かなり手抜きなテストですが、SeverからのResponseJavascriptObjectとして捕らえられている事とCallBackの指定の仕方が分かるので、白帯編としてはこれで十分かと。

この次は茶帯編として、JSONPで得た結果からGridの描画とかをと思っています。

続きを読む・・

2007/02/25

Feedburner.jp に異変??

つい先週にRSSFeedburner.jpから配信するように変更したのですが、今朝になってチェックしたら異変が・・・・。



燃えています! って購読者は0になってます・・・・・。


前日の夜に何気なく見たときは購読者数は50台だったと思うのですが、何があったんでしょうか・・・。少なくとも私は購読してるのに(

よく見ると管理用のUIに変更があったみたいで、今までFeedbruner.jpでは見れなかったようなログとかまで見れるようになっていますので、そのあたりの変更時にカウントがリセットされたのか機能しなくなったのかしているようです。

まぁUIがどう変更されてもいいし、講読者数がリセットされても別に構わないのですが、Feedの設定を見てみると・・・。

出力フィードの設定がFeedburner.jpではなくてcomと表記されています。実際には変更なくfeed.feedburner.jpから配信さてますから表記ミスだとは思います。多分本家のソースをそのまま流用して更新してないんでしょうね。

特に騒ぐような事でもないのですが、中の人の苦労を想像しながら観てるのも・・・って悪趣味ですね(笑

続きを読む・・

2007/02/23

Access2007 実はDAOが新バージョン。

前回まででAttachment型を見ていってDAOのバージョンが上がっているという事がわかりました。このバージョンというのがちょっと微妙な感じで、明らかにマイナーレベルの数値が上がっても良いぐらいの拡張はされているのに、このAccess2007で採用されたDAOには正式なバージョン番号が付いていないようなんです。

DAOの最新バージョンは3.6だったと思うのですが、Access2007ではそれすら参照されていません。

VBAコードエディタを開いて参照設定を見ても、DAO(Microsoft Data Access Object)への参照は設定されていません。

だけれどもVBAのコードからはDAOが参照(利用)出来るという変な状態なんですが、オブジェクトブラウザで見てみるとDAOはどのライブラリを参照してるかが判ります。


上記のように、ライブラリ名称こそDAOですがその実態は、”Microsoft Office 12.0 Access database engine Object”となっています。略すならADEOとかでしょうか?

ちなみにDAO3.6だはこんな感じでした。


素直にDAO 3.7とかにしなかった理由が何であるのかはわかりませんが、Access2007以降の製品でDAOCOM Objectとして利用することは無いでしょうし、脱COM的な流れの中ですあるとかそんな事が理由かも知れません。

今回のDAOの拡張されたポイントですが、オブジェクトブラウザで見た限りオブジェクトで目に付いたのはRecrodset2Field2ぐらいです。Field2に関してはメゾッドして SaveToFileLoadFromFileが、プロパティとしてComplexTypeIsComplexが追加されています。Recordset2にはプロパティとしてParentRecordsetが追加されています。


オブジェクト

新インターフェイス

備考

Reocrdset2

Property ParentRecordset As Recordset

Read-Only

Field2

Property ComplexType As ComplexType

Read-Only


Property IsComplex As Boolean

Read-Only


Sub LoadFromFile(Filename As String)



Sub SaveToFile(Filename As String)


ComplexType

Property Fields As Fields

Read-Only


この他にも定数やEnumerate(列挙型)がいくつか追加されているようですが、大きくはやはり添付ファイル型・複数値型を扱う為の拡張であるこの辺りがメインだと思います。今後Multi-valued filed(複数値型)に関してもう少し突っ込んでみようと思いますが、添付ファイル型は複数値型の一形態なんだって事がここまで分かるかと思います。

今回のAccessで使われているACEDAO.DLLに関してはWeb上にもあまり情報がありません。Googleで検索してもほとんどヒットしませんし。これをDAO12.0とかって呼ぶのはちょっと無理があるんで、何か素敵な呼び名を付けてあげなくてはとか思ってたりしますけど。

余談ではありますが、日本ではコンプレックスって劣等感みたいな意味で使いますが、劣等感そのものは英語ではInferior complexって表現になり、complexって単語にはネガティブな意味合いはまったくありません。その辺を理解しないで英文を読んでしまうと間違って変な解釈してしまったりしますのでご注意を。

続きを読む・・

2007/02/21

Access2007 新機能 Attachment型 -- 5

Attachment(添付ファイル型)も、このように扱ってくると色々と深い所が見えてきます。

個人的にはそれを扱うためのコントロールが力不足じゃないとか思っているのですが、今回はそれを補完する形で。

まずは前回PostOpenボタンを作ったけど、ファイルをどうやって開くって事に関してです。


リストボックス(実際はコンボボックス使ってます)に添付ファイル名を列挙したり、添付ファイルの数を表示する事は、標準のAttachment Controlのプロパティを参照する事で出来ました。

ですがそれ以外のファイルを開く・保存するようなメゾッド/プロパティをコントロールが持っていない為に、そのままではAttachment ControlManagementダイアログを介しての操作しか出来ません。

そこでコード(VBA)で何とかしようという話ですが、コントロールにそれらのメゾッド/プロパティが無い以上、コントロールには何一つ頼れません。ですのでRecordsetを直接扱う必要が出てきます。

そして今回のAccessの更新で重要な事にDAO(Data Access Object)がバージョンアップしているという事があります。この拡張されたDAOの機能を使うことでAccess2007は添付ファイルなり複数値データを扱えるようになっているのです。(DAOのバージョンアップの扱いに関しては別Postで書きます。)

実はAttachment(添付ファイル型)のフィールドにはRecordsetが値として入っているのです。テキストや数値などではなく、Object的にRecordsetValueとして入る/入っています。

ですので、当該FieldValueRecordsetとして扱い、後は今回追加されたメゾッドあるFieldオブジェクトのSaveToFileメゾッドを使いファイルを保存する事が出来ます。(ファイルを開くは、指定ファイルに保存さえ出来れば、特に問題なく従来と同様の方法で可能です。)

具体的なコードはこんな感じです。

ファイルに保存先に使ったTemporaryディレクトリを取得する為に、Microsoft Scripting Runtimeに含まれるFileSystemObjectと、ファイルを関連付けられたアプリケーションから開く為にWindows APIShellExecute()を使っていますが、基本的に難しい事はしていません。

FormにバインドされているMailsテーブルのRecordsetは常に現在扱っている/表示しているレコードにカーソルがありますから、そのレコードの添付ファイルが格納されているattachments FieldValueRecordset2のオブジェクト変数であるrAttachmentsに代入しています。(参照をセット)

後はその添付ファイルの入っているRecordsetのカーソル位置をリストボックスで選ばれた物と同期させて、FileData Field(ファイルの中身がバイナリで入っている)を新メゾッドであるSaveToFileでファイルに保存しています。

このSaveToFileメゾッドですが、VBAでコード書いてる時に自動的にIntelliSense(インテリセンス- プロパティとかメゾッドの候補を表示してくる)には出てきませんが、気にせずに使ってください。

大体こんな感じでファイルを開く機能は実現できました。実際には一時ファイルフォルダにZ存されたファイルは放置されてしまうので消したりとかする方法を考慮しなくていけないのですが・・。Attachment Controlの管理ダイアログボックスから開くと、一時ファイルはインターネット一時ファイルフォルダ(Temporary Internet File)に保存され、またダイアログボックス自体がモーダルで表示されるので、削除や告知したり出来ていますし。

次はバージョンアップされたDAOに関してとRecordset2などのオブジェクト、そしてAttachment型のレコードセットに関しては書く予定です。

続きを読む・・

2007/02/20

Access2007 新機能 Attachment型 -- 4

日本語だとAttachment Fieldは添付ファイルフィールド、Multi-Valued Fieldは複数値フィールドになるみたいなですね。この添付ファイルフィールドに関して前回に続いて見ています。

まずはAttachment Filedを扱うコントロールであるAttachment Controlに少し手を入れて見たいと思います。

手を入れるとは言ってもOCXというかActiveXなカスタムコントロールを作るような時代でもなく、取り敢えず添付ファイルの数とかを表示してみます。

あまり難しい事は考えず、FormCurrentとイベントで表示を書き換える感じで。

こんな感じで表示されます。


Management Dialog Boxが色気ないので、添付ファイルをリストするコンボボックスとそれを開く為のボタンを付けてみました。


まだこの段階ではAttachment ControlHidden(Visible=no)で残してあり、その機能を使っています。


コードはこんな感じです。

ここで問題になるのが、ファイルを如何に開くかという部分なんですが、開く方法といっても問題になるのはAttachment Control Objectからはファイルを取り出す(保存とか)方法が無いみたいです(当然開く方法も無い)。あくまでも管理用のダイアログボックスを経由する必要があるようで、メゾッド/プロパティにそれら操作の為の物がありません。表示を切り替えるためのForwardBackがある程度です。

ですので、ファイルをコードから開いたり・保存したりするにはDAO(Data Access Object)を操作する事が必要になります。

これらAttachmentに対するDAO関連に関しては、次のPostで。

続きを読む・・

2007/02/19

Access2007 新機能 Attachment型 -- 3

Microsoft Office2007を使い始めて早数ヶ月。やっと正面から取り組んでいるような気がする今日この頃ですが、まずはAccessから弄っています。本来ならばβの段階でやっとけって話なんですが、Accessに望む機能というか期待と実際の新機能のバランスと、精神的というか時間的なゆとりとかモチベーションみたいなものが低い・少ないみたない理由からか今になって色々見ています。

ちなみにManualとかDocumentって後から必要な部分だけ読むタイプであり、試行錯誤しながら理解を深める(素晴らしい表現だ・・)のが好きだったりしますので、既出のことを今更何を言ってるのみたいな事も多いかもしれません。このBlogも仕事柄人に説明したりするときに必要な知識とか資料の作成のベースとするべく、雰囲気というかノリで書いてます。

本題のAttachment型に関してですが、今回はVBAからの扱いを見てみました。まずDAO.DataTypeEnumに定数dbAttachment = 101 (&H65)が、それとObjectとしてのAttachment型とそれを扱うコントロールが追加されされた形になります。Access2007に関してMSDNの当該ページを見ると、追加されたObjectって今回は6個のみなんです。そのうちの3つはマクロ関連(TempVar, TempVars, MacroError)なんで、マクロ嫌いの私としてはあまり関係なく、残りはImportExportSpecificationImportExportSpecifications、そしてAttachmentとなります。

注意すべきなのは、AccessFormを作りRecordsetBindした場合、Form上にそのRecordsetの各Field毎にAccessField Objectが定義されるという事です。これがどうしたって言うと、MailsテーブルをBindした場合、Mailsに含まれるFieldであるAttachmentsは、me. Attachmentsでアクセスできるのですが、それと同一名称のコントロールであるAttachmentsも存在しうる、むしろWizard等でアクセスに任せた場合同一であるって事です。

上記のような場合は、me. Attachmentsにアクセスした場合、それはAccess ObjectであるAttachmentコントロールになります。

上記のようにAttachment(Accessのコントロール)です。

ですが、このコントロール名を変更すると、

上記のようにAccessField型、つまりはFormBindされているRecordsetFieldになります。

実際にはコントロールとFieldは常にBindされており、値(Valueプロパティ)は同一ですし、相互に反映されるので値のみを扱っている場合は問題は少ないのですが、プロパティやメゾッドを扱う際にエラーになったりして混乱したり。

Formを作成する際に半ばAccess任せでコントロールまで作成して、不要なコントロールを削除とかって事をする場合があるかと思いますが、後からFormに手を入れたりしてコントロールを扱ってるのか、それともFormBindされたAccessFieldを扱っているのか良くわからないコードが結構あったりします。オブジェクトの名称を変更している場合、その変更した本人ですら中途半端になってコード上で双方をその場の思いつきのように使っていたりとか。

シンプルにAccessを使っている場合は問題は少ないのですが、Control全体をループで回して操作(Enable/Disableとか)したり凝った機能を後日追加しようとしたりすると頭が痛くなったりしますので、注意して貰いたいです。まぁMicrosoftもこの辺りなんとかしてくれないかとは思うんですが。

なんか本題からそれてきてしまったので、続きは次回のPostで。

続きを読む・・

2007/02/18

Access2007 新機能 Attachment型 -- 2

前回から引き続きAccess 2007でのAttachment型に関して少々ですが試しています。今回はForm上での扱いに関してです。

私の環境はOS(Microsoft Windows XP)Microsoft Office 2007も英語環境なので、画像も基本的には英語版のものであり日本語版とは表記が違いますが、雰囲気だけでも伝わればとか思います。



まずはFormの作成です。個人的にはDesignモードで作るほうが好みなんですが、Form作成Wizardだとかを使って見るとAccessで出来る事・新たな機能に対する発見とかあったりするんで、気まぐれでWizard任せで作ったりしてます。今回はAccess2007ですので、まずはメニューの構造・操作法からして変更されてますからちょっと違和感あります。

Create->Formsの中にはForm, Multiple Items, Split Formというのが使えと言わんばかりに左側に並んでいます。日本語だとそれぞれ単票・連票・複合みたない感じでしょうか。まぁとりあえず単票的なイメージで良いのでFormを選択するとテーブルが一つしかない為か、直後にFormが作成されLayout Viewが開きます。このLayout ViewAccess 2007になっての新機能だと思いますが、実データを表示しながら各レイアウトを調整できるのでRapid的な時は結構便利です。



更にこの部分に関して述べるならば、新機能としてLayout機能が追加されていてこの作成された各フィールドはStacked Layoutでグループ化されていたりします。私はまだしっくりと使いこなせていないので、Layoutを外して従来に近いやり方で並べなおしています。



本題のAttachment型のフィールドですがコントロールとしてのAttachment型が追加されています。

Picture Controlと同じようなプロパティが並んでいますが、唯一違うのが”Display As” です。これは”Image/Icon” , “Icon”, “Paperclip” が選べます。Image/Iconは添付が画像の場合はそれを表示し、Iconの場合は画像であろうが全てIcon(拡張子に従った)で表示し、Paperclipはデータシートビューのときの同じでクリップマークです。

Attachment型のフィールドには複数ファイルが入れられるのですが、このコントロールでの表示は常に一個であり、コントロールにフォーカスが当ったときに表示されるNavigation Barで操作します。ですがIconはダブルクリックしても関連アプリから開くのではなく操作常にManagement Dialog boxを経由する形になりますので画像場合以外はあまり意味がないかと。



ダブルクリックもしくはNavigation Bar上のクリップIconからManagement Dialog Boxが開きます。操作はデータビュー上での物と同一です。

必要な機能そ網羅されていますが、色気がないかなと。



取り敢えずはAttachment Controlでは添付されていファイルの件数やファイル名を表示できない様なので、次はこれらをVBA等を絡めて実現出来ないかという辺りを見てみようかと思います。


続きを読む・・

Access2007 新機能 Attachment型

前回からの流れでAccess 2007Multi-valued fieldに関してちょっとテストしてみました。

私の環境はOS(Microsoft Windows XP)Microsoft Office 2007も英語環境なので、画像も基本的には英語版のものであり日本語版とは表記が違いますが、雰囲気だけでも伝わればとか思います。


まずはAccess で空のデータベースを作成(test.accdb)してAttachment型のフィールドを試すべくMailを取り込み用風のベタなテーブルを作成。

あまり余計な事は考慮せずに一つのテーブルで単純に取り込む感じです。評価の対象である添付ファイルを格納するフィールドのみを複数形(Attachments)にしてるぐらいです。メールをデータ構造的に評価するならば足りないフィールドや複数形にすべきフィールドも他にもありますが、それらはまた次のMulti-valued fieldそのものの評価でという事で。


Design ViewからDatasheet Viewに切り替えるとこんな感じです。

目に付くのはAttachmentフィールドのカラム名が記号(クリップ)になっていて、データフィールドには記号+(0)のように書かれている部分です。


実際に入力していくとMailDate(Date/Time)の部分でカレンダー(Date Picker)による入力が出来ます。

実際にはこのフィールドDate/Time型でありMailの受信なり送信日時になるので時刻入力出来ないので不適切ではあり、フィールドのプロパティの変更できるのかと見てみると、日付用(for Date)を使うもしくは無し(Never)しか選べないというのがちょっと寂しいような。

この辺りはユーザーによるAdd-onによる拡張とか出来たら便利なんでしょうけど、無理そうな予感。


主題のAttachment型のフィールドはどのように入力するのかというと、フィールドにフォーカス等を移したらスペースキーかダブルクリック、もしくは右クリックで”Manage Attachments”を選ぶ事で管理用のダイアログボックスが表示されます。

必要機能は網羅されているのですが、色気の無いダイアログボックスです。なんかバランス悪くないですか?

ちなみに追加・削除や開く・保存等の全ての操作はここから行います。コード(VBA)から操作する方法は別途試してみたいと思います。追加できるファイルは実行ファイルやスクリプトを始めセキュリティ上問題となるようなファイルは不可となっています。また拡張子による判断ではありますが、圧縮されているファイル(.zip .cab .jpeg)は再度圧縮しない等の処理も行ってくれてるようです。

次はこのテーブルをFormReportにした際にAttachment型フィールドの扱いを見てみたいと思います。

続きを読む・・

2007/02/17

Access2007 新機能を評価してみる。

メインで使っているPCにMicrosoft Office 2007 というかAccess 2007をインストールして既に数ヶ月が経っているのですが、あまり真面目に評価してなかったので、少し前向きに色々とチェックというか検討してみようかと思ってます。

とりあえずMulti-Valued Fieldに関して色々と見ています。(日本語での表記は何になるんでしょうね?)

実際にテスト的に試してみると、このMulti-Valued FieldってのはAttachment型 つまりは添付ファイル型を実装するのに必要だったのかなとか思ったりしました。

Access 2007の方向性としては、各種データソースから自在にデータを取り込み管理・分析するって感じかとも思うんですが、対象をE-mailとした場合、宛先なり添付ファイルに関しては複数になる場合を考慮する必要があり、それにはテーブルを正規化してリレーショナルな形にする必要があるのですが、この場合だと単純にフラットなテーブルを取り込むような簡単な操作・コーディングでは出来ません。

この辺りを簡単にWizardとか使ってクリック&クリックな感じの操作でユーザーが簡単にデータ管理用のテーブルなり簡易な操作を組み立てられるようにする為に作られた機能なんではないかと。要するにAccessそのものは他のRDBMSに引けを取らないきちんとしたデータ構造を定義・管理し運用できるのですが、そのハードルをもう少し下げる必要があったと。

実際にはAttachment型(添付ファイル型)に関しては、従来のOLE-DB型だとかいう亜流のBlob(Binary Large Object)に対してファイルを保管するという意味では高効率になるように設計されているので、それに対するアドバンテージは大きいと思います。

この一週間ぐらいで、Access 2007に対してというかこのあたりに関してサンプルみたいなものをちょっと試してみようかと思います。

( Microsoft Office そのものに関しても色々とやりたいのですが時間が無いなぁ・・・)

続きを読む・・

2007/02/16

パスワード忘れました・・

以前に取った写真を何となくパスワード付きでZipで圧縮してたんですが、パスワードをすっかり忘れてしまいました。

何種類かのパスワードを発見する為のツールがあるのは知ってたんですが、速度的にもツライんだよなとか思ってたら、Pika Zip 素敵です。速いです。しかもPika Zip Network Center ってのがありまして、複数台のPCを使って総当り的に解析できたりしてとっても便利。雰囲気としてはRC5-64の Crackingみたいな感じですね。

日本語のパスワードとか設定していると大変みたいですが、自分で付けたパスワードですので英数字+記号程度ある事は間違いないので、試してみましたが、一晩で8文字のパスワードが無事に発見できました。

逆に言うと8文字のパスワードって弱いなぁって感じもするんですが、後から設定見てみると小文字のみの指定とかしてるんで、大文字・小文字とか記号・数字を混ぜるって大事だなぁとか思ったりも。

日本語パスワードは強さ的にはあるんでしょうけど、入力時にMaskingされた状態で間違いなく入力できる自身はあまりないですし、適当な文字の組み合わせとかって覚えづらいんじゃないかとか、そうかといって単語とか使うと辞書攻撃に弱そうとかも思うんでやる気は無いですが。

ちなみにローカルなファイルに対しての解析だから、この程度で解析できるのであって、ネットワーク上のパスワード等は試行回数の制限等があるので、こう簡単には出来ません。だからといって安易にして良いって事でもないですが。

続きを読む・・

2007/02/15

Windows Vista で NASに接続

顧客廻りのサポートをしてる人から、緊急案件だという事で電話が回ってきました。Windows VistaからNASの共有フォルダーが開けないけど、何か知ってるかと。

知ってるかと言われたら、それは去年の秋に嵌った記憶がある。Firewallか? とかパスワード違うのかとかで時間を浪費した記憶が。でもVISTAを常用してないし、そんな設定は初期に一回しかやらないので覚えてない。

だからと言って後はお前が調べろよでは仕事に支障が出そうだったので、サクっと検索。

こんなページ とかこんなページを見つけて思い出した。Windows Vistaはセキュリティ強化という面からNTLMv2 しか初期設定では通さないですよね。

これを説明してOKなんですが、日本語では通用しないので英語で伝えるわけですが「LAN Manager 認証レベル」って英語版だとどうだっけって悩む。LAN Mangaer Authentification Levelとかって伝えても、そんなもの無いと。

仕方が無いので、VISTA入りのThinkpadを立ち上げて確認。LmCompatibilityLevelだよとか伝えながら、英語サイト検索すれば良かったと気が付いた・・・。

そこで日本語検索結果でヒットしたページの内容にアレって気が付く。上記に上げたページどっちも微妙に違ってない? というかやり過ぎっぽくないですかって。


2007/03/12 レジストリ変更用のファイルを作ってみました。


LmCompatibilityLevelは古いSamba ServerからWindows 2003 Serverに移行するためにアクセスする際に、今回と同じように変更した記憶がある。そのときは古いSambaはNTLM認証に対応してなくて(LAN Manager認証レベルのみ)、Windows 2003 ServerがデフォルトではNTLM認証しか通さなかったから、レジストリエディタでこの値を0にして対応してたような記憶が・・。

でもこれはSAMBAのバージョンが2.2よりも遥かに古い(バージョン忘れましたけど)だったからであって、NASになって店頭で売ってるような物が「LAN Manager認証レベル」しか使えない・使ってないとはケースの方が少ないような気がします。確かMAC OSにだってNTLMを理解したはず。なので、この「LAN Manager認証レベル」というのは通さない・使わない設定にした方が良いかと。

このLAN Mangaer認証のパスワードはネットワーク上をハッシュでやり取りされて平文では流れないのですが、計算方法に問題があって短めの場合かなり簡単に解読できてしまいますので。

ましてやこれはレジストリの設定なんで接続が出来てたら、その後にセキュリティレベルを上げようなんて気の利いたことを思って、NASとかが新しくなったからとかで変更する人はいないでしょうし。 安易に設定を変更してレベルを下げすぎるのは、ちよっと不味いんじゃないかと。

MyComジャーナルとかって商業的なサイトでも、 とかってページでレジストリの値を0にとかって安易に書いてるけど・・・。

LmCompatibilityLevelの値の解説までしてるのに、0にしましょうとかって書くのはどうなんでしょうね?

「利便性とセキュリティレベルの低下をトレードオフすることになりますので 」とかって但し書きがあるだけ個人サイトの情報よりはマシなんでしょうかね・・・。

それでLmCompatibilityLevelの値ですが、クライアント用途に限った場合は以下の様になっています。
  • LmCompatibilityLevel 値 0 : LAN Manager (LM) 応答および NTLM 応答を送信し、NTLM バージョン 2 (NTLMv2) セッション セキュリティは使用しません。クライアントは LM および NTLM 認証を使用し、NTLMv2 セッション セキュリティは使用しません。
  • LmCompatibilityLevel 値 1 : ネゴシエートした場合、NTLMv2 セッション セキュリティを使用します。クライアントは LM および NTLM 認証を使用し、サーバーでサポートされている場合は NTLMv2 セッション セキュリティを使用します。
  • LmCompatibilityLevel 値 2 : NTLM 応答のみを送信します。クライアントは NTLM 認証のみを使用し、サーバーでサポートされている場合は NTLMv2 セッション セキュリティを使用します。
  • LmCompatibilityLevel 値 3 : NTLMv2 応答のみを送信します。クライアントは NTLMv2 認証を使用し、サーバーでサポートされている場合は NTLMv2 セッション セキュリティを使用します。
以上のようになっており、0にした場合はNTLMv2を一切使わない設定になってしまい、他のWindows XPやVista、そしてWindows 2003 Severに接続する際もNTLMまでしか使わなくなってしまいます。ですからLmCompatibilityLevelを2から試してみて(リブートが必要ですが)、確認してみる事をお勧めします。

少なくともLmCompatibilityLevel=1で普通のNASには接続できるはずですから。(Windows Vistaの初期値は3です。)

ちなみに LmCompatibilityLevelはレジストリのHKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa 配下にあります。

またWindows Vista Business, Enterprise, もしくはUltimateの場合は、ローカルセキュリティーポリシーの変更で対応可能で、この場合は"Send LM & NTLM - use NTLMv2 session security if negotiated"とかになるのですが、日本語版での表記は手元にないので、上記に挙げたサイトとかを合わせて参考にしてください。

それからLmCompatibilityLevelに関しては詳細はここを 参照して貰えればよいかと。

こんな感じで、トラブルとかに対応するのに検索とかで見つけたページ一箇所だけでは、なかなか完全な解決ってのは難しいんじゃないかと(このPostも含めて・・)。ですから検索時は複数サイトの内容を照らし合わせながらが良いかと。それとレジストリの操作や設定の変更に対する全ての結果に対する責任は自己責任でお願いしますって事で。(お約束)

それにしても日本の玄箱(KURO-BOX)とかって羨ましい。玄人志向って海外展開してくれないかなぁ~。

続きを読む・・

2007/02/13

Web 開発にcurlはどうでしょうか?

Web系の開発をしていると、ちょっとこのURL叩いてみたいとかって事はよくあるのですが、単純なgetであればブラウザでも代用できますが、結果がブラウザで表示されても判読不能なものや、putしなくてはって場合は汎用もしくは専用のツールを使う必要が出てきます。

この場合UNIX系の人だとcurlコマンド とか入れて使うんですが、この前Windowsしかない環境で何を使おうかなと探していたら、curlってwin32版もある んですね。

ちなみにWindows環境で必要になるのは、Win32 2000/XP Binary ってのになります。現在は7.16.0のSSLアリなバージョン無しなバージョン がDownload可能なようです。

SSLアリのバージョンを使用する場合は、この他にlibeay32.dlllibssl32.dllが必要になりますが、これらはDelegateさんの所からDownload とかしてくればいいんじゃないでしょうか。 ちなみに ssleay32.dll は libssl32.dllにリネームしてやればOKです

curlは表記的にはcURLと書くのが正しいみたいですが、これってかなり強力というか出来ること幅の広いツールなんで、いろいろと試してみると面白いかと思います。簡単な解説はこんなページがわかりやすいかも知れません。

認証関連はNTLMにまで対応してるし、cookieの保存とか設定まで可能なんで、バッチファイルでも色々な事が出来るんじゃないかと。Lib版もあるんでCで専用のコマンドとか書いて見るのも楽しいですし。

続きを読む・・

2007/02/12

HDD メンテナンス ツール

ちょっと知り合いのPCの調子が悪いとの事で見てきました。あくまでもPrivateな付き合いでの事ですが、良くこんな質問というかお願いみたいなのってありますよね。こんな風に出かける時には色々とツール類を持っていくのですが、その内容もちょっと変わってきました。

ハードウェア的なツールでは、Laptop PCとネットワークケーブル。それとUSB接続のFDDとDVD-ROMドライブとUSB-IDE変換のアダプタ。以前ですとシリアルケーブルとかもありましたが最近は使うことないので。その代わりにUSBなメモリ持つようになりました。

ソフトウェア的にはLinuxのLive boot するCDとDOSのFDD(古っ・・)、WindowsXPのCDってのが基本ではありす。この他にHDDのメンテナンス用にPartition MagicとNorton Ghostみたいな感じだったんですが、今時はその手はFreeな物があるようでそちらを利用しています。

まずはHDDの状態をチェックするための、Data Advisor 。 HDDをスキャンしてエラー等をレポートしてくれるんですが、無償で提供されているので愛用中です。

そしてPartitionを 変更する為に、GParted 。有償のPartion Magicですと他人のPCに使うにはライセンス的にも難しいというか高価なバージョンが必要になったりしますが、こちらはまったく問題ありません。そして対象PCにインストール不要のLive CDもISO Imageで 提供されています。

更にはNorton Ghostの代わりにGhost4Linux 。名前にはLinuxって付いてますがNTFSも扱えますので。

こんな感じでHDD関連のツールに関してはすっかりと置き換わってしまいましたが、滅多に使わないのに、有償のProductを年々バージョンアップとかって不経済な状態が解消されて、ちょっとHappyです。

続きを読む・・

2007/02/11

Office 2007でPDF出力

Microsoft Officeを随分と長いこと使ってきましたが、確か2003でよね、Office Document Imagingによる出力が付いたのって。

帳票の出力結果で顧客と話をするのにも、FAXで送ってもらったりしてたんで中々便利でいいなぁとか思ってんたんですが、Office 2007ではXPS(XML Paper Specification)へって流れのようですね。

それ以前もAdobe Acrobat入れれば良かったのですが、無料なAcrobat Readerと違って高価な製品ですし、多くの方はPrinter的な出力Onlyな使い方しかしない状況ではコスト的に割りに合わなかったんですよね。Adobe Acrobatには署名したり制限を設定してたりで、Officialな文章をReleaseするには必要な機能が網羅されていたりもするので、価格なりの機能はあるのですけどね。

ここ数年になって他社製のPDF Writerも出てきましたので、それらを使えば良いのですが、Microsoft Officeに代わりになる物が入っててくれて楽になったなぁとか思ってたんですが、もう仕様というか方針変更ですかって感じもしますが・・・。

Microsoftからの製品情報とかその他のサイトの情報でOffice 2007からはXPSPDF出力がサポートされるって話は知っていたのですが、OfficeをインストールしてもOffice Document Image Writerすらインストールされない。

再度セットアップを起動して、追加でOffice Document Image Writerはインストールできましたが(プリンターとして追加される)PDFとかXPSってどうやるんだろうというと。セットアップの何処を探しても見つからない・・・。

結局これらはAdd-inとして別途Microsoft からDownloadしてインストールってのが答えでした。

それではPDFの出力を見てみようと思ったのですが、出力方法がわからない・・・。

印刷メニューにも何か追加された形跡はなく、



Microsoft XPS Document Writerは追加されてますが、これで保存できるのはXPS形式のみです。



良く見てみたら、こんな所に・・。



もしかして、E-mail添付以外では出力出来ないのか? とか思ってたら、正解はSave As(別名で保存)にありました。



良く考えれば特殊な操作ではないのですが、ちょっと嵌りました・・・。

当然Office製品内からは全て対応しているようです。(Word, Excel, PowerPoint , Access)

多分プリンターとしてPDF出力するようなのをMicrosoftOfficeAdd-inとはいえ提供すると、世間から叩かれたりするんだろうな・・・。

続きを読む・・