金曜日, 10月 17, 2008

PHPの配列

PHPでは、配列をハッシュのように使えます。便利です。値を変数に置くと、読みやすいコードを書くことができます。


$springEquinoxDay=(int)(20.8431 + 0.242194 * ( $year - 1980))
- (int)((double)($year - 1980)/4) ;
$springEquinox=array(3,$springEquinoxDay,"春分の日");

$automnEquinoxDay=(int)(23.2488 + 0.242194 * ( $year - 1980))
- (int)(($year - 1980)/ 4);
$automnEquinox=array(9,$automnEquinoxDay,"秋分の日");

$official_holidays=array( array(1,1,"元旦"),
array(2,11,"建国記念日"),
$springEquinox,
array(4,29,"昭和の日"),
array(5,3,"憲法記念日"),
array(5,4,"みどりの日"),
array(5,5,"こどもの日"),
$automnEquinox,
array(11,3,"文化の日"),
array(11,23,"勤労感謝の日"),
array(12,23,"天皇誕生日"));



春分の日・秋分の日の算出方法は、こちらを参照させていただきました。

水曜日, 10月 15, 2008

PHPでのログイン管理

PHPでのログイン管理において、クッキーを使ってセッション番号によって判別する方法を示します。

session_start();
$sessionid=session_id();

if(strcmp($_SESSION['sid'],$sessionid)!=0)
{
$user=$_REQUEST['user'];
$password=$_REQUEST['password'];

if(strcmp($user,$user_cfg)!=0)
{
header('Location: index.php?message=noUser');
}

if(strcmp($password,$password_cfg)!=0)
{
header('Location: index.php?message=noPassword');
}
if(strcmp($user,$user_cfg)==0 && strcmp($password,$password_cfg)==0)
$_SESSION['sid']=$sessionid;
}

セッション番号を記録し、現在のセッション番号と比較するのに、ここではセッション変数を用いています。

セッション変数$_SESSION['sid']に記録されたセッション番号と、session_id()で得られる現在のセッション番号を比較します。もし一致しなければ、ログイン情報をチェックし、一致しなければログイン画面index.phpに移行します。一致すればセッション変数に現在のセッション番号を記録します。

月曜日, 10月 13, 2008

職人芸

昨日は、お隣さんに、庭を拝見させていただいた。日本風の邸宅から、見事に手入れされた庭木が見える。いわく、「刈り込みというのはね」「職人芸なんですよ」「自然に」「はさみが動く」「理論じゃない」。先が見えなければ、刈り込むにもうまくいかないだろうと意見を述べたのだが、「いや、そうじゃない」「波長があって」とおっしゃる。

そんなに技術を魔術にしては困る、それじゃあいったいどうやって教わればいいんだろう、と思ったのだが、あくまで確信をこめて「どこに植えたらいいかって、それさえまったく飲み込めない人間もいるんですよこれが」とこれはまた頓着なくおっしゃる。

興味深く思ったのは、そういえばコンピュータに関しても似たような言い回しがあって、やはり「波長が」と言うのである。「どうも合わない」と思われるノリのブログもあれば、結果が明日になって出てくるようなコンパイルはしたくないという波長もある。しかし、他人に「Javaとは波長が合う」と言っても、Javaでプログラムを組み、別言語を使用したことがなければ、意味は通じない。「つまらないことに引っかからなくてすむから書きやすい」といっても、これも抽象的な話である。

だから、ようするにそういうことであろうと結論付けている。ようするに、Javaプログラムの書きやすさなど、説明しようとすれば「あるべきところに、ちゃんと備わっている」としか言いようがない。それは、類まれなる設計のよさからくるものであり、使う人の質と数によるものであり、ひいては設計したチームのリーダーシップによるものである。

ちなみに、植物を植えつけるなら分散して、いくつかの株に分け、どの場所がもっとも適しているかを見るのが安全である。日当たりと水はけと風通しと、植物でも科によって種によって、好む場所が違う。ある程度の見当をつけたら、さまざまに試みるのがコツというものだと思っている。

土曜日, 10月 11, 2008

C++/CLI でのプログラミング

先日、Visual C++ 2005 Expressでプログラムを書いていて、理解できないコンパイルエラーに悩んだ。何かと言うと、このコンパイルがキーワードチェックをしない。

array<int>^ array={5,4,3,2,1};
array<int>^ test;

分かってみればどうということもないが、「type 'int' unexpected」と出るので、構文のどこがまずいのか、探し出すのに手間取った。

C++/CLI では、Managed C++ をさらに改良した構文を用いて、どこかしらJavaの方式を継承した気配の言語が実装されている。現行のC++からの移行というより、整合性のある構文で、いわく違和感のないプログラム形式を目指しているという。

デリゲートとは、クラス構造を超えてメソッドにアクセスするポインタである。なんと足し算、引き算がある。メソッドを足された順に呼び出すという。

メタなクラス記述用クラスである属性クラスを使える。複数指定でき、引数もとる。Javaのアノテーション機能のことだという。しかし、Javaではドキュメンテーションにしか使わない。

タイプをメタで記述するテンプレートもある。ジェネリックもある。ジェネリックであればMSILで使えるという。制限もつく。推測でタイプを決めるという。

packがないのはプログラムでコンポーネントを記述するメリットを生かしていないと思う。

火曜日, 10月 07, 2008

PHPの出力を取得し、文字コードを変換する

PHPでは、include()関数を使って別のPHPプログラムの出力結果を読み込む方法があります。

 
include("news/news.php");


読み込む際に、同時に日本語文字コードの変換を行うやり方を以下に示します。

 
ob_start();
include("news/news.php");
$eucContents=ob_get_contents();
ob_end_clean();
$utf8Contents=mb_convert_encoding($eucContents,"UTF-8","EUC-JP");
echo $utf8Contents;

Qt: 外部プログラムを起動する

  Qt/C++ のアプリは、外部へ直接アクセスできます。これはネットアプリでは不可能な Qt のメリットです。 外部プログラムを起動することもできます。QProcess::startDetached() を使うと独立したプロセスを立ち上げることができます。 この QProces...