uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

groovy

Gasic -- Basic Intepreter by Groovy

Groovyで書かれたBASICインタプリタだそうな。http://groovyconsole.appspot.com/script/192001サンプルコード ' initialize the loop counter count = 10 ' stop looping if we're done top: if count = 0 then end print "Hello, world!" ' decrement and …

GroovyServの小技シリーズ2 scalacを高速化する

つい昨日0.4がリリースされたGroovyServですが、相当バグフィックス入ってるのでお薦めです。GroovyServはGroovyスクリプトの起動を高速化するものですが、Groovyから呼び出すものはGroovyに限りません。つまりJVM上で動くものならなんでも起動の高速化が理…

GroovyServの小技シリーズ1 printlnをシェルで

bashの場合、以下のような関数を定義しておくと便利。 println() { eval "groovyclient -e 'println($*) ' "; }すると、 $ println 3+5*2 30 $ println 'System.getProperty("user.dir")' /Users/hoge $ println 'System.getProperties().keys().findAll{it.…

JGGUG WS&special G*Workshop 7/24

JGGUG総会とG*Workshop、参加して参りました。会場を提供いただきました、オラクル様、関谷さん懇親会幹事およびLT大会を取り仕切っていただきました、綿引さん、今回もありがとうございました。山田さん、参加者の皆様おつかれさまでした。ありがとうござい…

GContract

契約による設計(Design by Contract, DbC)をGroovyで実現する、GContract 1.1.0がリリースされています。http://wiki.github.com/andresteingress/gcontracts/ http://en.wordpress.com/tag/gcontracts/指定できるのは、@Invariant(不変条件), @Require(…

2009年度JGGUG総会+スペシャルG*ワークショップ

JGGUG主催のG*ワークショップ(+JGGUG総会)がきたる7月24日に開催されます。 JGGUG総会+スペシャルG*ワークショップ 先日0.2版が公開されたGroovyServについてのセッションもあります!そのほかGrails Groovyに関する注目の情報が満載。ご都合つく場合、是非…

return省略のルール

Groovyではreturn文において、returnキーワードの省略ができます。たとえば boolean even(n) { if (n % 2 == 0) { return true } else { return false; } } はこうかけます。 boolean even(n) { if (n % 2 == 0) { true } else { false; } } でも、こうは書…

Map.withDefault{}は地道に便利

Groovy 1.7.1から、MapにメソッドwithDefaultが追加されています。通常、マップにキーが存在していない場合のデフォルト値はJavaの時代からnullと決まってますが、withDefaultでnullではないデフォルト値を設定することができます。何が嬉しいかというと、た…

例外が発生することを期待するassert

注:本記事は、車輪の再発明です。 「例外が発生することを期待するassert」を書きたいときがあります。これを書きたいケースが生じるのは、テストコードや、サンプルコードを書くときです。例外のthrow/catchのコストを考えると、プロダクトコード中にはあ…

EMCでメソッドを置き換える際にもとのメソッドを呼び出したい

ExpandoMetaClassを使って、メソッドを定義するときに、置き換える前のメソッドを呼びたいときがあります。あるんです。以下やりかたです。置き換える前のメソッドを保存しておきます。 def old = Integer.metaClass.getMetaMethod("asType", [Class] as Obj…

getAtとマルチ代入の不思議な関係

groovyには、 def (a,b) = [1,2] assert a == 1 assert b == 2 というようなマルチ代入*1の構文があります。 私は、マルチ代入分の右辺はリストである必要があるのかと思っていたのですが、こちらの記事を読むとそうではなくて、getAtが定義されていればよい…

DCIアーキテクチャについて語ってみるよ

Trygve Reenskaug氏とJames O. Coplien氏らが提唱する「DCIアーキテクチャ」について、id:digitalsoulさんが論文を翻訳してくださり、またその解説とサンプル実装(groovy, scala)を示してくださっており、読んでみたところ、大変興味深いので理解した限りを…

Thoghtworksの技術レーダー(2010年4月版)

ThoughtworksアンソロジーのあのThoughtworksが出している「Technical Radar」というレポートがあります。2010年1月のはこちら。InfoQに記事(和訳版)も出ています。これの現時点で最新版である、2010年4月のが出ています。 http://www.thoughtworks.com/s…

Groovyの「静的型付け」を引き続き考える

前の記事に書きましたが、id:kskyさんが記事「Groovyの「静的型付け」はホンモノか!?」でも考察されているように、Groovyの「静的型付け」は、Javaのようなコンパイル言語でのそれとは違った意味合いがあります。その違いを細かく考えると、静的型付けには、…

Groovy on android by discobot

Android上でgroovyを動かすには、discobotというものを使います。これはGroovyに対するパッチ群を中心としたもののようです。 準備 JDK,Android SDKをインストールしておきます。Eclipse plugin(ADT plugin for eclipse)は使わない方向で。 ダウンロード dis…

オプショナルタイピングの実効性と陥穽

Groovyにはオプショナルタイピングという概念があって、これは要するに変数宣言、メソッドの返り値や引数の宣言において、型指定を省略する事も、しないこともでき、適切な方を選べるという事です。ささっと書きたいときは省略し、安全性を期待するときは指…

Groovy++ v0.2リリース

前にちょっと紹介した、Groovy++のv0.2がリリースされました。 http://groovy.dzone.com/articles/groovy-v02-small-version ちょっとしたドキュメントがついてます。インストールせずにいろいろ試せるGroovy++Webコンソールというものも作られています。「…

「何だ今日はカレーか」「いえ、カレーライスです。カレーは部分的よー。」

curry化の話。GroovyのClosure#curry()は「カリー化」じゃなくて部分適用だと言われる事があります。なんでそうなんだという話を私の理解している限りで説明してみます。まず、カリー化というのはラムダ算法方面の話で、関数適用に関する概念です。たとえば…

本場のGroovyキタコレ

以下が面白そうなので参加してみますね。今定員の半分ぐらい埋まっているみたい。 ご興味のある方はご検討ください。 Paul King氏特別講演開催決定! ============================4/19,20に開かれるQConでの講演のため、Groovyの主要コミッタで、"Groovy in…

GrUnitなるものありき

GrUnitというものができたようです。これは何かというと、ざっとみたかぎり、「Groovyでもっと簡単にGroovy流儀でテストを書けるようにする」というもののようです。今のところ、これはGroovy++に付属する機能であるようです*1。 http://groovy.dzone.com/ar…

kobo-commonsがお届けする「複数のキーによるソート」

まえに、Groovyのsortにまつわる衝撃の事実という記事で、Groovyには簡単に複数のキーでソートする方法があるとおもってたけど実は存在しなかった、という事を書きました。複数のキーでのソートとは、例えば"Groovy list.sort by first, second then third e…

WithLogアノテーション

クラスにWithLogアノテーションというのを指定すると、Log4Jのロガーをインジェクトしてくれる。log4j以外にも切り替えら得たりできるかは不明。まあある形で「初期化コードの分離」ができているから原初的なDIとは言える。

GroovyServを公開しました

以前予告編として紹介した、Groovyを常駐サーバ化して、見た目の起動速度を高速化するGroovyServの0.1版をApache Lisence 2.0に基づくOSSとして公開しました。GroovyServを使う事で、Groovyの起動がRubyやPerlのように速くなります。これにより、「JVM上のス…

スプーンとAST変換

さっき書いたenumの記事で思い出したのでご紹介ですが、フランスのINRIAがやってる(やってた?)Spoonというプロジェクトがありまして、これはなにかというと、Javaのコンパイラを拡張して、特定アノテーションの指定をきっかけとしてコンパイラのコード生成と…

enumはインスタンスベースオブジェクト指向の夢を見るか

Javaのenumは、ご存知のようにクラスの特殊なものです。その実体は、複数個数のシングルトンすなわち「N-ton」のさらに特別な場合としての、クラス初期化時に固定個数が生成される(サブクラスの)インスタンスの集合ですね(あとそれにプラスして多少の言語…

Groovy Eclipse Plugin 2.0所感

2.0になって良くなったと言われるGroovy-Eclipse plugin 2.0.0.xxをしばらく使ってました。前バージョンを使ってたわけではありませんので、以下で書いてることは2.0の機能なのか1.0から引き続きなのかは不明。 うれしい点 クラスを使用したとき、対応するim…

Groovy++

ご存知だと思いますがGroovy++というのがあります。(山本さんも記事書いてます。LT発表もされています)。この名を聞くと、Cに対するC++のような、Groovyを拡張した別の言語のように思えますが、違いまして、利用者からすると、「Groovyコードの中で@Typedア…

GroovyのWindows Installer版にはいろいろ入っているぞ

Groovyのダウンロード形態として、Windows版には「インストーラ版」というのがあります。それを選んでインストールすると、インストール時にEasyb,Gaelyk,Gant,GPars,Griffon,Spockなどが追加パッケージとして選択できます。意外だったのが、Gaelykが入って…

Groovyserv予告編

id:kiy0takaさんが、d:id:kiy0taka:20100120#1264001023にて「Groovyの起動を速くするという記事を書かれています。非常に短く、簡潔に実装されています。-lオプションの良い利用例ですね。コマンド名もいい。あと、そうなんですよ。言いっぱなしになってま…

プロトタイプベースOOPはどうなったか(答え:勘違い)

2009年の10月ぐらいに「Prototype style OOがGroovyに採用」という話をtwitterで聞いて、わたしもRTしました。http://topsy.com/tb/jira.codehaus.org/browse/GROOVY-1523んで、あれはどうなったかなーと思って調べるとどうやら上の形での採用はされていませ…