タグ

ブックマーク / npnl.hatenablog.jp (16)

  • Groovyの再帰処理(trampoline)についてひとつ分かったこと - No Programming, No Life

    はじめに Groovyのクロージャ(Closure)には.trampolineってメソッドがあって、これをうまい感じに使うと末尾再帰を最適化してくれる。 よしやってみよう では、簡単な合計値を求めるサンプルを再帰処理で。 java.lang.StackOverflowError お約束。 よし、今こそトランポリンだ! groovy.lang.MissingMethodException: No signature of method: java.lang.Integer.plus() is applicable for argument types: (groovy.lang.TrampolineClosure) values: [groovy.lang.TrampolineClosure@509c6c30] あれ?Integer.plus()?あ…もしかして…。 これが最後の恋であるよう

    Groovyの再帰処理(trampoline)についてひとつ分かったこと - No Programming, No Life
  • JLineの最小サンプル in Groovy - No Programming, No Life

    はじめに Groovy! (挨拶) 突然ですが、 航海日誌: 2012-01-09: [Scala][Java] JLineの最小サンプル をGroovyでも書いてみました。 JLineは、コンソールアプリケーションにおいてユーザの入力の編集と読み込みを行うJavaライブラリです。 タブ補間、コマンド履歴、パスワードマスキング、キーバインドのカスタマイズ、他のコンソールアプリケーションをつなぐパススルー処理などの機能があります。 JLine - Java console input library プロジェクト語トップページ - SourceForge.JP Download Groovyの場合、@GrabがあるからDownloadは不要。ここにMaven Repositoryの定義が書いてあるので、これをもとにスクリプトの先頭にGrab定義を書けばスクリプト実行時に自動でダウンロード

    JLineの最小サンプル in Groovy - No Programming, No Life
  • 私がGroovyを好きな9つの理由 2011年版 - No Programming, No Life

    ぐるーびーたんと by id:torazuka はじめに G* Advent Calendar 2011 12/12(12日目)に参戦ということで。 そろそろGroovyについて語っておくベキかなと思ったのであらためて書いてみます。私なりの、Groovyを気に入っている理由を9つほど述べてみたいと思います。この記事を読み終わったころ、皆さんもGroovyの魅力が伝わっていれば幸いです。それではどうぞ。 1.シンプル 非常に短いコードで多くのことを可能に Groovyはその簡潔さ故、非常に短いコードで様々な事が可能である。 たとえば、Groovyなら1行でできる97のことを見ていただければその強力さが伝わるでしょう。これはPerl使いが好むような、ワンライナーをGroovyで簡単に実現できる実例を示しています。 また、プログラミングGROOVY発売記念として行われたghelloなども140

    私がGroovyを好きな9つの理由 2011年版 - No Programming, No Life
  • Gradleで--daemonオプションを付けた際にnew Fileするとうまくいかない - No Programming, No Life

    はじめに --daemonオプションは高速起動するためのオプションなんですが、まだexperimental(実験段階)なんで何があっても自己責任でお願いしますということです。 $ gradle -h (省略) --daemon Uses the Gradle daemon to run the build. Starts the daemon if not running [experimental]. (省略)さて、それはそうと、何の気なしに、gradleを高速起動するため、以下aliasを指定してGradleを利用していました。 $ alias gradle="gradle --daemon" こうしておくと--daemonを付け忘れることもないし便利だからねってことでやっていたんですが、思わぬところでエラーが発生しました。 エラー発生 それはnew File() した時に、存在してい

    Gradleで--daemonオプションを付けた際にnew Fileするとうまくいかない - No Programming, No Life
    nobeans
    nobeans 2011/07/27
    CWDの扱いは悩ましいのでGradleの気持ちは分かる。GroovyServでもかなり力業使ってるし/"補足"の件は--daemon付いてないからエラーが出てないだけでは?手元で試したらスラスラが有無に関わらず前半部の通りの挙動でした
  • Groovyでスリープソートとバケットソートをやってみた - No Programming, No Life

    はじめに ちょっと前にスリープソートが流行ってたので、それをid:orangecloverさんが実装していたのを見て、id:nobeansさんがさらに添削していたものを参考に書いたコードが下のようになりました。 スリープソートって スリープソートって、あるデータのもつ重みを時間単位に変換し(たとえば、[1, 2, 3] とかのデータだったら、[1秒, 2秒, 3秒] とか)、それぞれその時間だけ待機させたのちに値を集めて行くっていうアルゴリズムですよね。 これって今までにないソートアルゴリズムなのかな?と思ってちょっと調べてみると、概念として近いのはバケットソートですよね。 バケットソートって Groovyで実装するとたぶんこんな感じ Groovyのリストはインデックスがない場合は自動拡張されるのでそれを利用して、対応する値のindex位置にどんどん値を配置してゆきソートしています。 まと

    Groovyでスリープソートとバケットソートをやってみた - No Programming, No Life
    nobeans
    nobeans 2011/06/12
    へー、バケットソートというのがあるのか
  • アイコンにGroovyのロゴを追加するjarを作りました  - No Programming, No Life

    (◕ ‿‿ ◕)グルーべぇ 僕と契約して、Groovyistになってよ! 契約と引き換えに出来上がるのがGroovyバッジ。 契約方法 まずは、ここからjarをダウンロードして下さい。 GUIで使う jarをダブルクリックして起動 配置場所や縮小率などを調整 ウィンドウにアイコンをドロップする*1 シェルから使う $ java -jar groovy-logo-adder.jar <your_icon_file_name> <image_creation_options...>image creation optionsに指定できるものは以下です。 配置関係 オプション 説明 topLeft ロゴを左上に配置 topRight ロゴを右上に配置 bottomLeft ロゴを左下に配置 bottomRight ロゴを右下に配置(デフォルト) center ロゴを中心に配置 ロゴの縮小率 オプ

    nobeans
    nobeans 2011/05/27
    ほーお手軽ですねー
  • Groovy v1.8の新機能をサクっと紹介するよ - No Programming, No Life

    このシリーズの一覧はこちら Groovy v1.8リリースノートより。 はじめに 待ちに待ったGroovy v1.8がやっと出ましたね!ということで、Groovy v1.8の新機能をサクっと紹介したいと思います。 Groovy v1.8は結構多くの機能拡張がなされておりますので、サラっと行きたいと思います。 コマンドチェーン(ドメイン固有言語:DSL) Groovy v1.8以前まではトップレベルでのメソッド呼び出しの括弧は省略できませんでしたが、新しいコマンドチェーン機能を使えば括弧なしのメソッド呼び出しが可能になります。 これは、a b c d のように呼び出した場合は実際には a(b).c(d) と同等となるようなことです。複数メソッドやクロージャ、名前付き引数と一緒に機能して、さらに右側に連ねてゆくことができます。 新しい構文でサポートされている例を見てみましょう。 turn le

    Groovy v1.8の新機能をサクっと紹介するよ - No Programming, No Life
    nobeans
    nobeans 2011/04/28
    素晴らしいまとめ
  • GroovyのString(Groovy JDK)にいつの間にか#trメソッドが追加されてた - No Programming, No Life

    はじめに もう、追加したんなら言ってよぉ〜(笑) ということで、v1.7.3から追加されてたみたいです。 前に自分でtrコマンドを書いたりしてたんですが標準サポートされるなんて嬉しい限り。 ということで早速使ってみた。 ソース (動作確認: Groovy Version: 1.7.5 JVM: 1.6.0_20) tr.groovy // すべての 'a' を 'A' に変換 assert 'abcabcabc'.tr('a', 'A') == 'AbcAbcAbc' // a->b, b->a assert 'abcabcabc'.tr('ab', 'ba') == 'bacbacbac' // 範囲もいける assert 'Groovy is so fun!'.tr('a-zA-Z', 'A-Za-z') == 'gROOVY IS SO FUN!' assert '123456789

    GroovyのString(Groovy JDK)にいつの間にか#trメソッドが追加されてた - No Programming, No Life
    nobeans
    nobeans 2011/04/07
    とある事情でtrが取り込まれた日付を探していたら発見したのでブクマ。よろこんでいただけて何よりです。
  • GroovyなJDK、それがGDK(String編その1) - No Programming, No Life

    このシリーズの一覧はこちら はじめに GroovyにはJavaの標準API(JDK)を拡張したGroovy JDK(GDK)があります。大量の便利メソッドが追加されており、これを使いこなすだけでも相当のことができるようになります。このシリーズでは毎回1クラスずつ各メソッドの使用例をサンプル付きでご紹介していきたいと思います。 「今回は java.lang.String です」 Stringは、おそらく一番良く使うであろう「文字列」を表現するクラスです。Javaでは文字列はダブルクォートで囲んだ形式を使いますが、Groovyではシングルクォートで囲んだものが通常のStringとなります*1。Groovyではダブルクォートで囲んだ場合、GStringというStringの機能を拡張したクラスとなります。これは文字列に変数を埋め込んだり、遅延評価させたりできます。また、正規表現のために /str/

    GroovyなJDK、それがGDK(String編その1) - No Programming, No Life
  • GroovyでファイルのMD5を計算する - No Programming, No Life

    説明 第一引数にファイルへのパスを指定してそのファイルのMD5を取得するコマンドです。 AntBuilderめちゃ便利。 使用例 (自分自身のMD5を取得) $ groovy -v Groovy Version: 1.8.0-rc-1 JVM: 1.6.0_22 $ groovy getMD5.groovy getMD5.groovy 8fcc4f38b1123f6dc16b90b5a582a176 似た趣旨のgist 指定されたディレクトリを再帰的に辿って見つけたファイルのSHA-1ハッシュ値を表示 — Gist by id:backpaper0さん

    GroovyでファイルのMD5を計算する - No Programming, No Life
    nobeans
    nobeans 2011/03/04
    なるほど。せっかくなのでMessageDigest版と両方書いてみた。https://gist.github.com/853924
  • Groovyソースコード斜め読み(その1)「Groovyにもタプルがあった 」 - No Programming, No Life

    このシリーズの一覧はこちら はじめに なんと、無いと思っていたタプル(組)がGroovyにもある模様。しかし、実体はListを薄くラッピングしただけのもののよう…せっかく見つけたので一応ご紹介ということで。 (動作確認: Groovy Version: 1.8.0-rc-1 JVM: 1.6.0_22) クラス階層 java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList groovy.lang.Tupleリストとして実装されている。 コンストラクタ Tuple(Object[] contents) クラスをnewするにはオブジェクト配列を渡せばいいようです。オブジェクト配列ってことは要素は何でもアリということですね。 空タプル def t1 = new Tuple() assert t1 == [] ,

    Groovyソースコード斜め読み(その1)「Groovyにもタプルがあった 」 - No Programming, No Life
  • JVM上で動くプログラミング言語のまとめ - No Programming, No Life

    ※当記事はNAVERまとめに移行しました。(2012-04-14) 今後はNAVERまとめの方でメンテしてゆきますので、 よろしくお願いします。 JVM (Java Virtual Machine)上で動くプログラミング言語が増えてきたのでここらへんでまとめて行きたいと思います。新しいのを見つけ次第追加して行きます。 こんなのもあるよ!といった情報は大歓迎です。コメントかはてブコメントにてよろしくお願いします。 JVM上で動くプログラミング言語一覧 ※はてブエントリ数順*1 No. 言語名 Wikipedia 説明 1 Scala (ja,en) オブジェクト指向+関数型のハイブリット言語。TwitterやFacebookなどもバックボーンにScalaが使われている。 2 Noop (ja,en) Noop (発音 /ˈnoʊ.ɒp/) は新しいプログラミング言語を開発することを意図するG

    nobeans
    nobeans 2011/02/23
  • Groovyなら1行でできる97のこと - No Programming, No Life

    タイトルはまぁあれですが、Groovyって結構ワンライナーで出来ちゃうことが多いよねということで、みんなで97個(+αそれ以上)の一覧を作っちゃいませんか?という企画です。 以前jggugで行われていたg100ponみたいな感じでできたらいいなと思ったので、Google Docsのスプレッドシートで共有してありますので、こんなのあるよ!というのがあったらみなさんでどんどん追加して行っちゃって下さい。よろしくお願いします。 97 Things Groovy can runs by one liner http://bit.ly/97_Things_Groovy_can_runs_by_one_liner ※Twitterでつぶやく際はハッシュタグ (#groovy97oneliner) でお願いします。 ※ちなみに、順番はあとで並べ替える可能性があります。 参考リンク プログラマが知るべ

    Groovyなら1行でできる97のこと - No Programming, No Life
  • Groovyでクロージャを期待するメソッド呼び出し時の挙動について - No Programming, No Life

    はじめに (10..1e4).grep(~(9..0).sum{"$it?"}).any''.&println anarchy golf - the source code を見ていたら見つけたのですが、Groovyってクロージャを引数として期待しているメソッドにクロージャインスタンスを渡した場合は自動でうまい感じに動くんですね。 文章で書くよりも例を見た方が分かりやすいと思うので、下をどうぞ。 例1:1〜10までprintする (1..10).each(Object.&print) 結果 12345678910 例2:文字列終端判断 ['ga', 'gi', 'gu', 'ge', 'go'].collect('hoge'.&endsWith) 結果 [false, false, false, true, false] 例3:文字列インデックス判断 def fox = 'The quic

    Groovyでクロージャを期待するメソッド呼び出し時の挙動について - No Programming, No Life
  • GroovyでBuilder系の定義ファイルの外出しする - No Programming, No Life

    はじめに GroovyはほにゃららBuilderが充実していますが、ちょっとだけ不満点を挙げるとしたらそれはコードに直接埋め込まなければいけないことではないだろうか。 new HogeBuilder().aaa { bbb (ccc: 'ddd') { eee() { . . . } } } こんな感じに。 そこで このBuilder定義部分*1を別ファイルなどに外出しにできないか?と思って、色々試してみたところできました。以下にソースを載せます。 ソース (動作確認: Groovy Version: 1.7.5 JVM: 1.6.0_20) サンプルとして前に書いたMarkupBuilderでHTML生成を試してみた - No Programming, No Lifeで利用したソースを改造しました。 markup.groovy import groovy.xml.MarkupBuilde

    GroovyでBuilder系の定義ファイルの外出しする - No Programming, No Life
  • Scalaも素晴らしいけど、Groovyも素晴らしいですよ - No Programming, No Life

    id:nazokingさんが、java使いのためのScala の勉強のための資料作り scalaって素晴らしい いろいろ1 - nazonoDiaryという記事を書いていた。 ここでは、Scalaで書くとJavaよりも簡潔に書けるよとのことで紹介されているのですが、比較対象にGroovyが入っておらずJavaScriptRubyだったのがちょっと残念だったので*1、「Groovyでもだいたい同じようなことができるよ!」ということで、今回の記事を書いてみました。 id:nazokingさんと同じ見出しで行ってみたいと思います。 (動作環境: Groovy Version: 1.7.2 JVM: 1.6.0_20) すべてがオブジェクト 1.toString() デフォルト値付き引数 def hoge(a = 'aの初期値', b = 'bの初期値') { // do something }

    Scalaも素晴らしいけど、Groovyも素晴らしいですよ - No Programming, No Life
    nobeans
    nobeans 2010/05/19
    嗚呼、比較もされない寂しさよ
  • 1