2012年9月17日月曜日

NonStopIPDL Ver.0.0.1β を公開しました

 日本特許庁の公式検索サイト・IPDLで公開されている特許公報や審査書類を、ワンクリックで(ダイレクトに)開くプログラムを試験的に公開しました。
 『ちょっと気になった番号の特許公報を読みたい』『ちょっと審査過程を確認したい』などの、ちょっとした用途を想定しています。

 現状かなり荒削りな作りですが、バグや要望などありましたらコメント頂けると幸いです。

【おしながき】

  • 使い方
  • 公報番号の入力規則
  • 制限・仕様など
  • 既知のバグ
  • ダウンロード

【最初に】

 Windows8以外の場合、プログラムの動作に別途 .NET Framework4.0をインストールする必要があります。
 未インストール場合には、Microsoftの .NET Framework 4.0 のページよりダウンロード・インストールしてください。

【使い方】


  • 画面左端の特許公報の番号を入力してください。
  • 見たい書類のボタンをクリックしてください。
    • [公報] のボタンをクリックすると、公報のページを開きます。
    • [審査書類] のボタンをクリックすると、審査書類のページを開きます。

【番号の入力規則】

入力方法は、一般的な公報番号の記載法のほか、IPDLの入力法が使えます。
 例えば、特許公開公報2003-003123号であれば、以下のような入力が可能です。
  • 西暦-番号  (例: 2003-3213)
  • 特開西暦-番号 (例: 特開2003-3213)
  • A西暦-番号  (例: A2003-3213)
さらに、
  • 和暦(例えば、H12,平12など)の記載もOKです
  • 番号の後ろに「号公報」などの記載があってもOKです
  • 全角・半角はどちらでも/混在していてもOKです
  • 文字の途中に空白が入っていてもOKです

【制限・仕様など】

  • たぶん特許公開公報しか開けません
    • 特許番号や再公表番号などを入れるとエラーが出るかもしれません。
    • 対応する文献種別は要望に合わせて今後増やしていきたいと思っています。
  • 暫定的に、公報・審査書類のページをダイレクトに開ける回数を、
    1日あたり10回までとしています
    • 不正利用やバグによりIPDLに過負荷がかかることを避けるため
    • 11回目以降は、IPDLの検索サービス一覧のページを開きます
    • 開いた回数をカウントするため、ボタンクリック時にサーバ(activate4ipdl.appspot.com)にアクセスしています。PCの識別には、MACアドレスと日付に基づくハッシュ値を用いています。
  • 2012年10月31日まで利用可能です
    • それ以降は、使用できなくなります。
    • それまでに新しいVersionを作成・配布する予定です。

【既知のバグ】

  • Windows8 (IE10)では、公報のページをダイレクトに開けません。
    • 公報を開くためにはワンクリック余分に操作が必要です。

【ダウンロード】

 下記リンクからダウンロードしてください。

2012年9月15日土曜日

秀丸エディタでC#のコードを実行する

【まえがき】

普段使っているテキストエディタ (秀丸エディタ)の公式サイトで公開されていた ohtorii 氏作の


が便利だったので、紹介もかねて解説してみたいと思います。

【この記事のおしながき】


  • マクロの紹介
  • 使い方
  • マクロの実装内容
  • 小改良
  • 改良案

【マクロの紹介】


 マクロ名の通り、秀丸エディタで編集中のC#のソースコードを実行するためのマクロです。
 内部的には、ソースコードのコンパイルから実行までを行ってくれます。

マクロ実行例

 このマクロを実行すると 標準出力への出力結果を、秀丸エディタのアウトプット枠へ書き出してくれます。このため、コーディングから実行までの一連の流れをまでを、秀丸エディタだけで完結させることができます。特に秀逸だなと思った点が、

秀丸エディタで、編集中の内容(コード)を実行する

という仕様です。 このおかげで、ちょっと動作を確認したい、といったレベルのコードは、ファイルに保存すること実行できます。まさに、ワンライナーのスクリプトを書く感覚で、C#のコードを文字通り書き捨てることができます。
 また、個人的には、『 VisualStudio などの開発環境がインストールされていないマシンでも、気楽に C# でコードを書ける (*)』というのが嬉しいです。

 (*) マクロ内部で C#のコードをコンパイルするために呼び出している csc.exe(C# コンパイラ)は、 .NET Framework がインストールされていれば存在するため

【使い方】

マクロを実行する前に、一手間かける必要があります(*)。

(*) 必ずしも必要ではないのですが、デフォルトでは、マクロ内部で 64bit版 の .NET Framework 4.0のcsc.exe を呼び出すように設定されています。このため、当該.NET Frameworkがインストールされていない場合には、そのままではマクロを実行できません。

 マクロファイル (cmd_c#.mac) を開いて、ファイル冒頭箇所(37~42行目) をマクロを実行するPC環境に合わせて編集します。
 具体的には、コードの実行に用いる .NET Frameworkの Versionに合う行をアンコメントするだけです。なお、必要ない行は忘れずコメントアウトして下さい。

設定箇所 (32bit版 .NET Framework 3.5 を用いる場合)
作者の方が、あらかじめ各Versionのcsc.exeのパスを用意してくれているおかげでお手軽です。感謝。

【マクロの実装内容】

どうやってこの機能を実現しているのか気になったので、マクロの中身を読んでみました。
 コード量自体は多くないので、詳しくはコードそのものに譲るとして、ここでは概略だけを記しておこうと思います。

コードの構造

  • Main:
    • Main() 関数的なもの
    • 秀丸の設定変更
    • Start: を呼び出し
  • Start:
    • 実質的には、このマクロのMain()関数
    • GetTempFile: で、作成するcsファイル、exeファイルの絶対パスを取得
    • MakeFile: で、csファイルを作成
    • SpawnCompiler:で、exeファイルを作成
    • SpawnExe: で、exeファイルを実行
    • csファイル、exeファイルを削除
  • MakeFile:
    • 編集中の内容(コード)をコピーして、テンポラリファイルを作成
    • csファイルを作成
  • SpawnCompiler:
    • csc.exeを用いてcsファイルをコンパイル(exeファイルを作成)
  • SpawnExe:
    • exeファイルを実行
  • CreateDir:
    • フォルダを作成
    • テンポラリフォルダ内に、マクロ実行時に使うフォルダを作成
  • GetTempFile:
    • テンポラリファイルの絶対パスを取得
    • CreateDir: を利用
  • WriteOutput:
    • 秀丸のアウトプット枠に文字列を出力
    • マクロ内で発生したエラーを出力するために使用

処理の流れ

  • 秀丸で編集中のファイル内容をコピーして、テンポラリフォルダに csファイルを作成
    • テンポラリフォルダは、環境変数 tmpを参照
    • (サブルーチン GetTempFile, MakeFile)
  • csc.exe を用いて、テンポラリフォルダ内で exeファイルを作成
    • (サブルーチン SpawnCompiler)
  • 作成したexeファイルを実行して、出力を秀丸のアウトプット枠に表示
    • 標準出力、標準エラー出力の両方を出力
    • (サブルーチン SpawnExe)
  • 作成したcsファイル、exeファイルを削除

【小改良】

csc.exe のデバッグオプションが有効になるように、$g_exe に直接 /debug+ を書き加えました。
 (自分の場合は横着をして $g_exeに書き加えましたが、今後の拡張を考えマクロにちゃんと手を加えるのであれば、SpawnCompilerサブルーチン 内にデバッグオプション用の変数を用意した方が良いかもしれません。)

x86版 .NET3.5の場合 (末尾の+は書かなくてもOK)
デバッグオプションを有効にしておくと、下図に示すように、実行時にエラーが発生した際、エラーの原因がコードの何行目かを明記してくれるようになります。

デバッグオプションを有効にした場合のエラー表示

 デバッグが必要になるほどのコードを書くことは、そうないとは思うのですが、念のため設定しておいてもよいのではないでしょうか。

 なお、/debug を有効にすると、exeファイル作成時に、同名のpdbファイルが作成されます。気になる方は、Startサブルーチンの末尾にpdbファイルを削除するためのコードを追加した方が良いかもしれません。(個人的には、テンポラリフォルダ内なので気にしていません。)

【改良案】

外部アセンブリの読み込みに対応できると、ネットの海から拾ってきたdllの動作確認ができるので何かしら使い勝手が良いかもなぁと思ったりします。(近々でそういった使い方をしたいというわけではないのですが)

 csc.exe 自体は /r: オプションでアセンブリの参照設定を追加できるので、例えば
  • 開いているファイルと同階層にあるdll一覧を取得
  • 各dllの絶対パスを /r: オプションで指定
とすれば、実現できそうです。

2012年9月13日木曜日

文字の装飾をワンタッチで消すWordマクロ

【まえがき】

こういう文章中の装飾をまとめて消したい
文章に施した装飾 (蛍光ペン ・ 斜体 ・ 文字色 ・ 下線 ・ 囲い線などなど)をまとめて消したい場合、Wordの標準機能を用いるのであれば

  • [Ctrl] + [Shift] + [Z] または [Ctrl] + [Space] 
    • (VBAから呼び出したい場合) コマンド名 ResetChar

で、文字の装飾をまとめて消せます。消せるのですが、このコマンドでは

  • 上付き文字下付き文字
まで一緒に消えてしまいます。このため、装飾を消したい範囲内に、化学式(例えば、HO)や、数式(例えば、y=ax)が混じっている場合には、ちょっと使うのをためらってしまいます。

 上付き文字・下付き文字は残しつつ、文字の装飾のみを消せた方が助かるのですが、標準のコマンドとしてはどうも用意されていないようなので、マクロを組んでみました。

【実装したコード】


【実装したコードに関するメモ】

太字斜体打ち消し線など基本的な装飾に関しては問題ないと思うのですが、網掛け囲み線などについても消すことを忘れないようにしたいところです。
 (私事ですが、普段自分では使わない装飾が消えないと、手動での消し方がパッと思い出せず、消し方を調べる羽目になり「何や、この装飾!」 とフラストレーションが溜まります。閑話休題)


 上記コードに関しては、蛍光ペンだけ消す機能(EraseHighlight)など、それ単体でもマクロとして、または他のマクロの一部として使える機能を、プロシージャ単位で切り分けています。

 余談ですが、このマクロ、自分はけっこう頻繁に使うので、ショートカットキーの設定で Ctrl + Q (比較的押しやすい位置)に割り当てて使っています。

【使い方】

1.文字の装飾をまとめて消したい範囲を選択
2.マクロを実行
以上です!