2011年11月7日月曜日

CodeIgniterを使ったアプリケーションのUnitTest

今年から、専門学校の授業でPHPを教えているのですが、
その授業のネタとしてCodeIgniterを利用しています。

基本的な機能について、大体触ったので、これから実践的な
内容にしようと思って、教科書にしている「CodeIgniter徹底入門」を
見ていると、フレームワークでユニットテストのライブラリが用意されているようなので
試してみました。使い方は、以下のように
ライブラリを読み込み、テストを実行、レポートを出力する。
最後に確認という感じです。

// ライブラリの読み込み
$this->load->library('unit_test');
// テストの実行
$this->unit->run(実行するメソッド、評価対象, 期待する実行結果, テストの名前);
// テスト結果(レポート)の表示
echo $this->unit->report();

ちなみに、以下の本です。


ただ、これだとブラウザでリクエストしないとテストが実行できないので、
テストコードも本番環境にデプロイしないといけなさそうです。

が、授業の一環なので、ひとまずはこれで良いかな。

で、データベースのテストに関して調べていたら、本番用とテスト用で
データベースを切り替えるか、テスト用のテーブルを用意するしかなさそうな感じ。


2011年10月12日水曜日

Google App Engine Go SDK1.5.5の変更点

Google App Engine Go SDK 1.5.5がリリースされました。

1.5.4からの変更点を確認した所、たくさんの変更がありました。
したがって、1.5.4で動作していたプログラムが1.5.5ではコンパイルエラーになる可能性が高いです。(データストアを使っていたら、ほぼNGでしょう)

わかり次第、変更点を追記していく予定です。

変更点は以下のポイントです。

  1. app.yamlに指定するapi_versionは"3"を指定する。(ローカルサーバが動きません)
  2. Cross Multiple Group Transactionの追加により、datastore.RunInTransaction()の引数にTransactionOptions構造体の引数が必要。メンバ変数XGにfalseを設定するとSingle Transactionとなる。
  3. datastore.NewKeyにappengine.Contextの引数が追加された。
  4. datastore.NewIncompleteKeyも同じくappengine.Contextの引数が追加された。
  5. datastore.NewIncompleteKeyにも親キーを指定するKey引数が追加された。
  6. http.ResponseWriterのHeaderが初期値が"text/plain"になっているので、w.Header().set("Content-Type", "text/html")を入れる必要がある。※ただし、w.Fprintf()で文字列を出力した時の挙動
  7. templateパッケージが変更されている。(詳細は、http://golang.org/pkg/template/#Template.Parse参照)
  8. gofmt、gofix、godocコマンドが同梱されるようになった。(1.5.4以前は無かった)※gofixコマンドはtemplateパッケージの変更には対応していない(?)
2011.10.13:
  • 8を追記
2011.10.15:
  • gofixコマンドのtemplateパッケージの変化に対応していない事を追記
2011.10.18:

  • datastore.RunInTransactionのTransactionOptions構造体の説明を修正




レイアウトのXMLに配置したButtonのOnClickはDialogでも使えるらしい

以前、移転前のブログにて、
「レイアウトのXMLに配置したButtonのOnClickがDialogだと使えない?」
http://hobby.txt-nifty.com/t1000/2011/06/xmlbuttononclic.html

という記事を書きました。

しかし、後日、コメントが付き、以下のサイトのようにするとDialogでもonClickを
利用する事ができるようです。

http://wiki.android-fun.jp/?layout%20xml%E3%81%ABonClick%E3%81%A7%E5%91%BC%E3%81%B0%E3%82%8C%E3%82%8B%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B


レイアウトのボタンに定義したonClickはDialogからは使えない件について、
Activityに定義すれば利用可能。

emacsにcss-modeを導入する

emacsでCSS3を編集しようとした時に、どうも見にくいなと思ったので、
emacsの設定ファイルがないか探していた所、以下のサイトにcss-mode.elが
公開されているという事で、導入しました。

A CSS editing mode for Emacs
http://www.garshol.priv.no/download/software/css-mode/

上記サイトにある、css-mode.elをMacOSXの場合は、~/.emacs.dにコピーし、
.emacsに以下の設定を追記します。


;; CSS mode
(autoload 'css-mode "css-mode")
(setq auto-mode-alist
	  (cons '("\\.css\\'" . css-mode) auto-mode-alist))

あとは、emacsでcssファイルを開き、色が変わればOKです。

追記:
上記までだと、入力時のタブ幅が8(?)なので4に変更するのと、
インデントをCのスタイルに変更する設定も一緒に入れておくと良いでしょう。

(setq cssm-indent-level 4)
(setq cssm-indent-function #'cssm-c-style-indenter)

参考サイト:
http://uch-x40.seesaa.net/article/44721501.html

2011年10月11日火曜日

emacsのコマンド集


今日は、Rubyのkazuhisa1976さんの「ミニミニemacs勉強会」に
参加してきたので、emacsのコマンドをメモしておきます。
※私はRubyの話はわからないので、ひとまずスルー気味でいました。
(分かるようにはならんとなと思っていますが)

便利な(?)emacsコマンド集
※Ctrlを押しながらの操作は「C-*」、ESCを押してからのキー操作を「M-*」と表記しています。

M-X grep-find[Enter]
   カーソルの場所にキーワードを入力するとfindコマンドが実行される。
   (実行結果は新しいバッファ)

C-a
   行の先頭にカーソルを移動する。
C-e
   行の最後にカーソルを移動する。
C-x 1
   分割した選択していないバッファを閉じる
C-x 2
   バッファを上下に分割
C-x 3
   バッファを左右に分割

@kazuhisa1976さんのブログも参考に。
http://d.hatena.ne.jp/tech-kazuhisa/20111010

そういえば、C-sで検索しても、前に検索することができないなーと
言っていたけど、手元にある書籍を見返すとC-rで前検索をするようです。

2011年10月10日月曜日

Dartの導入 on MacOS X

Web構造化プログラミング言語"Dart"が発表されたみたいですね。

参考:
http://www.dartlang.org/(公式、英語)

ということで、早速動かしてやろうと思って、作業をした手順を控えておこうと思います。

最初にDepot_Toolsをダウンロードする必要があります。
Dartのソースコード、ツール一式がgclientを利用しないとダウンロードできないためです。

Depot_Toolsのダウンロード(いろんな物が落ちてきます)
$ svn co http://src.chromium.org/svn/trunk/tools/depot_tools

Depot_Toolsをダウンロードしたら、その中にある、gclientというコマンドを利用します。
恐らく、パスを通しておく方が良いでしょう。
export PATH=$PATH:[Depot_Tools

Dartのソースコード、ツール一式のダウンロード(本当にいろんな物が落ちてきます)
$ gclient config http://dart.googlecode.com/svn/branches/bleeding_edge/deps/all.deps

$ gclient sync

ダウンロード後、Dartをビルドします。
$ cd [Dartのダウンロードディレクトリ]/dart
$ ./tools/build.py --arch=ia32

ビルド後、以下のHTMLのコードを作成します。これは、Dartのコードを含んでいます。
ファイル名はdartsample.htmlで保存しました。
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8" />
  <title>Dart Sample</title>
</head>
<body>
  <script type='application/dart'>
	void main() {
	   HTMLElement element = document.getElementById('result');
	   element.innerHTML = 'Hello World!';
	}
  </script>
  <div id="result"></div>
</body>
</html>

このHTMLファイルをDartのコンパイラ(?)dartcでコンパイルします。ただし、pythonのスクリプトが用意されているので、以下のコマンドを使ってコンパイルします。

$ python [Dartのダウンロードディレクトリ]/dart/client/tools/htmlconverter.py dartsample.html -o out/

正常に終了したら、outディレクトリを調べると、dartsample-js.htmlというファイルが
生成されていました。これをChromeで表示すると、Hello World!という文字列が
表示されました。

今回はブラウザで実行させるようにしましたが、DartはVM上でも動作させる事が
できるようなので、後で、同じく動かしてみようと思います。

2011/10/11追記
dartsample.htmlのソースコードに変なspanタグが挿入されているのに
気がついたので、削除しました。本来は不要でした。

2011年9月21日水曜日

職業訓練校のバイトが終わって…

5月のGW明けから今日まで、職業訓練校のバイトをしていました。
大体、平均して週2日(1日の時と3日の時もありました)
Androidの技術的なサポートという事で、立会いをしつつ、質問に答えるようにしていたのですが、
最初は質問があるものの、1ヶ月もすれば質問がほとんどでなくなりました。

質問が無い事自体は、良いことなのかどうかは別として、
そんなに聞くことが無いのかな?とは思いました。
ということだったので、状況を確認して、立会いを終わらせようと
思っていたのですが、運営側としては、私がいた方が良いようで
ずっと呼んで頂いていたのですが、
実際、お力になれたのかな…と、考えさせられます。

しかし、生徒達の技術は成長していますし、アプリケーションの質も
良くなったと思います。マーケットに出しても、恐らく問題ないと思います。
(これは、”人気が出る”、”売れる”という意味ではないです。)
アプリケーション開発の仕事をしたとしても、開発経験のある人の
フォローがあれば、問題なく遂行するでしょう。

実際、心残りがあるとしたら、最初に作成したアプリケーションの
ソースコードを見た時に、プログラムの構造がぐちゃぐちゃだったのを
矯正する事ができなかったことでしょうか。
(これは、私も偉そうに言うことはできないと思います)

後は、プログラムを組めても、ヒューマンスキルがない人もいたし
それも、指摘ぐらいはしたかったですね。

ただ、今後も開発を続けていくという声を聞きましたし
Android開発者の人口が増えていくと思うと、今後が楽しみです。

後は、私は専門学校の講師、中国GTUGのマネージャ、そして、立会いのバイト、
それぞれの空気を感じてみて、それぞれで独特の空気があるなと言うことが
分かったのも大きかったです。

中国GTUGのイベントだと、参加者の皆さんが「好きで」参加するという
前向きなメンバーで進めるわけですが、
専門学校の講師、職業訓練校のバイトなどでは、必ずしもそうではない可能性を
否定できない気がしました。
当然、興味を引き出すのが講師の仕事と言われると、言い返す言葉は無いですが、
相手が前向きな姿勢でないと聞いてはもらえない気もしますし…
(これについては、もう少し勉強しないといけない事もありますね)