Readme腐ってる
Linux,Macなら、
http://help.github.com/set-your-user-name-email-and-github-token/
の通りに設定すればOK
Windows環境はgit.exeにパス通していれば、同じ設定を行えば良いが、
そうでない場合は
GITHUB_USERとGITHUB_TOKENの環境変数を定義してあげればOK
2012年2月22日水曜日
2012年2月14日火曜日
scalaで簡単Proxyクラス実装。
ProxyデザインパターンやDecoratorデザインパターンを使いたいことがよくあると思いますが、いちいちすべてのメソッドを実装するのはめんどくさいですよね?
そんな時に便利なscalaの実装を紹介
Companion objectにimplicit conversionを指定しておくだけで完了。
あとは、ProxyしたりDecorateしたりしたいメソッドを定義してやるだけでOK。
使い方はこんな感じ
そんな時に便利なscalaの実装を紹介
class User(var id : Long,var name : String,var gender : Int)
class ProxyUser(private val user : User){
def name : String = if(gender == 1) "Mr. " + user.name else "Ms. " + user.name
}
object ProxyUser{
implicit def toUser(proxyUser : ProxyUser) = proxyUser.user
}
Companion objectにimplicit conversionを指定しておくだけで完了。
あとは、ProxyしたりDecorateしたりしたいメソッドを定義してやるだけでOK。
使い方はこんな感じ
val pu = new ProxyUser(new User(1,"Taro",1))
println("ID:" + pu.id)
println("name:" + pu.name)
pu.name = "Joro"
println("name:" + pu.name)
> ID:1
> name:Mr. Taro
> name:Mr. Jiro
2012年2月13日月曜日
Squerylでunion
scalaのO/R mapperのSquerylでunionを行う方法
複合Keyとかでin句が使えない場合のunion構文の実装方法のメモ
Queryクラスのunionメソッドを使います。
複合Keyとかでin句が使えない場合のunion構文の実装方法のメモ
Queryクラスのunionメソッドを使います。
val table = Table[CompositeKey2Object]
val ids = List( (1,2),(1,3),(2,5) )
inTransaction{
def toQuery( id : (Int,Int) ) = {
from(table)(t => where( (t.pk1 === id._1) and (t.pk2 === id._2)))
}
ids match{
case id :: tails => {
ids.foldLeft(toQuery(id))( (query,id) => query.union(toQuery(id))).toList
}
case _ => Nil
}
}
2012年1月23日月曜日
JDBCで使えるURL一覧
JDBCに指定するURLとDriverClassのまとめ
DB名 | DriverClass | 種別 | url |
MySQL | com.mysql.jdbc.Driver | サーバー | jdbc:mysql://[server_name]:[port=3306]/[database_name] |
H2DB | org.h2.Driver | サーバー | jdbc:h2:tcp://[server]:[port]/[path]/[database_name] |
ファイル | jdbc:h2:file:[path][database_name] | ||
メモリ | jdbc:h2:mem:[database_name] | ||
Oracle | oracle.jdbc.driver.OracleDriver | サーバー | jdbc:oracle:thin:@[server_name]:[port=1521]:[database_name] |
Microsoft SQL server | com.microsoft.jdbc.sqlserver.SQLServerDrive | サーバー | jdbc:microsoft:sqlserver://[server_name]:[port=1433]/[database_name]; DatabaseName=[database_name] |
Derby | org.apache.derby.jdbc.EmbeddedDriver | ファイル | jdbc:derby:[path]/[database_name];create=true |
メモリ | jdbc:derby:memory:[database_name] | ||
PostgreSQL | org.postgresql.Driver | サーバー | jdbc:postgresql://[server_name]:[port=5432]/[database_name] |
Sqlite | org.sqlite.JDBC | ファイル | jdbc:sqlite:[path]/[database_name] |
2012年1月7日土曜日
Scalaの標準jsonライブラリの使い方
意外にscala標準ライブラリのjsonライブラリの説明をしてくれているサイトが少ないので自分で試したことをまとめ。
ちなみに、簡単なJSONをパースするだけなら、標準ライブラリでいい気はするけど、
オブジェクトのJSON化したいなら、sjsonやgsonなどのライブラリを使用したほうがよさそうです。
JSONのパース
JSONのパースはscala.util.parsing.json.JSONクラスを使います。parseFullとparseRawの2つのメソッドがありますが、動作は同等です。パースしたJSONは以下のようなscalaのクラスにマップされます。
JSON type | JSON.parseFull | JSON.parseRaw |
JSON Map | Map[String,Any] | JSONObject |
JSON Array | List[Any] | JSONArray |
文字列 | String | String |
数値 | Double | Double |
コードではこのような感じになります。
import scala.util.parsing.json.JSON;
val json : Object[Any] = JSON.parseFull("""
{
"key1" : "string",
"key2" : 20,
"key3" : ["Array",1],
"key4" : {
"key5" : "hoge"
}
}
""")
/*
このようなオブジェクトが帰ります
json.get == Map(
"key1" -> "string",
"key2" -> 20.0,
"key3" -> List("Array",1.0),
"key4" -> Map( "key5" -> "hoge")
)
*/
数値がDoubleにマップされるのに注意してください。
また、jsonフォーマットが間違っている場合などは、戻り値がNoneとなります。
JSON化
JSON化にはJSONObject,JSONArrayを使います。
JSONObject(Map(
"key1" -> "string",
"key2" -> 20,
"key3" -> JSONArray(List("Array",1)),
"key4" -> JSONObject(Map( "key5" -> "hoge"))
)))
JSONObjectやJSONArrayで囲まないとだめなのが超イケてない。
2012年1月6日金曜日
Scalatraでオレオレ例外をErrorHandling
Scalatraでは、errorメソッドを使うことで処理中に投げられた特定の例外を捕まえて、途中処理を挟むことができます。そのまま例外を投げ返すことで、HttpStatus=500(Internal server error)の結果をブラウザへと返してくれます。
ただ場合によっては、500番以外のHttpStatusCodeも返したいということもあると思います。
その時は次のようにすることで、特定の例外をキャッチして好きな結果を返すことができます。
class MyFilter extends ScalatraFilter {
error{
case e : MyException => {
// do anything.
throw e
}
}
}
ただ場合によっては、500番以外のHttpStatusCodeも返したいということもあると思います。
その時は次のようにすることで、特定の例外をキャッチして好きな結果を返すことができます。
class MyFilter extends ScalatraFilter {
error{
case e : NullPointerException => {
response.setStatus(200)
response.addHeader("Content-type","text/plain")
renderResponse("ガッ")
}
case e : AzunyanException => {
response.setStatus(400)
response.addHeader("Content-type","text/plain")
renderResponse("ペロペロ")
}
}
}
2011年12月14日水曜日
Mavenでたまにchecksumエラーで依存を解決できない
最近、mavenで依存性解決しようとすると、
なエラーでてライブラリを取ってこれないことがある。
レポジトリを確認してみると、本来はpomやjarとともにそのmd5やshaのハッシュ値ファイルも置かれているはずが、それらのレポジトリにはそのファイルが無くどうもそのせいでChecksumが出来ずに失敗してしまっているっぽい。最近だと例えば
org.scala-tools.testing:scalacheck_2.9.0-1:jar:1.9
とか失敗したんだけど、どうもsbt(というかivy?)でデプロイされてそうなやつっぽい。
とりあえず解決策としては、--lax-checksumsのオプションを付けてMavenを実行してやれば解決はする。
PS.ちなみにIntelliJを使っているなら、Run/Debug Configuration > General > Checksum PolicyをWarnにすれば、--lax-checksumsオプションを付けて実行してくれる。
Checksum validation failed, no checksums available from the repository
なエラーでてライブラリを取ってこれないことがある。
レポジトリを確認してみると、本来はpomやjarとともにそのmd5やshaのハッシュ値ファイルも置かれているはずが、それらのレポジトリにはそのファイルが無くどうもそのせいでChecksumが出来ずに失敗してしまっているっぽい。最近だと例えば
org.scala-tools.testing:scalacheck_2.9.0-1:jar:1.9
とか失敗したんだけど、どうもsbt(というかivy?)でデプロイされてそうなやつっぽい。
とりあえず解決策としては、--lax-checksumsのオプションを付けてMavenを実行してやれば解決はする。
PS.ちなみにIntelliJを使っているなら、Run/Debug Configuration > General > Checksum PolicyをWarnにすれば、--lax-checksumsオプションを付けて実行してくれる。
登録:
投稿 (Atom)