2011年10月31日月曜日

InPrivate フィルターを IE 起動時にオンする方法

1.レジストリをいじる。

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Safety\PrivacIE]
"StartMode"=dword:00000001
(StartModeはなければ作成する)

2.IEを起動するのに使用するショートカットを別途作成し、「-private」のスイッチを追加する。
InPrivate
リンク先を以下の様にする

"C:\Program Files\Internet Explorer\iexplore.exe" -private

2011年10月27日木曜日

iTextを利用してJAVAでPDFファイルを作成する

現在のWebシステムにおいて帳票の出力を行う場合、PDF形式を用いるのがベターな選択肢と思います。
一般的なオープンソースのライブラリとして「iText」が有名で、「JAVA iText」で検索するとたくさんのサンプルソースがヒットします。
しかしながら、2011年現在ではそのサンプルソースが古くなってしまい、そのままコピーペーストしても動かないことがあります。
2011年現在で動作するサンプルコードを掲載致します。

iTextのライブラリを以下のサイトよりダウンロードして下さい。
http://itextpdf.com/
日本語を表示させるには「iTextAsian.jar」も必要です。
http://itext.svn.sourceforge.net/viewvc/itext/book/lib/itext-asian.jar?view=log

1.[WEB-INF]-[lib]にライブラリをコピーして下さい。
itext2

2.[プロジェクト]-[プロパティ]から[Javaのビルド・パス]を選択して、[ライブラリー]タブから[外部JARの追加]ボタンをクリックし、上記のライブラリを追加して下さい。
itext1

3. 以下のソースを実行してブラウザ内でPDFファイルが表示されればOKです。

package testServlet;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfWriter;

public class hello extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();

        try {
            // 出力先を指定し、文書をPDFとして出力
            Document doc = new Document(PageSize.A4, 50, 50, 50, 50);
            PdfWriter pdfwriter = PdfWriter.getInstance(doc, byteOut);

            Rectangle pageSize = doc.getPageSize();
            pdfwriter.setBoxSize(
                    "art",
                    new Rectangle(36, 50, pageSize.getWidth() - 50, pageSize
                            .getHeight() - 36));

            // 日本語フォントの設定
            Font font = new Font(BaseFont.createFont("HeiseiKakuGo-W5",
                    "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED),18);

            Font font_red = new Font(BaseFont.createFont("HeiseiKakuGo-W5",
                    "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED), 18);
            font_red.setColor(BaseColor.RED);

            // ヘッダー・フッター設定
            pdfwriter.setPageEvent(new PdfPageEventHelper() {
                //ヘッダーのフォント
                Font font_header = new Font(BaseFont.createFont(
                        "HeiseiKakuGo-W5", "UniJIS-UCS2-H",
                        BaseFont.NOT_EMBEDDED), 10, Font.ITALIC);

                //フッターのフォント
                Font font_page = new Font(BaseFont.createFont(
                        "HeiseiKakuGo-W5", "UniJIS-UCS2-H",
                        BaseFont.NOT_EMBEDDED), 9, Font.NORMAL);

                @Override
                public void onEndPage(PdfWriter writer, Document document) {
                    Rectangle rect = writer.getBoxSize("art");

                    //ヘッダー表示
                    Phrase header = new Phrase("ヘッダー", font_header);

                    ColumnText.showTextAligned(writer.getDirectContent(),
                            Element.ALIGN_LEFT, header, rect.getLeft(),
                            rect.getTop(), 0);

                    //フッター(ページ)表示
                    Phrase page = new Phrase(String.format("- %d -",
                            writer.getPageNumber()), font_page);

                    ColumnText.showTextAligned(writer.getDirectContent(),
                            Element.ALIGN_CENTER, page,
                            (rect.getLeft() + rect.getRight()) / 2,
                            rect.getBottom(), 0);

                }

            });

            // 出力開始
            doc.open();

            // 出力するPDFに説明を付与
            doc.addAuthor("作成者");
            doc.addSubject("iTextサンプル");

            // 文書に要素を追加
            doc.add(new Paragraph("おはよう", font));
            doc.add(new Paragraph("こんにちは", font_red));

            // 出力終了
            doc.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }

        // ブラウザへの出力
        response.setContentType("application/pdf");
        response.setContentLength(byteOut.size());
        OutputStream out = response.getOutputStream();
        out.write(byteOut.toByteArray());
        out.close();
    }
}

2011年10月25日火曜日

SQLServer2005のDataフォルダを規定値から変更したい

後から変更出来ますが、インストール時にあらかじめ設定しておいた方が気持ちが良いです。
「インストールするコンポーネント」ダイアログで「詳細設定」をクリックすることで、参照先を変更可能。
その際、変にフォルダを作らず単純に「D:\」を選択。
そうすると、「D:\MSSQL.1\MSSQL」と作成されます。

ASP.NET セキュリティ例外エラー

--------開発環境--------
開発言語:Visual Studio 2008/2005 VB
Microsoft .Net Framework 2.0
OS: Windows Server 2003 R2
DB:SQL Server 2005
Team Foundation Server 2008をインストール済み
このような環境下で自作のWebアプリをアップすると以下の様なエラーが発生してしました。
----------------------------------
セキュリティ例外
説明: このアプリケーションはセキュリティ ポリシーで許可されていない操作を実行しようとしました。このアプリケーションで必要なアクセス許可を取得するには、システム管理者に相談するか、構成ファイルでアプリケーションの信頼レベルを変更してください。
例外の詳細: System.Security.SecurityException: 型 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' のアクセス許可の要求に失敗しました。
----------------------------------
Team Foundation Server 2008が入っていないサーバーだと問題ない・・・。
いろいろと調べていたら、SharePointServiceをインストールされている環境だと発生するらしいことが判明。

対処方法
アプリケーションのweb.config
<system.web>内に
<trust level="Full" originUrl=""/>

IISのリダイレクト

開発環境と本番環境が別サーバーになっていて、アンカータグを絶対パスで書いてしまった場合、そのまま本番環境へ持って行くと、リンクをクリックした際、開発サーバーへ飛ばされてしまう。

アンカータグを相対パスで書き直せば良いが、数が多いと大変。
苦肉の策として、IISのリダイレクト機能で対処する事が出来る。

IISの設定方法
IISで新規にWebサイトや仮想ディレクトリを作る。

その作成したWebサイトや仮想ディレクトリのプロパティを開き、「ホームディレクトリ」を以下の様に設定する。

IIS

重要なのはリダイレクト先のパラメータ

$S
URLをリダイレクト先に反映。

$P
パラメータをリダイレクト先に反映。

パラメータがなければ?$PはなくてもOK。

$Sと$Pの間には?が必要なので注意。

詳しくはMSのサイト参照の事。
http://support.microsoft.com/kb/324000/ja

2011年10月20日木曜日

EclipseでのJDBCドライバを使用したSQLserver2005接続方法

【1】「Microsoft SQL Server 2005 JDBC Driver 1.2」のダウンロード
 1. Microsoft Download Centerからダウンロードします。ダウンロードサイトはこちら
 2. ファイルの解凍先を「C:\Program Files\Microsoft SQL Server 2005 JDBC Driver」に変更して[Unzip]をクリック。

【2】eclipseにて、プロジェクトにjarファイルを追加
 1. [パッケージ・エクスプローラー]でプロジェクトを右クリックし、[プロパティー]から[プロパティー]ダイアログ表示。
WS000005

 2. [Javaのビルド・パス]を選択して、[ライブラリー]タブから[外部JARの追加]ボタンをクリックし、[JARの選択]ダイアログ表示。
WS000010

 3. 「C:\Program Files\Microsoft SQL Server 2005 JDBC Driver\sqljdbc_1.2\jpn\sqljdbc.jar」を選択して[開く]ボタンをクリック。
WS000011

 4. [ビルド・パス上のJARおよびクラス・フォルダー]の一覧に「sqljdbc.jar」が追加されたことを確認して[OK]。
WS000012

 5..[WEB-INF]-[lib]にライブラリをコピーして下さい。
SQL_JDBC

【3】 データベースの接続確認
* メインメソッドに以下を記述し実行して、コンソールに「接続成功!!」が表示されたら成功。

   //データベース名、ユーザー名、パスワード
   String strServerName = "SQLServer";
   String strDBName = "TestDB";
   String strUser = "sa";
   String strPassword = "";

   //コンソールに「接続開始」を表示
   System.out.println("接続開始");
   try
   {
   //JDBCドライバを指定
   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
   //接続開始
   Connection objCon = DriverManager.getConnection(
                    "jdbc:sqlserver://" + strServerName + ":1433;" +
                    "databaseName=" + strDBName + ";" +
                    "user=" + strUser + ";" +
                    "password=" + strPassword);

   //コンソールに「接続成功」を表示
   System.out.println("接続成功!!");
   }
  catch(Exception objEx)
  {
    //コンソールに「接続エラー内容」を表示
    System.err.println(objEx.getClass().getName() + ":" + objEx.getMessage());
  }

2011年10月19日水曜日

証明書サービス、インストール時の注意点

はまったのでメモ。

ADのグローバルカタログを設定していないと、「エンタープライズルートのCA」がグレーアウトして選択出来ない。

Search Server 2008 ExpressによるNotesDBの検索

社内にNoetsDBとファイルサーバーを横断的に検索出来るサイトが欲しい!!
出来ることなら無償のソフトがないかなと思っていたところ、「Search Server 2008 Express」にたどり着きました。
http://www.microsoft.com/japan/enterprisesearch/default.aspx

NotesDBの検索方法については、こちらで紹介されています。
http://technet.microsoft.com/ja-jp/office/sharepointserver/cc952469.aspx#NotesDomino_with_Search

Office SharePoint Server 2007のドキュメントですが、Search Server 2008はこれのサブセットなので、問題なく動作します。
ただ、注意しなければならないのは、検索キャッシュです。
例えば、「機密情報Field、Managerロールには見せるがだが、ロールなしには見せない。」と言ったケース。
機密情報Fieldもしっかりキャッシュされるので、権限がない人間はFormで機密情報見られなくても、キャッシュで見れてします。

その辺を上手く運用でカバー出来れば非常に面白いソフトではないでしょうか。

プロセッサ: 2.5 ギガヘルツ (GHz) (最小)
メモリ: 2 ギガバイト (GB) RAM (最小)
とシステム要件が少々高いのが難点です。(今時だとこのくらい大したことないのかな?)

2011年10月18日火曜日

JAVAからAccessへの接続 (2)

JAVAでAccessに接続するにはJDBC-ODBCブリッジを使用します。

JAVAはunicode、ODBCはMS932(S-JIS)の文字コードがデフォルトですので、
一工夫しないと日本語文字が表示されなかったり、文字化けしたりします。

接続構文と日本語対応構文を組み合わせて載せておきます。

//JDBCドライバのロード
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

//日本語対応処理
java.util.Properties prop = new java.util.Properties();
prop.put("charSet", "SJIS");

//データベースに接続
Connection con = DriverManager.getConnection("jdbc:odbc:Test",prop);
Statement smt = con.createStatement();
ResultSet rst = smt.executeQuery("SELECT * FROM test");

//データベースを切断
rst.close();
smt.close();
con.close();

JAVAからAccessへの接続 (1)

Windows環境では、JAVAからAccessへ接続する際、まず「ODBCデータソースアドミニストレータ」へ登録する必要があります。(それ以外の環境では不明です)

【1】スタートメニューからコントロールパネルを開き、「管理ツール」を開きます。WS000000

【2】データソース(ODBC)を開きます。
WS000001

【3】「追加」をクリックします
WS000002

【4】「Microsoft Access Driver (*.mdb)」を選択し、「完了」をクリックします。
WS000003

【5】データソース名に「Test」と入力します。
*このデータソース名をJavaプログラムの中で使います
WS000004

【6】データベースの「選択」をクリックします。
WS000006

【7】プログラムで使用したいmdbファイルを選択したら、「OK」をクリックします。
WS000007

【8】データベースに使用したいmdbファイルが選択されていることを確認したら、「OK」をクリックします。
WS000008

【9】ユーザーデータソースに「Test」が追加されたのを確認したら、「OK」をクリックします。
WS000009

【10】管理ツールを閉じて終了です。

2011年10月16日日曜日

JAVA認定資格取得への挑戦 No.1

この度、自分自身の時間が出来、だらだら過ごすのにはあまりにもったいないと考え、OJC-Pの勉強を始めました。
まずはこちらの本を購入しました。

2697B

いままでちゃんとオブジェクト指向のことを勉強したことがなかったので、最初の「オブジェクト指向の基礎」を読み終えたとき、漠然としか分かっていなかったことがきちんと整理整頓された感じになりました。

【雑感】ThinkPadX40にWindows7を入れてみて

Aeroは動かないにしても、やはりPentiumM1.00GHzのThinkPad X40にはWindows7は荷が重いです。
すこしでも体感速度を向上させるため、ビジュアル効果は最低限にし、UIもXP風にして利用しています。

ThinkPad X40 デスクトップ

スタートメニューは「Classic Shell」というソフトを使ってカスタマイズ。
http://www.forest.impress.co.jp/docs/review/20100219_350140.html

タスクバーはこちらを参考にクイック起動を復活
http://pasofaq.jp/windows/taskbar/7quicklaunch.htm

タスクバーのアイコンの大きさを小さくすることにより、XPとほとんど一緒になりました。

何とか実用に耐えられなくも無いのですが、一つ一つの動作にパワー不足を感じます。
ですので、結局今はXPに戻して使っています。

ThinkPad X40にWindows7(無線LAN編)

Access Connectionsも使えますが、問題は無線LANのドライバがMS標準なので、Fn+F5での制御出来ません。
外へ持ち歩くとき、無線LANをオフにしたい時って結構あるかと思います。
その都度、デバイスマネージャを開いて、オフにするのは面倒です。
そこで思いついたのは、Devconによる制御です。

参考にしたのは、こちら
http://blogs.technet.com/junichia/archive/2009/04/30/3233230.aspx

Windows Driver Kit7.0.0をインストールする必要があります。
ToolのみでOKです。
http://www.microsoft.com/japan/whdc/DevTools/WDK/WDKpkg.mspx

それで、以下のバッチファイルを作成。

 Devcon disable "PCI\VEN_168C&DEV_1014&SUBSYS_833117AB&REV_01"

ダブルコーテーションで囲ってある部分は各マシン毎に違います。

これのバッチファイルで無線LANをオフに出来ます。
オンにするときは、Access Connectionsから接続すれば、自動でオンになります。

ThinkPad X40にWindows7(グラフィックドライバ編)

ビデオドライバは残念ながら自動ではインストールされません。
こちらを参考にインストールしました。

http://www.thinkpad-club.net/modules/xhnewbb/viewtopic.php?topic_id=3243&amp;start=0

若干パフォーマンスが良くなった気がします。(あくまでも主観ですのあしからず)

ThinkPad X40 デバイスマネージャー

ThinkPad X40にWindows7

物は試しでインストールしてみました。
強引にSSD(MTRON MSD-PATA3018-ZIF2)へ交換していることもあり意外と使えそうです。
起動はXPの時より速い感じです。XPの時はAccess Connectionsの起動が異常に遅かったのですが、とても速くなりました。

ThinkPad X40 パフォーマンス

ビデオドライバ以外は、標準ドライバが用意されています。
無線LAN等、一部のドライバはWindows Updateで入手出来ます。

2011年10月15日土曜日

NotesSQLに関するドキュメントとサンプルコード

NotesDB に格納されている文書を集計したいときなど、SQL文が使えると便利なんだろうなって思うときが時々あります。
いろいろと調べていたら、NotesSQLというソフトの存在を知りました。
しかし、いざ使ってみようと思うと日本語の情報が全然ない・・・。
あるとき、Microsoft Office SharePoint Server 2007のサイトを見ていましたら
Microsoft Office SharePoint Server 2007 自習書 Notes/Domino アプリケーション資産の活性化
というのを発見。早速PDFをダウンロードしてみたら、日本語でNotesSQLの使い方が懇切丁寧に書いてありました。
しかも使い方だけでなくダウンロード方法も解説してあります。
ConnectionStringの書き方に少々苦戦しましたが、無事VB.NETからアクセス出来ました!!
ちょっと凝ったSQL文を書くと、すぐにこけるのでNotes側のViewで工夫することがポイント。(特にINNER JOIN等での結合は出来なかった。)

まさか、ライバルから情報を入手出来るとは夢にも思っていませんでした。

サンプルコードは非接続型で、GridViewにバインドするコードです。
WindowsForm、WebFormどちらでも可。もちろん、接続型でももちろん接続可能。

サンプルコード(VB.NET)

Dim strConn As String = "DRIVER={Lotus NotesSQL Driver (*.nsf)}; " & _
                                                                          "Server=ServerName; " & _
                                                                          "Database=DbName.nsf; " & _
                                                                          "Uid=UserID; " & _
                                                                          "Pwd=password; "

Dim strSQL As String
Dim dtAdapter As Odbc.OdbcDataAdapter
Dim dtSet As DataSet

strSQL = "SELECT * FROM ViewName" ' 単純なWHERE句なら指定可能

dtAdapter = New Odbc.OdbcDataAdapter(strSQL, strConn)
dtSet = New DataSet
dtAdapter.Fill(dtSet, "board")

GV_Board.DataSource = dtSet.Tables("board")
GV_Board.DataBind()

ブログ再起動

JUSTBlogから始めたブログ。突然の停止後、Windows Liveの方へ引っ越ししたが、こちらも停止。

Windows Liveの移行先のWordPressにはなじめず、bloggerへやってきました。

4つ目のブログなので、4.0

MicrosoftのOSも4.0から使い物になるという俗説があるが、自分のブログははたしてどうなることやら。

.NETとDomino/Notes以外にJAVAも始めたので、その辺の備考録もアップ予定。

頓挫しないよう、頑張らねば。