PHPのimap_open [プログラム]
PHPのimap_open関数,特定のメールボックスからメールを引っ張ってくる目的にはよいのですが,メールボックスをIdPのように使おうとする時に,気をつけるべきことがあります。まぁ,そもそもIdPとして使うな,という話ではありますが,そういう要件の仕事があったので。
上記のマニュアルには,$n_retriesが省略可能で初期値が0となっていますが,これは騙されます。PHPのソースを読むと,「第5引数が存在する時のみ$n_retriesをライブラリに設定する」となっています。このため,明示的に「0」を指定するのと省略するのでは,動作が異なってしまいます。
- 省略時
- 3回接続を試行する
- 0を指定時
- 1回接続を試行する(1を指定した場合と同じ)
この接続の試行は,一つのセッション中で行われます(LOGON => LOGON => LOGON => LOGOUT)。サーバーによっては,1セッション中の複数回のLOGONに非常に時間がかかる場合があり,ブラウザとの通信がタイムアウトしたりもします。
このため,必ず$n_retriesは指定するようにした方がよいでしょう。
PHPの名前空間 [プログラム]
マニュアルで見つけられなくて試したことの備忘録とか愚痴とか。
require_once等でファイルをインクルードした場合,読み込む側の名前空間は読み込まれた側には引き継がれない。
例えば,- file1.php
<?php namespace test1 { echo 'test1.php : [' . __NAMESPACE__ . ']' . PHP_EOL; include('file2.php'); }
- file2.php
<?php echo 'test2.php : [' . __NAMESPACE__ . ']' . PHP_EOL;
に対して,出力は,
test1.php : [test1] test2.php : []
となる。
- クラスと関数では名前空間の解決方法が違う。クラスはグローバル空間を解決する必要がある。
さくらインターネットでZend Frameworkを使う時の注意点 [プログラム]
はまったので……。
さくらインターネットのレンタルサーバー上でZend Frameworkを使う場合,IndexControllerにIndexAction以外をのせるとNo input file specified. となってしまいます。
原因は,ApacheのMultiViews。こいつが/index/fooとかについて読み替えを行うようで……。対策は,フロントであるindex.phpを別の名前にすること。私の場合,今回はfoobar.phpにしました。当然,DirectoryIndexやRewriteRuleも書き換える必要があります。
gitレポジトリをSmart HTTPで公開した時のPermission [プログラム]
- 問題点:gitレポジトリをSmart HTTPで公開して,そこへHTTPでpushしたらPermissionがapache:apacheに対して664になっていて他のユーザーからのpushに失敗した。
- 解決法: git repo-config core.sharedRepository all で,常に 666 になるようにする
--share付きでレポジトリを作った場合,core.sharedRepositoryは2になるようです。同一グループからは読み書き出来るけれども,他人は読むことしかできません。 で,調べるとallとかworldとかにすれば他人も書き込めるようなので,これをやることでpushが可能になりました。 既存ファイルはchmod u+r -R *とかする必要があるかもしれません (面倒なので,試す前にやった)。
Windows Phone 買った [プログラム]
今更ですが……
IS12Tを発売日に購入しました。
で,最近プログラムも始めました。 まぁ,できあがったのはサンプル程度なのでまったく公開できるような物がありませんが……。
よく考えると,Silverlightでのプログラム経験がないので,実質的には初のSilverlightプログラムだったり。WPFの経験で色々乗り越えている感じです。
C#とVisual Basicの初期化順序の違い [プログラム]
Visual Basic中学校の掲示板にて, 初期化順序について書いたら間違ったので,こちらにも書いておきます。
- C#の場合
- 派生クラスのフィールド
- 基本クラスのフィールド
- 基本クラスのコンストラクタ
- 派生クラスのコンストラクタ
- Visual Basicの場合
- 基本クラスのフィールド
- 基本クラスのコンストラクタ
- 派生クラスのフィールド
- 派生クラスのコンストラクタ
行儀の良いプログラムでは問題になりませんが,基本クラスのコンストラクタ中から仮想メソッドを呼び出すと, 動作が変わる(C#ではフィールドが初期化されているがVBでは初期化されていない)可能性があります。
あまりにも公告コメントが多いので,コメント欄を閉じます。
Visual Studio 2008からTeam Foudnation Server 2010に接続する時のURI [プログラム]
Visual Studio 2008 SP1からTeam Foundation Server 2010に接続する方法というのは,結構見つかります。結論的には,
- VS 2008 SP1をインストールする
- Team Explorer 2008を入れる
- VS 2008 SP1を再度インストールする
- Team Foundation Server 2010 (インストーラー) 用の Visual Studio Team System 2008 Service Pack 1 上位互換性更新プログラムをインストールする
- VS 2008で,サーバー名としてhttp://localhost:8080/tfsまたはhttp://localhost:8080/tfs/CollectionNameを入力する
となります。が,ここで落とし穴。TFS 2010の管理コンソール上で,コレクションのURLは末尾に/がついています。 ところが,/付きで書くとTeam Explorer 2008はプロジェクトを見つけることができません。
……これ,気付くのに数時間かかった……。
2011年1月14日修正:インストールあてる→インストールする
XmlSerializerで配列を要素の直下に展開する [プログラム]
メモ書き
XmlSerializerクラスで,
<Array> <Elem></Elem> <Elem></Elem> <Elem></Elem> </Array>
のような構造のXMLを作成する場合は,
class Array { [XmlElement(ElementName="Elem")] public Elem[] Elements { get; set; } }
のように,XmlArray属性ではなくXmlElement属性を使う。
twimemo: R流・WPFアプリケーション開発 @ わんくま同盟 東京勉強会 #40 [プログラム]
わんくま同盟 東京勉強会 #40中でのセッション,R・田中一郎さんの「R流・WPFアプリケーション開発」で知ったこと。 なぜか元ネタが@nakawankumaさんだったりする不思議。 以下,Twitterでつぶやいたログ。
- DataContext より DataTemplate の方がはやり
- {Binding x:Static WpfApplication1:Foo.Items} (静的なフィールド・プロパティへのバインディング例)
- CommandManager.InvalidateRequerySuggested(); RT:@nakawankumaさん (Command.CanExecuteの強制呼び出し) [MSDN]
VSのセットアッププロジェクトと.NET Frameworkのバージョン [プログラム]
VSのセットアッププロジェクト,最初のバージョン以外に対応させる場合は,マージモジュールを変更するほかに,起動条件でのバージョン変更も必要。
同僚がはまっていたのでメモ代わりに。