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

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

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
Howard Greenberg
 
2012 04-19 theory-of_operation
2012 04-19 theory-of_operation2012 04-19 theory-of_operation
2012 04-19 theory-of_operation
bobwolff68
 

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 (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

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
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
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 

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