Category Archives: 開発者の備忘録

日常の開発で忘れてしまいそうな些事を書き留めておく。

フリーのFlashオーサリングソフト Suzuka

 動きのあるホームページを作ろうと思うと外せない選択肢がFlashであろう。最近はちょっとしたホームページならFlashを使っていないサイトはないほどに使われている。Flashを使ったサイトを作ろうとしたら一番手ごろなのは、フリー素材。これを扱っているサイトを見てみると自分の要求に合ったようなFlashアニメーションが見つかるかもしれない。しかしいざオリジナルなFlashアニメーションを作ろうと思ったらなかなか大変である。先ず作成するソフト。本家本元はMacromedia社のFlash Mxというソフトなのだが、お値段が58,000円と、お手頃価格というにはちょっと高い。フリーで、またはシェアウェアでも安いFlashを作成できるオーサリングソフトはないかと探したらSuzukaというのがあった。特徴としては、タイムラインベースでFlashが作成でき、またAction Scriptが使えるので、マウスクリックやキー入力に対応するWebアプリケーションも作成できるようである。
 このソフトを使って自分のホームページのトップイメージ画像を作ってみた。アニメーション的には単純なのだが、30分ぐらいで簡単に作れてしまった。

 ホームページに設置した実際のFlashアニメーションは、下のバナーをクリックしてご覧頂きたい。
 なかなか良く出来たソフトだが、バージョンが0.8.1.0なのでまだまだ完成の域ではないということなのだろうか。今後のバージョンアップに期待したい。
■Suzukaの窓の杜紹介ページ
http://www.forest.impress.co.jp/lib/pic/video/flash/suzuka.html

携帯サイト用のカレンダー作成

 携帯iモード版のグループウェアを作ろうと考えている。グループウェアに最低限必要なものを挙げるとしたら、予定表と掲示板といったところだろうか。予定表といったら、カレンダー表示は欠かせない。そこで簡単なカレンダーを表示するPerlスクリプトを書いてみた。
 カレンダー表示で必要な関数は、先ず該当年月日は、何曜日かを求める関数である。

# ——————————————————————————
# Function : get_day_of_week()
# Parameter: $year:西暦, $mon:月, $day:日
# Return : 曜日番号
# Comment : 指定日の曜日番号を取得する
# ——————————————————————————
sub getDayOfWeek {
  my $year = shift; # 年
  my $mon = shift;  # 月
  my $day = shift;  # 日
  
  if ($mon == 1 or $mon == 2) {
    $year–;
    $mon += 12;
  }
  return ($year + int($year / 4) - int($year/100) + int($year / 400)
    + [...]

Windows 2000 で大容量ハードディスクを正しく認識させる

 自分は、Windows 2000 Professional をいまだに使い続けている。最近大容量ハードディスクに交換しようとして、YahooオークションでMaxtorの250GBのハードディスクを3800円で購入した。品物が届いて、そのハードディスクをUSB接続のIDEアダプタを使ってWindows2000のPCに接続したら、正しく認識してくれない。オークションで手に入れたものなので、ひょっとしてジャンクをつかまされたかとしばらくそのまま放って置いた。

 しばらくして、そのハードディスクを買ったのを思い出して、今度はWindows XpのPCで試してみたら、なんとちゃんと認識していた。ということはWindows 2000のシステムの方に、ハードディスクの容量の壁があるということだと想像がついた。
 ネットで調べてみると、どうも128GBか、137GB辺りで容量の壁があるようである。Windows 2000 で、Service Pack 4 がインストールされていればいいのかと思っていたら、それだけでは駄目で、下のようなレジストリの修正が必要だった。
■手順
1.スタートメニューから「ファイル名を指定して実行」を入力し、
  「regedit」と入力する。
2.レジストリエディタが起動したら以下のキーを参照する
  HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Atapi\Parameters\
3.右側の画面で右クリックして「新規」-「DWORD値」を選び、
  「新しい値#1」に「EnableBigLba」と入力する。
4.EnableBigLbaキーをダブルクリックして、「値のデータ」に「1」と入力する。
5.マシンを再起動する。

以上である

「印鑑印影作成ソフト Stamp It!」の通算ダウンロード数

 この間、、「印鑑印影作成ソフト Stamp It!」をベクターのライブラリ登録したが、公開ファイルリストを請求したら下のようなメールが来た。重複があったり、身内からのアクセスかもしれないが、通算のダウンロード数が16(2009/02/27時点)だった。多いか少ないかはわからないが、とりあえず試用してくれる人がいるのだと思った。
 まだ問い合わせやクレームのメールは無いのだが、ノンビリ見守っていようと思う。
—– ベクターからのメール ——————————————————————————
素直研究所様(ライブラリ作者番号 :PA0?????)
弊社インターネットサイト「Vector」へのご協力ありがとうございます。
ご要望いただきました、公開作品のリストをお送りいたします。
◆作者紹介のページ◆
http://www.vector.co.jp/vpack/browse/person/an040239.html
◆現在公開されているソフト◆
—-<ライブラリ作品番号:PS472706>—-
印鑑印影作成 Stamp It! 1.0
setupstampIt1.00.zip 09/02/19 2,515,800
概要:印鑑印影を作成し、PDFやExcelファイルに押印できる
通算ダウンロード数:16
http://www.vector.co.jp/soft/winnt/util/se472706.html
———————————————————————————————————

 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 [...]