C++でconstと非constの実装をひとつにしたい

ここでGetNameの実装をひとつにしたい。

ソースはツーチャネルとhttp://stackoverflow.com/questions/4589622/simplifying-const-overloading

C++で内部クラスから外部クラスの変数にアクセスする

g++でコンパイル

なんか色々出たがスルー。

reinterpret_castを使っているのはAがキャスト演算子を持ってたらやばいためと思われる。またこれはthisがNULLかどうかのチェックはしてないがスルー。

PHPのセッションとクッキーの関係

PHPのセッションとクッキーの関係を調べる。
次のファイルindex.phpをつくりブラウザでアクセスしてみる。

このときのhttpヘッダ(行きと帰り)は以下のようになる。

とくにクッキー関係はない。

つぎにindex2.phpを作り同様に実験してみる。

ヘッダは以下

サーバからSet-Cookie: PHPSESSID=he08r7184t432launpk1ufpg94; path=/ というのが帰ってきた。print_rで表示した$_COOKIEはからだった。

ここでこのページをリロードすると以下のようになる。

$_COOKIEは以下のようになる。

ここまでのまとめ

  • 何もないところからアクセスするとサーバはSet-Cookieヘッダを返す。
  • ブラウザはその情報を覚えておき、次にアクセスするときCookieヘッダでそれを送る。

index3.phpをつくり同様にやってみる。

なんかいリロードしてもしても上記のヘッダになる。つまり$_SESSIONに書いたものはヘッダには反映されない。これはサーバに保存されている。

サーバのtmpディレクトリにはファイル”sess_he08r7184t432launpk1ufpg94″が作られており、内容は以下になっている。

つまりブラウザから送られてきた、Cookie: PHPSESSID=he08r7184t432launpk1ufpg94からこのファイルを見つけ出してPHPはこのファイルの内容を$_SESSIONに書き込むのだろう。

index4.php

これを読み込むとリロードするごとに$_SESSION[‘mysessname2’]の値が増えていく。

ここでブラウザを終了させ、再びこのページにアクセスすると、PHPSESSIDも変わり、$_SESSION[‘mysessname2’]も0にもどる。つまりブラウザはなにもファイルには保存してない。こういうクッキーは一時的なクッキーなのだろう。

横路にそれて、少し関数の実験結果。
session_name(“mysessname”);をsessioin_start()の前に呼ぶと、PHPSESSIDがmysessnameに変わる。

session_id(“mysessid”);をsession_start()の前に呼ぶと、he08r7184t432launpk1ufpg94のような文字列がmysessidに変わる。本来この文字列はクライアントがCookieを送ってこないときは自動で作られるが、この関数で固定するとクライアントがCookieを送ってこないときも、サーバに保存してある情報を取り出せる。

実験したところ、同じサーバ上の2つのバーチャルホスト上でおなじセッションIDを使うと、同じ値が読み込まれてしまった。

ここではPHPのセッションとクッキーの関係について書いたが、クッキーのことについては有効期限やドメインやパスについては書いてないのでまた調べたいと思う。そもそもPHPセッションはクッキー以外でもできる方法があるので、クッキーとは別の機構だからクッキーを考えるときPHPセッションを使わなくてもいいかもしれない。

C#でフォルダ配下のファイル一覧を取得して並び替える

DirectoryInfo.GetFile(“*.txt”)などどすればファイルを絞り込める。
CompareToは数字の引き算のように考える。

C++/CLIの場合の書き方

C#でコマンドを実行して結果を取得する

コマンドラインプログラムを実行して結果を取得する。ここではnetstat -aを実行して結果を得るプログラム。

RedirectStandardOutput = trueすると結果を取得できる。
UseShellExecute = falseにすると、ShellExecuteExではなくCreapteProcessを使う。上記のような作業はパイプを使うのでCreateProcessじゃないと無理と思う。

KB982168のupdateができなかったときのメモ

http://www.microsoft.com/downloads/details.aspx?familyid=4C2F99F6-53B9-454D-BB47-D1A1FCD58F66&displaylang=jaへいって、ダウンロードして実行。

実行するとルートドライブに一時的なやたらと長い文字列のフォルダが作られる。
実行中になんかファイルがない的なエラーがでるので上のフォルダの中から見つける。

これでできた。

これ以前に、いろいろ試して、dotnetfx_cleanup_tool.zipなどでいったん削除したりしたあとのエラーです。

サーバーのバックアップ

Linuxサーバーのバックアップは色々なツールがあるが、やっぱり手動でやるのが簡単そうなのでここに書いておく。というのもmysqlのバックアップのやり方をいつも忘れるので。

apache

アパッチはドキュメントルートのhtmlやphpと/etc/apacheなどにある設定ファイルを取っておけばいいだろう。

mysql

mysqlはデータディレクトリをそのまま固めてしまうのと、コマンドをつかってバックアップを作るのを2つやっておく。それと設定ファイルも取っておく。

mysqlのデータディレクトリはmy.confのdatadirを見ればいい。バックアップを取るときはmysqlを止めてからやったほうがいいだろう。

コマンドmysqldumpで全データベースをバックアップ

これを戻すときはmysqlコマンドにリダイレクトでぶちこんで戻すはず。
ここでは試してないが以下のようになったはず

.NET2 のコンボボックスのKeyDownでエンターのときビープ音が鳴る

e->SuppressKeyPress = true;したら鳴らなくなった。原因不明。
以下はc++/cliソース。

cygwinでプロンプトが#になる

cygwinをインストールしたあとでWindowsのユーザを追加してcygwinを起動するとプロンプトが#になってしまう。以下のコマンドで直す。