«前7日分 最新 次7日分» 追記

netail.net

自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.

最近のお知らせ (古いものはこちら)


2006-02-05 [長年日記]

_ [VolumeDeskbar][お知らせ] 1.0.5 リリースしました.

正式に 1.0.5 にしました.タスクバーから分離した状態でウィンドウが閉じられたときに異常終了する問題を修正しています.

また,制御対象のデバイスが選べるようになりました.普通は単一デバイス環境なので影響はありませんが,USBスピーカなどを使っている方には意味があると思います.

ちなみに,現在の実装では,デバイスを名前で区別しているので,同名のオーディオデバイスが複数ある場合はうまく動きませんが,同じサウンドカードを2枚挿している人がそういるとも思えないので,そのままにしてあります.

_ [ツール] ポータブルハードディスク+Secure Lock Ware

ポータブルハードディスク HD-PHGU2 の120GBモデルを購入したので,Secure Lock Wareと組み合わせて使うことにした.

Secure Lock Mobile というのがドライブと一緒に付いているのだが,こちらはファイルを個別に暗号化する必要があるらしく,1GBの暗号化で何分,とかCPUパワーもかなりかかるらしい.

そこで,ドライブ単位で適用される Secure Lock Ware のほうを選択した.インストールして,ドライブに暗号設定をつけて,Disk Formatter というツールでフォーマットしたら設定完了.ドライブをSecure Lock Ware がインストールされた PC の USB ポートに接続すると,パスワードを聞かれて,それ以降は普通にアクセスできるようになる.速度が気になったので,音楽ファイルなどを置いてみたり,そこそこ大きなサイズのデータをコピーしてみたが,特別問題は感じなかった.性能に関する要求が低いだけかもしれないけれど.


2006-02-03 [長年日記]

_ [お知らせ] サイト移転

3月の卒業を前に,サークルのサーバから独立しました. ほとんどのコンテンツは,既にこちらに移行してます. 移転に伴って,かなり構造整理を実施しています. 各ページの URL の変化ですが,以下のようになっています. 基本的には,このページの右側にリストしてあるリンクから飛べるようになっています.

  • hyCalendar のページ: http://www.oucc.org/~tail/calendar/http://netail.net/calendar/
  • Volume Deskbar のページ: http://www.oucc.org/~tail/volumeband/http://netail.net/volume/
  • アスペクト指向なwiki: http://www.oucc.org/~tail/aspectj/http://netail.net/aosdwiki/
  • レーサーミニ四駆ジャパンカップの攻略: http://www.oucc.org/~tail/mini4japancup.htmlhttp://netail.net/games/mini4/

2006-02-01 [長年日記]

_ コメントスパム

が目に付くようになってきたので,対策をいくつか実施してみた.コメントスパム避けチェックボックスと,URLが多いコメントの自動フィルタの二段階.

この回避用チェックボックスのパッチをそのまま適用しただけだと,ForceRedirect例外をraiseしているが,index.rbがrescueしてないので,エラーが起きる(ForceRedirect の rescue ブロックは後半にくっついているように見えるが,途中で一度beginブロックは終了している).

  rescue TDiary::ForceRedirect
    head = {
      'type' => 'text/html',
    }
    print @cgi.header( head )
    (リダイレクトさせるHTMLを出力)
    return
  end

といったコードを TDiary::PermissionError あたりの rescue と一緒に配置しておくと,ちゃんと動くみたい.

本日のツッコミ(全1件) [ツッコミを入れる]

_ いしお [自分で訂正しておくと,rescue ForceRedirectを,index.rb の全体のbegin-endブロッ..]


2006-01-28 [長年日記]

_ [VolumeDeskbar] 1.0.5ベータ版公開

サーバトラブルから無事復旧してくれたようなので,対象デバイス変更の実験以外は(たぶん一通りは)テストしたものを,一度β版としてリリース.これでバグあったら恥ずかしいな…….


2006-01-24 [長年日記]

_ [VolumeDeskbar] さらに問題の修正

デスクバンド情報をウィンドウ側に通知するために IOleCommandTarget のポインタを取得していた(SetSite で渡ってくる引数を参照型変数に代入していた)のに,それを SetSite(nil) のときにきちんとその参照型変数を nil に戻してないのが,実はオブジェクトの解放がきちんとおきない原因だったらしい.

Microsoft が提供している Deskband.cpp のサンプルでは,こんな通知処理なんかはしてないので,気づかなかった.

たぶん,参照されている限り解放しない(カウントが0になった時点で自動解放)という賢いコードなのだろうけど,今回みたいな循環参照環境(バンドが,自身を格納するウィンドウへの参照を保持してしまう)では,どうしようもなかった.

結局,正解の手順は: CloseDWでウィンドウを解放(このときにTMixerのインスタンスも解放)しておく→SetSite(nil)呼び出しのときに,古いSiteオブジェクトへの参照をすべて捨てる→デスクバンドオブジェクトのデストラクタが呼ばれる.

CloseDWでウィンドウを解放し忘れると,TMixer のインスタンスが生き残ってしまい,ウィンドウ破棄後に音量変更のメッセージが無効なウィンドウハンドルに届いてしまいエラーになるし,SetSiteで古いSiteオブジェクトへの参照を解放しないと,オブジェクトのデストラクタが呼ばれないことになる.で,参照の解放というのは,Delphiの場合は単に参照変数に nil を代入するだけで良かったらしい.


2006-01-23 [長年日記]

_ [ツール] サクラエディタで単語カウント

マクロがあるのかなーと思って検索しても見つからなかったし,それらしいコマンドも見当たらなかったので,wcコマンドを呼び出す1行マクロを書いてみた.wordcount.ppaとして以下の内容を書いて,設定の[共通設定]で登録して,ついでにショートカットキーも割り当てると,まあ,それなりに使える.マクロ用に使っているらしい ppa.dll (本体とは別配布らしい)とか,存在を初めて知った.

S_ExecCommand( 
  S_ExpandParamete(
    'C:\cygwin\bin\wc.exe "$F"' ), 1 )

2006/2/4 追記: この定義を使った場合,ネットワーク上にファイルがある場合,うまく動かない("\\"が認識できないため).また,ファイルが保存されてない場合も,"(無題)" が wc.exe に渡されてしまうので,処理に失敗してしまう.

2006/3/26 追記: 新環境へ移動するついでに調べている途中に気づいたけれど,サクラエディタのマクロと正規表現としてワードカウントのWinShell使った実装が公開されている.


2006-01-22 [長年日記]

_ [VolumeDeskbar] 原因は,無効になるウィンドウハンドルだったらしい

昨日修正した Form.Free → Form.Release だけでは問題は解決せず,結局,引き続きバグ修正作業.色々ログを取りながら調べた結果,実は現状の実装に色々問題があったことが判明した.

原因その1は,フローティング状態などの Deskband を閉じた後で,再び Deskband を表示したとき,新たに生成した TMixer が内部的に生成するコールバック用ウィンドウハンドルがなぜか無効になってしまい,処理に失敗していた.こちらの原因は不明だが,Deskband に表示しているウィンドウのハンドルを使うようにしたらエラーは起きなくなった.

また,TPopupMenu のコンストラクタでは,Application.Handle グローバル変数が参照されており,ドッキング解除後に Popup Menu の動作がうまくいってなかったのはこのためのようだった.Popup Menu オブジェクトを完全に除去してしまったら,ツールバー自身の QueryContextMenu 関数呼び出しがポップアップメニューの作成に使われるようになった.

それから,SetSite での古いSiteオブジェクトへのSite.Releaseメソッド呼び出しが,どうも問題を引き起こしていたらしい.呼び出しを書かないと,フローティングウィンドウを閉じたときにオブジェクトが破棄されないように見えるのだが,書くと,今度は実行時エラーで explorer がこける.何か実装を勘違いしているのかもしれない.とりあえず,エラーを起こさない方向で修正.(追記)SetSite(nil)のときに古いSiteへの参照さえ nil にすれば,Release 呼び出しは不要.