Groovy

もう3年かぁ

3年間の進歩 - uehaj's blog 過去のブログを見ていて、"10分でコーディング"という記事があったので、かつ内容を完全に忘れていたので、あらためてチャレンジ。問題はこちら。 自分もやっていたのを思い出しました。 懐かしかったのでやってみました。 def…

ファイル名の連番の桁数をそろえるスクリプト

Macは、連番の数字の桁数が違って file1.txt file2.txt file3.txt … file101.txt file102.txt … とかなっていても番号順に並べてくれるのだけれど、JavaのListFilesは文字列順に file1.txt file10.txt file100.txt … とかと並べてしまうのでちょっと具合が悪…

GroovyでJAXB使うときには@XmlAccessorType( XmlAccessType.NONE ) する

JAXBの感触を確かめようとGroovyで弄ってみたら、ちょこっとハマりました。 さらっとバインディング対象のクラスを書いてマーシャリングしてみようって以下のようなコードを書いたんですが、 import javax.xml.bind.annotation.* import javax.xml.bind.* @X…

GrabでJDBCドライバを読み込めない

Groovyのjiraにもあがっているのですが、GroovySQLを使うときにGrabでドライバを取ってこようとして @Grab('postgresql:postgresql:8.4-701.jdbc3') import groovy.sql.Sql Sql.newInstance('jdbc:postgresql://localhost:5432/database', 'user', 'password…

動的メソッド追加の謎

[GROOVY-3674] In Closure as injected method of Closure, delegate is not collect - jira.codehaus.orgを見て、少し実験してみました。Javaのクラスの場合、最初はメタクラスがないからグローバルなやつを使うんだよ、との事で。つまりメタクラス拡張を行…

Closureにメソッド足すにはExpandoMetaClass.enableGlobally()が必要

これはまぁ、{}でクロージャ作るたびにClosureのサブクラスが一つできるので当たり前なんですけど、エラーがちょっとわかりにくいんですね。メソッドが呼べない訳ではなくて、delegateが適切にセットされなくなる。 なんでdelegateを使わないメソッドを足す…

Closureリテラルのメンバにアクセスするときは、前の行にセミコロンが要る

ちょっと意味不明ですね。後置ifの例で行きます。 def executed = false; {->executed = true}.if('a' == 'A') assert executed == false; {->executed = true}.if('a'.equalsIgnoreCase('A')) assert executed == true なんか、セミコロンが不自然に入って…

Groovyで後置if

なんか後置ifがtwitter上で話題になってたのでやってみました。 文のうしろに「if ほげほげ」みたいに書くとほげほげが真の場合だけ文を実行してくれる、てやつですね。Groovy風にかくなら def executed = false; {->executed = true}.if('a' == 'A') assert…

new Target(property: value) with assertionによる簡易テスト

懺悔します。私、これまで、Groovyの1ファイルスクリプト書くときテストをさぼってました。 だってテストしにくいんですもん。1ファイルで実行するだけのスクリプトを書いている時に、もう1個テスト用にファイルを作るのはとてもめんどくさいです。ファイル…

「topcoderの道1」をGolfで

これも実は2009-06-06 - uokumuraの日記する前にやっていたのだけれど、こっちはやる前にコードを見ちゃったのと、野球見ながらやっていたので時間が計れてないのです。 で、縮めれそうなのでGolfの方向でネタにする事にして縮めてみたら、(指定されてる範…

「10分でコーディング」に挑戦

ゲンゾウ用ポストイット: 10分でコーディング|プログラミングに自信があるやつこい!! だって。とか10分でコーディング - uehaj's blogとかはやってるみたいなのでやってみました。(もちろん自分でやってみるまではコードには目を通しませんでしたよ…

加重移動平均

移動平均 - uokumuraの日記で作った単純移動平均 List.metaClass.define { getAverage {-> sum() / size() } movingAverage {int n-> (1..<n).collect {delegate[0..<it].average} + (n..size()).collect {i->delegate[(i-n)..</n).collect>

移動平均

件のチーム防御率のグラフで、初期の成績がいつまでも影響してしまうと狩野捕手の成長が見えないので、移動平均を取りたくなりました。移動平均というのは、リストの先頭から1個ずつ後ろにずらしながらn個のデータの平均値を取ったリストのことで、リストl…

防御率計算DSLの強化

http://d.hatena.ne.jp/uokumura/20090427/1240854856で作った防御率計算スクリプトですが、成績の投入が [ "4/3": [[投手: "安藤", 捕手: "狩野", 投球回: 7, 自責点: 2], [投手: "ウィリアムス", 捕手: "狩野", 投球回: 1, 自責点: 0], [投手: "藤川", 捕…

割引キャッシュフロー計算

今コーポレートファイナンスを勉強中です。…ていっても1月以上かけて300ページちょっとしか読めてないんですけど… で、割引キャッシュフローを計算する問題がいっぱい出てきます。 0年 1年 2年 設備 -100 販促 -50 -30 -20 費用 -50 -100 -120 売上 150 300 …

できたよ!

Grails goes on: 惜しいリストの、 def merge = { x, y, r = [] -> x == [] ? r : merge(x-x[0], y-y[0], r+[[x[0] , y[0]]]) } まぁ記法がいいかどうかは別として, 意味は分かると思う. ところが Groovy1.5 でこれは動かないのだ. merge の定義中に再帰的に…

チーム防御率とかの計算

最近阪神のチーム防御率がぐんぐんと良くなってます。狩野捕手がどんどん伸びているようで、頼もしい限りです。 というわけで、ちょっといろんな軸で切って防御率の計算をしたくなったのでした。 データの記述方法 DSL風味バリバリで、 [ 4/3: [安藤-狩野: 2…

Groovyラムダ化計画の挫折

おとうさん、ぼくにもYコンビネータがわかりましたよ!を読んで試しているうちに、なぜか意識が明後日へと飛んでしまいました。…なんかこれ、プロパティーチェーンに見えない? プロパティの連鎖ならgroovyが理解出来ます。理解出来れば実行もできるやん!て…

「Groovyってどんな言語?」がちょっとおしい。

CodeZineにGroovyってどんな言語? JavaプログラマのためのGroovy入門 (1/7):CodeZineて記事が載っていたのですが、いろいろと気になる所が… 文章は読みやすく、7ページも使って結構おいしい所を一通り紹介しているのですが、それだけにちらほらと目につ…

数学パズルを解いてみる その1

ちょっと前にtwitter上で数学パズルがいくつか紹介されていて、groovyで解いてみたくなりました。 これ好き。問8.「AとBはそれぞれ、1以上1000以下の整数をひとつ考えて紙に書く。Aの考えた数がBのそれよりも大きい確率は?」 「スマリヤンの究極の論…

ベキ集合

とある数学パズルを解く最中にベキ集合を取得するための算出プロパティを書いたので、メモ。もっともそもそものパズルは設問を誤解していて、ベキ集合では不十分だったんですが… ArrayList.metaClass.getPowerSet = {-> if (delegate.size == 0) return [[]]…

「hashMap」メソッド

jijixi's diary - 関数型脳になると、ちょっとイラっとする Ruby の要素 , ActiveSupport::OrderedHash に絶望したで、 例えば、あるハッシュをいじって別のハッシュを作りたいときがある。 関数型脳なんだから、当然のように元のハッシュを書き換えるんじゃ…

正の整数mの4乗を5倍したものの下2桁として現れる数をすべて求めよ

http://hiw.oo.kawai-juku.ac.jp/nyushi/honshi/07/t01-22p/3.html の問題が話題になっているようです。 正の整数の下2桁とは、100の位以上を無視した数を言う。たとえば2000, 12345の下2桁はそれぞれ0, 45である。mが正の整数全体を動くとき、5m^4の下2桁と…

ナベアツ算2号

「ナベアツ算の下書き。 - uokumuraの日記」からはだいぶ様変わりしましたが、とりあえず 200.まで { 3.の倍数.と(3.のつく数字).のとき(アホに) 5.の倍数.のとき(ナルシストに) 8.の倍数.のとき(人を捜してる感じに) }.なります() ができるようになったので…

ナベアツ算の下書き。

doukaku.orgの書きかけ。 1つは投げたんですが、sumimさんの「風変わりな実装」(世界のナベアツに Squeak Smalltalk で挑戦する(改訂) - Smalltalkのtは小文字です)に触発されて大改訂を初めてしまいました。 Integer.metaClass.の倍数 = {->(delegate..1…

metaClass.defineが凄い!

今日のGCRはustream参戦。途中で途切れてしまったり、音が聴こえなくなったりしてしまったもののパワポを見ながら眺めていたら結構勉強になりました。 中でも興味を引かれたのがdefine。 String.metaClass.define { foo { s-> println s + delegate } bar { …

ついったかうんた その2

書き直したつもりが別エントリになってたので、そのまま別エントリとして書き直します^^;大幅に手直ししてWeb startも用意してみました。が、groovyがリフレクションを使ってる関係で無制限アクセスが必要なようで、証明書の警告が出てしまいます…大幅改定後…

ついったかうんた

ついったのポスト数カウントツールを書いたので、置いてみました。 タンブラーにちょこちょこメモりつつ書いてた物です。TwitterCounter.zip解凍したフォルダ直下にあるTwitterCounter.bat(windowsの場合)かTwitterCounter.sh(unixとかの場合)を叩くと起動し…