SlideShare a Scribd company logo
http://www.flickr.com/photos/iancarroll/5058330466/
Ad::
Ad::

@GrabConfig(systemClassLoader=true) // for GroovyServ
@GrabResolver(name="kobo-repo", root="http://github.com/kobo/maven-repo/raw/master/release")
@Grab("org.jggug.kobo:gexcelapi:0.2")
import org.jggug.kobo.gexcelapi.GExcel


def book = GExcel.open(args[0])
def sheet = book[0]

println sheet.A1.value
sheet.A1.value = "New value of A1"

sheet.A_.each{ cell -> println cell.value }
sheet._1.each{ cell -> println cell.value }
sheet.A1_B6.each{ row -> row.each { cell -> println it.value } }
Sample of   import	
  javafx.stage.*;
            import	
  javafx.scene.*;
            import	
  javafx.scene.shape.*;
            import	
  javafx.scene.paint.*;

            Stage	
  {
            	
  	
  	
  	
  title:	
  "Sample	
  by	
  JavaFX	
  Script"
            	
  	
  	
  	
  width:	
  600
            	
  	
  	
  	
  height:	
  450
            	
  	
  	
  	
  scene:	
  Scene	
  {
            	
  	
  	
  	
  	
  	
  	
  	
  fill:	
  Color.LIGHTSKYBLUE
            	
  	
  	
  	
  	
  	
  	
  	
  content:	
  Rectangle	
  {
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  x:	
  25,	
  y:	
  40
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  width:	
  100,	
  height:	
  50
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fill:	
  Color.RED
            	
  	
  	
  	
  	
  	
  	
  	
  }
            	
  	
  	
  	
  }
            }
6
import	
  groovy.swing.SwingBuilder

Sample of   import	
  java.awt.BorderLayout	
  as	
  BL

            int	
  count	
  =	
  0
            new	
  SwingBuilder().edt	
  {
            	
  	
  	
  	
  frame(
            	
  	
  	
  	
  	
  	
  	
  	
  title:'Hello',
            	
  	
  	
  	
  	
  	
  	
  	
  size:[600,	
  450],
            	
  	
  	
  	
  	
  	
  	
  	
  show:true
            	
  	
  	
  	
  )	
  {
            	
  	
  	
  	
  	
  	
  	
  	
  borderLayout()
            	
  	
  	
  	
  	
  	
  	
  	
  textLabel	
  =	
  label(
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  text:'Sample	
  of	
  SwingBuilder',
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  constraints:	
  BL.NORTH
            	
  	
  	
  	
  	
  	
  	
  	
  )
            	
  	
  	
  	
  	
  	
  	
  	
  button(
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  text:	
  'Click	
  Me!',
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  actionPerformed:	
  {
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  count++
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  textLabel.text	
  =
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Clicked	
  ${count}	
  time(s)."
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  println	
  "clicked"
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  },
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  constraints:	
  BL.SOUTH
            	
  	
  	
  	
  	
  	
  	
  	
  )
            	
  	
  	
  	
  }
            }
http://www.flickr.com/photos/33678919@N07/5239012324/
from Roadmap




  http://www.flickr.com/photos/33678919@N07/5239012324/
http://svn.codehaus.org/griffon/builders/fxbuilder/
import	
  griffon.builder.fx.FxBuilder

Sample of   import	
  javafx.stage.*
            import	
  javafx.scene.*
            import	
  javafx.scene.shape.*
            import	
  javafx.scene.paint.*

            new	
  FxBuilder().edt	
  {
            	
  	
  	
  	
  stage(
            	
  	
  	
  	
  	
  	
  	
  	
  title:	
  "Sample	
  by	
  FxBuilder	
  of	
  Groovy",
            	
  	
  	
  	
  	
  	
  	
  	
  width:	
  600,
            	
  	
  	
  	
  	
  	
  	
  	
  height:	
  450,
            	
  	
  	
  	
  	
  	
  	
  	
  scene:	
  scene(fill:	
  Color.$LIGHTSKYBLUE)	
  {
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  rectangle(
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  x:	
  25,	
  y:	
  40,
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  width:	
  100,	
  height:	
  50,
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fill:	
  Color.$RED
            	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  )
            	
  	
  	
  	
  	
  	
  	
  	
  }
            	
  	
  	
  	
  )
            }




                                                      http://griffon.codehaus.org/FxBuilder+Plugin
import	
  griffon.builder.fx.FxBuilder

                                                                             import	
  javafx.stage.*
import	
  javafx.stage.*;                                                    import	
  javafx.scene.*
import	
  javafx.scene.*;                                                    import	
  javafx.scene.shape.*
import	
  javafx.scene.shape.*;                                              import	
  javafx.scene.paint.*
import	
  javafx.scene.paint.*;
                                                                                new	
  FxBuilder().edt	
  {
Stage	
  {                                                                      	
  	
  	
  	
  stage(
	
  	
  	
  	
  title:	
  "Sample	
  by	
  JavaFX	
  Script", 	
  	
  	
  	
  	
  	
  	
  	
  title:	
  "Sample	
  by	
  FxBuilder	
  of	
  Groovy",
	
  	
  	
  	
  width:	
  600                                                   	
  	
  	
  	
  	
  	
  	
  	
  width:	
  600,
	
  	
  	
  	
  height:	
  450                                                  	
  	
  	
  	
  	
  	
  	
  	
  height:	
  450,
	
  	
  	
  	
  scene:	
  Scene	
  {
	
  	
  	
  	
  	
  	
  	
  	
  fill:	
  Color.LIGHTSKYBLUE
	
  	
  	
  	
  	
  	
  	
  	
  content:	
  Rectangle	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  x:	
  25,	
  y:	
  40
                                                                       ≒
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  width:	
  100,	
  height:	
  50
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fill:	
  Color.RED
                                                                                	
  	
  	
  	
  	
  	
  	
  	
  scene:	
  scene(fill:Color.$LIGHTSKYBLUE){
                                                                                	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  rectangle(
                                                                                	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  x:	
  25,	
  y:	
  40,
                                                                                	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  width:	
  100,	
  height:	
  50,
                                                                                	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fill:	
  Color.$RED
	
  	
  	
  	
  	
  	
  	
  	
  }                                               	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  )
	
  	
  	
  	
  }                                                               	
  	
  	
  	
  	
  	
  	
  	
  }
}                                                                               	
  	
  	
  	
  )
                                                                                }



                                                                                                 FxBuilder
JavaFX Script




                                                 Welcome to




http://www.flickr.com/photos/anirudhkoul/3734360895/
Minimum lecture series #65535



                                only for DSL/Builder

http://www.flickr.com/photos/iancarroll/5058330466/
Minimum Basic



Value:	
  ${value}”
Features for
Features for
Features for
groovy.lang.Closure	
  closure	
  =	
  {	
  String	
  arg	
  -­‐>
	
  	
  	
  	
  return	
  "hoge:${arg}"
}                                       Java8
                                           #



//	
  
closure.call(“foo”)	
  	
  //=>	
  “hoge:foo”

//	
  
closure(“foo”)	
  	
  	
  	
  	
  	
  	
  //=>	
  “hoge:foo”
Args of
//	
              (         )
{	
  -­‐>	
  "hoge"	
  }.call()	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //=>	
  "hoge"

//	
                 (      )
{	
  num	
  -­‐>	
  "hoge:${num}"	
  }.call(123)	
  //=>	
  "hoge:123"

//	
                   (      )
{	
  num,	
  String	
  id,	
  option	
  -­‐>
	
  	
  	
  	
  return	
  "hoge:${num}:${id}:${option}"
}.call(123,	
  “0A”,	
  “X”)	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //=>	
  "hoge:123:0A:X"

//	
           it
{	
  "hoge:${it}"	
  }.call(123)	
  	
  	
  	
  	
  	
  	
  	
  	
  //=>	
  "hoge:123"
as Args
//	
        (              )
someMethod({	
  num	
  -­‐>	
  num	
  *	
  2	
  })

//	
  
someMethod	
  {	
  num	
  -­‐>	
  num	
  *	
  2	
  }

//	
  
someMethod(arg1,	
  arg2,	
  {	
  num	
  -­‐>	
  num	
  *	
  2	
  })
someMethod(arg1,	
  arg2)	
  {	
  num	
  -­‐>	
  num	
  *	
  2	
  }	
  //
Features for
MOP::
class	
  MopSample	
  {
	
  	
  	
  	
  def	
  methodMissing(String	
  name,	
  args)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  println	
  "Method:	
  $name($args)"
	
  	
  	
  	
  }
}
def	
  sample	
  =	
  new	
  MopSample()

sample.hoge()
//	
  =>	
  “Method:	
  hoge([])”

sample.foo(123,	
  456)
//	
  =>	
  “Method:	
  foo([123,	
  456])”
MOP::
class	
  MopSample	
  {
	
  	
  	
  	
  def	
  propertyMissing(String	
  name)	
  {	
  //	
  for	
  getter
	
  	
  	
  	
  	
  	
  	
  	
  println	
  "Property:	
  $name"
	
  	
  	
  	
  }
	
  	
  	
  	
  def	
  propertyMissing(String	
  name,	
  value)	
  {	
  //	
  for	
  setter
	
  	
  	
  	
  	
  	
  	
  	
  println	
  "Property:	
  $name	
  =	
  $value"
	
  	
  	
  	
  }
}
sample	
  =	
  new	
  MopSample2()

sample.hoge	
  	
  	
  	
  	
  	
  	
  //=>	
  "Property:	
  hoge"
sample.bar	
  	
  	
  	
  	
  	
  	
  	
  //=>	
  "Property:	
  bar"
sample.baz	
  =	
  "!!"	
  //=>	
  "Property:	
  baz	
  =	
  !!"
Features for
ex.
def	
  writer	
  =	
  new	
  StringWriter()
def	
  builder	
  =	
  new	
  groovy.xml.MarkupBuilder(writer)
builder.books	
  {
	
  	
  	
  	
  book(published:"2010-­‐12-­‐20")	
  {
	
  	
  	
  	
  	
  	
  	
  	
  author	
  "nobeans"
	
  	
  	
  	
  	
  	
  	
  	
  title	
  	
  "Groovy
                                                              ←Describe here
                                                               "
	
  	
  	
  	
  }
	
  	
  	
  	
  3.times	
  {
	
  	
  	
  	
  	
  	
  	
  	
  book	
  "Groovy      	
   ${it+1} "
	
  	
  	
  	
  }                                                   <books>
}                                                                   	
  	
  <book	
  published='2010-­‐12-­‐20'>
println	
  writer.toString()                                        	
  	
  	
  	
  <author>nobeans</author>
                                                                    	
  	
  	
  	
  <title>Groovy         </title>
                                                          	
  	
  </book>
                                                          	
  	
  <book>Groovy         	
   1 </book>

                    Format as Xml→                        	
  	
  <book>Groovy         	
   2 </book>
                                                          	
  	
  <book>Groovy         	
   3 </book>
                                                          </books>
Basic Theory of
builder.books	
  {
	
  	
  	
  	
  book(published:"2010-­‐12-­‐20")	
  {
	
  	
  	
  	
  	
  	
  	
  	
  author	
  "nobeans"
	
  	
  	
  	
  	
  	
  	
  	
  title	
  	
  "Groovy           "
	
  	
  	
  	
  }
	
  	
  	
  	
  3.times	
  {
	
  	
  	
  	
  	
  	
  	
  	
  book	
  "Groovy      	
   ${it+1} "
	
  	
  	
  	
  }
}
Basic Theory of
builder.books	
  {
	
  	
  	
  	
  book(published:"2010-­‐12-­‐20")	
  {
	
  	
  	
  	
  	
  	
  	
  	
  author	
  "nobeans"
	
  	
  	
  	
  	
  	
  	
  	
  title	
  	
  "Groovy           "
	
  	
  	
  	
  }
	
  	
  	
  	
  3.times	
  {
	
  	
  	
  	
  	
  	
  	
  	
  book	
  "Groovy      	
   ${it+1} "
	
  	
  	
  	
  }
}
Classification of
               Dynamically          Statically
              Defined Method      Defined Method
                  extends             extends
              BuilderSupport   FactoryBuilderSupport
 Extends      MarkupBuilder       SwingBuilder
 Abstract     NodeBuilder          FxBuilder
  Class         DOMBuilder       ObjectGraphBuilder
                 AntBuilder          JmxBuilder
                SAXBuilder
                ConfigSlurper
Independent      CliBuilder
public	
  abstract	
  class	
  BuilderSupport	
  ...	
  {
	
  	
  	
  //	
  ...snip...
	
  	
  	
  protected	
  abstract	
  void	
  setParent(Object	
  parent,	
  Object	
  child);
	
  	
  	
  protected	
  abstract	
  Object	
  createNode(Object	
  name);
	
  	
  	
  protected	
  abstract	
  Object	
  createNode(Object	
  name,	
  Object	
  value);
	
  	
  	
  protected	
  abstract	
  Object	
  createNode(Object	
  name,	
  Map	
  attributes);
	
  	
  	
  protected	
  abstract	
  Object	
  createNode(Object	
  name,	
  Map	
  attributes,
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Object	
  value);
	
  	
  	
  //	
  ...snip...
}
public	
  class	
  SwingBuilder	
  extends	
  FactoryBuilderSupport	
  {
	
  	
  	
  	
  //	
  ...snip...
	
  	
  	
  	
  def	
  registerSupportNodes()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  registerFactory("action",	
  new	
  ActionFactory())
	
  	
  	
  	
  	
  	
  	
  	
  registerFactory("actions",	
  new	
  CollectionFactory())
	
  	
  	
  	
  	
  	
  	
  	
  registerFactory("map",	
  new	
  MapFactory())
	
  	
  	
  	
  	
  	
  	
  	
  registerFactory("imageIcon",	
  new	
  ImageIconFactory())
	
  	
  	
  	
  	
  	
  	
  	
  registerFactory("buttonGroup",	
  new	
  ButtonGroupFactory())
	
  	
  	
  	
  	
  	
  	
  	
  addAttributeDelegate(ButtonGroupFactory.&buttonGroupAttributeDelegate)
	
  	
  	
  	
  	
  	
  	
  	
  //	
  ...snip...
	
  	
  	
  	
  }
	
  	
  	
  	
  //	
  ...snip...
}
≪sample≫



powered by NodeBuilder




                         http://www.flickr.com/photos/timothymorgan/75294154/
def	
  writer	
  =	
  new	
  StringWriter()
new	
  DdlBuilder(writer).scheme	
  {
	
  	
  book	
  {                                            CREATE	
  TABLE	
  book	
  (
	
  	
  	
  	
  id	
  	
  	
  	
  	
  	
  	
  	
  type:int   	
  	
  	
  	
  id	
  INTEGER,
	
  	
  	
  	
  title	
  	
  	
  	
  	
  type:String         	
  	
  	
  	
  title	
  TEXT,
	
  	
  	
  	
  published	
  type:Date                       	
  	
  	
  	
  published	
  TIMESTAMP,
	
  	
  	
  	
  author	
  	
  	
  	
  type:int               	
  	
  	
  	
  author	
  INTEGER
	
  	
  }                                                    )
	
  	
  author	
  {                                          CREATE	
  TABLE	
  author	
  (
	
  	
  	
  	
  id	
  	
  	
  	
  	
  	
  	
  	
  type:int   	
  	
  	
  	
  id	
  INTEGER,
	
  	
  	
  	
  name	
  	
  	
  	
  	
  	
  type:String      	
  	
  	
  	
  name	
  TEXT
	
  	
  }                                                    )
}
println	
  writer.toString()
class	
  DdlBuilder	
  {
	
  	
  	
  	
  def	
  writer
	
  	
  	
  	
  DdlBuilder(writer)	
  {	
  this.writer	
  =	
  writer	
  }
	
  	
  	
  	
  def	
  scheme(Closure	
  cls)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  new	
  NodeBuilder().scheme(cls).each	
  {	
  table	
  -­‐>
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  writer.println	
  "CREATE	
  TABLE	
  ${table.name()}	
  ("
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  writer.println	
  table.collect	
  {	
  col	
  -­‐>
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "	
  	
  	
  	
  ${col.name()}	
  ${type(col.attribute('type'))}"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }.join(",n")
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  writer.println	
  ")"
	
  	
  	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
	
  	
  	
  	
  private	
  type(clazz)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  switch	
  (clazz)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  case	
  String:	
  return	
  "TEXT"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  case	
  int:	
  	
  	
  	
  return	
  "INTEGER"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  case	
  Date:	
  	
  	
  return	
  "TIMESTAMP"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  default:
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  throw	
  new	
  RuntimeException("unsupported	
  type:	
  $clazz")
	
  	
  	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  }
}
Features for
http://www.flickr.com/photos/ztyx/4601942293/

More Related Content

What's hot

SVGo: a Go Library for SVG generation
SVGo: a Go Library for SVG generationSVGo: a Go Library for SVG generation
SVGo: a Go Library for SVG generation
Anthony Starks
 
Hidden Gems in Swift
Hidden Gems in SwiftHidden Gems in Swift
Hidden Gems in Swift
Netguru
 
ECMA 入门
ECMA 入门ECMA 入门
ECMA 入门
chencheng 云谦
 
Scalaz
ScalazScalaz
Scalaz
mpilquist
 
RESTful API using scalaz (3)
RESTful API using scalaz (3)RESTful API using scalaz (3)
RESTful API using scalaz (3)
Yeshwanth Kumar
 
Monad Transformers In The Wild
Monad Transformers In The WildMonad Transformers In The Wild
Monad Transformers In The Wild
StackMob Inc
 
Your code is not a string
Your code is not a stringYour code is not a string
Your code is not a string
Ingvar Stepanyan
 
Lecture on Rubinius for Compiler Construction at University of Twente
Lecture on Rubinius for Compiler Construction at University of TwenteLecture on Rubinius for Compiler Construction at University of Twente
Lecture on Rubinius for Compiler Construction at University of Twente
Dirkjan Bussink
 
Exhibition of Atrocity
Exhibition of AtrocityExhibition of Atrocity
Exhibition of Atrocity
Michael Pirnat
 
오브젝트C(pdf)
오브젝트C(pdf)오브젝트C(pdf)
오브젝트C(pdf)
sunwooindia
 
Practical scalaz
Practical scalazPractical scalaz
Practical scalaz
oxbow_lakes
 
Type Driven Development with TypeScript
Type Driven Development with TypeScriptType Driven Development with TypeScript
Type Driven Development with TypeScript
Garth Gilmour
 
Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"
Fwdays
 
Being functional in PHP (DPC 2016)
Being functional in PHP (DPC 2016)Being functional in PHP (DPC 2016)
Being functional in PHP (DPC 2016)
David de Boer
 
PHP Performance Trivia
PHP Performance TriviaPHP Performance Trivia
PHP Performance Trivia
Nikita Popov
 
API design: using type classes and dependent types
API design: using type classes and dependent typesAPI design: using type classes and dependent types
API design: using type classes and dependent types
bmlever
 
Swift와 Objective-C를 함께 쓰는 방법
Swift와 Objective-C를 함께 쓰는 방법Swift와 Objective-C를 함께 쓰는 방법
Swift와 Objective-C를 함께 쓰는 방법
Jung Kim
 
RxSwift 시작하기
RxSwift 시작하기RxSwift 시작하기
RxSwift 시작하기
Suyeol Jeon
 
Typed Properties and more: What's coming in PHP 7.4?
Typed Properties and more: What's coming in PHP 7.4?Typed Properties and more: What's coming in PHP 7.4?
Typed Properties and more: What's coming in PHP 7.4?
Nikita Popov
 
Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)
Nikita Popov
 

What's hot (20)

SVGo: a Go Library for SVG generation
SVGo: a Go Library for SVG generationSVGo: a Go Library for SVG generation
SVGo: a Go Library for SVG generation
 
Hidden Gems in Swift
Hidden Gems in SwiftHidden Gems in Swift
Hidden Gems in Swift
 
ECMA 入门
ECMA 入门ECMA 入门
ECMA 入门
 
Scalaz
ScalazScalaz
Scalaz
 
RESTful API using scalaz (3)
RESTful API using scalaz (3)RESTful API using scalaz (3)
RESTful API using scalaz (3)
 
Monad Transformers In The Wild
Monad Transformers In The WildMonad Transformers In The Wild
Monad Transformers In The Wild
 
Your code is not a string
Your code is not a stringYour code is not a string
Your code is not a string
 
Lecture on Rubinius for Compiler Construction at University of Twente
Lecture on Rubinius for Compiler Construction at University of TwenteLecture on Rubinius for Compiler Construction at University of Twente
Lecture on Rubinius for Compiler Construction at University of Twente
 
Exhibition of Atrocity
Exhibition of AtrocityExhibition of Atrocity
Exhibition of Atrocity
 
오브젝트C(pdf)
오브젝트C(pdf)오브젝트C(pdf)
오브젝트C(pdf)
 
Practical scalaz
Practical scalazPractical scalaz
Practical scalaz
 
Type Driven Development with TypeScript
Type Driven Development with TypeScriptType Driven Development with TypeScript
Type Driven Development with TypeScript
 
Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"
 
Being functional in PHP (DPC 2016)
Being functional in PHP (DPC 2016)Being functional in PHP (DPC 2016)
Being functional in PHP (DPC 2016)
 
PHP Performance Trivia
PHP Performance TriviaPHP Performance Trivia
PHP Performance Trivia
 
API design: using type classes and dependent types
API design: using type classes and dependent typesAPI design: using type classes and dependent types
API design: using type classes and dependent types
 
Swift와 Objective-C를 함께 쓰는 방법
Swift와 Objective-C를 함께 쓰는 방법Swift와 Objective-C를 함께 쓰는 방법
Swift와 Objective-C를 함께 쓰는 방법
 
RxSwift 시작하기
RxSwift 시작하기RxSwift 시작하기
RxSwift 시작하기
 
Typed Properties and more: What's coming in PHP 7.4?
Typed Properties and more: What's coming in PHP 7.4?Typed Properties and more: What's coming in PHP 7.4?
Typed Properties and more: What's coming in PHP 7.4?
 
Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)
 

Similar to Groovy's Builder

JavaFX 2.0 With Alternative Languages - JavaOne 2011
JavaFX 2.0 With Alternative Languages - JavaOne 2011JavaFX 2.0 With Alternative Languages - JavaOne 2011
JavaFX 2.0 With Alternative Languages - JavaOne 2011
Stephen Chin
 
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
Stephen Chin
 
JavaFX 2.0 and Alternative Languages
JavaFX 2.0 and Alternative LanguagesJavaFX 2.0 and Alternative Languages
JavaFX 2.0 and Alternative Languages
Stephen Chin
 
JavaFX 2.0 With Alternative Languages [Portuguese]
JavaFX 2.0 With Alternative Languages [Portuguese]JavaFX 2.0 With Alternative Languages [Portuguese]
JavaFX 2.0 With Alternative Languages [Portuguese]
Stephen Chin
 
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative LanguagesJavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
Stephen Chin
 
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
Stephen Chin
 
Mini-curso JavaFX Aula1
Mini-curso JavaFX Aula1Mini-curso JavaFX Aula1
Mini-curso JavaFX Aula1
Raphael Marques
 
JavaFX Your Way - Devoxx Version
JavaFX Your Way - Devoxx VersionJavaFX Your Way - Devoxx Version
JavaFX Your Way - Devoxx Version
Stephen Chin
 
G*ワークショップ in 仙台 Grails(とことん)入門
G*ワークショップ in 仙台 Grails(とことん)入門G*ワークショップ in 仙台 Grails(とことん)入門
G*ワークショップ in 仙台 Grails(とことん)入門
Tsuyoshi Yamamoto
 
Java Fx Overview Tech Tour
Java Fx Overview Tech TourJava Fx Overview Tech Tour
Java Fx Overview Tech Tour
Carol McDonald
 
JJUG CCC 2011 Spring
JJUG CCC 2011 SpringJJUG CCC 2011 Spring
JJUG CCC 2011 Spring
Kiyotaka Oku
 
Javafx Overview 90minutes
Javafx Overview 90minutesJavafx Overview 90minutes
Javafx Overview 90minutes
SiliconExpert Technologies
 
Javafx Overview 90minutes
Javafx Overview 90minutesJavafx Overview 90minutes
Javafx Overview 90minutes
SiliconExpert Technologies
 
Javafx Overview 90minutes
Javafx Overview 90minutesJavafx Overview 90minutes
Javafx Overview 90minutes
SiliconExpert Technologies
 
SVGo workshop
SVGo workshopSVGo workshop
SVGo workshop
Anthony Starks
 
Griffon @ Svwjug
Griffon @ SvwjugGriffon @ Svwjug
Griffon @ Svwjug
Andres Almiray
 
メディアアートにおけるプログラミング言語Rubyの役割
メディアアートにおけるプログラミング言語Rubyの役割メディアアートにおけるプログラミング言語Rubyの役割
メディアアートにおけるプログラミング言語Rubyの役割
Koichiro Eto
 
Greach, GroovyFx Workshop
Greach, GroovyFx WorkshopGreach, GroovyFx Workshop
Greach, GroovyFx Workshop
Dierk König
 
JavaFX
JavaFXJavaFX
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen ChinHacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
jaxconf
 

Similar to Groovy's Builder (20)

JavaFX 2.0 With Alternative Languages - JavaOne 2011
JavaFX 2.0 With Alternative Languages - JavaOne 2011JavaFX 2.0 With Alternative Languages - JavaOne 2011
JavaFX 2.0 With Alternative Languages - JavaOne 2011
 
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
 
JavaFX 2.0 and Alternative Languages
JavaFX 2.0 and Alternative LanguagesJavaFX 2.0 and Alternative Languages
JavaFX 2.0 and Alternative Languages
 
JavaFX 2.0 With Alternative Languages [Portuguese]
JavaFX 2.0 With Alternative Languages [Portuguese]JavaFX 2.0 With Alternative Languages [Portuguese]
JavaFX 2.0 With Alternative Languages [Portuguese]
 
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative LanguagesJavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
 
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
JavaFX 2.0 With Alternative Languages - Groovy, Clojure, Scala, Fantom, and V...
 
Mini-curso JavaFX Aula1
Mini-curso JavaFX Aula1Mini-curso JavaFX Aula1
Mini-curso JavaFX Aula1
 
JavaFX Your Way - Devoxx Version
JavaFX Your Way - Devoxx VersionJavaFX Your Way - Devoxx Version
JavaFX Your Way - Devoxx Version
 
G*ワークショップ in 仙台 Grails(とことん)入門
G*ワークショップ in 仙台 Grails(とことん)入門G*ワークショップ in 仙台 Grails(とことん)入門
G*ワークショップ in 仙台 Grails(とことん)入門
 
Java Fx Overview Tech Tour
Java Fx Overview Tech TourJava Fx Overview Tech Tour
Java Fx Overview Tech Tour
 
JJUG CCC 2011 Spring
JJUG CCC 2011 SpringJJUG CCC 2011 Spring
JJUG CCC 2011 Spring
 
Javafx Overview 90minutes
Javafx Overview 90minutesJavafx Overview 90minutes
Javafx Overview 90minutes
 
Javafx Overview 90minutes
Javafx Overview 90minutesJavafx Overview 90minutes
Javafx Overview 90minutes
 
Javafx Overview 90minutes
Javafx Overview 90minutesJavafx Overview 90minutes
Javafx Overview 90minutes
 
SVGo workshop
SVGo workshopSVGo workshop
SVGo workshop
 
Griffon @ Svwjug
Griffon @ SvwjugGriffon @ Svwjug
Griffon @ Svwjug
 
メディアアートにおけるプログラミング言語Rubyの役割
メディアアートにおけるプログラミング言語Rubyの役割メディアアートにおけるプログラミング言語Rubyの役割
メディアアートにおけるプログラミング言語Rubyの役割
 
Greach, GroovyFx Workshop
Greach, GroovyFx WorkshopGreach, GroovyFx Workshop
Greach, GroovyFx Workshop
 
JavaFX
JavaFXJavaFX
JavaFX
 
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen ChinHacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
Hacking JavaFX with Groovy, Clojure, Scala, and Visage: Stephen Chin
 

More from Yasuharu Nakano

Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
 
OSS Product feat. Gradle
OSS Product feat. GradleOSS Product feat. Gradle
OSS Product feat. Gradle
Yasuharu Nakano
 
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx PluginGr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin
Yasuharu Nakano
 
The report of JavaOne2011 about groovy
The report of JavaOne2011 about groovyThe report of JavaOne2011 about groovy
The report of JavaOne2011 about groovy
Yasuharu Nakano
 
JavaSE7 Launch Event: Java7xGroovy
JavaSE7 Launch Event: Java7xGroovyJavaSE7 Launch Event: Java7xGroovy
JavaSE7 Launch Event: Java7xGroovy
Yasuharu Nakano
 
レッツゴーデベロッパー2011「プログラミングGroovy〜G*エコシステム編」
レッツゴーデベロッパー2011「プログラミングGroovy〜G*エコシステム編」レッツゴーデベロッパー2011「プログラミングGroovy〜G*エコシステム編」
レッツゴーデベロッパー2011「プログラミングGroovy〜G*エコシステム編」
Yasuharu Nakano
 
How about Gradle?
How about Gradle?How about Gradle?
How about Gradle?
Yasuharu Nakano
 
JavaOne2010 Groovy/Spring Roo
JavaOne2010 Groovy/Spring RooJavaOne2010 Groovy/Spring Roo
JavaOne2010 Groovy/Spring Roo
Yasuharu Nakano
 
GroovyServ - Technical Part
GroovyServ - Technical PartGroovyServ - Technical Part
GroovyServ - Technical Part
Yasuharu 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
 
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx PluginGr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin
Gr8conf EU 2013 Speed up your development: GroovyServ and Grails Improx Plugin
 
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?
 
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

HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
SAP S/4 HANA sourcing and procurement to Public cloud
SAP S/4 HANA sourcing and procurement to Public cloudSAP S/4 HANA sourcing and procurement to Public cloud
SAP S/4 HANA sourcing and procurement to Public cloud
maazsz111
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
dbms calicut university B. sc Cs 4th sem.pdf
dbms  calicut university B. sc Cs 4th sem.pdfdbms  calicut university B. sc Cs 4th sem.pdf
dbms calicut university B. sc Cs 4th sem.pdf
Shinana2
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
DanBrown980551
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
Alex Pruden
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - HiikeSystem Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
Hiike
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024
Intelisync
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Wask
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Tatiana Kojar
 

Recently uploaded (20)

HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
SAP S/4 HANA sourcing and procurement to Public cloud
SAP S/4 HANA sourcing and procurement to Public cloudSAP S/4 HANA sourcing and procurement to Public cloud
SAP S/4 HANA sourcing and procurement to Public cloud
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
dbms calicut university B. sc Cs 4th sem.pdf
dbms  calicut university B. sc Cs 4th sem.pdfdbms  calicut university B. sc Cs 4th sem.pdf
dbms calicut university B. sc Cs 4th sem.pdf
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - HiikeSystem Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
 

Groovy's Builder

  • 2.
  • 4. Ad:: @GrabConfig(systemClassLoader=true) // for GroovyServ @GrabResolver(name="kobo-repo", root="http://github.com/kobo/maven-repo/raw/master/release") @Grab("org.jggug.kobo:gexcelapi:0.2") import org.jggug.kobo.gexcelapi.GExcel def book = GExcel.open(args[0]) def sheet = book[0] println sheet.A1.value sheet.A1.value = "New value of A1" sheet.A_.each{ cell -> println cell.value } sheet._1.each{ cell -> println cell.value } sheet.A1_B6.each{ row -> row.each { cell -> println it.value } }
  • 5. Sample of import  javafx.stage.*; import  javafx.scene.*; import  javafx.scene.shape.*; import  javafx.scene.paint.*; Stage  {        title:  "Sample  by  JavaFX  Script"        width:  600        height:  450        scene:  Scene  {                fill:  Color.LIGHTSKYBLUE                content:  Rectangle  {                        x:  25,  y:  40                        width:  100,  height:  50                        fill:  Color.RED                }        } }
  • 6. 6
  • 7.
  • 8.
  • 9. import  groovy.swing.SwingBuilder Sample of import  java.awt.BorderLayout  as  BL int  count  =  0 new  SwingBuilder().edt  {        frame(                title:'Hello',                size:[600,  450],                show:true        )  {                borderLayout()                textLabel  =  label(                        text:'Sample  of  SwingBuilder',                        constraints:  BL.NORTH                )                button(                        text:  'Click  Me!',                        actionPerformed:  {                                count++                                textLabel.text  =                                  "Clicked  ${count}  time(s)."                                println  "clicked"                        },                        constraints:  BL.SOUTH                )        } }
  • 10.
  • 11.
  • 13. from Roadmap http://www.flickr.com/photos/33678919@N07/5239012324/
  • 15. import  griffon.builder.fx.FxBuilder Sample of import  javafx.stage.* import  javafx.scene.* import  javafx.scene.shape.* import  javafx.scene.paint.* new  FxBuilder().edt  {        stage(                title:  "Sample  by  FxBuilder  of  Groovy",                width:  600,                height:  450,                scene:  scene(fill:  Color.$LIGHTSKYBLUE)  {                        rectangle(                                x:  25,  y:  40,                                width:  100,  height:  50,                                fill:  Color.$RED                        )                }        ) } http://griffon.codehaus.org/FxBuilder+Plugin
  • 16.
  • 17. import  griffon.builder.fx.FxBuilder import  javafx.stage.* import  javafx.stage.*; import  javafx.scene.* import  javafx.scene.*; import  javafx.scene.shape.* import  javafx.scene.shape.*; import  javafx.scene.paint.* import  javafx.scene.paint.*; new  FxBuilder().edt  { Stage  {        stage(        title:  "Sample  by  JavaFX  Script",                title:  "Sample  by  FxBuilder  of  Groovy",        width:  600                width:  600,        height:  450                height:  450,        scene:  Scene  {                fill:  Color.LIGHTSKYBLUE                content:  Rectangle  {                        x:  25,  y:  40 ≒                        width:  100,  height:  50                        fill:  Color.RED                scene:  scene(fill:Color.$LIGHTSKYBLUE){                        rectangle(                                x:  25,  y:  40,                                width:  100,  height:  50,                                fill:  Color.$RED                }                        )        }                } }        ) } FxBuilder
  • 18. JavaFX Script Welcome to http://www.flickr.com/photos/anirudhkoul/3734360895/
  • 19. Minimum lecture series #65535 only for DSL/Builder http://www.flickr.com/photos/iancarroll/5058330466/
  • 20.
  • 25. groovy.lang.Closure  closure  =  {  String  arg  -­‐>        return  "hoge:${arg}" } Java8 # //   closure.call(“foo”)    //=>  “hoge:foo” //   closure(“foo”)              //=>  “hoge:foo”
  • 26. Args of //   ( ) {  -­‐>  "hoge"  }.call()                              //=>  "hoge" //   ( ) {  num  -­‐>  "hoge:${num}"  }.call(123)  //=>  "hoge:123" //   ( ) {  num,  String  id,  option  -­‐>        return  "hoge:${num}:${id}:${option}" }.call(123,  “0A”,  “X”)                          //=>  "hoge:123:0A:X" //   it {  "hoge:${it}"  }.call(123)                  //=>  "hoge:123"
  • 27. as Args //   ( ) someMethod({  num  -­‐>  num  *  2  }) //   someMethod  {  num  -­‐>  num  *  2  } //   someMethod(arg1,  arg2,  {  num  -­‐>  num  *  2  }) someMethod(arg1,  arg2)  {  num  -­‐>  num  *  2  }  //
  • 29. MOP:: class  MopSample  {        def  methodMissing(String  name,  args)  {                println  "Method:  $name($args)"        } } def  sample  =  new  MopSample() sample.hoge() //  =>  “Method:  hoge([])” sample.foo(123,  456) //  =>  “Method:  foo([123,  456])”
  • 30. MOP:: class  MopSample  {        def  propertyMissing(String  name)  {  //  for  getter                println  "Property:  $name"        }        def  propertyMissing(String  name,  value)  {  //  for  setter                println  "Property:  $name  =  $value"        } } sample  =  new  MopSample2() sample.hoge              //=>  "Property:  hoge" sample.bar                //=>  "Property:  bar" sample.baz  =  "!!"  //=>  "Property:  baz  =  !!"
  • 32. ex. def  writer  =  new  StringWriter() def  builder  =  new  groovy.xml.MarkupBuilder(writer) builder.books  {        book(published:"2010-­‐12-­‐20")  {                author  "nobeans"                title    "Groovy ←Describe here "        }        3.times  {                book  "Groovy   ${it+1} "        } <books> }    <book  published='2010-­‐12-­‐20'> println  writer.toString()        <author>nobeans</author>        <title>Groovy </title>    </book>    <book>Groovy   1 </book> Format as Xml→    <book>Groovy   2 </book>    <book>Groovy   3 </book> </books>
  • 33. Basic Theory of builder.books  {        book(published:"2010-­‐12-­‐20")  {                author  "nobeans"                title    "Groovy "        }        3.times  {                book  "Groovy   ${it+1} "        } }
  • 34. Basic Theory of builder.books  {        book(published:"2010-­‐12-­‐20")  {                author  "nobeans"                title    "Groovy "        }        3.times  {                book  "Groovy   ${it+1} "        } }
  • 35. Classification of Dynamically Statically Defined Method Defined Method extends extends BuilderSupport FactoryBuilderSupport Extends MarkupBuilder SwingBuilder Abstract NodeBuilder FxBuilder Class DOMBuilder ObjectGraphBuilder AntBuilder JmxBuilder SAXBuilder ConfigSlurper Independent CliBuilder
  • 36. public  abstract  class  BuilderSupport  ...  {      //  ...snip...      protected  abstract  void  setParent(Object  parent,  Object  child);      protected  abstract  Object  createNode(Object  name);      protected  abstract  Object  createNode(Object  name,  Object  value);      protected  abstract  Object  createNode(Object  name,  Map  attributes);      protected  abstract  Object  createNode(Object  name,  Map  attributes,                                                                                Object  value);      //  ...snip... }
  • 37. public  class  SwingBuilder  extends  FactoryBuilderSupport  {        //  ...snip...        def  registerSupportNodes()  {                registerFactory("action",  new  ActionFactory())                registerFactory("actions",  new  CollectionFactory())                registerFactory("map",  new  MapFactory())                registerFactory("imageIcon",  new  ImageIconFactory())                registerFactory("buttonGroup",  new  ButtonGroupFactory())                addAttributeDelegate(ButtonGroupFactory.&buttonGroupAttributeDelegate)                //  ...snip...        }        //  ...snip... }
  • 38.
  • 39. ≪sample≫ powered by NodeBuilder http://www.flickr.com/photos/timothymorgan/75294154/
  • 40. def  writer  =  new  StringWriter() new  DdlBuilder(writer).scheme  {    book  { CREATE  TABLE  book  (        id                type:int        id  INTEGER,        title          type:String        title  TEXT,        published  type:Date        published  TIMESTAMP,        author        type:int        author  INTEGER    } )    author  { CREATE  TABLE  author  (        id                type:int        id  INTEGER,        name            type:String        name  TEXT    } ) } println  writer.toString()
  • 41. class  DdlBuilder  {        def  writer        DdlBuilder(writer)  {  this.writer  =  writer  }        def  scheme(Closure  cls)  {                new  NodeBuilder().scheme(cls).each  {  table  -­‐>                        writer.println  "CREATE  TABLE  ${table.name()}  ("                        writer.println  table.collect  {  col  -­‐>                                "        ${col.name()}  ${type(col.attribute('type'))}"                        }.join(",n")                        writer.println  ")"                }        }        private  type(clazz)  {                switch  (clazz)  {                        case  String:  return  "TEXT"                        case  int:        return  "INTEGER"                        case  Date:      return  "TIMESTAMP"                        default:                            throw  new  RuntimeException("unsupported  type:  $clazz")                }        } }
  • 43.