2008年6月29日日曜日

Text file busy: exec of.

 何故かPerlを触っています.
 VB/ASP → VB/ASP.Net → PHP → C# と触って来たlightmaterialはPerlを全然触った事がありません(C++もJavaも「使える」と明言出来るレベルではありません orz).
 勿論、コードを「ナントナク」読むとか他の人が書いたコードを少し修正する程度であれば可能ですが、一からPerlプログラムを書きなさい、と言われれば「無理です」と断言せざるを得ないレベルです orz

 が、若干コードを触る必要が出てきそうなので、今のうちから徐々にPerlの独特な言語仕様を覚えようと頑張ってます.
 いや、本当は頑張ってないんですけどw

 それにしても、本当に独特の世界です.

 他の言語のFunctionやメソッドにあたるサブルーチン(VBのSubプロシージャとは違います)の引数が「@_」に入ってるとか、普通に変数と配列を混在させて引数に渡したりすると受け側(サブルーチン内)で変数と配列の区別がつかないとか、「if ($a eq 'Oh my Goods') return 0;」と書かずに「return 0 if ($a eq 'Oh my Gods');」の様に書くとか…挙げればきりがないほど独特です.

 とまぁ、別にWebアプリケーションの初期から広く一般に使用されているPerlの事を今更書いた所で何の意味も無いですねw

 Perlが必要になるのは当然仕事での話なので、会社でも今やってる案件の合間を見て勉強し、家でも同様に勉強してたりします.
 現在のPC、家電の配置状況だとXPを直接触らずFedora機からrdesktopで接続する方が操作性が良く、

 Fedora機 →[rdesktop]→ XP →[samba]→ Fedora機

と言う「なんでやねん」的な遠回りかつ無駄な操作をしていますw
 単にXPの使い慣れたエディタが使いたいだけなんですけど.

 で、XPのエディタでSamba経由で直接Perlのファイルを編集して逐次実行状態を確認していますが(勉強なので)、実行タイミングにより以下の様なエラーが発生する事に気付きました.

Text file busy: exec of '/var/www/html/nandeyanen/test.cgi' faild
 ※当然実行時のブラウザにはPerlにつき物の「Internal Server Error」が表示されます

 んが?
 なんじゃそりゃ?
 同一コードでもタイミングによって成功したり…
 これはどうやらPerlコードの問題じゃないな、と思い調べてみると、Sambaでのファイルロックが邪魔をしているらしい事が分かりました.

 楽園通信社日記(3月8日の記事)
 ※99年の記事ですw 先人達が残す膨大な情報の海に感謝

 どうやらsmb.confで
oplocks = no
 とする事で解決できる様です.
 実際、上記設定でlightmaterialもエラーが解消されました.
 この「oplocks」と言うSambaの設定は

SambaFAQ より一部抜粋)
SMBではファイルを oplock(opportunistic lock,便宜的ロック)することで、そのファイルを独占的にアクセスすることができます。ファイルへのoplock権を得たクライアントは、そのファイルをアクセスしているのは自分だけであると判断し、ファイルのデータをクライアント上で積極的にキャッシュします。

 と言うものであり、前述の様に「oplocks = no」とするか、または

Samba-Jp より一部抜粋)
oplock break timeout パラメータの値を 50 程度に大きめにすることにより、Samba の応答を遅延させ、事象の発生を抑止することができます。

 と言う設定で回避出来る問題の様です.
 どちらかと言うと、noと設定してしまうよりは、後者の「oplock break timeout」パラメータを調整する方がサーバーの設定としては正しいかとは思います.

 それにしても、PerlをやっててSambaの勉強になるとは思ってもみませんでした.

 『知れば知るほど知らない事が増えていく』

 エンドレスなメビウスの輪的な感慨に浸りつつ本日の勉強を続けます orz

2008年6月15日日曜日

まずい.

 いや…本当に…何て言うか…まずい orz

 多分7月中旬までこんな放置状態が続きますなこりゃ.

 既にREGZAショックからは立ち直りつつありますが、TVボード(ラック)買うとかiPhoneの情報漁ったりとかNetbookの情報漁ったりとかEeeBoxの情報漁ったりとか…
 全然勉強する精神状態にありませんから orz

 TVボードは昨日注文したし、NetbookはMSIのWindで十中八九決定、iPhoneはもともとSoftbankユーザーなので16GBは決定で、後は色を黒にするか白にするかの選択だけ.
 Windの国内販売が(レビュー記事が本当なら)6月末〜7月上旬予定、iPhoneが7月11日発売と.

 そして入手後に一通りいじくり倒して7月中旬には普段の生活に戻る!!!…はずw

 正直REGZA入手後の5月から生活リズムがグダグダです.
 こんな事なら買わなければ良かったとすら思…いや、思わないかw

 それにしても、デジタル系が好きな人にはたまらない6月下旬〜7月中旬となってますねぇ.

2008年6月1日日曜日

rdesktopからWindowsをシャットダウンしてみた.

 久しぶりの更新.
 何を血迷ったか最近REGZAを買ってしまい、PCでテレビを見ていたlightmaterialはPCどころでは無くTVに釘付けです orz
 正直、テレビはPCじゃなくテレビ受像機で見るものだと再認識した次第で.

 そんな廃人状態から抜け出しつつある今日この頃.
 最近Linux機からWindows機(ディスプレイはREGZAとなりましたw)をrdesktopで操作する事が多くなったんですが、XPのTerminalServer機能を使用している為、rdesktop経由で手軽にシャットダウンする事が出来ません(終了メニューがログオフと切断しか無い).

 そんな訳で↓極個人的にこんなん作ってみました.
 私以外、使い道が無いと思いますw

 Shutdown Windows For Terminal Server Client
※単純に操作される側のWindowsに突っ込んで、終了したい場合にプログラムを起動.
※あくまでも極個人的にディザスタバックアップのつもりで上げてます.
※C#.Netで作ってるので、遊び目的で起動するなら「.Net Framework 1.1」が必要.
 
 まぁ、単純に↓してるだけだったり…

static private void ShutdownWindows()
{
// Local variable.
Type type = Type.GetTypeFromProgID("Shell.Application");
Object shell = Activator.CreateInstance(type);

// Windowsシャットダウンダイアログ呼び出し試行.
try
{
type.InvokeMember("ShutdownWindows",
System.Reflection.BindingFlags.InvokeMethod,
null,
shell,
null);
}
catch (Exception ex)
{
MessageBox.Show(null,
"Windowsシャットダウンダイアログの起動に失敗しました.\r\n" +
"[エラー内容]\r\n" +
ex.Message.ToString(),
"エラー通知");
}
}


 今はWindows機をこれでシャットダウン、起動する時はマジックパケットと言う、一切Windows機に直接触らない生活を送ってますw

 さて、こんなバカな事してないで、さっさとOpenLDAPの勉強を再開しないと orz