SlideShare a Scribd company logo
1 of 159
Download to read offline
Speed Up Your Development:
GroovyServ & Grails Improx Plugin
@nobeans
Yasuharu NAKANO
GroovyServ
In case of
Developing
a Groovy Script
Write Run
Common Strategy:
“Trial and Error”
$	
  time	
  groovy	
  -­‐e	
  “println	
  ‘Hello,	
  Groovy’”
Hello,	
  Groovy
real	
  	
  	
  	
  0m0.823s
user	
  	
  	
  	
  0m1.016s
sys	
  	
  	
  	
  	
  0m0.096s
But, It takes 1 sec!
N times
Trial and Error
takes N sec.
“Many a little makes
a mickle”
Waiting time
makes me
Forget next
action
Why so slow?
• JVM initialization
• Loading Many Many Classes
• .... from Disk
http://en.wikipedia.org/wiki/Java_performance#Startup_time
“ It seems that much of the startup time is due to IO-
bound operations rather than JVM initialization or
class loading (the rt.jar class data file alone is 40 MB
and the JVM must seek a lot of data in this huge file).
Doom of JVM
Languages?
Any solutions?
$	
  groovyConsole
DemogroovyConsole
groovyConsole
• Handy for trying Java/Groovy APIs, etc.
• But features as editor aren’t so rich:
• No code completion
• No syntax checking
• No auto import
• etc.
• I want to use my favorite IDE/editor!
Other solutions?
GroovyServ
“GroovyServ makes Groovy’s startup time much
faster, by pre-invoking Groovy as a server.”
http://kobo.github.io/groovyserv/
Demo
Groovy and GroovyServ
$	
  time	
  groovyclient	
  -­‐e	
  “println	
  ‘Hello,	
  GroovyServ’”
Hello,	
  GroovyServ
real	
  	
  	
  	
  0m0.031s
user	
  	
  	
  	
  0m0.001s
sys	
  	
  	
  	
  	
  0m0.002s
Normal	
  Groovy:
real	
  	
  	
  	
  0m0.823s
user	
  	
  	
  	
  0m1.016s
sys	
  	
  	
  	
  	
  0m0.096s
Normal
Groovy User Groovy
Script
Shell Environment JavaVM
File System
C
LASSPATH
cm
d
line
args
stdinstdout
stderr
Ctrl-C
otherEN
Vs
exitstatus
System
.in
System
.out
System
.err
groovy
User Groovy
Script
Shell Environment
JavaVM
File System
User Groovy
Script
C
LASSPATH
cm
d
line
args
stdinstdout
stderr
Ctrl-C
otherEN
Vs
≪file≫
Authtoken
exitstatus
TCP/IP
System
.in
System
.out
System
.err
groovyservergroovyclient
GroovyServ
In case of
Developing
a Groovy Script
GroovyServ Way
• Write code with your favorite IDE/editor
• Run the code by using GroovyServ as
External Tool
• You can also see the result on a console
of IDE
DemoGroovyServ way
Available Editors/IDEs
• IntelliJ IDEA
• Eclipse/STS/GGTS
• Sublime Text 2
• Vim + QuickRun.vim
• and more...
GroovyServ
“GroovyServ makes Groovy’s startup time much
faster, by pre-invoking Groovy as a server.”
http://kobo.github.io/groovyserv/
How to Install
How to Install
• Downloadable Binaries for
• Mac OS X (built at Mac OS X 10.8 (x86_64))
• Windows
• bundled in Groovy Windows Installer
• (built at WindowsXP (32bit) (x86))
• (built at Windows7 (64bit) (AMD64))
• Linux (i386) (linked with glibc 2.9)
• Self-build (required Gradle)
• Homebrew (only Mac)
• $	
  brew	
  install	
  groovyserv
• http://kobo.github.io/groovyserv/howtoinstall.html
No setting required
• If there is a binary set, you can use it:
• $	
  /xxx/groovyserv/bin/groovyclient
• Adding to PATH, you can easily use it:
• $	
  groovyclient
How to Use
Commands
• groovyclient
• groovyserver
groovyclient
• Invokes a groovy file or one-liner code, by
sending a request to server
• Also invokes groovyserver process
automatically if not exists
groovyserver
• Invokes a JVM process as a server.
• Should be used only when you want to
specify special options.
• e.g.
• -­‐v	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  verbose	
  option
• -­‐-­‐allow-­‐from	
  	
  for	
  remote	
  feature
Available for Other
JVM Languages
http://nobeans-en.blogspot.jp/2011/07/high-speed-start-up-
jythonclojure-by.html
Jython
$	
  alias	
  gythonserver="env	
  CLASSPATH=/your/jython.jar	
  groovyserver"
$	
  alias	
  gython="groovyclient	
  -­‐e	
  'import	
  org.python.util.jython;	
  
jython.main(args)'	
  -­‐-­‐"
$	
  gythonserver	
  -­‐r
...
$	
  time	
  gython	
  -­‐c	
  "print('Hello')"
Hello
real	
  	
  	
  	
  0m0.057s
user	
  	
  	
  	
  0m0.001s
sys	
  	
  	
  	
  	
  0m0.004s
Clojure
$	
  alias	
  glojureserver="env	
  CLASSPATH=/your/clojure.jar	
  groovyserver"
$	
  alias	
  glojure="groovyclient	
  -­‐e	
  'import	
  clojure.main;main.main(args)'	
  -­‐-­‐"
$	
  glojureserver	
  -­‐r
...
$	
  time	
  glojure	
  -­‐e	
  "(println	
  'Hello)"
Hello
real	
  	
  	
  	
  0m0.053s
user	
  	
  	
  	
  0m0.001s
sys	
  	
  	
  	
  	
  0m0.004s
main	
  method	
  of
closure.main	
  class
• A script to get schedule data from
groupware
• As editor’s macro
• As mail filter
• etc.
Using at Runtime
Other Features
• Access Control
• Propagation of CLASSPATH
• Propagation of Environment Variables
• Handling System#exit()
• Dynamic CWD
Improx Plugin
codenamed:GrailsServ
In case of
Developing
Grails Application
Grails’ Test supports
is Great.
How to run tests
• All tests
• grails	
  test-­‐app
While I’m writing a test,
I want to run only it.
I want to run the test
as fast as possible.
How to run a specified test fast
• Run only a unit test
• test-­‐app	
  unit:	
  <FQCN	
  of	
  TestClass>
• Run only a integration test
• test-­‐app	
  integration:	
  <FQCN	
  of	
  TestClass>
• Run only a functional test
• test-­‐app	
  functional:	
  <FQCN	
  of	
  TestClass>
Why does it need
a test phase?
If test phase not specified when run unit test,
integration phase is also run.
$	
  cat	
  test/unit/test/app/sample/FooTests.groovy
....
class	
  FooTests	
  {
	
  	
  	
  	
  void	
  testSomething()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  //	
  do	
  nothing
	
  	
  	
  	
  }
}
$	
  time	
  grails	
  test-­‐app	
  FooTests
|	
  Packaging	
  Grails	
  application.....
|	
  Tests	
  PASSED	
  -­‐	
  view	
  reports	
  in	
  /xxx/test-­‐reports
real	
  	
  	
  	
  0m15.375s
user	
  	
  	
  	
  0m35.119s
sys	
  	
  	
  	
  	
  0m1.858s
Oops!
 Integration
 phase
 running!?
$	
  time	
  grails	
  test-­‐app	
  unit:	
  FooTests
|	
  Completed	
  1	
  unit	
  test,	
  0	
  failed	
  in	
  546ms
|	
  Tests	
  PASSED	
  -­‐	
  view	
  reports	
  in	
  /xxx/test-­‐reports
real	
  	
  	
  	
  0m7.303s
user	
  	
  	
  	
  0m18.068s
sys	
  	
  	
  	
  	
  0m0.909s
Less
 than
 a
 half
 of
 previous
 sample!
Specifying a phase can avoid
running an extra phase
Without	
  a	
  phase:
real	
  	
  	
  	
  0m15.375s
user	
  	
  	
  	
  0m35.119s
sys	
  	
  	
  	
  	
  0m1.858s
Required to run test-app
• FQCN of target test class
• Test phase of target test class
By the way
How do you run a test while writing it?
• (A) By IDE support (GGTS, IntelliJ, etc.)
• (B) By “grails test-app” as standalone
• (C) By “grails test-app” via Interactive
Mode
• (D) Others
Interactive Mode
• Very very useful
• Makes command execution faster because
the JVM doesn't have to be restarted for
each command
• $	
  grails
• TAB completion is available
• Since Grails 2.0
DEMOInteractiveMode/Pros
But still there is trouble
• It needs frequent switching of windows
for use while writing code in IDE/editor
• To run a test, you must prepare:
• FQCN of target test class
• Test phase of target test class
DEMOInteractiveMode/Cons
I’m too tired from
such Switching,
Copy  Paste, etc...
Improx Plugin
Provides the way of using interactive mode
from other process via TCP.
http://grails.org/plugin/improx
DEMOImprox Plugin
Improx Plugin
• You can run a test
• Faster than general IDE supports
because using interactive mode
• Directly from IDE/editor without
complicated operations
Available Editors/IDEs
• IntelliJ IDEA
• Eclipse/STS/GGTS
• Sublime Text 2
• Vim + QuickRun.vim
• and more...
Interactive
Mode
PROXy
Grails
Improx
Shell Environment
≪script≫
improxClient
TCP/IP
≪script≫
improxSmartInvoker
≪class≫
InteractiveMode
≪class≫
GrailsConsole
≪command≫
improx-start
≪command≫
improx-stop
≪command≫
improx-install-resources
other clients
≪class≫
GrailsScriptRunner
echo
back delegate
run script
start
stop
grails command
expand client scripts
use
• As same as interactive mode
• install-­‐plugin
• uninstall-­‐plugin
• Special built-in commands
• create-­‐app
• quit
• stop-­‐app
• exit
• !(shell	
  command)
• Using threads complexly
• run-­‐app
Unsupported Commands
How to Install
BuildConfig.groovy:
plugins	
  {
//...
	
  	
  	
  	
  compile	
  :improx:0.2
//...
}
Install Plugin
Install Client Scripts
$	
  grails	
  improx-­‐install-­‐resources
|	
  Improx	
  resources	
  installed	
  successfully:	
  /xxx/improx-­‐resources
$	
  chmod	
  +x	
  improx-­‐resources/scripts/*.sh
$	
  mv	
  improx-­‐resources	
  $HOME/.improx-­‐resources
If
 once
 you
 store
 them
 to
 global
 
path,
 
 you
 don't
 need
 the
 preparation
 
for
 other
 projects.
How to Use
Grails Commands
• improx-­‐start
• improx-­‐stop
• improx-­‐install-­‐resources
improx-­‐start	
  /	
  improx-­‐stop
• improx-­‐start
• Starts an interactive mode proxy server
• improx-­‐stop
• Stops the interactive mode proxy server
which is running
improx-­‐install-­‐resources
• Installs “improx-resources” directory which
has some client scripts into your
application project
improx-­‐resources/
	
  !	
  scripts
	
  	
  	
  	
  	
  	
  #	
  improxClient.groovy
	
  	
  	
  	
  	
  	
  #	
  improxClient.sh
	
  	
  	
  	
  	
  	
  #	
  improxSmartInvoker.groovy
	
  	
  	
  	
  	
  	
  !	
  improxSmartInvoker.sh
Client Scripts
• improxClient.sh
• improxClient.groovy
• improxSmartInvoker.sh
• improxSmartInvoker.groovy
improxClient.(sh|groovy)	
  Command
• Runs a command in interactive mode via
TCP port of improx server
• Very simple
$	
  improxClient.sh	
  help
Executing	
  'help'	
  via	
  interactive	
  mode	
  proxy...
......
Usage	
  (optionals	
  marked	
  with	
  *):
grails	
  [environment]*	
  [options]*	
  [target]	
  
[arguments]*
...(snipped)...
test-­‐app
tomcat
uninstall-­‐plugin
upgrade
war
wrapper
$
improxSmartInvoker.(sh|groovy)	
  FILE_PATH
• Invokes any *.groovy file in an appropriate
way
• Very useful for IDE/editor
How SMART is it?
grails	
  test-­‐app	
  unit:	
  sample.SampleUnitTests
$	
  improxSmartInvoker.sh	
  /path/to/yourApp/
test/unit/sample/SampleUnitTests.groovy
Runs the following command
on the interactive mode:
grails	
  test-­‐app	
  integration:	
  sample.SampleIntegTests
$	
  improxSmartInvoker.sh	
  /path/to/yourApp/test
/integration/sample/SampleIntegTests.groovy
Runs the following command
on the interactive mode:
$	
  improxSmartInvoker.sh	
  /path/to/yourApp/test
/functional/sample/SampleFuncTests.groovy
grails	
  test-­‐app	
  functional:	
  sample.SampleFuncTests
Because
 functional
 test
 doesn’t
 work
 
well
 on
 interactive
 mode
 at
 present.
Runs the following command
as new standalone Grails process:
$	
  improxSmartInvoker.sh	
  
/path/to/scriptDir/myTribialScript.groovy
groovy	
  /path/to/scriptDir/myTribialScript.groovy
If
 you've
 installed
 GroovyServ,
 the
 groovyclient
 is
 
automatically
 used
 instead
 of
 groovy
 command.
Runs the following command
as a normal Groovy script:
All you have to do is
to set
improxSmartInvoker
as External Tool
of IDE/editor
http://kobo.github.io/grails-improx/guide/integrationWithEditors.html
Simple
Protocol
TCP
• Request:
COMMAND
• Whole response is result of the command
• You can also use as client
• e.g. telnet, nc
$	
  telnet	
  localhost	
  8096
Trying	
  ::1...
Connected	
  to	
  localhost.
Escape	
  character	
  is	
  '^]'.
help
......
Usage	
  (optionals	
  marked	
  with	
  *):
grails	
  [environment]*	
  [options]*	
  [target]	
  
[arguments]*
...(snipped)...
uninstall-­‐plugin
upgrade
war
wrapper
$
HTTP
• Request
GET	
  /COMMAND	
  HTTP/[0-­‐9.]+
• Whole response is result of the command
• You can also use as client
• e.g. Web browser, wget, curl
• GroovyServ
• http://kobo.github.io/groovyserv/index.html
• https://github.com/kobo/groovyserv
• Improx - Interactive Mode Proxy
• http://kobo.github.io/grails-improx/guide/
• http://grails.org/plugin/improx
• https://github.com/kobo/grails-improx
• Demo code
• https://github.com/nobeans/gr8confeu2013-demo
Appendix
GroovyServ
Under the hood
Under the hood
• Client-Server Communication
• Access Control
• Propagation of CLASSPATH
• Propagation of Environment Variables
• Handling System#exit()
• Dynamic CWD
Client-Server
Communication
Transfer of Standard
In/Out/Err Stream
$	
  groovyclient	
  -­‐e	
  
println	
  ‘Hello,	
  GroovyServ’
groovyclient
ClientConnection
OutputStream
≪script≫
println “Hello, GroovyServ!”
≪System.out≫
DynamicDelegatedPrintStream
writes data converted
based on a protocol
into output stream of
socket
Hello, GroovyServ!
if Channel header == ”err”
To STDERR
if Channel header == ”out”
To STDOUT
Client console
$	
  groovyclient	
  -­‐e	
  
System.in.eachLine{	
  println	
  it*5	
  }
ClientConnection
PipedOutputStream
PipedInputStream
groovyclient ≪thread≫
StreamRequestHandler
≪script≫
System.in.eachLine { ... }
Connected
rawData = Socket.inputStream.read()
bodyData = convert(rawData)
pipedOutputStream.write(bodyData)
≪System.in≫
DynamicDelegatedInputStream
Protocol over TCP
InvocationRequest
'Cwd:' cwd LF
'Arg:' arg1 LF
'Arg:' arg2 LF
:
'Env:' env1=value1 LF
'Env:' env2=value2 LF
:
'Cp:' classpath LF
'AuthToken:' authToken LF
LF
where:
cwd is current working directory.
arg1,arg2.. are commandline arguments which must be encoded by Base64. (optional)
env1,env2.. are environment variable names which sent to the server. (optional)
value1,valeu2.. are environment variable values which sent to the server. (optional)
classpath is the value of environment variable CLASSPATH. (optional)
authToken is authentication value which certify client is the user who invoked the
server.
LF is line feed (0x0a, 'n').
StreamRequest
'Size:' size LF
LF
body from STDIN
where:
size is the size of body to send to server. size==-1 means
client exited.
body from STDIN is byte sequence from standard input.
InvocationResponse
'Status:' status LF
where:
status is exit status of invoked groovy script.
StreamResponse
'Channel:' id LF
'Size:' size LF
LF
body for STDERR/STDOUT
where:
id is 'out' or 'err', where 'out' means standard output of the program.
'err' means standard error of the program.
size is the size of chunk.
body from STDERR/STDOUT is byte sequence from standard output/error.
Access Control
Against
Evil Request
From Evil Client
Client Address Checking / Authtoken
• Request only from loopback address is
allowed.
• Authtoken is generated and stored into a
file when server process starts.
• $HOME/.groovy/groovyserver/authtoken-­‐PORT
• Authtoken always is used for checking
that the request is from valid owner user.
-­‐-­‐allow-­‐from
• By default, A request only from loop-back
address is available.
• You can allow specified addresses.
$	
  groovyserver	
  -­‐-­‐allow-­‐from	
  192.168.1.1
SECURITY RISK: Be careful when using this option
-­‐-­‐authtoken
• By default, authtoken is generated
automatically.
• You can specify any string.
SECURITY RISK: Be careful when using this option
$	
  groovyserver	
  -­‐-­‐authtoken	
  MY_AUTHTOKEN
At your own risk
Propagation of
CLASSPATH
Client and Server
are Different
Process
≪process≫
groovyserver
≪process≫
groovyclient
CLASSPATH=
/my/classpath/xxx.jar
CLASSPATH=
/my/classpath/zzz.jar
Individual Env for each
If GroovyServ were
too simple, ...

More Related Content

What's hot

IBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages Heaven
IBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages HeavenIBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages Heaven
IBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages HeavenPaul Withers
 
Pipeline based deployments on Jenkins
Pipeline based deployments  on JenkinsPipeline based deployments  on Jenkins
Pipeline based deployments on JenkinsKnoldus Inc.
 
Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8Sam Becker
 
CollabSphere 2018 - Java in Domino After XPages
CollabSphere 2018 - Java in Domino After XPagesCollabSphere 2018 - Java in Domino After XPages
CollabSphere 2018 - Java in Domino After XPagesJesse Gallagher
 
Selenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-AppsSelenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-Appschrisb206 chrisb206
 
JCConf 2015 workshop 動手玩 Java 專案建置工具
JCConf 2015 workshop 動手玩 Java 專案建置工具JCConf 2015 workshop 動手玩 Java 專案建置工具
JCConf 2015 workshop 動手玩 Java 專案建置工具謝 宗穎
 
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...Paul Withers
 
Jenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with JenkinsJenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with JenkinsAll Things Open
 
How to write a Dockerfile
How to write a DockerfileHow to write a Dockerfile
How to write a DockerfileKnoldus Inc.
 
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosTesting fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosMicael Gallego
 
Go & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and ErrorsGo & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and ErrorsYoshiki Shibukawa
 
Multi-provider Vagrant and Chef: AWS, VMware, and more
Multi-provider Vagrant and Chef: AWS, VMware, and moreMulti-provider Vagrant and Chef: AWS, VMware, and more
Multi-provider Vagrant and Chef: AWS, VMware, and moreChef Software, Inc.
 
One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.Javier López
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP applicationJavier López
 
Introducing Playwright's New Test Runner
Introducing Playwright's New Test RunnerIntroducing Playwright's New Test Runner
Introducing Playwright's New Test RunnerApplitools
 
Embrace Maven
Embrace MavenEmbrace Maven
Embrace MavenGuy Marom
 

What's hot (20)

Apache Maven In 10 Slides
Apache Maven In 10 SlidesApache Maven In 10 Slides
Apache Maven In 10 Slides
 
IBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages Heaven
IBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages HeavenIBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages Heaven
IBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages Heaven
 
Pipeline based deployments on Jenkins
Pipeline based deployments  on JenkinsPipeline based deployments  on Jenkins
Pipeline based deployments on Jenkins
 
Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8
 
CollabSphere 2018 - Java in Domino After XPages
CollabSphere 2018 - Java in Domino After XPagesCollabSphere 2018 - Java in Domino After XPages
CollabSphere 2018 - Java in Domino After XPages
 
Selenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-AppsSelenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-Apps
 
JCConf 2015 workshop 動手玩 Java 專案建置工具
JCConf 2015 workshop 動手玩 Java 專案建置工具JCConf 2015 workshop 動手玩 Java 專案建置工具
JCConf 2015 workshop 動手玩 Java 專案建置工具
 
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
 
Jenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with JenkinsJenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with Jenkins
 
How to write a Dockerfile
How to write a DockerfileHow to write a Dockerfile
How to write a Dockerfile
 
Graphql usage
Graphql usageGraphql usage
Graphql usage
 
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosTesting fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornos
 
Go & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and ErrorsGo & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and Errors
 
Multi-provider Vagrant and Chef: AWS, VMware, and more
Multi-provider Vagrant and Chef: AWS, VMware, and moreMulti-provider Vagrant and Chef: AWS, VMware, and more
Multi-provider Vagrant and Chef: AWS, VMware, and more
 
One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP application
 
Introducing Playwright's New Test Runner
Introducing Playwright's New Test RunnerIntroducing Playwright's New Test Runner
Introducing Playwright's New Test Runner
 
sed.pdf
sed.pdfsed.pdf
sed.pdf
 
Perlbrew
PerlbrewPerlbrew
Perlbrew
 
Embrace Maven
Embrace MavenEmbrace Maven
Embrace Maven
 

Similar to Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin

Polygot Java EE on the GraalVM
Polygot Java EE on the GraalVMPolygot Java EE on the GraalVM
Polygot Java EE on the GraalVMRyan Cuprak
 
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)STePINForum
 
How the HotSpot and Graal JVMs execute Java Code
How the HotSpot and Graal JVMs execute Java CodeHow the HotSpot and Graal JVMs execute Java Code
How the HotSpot and Graal JVMs execute Java CodeJim Gough
 
Groovy In the Cloud
Groovy In the CloudGroovy In the Cloud
Groovy In the CloudJim Driscoll
 
Soap ui oracle_brm_automated_performance_tests
Soap ui oracle_brm_automated_performance_testsSoap ui oracle_brm_automated_performance_tests
Soap ui oracle_brm_automated_performance_testsMadhu Mohan
 
Pipeline 101 Lorelei Mccollum
Pipeline 101 Lorelei MccollumPipeline 101 Lorelei Mccollum
Pipeline 101 Lorelei MccollumLorelei McCollum
 
Aikau testing tech talk live 83 20150204
Aikau testing tech talk live 83 20150204Aikau testing tech talk live 83 20150204
Aikau testing tech talk live 83 20150204David Webster
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Michael Lihs
 
3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API - 3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API - Ortus Solutions, Corp
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION APIGavin Pickin
 
JavaOne2015-What's in an Object?
JavaOne2015-What's in an Object?JavaOne2015-What's in an Object?
JavaOne2015-What's in an Object?Charlie Gracie
 
#JavaOne What's in an object?
#JavaOne What's in an object?#JavaOne What's in an object?
#JavaOne What's in an object?Charlie Gracie
 
JavaScript - Chapter 15 - Debugging Techniques
 JavaScript - Chapter 15 - Debugging Techniques JavaScript - Chapter 15 - Debugging Techniques
JavaScript - Chapter 15 - Debugging TechniquesWebStackAcademy
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchHoward Greenberg
 
Fundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CDFundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CDBatyr Nuryyev
 
Head first android apps dev tools
Head first android apps dev toolsHead first android apps dev tools
Head first android apps dev toolsShaka Huang
 
2012 04-19 theory-of_operation
2012 04-19 theory-of_operation2012 04-19 theory-of_operation
2012 04-19 theory-of_operationbobwolff68
 
Selenium Israel Meetup
Selenium Israel MeetupSelenium Israel Meetup
Selenium Israel MeetupJustin Ison
 
Parallelizing CI using Docker Swarm-Mode
Parallelizing CI using Docker Swarm-ModeParallelizing CI using Docker Swarm-Mode
Parallelizing CI using Docker Swarm-ModeAkihiro Suda
 

Similar to Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin (20)

Polygot Java EE on the GraalVM
Polygot Java EE on the GraalVMPolygot Java EE on the GraalVM
Polygot Java EE on the GraalVM
 
Why Gradle?
Why Gradle?Why Gradle?
Why Gradle?
 
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
 
How the HotSpot and Graal JVMs execute Java Code
How the HotSpot and Graal JVMs execute Java CodeHow the HotSpot and Graal JVMs execute Java Code
How the HotSpot and Graal JVMs execute Java Code
 
Groovy In the Cloud
Groovy In the CloudGroovy In the Cloud
Groovy In the Cloud
 
Soap ui oracle_brm_automated_performance_tests
Soap ui oracle_brm_automated_performance_testsSoap ui oracle_brm_automated_performance_tests
Soap ui oracle_brm_automated_performance_tests
 
Pipeline 101 Lorelei Mccollum
Pipeline 101 Lorelei MccollumPipeline 101 Lorelei Mccollum
Pipeline 101 Lorelei Mccollum
 
Aikau testing tech talk live 83 20150204
Aikau testing tech talk live 83 20150204Aikau testing tech talk live 83 20150204
Aikau testing tech talk live 83 20150204
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
 
3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API - 3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API -
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API
 
JavaOne2015-What's in an Object?
JavaOne2015-What's in an Object?JavaOne2015-What's in an Object?
JavaOne2015-What's in an Object?
 
#JavaOne What's in an object?
#JavaOne What's in an object?#JavaOne What's in an object?
#JavaOne What's in an object?
 
JavaScript - Chapter 15 - Debugging Techniques
 JavaScript - Chapter 15 - Debugging Techniques JavaScript - Chapter 15 - Debugging Techniques
JavaScript - Chapter 15 - Debugging Techniques
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
 
Fundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CDFundamentals of DevOps and CI/CD
Fundamentals of DevOps and CI/CD
 
Head first android apps dev tools
Head first android apps dev toolsHead first android apps dev tools
Head first android apps dev tools
 
2012 04-19 theory-of_operation
2012 04-19 theory-of_operation2012 04-19 theory-of_operation
2012 04-19 theory-of_operation
 
Selenium Israel Meetup
Selenium Israel MeetupSelenium Israel Meetup
Selenium Israel Meetup
 
Parallelizing CI using Docker Swarm-Mode
Parallelizing CI using Docker Swarm-ModeParallelizing CI using Docker Swarm-Mode
Parallelizing CI using Docker Swarm-Mode
 

More from Yasuharu Nakano

Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyYasuharu Nakano
 
OSS Product feat. Gradle
OSS Product feat. GradleOSS Product feat. Gradle
OSS Product feat. GradleYasuharu Nakano
 
The report of JavaOne2011 about groovy
The report of JavaOne2011 about groovyThe report of JavaOne2011 about groovy
The report of JavaOne2011 about groovyYasuharu Nakano
 
JavaSE7 Launch Event: Java7xGroovy
JavaSE7 Launch Event: Java7xGroovyJavaSE7 Launch Event: Java7xGroovy
JavaSE7 Launch Event: Java7xGroovyYasuharu Nakano
 
レッツゴーデベロッパー2011「プログラミングGroovy〜G*エコシステム編」
レッツゴーデベロッパー2011「プログラミングGroovy〜G*エコシステム編」レッツゴーデベロッパー2011「プログラミングGroovy〜G*エコシステム編」
レッツゴーデベロッパー2011「プログラミングGroovy〜G*エコシステム編」Yasuharu Nakano
 
JavaOne2010 Groovy/Spring Roo
JavaOne2010 Groovy/Spring RooJavaOne2010 Groovy/Spring Roo
JavaOne2010 Groovy/Spring RooYasuharu Nakano
 
GroovyServ - Technical Part
GroovyServ - Technical PartGroovyServ - Technical Part
GroovyServ - Technical PartYasuharu Nakano
 

More from Yasuharu Nakano (9)

Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
 
OSS Product feat. Gradle
OSS Product feat. GradleOSS Product feat. Gradle
OSS Product feat. Gradle
 
The report of JavaOne2011 about groovy
The report of JavaOne2011 about groovyThe report of JavaOne2011 about groovy
The report of JavaOne2011 about groovy
 
JavaSE7 Launch Event: Java7xGroovy
JavaSE7 Launch Event: Java7xGroovyJavaSE7 Launch Event: Java7xGroovy
JavaSE7 Launch Event: Java7xGroovy
 
レッツゴーデベロッパー2011「プログラミングGroovy〜G*エコシステム編」
レッツゴーデベロッパー2011「プログラミングGroovy〜G*エコシステム編」レッツゴーデベロッパー2011「プログラミングGroovy〜G*エコシステム編」
レッツゴーデベロッパー2011「プログラミングGroovy〜G*エコシステム編」
 
How about Gradle?
How about Gradle?How about Gradle?
How about Gradle?
 
Groovy's Builder
Groovy's BuilderGroovy's Builder
Groovy's Builder
 
JavaOne2010 Groovy/Spring Roo
JavaOne2010 Groovy/Spring RooJavaOne2010 Groovy/Spring Roo
JavaOne2010 Groovy/Spring Roo
 
GroovyServ - Technical Part
GroovyServ - Technical PartGroovyServ - Technical Part
GroovyServ - Technical Part
 

Recently uploaded

Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 

Recently uploaded (20)

Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 

Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin