PHPで Cannot use string offset as an array

結論:
文字列に対して2次元配列のようにアクセスするとなる。

実験結果

javascriptで検索エンジンの入力キーワードをハイライト表示する

http://scott.yang.id.au/code/se-hilite/ ここで開発されている、”se_hilite.js”をダウンロードしてサーバに置く。

ページに以下の記述を追加する。これだけで完了。

テストしてみるには、Hilite.debug_referrerの値を適当にいじる。よくわからない場合はgoogleで検索してURLを設定する。

ある特定のidをもつエリアだけをハイライトしたい場合は、Hilight.elementid = “myid”のようにidを指定する。

ここに置いてみた。Google検索から飛べばハイライトされるはず。

VS 2005 Expressで2008で開発できるようにして32ビットでも動くようにする

開発環境を2008にすると、新しいDLLなどを使うのでwin2kなどで動かなくなると嫌なので、しかし2005はvistaとかで上手く動かないのでどうにかしたい。

プラスCシャープでアプリを作って32ビットDLLを読み込むと64ビットで動かなくなるのでどうにかしたい。

2005CSで空のプロジェクト”MyApp”を新規作成
保存する”C:\T\MyApp”
プロジェクト”MyApp”を削除する。
2005CSを閉じる
フォルダ”MyApp”を削除する。
MyApp.slnの所に2005というフォルダをつくりこのソリューションファイルを移動する。
移動したMyApp.slnを開く。
新しいプロジェクト”MyAppLib”をつくり、C:\T\MyApp に保存する。

AssemblyInfo.csとClass1.csをどっかにコピーしてから削除する。
2005CSを閉じる
MyAppLib.csprojをソリューションファイルと同じところに移動する。
ソリューションを開き、利用不可になっているMyAppLibを削除する
既存のプロジェクトをついかで、2005\MyAppLib.csprojを追加する。
既存の項目を追加で、とってあったAssemblyInfo.csとClass1.csをC:\T\MyApp\MyAppLibの下に戻して追加する。このときcsprojの下にコピーする。slnやcsprojのあるところにはcsファイルは置かないので、csprojを直接編集する。
2005CSを閉じて、エディタでMyAppLib.csprojを開いてファイル名らしいところを、..\MyAppLib\Class1.csなどと編集する。
ソリューションを開いてちゃんとファイルが開けるか確認。
MyAppLibの参照に”System.Windows.Forms”を加える
プロジェクトMyAppLibにあたらしいフォームを追加する。
この時もcsprojの下につくるので上記のように頑張って移動する。
Class1にメイン関数MyMain()を追加する。

ソリューションに新しいプロジェクト”MyApp”を追加する。

プロジェクトMyAppのForm1を削除する。
Resources.resxとSettings.settingsを削除。
MyApp.csprojを2005に移動して、エディタで開いて、ファイル構成が同じになるように色々頑張る。
MyAppの参照にプロジェクトMyAppLibを加える。
MyAppのMain()を書き換える。

MyAppがちゃんと動くか確認。2005の下に変なファイルを作らないか確認。

次に2005を2008ファルダにコピーする。
2008\MyApp.slnをVS2008CS Expressで開いて頑張る。

32ビットで起動するためのexeをVC2005EEでつくる。
VC2005EEで新しいフォームアプリMyApp32をつくり、フォームやアイコンを削除して、参照にMyAppLib.dllを加えて、main()を書き換える。

これでMyAppLibが32bitDLLを使っていても64bitから起動できる

svnで特定のファイルやフォルダを無視する

1,特定のファイルを無視する
ファイル名の拡張子がbmpのファイルを無視する場合。
ここではmyprojの下にあるbmpファイルを無視する。

以下を追加

2,特定のフォルダを無視する
logフォルダがあり、このフォルダはco時、空のフォルダを作成して欲しいけど中のすべてのファイルを無視する場合。

以下を追加

確認するにはフォルダに移動して、以下を実行

C#のWeakReference

C#の参照はオブジェクトを保持している変数がある限り、ガーベッジコレクトされることはありません。こういう参照は強い参照と呼ばれます。WeakReferenceの参照はそれを保持していても、他の強い参照がない限りガーベッジコレクトされます。

WeakReferenceにはShortとLongがありますが、ここではShortのみ考えます。

アプリケーションがモードレスなダイアログ(メッセージボックスのようなOKを押さない限り次に進めないものをモーダルダイアログといい、そうでないのをモードレスといいます)をいくつも作り、それを配列に格納したいとします。普通の配列やコレクションを使うと、参照は強い参照になるので、このダイアログが閉じられても参照を保持し続けガーベッジコレクトされることはありません。これをWeakReferenceの配列として持てば閉じられたダイアログはガーベッジコレクトされ、メモリの節約になるかもしれません。

まずアプリケーションのメインフォームのメンバーにWeakReferenceのListを加えます。

アプリケーションがモードレスダイアログをつくって、このリストにWeakReferenceを追加します。

WeakReferenceのコンストラクタに渡したオブジェクトは他の強い参照がなくなればガーベッジコレクトされます。

Listから列挙

WeakReferenceのTargetがすでにガーベッジコレクトされている場合はnullが返ります。ただしオブジェクトがガーベッジコレクトされるかは定かではありませんのでタイミングには注意が必要と思われます。それと、ガーベッジコレクトされてもWeakReferenceオブジェクト自体は消えませんので上記のようなやり方でずっとやると、Listがどんどん大きくなっていってしまいます。