行事
- 2011/06/15
- aoyama
クリスマスもお正月も過ぎてしまって、いろいろと書くタイミングを逃していまいましたが、
改めて、今年もどうぞよろしくお願い致します。
行事といえば、今はランタンですね。
あまりこういった祭りには参加しないのですが、先週はちょっとお誘われしたので行ってみることに。
なんだかんだ初ランタンかな~
こういうのを間近で見ると、やっぱり感動しますね。
あとはランタン行った証拠みたいなのが欲しかったので、角煮まん買ってほくほくしてました。
まあいつでも買えるんですけどね。笑
あ、今年のバレンタインデーも、社長の奥様からお菓子(プリン)を頂いちゃいました!
ありがとうございます。
女性である私が毎年楽しみにしてます(笑 this
Mac で複数ファイルの一括置換ってどうしてます?
Windows だと Devas ってソフトでバッチリだったんですが、Mac ではいいソフトを見つけることができずにいます。
サブディレクトリ内のファイルも含めてまとめて置換は、今はターミナルで次の手順でやってます。
まず、find で特定拡張子のファイルリストをとって xargs で grep にわたして置換したい単語を検索。
$ find . -name '*.拡張子' | xargs grep 置換したい単語
で、grepに -l オプションつけて置換したい単語が含まれるファイルリストをとって xargs で perl にわたして置換。
$ find . -name '*.拡張子' | xargs grep -l 置換したい単語 | xargs perl -p -i.bak -e 's/置換したい単語/置換後の単語/g'
perl の -i オプションに .bak と付けてるので元ファイルは bak という拡張子で残ります。
「perlだけでやればいいじゃん」と言われそうですが、いきなりやるのは不安なのと置換が行われてないファイルまで全てタイムスタンプが変わったりしたのでこの方法に落ち着きました。
で、置換されたファイルの内容確認して問題なければbakファイル削除。
$ find . -name '*.bak'
で確認して、
$ find . -name '*.bak' | xargs rm
完了〜。 xargs ラヴ♡
Unix系なら他でも使えると思います。
いいっちゃいいんですが、記憶力がないので思い出せる気がしません。historyがあふれるとオレ終了って感じ(なのでメモという意味もあり)。
ちなみに私がターミナルで一番使うコマンドはブッチギリで
$ history | grep コマンド名
history ラヴ♡♡
CakePHP で debug.log にクエリを出力する(手抜き版)
シェル書いてる時とか Web でも Ajax のときとか
「画面にクエリだされても見えないし、困る〜」
ってときありますよね?
「つーか、なんで画面にだすんだ?ログファイルに出してくれればいいのに 」
とか思いません?
で、調べたらみなさんDBのドライバを拡張して対応されてるようです。
ですが、常にクエリをログに書いて欲しいわけでもないし、ドライバ拡張とか面倒。
クエリを画面にだしてるとこどうなってるのかなぁ、と思って調べたら
cake/libs/view/elements/sql_dump.ctp
にゴリゴリに書いてありました。
これマネしてapp_model.phpにでもメソッド作ればいいんじゃないかなーってことで、作りました。
/**
* 通常画面に表示されるログを取得してdebug.logに出力する。
*/
function sqlToLog(){
$db =& $this->getDataSource();
if ($db->isInterfaceSupported('getLog')){
$this->log($db->getLog(), LOG_DEBUG);
}
}
元のログ表示と違って明示的に呼び出すものなのでgetLogインターフェースの確認とか要らない気がしますが、一応。
このメソッドを実行すると debug.log にそれまでに実行されたクエリやら付帯情報(画面に表示されてますよね)が書き出されます。注意点として、画面に出すデータを横取りしているのでログに書き出されたものは画面には表示されません。
配列を print_r で出力した形式なので見やすくはないですが、まぁ、十分かな。
VB.NETのMy.Application.Logを使う
My.Application.Logを使用してトレースする、ログに書き込む
で詳しく説明されているのでメモ程度で。
まず、My.Application.Logを使うためにアプリケーション構成ファイルであるapp.configを編集します。(ない場合は[プロジェクト] > [新しい項目の追加]からアプリケーション構成ファイルを選択)
app.configがプロジェクトに追加された時点でMy.Application.Logに関する記述があるので楽です。
しかし、このまま何も触らずにプログラム内で
My.Application.Log.WriteEntry("コントロールの初期化")
'Try~Catch内などで
My.Application.Log.WriteException(New Exception("エラー!"))
とするだけでも
DefaultSource Information 0 コントロールの初期化
DefaultSource Error 2 エラー!
と出力され使うことができます。
ちなみに出力先のデフォルトは
ユーザーのApplication Dataフォルダ\CompanyName\ProductName\ProductVersion\ProductName.log
ですが、Vista以降はフォルダ構成が変わっているので
ユーザーのAppData\Roaming\CompanyName\ProductName\ProductVersion\ProductName.log
になっています。
ぼっちBazaar
5/21(土)、『NAGASAKI-IT hands-on Spring 2011』に参加して、ライトニングトークしてきました。
弊社の吉田くんが
「ひとりぎっと 〜ひとりで使うバージョン管理システム導入編〜」
というGitのハンズオンをやるとのことだったので、それにからめて
「ぼっちBazaar 〜ぼっちを感じるバージョン管理〜」
というわけです。
今回、HTML Slidyでスライドを作りましたのでそのまま貼り付けます(slideクラスのdivには枠を付けました)。
目論見としてはスライド自体をBazaarでバージョン管理して編集しながら実演するつもりだったのですが、残念!
時間がたりませんでした(5分枠で何しようとしてるんだという意見多数)。
CakePHP でシェルを書くときに最初にやったこと(親クラス作り)
CakePHP にはデバッグで便利な pr() って関数があります。
出力の前後に pre タグ を付けてくれる print_r() のラッパーです。当然Web用。
シェルにも欲しいです。てなわけで作りました。
function pr($obj){
$pr = print_r($obj, true);
$this->out($pr);
}
簡単。こんな感じで使います。
$popopopooon = array('こんにちわ' => 'こんにちワン', 'ありがとう' => 'ありがとウサギ');
$this->pr($popopopooon);
このようにコンソールに出力されます。
Array
(
[こんにちわ] => こんにちワン
[ありがとう] => ありがとウサギ
)
print_r() は第2引数に true を渡すと出力せずに結果を返してくれるのでオブジェクト構造をログに出したりするときにも便利です。
でもコレ、全部のシェルに書きたくない。
どこに集約したらいいのか悩んだのですが、実際に実行するシェルの親クラスを作成して継承することにしました。継承の段数が増えるのはあまりすきじゃないのですが、Shellクラス をそのまま継承するよりも1段増やしといたほうがいいかな?って気もしたので。
appbase.php
class AppbaseShell extends Shell {
function initialize() {
parent::initialize();
}
function startup() {
//ウェルカムメッセージを消すためにオーバーライド
}
/**
* デバッグ用
*/
protected function pr($obj){
$pr = print_r($obj, true);
$this->out($pr);
}
}
ついでに startup() をオーバライドしてウェルカムメッセージを消しました。
こういう事やるには1段あいだに入ってるほうがいいですね。
実際に起動するシェルは AppbaseShellクラス を継承します。
aisatu.php
App::import('Shell', 'Appbase');
class AisatuShell extends AppbaseShell {
function initialize() {
parent::initialize();
}
function main() {
$popopopooon = array('こんにちわ' => 'こんにちワン', 'ありがとう' => 'ありがとウサギ');
$this->pr($popopopooon);
}
}
サンプルコードは今テキトーに書いたのでちょっとあやしいかも。
最後にオチを。
このprメソッド、実際に作ったんですが普通に print_r() すればコンソールに出力されるんですよねー。「そりゃそうだ」と後で気づいたわけで。
CakePHP のシェルでは $this->out() でコンソールへの出力をすることになってますが、開発中にしか使わないし print_r() をそのまま使えばいいかなと。親クラスは機能の集約に役立ってます。
VB2010でNUnit2.5を利用する
初めまして、miyazakiです。今年からこちらでお世話になることになりました。よろしくお願いします!
初めての投稿なのでものすごく緊張していますが、さっそく本題に入っていきたいと思います。
VB.NETの環境でNUnitを使うことになったので入れてみました。
参考ページ
NUnit 2.5 の導入 Step by Step
VB2010 Express + NUnit 2.5 で、 初めてのTDD Step by Step
参考にしたページと同じ環境だったのと、とても詳しく分かりやすく書かれていたので、インストールから動かしてみるまでサクサク進めました。
なのでこちらではメモ程度に書いていきたいと思います。
まずはインストール。
NUnitのページのDOWNLOADから”NUnit-2.5.10.11092.msi”をクリックしインストール。
インストールすると中にサンプルが入っているので、とりあえずそちらを動かしてみることにします。
ソリューションを開くと、このプログラム古いから今の環境で動くようにしろ、と言われるので指示に従ってコンバート。
コンバートして開けたところでビルドするんですが、元が古いということでプロジェクトで参照されているnunit.frameworkも古いです。新しいほうを参照させる必要があります。
NUnitをインストールしたドライブ\NUnit 2.5.10\net-2.0\framework内にnunit.framework.dllがあるので、プロジェクトごとに設定しなおしていきます。
これでビルドが通りました。
ビルドに成功したところでNUnitを起動。このままだとVisual Studioのファイルが開けないので、
[Tools] > [Settings…]から[IDE Support]を選択し[Enable Visual Studio Support]という項目にチェックを入れておきます。
これでNUnit側でサンプルを開くことができます。
読み込み時にdllファイルが見つからないエラーが出る場合は、
[Project] > [Configurations] > [2 Release]
を選択します。
あとはRunを押すとテストされるかと思います。こんな感じで。
赤い部分がテスト失敗。緑の部分が成功しているということを表しています。
では、実際にプロジェクトを作ってやっていきたいと思います。こちらも参考ページにバッチリ書いてあるので大まかな部分とテストの記述部分のみ触れていきます。
構成としてはメインプログラムとテスト用とプロジェクトを分けて作成します。
テスト用プロジェクトに関してはクラスライブラリで作成し、NUnitから呼び出して使うためにdllとして作ります。
参照設定は先ほども出たnunit.frameworkと、メインプロジェクトを設定しておきます。
テストケース部分
Imports FizzBuzz
Imports NUnit.Framework
Public Class FizzBuzzerTest
'Fizz Buzz - 数字を数え、3の倍数でFizz、5の倍数でBuzz、3と5の倍数でFizzBuzz
Public Sub SayNextTest_1回目は1_1()
Dim obj As FizzBuzzer = New FizzBuzzer()
Dim result As String = obj.SayNext()
Assert.AreEqual("1 - 1", result) 'Assert.AreEqual(期待値, 検査したい値)
End Sub
End Class
NUnitはTestFixture()を見て「このクラスにテストケースがある」ということ、Test()で「このメソッドがテストケース」であることを判断します。
Assert.AreEqual()ですが、このプログラムはFizz Buzzをしているので、この場合1回目の期待値は”1-1″、検査する値はSayNext()(数字、Fizz、Buzzのいずれかを返す)で返ってくる値になります。
また、テストケースを増やすうえで、同じような処理がある場合はまとめて書くことができます。
Public Class FizzBuzzerTest
'同じような処理をするテストはTestCaseを使うことでまとめて書ける
'1のとき
'2のとき
'3のとき
Public Sub SayNextTest(ByVal count As Integer, ByVal expected As String)
Dim obj As FizzBuzzer = New FizzBuzzer()
Dim result As String = Nothing
For i As Integer = 1 To count
result = obj.SayNext()
Next
Assert.AreEqual(expected, result) 'Assert.AreEqual(期待値, 検査したい値)
End Sub
End Class
と、こんな感じでテストケースを書いては実装を繰り返し、無事すべてのケースをグリーンにさせることができました!
いつか通った道
- 2011/02/18
- aikawa
富士通のWindows 7ケータイ F-07C ですが、これに似たような物を持っていたなと。
思い出してみると、SHARPのWillcom D4でした。
D4と比べてみるとサイズは少し小さくて、重量に至っては218グラムでD4の半分以下。
非力とはいえ、今この重量でWindows OSの機種は他に無さそうです。
が、iPhoneやGalaxySよりは大きいので、それで大きいと感じる人には向かないですね。
携帯用OSが入っているから、普段は困らないかも知れないですが、それならWindowsは不要じゃないかと言う事にも。
必要か、必要無いかと言えば必要無いんですが。
必要無いんですが。
そろそろ携帯買い替えようかと思っていたところでこんな物が出たら・・・。
取り合えず、安く済ませる事だけ考えるように、他は何も考えないようにしています。