投稿者のアーカイブ
OSC2011 Kansai@Kyoto ありがとうございました
帰路の新幹線からこんばんは。
セミナーも無事(?)おわり、長崎に向けてひた走っております。
私の力不足でお答えできなかった技術的な質問などもあり、申し訳ありませんでした。
汎用機ダウンサイジング特設サイト
のメールフォームから質問していただけると詳しいものからお答えできるかと思います。
ぜひご活用ください。
マイナーな題材に関わらず足を運んでくださった方々、運営の方々、関係するすべての方々、ありがとうございました。
またお会いしましょう。
OSC2011 Kansai@Kyoto のスライド出来た〜
京都からこんばんは。村部です。
明日から OSC2011 Kansai@Kyoto です。
今回、セミナーは私がやらせていただきますので新幹線やホテルでスライドを作っていたのですが、さきほど完成しました。
といっても、OSC2011 Kansai@Kobe でやらせていただいた前説のスライドを少し修正して無駄に音楽つけてみただけなんですが。
このスライドは Kobe の時と同じく諸般の事情で門外不出です。
お時間があったら見に来てくださいね。
https://www.ospn.jp/osc2011-kyoto/modules/eguide/event.php?eid=51
2011-07-16 (土) 15時15分からです。
そうそう、端っこのほうなんですがブースのほうもよろしくお願いします。
VB.NET + NUnit 2.5 の Assert.Throws で例外のテスト
[ブログ紹介] NUnit 2.5 で追加された Assert.Throws: TDD.NET
を参考に VB.NET の書き方にしただけですが。
Imports NUnit.Framework
Public Class ExceptionTest
Private Shared Function throwArgumentException(ByVal obj As Object) As String
Throw New ArgumentException("VarType Error: " & TypeName(obj))
End Function
Public Sub ArgumentExceptionTest(ByVal obj As Object, ByVal expected As String)
Dim ex = Assert.Throws(Of ArgumentException)(
Function() throwArgumentException(obj)
)
Assert.That(ex.Message = expected)
End Sub
End Class
サンプルコードは実際のコードを編集して書きましたが動作確認してないので参考程度に。
.NET のサンプルってC#の場合が多いので「VB.NETではどう書けばいいのかなぁ」ってことも結構あります。
PHP + SQLite で正規表現(PDO_SQLITE編) in CakePHP
CakePHP 1.3.6 での話です。
これ、やったのはずいぶんと前なんですが書いてなかったですね。
私はすごくうれしかったのですが、周りの反応は薄かった覚えがあります。
CakePHP 1.3 でSQLite3ってのはかなりイレギュラーで、確か、CakePHPのTracから探してきたドライバ(dbo_sqlite3.php)を使用しています。
確認しようと思ったのですがTracに繋がらないぞ?ってな状況。
そんなこんなでとてもマイナーな話なんですよね。 反応が薄いのもむべなるかな。
ですが、PDOでSQLiteにアクセスしている場合なら応用が効くかと思います。
dbo_sqlite3.php 内部でPDOが使用されておりますので。
app_model.php でやっているので関係するところをまとめて引用。
class AppModel extends Model {
function beforeFind($queryData) {
parent::beforeFind($queryData);
//正規表現関数有効化
$this->regxEnable();
}
/**
* 正規表現関数有効化
*/
public function regxEnable(){
$db =& $this->getDataSource();
$db->connection->sqliteCreateFunction('RGX', array('AppModel', 'sqliteRegexMatch'), 2);
}
/**
* 正規表現関数
*/
public function sqliteRegexMatch($regex, $str) {
if(empty($regex)){
return true;
}else{
return preg_match($regex, $str);
}
}
}
$db->connection がPDOのインスタンスです。
sqliteRegexMatch で $regex が empty の場合に true を返しているのは実装しているアプリケーションの都合ですのでご注意を。
実装の際、下記サイトを参考にさせていただきました。
違いはPDOであること、preg_matchを使用していること、SQL関数を処理するコールバック関数としてメソッドを使っていることです。
CakePHP的ポイント
- DBOからPDOのインスタンスを取得
- beforeFindで検索時に正規表現関数を有効化
PDO_SQLITE的ポイント
- sqliteCreateFunctionでSQL関数登録
- sqliteCreateFunctionのコールバック関数にメソッドを登録する際の書式
使い方ですが、参考サイトと違ってpreg_matchでの正規表現であることに注意してくださいね。
私の場合、CakePHPでの使用ですので
/**
* モデルのconditonsに正規表現を使う場合の配列を返す。
*
* @param $pattern 正規表現
* @param $cols 判定対象のカラムの配列
* @return
*/
function whereByRgx($pattern, $cols) {
$conditons = array();
if(!empty($pattern)){
foreach ($cols as $colname) {
$conditons[] = "RGX('" . $pattern . "', " . $colname . ")";
}
}
return $conditons;
}
てなモデルでのfindなどで使用するconditions用の配列を返すメソッドを作って使っております。
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 ラヴ♡♡