smartyでarray()の要素をcsvっぽく出力する方法

array()の要素をsmartyを使ってcsv形式で出力しようとして、
どうすればいいかと思ってちょっと調べてみた。

やりたい内容としては、各要素をカンマで区切って最後の要素には改行を付与する。
とすると、↓のような感じになった。

{section name=index loop=$itemList} 
        {if $smarty.section.loop.last eq false}{$itemList[index]},
        {else}{$itemList[index]}{"\r\n"}
        {/if}
{/section}

2行目の「$smarty.section.loop.last eq false」で、
最後の要素でない場合にカンマを付与。
最後の要素である場合に改行を付与。改行は見ての通り{"\r\n"}

Linuxサーバ上のPHPUnitのメモリ枯渇

評価環境(Linuxサーバ)でPHPUnitを使った自動テストをしていて、
PHPUnitのテストがメモリ不足で失敗してしまう現象が起きた。

サーバのメモリが1GBなのに対し、PHPUnitがメモリを500MB以上も使用していて
これ以上PHPUnitにメモリを割けない状態。
※開発環境(Windows)のPHPUnitでは60MB強

根本的な対処が必要になったので、原因を調べたら(自分で調べた訳ではないけど。。)
$GLOBALSのバックアップとレストアでメモリを喰っていたもよう。

↓のオプションを指定することで問題は解消した。

--no-globals-backup

このオプションを設定することで、テスト毎の$GLOBALSのバックアップとレストアをしなくなり、
メモリ使用量が70MB弱まで下がった。

その代わり、$GLOBALSがテスト毎に初期化されないため
テストの作り方に注意が必要だったりする。

【scala備忘録】リストのメソッド

最近scalaを勉強し始めた。
忘れやすい自分のために、基本的なリストのメソッドを書いておく。

scala> var list = List(1,2,3,4)
list: List[Int] = List(1, 2, 3, 4)

  • head リストの先頭の要素を求める

scala> list.head
res0: Int = 1

  • tail リストの先頭要素を取り除いたリストを求める

scala> list.tail
res1: List[Int] = List(2, 3, 4)

  • :: or +: リストの先頭に要素を付け加えたリストを求める

scala> 5::list
res2: List[Int] = List(5, 1, 2, 3, 4)

scala> 5+:list
res3: List[Int] = List(5, 1, 2, 3, 4)

  • length or size リストの長さを求める

scala> list.length
res4: Int = 4

scala> list.size
res5: Int = 4

  • isEmpty 空リストであるか調べる

scala> list.isEmpty
res6: Boolean = false

  • == リストを比較する

scala> list == List(1,2,3,4)
res7: Boolean = true

  • last リストの最後の要素を求める

scala> list.last
res8: Int = 4

  • init リストの最後の要素を除いたリストを求める

scala> list.init
res9: List[Int] = List(1, 2, 3)

  • :+ リストの最後に要素を付け加えたリストを求める

scala> list:+5
res10: List[Int] = List(1, 2, 3, 4, 5)

  • apply(n) or (n) n番目の要素を求める

scala> list.apply(3)
res11: Int = 4

scala> list(3)
res12: Int = 4

  • take(n) リストの先頭からn個の要素からなるリストを求める

scala> list.take(2)
res13: List[Int] = List(1, 2)

  • takeRight(n) リストの最後からn個の要素からなるリストを求める

scala> list.takeRight(2)
res14: List[Int] = List(3, 4)

  • drop(n) リストの先頭からn個の要素を除いたリストを求める

scala> list.drop(2)
res15: List[Int] = List(3, 4)

  • dropRight(n) リストの最後からn個の要素を除いたリストを求める

scala> list.dropRight(2)
res16: List[Int] = List(1, 2)

  • contains(x) xがリストの要素に含まれているか調べる

scala> list.contains(1)
res17: Boolean = true

scala> list.contains(10)
res18: Boolean = false

  • ::: リストの連結

scala> list:::list
res19: List[Int] = List(1, 2, 3, 4, 1, 2, 3, 4)

  • reverse 逆順のリストを求める

scala> list.reverse
res20: List[Int] = List(4, 3, 2, 1)

  • sorted 昇順にしたリストを求める

scala> list.sorted
res21: List[Int] = List(1, 2, 3, 4)

逆順の場合

scala> list.sorted(Ordering[Int].reverse)
res22: List[Int] = List(4, 3, 2, 1)

  • sum 全要素の和を求める

scala> list.sum
res23: Int = 10

  • max 全要素の積を求める

scala> list.product
res24: Int = 24

  • min 全要素の最大値を求める

scala> list.max
res25: Int = 4

  • min 全要素の最小値を求める

scala> list.min
res26: Int = 1

JMeterをバッチファイルから自動で実行する方法

いつもJMeterを使って計測している試験を、
タスクスケジューラで勝手にやってくれるようにしてみる。

週末中に自動でテストが動いて、
週明けに先週時点での試験結果がわかってしまう、
そんな感じ。

まずJMeterの試験をするために必要なステップはこんな感じ↓

  1. JMeterのテスト計画を作成
  2. コマンドラインからJMeterを実行する
  3. テスト結果のXMLファイルのファイル名に日付をつける

JMeterのテスト計画は作成済みなので
この時点で引っかかるところが、JMeterコマンドラインからの実行。

調べてみるとJMeterにはnon-guiモードがあるとか。
これでコマンドラインからの実行ができそう。ちなみに↓のような感じ。

java.exe -jar ApacheJMeter.jar -n -t テスト計画.jmx

  • nオプションをつけることで、JMeterがnon-guiモードで起動するらしい。
  • lオプションをつけるとさらに、JMeterの動作ログを出力する。↓な感じ。

java.exe -jar ApacheJMeter.jar -n -t テスト計画.jmx -l 動作ログ


こんな感じでバッチファイルを作成して、タスクスケジューラに登録する。
That's all.

TortoiseSVNのexportをコマンドラインから実行して自動化する方法

Subversionで管理しているソースを
定期的にソースコードチェックしていてもっと簡単にできないかと、
バッチを作って自動化しようとちょっと考えてみた。

まずソースコードチェックをするために必要なステップはこんな感じ↓

  1. チェックするソースコードをエクスポート
  2. エクスポートしたソースをzip
  3. zipしたファイルを所定のストレージ領域へ配置
  4. zipのパスをチェックタスクのリストに追記
  5. メールを送付

まず最初の課題はTortoiseSVNGUIからではなくて、
コマンドラインからexportすること。

調べてみると、TortoiseSVNでもコマンドラインから実行できるらしい。
↓のような感じ。

TortoiseProc.exe /command:export /url:"エクスポート元リポジトリURL" /path:"エクスポート先パス" /closeonend:1


/command:〜の部分で実行するコマンドを指定(ここではexport)
/url:〜でエクスポートしたいリポジトリのURL
/path:〜でエクスポートしたものを配置するパス

少し癖がある点としては、コマンドラインから実行してもexport画面と進行ダイアログが表示されること。

進行ダイアログは、
/closeonend:〜を指定することで自動で閉じる設定が可能。
/closeonendの設定値と動作は↓のような感じ。

  • /closeonend:0 自動でダイアログを閉じません。
  • /closeonend:1 エラーがなければ自動で閉じます。
  • /closeonend:2 エラーや競合がなければ自動で閉じます。
  • /closeonend:3 エラー、競合、マージがなければ自動で閉じます。
  • /closeonend:4 エラー、競合、マージが手元の操作で起きなければ自動で閉じます。

もうひとつの難点は、export画面のリポジトリURLが
/urlで指定した値がうまく入らないこと。
入らないというか空欄になる訳ではなくて、
URLは入っているけど直近でアクセスしたリポジトリURLが入っているように見える。

それと致命的なのが、コマンドラインから実行してもexport画面のOKボタンを押さないとexport処理が走らないこと。。

なんとかできないかと調べてみたけど、未解消。
半自動化な状態。

とりあえず最初のステップはこのくらいに