Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。この本では、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...
Hudsonの分散ビルドの実装の肝になっているのは、クロージャをリモートJVMで実行するという仕組み。クラスファイルとかリソースとかも必要に応じてリモートJVMにコピーするので、リモート側にあらかじめプログラムを配備しておく必要がないのがよい点です。 さて、常々Javaのクロージャ(もどき)の文法は冗長だと思っていたので、これにGroovyを組み合わせたらいいんじゃない?、という事で、実験して見たところ意外にうまくいきました。 def pid() { // PIDを取得する。要はどのJVMで動いているかをわかりやすくするだけ return new File("/proc/self").canonicalPath } i=0 (0..<4).each { i++; remote { println "1st from ${pid()} (${i})" remote { println "2n
とか極端なことを書いちゃうと、またいろいろ怒られるわけですが。 Grailsによって、少なくともJavaプログラマがRuby on Railsに移行する理由はなくなったと言ってもいいのではないでしょうか。そして、JavaもRubyも知らない人にとっても、今からWebアプリを作成するためにどちらかを選ぶならRuby on RailsよりもGrailsのほうがいいのではないかと思います。 Grailsの価値は、もちろんRuby on RailsのようにWebアプリケーションが作成できることにあるのですが、Ruby on Railsのようなフレームワークというのは他にもあります。 実運用を前提に考えると、Grailsの本当の価値は、Java VMで動くこととSpring+Hibernateがベースになっていることであると思います。つまり、SpringやHibernateといった、Javaの世界で
第16回Grailsコードリーディング、発表してきました。資料をスライドシェアにあげときました。いくつかの誤り修正もしておきましたので、今後参照する際はできればこちらをお願いいたします。 参加者の皆様、ありがとうございました。質疑が非常に活発で、たいへんやりがいがありました。 質疑の話題、および、懇親会の話題をあわせてちと補足します。 CallSiteArrayは確かにメモリを食うが、SoftReferenceで参照されるので、メモリがなくなってきたら解放され、速度は落ちるがメモリが足りなくなることを防ぐ(頻繁に呼ばれないメソッド呼び出しはキャッシュされなくなる)。 AST変換を使ったコードをgroovycでクラスファイルにコンパイルした上でJadで逆コンパイルすると、どんなコードに変換されているかわかって実に面白い。 @DelegateのAST変換で生成されたクラスは、注入したクラスのイ
HudsonのリモートAPIを試すのに毎回ホンモノにアクセスするのもしんどいので,スタブ作れないかなとモガモガしてみた。 てなわけで, Re: [groovy-user] Small Web Server - Guillaume Laforge - org.codehaus.groovy.user - MarkMail (↑)ここらへん参考にして,こんなコード書いてみたよ。 import groovy.text.* import groovy.net.http.* def params = [:] // some map with parameters for the template def templates = [ "/hudson/api/xml": new GStringTemplateEngine().createTemplate(new File("hudson.xml").
GroovyMagの今月号やSwingPadのソースみて勝手に驚いていたが,ウチ帰って「Grails徹底入門(asin:4798117366)」読み返してたら,ちゃんと書いてあった(p.72を参照)。 えー,何を驚いたかと言えば「クロージャやMapはas演算子を使う事でインターフェイスに変換できる」ということに驚いたのだよ。 つまり,(↓)こんなのとか, def button = new JButton() button.addActionListener({ println "action!!" } as ActionListener) (↓)こんなのはGroovy的にアリなんだそうな。 def panel = new JPanel() panel.addMouseListener([mouseClicked: { println "clicked" } mouseEntered: {
SwingBuilderにおける以下のようなコードに違和感を覚えつつも,お作法なんだろうからと深くは考えてなかったワケ。 button(text:"Click", actionPerformed: { /* ここにアクションを記述 */ }) でもね,JetGroovyで編集中にこんなコード補完を見つけてしまったのよ。それもSwingBuilder外で。 あれ?actionPerformedってJButtonのプロパティになってるやん。調子のって(↓)こんなことしたら,こっちもプロパティで出るし。 あれこれ調べてみた所,どうやらGroovyが気を利かせてJDKのクラスに独自の拡張を施しているみたい。一応,GDKの存在は知ってたつもりなんだけど,GDKのJavadocにSwingは見当たらなかったんだよなぁ。:-( まあよい。JetGroovyを信じよう。今まで「無名クラスが作れないからSw
もうAnt要らない。 #トカナントカ言ってみるテスト。:-P とりあえず,あそびでいじってみたスクリプトを晒しとく。 Ant.property (file : 'build.properties' ) // target外ではAnt.xxxが必須 foo = 'gehoge' def test = 'GEHOGE' // defは無くても平気 bar = "${test}/${foo}/hoge" // GStringsが使える includeTargets << gant.targets.Clean // 出来合のtargetを取り込める // → antやantCall相当のことはどうすんだろ? // targetちゅうのは,一種のクロージャなのですな(よー知らんけど)。 target(default: 'これがdefault') { property (file : 'build.p
Graeme の書いた「Grails に関する五つの誤解」を大急ぎで, およそのあらましだけを訳しておく. 1) JRuby on Rails があれば Grails なんて要らないじゃん. だから Grails のゴールは Rails とはぜんぜん違うんだって. Grails のゴールは実績のある Java コンポーネント (Hibernate, Spring, ...) を統合して, DRY (同じコトは二度しない) の原則に従って使いやすくすること. 焦点は Java にある. Rails とは違って, あらゆる J2EE コンテナで動かせる. 2) じゃあ Java でいいじゃん, Groovy なんかじゃなくて. だから Groovy は Java の替わりをしようとしているんじゃないって. Java は複雑なロジックや低レベルなアルゴリズムを書くのにはいいけど, 高レベル
http://martinfowler.com/bliki/GroovyOrJRuby.html 2007/11/27 現在、Java仮想マシン(JVM)上で動くスクリプト言語として、GroovyとJRubyはどちらが優勢なのかという議論が巻き起こっている。 この言語戦争の勝者はどちらなのか!? 知りたいよねー。知りたいでしょ。 みんなは「プロジェクトに使うのはどっちだ?」とか「今から学習するならどっちだ?」とか気になっていると思う。 まず最初に押さえなきゃいけないのは、このレースの出走馬が2頭だけだと考えるのは公平じゃないってことだ。 JVM上のスクリプト言語の歴史は古く、Jython(JavaによるPython実装)なんてずっと昔から存在している。 他にもいろいろありすぎてよく分からない状況なので、ここではあえて列挙することはしない。「XXXがないじゃないか!」と怒られても困るしね。
Groovyの奇妙な演算子たちを簡単に紹介してみます。 「奇妙な」とは、とりあえずここでは「Javaに無い」という意味です。 今回は「その1」として以下を紹介します。 ?. *. .@ .& 「?.」セーフナビゲーション演算子。 「.」演算子と同様にメンバ(フィールド、メソッド、プロパティ)を参照するものですが、左辺がnullであった場合にもNullPointerExceptionが発生しません。左辺がnullであった場合、値として単にnullが得られます。 【覚え方】 foo?.barは、((foo == null) ? null : foo.bar )と解釈されます。このときの?と.を思い出しましょう。 【classic groovyな人への注記】 昔は->と表記していました。 「*.」コレクションの要素それぞれのメンバをリストにしたものを返す演算子 一般に、 <コレクション>*.<メ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く