Monthly Archives: 2 月 2009

自分のサイト「素直研究所」

 私すなおは、しばらくドラゴン・ネットワークス株式会社からは離れることになるので、自分のサイトへのリンクを残しておきます。「離れる」と言っても、多分外からこのブログへ書き込むことはあるかもしれませんが。
 ちなみに自分のサイトは「素直研究所」。グーグルでこのキーワードで検索すると、今のところトップで自分のサイトの楽天ブログが引っかかってきます。そこにも下のようなバナーがありますので、それでもOKです。
私宛のメールもトップページから送信できます。

 Word Pressは<iframe>タグが使えるようである

 Word PressもFC2ブログも<iframe>タグが使えるようである。
ということは、<iframe>タグが使えるので、Google Mapが使えるということである。
下の地図は、ドラゴン・ネットワークス株式会社の周辺地図である。もともとの地図が良くなくて、会社の前の道が無いのは残念であるが、取りあえず使える。
大きな地図で見る
 Google Map APIを使うとJavaScriptなどを使って、もっとカスタマイズできるようである。但し登録してAPIキーを取得する必要がある。
詳しくは下記URL
http://code.google.com/intl/ja/apis/maps/documentation/index.html

Perl言語でiモード版のバスの時刻表を作ってみた

 ちょっと前にPerl言語の学習がてらに那須高原を走るバスの時刻表を整形して表示するプログラムを作成した話をこのブログに載せたが、今度はこの各停留所毎のバスの時刻表を携帯電話のiモードで表示するプログラムを同じくPerlで作ってみた。下のQRコードを携帯電話でスキャンしてインターネットに接続すれば表示できるはずである。
■バス停留所時刻表

 iモード版もWeb版も、同じCSVファイルを参照している。停留所名に~発とか、~着という名前が使われていて、それらを切り飛ばして表示しているのと、折り返し運転が1本のレコードになっているので、往路と復路の時刻を分けて表示するのにちと苦労した。これでちょっとはPerl言語が分かってきたような気がしてきた。

PDFを扱える安価で扱い易いライブラリは?

■PDFを扱える安価で扱い易いライブラリは?
 「電子署名の方法を考える」のブログで触れたが、PDFファイルは、電子署名や暗号化などのセキュリティの考慮がなされているので、アプリケーションから思い通りに作成したり、既存のPDFを加工(或いは更新)したいという要望は当然出てくる。拙作の印鑑印影作成ソフト「Stamp It!」も既存のPDFファイルを開いて、印影が押印されたPDFを出力するので、安価で(できればフリーウェアで)、扱い易いライブラリなどがないかといろいろ探してみた。
■iTextSharpとは?
 やはりPDF加工はビジネスになると思われているのかライセンス料が10万円以上のものが多い中、フリーウェアで扱い易いという要望に適うライブラリは果たして存在した。それはiTextSharpというソフトである。
 このソフトは、iTextというJAVAのライブラリをC#に移植したものである。.NET環境で動作するiTextにはiText.NETという同じJAVA版の移植版も存在する。こちらは開発者が氏原さんという日本人のため多国語処理に強く、日本語の情報が充実しているメリットがある。どうもこちらはVisual J# .NETの再頒布可能パッケージが必要なようである。
 対するiTextSharpは、そのような再頒布可能パッケージなどは不要で、C#やVB.NETから手軽に使えるといったメリットがある。
 
■iTextSharpをダウンロードする。
 iTextSharpは、SOURCEFORGE.NETで開発されており、同サイトのダウンロードページからダウンロードできる。このブログを執筆中でiTextSharpのバージョンは4.1.2だった。
 このダウンロードサイトには、ライブラリ本体(iTextSharpのdll)だけでなく、サンプルコードを収録したチュートリアル(iTextSharp.tutorial.01.zip)、中国語、韓国語、日本語用フォントのライブラリ(iTextAsian-1.0-dll.zip)なども存在するので必要に応じてダウンロードするのがよいだろう。
 さらにVectorには、iTextSharp クラスライブラリリファレンス(.chm 形式のヘルプファイル)があり、作者が書き掛けだったり、不明な部分もあるものの、日本語で書かれているため開発には大変役に立った。

C#でPCのMACアドレスを取得する方法

 C#でPCのMACアドレスを取得する方法には、色々あるようだが、iphlpapi.dllをコールするのが良さそうだ。但しiphlpapi.dllの出所がはっきりしないという説もあるのだが。取りあえず自分のマシン(Win2k Pro)では動作した。
 C#でdllを呼び出すには、事前にAPIの宣言が必要になる。
 Windows API は C 言語から呼び出せるように設計されていて、オブジェクト思考の立場から見れば、それは常に public static なメソッドなわけである。またC# 言語では外部メソッドを呼び出す場合、必ず、メソッドに extern 修飾子を指定しなければなないので、iphlpapi.dllのSendARP関数を呼び出すには次のようになる。

using System.Runtime.InteropServices;
namespace Network_Sample01
{
public partial class Form1 : Form
{
    [DllImport("iphlpapi.dll", ExactSpelling = true)]
    public static extern int SendARP(int DestIP,int SrcIP, byte[] pMacAddr, ref int PhyAddrLen);

 このSendARPを呼び出してMACアドレスを取得するの例だが、フォームにtextBox1とtextBox2とbutton1を配置して、button1のクリックイベントに次のように処理を入れる。

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        IPAddress addr = IPAddress.Parse(textBox1.Text);
        byte[] bytMacAdr = new byte[6];
        int len = bytMacAdr.Length;
        [...]

電子認証の方法を考える

 印鑑印影作成ソフトを作っているのだが、その印鑑を間違いなく本人が押印したということを証明するのは意外に難しい。Excelなどで作った申請書に上司が自分の印影画像を貼り付けて承認するという図はよくある光景だとは思うが、簡単に偽造されてしまうということは想像に難くない。
 PDFファイルについてはどうだろう?Excelとあまり変わらないと思われるかも知れないが、意外に信頼性はアップするかもしれない。
 PDFには、画像を貼り付けるときの属性でAnnotation(注釈)というプロパティがある。場合によってはここにURLを貼り付けてやることも可能である。このURLを認証サーバー宛にして、押印者を特定するIDと押印日付をポストすると言う方法で、その認印の信頼性を保障するという方法なら意外といけるかも知れない。
 例えば、下図のPDFファイルのAnnotationは、コンピュータのMACアドレスと押印日付・時刻をポストするように印影イメージに付加したものである。

 もちろんこのPDFに押印したときに、本人が押印したことを認証サーバーに通知してやる必要があるのだが、オフラインのときはせめてイベントログに残しておくとか、オンライン時に認証されていない認印をサーバーに通知するという作業が必要だとは思う。実は自分の作成した「印刷印影ソフト Stamp It!」は認証サーバーへの通知部分は除いて、既にこの辺りまではプログラムに実装されている。
 ところでダイヤルアップ接続時の場合はMACアドレスってどうなるのだろうか?イーモバイルの場合はどうだろうか?PCを世界で唯一無二と識別させるのはけっこう難しい。

C#でGhostscriptを使ってPDFのページイメージをJpegファイルに保存する方法

 Ghostscriptは、PDFファイルなどの画像ファイル変換には大変有益なソフトだが、いかんせんコマンドラインから実行しなければいけないというのが最大のネック。
 このGhostscriptを扱いやすいように画像変換ソフトなどのGUIのアプリケーションにして活かせないかと考えてみた。それをC#で書いたらどうなるのかというと、先ずはコマンドライン上のパラメータも含めて全て外部アプリケーションを起動するやり方で呼び出せば良いというわけだ。例えば下の通り

// — Ghostscriptによるpdf=>jpg変換
// — 対象PDFパス
string strPdfPath = "C:\\Work\\Test001.pdf";
// — Ghostscriptのパス
string strGSPath = "C:\\gs\\gs8.63\\bin\\gswin32c.exe";
int intFirstPage = 1; // — 先頭ページ
int intLastPage = 5; // — 最終ページ
Process extProcess = new Process();
// — 起動するGhostscriptのパスを指定
extProcess.StartInfo.FileName = strGSPath;
extProcess.StartInfo.Arguments = " -dSAFER";
extProcess.StartInfo.Arguments += " -dBATCH";
extProcess.StartInfo.Arguments += " -dNOPAUSE";
extProcess.StartInfo.Arguments += " -sDEVICE=jpeg";
// — 解像度指定
extProcess.StartInfo.Arguments += " -r72";
// — 出力ファイル名
extProcess.StartInfo.Arguments [...]