SlideShare a Scribd company logo
Groovy 2.3,2.4の新機能より、
「マークアップテンプレー
トエンジン」機能のご紹介
2014/12/19
NTTソフトウェア株式会社
上原潤二
Copyright (C) 2014 NTT Software Corp.
The Groovy Roadmap
• Groovy 2.3
• 2.3.0(2014.5.5)
• Groovy 2.4
• 2.4b1(2014.6.12)
• 2.4b2(2014.7.29)
• 2.4b3(2014.9.2)
• 2.4b4(2014.11.27)
• RC1,2,3…
• Release(2015.初?)
• Groovy 3.0(2016?)
http://www.slideshare.net/SpringCentral/groovy-
in-2014andbeyond?qid=c66045f1-fab4-44f8-
a86e-afccd3e7e56f&v=qf1&b=&from_search=3
Groovy 2.3新機能一覧
• Trait
• 新規AST変換
• @TailRecursive/
@Builder/@Sortable/
@SourceURI
• ライブラリ改良・拡張
• マークアップテンプ
レートエンジンの追
加
• JSON Slurper
• ConfigSlurper
• Java8/7対応
• JUnit4対応
• @ClosureParams
• ツール拡張
• Groovysh
• GroovyConsole
• ドキュメント改善
Groovy 2.4

∼beta4)新機能一覧
• Android対応
• ライブラリ改良・拡張
• toUnique(), toSorted()の
追加
• init(), dropRight()、
takeRight()の追加
• System.currentTimeSec
ond()の追加
• ツール拡張
• Groovysh
• -eオプション
• ローカル変数の型宣言
• SelfTypeアノテーション
• MacroGroovy/
ASTMatcher→2.5へ
今日のテーマ
• マークアップテンプレートエンジン
• groovy.text.markup.MarkupTemplateEngine
継承階層
• SimpleTemplateEngineと同列
• MarkupBuilderのような記法のテンプレート
XML/HTMLを生成するDSL
html {
head {
title "タイトル"
}
body {
h1 "タイトル"
ul {
(1..10).each {
li it
}
}
}
}
<html>
<head>
<title>タイトル</title>
</head><body>
<h1>タイトル</h1><ul>
<li>1</li><li>2</li><li>3</
li><li>4</li><li>5</li><li>6</li><li>7</
li><li>8</li><li>9</li><li>10</li>
</ul>
</body>
</html>
機能
• プログラマブルマークアップ言語
• HTML/XMLを生成
• 型チェック機能つき
• インクルード
• エスケープ
• レイアウト
• http://beta.groovy-lang.org/docs/latest/html/gapi/
groovy/text/markup/
BaseTemplate.html#layout(java.util.Map, java.lang.String)
• 国際化
• Grailsタグリブを呼び出す
• http://beta.groovy-lang.org/docs/latest/html/gapi/groovy/
text/markup/TagLibAdapter.html
フレームワークにくみこまれ始
めている
• Spring MVC 4のGroovyMarkupViewはそれである
• Spring Bootから呼んだり
• http://spring.io/blog/2014/05/28/using-the-
innovative-groovy-template-engine-in-spring-
boot
• Ratpackでも使える
今日は
• マークアップテンプレートエンジンを使って
Webアプリケーションフレームワークを作っちゃ
おう!!
• マークアップテンプレートエンジンは、基
本的には「文字列生成処理」なので、http
リクエストに繋げ、レスポンスを返す
• TemplateServletとのアダプタを作ればよい
これだけだ
package org.jggug.markup
import groovy.text.markup.MarkupTemplateEngine
import groovy.text.markup.TemplateConfiguration
class ServletAwareMarkupTemplateEngine extends
MarkupTemplateEngine {
ServletAwareMarkupTemplateEngine() {
super(new TemplateConfiguration(autoIndent:true,
autoNewLine:true, expandEmptyElements:true))
}
}
html {
includeGroovy('head.tpl')
body {
nav (class:"navbar navbar-inverse navbar-fixed-top", role:"navigation") {
div (class:"container") {
div (class:"navbar-header") {
button (type:"button", class:"navbar-toggle collapsed", 'data-
toggle':"collapse", 'data-target':"#navbar", 'aria-expanded':"false", 'aria-
controls':"navbar") {
span class:"sr-only", "ナビゲーションの切替"
span class:"icon-bar"
span class:"icon-bar"
span class:"icon-bar"
}
a(class:"navbar-brand", href:"#", yield "Bootstrap theme")
}
div (id:"navbar", class:"navbar-collapse collapse") {
ul (class:"nav navbar-nav") {
li (class:"active") { a (href:"#", "Home") }
li { a (href:"#about", "About" ) }
li { a (href:"#contact", "Contact" ) }
li (class:"dropdown") {
a (href:"#", class:"dropdown-toggle", 'data-toggle':"dropdown",
role:"button", 'aria-expanded':"false", "Dropdown"; span class:"caret" )
ul (class:"dropdown-menu", role:"menu") {
デモ
BootstrapのHTML/CSSのサン
プルを機械的に変換。つらい。
web.xml
<web-app>
<servlet>
<servlet-name>template</servlet-name>
<servlet-class>groovy.servlet.TemplateServlet</servlet-class>
<init-param>
<param-name>template.engine</param-name>
<param-value>org.jggug.markup.ServletAwareMarkupTemplateEngine</
param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>template</servlet-name>
<url-pattern>*.tpl</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.tpl</welcome-file>
</welcome-file-list>
</web-app>
war
.
├── META-INF
│ └── MANIFEST.MF
├── WEB-INF
│ ├── classes
│ │ ├── META-INF
│ │ ├── cars.tpl
│ │ ├── defer.tpl
│ │ ├── head.tpl
│ │ ├── index.tpl
│ │ ├── list.tpl
│ │ ├── navi.tpl
│ │ ├── org
│ │ │ └── jggug
│ │ │ ├── Car.class
│ │ │ └── markup
│ │ │ ├── ServletAwareMarkupTemplateEngine.class
│ │ │ └── ServletAwareTypeCheckedMarkupTemplateEngine.class
│ │ ├── sample.tpl
│ │ └── typechecked
│ │ └── index.stpl
│ ├── lib
│ │ └── groovy-all-2.4.0-beta-4.jar
│ └── web.xml
├── cars.tpl
├── defer.tpl
├── head.tpl
├── index.tpl
├── list.tpl
├── navi.tpl
├── sample.tpl
└── typechecked
└── index.stpl
includeするには
classpathにある必要が
あり、暫定的に二重保持
型チェックつきにする
package org.jggug.markup
import
groovy.text.markup.MarkupTemplateEngine
import
groovy.text.markup.TemplateConfiguration
import groovy.text.Template
class
ServletAwareTypeCheckedMarkupTempl
ateEngine extends MarkupTemplateEngine
{
HashMap<String,String> modelTypes = [
request:'javax.servlet.http.HttpServletReque
st',
response:'javax.servlet.http.HttpServletResp
onse',
context:'javax.servlet.ServletContext',
application:'javax.servlet.ServletContext',
session:'javax.servlet.http.HttpSession',
params:'Map',
headers:'LinkedHashMap<String,
String>'
]
ServletAwareTypeCheckedMarkupTemplate
Engine() {
super(new
TemplateConfiguration(autoIndent:true,
autoNewLine:true,
expandEmptyElements:true))
}
Template createTemplate(Reader reader)
{
createTypeCheckedModelTemplate(reader,
modelTypes)
}
Template createTemplate(Reader reader,
String sourceName) {
createTypeCheckedModelTemplate(reader,
sourceName, modelTypes)
}
Template createTemplate(URL resource)
{
createTypeCheckedModelTemplate(resourc
e, modelTypes)
}
}
型情報の与え方
HashMap<String,String> modelTypes = [
request:'javax.servlet.http.HttpServletRequest',
response:'javax.servlet.http.HttpServletResponse',
context:'javax.servlet.ServletContext',
application:'javax.servlet.ServletContext',
session:'javax.servlet.http.HttpSession',
params:'Map',
headers:'LinkedHashMap<String, String>'
]
createTypeCheckedModelTemplate(reader, modelTypes)
文字列で!
型エラー
javax.servlet.ServletException: Creation of template failed:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup
failed:
GeneratedMarkupTemplate0: 4: [Static type checking] - No such
property: foo for class: javax.servlet.http.HttpServletRequest
@ line 4, column 33.
h1 { yield "request.foo="+request.foo }
^
html {
body {
h1 "headers="+headers.'user-agent'
h1 "request.foo="+request.foo
}
}
プログラミングHTML:
Helper Functions
def container(clos) {
div (class:"container") {
clos.call()
}
}
def row(clos) {
div (class:"row") {
clos.call()
}
}
def col_md(n, clos) {
div (class:"col-md-"+n) {
clos.call()
}
}
def header(s) {
div (class:"page-header")
{
h1 s
}
}
def alert(s, clos) {
div (class:"alert alert-
$s", role:"alert", clos)
}
Programming HTML:
You can writecontainer {
row {
col_md(2) {
header "サイドバーの表示"
}
col_md(10) {
header "メインの表示"
alert('success') {
strong "Well done!"
yield "You successfully read this important alert
message."
}
alert('info') {
strong "Heads up!"
yield "This alert needs your attention, but it's not
super important."
}
}
}
Simpler
and Tidy way
まとめ
• MarkupTemplateEngineは、

新世代型付きDSL実装の模範コード。
• 以下を使用して実装
• 型チェッカ拡張(TypeChecking Extension)
• aka (カスタムタイプチェッカ)Custom Type Checker)
• CompilerConfiguration
• プログラミング言語のフル機能を使ってマークアップ
• 抽象化、型システム、モジュラリテイ、合成、部品化
• HTML+CSSのような言語もどきではなく
参考リンク
• http://groovy.codehaus.org/Groovy%202.3%20release%20notes
• https://jira.codehaus.org/secure/ReleaseNote.jspa?
projectId=10242&version=20369
• https://jira.codehaus.org/secure/ReleaseNote.jspa?
projectId=10242&version=20433
• https://jira.codehaus.org/secure/ReleaseNote.jspa?
projectId=10242&version=20544
• https://jira.codehaus.org/secure/ReleaseNote.jspa?
projectId=10242&version=20612
• http://www.slideshare.net/rstoya05/spring-4-web-app
• http://spring.io/blog/2014/05/28/using-the-innovative-groovy-template-engine-in-
spring-boot

More Related Content

What's hot (20)

Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Uehara Junji
 
New feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*WorkshopNew feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*Workshop
Uehara Junji
 
G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901
Uehara Junji
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
Uehara Junji
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
Nobuhiro Sue
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
Uehara Junji
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovy
irof N
 
Groovy indy 20120222
Groovy indy 20120222Groovy indy 20120222
Groovy indy 20120222
Nobuhiro Sue
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Yoshifumi Kawai
 
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼうGraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
Koichi Sakata
 
基礎からのCode Contracts
基礎からのCode Contracts基礎からのCode Contracts
基礎からのCode Contracts
Yoshifumi Kawai
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBase
kyon mm
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Yoshifumi Kawai
 
【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き
虎の穴 開発室
 
分散バージョン管理システムって何なん 20101218
分散バージョン管理システムって何なん 20101218分散バージョン管理システムって何なん 20101218
分散バージョン管理システムって何なん 20101218
Takashi Okamoto
 
git-svnつかってみる?
git-svnつかってみる?git-svnつかってみる?
git-svnつかってみる?
riskrisk
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Uehara Junji
 
New feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*WorkshopNew feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*Workshop
Uehara Junji
 
G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901
Uehara Junji
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
Uehara Junji
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
Nobuhiro Sue
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
Uehara Junji
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovy
irof N
 
Groovy indy 20120222
Groovy indy 20120222Groovy indy 20120222
Groovy indy 20120222
Nobuhiro Sue
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Yoshifumi Kawai
 
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼうGraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
Koichi Sakata
 
基礎からのCode Contracts
基礎からのCode Contracts基礎からのCode Contracts
基礎からのCode Contracts
Yoshifumi Kawai
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBase
kyon mm
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Yoshifumi Kawai
 
【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き
虎の穴 開発室
 
分散バージョン管理システムって何なん 20101218
分散バージョン管理システムって何なん 20101218分散バージョン管理システムって何なん 20101218
分散バージョン管理システムって何なん 20101218
Takashi Okamoto
 
git-svnつかってみる?
git-svnつかってみる?git-svnつかってみる?
git-svnつかってみる?
riskrisk
 

Similar to Markup Template Engine introduced Groovy 2.3 (14)

G* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionG* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - Introduction
Kazuchika Sekiya
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
Uehara Junji
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
Nobuhiro Sue
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
Tsuyoshi Yamamoto
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
takezoe
 
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告
Tsuyoshi Yamamoto
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
Tsuyoshi Yamamoto
 
Gws 20140418 camel_groovy
Gws 20140418 camel_groovyGws 20140418 camel_groovy
Gws 20140418 camel_groovy
Nobuhiro Sue
 
Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法
Kouhei Sutou
 
Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29
kenhys
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
Yuichi Hasegawa
 
JJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-bootJJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-boot
Tsuyoshi Yamamoto
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Tsuyoshi Yamamoto
 
G* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionG* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - Introduction
Kazuchika Sekiya
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
Uehara Junji
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
Nobuhiro Sue
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
takezoe
 
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告
Tsuyoshi Yamamoto
 
Gws 20140418 camel_groovy
Gws 20140418 camel_groovyGws 20140418 camel_groovy
Gws 20140418 camel_groovy
Nobuhiro Sue
 
Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法Mroonga・PGroonga導入方法
Mroonga・PGroonga導入方法
Kouhei Sutou
 
Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29Groonga Meetup 2014/04/29
Groonga Meetup 2014/04/29
kenhys
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
Yuichi Hasegawa
 
JJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-bootJJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-boot
Tsuyoshi Yamamoto
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Tsuyoshi Yamamoto
 

More from Uehara Junji (16)

Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
Uehara Junji
 
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsJJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/Grails
Uehara Junji
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
Uehara Junji
 
Groovy 1.8の新機能について
Groovy 1.8の新機能についてGroovy 1.8の新機能について
Groovy 1.8の新機能について
Uehara Junji
 
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Uehara Junji
 
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224
Uehara Junji
 
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEEasy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVE
Uehara Junji
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
Uehara Junji
 
Groovy, Transforming Language
Groovy, Transforming LanguageGroovy, Transforming Language
Groovy, Transforming Language
Uehara Junji
 
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyJggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 Groovy
Uehara Junji
 
Lisp Builder
Lisp BuilderLisp Builder
Lisp Builder
Uehara Junji
 
G*WS 3rd Lightning talk
G*WS 3rd Lightning talkG*WS 3rd Lightning talk
G*WS 3rd Lightning talk
Uehara Junji
 
Groovy Now And Future
Groovy Now And FutureGroovy Now And Future
Groovy Now And Future
Uehara Junji
 
Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)
Uehara Junji
 
Groovy Conference2008 Nttsoft
Groovy Conference2008 NttsoftGroovy Conference2008 Nttsoft
Groovy Conference2008 Nttsoft
Uehara Junji
 
Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
Uehara Junji
 
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsJJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/Grails
Uehara Junji
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
Uehara Junji
 
Groovy 1.8の新機能について
Groovy 1.8の新機能についてGroovy 1.8の新機能について
Groovy 1.8の新機能について
Uehara Junji
 
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Uehara Junji
 
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224
Uehara Junji
 
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEEasy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVE
Uehara Junji
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
Uehara Junji
 
Groovy, Transforming Language
Groovy, Transforming LanguageGroovy, Transforming Language
Groovy, Transforming Language
Uehara Junji
 
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyJggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 Groovy
Uehara Junji
 
G*WS 3rd Lightning talk
G*WS 3rd Lightning talkG*WS 3rd Lightning talk
G*WS 3rd Lightning talk
Uehara Junji
 
Groovy Now And Future
Groovy Now And FutureGroovy Now And Future
Groovy Now And Future
Uehara Junji
 
Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)
Uehara Junji
 
Groovy Conference2008 Nttsoft
Groovy Conference2008 NttsoftGroovy Conference2008 Nttsoft
Groovy Conference2008 Nttsoft
Uehara Junji
 

Recently uploaded (6)

ReonHata_LLMを利用した便利の副作用顕在化のためのアイデア発想支援手法の評価_JSAI2025
ReonHata_LLMを利用した便利の副作用顕在化のためのアイデア発想支援手法の評価_JSAI2025ReonHata_LLMを利用した便利の副作用顕在化のためのアイデア発想支援手法の評価_JSAI2025
ReonHata_LLMを利用した便利の副作用顕在化のためのアイデア発想支援手法の評価_JSAI2025
Matsushita Laboratory
 
Backend for Frontend を活用した 安全な OpenID Connect 認証認可の実現
Backend for Frontend を活用した 安全な OpenID Connect 認証認可の実現Backend for Frontend を活用した 安全な OpenID Connect 認証認可の実現
Backend for Frontend を活用した 安全な OpenID Connect 認証認可の実現
Kazuki Ogiwara
 
第39回人工知能学会全国大会の企画セッション「生成AIが切り拓く仕掛学の可能性」の講演資料
第39回人工知能学会全国大会の企画セッション「生成AIが切り拓く仕掛学の可能性」の講演資料第39回人工知能学会全国大会の企画セッション「生成AIが切り拓く仕掛学の可能性」の講演資料
第39回人工知能学会全国大会の企画セッション「生成AIが切り拓く仕掛学の可能性」の講演資料
Matsushita Laboratory
 
論文紹介:「Amodal Completion via Progressive Mixed Context Diffusion」「Amodal Insta...
論文紹介:「Amodal Completion via Progressive Mixed Context Diffusion」「Amodal Insta...論文紹介:「Amodal Completion via Progressive Mixed Context Diffusion」「Amodal Insta...
論文紹介:「Amodal Completion via Progressive Mixed Context Diffusion」「Amodal Insta...
Toru Tamaki
 
ECAモジュールの基礎調査.pptx 2025/05/30 の勉強会で発表されたものです。
ECAモジュールの基礎調査.pptx 2025/05/30 の勉強会で発表されたものです。ECAモジュールの基礎調査.pptx 2025/05/30 の勉強会で発表されたものです。
ECAモジュールの基礎調査.pptx 2025/05/30 の勉強会で発表されたものです。
iPride Co., Ltd.
 
Security-JAWS【第37回】 勉強会 2025年5月26日(月) - GitLab.pptx
Security-JAWS【第37回】 勉強会 2025年5月26日(月) - GitLab.pptxSecurity-JAWS【第37回】 勉強会 2025年5月26日(月) - GitLab.pptx
Security-JAWS【第37回】 勉強会 2025年5月26日(月) - GitLab.pptx
TsukasaKomatsubara
 
ReonHata_LLMを利用した便利の副作用顕在化のためのアイデア発想支援手法の評価_JSAI2025
ReonHata_LLMを利用した便利の副作用顕在化のためのアイデア発想支援手法の評価_JSAI2025ReonHata_LLMを利用した便利の副作用顕在化のためのアイデア発想支援手法の評価_JSAI2025
ReonHata_LLMを利用した便利の副作用顕在化のためのアイデア発想支援手法の評価_JSAI2025
Matsushita Laboratory
 
Backend for Frontend を活用した 安全な OpenID Connect 認証認可の実現
Backend for Frontend を活用した 安全な OpenID Connect 認証認可の実現Backend for Frontend を活用した 安全な OpenID Connect 認証認可の実現
Backend for Frontend を活用した 安全な OpenID Connect 認証認可の実現
Kazuki Ogiwara
 
第39回人工知能学会全国大会の企画セッション「生成AIが切り拓く仕掛学の可能性」の講演資料
第39回人工知能学会全国大会の企画セッション「生成AIが切り拓く仕掛学の可能性」の講演資料第39回人工知能学会全国大会の企画セッション「生成AIが切り拓く仕掛学の可能性」の講演資料
第39回人工知能学会全国大会の企画セッション「生成AIが切り拓く仕掛学の可能性」の講演資料
Matsushita Laboratory
 
論文紹介:「Amodal Completion via Progressive Mixed Context Diffusion」「Amodal Insta...
論文紹介:「Amodal Completion via Progressive Mixed Context Diffusion」「Amodal Insta...論文紹介:「Amodal Completion via Progressive Mixed Context Diffusion」「Amodal Insta...
論文紹介:「Amodal Completion via Progressive Mixed Context Diffusion」「Amodal Insta...
Toru Tamaki
 
ECAモジュールの基礎調査.pptx 2025/05/30 の勉強会で発表されたものです。
ECAモジュールの基礎調査.pptx 2025/05/30 の勉強会で発表されたものです。ECAモジュールの基礎調査.pptx 2025/05/30 の勉強会で発表されたものです。
ECAモジュールの基礎調査.pptx 2025/05/30 の勉強会で発表されたものです。
iPride Co., Ltd.
 
Security-JAWS【第37回】 勉強会 2025年5月26日(月) - GitLab.pptx
Security-JAWS【第37回】 勉強会 2025年5月26日(月) - GitLab.pptxSecurity-JAWS【第37回】 勉強会 2025年5月26日(月) - GitLab.pptx
Security-JAWS【第37回】 勉強会 2025年5月26日(月) - GitLab.pptx
TsukasaKomatsubara
 

Markup Template Engine introduced Groovy 2.3