– 例外階層(MSDN)
http://msdn2.microsoft.com/ja-jp/library/z4c5tckx.aspx
ウィンドウが非アクティブの時にタスクバーで点滅させる
.NET Framework のクラスライブラリではタスクバーでの明滅が提供されていない(Form.Activate() は非アクティブの時呼ぶとウィンドウが再前面になる)ため、Win32API の FlashWindow() を利用します。
using System.Windows.Forms;
using System.Runtime.InteropServices;
public class Form1 : Form {
// 点滅用 Win32API のインポート
[DllImport(“user32.dll”)]
private static extern bool FlashWindow(IntPtr hwnd, bool bInvert);
public static void FlashWindow(System.Windows.Forms.Form window) {
FlashWindow(window.Handle, false);
}
// ウィンドウを点滅させる
// (ウィンドウがアクティブな時は何もおこらない)
private void ExecExample(){
FlashWindow(this);
}
}
参考:
– FlashWindow(user32)(pinvoke.net)
– Win32 APIやDLL関数を呼び出すには?(@IT)
makexmldocomomap の出力を PEAR の Net_UserAgent_Mobile で使えるようにするパッチ
単純に makexmldocomomap を実行すると <terminal … modeil=”SH902I” … > のように出力されたのですが、PEAR では <SH902I … >という形式を期待していて、そのまま DoCoMoMap.xml に適用すると動作しなくなったため次のように書き換えました。(Net_UserAgent_Mobile 0.27.0 で確認 cpan のほうは失念)
$ diff /usr/local/bin/makexmldocomomap{.bak,}
21,22c21,22
< push @{$map{terminal}}, {
< model => uc($model),
—
> push @{$map{uc($model)}}, {
> width => $width,
また、出力時にiモード HTML シミュレータの情報が書かれていないため、エミュレータでも利用するためには
<ISIM0301 color=”1″ depth=”262144″ height=”320″ width=”240″ />
<ISIM70 color=”1″ depth=”4096″ height=”182″ width=”163″ />
としてエミュレータの端末情報を指定する必要があります。
メモ:
SO902iWP+ 端末が
<SO902IWP+ color=”1″ depth=”262144″ height=”256″ width=”240″ />
となり、XML 的にエラーで次要素以降が読まれなくなるのは何か対処法あるんでしょうか。。
# 現在一番下に移すことで回避中。もちろんこれでは SO902i WP+ 自体は対応されないでしょうね(いろいろ未確認)。
関数, メソッドを動的に実行する
C の関数ポインタや、Java のリフレクションのように任意の関数、メソッドを呼び出すには次のようにします。
<?php
function greet(){ echo “Hello world!”;}
// 変数に () を付ける記法(関数のみ可)
echo “0: “;
$func=”greet”;
$func();
// call_user_func() を使った関数よびだし
echo “\n1: “;
$func=”greet”;
call_user_func($func);
// call_user_func() を使った静的メソッドよびだし
echo “\n2: “;
class Foo{
function doit(){
echo “static method called”;
}
}
$method=array(“Foo”, “doit”);
call_user_func($method);
// call_user_func() を使った非静的メソッドよびだし
echo “\n3: “;
class Foo2{
var $name;
function Foo2($name){
$this->name = $name;
}
function doit(){
echo “non static method called (“.$this->name.”)”;
}
}
$o=new Foo2(“abc”);
$method=array($o, “doit”);
call_user_func($method);
echo “\n”;
?>
上のコードを実行すると結果は次のようになります。
0: Hello world!
1: Hello world!
2: static method called
3: non static method called (abc)
参考:
– call_user_func()
C# 逆コンパイルツール
携帯各キャリア提供の仕様書
携帯用コンテンツ開発コミュニティ
ハードディスクの中身を誤って消した場合のファイル復旧方法
http://opentechpress.jp/article.pl?sid=06/09/09/1417236&from=rss
PhotoRec というツールを使ってファイル復元を行う方法を書いている。Windows (9x,Dos,NT,XP), Linux, Mac OS X で利用可能。
参考:
– Windows で PhotoRec
http://oss.moongift.jp/review/i-1587.html
IE でブラウザごと Flash を終了すると以後 IE で特定サイトが見られなくなる
具体的には Flash Player 7,8 9, Windows IE 6.0 を使い、
(loadMovie などで)ネットワーク通信中の Flash を IE ごと閉じる、という動作を一定回数(あるいは同一 Flash で一定本数アクセス中に)すると、閉じた Flash がアクセスしていたサーバについて、その Flash と同じプロセスの Win IE から一切アクセスできなくなる。
というもの。
netstat で見てみると、Flash を通信中に IE ごと閉じると、IE で使えるサーバとプロセスのコネクション本数(デフォルト2本)分、該当サーバに対して CLOSE_WAIT 状態で残っていました。
ここから推測するに、コネクションを使い切って止まっているのが原因のようです。
参考:
– FLASH-JP.COM フォーラム
– Flashcoders – IE: close_wait
シェルの for ループで for file in $filelist とした時の問題と対策
複数のファイルに対する処理を for ループで行うと
for file in file1 file2 ‘file3 abc’; do
ls $file
done
のように書け、
file1
file2
file3 abc
のような結果になりますが、
ユーザが指定したファイル群に対して処理をしたいとき、for ループで次のようにすると
$filelist=”
file1
file2
‘file3 abc’
“
for file in $filelist; do
ls $file
done
とすると、
file1
file2
‘file3
abc’
となってしまいます。
この対策として . でスペースを置換するアドホックな対応をしてみました。
filelist=”
file1
file2
‘file3 abc’
“
for file in ` echo “$filelist” | sed -e ‘s/\\./\\\\./g’ -e ‘s/ /./g ‘`; do # 既存の “.” は “\.” に, ” ” は “.” に置換
file=`echo “${file}” | sed -e ‘s/\\./ /g’ -e ‘s/\\\\././g’` # 置換を元に戻す
ls “$file” # “” で囲むのは必須
done
結果:
file1
file2
file3 abc
他にいい方法があれば是非御連絡を m(. .)m