2008年9月15日月曜日

久々の更新

物凄く久しぶりに更新です.
忙しいとか忙しくないとか言う事ではなく、どーにもアクティブに挑戦する気力が湧き上がってこない+iPhoneのお陰でPC起動時間の減少→blog更新の停滞 orz

この記事もblogにコメントをもらったことに気付いて、その返信を書いた事で「更新するか」という気になったと言うのが事の顛末.

今後も更新頻度がどうなるか分かりませんが、「気付いたら更新してた」的なスタンスで続けて行きますw


※LifeCast↓と言うiPhone用アプリで投稿して見ましたが…微妙〜ですね orz

Posted with LifeCast

2008年7月20日日曜日

続iPhone.

// 脱獄については記事の一番下に追記してます.

 購入から一週間たちました.
 やはりiPhoneは電話ではありません.
 通話音質が悪い.
 ガラパゴス携帯が素晴らしいのか、iPhoneがヘタレなのかは分かりませんが.
 微妙な撥音が重要な英語圏の人たちは、iPhoneの通話音声品質で会話できるのか?と要らぬ心配をしてしまいます.

 とは言え、英語圏の人たちの方がiPhoneを正しく捉えている事でしょう.
 あくまでもインターネット端末、むしろ真の意味でのパーソナルなコンピュータで、電話はオマケ機能だと.


 ここからまったく話を変えて.
 何やらiPhone 3G用の脱獄(JailBreak)ツールがそろそろリリースされそうだとか.
 脱獄自体ライセンスの抵触にあたるのではないかと思いますが…多分lightmaterialも脱獄してしまう事でしょう orz
 あの誘惑には勝てません.
 iPhoneでは出来ない事が出来るのですから(可能性ですが、例えばBluetoothヘッドフォンで音楽を聴くとか).
 コンソールが使える、ファイルの保存が自由(デフォルトではiPhoneにファイル保存の自由はありません)と言うのが大きなメリットです.
 考えるだけでも(私にとって)最強のガジェットになるかと思います.

 今日一日iPhoneをかなりハードに使ってみました.
  • 通話 … 約2時間
  • Google Maps … 約1時間(GPS使用してナビ代わり。移動中は閲覧せず信号待ちでチラ見)
  • インターネット … 約4時間(Wi-Fi/3G混在。閲覧時間を除く実際の継続的な読み込み接続は1/10程度でしょうが)
  • iPod機能(音楽再生) … 約5時間
  • SMS … 10通(送受信)

 それでも13時〜翌3時半まで持ちました.
 バッテリーが弱いと言う情報を多々目にしますが、同様の処理を他の端末で行った場合、ここまで持つか疑問です(同様の処理自体出来ないとは思いますが、仮に行った場合と言う意味).

 …これじゃ「無条件iPhone信者」と思われてしまいますかね?w
  • iPhoneのSafariは落ちまくる!
  • 日本語入力が相変わらず重たくなる!
  • メール機能が悪い!
  • ローカライズの完成度が低い!

 よし、非難はこんなもんでいいでしょう.

 現在のlightmaterialのホームは↓こんな感じです.

 この一週間で私にとってもっとも歓迎すべきニュースは「Mocha VNC for iPhone and iPod」の登場です.

 iPhone 3Gからデスクトップを遠隔操作「Mocha VNC Lite」

 素敵です.
 馴れると普通に(あくまでもiPhone的に. iPhoneでSafariを操作している感覚で、と表現した方が分かり易いかもしれません)WindowsやLinux、MacOSを操作する事が出来ます.
 しかも無償で(有償版は右クリックが出来るとか、iPhone標準のソフトウェアキーボード以外が用意されているとか、Ctrl+Alt+Deleteキーの送信が出来る等の付加機能が予定されています).
 lightmaterialも即日インストール.

 ※VNCアイコンがMocha VNC Lite. 赤線で囲むのが面倒でした orz


 この画像、一見するとiPhoneのカバーフローの様ですが…

 普通にiPhone経由で表示したWindows上で動作するiTunesのカバーフロー画像です.

 実際にiPhoneで表示したカバーフローは↓こちら.

 これはもう最強のキラーアプリです.
 動作も軽快、画面サイズが異なる点はマルチタッチスクリーンの拡大縮小操作で克服.
 馴れが必要ですが、マウス操作も実用レベルで操作可能になりました.

 もうあれこれ考えるだけで興奮してくるのは、私を含むマニアック層だけかもしれませんが、相当に素晴らしい事です.

 Mocha VNCと脱獄だけで半年は飽きずに済みそうです.
 あ、もうこんな時間だ.
 明日と言うか今日は出社して仕事予定.
 さっさと寝ます.

/**
 * 2008-07-21追記
 */
 脱獄してしまいました orz

 Jailbreaking your iPhone 3G on Windows
 ※脱獄(Jailbreak)行為はすべて自己責任. 最悪の場合iPhone自体が動かなくなる可能性もあります

 脱獄後は↓こんな感じです.


2008年7月13日日曜日

iPhone 3G個人的総評.

 あっ………と言う間にiPhone購入から3日が経過しようとしている訳ですが、一通り触ってみた感想をグダグダと書いてみようと思います.

 個人的には大方満足しています.
 ただ、普通の携帯電話として購入すると「相当」痛い目にあいますw
 それだけでは無く、普通のスマートフォンとして購入しても痛い目にあいますw

 極個人的な満足ポイント、不満ポイントは次の通り.

  • 満足ポイント
    1. iPodと携帯電話、2つのガジェットを持ち歩かなくてよくなった
    2. WEBブラウズが一般携帯のフルブラウザ、スマートフォンのブラウザより数段快適
    3. SMSがチャット風に表示され、視認性・使い勝手とも非常によい
    4. Remote(iTunesをWi-Fi経由で操作するアプリ)が想像以上に便利だった
    5. YouTubeが不満なく(個人的な感想ですから…)見られる
    6. Google Mapsが死ぬほど軽快・便利に使える
    7. タッチスクリーンで入力するフルキーボードが思ったよりも軽快に打てる(既に携帯のテンキー入力よりは早く打てる様になりました。両手使いますけどw)
  • 不満ポイント
    1. 電話としてみると機能が貧弱過ぎる(電話として購入したら駄目ですw)
    2. Safariが落ちまくる(売り、メリットの筆頭だけにダメージが大きい)
    3. 日本語入力環境(予測変換)がクソ(下品な言葉で失礼)
    4. 1日最低一回は再起動しないと快適に使えない(電話としてもスマートフォンやPDAとしても有り得ない。日本語入力環境のせいなんだけど…)
    5. GPSが位置情報をキャッチしてくれない
    6. メール着信時に音もバイブも鳴らない(致命傷。だからと言ってMobileMeは契約したくない)
    7. バッテリが貧弱過ぎる
    8. コピー&ペーストが無い!!!(最初はいらないと思ってましたが、使ってみたら致命傷だと気付きました)
    9. ストラップ穴が無い(一回テーブルの上に落として、こりゃストラップが必要だと思いました。どっかのメーカーがシリコンジャケットにストラップ穴付けてくれれば便利なんですけどねぇ)


 …あれ?不満点が多いな…もしかして俺満足してないんじゃ? orz
 いやいや、そんな事はないはず.
 気のせいです.

 赤外線が無い点は友達が少ない私には必要ありません.
 …人としてどうなのかと言う悲しすぎる事実はスルーの方向で orz
 お財布携帯も個人的には必要ありませんし、必要であればシリコンジャケットの背中にカードを入れる事で代用出来ますので、機能が付いていなくても致命傷では無いと思います.

 と言う事で、決して一般受けする製品ではありません.
 今回はSoftBankの販売戦略とメディアの報道が、一般的な携帯電話購入層をミスリーディングする結果になったかと思います.
 よくよく考えるとSoftBankはiPhoneのCMを打った訳でも無いので、特にメディアの報道姿勢が問題だったのかもしれませんね.

 最初から機能を把握していて、割り切って購入した人は満足してるんじゃないかなぁと思います.
 逆に普通の携帯電話として購入した人は不満爆発だと思いますがw
 ただ、そういう人は高価なデジタル製品を良く調べずに買ってしまった、と言う非が少しは自分にもある、と自覚して頂きたい次第で.

2008年7月12日土曜日

iPhoneホワイト写真集.

 開封からアクティベート、iTunes同期までの写真.
 基本ボケボケなのは気にしない方向で.












※最後の写真はシリコンジャケットを着せてます

あいふぉーんいんじゃぱん.

 何やら不穏な気配が漂い始めています.

 触ってみた感想としては
 『素晴らしい!!!』
 の一言に尽きます.

 んが、使っている内に不満点が出てきます.
 日本人なら多分皆が皆感じる事でしょう.
 そう、日本人にとって必要不可欠な日本語入力環境(予測変換)が「尋常ではない」ほど重い!!!!! orz
 // 2008-07-13
 // 重くなったら再起動!!
 // 仕様としてどうなのよコレ orz
 // 今の所 使う→重くなる→再起動→軽快→使う→重くなる の繰り返しですw

 調べてみると、IT情報系サイトのレビューでも日本語入力環境が重いと書いてありましたので、lightmaterialが購入した個体の問題では無く、iPhoneで日本語環境を使用した際の共通の問題かと思います.
 正直iPod機能を使って音楽を聞きながらSafariで日本語入力しようものなら、余裕で音が飛びます(その他の事をしてても音飛びは殆んどしない).
 iPod機能を使わず、Safariしか起動していない状態ですら日本語入力の処理が思いきり遅い.
 いや、SafariじゃなくiPhone自体の設定画面で日本語を入力する時ですら思いきり遅い.
 具体的に書くと、タップしてから最大3秒程度固まります(候補数等々でかかる秒数が変わっている模様).
 テンキー入力にしていると、今自分が何の文字を打っているのか分かりません(タップしてから画面に反映されるまで3秒かかった場合を考えてみれば分かると思います).
 更に変換候補がたまに画面外に表示されます.
 使いものにならないレベルです.
 使ったとしても「相当我慢しながら」使う事になります.
 とても高速に文書を入力する事なんて出来る代物ではありません.

 …はぁ…何だかなぁコレ orz
 これだけレベルの高いガジェットなのに、日本人に一番必要な日本語入力がまともでは無いと言うのは、正直残念以外の何ものでもありません.
 Appleには是非とも日本語入力環境の改善を要望…いや、要求したい所です.


 と、散々貶しましたが、日本語入力環境以外は思いきり満足していますw
 素敵過ぎますiPhone!!
 今まで使ってきた携帯電話って何だったんだ?と思う程の素敵さ加減です.
 いや、本当に買ってよかった.
 涙がちょちょぎれます.


 ちなみにiTunesとiPhoneの連系がおかしいです.
 iPhoneからiTunes Storeで曲を購入してもiTunesに反映されません.
 更にiTunesのデバイスリストにあるiPhoneを選択するとエラーが出ます.
 何でしょうねコレ?
 // 2008-07-12
 // どうやらAppleのサーバーが混雑していたのが原因だった様です.
 // 今日改めてやったら、ユーザー登録画面が表示され、正常に連携する事が出来ました.

 後これはSoftbankの問題かもしれませんが、メールアドレスの設定が全然出来ません.
 ID、パスワードを入力しても蹴られます(My Softbank自体には明後日までログイン出来ませんが、メールアドレスの設定だけは出来ると書いてあるんですがねぇ…).
 更にiPhoneにメール設定をしてみても、メールサーバーへの接続で蹴られてしまいます.
 // 2008-07-12
 // これも今日やってみたら正常にアクセス可能でした.

 その他にも情報アンテナを張りめぐらせると色々と問題が勃発しているようですが…まぁ、この程度の事はご愛嬌(iPhone自体が素敵なので).

2008年7月11日金曜日

Getting an iPhone 3G.

 何故かタイトルが英語です.
 多分間違えてます.
 「Getting the iPhone 3G」が正しいのかもしれません.
 それすら間違えてるかもしれません.
 そんな事はどうでもいいですね.

 そう.
 やりましたよ.
 入手しましたiPhone!!



 まだ開封もアクティベーションもしてませんが(店頭でのアクティベーショントラブルで、結局自宅でロック解除する事になった…大丈夫か??)、何故か入手できてしまいました.
 …並んですらいないんですがw
 東京より地方の方が入荷数は少なくとも絶対的な競争率が少ないんでしょうかね??
 絶対入手できないものだと思い込んでいたので、半分以上諦めムードのまま昼ちょっと前に飛び込んだ店で「iPhoneの白ありますか?」と聞いたら、笑顔で「はい、あります」といわれましたからw

 …いえ、並んで入手した方には本当に申し訳ない気分で一杯です.
 申し訳御座いません orz

 何はともあれ16GB版、しかも欲しかったホワイトが手に入って興奮です.
 さて、今日は飲み会があるから飲み会終わりに酔っ払いながらロック解除して翌日まで遊び倒してやります.

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

2008年4月15日火曜日

PHPのLDAP関数でActiveDirectoryに接続 - その3.

 今回は単純にPHPから既存のActiveDirectoryへ接続するのでは無く、ActiveDirectoryの設定(と言っても極一部 orz)とSSL経由での接続を考慮に入れた場合のメモ.
 何故SSL経由かと言うと、ActiveDirectoryのパスワード情報をLDAP通信で変更したい場合、SSL経由の接続じゃないとサーバーに怒られるからです.
 ※変更しないなら、SSL有効時においても平文で通信可能ではあります.

 // 2008-04-18 WEBサーバーにCentOS 5.1を使用した場合のメモを追加.
 今回の主な環境.
  ・ActiveDirectoryサーバー … Windows Server 2003(Std/Ent)
  ・WEBサーバー
    Windows … Windows XP Professional(IIS 5.1)
    Linux  … CentOS 5.1(Apache2.2.3)
  ・PHP
    Windows … Version 5.2.5
    ※php.iniの extension=php_ldap.dll のコメントアウトを解除
    Linux  … Version 5.1.6

 尚、今回WEBサーバー代わりとなったXPは、テスト用ActiveDirectoryには参加していません.

1. ActiveDirectoryのインストール.


 普通にインストールします.
 以上.

 …と思ったけどもう少し書きます.

 「スタート」→「サーバーの役割管理」を選択.
 「サーバーの役割管理」ウィンドウで「役割を追加または削除する」を選択.
 「サーバーの構成ウィザード」ダイアログ「サーバーの役割」で「ドメインコントローラ(Active Directory)」を選択.

 後はお好きな様に設定.
 必要に応じてDNSサーバーも自動的にインストールしてくれます.

 結局書いても書かなくても同じだったか orz

2. SSL証明書をドメインコントローラに設定.


 色々方法はある様ですが、今回は手っ取り早くWindowsサーバーの「証明書サービス」を利用します.
 ※環境により、インストール中にOSのCDを要求されます.
 ※ここでの設定方法は独学であるため、ほぼ100%の確率で誤りがあるかと思われます.

 「スタート」→「コントロールパネル」→「プログラムの追加と削除」を選択.
 「プログラムの追加と削除」ダイアログで、左側の「Windowsコンポーネントの追加と削除(A)」ボタンを選択.
 「Windows コンポーネント ウィザード」ダイアログの一覧から、「証明書サービス」にチェックをつけて「次へ」→「完了」を選択.



 「CAの種類」の指定で、「エンタープライズのルートCA」を選択します.
 「スタンドアロンのルートCA」でも行けるかもしれませんが未確認.
 時間があれば後日入れなおしてみるかもしれません.

 ※面倒になったのでここから画像なしで行きます orz

 「CA識別情報」の指定で、共通名に適当(適切)な名称を指定します.
 ここで指定した名称は、証明書の名称であったり、識別名(ダイアログの下の方)で参照されます.
 「証明書データベース」の指定では構成情報の保存場所を指定しますが、後からここに出力されたセキュリティ証明書(*.crt)を参照する事になるので、分かりやすい場所がいいかと思います※1.

 インストール後、「スタート」→「コントロールパネル」→「管理ツール」→「証明機関」と言う項目が増えます.

 基本的には、この段階でActiveDirectoryのSSL通信がサポートされている…はずです.
 続いて実際に通信の為のセキュリティ設定を行います.

 「スタート」→「コントロールパネル」→「管理ツール」→「既定のドメイン セキュリティの設定」を選択.
 「既定のドメイン セキュリティの設定」ウィンドウの左ペイン(ツリー)から、「セキュリティの設定」→「公開キーのポリシー」→「信頼されたルート証明機関」を右クリックしてプロパティを開きます.

 ここで「登録された Active Directory およびユーザープリンシパル名(UPN)の名前制約条件を満たす証明機関(D)」を選択しないと、SSLを有効にした状態ではPHPからユーザー情報の編集が出来ませんでした.
 …私が他の設定を抜かしているだけかもしれませんけどw

 // 2008-04-18 追記 ↑まったく関係ありませんでした orz

 上記項目選択後、「OK」ボタンを選択してプロパティ画面を終了します.

 再度「信頼されたルート証明機関」を右クリックし、「インポート」を選択します.

 「証明書のインポート ウィザード」で「次へ」→ファイルの指定で、本文『※1』で指定したフォルダにある「****.crt」を指定→「次へ」→「次へ」(選択不可になってるはず)→「完了」を選択して、証明書をインポートします.

 「スタート」→「ファイル名を指定して実行」で
gpupdate /Force
 と入力し、ポリシーを最新の状態に更新します.


【WEBサーバーがLinuxの場合のみ、以下を追加で実行】
 「スタート」→「コントロールパネル」→「管理ツール」→「証明機関」を選択.
 「証明機関」スナップインで、左ペインのツリーから目的のサーバーを探します…と言っても、多分ひとつだけしか無いと思いますけどw
 目的のサーバーを右クリック→「プロパティ」→「全般」タブの「CA証明書」一覧で証明書(多分「証明書 #0」と言う様な名称)が選択されている事を確認して「証明書の表示」ボタン選択.
 更に出てきたダイアログの「詳細」タブを選択→「ファイルにコピー」ボタン選択.
 「証明書のエクスポート ウィザード」で「次へ」→「Base 64 encoded X509(CER)(S)」を選択して「次へ」→保存パスを指定して「次へ」→「完了」ボタンを選択して証明書をエクスポートします※2.
 後でWEBサーバーにエクスポートしたCERファイルを渡す必要があるので、その点を考慮して保存パスを指定した方が良いかと思われます.

※画像が無いので説明が分かり難いかも…英語だけど→「LDAP over SSL - Modifying Active Directory with PHP」の方が分かり易いかもしれません.

 これでActiveDirectoryサーバー側の設定は終了です(本当かどうかは知りませんがw).

3. SSL証明書をWEBサーバーに設定.


 次に、ActiveDirectoryサーバー(本当は証明書サーバーですが)で生成した証明書をWEBサーバー機に設定します.

【Windowsの場合】
 「スタート」→「ファイル名を指定して実行」で
mmc
 と入力し、管理用コンソール(GUIです)を起動します.
 スナップインとかMMCとか言われているアレです.

 コンソールのメニューから「ファイル」→「スナップインの追加と削除」を選択し、「スナップインの追加と削除」ダイアログを表示します.
 上記ダイアログの「追加」ボタン(ダイアログ下部)を選択し、「スタンドアロン スナップインの追加」ダイアログを表示します.
 スナップインの一覧が表示されているので、一覧の下の方にある「証明書」を選択状態にして「追加」ボタンを選択します.

 更にもうひとつ「証明書スナップイン」と言うダイアログが表示されますので、「コンピュータアカウント」を選択し「次へ」.

 管理対象に「ローカルコンピュータ(このコンソールを実行しているコンピュータ)」が選択されている事を確認し、「完了」を選択します.
 「スタンドアロン スナップインの追加」ダイアログの「閉じる」ボタンを選択します.

 「スナップインの追加と削除」ダイアログの空だった一覧に「証明書」が追加されている事を確認して、「OK」ボタンを選択します.

 証明書の分類一覧がツリー表示されたコンソールが表示されるので、「信頼されたルート証明機関」を右クリック→「すべてのタスク」→「インポート」を選択します.
 本文『※1』で出力した「***.crt」ファイルを選択→「次へ」→「証明書をすべて次のストアに配置する」が選択されている事を確認して「次へ」→「完了」を選択し、証明書をインポートします.


 あー長い orz

 この段階で、正常に設定が完了しているか確認するには、Windows Server 2003のCDに入っている「ldp.exe」を使うのが良いかと思います.
 インストーラの保存パスは
  [CD]:\SUPPORT\TOOLS\SUPTOOLS.exe
 です.
 このインストーラでインストール後、
  C:\Program Files\Support Tools\ldp.exe
 を起動します.
 使い方は…面倒なのでヘルプ参照でw

 ちなみに、既にPHPでLDAP接続を試してて「つながんねぇ~!!」という状況の場合は、IISを再起動させる必要があります(コード上で接続プールをクリア出来るのかもしれませんが、私は知りませんので再起動 orz).

 「スタート」→「ファイル名を指定して実行」で「cmd」と入力してEnter.
 出てきたコマンドプロンプトで
C:\> net stop w3svc
C:\> net start w3svc



【Linuxの場合】
 OpenSSLの力を借りてCERをPEMにコンバートし、ldap.confに鍵情報を追加設定します.
 本文『※2』で出力したCERファイルが「export.cer」と言う名称であったと仮定した場合のコマンドは次の通りです.
[??@centos]# openssl x509 -in export.cer -out export.pem
[??@centos]# cp export.pem /path to openldap/cacerts/export.pem
[??@centos]# vi /path to ldap.conf
# 以下、変更箇所
host lightmaterial.example.com
base dc=lightmaterial,dc=example,dc=com
uri ldaps://lightmaterial.example.com
# 以下、追加文言
TLS_CACERT /path to openldap/cacerts/export.pem
TLS_REQCERT never
# 保存
[??@centos]# /etc/init.d/httpd restart



 これでWEBサーバー側の設定は終了.
 後はコードを書くだけだ.

4. PHPからSSL経由でActiveDirectoryに接続してみる.


 ここでは、ActiveDirectoryに以下のユーザー情報が登録されているものとします.
 ・sAMAccountName=t_hokkaido
 ・cn=北海道 太郎 T.H
   sn … 北海道
   givenName … 太郎
   initial … T.H
 ・SELFオブジェクトのアクセス許可
   パスワードのリセット … ON
   パスワードの変更 … ON

 尚、上記のアクセス許可を確認するには「Active Directory ユーザーとコンピュータ」右ペインの何も無い所で右クリック→「表示」→「拡張機能」を選択した状態で、各ユーザーのプロパティを開き、「セキュリティ」タブのユーザー一覧から「SELF」を選択する事で確認出来ます.
 別に「パスワードの変更」だけでも良さそうですが、「パスワードのリセット」も選択しないとパスワード変更出来ませんでした…またバカなミス(文末追記参照)をしてるのかもしれませんが orz

 ActiveDirectoryの情報は次の通りとします.
 ・DN … OU=Sapporo,DC=lightmaterial,DC=example,DC=com

 こっからはさっさと行きます.

    // Windows環境下では、↓の環境設定をしなければ接続時にエラーが出ます.
    putenv('LDAPTLS_REQCERT=never')
        or die("couldn't setup reqcert-environment...");
    
    // LDAPSを用いてドメインを指定しつつ接続.
    // ※ActiveDirectoryがSSL接続時に使用する標準ポートは「636」です.
    $ldapConn = ldap_connect('ldaps://lightmaterial.example.com', 636)
        or die("couldn't connect to LDAP Server...");
    
    // オプション設定.
    // すべて設定しないと、Windows環境では上手くつながらない場合があります.
    ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3)
        or die("couldn't set protocol version...");
    ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0)
        or die("couldn't set referrals...");

    // バインド.
    if ($ldapConn) {
        ldap_bind($ldapConn, 't_hokkaido@lightmaterial.example.com', 'this_is_password')
            or die("ldap_binding get an error.<br>reasons... " . ldap_error($ldapConn) . "<br>");
        echo "ldap_binding is success.<br>";

        // ログインユーザーの情報を検索してみる.
        if (! ($result = ldap_search($ldapConn,
            'OU=Sapporo,DC=lightmaterial,DC=example,DC=com',
            '(sAMAccountName=t_hokkaido)',
            array('cn', 'sn', 'givenName', 'displayName', 'sAMAccountName')))) {
            // ユーザー情報が見つかりません.
            echo "user not found.";
        } else {
            // 今回はパスワードを変更してみる.
            // パスワード文字列を加工してあるのは、渡す値がUnicode文字列である為.
            // ※パスワード文字列は「"」(ダブルクォーテーション)で囲む必要があります.
            $plainPasswd = '"this_is_new_password"';
            $length = strlen($plainPasswd);
            $unicodePasswd = '';
            for ($position=0; $position<$length; $position++)
                $unicodePasswd .= "{$plainPasswd{$position}}\000";

            // ldap_modifyを使って実際に属性値を更新(ldap_mod_replaceでもOK).
            // ちなみに、パスワード変更後も変更前のパスワードで認証出来てしまう場合は、
            // 2回ldap_modifyしてあげるしか対処法は無さそうです.
            // 多分ldap_unbindしてもログオフした事にならないのが原因だと思います.
            ldap_modify($ldapConn,
                ldap_get_dn($ldapConn, ldap_first_entry($ldapConn, $result)),
                array("unicodePwd" => $unicodePasswd));
        }
        // バインド開放(クローズ).
        ldap_unbind($ldapConn);
    }
    echo "fin.";
 これまでの設定に間違いが無く、且つ私がボケていなければLDAPSで接続した上でパスワードを変更出来たはずです.

 長かった…
 またしばらく長い投稿は止めよう orz

 今回は、かなり参照させてもらったサイトがありますので、一応↓に挙げておきます(100%自己メモ).

[参照サイト]
 ・Using Ldp.exe to Find Data in the Active Directory
 ・How To Enable Secure Socket Layer (SSL) Communication over LDAP for Windows 2000 Domain Controllers
 ・LDAP over SSL - Modifying Active Directory with PHP
 ・unicodepwd and ldifde
 ・PHPマニュアル LDAP関数
  ※↑このページの下の方の英語でかかれたnoteに情報がある.


注)この投稿…投稿してはミス発覚の連続で10回くらい修正してます orz
 そろそろ本気で直書き止めるかな…

/**
 * 2008-04-18 追記/修正.
 *  ・WEBサーバーにCentOS追加
 *  ・DNにbloggerと使っていたものをexampleに変更
 *  ・下記問題に対応
 */
 はい、アホ過ぎます orz

 投稿当初、認証ユーザーが「Account Operators」に属している必要がある…と書きましたが、これが何も変更出来なくなる一番の原因だった様です(本文を見直した時に邪魔なので、斜線ではなく該当する文言ごと削除しました).

【現象】
 1. 「Account Operators」に属するユーザーで認証(ldap_bind)
 2. 自身のエントリーを取得
 3. パスワード変更→正常に処理完了
 4. しばらく普通に属性の変更やパスワードを再変更出来る
 5. 何かの拍子に何の属性も変更出来なくなる

【原因】
 何も変更出来なくなった状態のユーザーを改めて確認すると、所属するグループに「Account Operators」が登録されているが、「セキュリティ」タブのグループから「Account Operators」が消えていた.
 更に「SELF」のアクセス許可が「パスワード変更」のみONになっていた(それ以外はすべてOFF).

 つまる所、「Account Operators」権限で自分自身のパスワードをむやみに変更すると、何か変な事になる、と言う事ですね!!
 …全然つまってないじゃん orz

 何でこんな事になるのか分かりませんが、また時間を作って原因追求と言うか解析してみたいと思います.
 本当に無駄な時間過ごしたなぁ…

 あ、直しついでに「WEBサーバーとしてLinux(CentOS)を使った場合」も追記しました.

2008年4月14日月曜日

AjaxなOS - icloud.

 かなーり前にベータのアカウント登録していたXcerionicloud.
 ようやく連絡のメールが来たので、早速触ってみました.

 ↓こんな感じ.
 gooのAjax使ったOSとかajaxOSとかよりも現実的なWEBアプリケーションに仕上がっています.
 と言うか、まともに動くAjaxなOSを初めて触った気がしなくもないですw

 現在の所IE限定の様ですが(Firefoxだと怒られた)、動作が比較的軽快で好感が持てます.
 更に洗練されると、将来的に「もしかすると…」と言う事になるかもしれません.
 ※↑妄想.あくまでもAjaxなOSですので、過度な期待は厳禁です.

 さて、寝る前に夢見てないでさっさと帰ろう orz

2008年4月11日金曜日

グループ ポリシー管理コンソール(GPMC).

 と言う凄く便利なツール(コンソール)がある事を今日初めて知りました orz
 会社の人が何やら見慣れぬコンソールを操作していたので、何かなぁと思いつつ検索かけたら出てくる出てくる.
 「ActiveDirectory触った事あるなら、知ってて当たり前でしょw」と言われそうなくらい凄く有名らしい.

 グループ ポリシー管理コンソール (GPMC) Service Pack 1

 GPMC でのグループ ポリシーの管理

 何が便利って、設定のレポートで変更内容が一目瞭然な点.
 これは本当に便利.
 複数のフォレストを管理出来るのも便利そうですが、私には理解不能な世界です.
 バックアップ、リストアについての管理機能もあり、これも良さそうです.

 それにしても…GPMCにしろリソースキットにしろ、これだけ便利なんだから、OSインストール(と言うか各機能追加)時に「こう言った機能を提供するツールがありますよ。ついでにインストールしますか?」みたいに提供してくれればいいと思うんですけどねぇ…

 ま、最終的に無知な私がすべて悪いと言う事で終了します.
 お疲れ様でした、自分 orz

2008年4月6日日曜日

OpenLDAPのconfigure時にBerkeley DB version mismatch.

 と言う事で見事につまずきました orz
 make uninstallがあるのにStow使ってインストールしようとしたのが悪かったかなぁ?
 と言うか、それ以前にOpenLDAPにBerkeleyDBが必要な事自体、まったく知りませんでしたから orz

[??@debian]# tar xvzf db-4.6.21.tar.gz
[??@debian]# cd db-4.6.21/build_unix
[??@debian]# ../dist/configure --prefix=/usr/local/stow/BerkeleyDB
[??@debian]# make
[??@debian]# su root -c 'make install'
 ※例にStowで管理してみようと思ったが為にPrefixでStow用のディレクトリ配下を指定

[??@debian]# cd /usr/local/stow
[??@debian]# su root -c 'stow BerkeleyDB'


 ここまでは全然OKです.
 Stowでインストール管理も出来ます(しつこい様ですが、BerkeleyDBにはmake uninstallがありますw).

 そして本題のOpenLDAPです.
 これもStow配下へのインストールを試みます.

[??@debian]# tar xvzf openldap-2.4.8.tgz
[??@debian]# openldap-2.4.8/configure --prefix=/usr/local/stow/openldap
Configuring OpenLDAP 2.4.8-Release ...
[中略]
checking for db.h... yes
checking for Berkeley DB major version... 4
checking for Berkeley DB minor version... 6
checking for Berkeley DB link (-ldb-4.6)... yes
checking for Berkeley DB version match... no
configure: error: Berkeley DB version mismatch
 ※Prefixを付けて標準以外のディレクトリにインストールすると、db.hのチェックで見付けられない可能性があります.今回はStowでインストールかましているのでパスが通っています.

 おうぷし orz
 思い切りエラーが出やがります.
 バージョンが合わないって…おかしい.
 ここ↓を見てバージョンに間違いない事を確認したはずなんだけどなぁ…
 D. Recommended OpenLDAP Software Dependency Versions

 と言う事でいつもの如く他力本願で検索ごー!

 LDAP Programming(のフォーラムらしい)
 ※検索すると日本語ページの結果が出てきましたが、多分そこの情報を鵜呑みにすると面倒な事になります.

 ここの下の方を見ると

export CPPFLAGS="-I/usr/local/BerkeleyDB.4.2/include"
export LDFLAGS="-L/usr/local/BerkeleyDB.4.2/lib"
export LD_LIBRARY_PATH="/usr/local/BerkeleyDB.4.2/lib/"

 と書いてあるので、どうやらパスが通ってないらしい.
 だったらエラーメッセージに「パスが通ってねーんだよコンチクショー!」と出力してくれればいいものを orz
 何故メッセージが「version mismatch」?

 と言う事で、いつまた再インストールやら設定変更するか分かりませんので、何度もexportする必要が無い様にldを使います.

[??@debian]# su
[debian]# echo /usr/local/stow/BerkeleyDB/include >> /etc/ld.so.conf.d/BerkeleyDB.conf
[debian]# echo /usr/local/stow/BerkeleyDB/lib >> /etc/ld.so.conf.d/BerkeleyDB.conf
[debian]# ldconfig
[debian]# exit

 これでパスが通ってる「はず」なので、もう一度configureを実行してみます.

[??@debian]# openldap-2.4.8/configure --prefix=/usr/local/stow/openldap
Configuring OpenLDAP 2.4.8-Release ...
[中略]
checking for db.h... yes
checking for Berkeley DB major version... 4
checking for Berkeley DB minor version... 6
checking for Berkeley DB link (-ldb-4.6)... yes
checking for Berkeley DB version match... yes
checking for Berkeley DB thread support... yes
checking Berkeley DB version for BDB/HDB backends... yes
[中略]
Making servers/slapd/backends.c
Add config ...
Add ldif ...
Add monitor ...
Add bdb ...
Add hdb ...
Add relay ...
Making servers/slapd/overlays/statover.c
Add seqmod ...
Add syncprov ...
Please run "make depend" to build dependencies
[??@debian]# make depend
[??@debian]# make
[??@debian]# su root -c 'make install'
[??@debian]# cd /usr/local/stow
[??@debian]# su root -c 'stow openldap'


 はい、OKそうです…実際に動くかは試してませんがw
 まぁ、ここまでくればなんとかなりそうです.

 それにしても、OpenLDAPを動かすのって結構面倒です.
 今回は素で入れてますが、実際にはオプションなんか指定する必要があるはずですので、その辺の調査も必要ですし.

※本文修正3回以上 orz

Debian4.0(etch)を入れてみた.

 先日Debian3.1(sarge)を入れた訳ですが、Debian4.0(etch)のnetinstall版CDを知人から入手した(相変わらずライタブルなドライブが壊れてて自分じゃ書き込めない orz)ので、『インストールしただけのSargeを消して』etchをインストールしましたw
 まぁ、思い切り一年以上前にリリースされたOSなので、今さらかいっ!と言う感じがするのは気づかなかった事にします.

 何やらインストール時にGUIな環境で出来るという話だったのですが、自宅の古物商で取り扱ってそうなPCではGUIがこけてダメでした.
 諦めてテキストインストールで続行しましたが、インストールプロセスが結構シンプルになった様で、質問(設定)項目も少なくなってました.



 おお、何か小綺麗になりましたよ、全体的にw
 ただ、Gnomeのせいかウィンドウマネージャが変わったのか知りませんが、多少デスクトップ環境の動作が『もっさり』しています.
 …Pen3 550MHzのPCだから仕方ないんですけど orz

 何より驚いたのが「フォントが綺麗になっている」点です.
 どうも平仮名の部分を見ると「M+ Fonts」と同じ様な気がします.
 ちょっと検索してみようか……ヨクワカラナカッタノデナカッタコトニ.

 今までと違いデフォルトフォントでも余り気にならないので、一応「M+ と IPAフォントの合成フォント」をインストールしましたけど、このままいけそうです.

2008年4月5日土曜日

ドライバは \Device\Harddisk0 でコントローラ エラーを検出しました.

 とある事情でHDDを換装し、別のOSをインストール.
 入れたOSはWindows Server 2003(テスト用途なので、もちろんMSDN版ですが).

 で、Subversion等々を入れて某環境を再現していたんですが、どうにもOS自体の動きが遅い様な気が……
 ハードウェアスペックもほぼ同等なはずなのに、です.

 はて?
 何だろう?
 普通に考えればインストールしたてのこっちの方が快適に動くはずなんだけどなぁ…と.
 原因が思い当たらなかったので、イベントログに何か出てないかチェックしてみると、以下の様なログが吐き出されていました.

日付: 2008/99/99
時刻: 99:99:99
種類: エラー
ユーザー: N/A
コンピュータ: LM-SERVER
ソース: Disk
分類: なし
イベントID: 11

ドライバは \Device\Harddisk0 でコントローラ エラーを検出しました。

詳細な情報は、http://go.microsoft.com/fwlink/events.asp の [ヘルプとサポート センター] を参照してください。

 ありゃ?
 もしかしてPIOモードで認識されてない、これ?
 と、思い至り、早速デバイスマネージャで見る※と、転送モードが「PIO のみ」になっていやがるじゃないですか orz

 最近こんな状態に出くわした事がなかったので、転送モードの事が頭の中から抜けかけていました.
 う~ん何でだろう.
 通常は何もしなくてもDMAモードに設定されてるはずだし…インストール時に何かやらかしたか?

 結局PIOモードになっていた原因は分かりませんでしたが、エラーも動作の緩慢さも解消.
 ※これで直らない時はHDDにつながってるケーブルの指し直し、換装で直るかもしれません

 最近忘れかけた時に懐かしのエラーに出くわす事が多くなった気が…まぁ、使ってる機材が一昔前のブツだからかと言う話もありますがw

 そろそろPCも人生も入れ替えたい今日この頃.


※デバイスマネージャ→IDE ATA/ATAPIコントローラ→プライマリIDEチャネル→「プロパティ」→「詳細設定」タブ→「転送モード」で確認出来ます

2008年3月30日日曜日

Debianで日本語入力環境+フォント設定.

 OpenLDAPを色々といじろうと思い、Debian(何故か今さらSarge[=ver 3.1])をインストール.
 以前Tracのメモ書いた時にインストールしましたが、Ubuntuを上書きしてしまったので、再インストールと言う事に.

 で、ついでにDebianについて↓を参考に基本的な所から勉強.

 Debianリファレンス

 こんな親切なサイトがあるなら、最初から見ておけばよかった orz

 これでようやく dpkg/dselect/apt/aptitude について「なんとなく」理解.
 後方互換はいいですが、なんか同じ様な機能で沢山コマンドがあると戸惑います.

 取り合えず日本語入力が出来ない状態だったので(インストール選択が悪かったか?)、uim + uim-anthyをインストール.
[??@debian]# aptitude install uim uim-anthy stow
 ※ついでに「Stow」も入れたりしましたw

 念のため再起動をかまします.
 IM用のツールバーらしきものが見当たらなかったので、調べてみると「uim-toolbar-gtk」と言うものを起動するらしい.
[??@debian]# uim-toolbar-gtk &



 おお、これでなんとなく様になりました(※ツールバーは右上).
 常時起動するのであれば、Gnomeメニューの「アプリケーション」→「デスクトップの設定」→「拡張設定」→「セッション」で自動起動設定する事になるかと思います.

 で、フォントがアレなのでスクリーンショットの通り、M+IPAフォントを導入です.

 M+ と IPAフォントの合成フォント

 基本的にはFedoraとほとんど変わらないんですが、DebianではFontの管理を「Defoma (Debian Font Manager)」と言うもので管理する様で、その点だけ作業が異なりました.

[??@debian]# tar xvjf mixfont-mplus-ipa-TrueType-20060520.tar.bz2
[??@debian]# cd opfc-ModuleHP-1.1.1_withIPAFonts_and_Mplus/fonts
[??@debian]# mkdir /usr/share/fonts/truetype/M+IPA
[??@debian]# cp M+* /usr/share/fonts/truetype/M+IPA/
[??@debian]# cd /etc/defoma/hints
[??@debian]# defoma-hints truetype /usr/share/fonts/truetype/M+IPA/*.ttf > M+IPA.hints
[??@debian]# defoma-font -td register-all M+IPA.hints
[??@debian]# mkfontdir
[??@debian]# mkfontscale
 ※fc-cacheが必要かも

 あ〜気づいたらOpenLDAPいじる前にこんな時間だよ…
 Debianの勉強だけで終わったじゃない orz

 元々OpenLDAP for Win32で勉強再開しようと思っていただけに、余計な時間をくってしまいましたが、まぁDebianの勉強が出来たという事でOKとしましょう.
 それにしても、Debianをnetinstallすると余裕で2時間近く時間がかかります(PCの性能が酷く古いのも手伝ってますが).
 年々肥大化するLinuxも考え物ですよね.
 正直Windows Server 2003の方がCD1枚30分前後でインストールが済んでしまいますからねぇ.

2008年3月26日水曜日

すっかり忘れていたOutlook Expressの2GB制限.

 思い切り忘れてました orz

 ここ数年Thunderbirdばかり使っていますが、会社の特定作業用PCでは諸事情によりOutlook Expressを使わなければなりません(Outlookも駄目).
 そのPCで今日から急にOutlook Expressの調子が悪くなり、メールの送信時に「警告」が出る様になりました.
 メールによっては送信できたり出来なかったり…
 ログを取ったりしても原因が分かりません.

 んが、ふと思い出しました.
 原因はそう、アレです.
 「Outlook Expressはメールボックスが2GBを超えると何の前触れも無くメールボックスが壊れます」と言うファンタジーな仕様!
 すーっかり忘れてましたよ、そんな制限がある事自体 orz

 未だに直ってないと言うか「2GB超えそうなので注意して下さい」的なメッセージを出す様に様にすらなってない(サービスパックで直ったと思い込んでたんですが、実は2GBを超えそうになったら送受信ダイアログで「警告」としか出ないんですねコレw)事にも驚きましたが、あいも変わらず最適化機能が正常に動作してくれないのも素敵です.

 仕方なしに「手動でメールボックス分散→メールボックス強制作り直し」で時間を大損です.
 WindowsMailじゃもうそんな訳の分からない状態にはならないんでしょうけど、会社じゃ規定等の関係上まだまだ現役続行するしかないOutlookExpressです(Outlookも同じだし).

 むしろこんな有名な制限すら忘れる自分の脳みそ中枢が気になる今日この頃.
 …もうロザン宇治原の脳みそを分けてもらうしかないか orz

'/**
' * 2008-04-08 追記
' */
 Thunderbirdでも2GBを越えたらアウトって本当だろうか?
 http://app.blog.livedoor.jp/s_imai_jp/tb.cgi/50581547
 会社のThunderbirdの受信トレイは2GB越えていた様な気がするんですが…
 明日確認してみよう.

 [2008-04-10 追記] 2.4GBでした.

 ちなみに、リンク先で「Windowのfseek」って書いてありますが、確かgccでも同じだったかと…「多分」ですけど orz

2008年3月19日水曜日

Stow.

 と言う便利で素敵なソフトウェアがあるらしい.

 不要なパッケージを完全に削除できるインストーラー GNU Stow

 全然知りませんでした orz
 いつまで経っても素人全開です.はい.

 気を取り直して記事を見る限り、私が求めているものにかなり近い!
  1. パッケージだとオプションの自由度が低いし、かと言ってわざわざパッケージをリビルドするのは面倒
  2. ソースだと自由度が高いけど、完全に削除するのが面倒
  3. インストール方法をパッケージとソースの両方で併用していると、プログラム間の相互連携に問題がおこる場合がある

 と言う問題を一挙に解決!!

 …ただ、標準のディレクトリじゃなくて、別のディレクトリ(この場合Stow用のディレクトリ配下)にインストールすると、他のプログラムと連携とれなくなる場合がある気がしないでもない(ほぼ3番解決してないじゃない orz).

 まぁ、手動でパス通せばいいだけか…

 取り敢えず、Stowを試す前に2ヶ月以上放置している自宅Linux機のアップデートしないといけません.
 と言うか、地獄期間を過ぎた筈なのに何故か明日も仕事 orz
 9日/16日(日曜)も密かに出社済み orz
 そろそろ体にガタが来そうな今日この頃.

2008年3月6日木曜日

システムハンガリアンが止められない.

 早い時間に帰るタイミングを逃しました orz
 さて、そろそろ帰ります.

 が、一言だけ.
 CやVB(.Netでは無い)のコードを見ていると、

  m_FirstName
  p_TmpPath

 とか

  m_szFirstName
  p_strTmpPath

 と言った変数/メソッドの命名をしている人が居ます(と言うか、そう言う命名規則を設けている).

 当然

  m … スコープ → モジュール(メンバかも)
  p … スコープ → プライベート

 や

  sz … 文字列(終端文字付)
  str … 単なるStringの略

 を意味しています.
 私は「m_」やら「p_」やらは使いませんが(※1)、「str」とか「sz」は好んで使っています.
 実際、このblogで極稀に書くコードでもPrefixを付けて書いているはずです.
 
 で、この書き方を会社の人に言わせると「前時代的でダサ過ぎる.そもそもそれってシステムハンガリアン(※2)だしw」となる訳です.
 まぁ、それはそうなんですけどね.
 別に今の言語 + IDEをもってすれば、型もスコープも明確且つ明快に扱える(スコープは若干あれだけど)から、そんなPrefixなんて付ける必要はありませんよね(大方のスクリプト言語除く(※3)).
 …と言うのは頭の中では理解してます.
 が、実際問題としてソースコードをダダ読みしてると、個人的にはこっちの方が楽ですw

 会社でハンガリー記法はやってないんですが、どうにも読み難くて仕方ありません!
 何度読み慣れようとしても、全然頭に入って来やしません!!
 システムハンガリアンまんせ~!!!

 …じゅ、重症過ぎる orz

 元には戻れない体になってしまったのワタシ.
 そんな感じです.
 どんな感じかは不明ですが、システムハンガリアンな書き方よりは明瞭なハズです.

 嗚呼低レベル低レベル.
 前時代的な書き方から抜け出られるのは何時の日か…

/**
 * 2008-03-07 追記
 */
 久しぶりに更新すると、情報が不足しがちになります.
 まぁ、元々情報不足過ぎなんですが orz

※1 「m_」「p_」を使わない → 「Me」「this」の有無で切り分ける
 基本的にメンバ変数やメソッドは「Me」(VB.Net)なり「this」(C++/C#/Java)を使っています.
 ローカルな変数は何も付けず、メンバな変数には「すべて」付記します(無駄が多いw).

※2 システムハンガリアン → 間違ったハンガリー記法
 正しいハンガリー記法はそこまで否定されるものではありません.
 正しいハンガリー記法は、変数の型では無く「データが何を表すのか」を表記します.
 スコープの表記がどうなのかは…調べないと知りませんが orz

※3 IDEのフォローでどうにでもなると言えばなるか…とも思いますが、変数の型すらどうにでもなるスクリプト言語(特にPHP)には、結構システムハンガリアン記法はあってるかと.
 話は少しズレますが、「文系の人はPHPから始めずにJavaから始めましょう」.
 低レベルな文系人間でもこれだけは声を大にして言いたい今日この頃.

2008年3月3日月曜日

地獄終了.

 約2ヶ月間まるまる放置してましたが、またボチボチ再開します.

 仕事はじめの翌週から予定外の(且つ急ぎの)案件が入ってからと言うもの、1ヵ月半で休み2日、毎日朝から深夜まで仕事、と言う地獄絵図状態 orz
 もうここまで来ると、四六時中仕事の事しか考えられなくなります.
 シャワー浴びてても飯を食べてても、頭の中でコードがのた打ち回ってましたw
 疲れ過ぎで夢を見ず、仕事の悪夢でうなされなかったのが、せめてもの救いです.
 この土日は久しぶりの休みを満喫…と言ってもまぁ寝ただけで終了ですが orz

 それにしても、先ほど放置期間のアクセスログを確認してみましたが、blogって更新して無くても意外とアクセスがあるもんなんですねぇ.
 …と言うか、むしろ更新してた頃より閲覧者が多いじゃないの orz