実に個人的偏見に満ちた、ネタとして見るにもアレな内容。一言で言えば「オレサマが積み上げてきたCのライブラリこそ至高」的な老害意見。

 その意味で特にツッコミいれたいのがのっけの「C言語」。
 「古い」「安定性が高い」のは良いとして、その習得はある意味その下に挙がってる「C++」よりも困難であり、かつマトモなPGを組むには更にその下で挙がってる「Java」よりもコードに気を使う必要がある。ぬるぽとかよっぽどC言語の方が先だろうと。
 なので「M1ガーランド」の例えをそのまま流用するならば「分解されたM1ガーランド。パーツ説明書無し。弾薬の入手は困難」というのが正しいように思う。


 結局のところ各言語の特徴・違いを理解し、且つその周辺技術についても理解し、必要とされるアプリに対して適切な言語を選択し、適切なコードを書くようにするのが大事だよねという話。

2014-09-04 [技術]

 と、言う話らしいですが、十数年来のPHPerである私としましては控えめに申しましても

  「二度とIIS+PHP構成なぞ組むかURIIIIIIIII!!」

 と言うのが本音でございます。
 WindowsでPHP動作させたい場合はZendServerCEが一番手っ取り早いとゆーのが結論です。ZendFrameworkを動作させる場合は尚更。

2013-06-24 [技術]

 色んな理由からLinuxからWindows(Server)の操作をしたい事があります。
 専用のAPIやらRPCやらを持ってるモノだったらそこに対してアクセスしますが、内部コマンドについて処理をしたい場合何らかのCLI系サーバをWin側で立ち上げるか、はたまたIISとASP等を経由して内部コマンドを実行、といった手段があります。

 そんな手法の1つ、「LinuxからWindowsのコマンドを直接実行する手段」としてsamba系のツール「winexe」があります。と言うかあることを最近知りました。これはWindowsで言うところの「psexec」に似ており、コマンドプロンプトで実行するようなコマンドを実行することができます。

 で、更にPHPのexec関数やらsystem関数やらを使う事でLinuxベースのWebアプリからWindowsの特定制御を行う事を試みたのが今回のお話です。そんなことしたい人間がどれだけいるかって話です(苦笑)。
 とりあえずLinuxはおなじみCentOS5系でPHPは5.1.6。WindowsはServer 2008 R2。winexeは1.00。

 winexeのインストールは割愛。ソースコンパイルして適当なbinにコピー。
 適当にコマンドテスト。

   winexe -U "Administrator%pass" --system //[HOST] ipconfig 1> /var/log/test_winexe.log

 とりあえず出力をファイルに書いてます。結果ipconfigの結果が素直に返って来て感動。但し今更SJIS。まあコマンドプロンプトだから仕方ないか。

 で、次にこれをPHPのexec関数から実行。

  exec("winexe -U \"Administrator%pass\" --system //[HOST] ipconfig 1> /var/log/test_winexe.log");

 …ところがコレが何時まで経っても応答が返ってこない。psでプロセス見るとコマンドは発行されて止まってる様子。killしないと残りっぱなし。
 ログファイルを見ると

   tevent: EPOLL_CTL_ADD failed (Operation not permitted) - falling back to select()

 というエラーが1行。
 「permitted」云々言ってるんでアクセス権かな、と思いsudoによるroot権限実行に変更。しかし変化無し。
 他の実行コマンド系はどうだろう、と「system()」「shell_exec()」を用いるものの変化無し。
 またコマンド内容をシェルスクリプトに移動し、そちらで起動しても変化無し。

 sudoでもそうだったがこういった場合標準出力関係でトラブる事が多いので、似た状況で稼働するcronでの起動を試す。ユーザはPHPの稼働環境と合わせる意味でapache。しかしコチラは無事に稼働。TTY及びapacheユーザ権限の問題の可能性が薄れる。

 仕方ないので(いや最初からやれよと)元々出ているエラーメッセージを追うことに。
 「EPOLL_CTL_ADD failed」はコネクション系のエラーぽい。しかしここで「Windows側に処理結果が残るバッチ」を作成して実行したところ、そちらの稼働は確認できた。つまるところ「コマンドを読んだ後の戻り」が上手く言ってない様子。

 そうなると、どちらかというと「PHPから起動した故にプロセスの戻りのパイプがよくわからんことになっている」という可能性があるのかなと。EPOLLについて調べてたらファイルディスクリプタがどうこう言われたし。
 なので上記シェルの起動を、プロセス単位で制御する「popen()」に変更。そしてポインタを開く際の権限モードを書き込み可能な「w」で動くように設定。

  $pp = popen("winexe -U \"Administrator%pass\" --system //[HOST] ipconfig 1> /var/log/test_winexe.log","w");
  pclose($pp);

 上記の様にしたところ、無事終了しつつ且つ結果も取れるようになりました。
 更に実験で上記popenの権限モードを読み専用の「r」に変更したところ、他のexecやらと同様に停止しつつプロセスに居残り、また同様のEPOLL_CTL_ADD系エラーが発生することを確認しました。


 まーこんな話が世の中役に立つかはアレですが、他の実行ファイルを起動する場合にも似たような話が発生する可能性はあるでしょう。まあ一例ってことで。
2012-09-01 [技術・作業]

 ほうほう。ついDartの存在を忘れてましたがイマイチJavascriptにとっかかりにくい身としては置き換えとして期待したいところ。
2012-02-20 [技術]

 久々にPHP話だよ!

 CentOS5系列最後の方をベースに、毎度おなじみZnedFramework+Smarty+PostgreSQL環境で開発しております。
 このディストリになるとインストされるPHPを5.1.6系列か53系列かを選択できる。まあ一部足りないモノがあったりもするのだが、この間には越えられない壁があると判断。
 またPostgreSQLも8.1系列と8.4系列を選択できる。ここにも超えられない壁…というか今回xml型を使いたかったので8.4を選択。まあこの2者のため「PHP53からPostgreSQL84につなぐ」ための設定に少し手間取ったりもしたがそう大した話ではない。

 さてちまちま開発する中でそりゃ使うだろうという関数が日付関数「date」。今まで一度も使わなかった事はないね、とゆーくらい頻繁に使うこの関数だが、今回デフォのphp.ini設定のまま使うと
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings.(中略)
とか表示される。まあWarning非表示にして無視するという選択肢もあるが、標準的な手法としては設定ファイルphp.iniの「date.timezone」に適切な値を設定すれば良い、ということらしい。らしいので日本標準時を指定する「Asia/Tokyo」を設定し再起動…うむ、エラーは出なくなった。


 …と、一般の手法で上手くいかないのが私のパターンw

 確かにエラーは出なくなった。が、なんか表示される時間がおかしい。
 気づいたのはPostgreSQLに設定された時間がずれていた事。当初はてっきりPostgreSQL側のtimezone設定がおかしいものと思って調整したが変わらず。と言うか「select date();」で普通にJST返ってくるし。
 上述のphp.iniの書き方がおかしいのかなー、と思い色々試すが変化なし。が、ここで先日遭遇したCentOS自身のtimezoneを指定する「localtime」がおかしいよ話を思い出す。ひょっとしてPHPもここの解釈おかしくなってんじゃないか?と言うかどっかでまとめて時間管理してるのか?と思い、試しにphp.iniに時差の少ないであろー「Asia/Seoul」を設定したところ本来のJSTに近い時間が表示された。やっぱりかAAAAAAAAA!!!!
 ちなみに見たところ「Asia/Tokyo」設定で返されるのはGMT-5時間くらい。位置的にはペルーとかの南米付近で間違いようがない…のだが敢えて間違う可能性があるとすると同じ「Ja」から始まる「Jamaica」と取り違えた…のだろうか…。

 しかしこんな話が一般的だったらもっと世の中騒いでてもいいはずだが、軽く調べた限りこんな事で困ってる人はいないようだなぁ。なんかウチの環境だけ特殊なんだろうか。日本限定で。
 そしてこれの対策は…どうしたもんかなぁ…w


追記:
 対処方法編。基本的には前のCentOS・/etc/localtimeと同様。このファイルの本来のコピーorシンボリックリンク元であるところの「/usr/share/zoneinfo/Asia/Tokyo」をどうやらPHPは参照しているらしい。なのでコレを前回同様1つ前のソレと置き換えればOK。
 …しかしなんでこれだけこんな状況なんだか。「yum update」でまとめて更新するとこの間違ったファイルに置き換わってしまうようだが。他国の嫌がらせかw
2012-01-19 [技術]

 ふむ?中々に面白い試み。ここ最近PHPってあまり目立った動きがないかなーと思ってたけど色々やってるところはやってるのねぇ。
2011-12-21 [ソフトウェア]

 「社会に対する影響度」で言えばこの人の方がよっぽどジョブズ氏よりも大きいハズだよなぁ…。CがなければObjective-Cもなかっただろうし。
2011-10-14 [ソフトウェア]

 うん?サーバサイドの言語かと勝手に予想してたら仮想マシンレイヤ上で動作するってことはJava VMと同じ方式のクライアントサイドなのか。まあ別にサーバサイドでも使えるのだろうけど。

 つーことはやっぱJavascript並びにJAVA置き換えを狙ってるのかな。
2011-10-11 [技術]

 ほぉっほぉぉ~う。そいつぁ極めて興味深いですよ?
2011-09-10 [ソフトウェア]

 これはこれで一種かつ一流の自虐ギャグと言えるかもしれない一方、今後より増加するであろうタブレット型と携帯端末型との整合性を取る一助になるのは確か。分断化が激しいなら分断化が問題とならない開発環境を作ればいいじゃない。マリー風味。しかしこの場合のケーキは市民に平等に提供されるのでした。めでたしめでたし。
2011-02-07 [ソフトウェア]

 …どーも最近Oracleが絡むと単なる競合潰しのよーな気がしてならない。
2011-01-31 [ソフトウェア]

 むう、PHPがランクを落としている。ZendFrameworkとか導入してコーディングの流れをがらっと変えるとまたイメージ変わると思うんだが、というか変わった。最近はZendServerで導入も楽&プラットフォーム依存も縮小してきてるし。
2011-01-12 [ソフトウェア]