ソフトウェア・開発」カテゴリーアーカイブ

今も生きているPHPフレームワーク CodeIgniter、3.0RCへ

PHP Webアプリケーションフレームワーク CodeIgniter の今について。

cakePHPなどのRailsに影響を受けたフレームワークに比べると、スクラッチのコードをががっと書いたり、ActiveRecordが実質的にお手軽SQL作成器だったり、MVCのMを作らないなんて選択も出来たり、そのゆるさと学習コストの低さから人気だったCodeIgniterですが、以下のOSLライセンスの問題などからFuel PHPや、DIだComposerだSymfony2だとなかなか現代的なLaravelへの移行が起きていると言われています。

【重要】EllisLabが現行の「CodeIgniterライセンス」はGPLと互換性がないという見解を公表しました
http://codeigniter.jp/blog/article/65

とはいえ、今となってはそのライセンスの問題も解決しており、CodeIgniterは(一応)生きているよという話です。正直、公式サイトを見れば書いてある事だけなのですが、あまりにも日本語ソースが無い(みんなもう興味ない……?)ので、簡単にまとめてみます。

ライセンスの問題はMIT Licenseになり解決

CodeIgniterのオーナーが EllisLab から、ブリティッシュ・コロンビア工科大学に移る事になりました。それに合わせてCodeIgniter 3.0も安心のMIT Licenseへの変更となりました。よほどの事が無ければJavaやMySQL、OpenOffice.orgのような事にはならないのではないでしょうか。

CodeIgniter 2.2.1 はPHP 5.6対応へ

CodeIgniter v2.2.0の時点で、ソースを1行だけ修正すればPHP5.6で動作する状態ではあったのですが、修正なく動作するようになりました。2.x系に関してはCodeIgniterライセンスのままなのですが、今2.xで動作しているシステムを新しいサーバーへ移行するような事になっても、新しいバージョンのPHPで利用する事が出来ます(もちちろん自分で書いた部分のコードは検証が必要です)。XSSフィルタなども修正されています。

CodeIgniter 2.2.1 Released 2015.01.22
http://forum.codeigniter.com/thread-843.html

CodeIgniter 3.0 リリース候補版の登場

ライセンスなどの問題も解決したCodeIgniter 3.0のリリース候補版がついに登場しました。ドキュメントもそこそこわかりやすい物が用意されています。2.xからのアップグレードも可能で、これまでのバージョン同様、移行マニュアルが用意されています。

CodeIgniter 3.0 Release Candidate 2015.01.26
http://forum.codeigniter.com/thread-890.html

と、すごくざっくりですが3点まとめてみました。
既にLaravelでバリバリやっている人や、まだ使ってはいないけどそろそろリッチなフレームワークへ移りたい方※、PSR-2準拠でコーディングしたいんじゃーという方ももちろん多く居ると思います。ただ、重厚過ぎないフレームワークの上で素のPHPをさくっと書きたい時や、今既にCodeIgniter 2.xで動いているシステムを今後も長く使っていくためのリプレースには悪くない選択肢ではないでしょうか。

※私自身、そろそろ勉強したいなと。

追記:
2015年3月30日にCodeIgniter 3.0の正式版がリリースされました。
http://www.codeigniter.com/

C#でCPU使用率を取得する

C#で実行中PCのCPU使用率を取得しようとした場合、下記の様なコードで取れる、と思われます。System.Diagnostics 名前空間を using しておいてください。

パフォーマンスカウンタから値を取得するhttp://dobon.net/vb/dotnet/system/readperformancecounter.html

PerformanceCounter pfcounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
float cpu = pfcounter.NextValue();

……が、なぜか0しか取得出来ない。

MSDNやGoogleに頼ってみてもなかなか明確な答えが見つけられなかったものの、
どうも「最初の1回目の値は使えない」「すぐには値が取れない」らしい。

いろいろ試した結果、以下がCPU使用率を正常に取得できたコードです。
Visual Studio Express 2013 for Windows Desktop + .netFramework 4.5で動作確認済み。

PerformanceCounter pfcounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
float cpu = pfcounter.NextValue();
Thread.Sleep(1000);
cpu = pfcounter.NextValue();

とりあえず動いた、という大変アレなコードですが忘備録として。
(PerformanceCounter インスタンスの nextValue() の計算方法は PerformanceCounterType 列挙体によってが制御されているので、その辺りが関係ありそう? )

PowerShellでJavaプログラムを実行し戻り値を得る

PowerShellで外部のプログラムを実行する方法は、Start-ProcessやInvoke-Expression等いろいろ有るようですが、最もバッチファイル(*.BAT)っぽくシンプル・大きく異ならない書き方はどうなるかなと。

以下は実行するJavaプログラムです。コンパイル済みの物をJarにし、javaコマンドで実行します。引数の指定が有る場合は正常終了、引数の指定がない場合は異常終了します。

package jp.mo.ur.external;

public class ExternalCommand {

	public static void main(String[] args) {
		if (args.length < 1) {
			System.err.println("引数指定なし");
			System.exit(1);
		}
		System.out.println("処理A" + args[0]);
		System.exit(0);
	}
}

外部コマンドを実行する、引数に変数を使う、終了コード(コマンドプロンプトで言う所の%ERRORLEVEL%)を取得、エラーなら終了、という処理がこうなりました。

$CLASSPATH = "F:\uraku\Desktop\ec.jar"
$PACKAGE = "jp.mo.ur.external."

echo "Javaプログラム実行1"
&java -cp $CLASSPATH ($PACKAGE + "ExternalCommand") "hoge"
echo ("終了コードは" + $LASTEXITCODE)

if ($LASTEXITCODE -ne 0) {
    exit
}

echo "Javaプログラム実行2"
&java "-cp" $CLASSPATH ($PACKAGE + "ExternalCommand")
echo ("終了コードは" + $LASTEXITCODE)

実行結果です。アホ毛。
ps_result1

とりあえず目的が果たせました。
ここでコマンドプロンプトでの実行と異なるのは、「発生場所」以降に表示されるエラー内容。コマンドプロンプト上では表示されません。これが不要な場合は……。