uehaj's blog

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

2010-01-01から1年間の記事一覧

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大会を取り仕切っていただきました、綿引さん、今回もありがとうございました。山田さん、参加者の皆様おつかれさまでした。ありがとうござい…

GPLにおいて納品は頒布ではない?

いままで、GPLソフトウェアを改変/拡張もしくは利用の対象としたプログラム製造請負契約において、その成果物の「納品」は、GPLの「頒布」に該当すると思ってました。つまり、頒布を行わなければ生じないGPLの義務(ソース公開義務その他)は、納品時にも課…

JavaとGPL

Javaで書かれたプログラムでGPLなものはあまり聞きません。 なんででしょうかね〜。と思って考察してみました。GPLのFAQを見ると、http://www.gnu.org/licenses/gpl-faq.ja.html#GPLPluginsInNF プログラムがプラグインと動的にリンクされ、お互いにファンク…

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…

Grails console plugin

Grails 1.3.0のリリースおめでとうございます。それとは直接関係はないですが、「これは便利!!!」と思ったGrailsプラグインを紹介します。それはGrails console pluginです。何かというと、Grailsアプリを実際に動かしながら、裏でGroovyコードをインタラ…

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

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とは言える。

[JVM][Clojure] Clojureについて本を読んだだけで語ってみるよ

プログラミングClojureの本を読み終わりましたので、読書感想文です。 Clojureでのプログラミング経験があるわけではないので、ごくごく浅いものとなっています。 基本的な間違いもひょっとしてあろうかとも思いますので、コメントいただけますと幸いです。C…

GroovyServ FAQを作りました

そのうち公式ページに載せますが先ずはたたき台として。他に疑問があればコメント、Twitter(@uehaj)などで教えていただけますとたいへんありがたいです。 Q なんでJNAつかってるの? A カレントディレクトリを変更するためです。具体的にはchdir()を呼ぶため…

GroovyServを公開しました

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

赤ちゃんが来た

そしてようやく1児の父親となることとあいなりました。この3日間は、人生で最も長かった3日間かもしれない・・。おかげさまで母子ともに健康であり、もうそれだけでありがたいのです。一時期、ブログの更新ができなかったのも家事に専念してたからでした…

gyazo+fotolife

画面キャプチャを多用した分かりやすいソフトウェアの設定方法とかインストールの詳しい解説記事をブログに書いてるひとがいらっしゃいます。自分もやりたかったのですが、画像をトリミングしてアップロードとか面倒だなーと思ってました。簡単にできるツー…

スプーンとAST変換

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

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

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