monoの開発ブログ

プログラム開発の記録

同じ設定で新規作成マクロを更新

without comments

同じ設定で新規作成マクロを更新しました。

ダウンロード

開いていたドキュメントのエンコーディングが「日本語(自動選択)」だった場合にエラーとなる不具合を修正しています。

Written by mono

1月 2nd, 2010 at 1:25 pm

Posted in EmEditor

Tagged with

iPhone用個体値計算ツール

without comments

iPhone用の個体値計算ツールを作ってみました。
説明は用意していないので、個体値と聞いただけで何のことか分かる人向けです。
一応、こせい、めざめるパワーのタイプによる識別が可能です。

Pokemon DB

なお、使用しているデータはポケモン徹底攻略から転載させていただいたものです。

Written by mono

12月 20th, 2009 at 2:00 am

iPhoneの数値入力を改善するjQueryプラグイン

without comments

iPhoneのテンキーは、下の画像のように同じ数字を連続してタイプすると”11″→”☆”、”55″→”+”のように記号が入力される仕様になっています。
ボタンをいたずらに増やすよりは理にかなっていると思うのですが、type=”number”としたinputタグにおいても記号に変換されるのはさすがにおかしいですよね。

そこで、記号が入力された場合には強引に数値を復元するようなjQueryプラグイン、iPhoneNumberInputを作成しました。

ダウンロード / デモ

使い方は以下のように記述するだけです。

<head>
  ...
  <script type="text/javascript"
    src="jquery.min.js"></script>
  <!-- プラグインの読み込み -->
  <script type="text/javascript"
    src="jquery.iphonenumberinput.js"></script>
  <script type="text/javascript>
    $('input[type=number]').iPhoneNumberInput();
  </script>
</head>
<body>
  ...
  <!-- type="number"なinputを配置 -->
  <input type="number" />
  ...
</body>

iPhone以外を利用しているときは無効化するなどすべきかもしれませんが、とりあえず今後の課題としておきます。
やっておきました。

Written by mono

12月 20th, 2009 at 1:11 am

Posted in JavaScript, iPhone, jQuery

Tagged with , ,

Windows 7のエクスプローラーに絶望した

without comments

以前軽く調べてコメントしたことがありましたが、やはりWindows 7のエクスプローラー(←名前が変わってます)はこれまでのエクスプローラとは違います。
Vista以前は見た目こそ変化を重ねていたものの、メインとなるビューはSysListView32で一貫していました。
ところが7からはDirectUIHWNDという謎のウィンドウに置き換えられ、全く手出しできない状況です。
というわけで、ExUtilVの7向けを開発する見通しは今のところ立っていません。

同ジャンルでより高性能なExplorer ConstructionもWindows 7への対応は限定的なので、対処方法はそもそも存在しないのかもしれません。

なお、開発環境をVistaから7にアップグレードしたので、勝手ですがExUtilVの開発は終了させていただきます。

Written by mono

11月 23rd, 2009 at 3:41 pm

Posted in ExUtilV, Windows

Tagged with ,

全国高等専門学校 第20回 プログラミングコンテストに参加

without comments

今年もプロコンに参加してきました。
選手のみなさん、お疲れさまでした。

今回の競技は前回までとは打って変わって人間が介入する余地のほとんどない問題でした。
ルールも割とわかりやすく、それでいて問題の難易度は高いのも理想的だったと思います。

私の所属している豊田高専は、なんと1回戦を1位で突破することができました。
準決勝は4位という結果に終わってしまったものの、3年目にして初の1回戦突破を果たせてとてもうれしいです。

しかし、大阪府立と一関の強さは尋常じゃないですね……。
アルゴリズムが気になります。

ちなみにうちは深さ優先探索に評価関数を用いた探索順序のソーティングを加えたものを利用しています。
加えて、単純な深さ優先探索では終わりが見えないので、思うように点数が伸びないと判断した場合には枝刈りを行っています。
評価関数では以下の項目に基づいて評価値を計算しています。

  • 隣接するセル同士が同じ色になっているかどうか
  • それぞれの色について、セルがどの程度離れているか
  • 実際のスコア

また、今回の競技は例年に比べてトラブルが少なかったように思います。
予行演習の時点でプログラムが問題なく動作したのは今回が初めてでした。
これにはやはり練習場の存在が大きいのではないかと思います。
コルンさん、ありがとうございました。

最後になりますが、安定したシステムとしっかりとした運営で競技を支えてくださった実行委員会と木更津高専のみなさんに感謝します。
ありがとうございました。

Written by mono

10月 18th, 2009 at 10:25 pm

Posted in 高専

Tagged with

64bit対応なフックを使ったアプリの作り方

without comments

拙作ExUtilVのように、32bitと64bitのどちらの環境でも動作するフックを使ったアプリケーションの作り方を説明したいと思います。

まず、大前提としてWindowsでは32bitアプリは64bitアプリにフックをインストールできませんし、64bitアプリは32bitアプリにフックをインストールできません。
そのため、32bitアプリと64bitアプリの両方にフックをインストールしたい場合、同じ動作をする32bitのバイナリと64bitのバイナリを用意して両方を実行する必要があります。
幸い、普段からポインタや型の大きさを意識してコードを記述していれば32bit、64bitの両方でまったく同じコードを利用できるので、64bit対応は意外と簡単に実現可能なのです。

しかし、利用者に2つアプリを起動してもらうというのはなんだか格好悪いですよね。
そこで、ExUtilVでは32bit版のプログラムに64bit版を自動的に起動する処理やユーザインターフェイスを内蔵し、64bit版のプログラムはフックを行うだけという構造をとっています。
このようにすることで、32bit版Windows上では32bit版のプログラム単体で完結し、64bit版Windows上では2つのプロセスで動作するようにできます。
タスクマネージャを見るとプロセスが2つあってやっぱり微妙なのですが、利用者が不便を被るようなことはなくせます。

ここからは実現方法を追ってみます。
まず、64bit版Windowsかどうかを判定するコードを記述します。
素直にOSのバージョンを調べればいいのでしょうが、ここでは自分がWOW64環境で動作しているプロセスであるかどうかで判定しています。
先述の通り32bit、64bitのどちらのOSを利用していても、始めに利用者が起動するのは32bit版のプログラムですので、WOW64環境である==64bit版Windowsを利用していると判断できます。
実際のコードは以下の通りです。

bool IsWow64() {
  typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
  LPFN_ISWOW64PROCESS fnIsWow64Process;

  // IsWow64Process関数が存在するかどうか調べる
  fnIsWow64Process = reinterpret_cast<LPFN_ISWOW64PROCESS>(
    GetProcAddress(GetModuleHandle(_T("kernel32")), "IsWow64Process"));
  if(fnIsWow64Process) {
    // 存在する場合、呼び出して確認
    BOOL isWow64 = FALSE;
    return !!(fnIsWow64Process(GetCurrentProcess(), &isWow64) && isWow64);
  }
  // 存在しない場合は確実に非WOW64環境
  return false;
}

そして、この関数を呼び出した結果がtrueだった場合には64bit版のプログラムを起動します。

#ifndef WIN64
if(IsWow64()) {
  STARTUPINFO lpStartupInfo;
  GetStartupInfo(&lpStartupInfo);
  PROCESS_INFORMATION lpProcessInformation;
  CreateProcess(_T("64bit版プログラム"),
    0, 0, 0, TRUE, NORMAL_PRIORITY_CLASS, 0, 0,
    &lpStartupInfo, &lpProcessInformation);
}
#endif

最後に、利用者がプログラムを終了しようとした場合には何らかの手段で64bit版のプロセスにもそのことを通知しましょう。
これにはいろいろな方法があると思いますが、ExUtilVでは非表示のウィンドウにWM_CLOSEを送信しています。

長々と書いてみましたが、要するに64bitのアプリが少なくて不便なのでみんなもいっぱい作ってね、ということです。

# ただし、このような構造になるのは次回公開するバージョンからの予定です。
# 現在公開している0.0.10のソースを読んでもこのようにはなっていないので、あしからず。

Written by mono

9月 13th, 2009 at 9:20 pm

Posted in Windows

Tagged with ,

同じ設定で新規作成するEmEditorのマクロ

without comments

現在開いているドキュメントと同じ設定、エンコーディングでドキュメントを新規作成するマクロを公開しました。
かなり昔に公式フォーラムに投稿したものです。

ダウンロード

プログラム開発など同じ形式のファイルを多数作成するような場合には、このような挙動だと便利なのではないでしょうか。
ちなみに、うちではキーボードのCtrl+Nを置き換えて利用しています。

Written by mono

9月 13th, 2009 at 3:09 am

Posted in EmEditor

Tagged with ,

ExUtilV version 0.0.10

without comments

ExUtilVを更新しました。

ダウンロード / 詳細

今回はShiftキーを押しながらコンテキストメニューを開いたときに表示される便利なコマンドを、常時表示する機能を追加しました。
ぜひお試しください。

Written by mono

9月 10th, 2009 at 3:26 pm

Posted in ExUtilV, Windows

Tagged with ,

Perfume HeadlineをWordPressに移行

without comments

Perfume HeadlineをWordPressに移行させました。
これまでのRamaze+Sequelで作ったCGIと比較して、高い安定性、高速な表示、以前よりきれいなケータイ対応、iPhone対応、PubSubHubbub対応(これはうまく動かないのでまだ見送っています)などの利点があります。

実装方法は、クローラで収集した記事をXML-RPCで投稿しているだけのシンプルなものです。
datファイルの閲覧などは、これまでどおりRamaze+SequelのCGIになっています。

Written by mono

8月 27th, 2009 at 3:03 pm

Explorer Constructionがすごそう

without comments

Explorer Constructionというソフトがなかなかすごそうです。

窓の杜 – 【NEWS】Vista専用エクスプローラカスタマイズソフト「Explorer Construction」最新版公開

ExUtilVの一行選択解除に加えて、MigemizeExplorerのような検索機能、ツリービューのカスタマイズ機能を備えているようです。
もはやExUtilVが誇れるのは、メモリ消費の少なさくらいでしょうか。
しかし、メモリ2GB以上が当たり前の時代に、数MBを気にしても意味がないでしょうね。

64bit環境で動作しないのが残念ですが、32bit版のVistaをご利用の方は、拙作ExUtilVからの乗り換えを検討してみてはいかがでしょうか。

Written by mono

8月 17th, 2009 at 11:35 am

Posted in ExUtilV, Windows

Tagged with ,