SlideShare ist ein Scribd-Unternehmen logo
1 von 74
Perl: Efficiency Oriented Programming
Lecture 1
Master Proteomics & Bioinformatics - University of Geneva
Alexandre Masselot - summer 2011
?EOP : goal of the course

• Biological experiments produce huge amount of data (proteomics => TB)
?EOP : goal of the course

• Biological experiments produce huge amount of data (proteomics => TB)
• Excel/mouse data handling is the best path to psychiatric hospital
?EOP : goal of the course

• Biological experiments produce huge amount of data (proteomics => TB)
• Excel/mouse data handling is the best path to psychiatric hospital
• Powerful computers (or even small clusters) are becoming more affordable
?EOP : goal of the course

• Biological experiments produce huge amount of data (proteomics => TB)
• Excel/mouse data handling is the best path to psychiatric hospital
• Powerful computers (or even small clusters) are becoming more affordable
• Programming languages and frameworks more popular (scripts, web
  applications, relational databases)
?EOP : goal of the course

• Biological experiments produce huge amount of data (proteomics => TB)
• Excel/mouse data handling is the best path to psychiatric hospital
• Powerful computers (or even small clusters) are becoming more affordable
• Programming languages and frameworks more popular (scripts, web
  applications, relational databases)
• Code is shared (open source culture)
?EOP : goal of the course

• Biological experiments produce huge amount of data (proteomics => TB)
• Excel/mouse data handling is the best path to psychiatric hospital
• Powerful computers (or even small clusters) are becoming more affordable
• Programming languages and frameworks more popular (scripts, web
  applications, relational databases)
• Code is shared (open source culture)



                  Goal of the this course:
               make you efficient in the lab,
             with a computer at you fingertips
?EOP: topics of this course

• Fall: Programming for Bioinformatics I for programming fundamentals
?EOP: topics of this course

• Fall: Programming for Bioinformatics I for programming fundamentals

• Spring: get some independence and meet real life challenges
?EOP: topics of this course

• Fall: Programming for Bioinformatics I for programming fundamentals

• Spring: get some independence and meet real life challenges
• By the end, you should be able to
  • deploy your own development environment,
  • write scripts to analyze data and give the scientist an answer,
  • interact with other libraries,
  • build a web application,
  • build a relational DB model,
  • have basic skills in software development methodologies.
?EOP: topics of this course

• Fall: Programming for Bioinformatics I for programming fundamentals

• Spring: get some independence and meet real life challenges
• By the end, you should be able to
  • deploy your own development environment,
  • write scripts to analyze data and give the scientist an answer,
  • interact with other libraries,
  • build a web application,
  • build a relational DB model,
  • have basic skills in software development methodologies.

                  Just another tool in the box
                    (yet damned powerful!)
Efficiency Oriented Programming

• Efficiency = Result/Time
Efficiency Oriented Programming

• Efficiency = Result/Time
• Time:
  • time spent in programming the tool
  • time invested in learning the technology
  • not only computing time (although it is important)
Efficiency Oriented Programming

• Efficiency = Result/Time
• Time:
  • time spent in programming the tool
  • time invested in learning the technology
  • not only computing time (although it is important)
• Result:
  • complexity of the produced code
  • quality (functionalities, evolution etc.)
  • versatility
EOP: why not Perl (this year)?

• “Perl is a language to get your job done” Larry Wall
EOP: why not Perl (this year)?

• “Perl is a language to get your job done” Larry Wall

• To maximize efficiency, Perl has been perfect candidate:
   • from eighties until now, a constant evolution,
   • rich and direct syntax,
   • dynamic community: >7’000 of public modules, often maintained, hight
     quality (http://search.cpan.org),
   • free (speech & beer),
   • almost 100 OS supported (http://www.cpan.org/ports/index.html),
   • perl is anarchist (and even poetic).
EOP: why not Perl (this year)?

• Language are species following evolution patterns (no creationism)
EOP: why not Perl (this year)?

• Language are species following evolution patterns (no creationism)
• Thousands of languages exist (http://en.wikipedia.org/wiki/
  List_of_programming_languages)
EOP: why not Perl (this year)?

• Language are species following evolution patterns (no creationism)
• Thousands of languages exist (http://en.wikipedia.org/wiki/
  List_of_programming_languages)
• Recent trends for high level languages:
  • syntax become more compact (and efficient),
  • scripting is not incompatible with classic “structured” code (writing and
    running),
  • features, culture: cross-over between languages,
  • language cooperation becomes a standard (parrot, .net)
EOP: why not Perl (this year)?

For general purpose bioinformatics, several nominees:
EOP: why not Perl (this year)?

For general purpose bioinformatics, several nominees:
• perl 5 : a historical choice, anchored in the community (bioperl etc.),
EOP: why not Perl (this year)?

For general purpose bioinformatics, several nominees:
• perl 5 : a historical choice, anchored in the community (bioperl etc.),
• java : structured, safe, heavy,
EOP: why not Perl (this year)?

For general purpose bioinformatics, several nominees:
• perl 5 : a historical choice, anchored in the community (bioperl etc.),
• java : structured, safe, heavy,

• python : a versatile language, allying strength from scripts up to object-
  oriented models
EOP: why not Perl (this year)?

For general purpose bioinformatics, several nominees:
• perl 5 : a historical choice, anchored in the community (bioperl etc.),
• java : structured, safe, heavy,

• python : a versatile language, allying strength from scripts up to object-
  oriented models
• perl 6 (rakudo) : a total re-designing of perl, by its original authors, a very
  appealing option, but not yet a standard
EOP: why not Perl (this year)?

For general purpose bioinformatics, several nominees:
• perl 5 : a historical choice, anchored in the community (bioperl etc.),
• java : structured, safe, heavy,

• python : a versatile language, allying strength from scripts up to object-
  oriented models
• perl 6 (rakudo) : a total re-designing of perl, by its original authors, a very
  appealing option, but not yet a standard
• groovy (+grails) : a recent (2003) initiative, with powerful scripting manners
  & tight links with java; grails offer a very light (although powerful)
  framework for web development, RDBMS and Spring integration
EOP: why not Perl (this year)?

There is no “one best language” for everyone and all situations,
but our winner (this year) is:




•compact syntax, either “free” or “controlled”, structured or object-oriented,
•modern web applications
•data naturally stored in relational database
•good software development practices are encouraged (agile)
•powerful IDE available
EOP: why not Perl (this year)?

There is no “one best language” for everyone and all situations,
but our winner (this year) is:


                           Groovy and Grails
•compact syntax, either “free” or “controlled”, structured or object-oriented,
•modern web applications
•data naturally stored in relational database
•good software development practices are encouraged (agile)
•powerful IDE available
EOP: why not Perl (this year)?

There is no “one best language” for everyone and all situations,
but our winner (this year) is:


                           Groovy and Grails
•compact syntax, either “free” or “controlled”, structured or object-oriented,
EOP: why not Perl (this year)?

There is no “one best language” for everyone and all situations,
but our winner (this year) is:


                           Groovy and Grails
•compact syntax, either “free” or “controlled”, structured or object-oriented,
•modern web applications
EOP: why not Perl (this year)?

There is no “one best language” for everyone and all situations,
but our winner (this year) is:


                           Groovy and Grails
•compact syntax, either “free” or “controlled”, structured or object-oriented,
•modern web applications
•data naturally stored in relational database
EOP: why not Perl (this year)?

There is no “one best language” for everyone and all situations,
but our winner (this year) is:


                           Groovy and Grails
•compact syntax, either “free” or “controlled”, structured or object-oriented,
•modern web applications
•data naturally stored in relational database
•good software development practices are encouraged (agile)
EOP: why not Perl (this year)?

There is no “one best language” for everyone and all situations,
but our winner (this year) is:


                           Groovy and Grails
•compact syntax, either “free” or “controlled”, structured or object-oriented,
•modern web applications
•data naturally stored in relational database
•good software development practices are encouraged (agile)
•powerful IDE available
Groovy+grails : setup

• integrated solution:
   • install java 6 (sun) sdk
   • install SpringSource Tool Suite (eclipse) http://www.springsource.com/
     products/sts
   • start STS
      • help>dashboard,
      • tab extensions

      • install groovy and grails
• Launch trials environments, with either:
   • groovysh
   • groovyConsole
Groovy: a first script + string evaluation
Groovy: a first script + string evaluation

Subroutines calls, parenthesis and ;
 println (“hello world”);              //java-like
 println “hello world”;                //end line with ;
 println “hello world”                 //slim fast
Groovy: a first script + string evaluation

Subroutines calls, parenthesis and ;
 println (“hello world”);              //java-like
 println “hello world”;                //end line with ;
 println “hello world”                 //slim fast
String evaluation
 /*
  double quotes allow string           evaluation
  single quote no evaluation
  looks perlish, huh?
 */
 def name=‘Mickey Mouse’
 println “hello $name”                 //=> hello Mickey Mouse
 println ‘hello ‘+name                 //=> hello Mickey Mouse
 println ‘hello $name‘                 //=> hello $name
Defining variable: to type or not to type?

It is possible to define variable, without specifying their type
 def x= 42.4         //dynamic type variable x,
                     //initialized with a float
 x= ‘ola chico‘      //a string is assigned to the same x
 x=[‘aa’, ‘bb’, ‘c’] //now an array...
Defining variable: to type or not to type?

It is possible to define variable, without specifying their type
 def x= 42.4         //dynamic type variable x,
                     //initialized with a float
 x= ‘ola chico‘      //a string is assigned to the same x
 x=[‘aa’, ‘bb’, ‘c’] //now an array...


It is generally better to assign a type to a variable (security & readability)
 int x=42                    //static type set to integer
 x=12.34                     // => x=12 (implicit conversion)
 x=[1, 1, 2, 3, 5]           // => error: cannot convert
                             //    (GroovyCastException)
More on implicit casting

Whenever possible groovy compiler tries to cast variable.
More on implicit casting

Whenever possible groovy compiler tries to cast variable.
Why is the following correct (from the compiler point of view)?
 String x=‘ola chico’
 x=23.14
 x=[‘a’, ‘b’, ‘c’]
More on implicit casting

Whenever possible groovy compiler tries to cast variable.
Why is the following correct (from the compiler point of view)?
 String x=‘ola chico’
 x=23.14
 x=[‘a’, ‘b’, ‘c’]
To know the class (the type) of a variable
 println x.class
More on implicit casting

Whenever possible groovy compiler tries to cast variable.
Why is the following correct (from the compiler point of view)?
 String x=‘ola chico’
 x=23.14
 x=[‘a’, ‘b’, ‘c’]
To know the class (the type) of a variable
 println x.class
What will produce the following statements?
 int x=1
 println x+2
 String y=1
 println y+2
And even more on type conversion

Casting can be called explicitly (TIMTOWTDI)
 def my_str=‘123’
 int x=my_str.toInteger()+10000
 x=Integer.parseInt(my_str)
 x=my_str as Integer
 x=my_str                                //error!!!
And even more on type conversion

Casting can be called explicitly (TIMTOWTDI)
 def my_str=‘123’
 int x=my_str.toInteger()+10000
 x=Integer.parseInt(my_str)
 x=my_str as Integer
 x=my_str                                //error!!!
Or back to String
 String other_str=x.toString()
 other_str=x as String
 other_str=’’ + x                        //’’ force the casting
 other_str=”$x”
Test the parameters type

Imagine we have not statically defined a variable type (argument to function)
 x=23
 if(x in Integer){                    // true
   ...
 }
 23.45 in Double                      // false
 23.45D in Double                     // true
 23.45 in BigDecimal                  // true

 ‘pipo’ in String                     // true
Test the parameters type

Imagine we have not statically defined a variable type (argument to function)
 x=23
 if(x in Integer){                    // true
   ...
 }
 23.45 in Double                      // false
 23.45D in Double                     // true
 23.45 in BigDecimal                  // true

 ‘pipo’ in String                     // true
More generally, we can detect numerical values
 x in Number
Test the parameters type

Imagine we have not statically defined a variable type (argument to function)
 x=23
 if(x in Integer){                    // true
   ...
 }
 23.45 in Double                      // false
 23.45D in Double                     // true
 23.45 in BigDecimal                  // true

 ‘pipo’ in String                     // true
More generally, we can detect numerical values
 x in Number
and later
 x in Map; x in List
Some available scalar types
Some available scalar types

Most commons types
 int                  //or Integer
 double               //or Double
 String
 boolean              //boolean b=true
Some available scalar types

Most commons types
 int                  //or Integer
 double               //or Double
 String
 boolean              //boolean b=true
And more
 char                 //single character        (‘a’)
 byte                 //8 bit signed integer    0..255
 short                //16 bit signed integer
 long                 //64 bit signed integer   (123L)
 float                //32 bit floating point   (1.23F)
 double               //64 bit floating point   (1.23D)
 BigInteger           //large integer           (123G)
 BigDecimal           //large float             (1.23G)
Primitive type or Object?

In java, there is a distinction between int and Integer
Primitive type or Object?

In java, there is a distinction between int and Integer

In groovy, everything is Object
Primitive type or Object?

In java, there is a distinction between int and Integer

In groovy, everything is Object
So we can call methods
 String name=‘Mickey Mouse’
 println name.length()                 // => 12
 println name.substring(0,4)           // => ‘Mick’
 println name.endsWith(‘use’)          // => true
Primitive type or Object?

In java, there is a distinction between int and Integer

In groovy, everything is Object
So we can call methods
 String name=‘Mickey Mouse’
 println name.length()                 // => 12
 println name.substring(0,4)           // => ‘Mick’
 println name.endsWith(‘use’)          // => true

“Hidden” methods
 println name[5]                       // name.getAt(5)
 println name[3..5]                    // name.substring(3,6)
Primitive type or Object?

In java, there is a distinction between int and Integer

In groovy, everything is Object
So we can call methods
 String name=‘Mickey Mouse’
 println name.length()                 // => 12
 println name.substring(0,4)           // => ‘Mick’
 println name.endsWith(‘use’)          // => true

“Hidden” methods
 println name[5]                       // name.getAt(5)
 println name[3..5]                    // name.substring(3,6)

The total list: in groovyConsole, launch Inspector on last evaluated
variable with ctrl-I -> methods tab (or http://groovy.codehaus.org/groovy-
jdk/, or google)
Operators

Some common operations can be written via operators
 a+b       a.plus(b)
 a/b       a.div(b)            //   16/3 -> 5.33333333
 a%b       a.mod(b)            //   16%3 -> 1
 a++       a.next()            //   difference with ++a ?
 a**b      a.power(b)          //   15**2 -> 225
 a>>b      a.rightShift(b)
 a|b       a.or(b)             // 5|6 -> 7    (101|110 -> 111)
Operators

Some common operations can be written via operators
 a+b        a.plus(b)
 a/b        a.div(b)            //   16/3 -> 5.33333333
 a%b        a.mod(b)            //   16%3 -> 1
 a++        a.next()            //   difference with ++a ?
 a**b       a.power(b)          //   15**2 -> 225
 a>>b       a.rightShift(b)
 a|b        a.or(b)             // 5|6 -> 7      (101|110 -> 111)
Later, we’ll see how these operators can be overridden
Exercise 1 : string for fun

• Initialize a String with ‘my funny valentine’
• what is the length of this string?
• assign a boolean to store if ‘fun’ is a substring

• replace ‘funny’ by ‘happy’
• convert this string to upper case
• split this string into a list, with one word per element ([‘MY’, ‘HAPPY’,
  ‘VALENTINE’])

• reverse this list ([‘VALENTINE’, ‘HAPPY’, ‘MY’])
Exercise 2 : integer and bit representation

• Touching the integer limit
   • initialize an integer with 123
   • what is the maximum value for Integer? the minimum value?
   • replace it by itself to the power 3
   • do the same thing once more. What do you observe?
• bit representation
   • initialize an integer with 103 (binary 1100111)
   • shift the binary representation by two steps on the right. What operation
     is it equivalent two?
   • shift it back to the left. What do you observe?
static method

Method can be bound to a object instance, e.g. :

 String name=‘pipo’;
 name.length()
They can also be bound to the class itself:
 String str=‘23.45’
 double b=Double.parseDouble(str)             // 23.45D

 Integer.bitCount(103)                        // 5
Other classes?

Beside intrinsic scalar value, there are millions of classes defined, and
thousands of them are available more or less by default.
Example : Random
 Random my_rnd                // -> null
 my_rnd=new Random()          // not null anymore
 println my_rnd.nextDouble() // pseudo random in [0,1[
 10.times{println my_rnd.nextBoolean()}
Exercise 3 : going random

• More with Random class
  • is it possible for your computer to draw random numbers?
  • what happen if your print my_rnd?
  • draw 6 number with a gaussian distribution (µ=0, σ2=1)
  • draw 6 number with a gaussian distribution (µ=170, σ2=25)
  • draw a classic dice 10 times
  • draw the sum of two dice 10 times
  • what happen is you reproduce the same experiment many times? is the
    results the same? how could have reproducible results?
Exercise 4 : have a date

• Using the Date class
  • assign to a variable the current date
  • print the just the second (60 seconds per minute) value of the current
    date
  • assign your variable with one week ago
  • get the month of one week ago as an integer
  • is now after yesterday? (this is a boolean question, not an existentialist
    one)
  • is now equals to now? always? (how date is coded?)
Collective types : List & Map

Dynamic typing is still possible
Collective types : List & Map

Dynamic typing is still possible
For List (or array)
 def fibonacci=[1,1,2,3,5,8,13]
 fibonacci=[]                      //empty list
Collective types : List & Map

Dynamic typing is still possible
For List (or array)
 def fibonacci=[1,1,2,3,5,8,13]
 fibonacci=[]                               //empty list
Or Map (or HashMap, or associative array)
 def medals = [us:36, germany:30, canada:26, norway:23]
 medals = [:]                    //empty map
 def medalsDetails=[
                us:[gold:9, silver:15, bronze:13],
                germany:[gold:10, silver:13, bronze:7],
                canada:[gold:14, silver:7, bronze:5],
                norway:[gold:9, silver:8, bronze:6],
               ]
Collective types (cont’d)

Or static type
 List<Integer> fibonacci
 Map<String, Integer> medals
 Map<String, Map<String, Integer>> medal_details
Collective types (cont’d)

Or static type
 List<Integer> fibonacci
 Map<String, Integer> medals
 Map<String, Map<String, Integer>> medal_details
List access
 fibonacci[0]         // first element
 fibonacci[-1]        // fibonacci[fibonacci.size()-1]
 fibonacci[2..4]      // [2, 3, 5]
Collective types (cont’d)

Or static type
 List<Integer> fibonacci
 Map<String, Integer> medals
 Map<String, Map<String, Integer>> medal_details
List access
 fibonacci[0]         // first element
 fibonacci[-1]        // fibonacci[fibonacci.size()-1]
 fibonacci[2..4]      // [2, 3, 5]
Map access
 medals.canada == medals[‘canada’]
 medal_details.norway.gold ==
                           medals_details[‘norway’][‘gold’]
Collective types (cont’d)
Collective types (cont’d)

Add or modify
 fibonacci[7]=21         //add a new element
 medals.canada.gold=97   //modify
 medals.us.gold--        //anti doping control...
Collective types (cont’d)

Add or modify
 fibonacci[7]=21          //add a new element
 medals.canada.gold=97    //modify
 medals.us.gold--         //anti doping control...
Other methods
 fibonnacci.size()
 medal_details.germany.size()
 medal_details.remove(‘germany’)
Collective types (cont’d)

Add or modify
 fibonacci[7]=21               //add a new element
 medals.canada.gold=97         //modify
 medals.us.gold--              //anti doping control...
Other methods
 fibonnacci.size()
 medal_details.germany.size()
 medal_details.remove(‘germany’)
Operators are also available
 fibonacci << 34               //push 34 at the end
 fibonacci - 1                 //remove all values 1
Exercise 5: arrays

• fills an array with a few values
   • what is the difference between array+12, array<<12 and array+=12?
   • print the sum, the maximum value
   • store the reversed array into another one
   • sort the array with increasing values. With decreasing values.
• A last little one
   • remember the 10.times{...} syntax we saw previously
   • put [1, 1] in a fibo array, then fill this array with the 20 next value os
     a Fibonacci suite, where fibo[n+1]=fibo[n]+fibo[n-1]

Weitere ähnliche Inhalte

Was ist angesagt?

Why choose Hack/HHVM over PHP7
Why choose Hack/HHVM over PHP7Why choose Hack/HHVM over PHP7
Why choose Hack/HHVM over PHP7Yuji Otani
 
When Good Code Goes Bad: Tools and Techniques for Troubleshooting Plone
When Good Code Goes Bad: Tools and Techniques for Troubleshooting PloneWhen Good Code Goes Bad: Tools and Techniques for Troubleshooting Plone
When Good Code Goes Bad: Tools and Techniques for Troubleshooting PloneDavid Glick
 
20111018 boost and gtest
20111018 boost and gtest20111018 boost and gtest
20111018 boost and gtestWill Shen
 
Coder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architectureCoder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architectureThomas Pierrain
 
Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012Anton Arhipov
 
Introduction to Writing Readable and Maintainable Perl (YAPC::EU 2011 Version)
Introduction to Writing Readable and Maintainable Perl (YAPC::EU 2011 Version)Introduction to Writing Readable and Maintainable Perl (YAPC::EU 2011 Version)
Introduction to Writing Readable and Maintainable Perl (YAPC::EU 2011 Version)Alex Balhatchet
 
Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to GriffonJames Williams
 
Golang - Overview of Go (golang) Language
Golang - Overview of Go (golang) LanguageGolang - Overview of Go (golang) Language
Golang - Overview of Go (golang) LanguageAniruddha Chakrabarti
 
TypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack DevelopersTypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack DevelopersRutenis Turcinas
 
Gradle in a Polyglot World
Gradle in a Polyglot WorldGradle in a Polyglot World
Gradle in a Polyglot WorldSchalk Cronjé
 
Wonders of Golang
Wonders of GolangWonders of Golang
Wonders of GolangKartik Sura
 
CocoaConf DC - Automate with Swift - Tony Ingraldi
CocoaConf DC -  Automate with Swift - Tony IngraldiCocoaConf DC -  Automate with Swift - Tony Ingraldi
CocoaConf DC - Automate with Swift - Tony IngraldiTony Ingraldi
 
Inroduction to golang
Inroduction to golangInroduction to golang
Inroduction to golangYoni Davidson
 
Practical PowerShell Programming for Professional People - DerbyCon 4
Practical PowerShell Programming for Professional People - DerbyCon 4Practical PowerShell Programming for Professional People - DerbyCon 4
Practical PowerShell Programming for Professional People - DerbyCon 4Ben Ten (0xA)
 
What Makes Objective C Dynamic?
What Makes Objective C Dynamic?What Makes Objective C Dynamic?
What Makes Objective C Dynamic?Kyle Oba
 
StdAfx.h for Novices
StdAfx.h for NovicesStdAfx.h for Novices
StdAfx.h for NovicesAndrey Karpov
 

Was ist angesagt? (20)

Why choose Hack/HHVM over PHP7
Why choose Hack/HHVM over PHP7Why choose Hack/HHVM over PHP7
Why choose Hack/HHVM over PHP7
 
When Good Code Goes Bad: Tools and Techniques for Troubleshooting Plone
When Good Code Goes Bad: Tools and Techniques for Troubleshooting PloneWhen Good Code Goes Bad: Tools and Techniques for Troubleshooting Plone
When Good Code Goes Bad: Tools and Techniques for Troubleshooting Plone
 
20111018 boost and gtest
20111018 boost and gtest20111018 boost and gtest
20111018 boost and gtest
 
Coder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architectureCoder sans peur du changement avec la meme pas mal hexagonal architecture
Coder sans peur du changement avec la meme pas mal hexagonal architecture
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
Dart Workshop
Dart WorkshopDart Workshop
Dart Workshop
 
Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012
 
Introduction to Writing Readable and Maintainable Perl (YAPC::EU 2011 Version)
Introduction to Writing Readable and Maintainable Perl (YAPC::EU 2011 Version)Introduction to Writing Readable and Maintainable Perl (YAPC::EU 2011 Version)
Introduction to Writing Readable and Maintainable Perl (YAPC::EU 2011 Version)
 
Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to Griffon
 
Future of PHP
Future of PHPFuture of PHP
Future of PHP
 
Golang - Overview of Go (golang) Language
Golang - Overview of Go (golang) LanguageGolang - Overview of Go (golang) Language
Golang - Overview of Go (golang) Language
 
TypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack DevelopersTypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack Developers
 
Gradle in a Polyglot World
Gradle in a Polyglot WorldGradle in a Polyglot World
Gradle in a Polyglot World
 
Wonders of Golang
Wonders of GolangWonders of Golang
Wonders of Golang
 
CocoaConf DC - Automate with Swift - Tony Ingraldi
CocoaConf DC -  Automate with Swift - Tony IngraldiCocoaConf DC -  Automate with Swift - Tony Ingraldi
CocoaConf DC - Automate with Swift - Tony Ingraldi
 
Inroduction to golang
Inroduction to golangInroduction to golang
Inroduction to golang
 
Practical PowerShell Programming for Professional People - DerbyCon 4
Practical PowerShell Programming for Professional People - DerbyCon 4Practical PowerShell Programming for Professional People - DerbyCon 4
Practical PowerShell Programming for Professional People - DerbyCon 4
 
What Makes Objective C Dynamic?
What Makes Objective C Dynamic?What Makes Objective C Dynamic?
What Makes Objective C Dynamic?
 
Practical Groovy DSL
Practical Groovy DSLPractical Groovy DSL
Practical Groovy DSL
 
StdAfx.h for Novices
StdAfx.h for NovicesStdAfx.h for Novices
StdAfx.h for Novices
 

Andere mochten auch

Groovy Grails DevJam Jam Session
Groovy Grails DevJam Jam SessionGroovy Grails DevJam Jam Session
Groovy Grails DevJam Jam SessionMike Hugo
 
Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...
Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...
Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...jaxLondonConference
 
Groovy and Grails intro
Groovy and Grails introGroovy and Grails intro
Groovy and Grails introMiguel Pastor
 
Apache Groovy: the language and the ecosystem
Apache Groovy: the language and the ecosystemApache Groovy: the language and the ecosystem
Apache Groovy: the language and the ecosystemKostas Saidis
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with GroovyArturo Herrero
 
An Introduction to Groovy for Java Developers
An Introduction to Groovy for Java DevelopersAn Introduction to Groovy for Java Developers
An Introduction to Groovy for Java DevelopersKostas Saidis
 

Andere mochten auch (15)

Groovy Grails DevJam Jam Session
Groovy Grails DevJam Jam SessionGroovy Grails DevJam Jam Session
Groovy Grails DevJam Jam Session
 
Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...
Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...
Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...
 
Groovy and Grails intro
Groovy and Grails introGroovy and Grails intro
Groovy and Grails intro
 
Apache Groovy: the language and the ecosystem
Apache Groovy: the language and the ecosystemApache Groovy: the language and the ecosystem
Apache Groovy: the language and the ecosystem
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with Groovy
 
An Introduction to Groovy for Java Developers
An Introduction to Groovy for Java DevelopersAn Introduction to Groovy for Java Developers
An Introduction to Groovy for Java Developers
 
groovy & grails - lecture 10
groovy & grails - lecture 10groovy & grails - lecture 10
groovy & grails - lecture 10
 
groovy & grails - lecture 13
groovy & grails - lecture 13groovy & grails - lecture 13
groovy & grails - lecture 13
 
groovy & grails - lecture 2
groovy & grails - lecture 2groovy & grails - lecture 2
groovy & grails - lecture 2
 
groovy & grails - lecture 5
groovy & grails - lecture 5groovy & grails - lecture 5
groovy & grails - lecture 5
 
groovy & grails - lecture 12
groovy & grails - lecture 12groovy & grails - lecture 12
groovy & grails - lecture 12
 
groovy & grails - lecture 9
groovy & grails - lecture 9groovy & grails - lecture 9
groovy & grails - lecture 9
 
groovy & grails - lecture 3
groovy & grails - lecture 3groovy & grails - lecture 3
groovy & grails - lecture 3
 
groovy & grails - lecture 11
groovy & grails - lecture 11groovy & grails - lecture 11
groovy & grails - lecture 11
 
groovy & grails - lecture 6
groovy & grails - lecture 6groovy & grails - lecture 6
groovy & grails - lecture 6
 

Ähnlich wie groovy & grails - lecture 1

PyData Frankfurt - (Efficient) Data Exchange with "Foreign" Ecosystems
PyData Frankfurt - (Efficient) Data Exchange with "Foreign" EcosystemsPyData Frankfurt - (Efficient) Data Exchange with "Foreign" Ecosystems
PyData Frankfurt - (Efficient) Data Exchange with "Foreign" EcosystemsUwe Korn
 
Le PERL est mort
Le PERL est mortLe PERL est mort
Le PERL est mortapeiron
 
GPT-2: Language Models are Unsupervised Multitask Learners
GPT-2: Language Models are Unsupervised Multitask LearnersGPT-2: Language Models are Unsupervised Multitask Learners
GPT-2: Language Models are Unsupervised Multitask LearnersYoung Seok Kim
 
Are High Level Programming Languages for Multicore and Safety Critical Conver...
Are High Level Programming Languages for Multicore and Safety Critical Conver...Are High Level Programming Languages for Multicore and Safety Critical Conver...
Are High Level Programming Languages for Multicore and Safety Critical Conver...InfinIT - Innovationsnetværket for it
 
FEC2017-Introduction-to-programming
FEC2017-Introduction-to-programmingFEC2017-Introduction-to-programming
FEC2017-Introduction-to-programmingHenrikki Tenkanen
 
sete linguagens em sete semanas
sete linguagens em sete semanassete linguagens em sete semanas
sete linguagens em sete semanastdc-globalcode
 
Introduction to go lang
Introduction to go langIntroduction to go lang
Introduction to go langAmal Mohan N
 
2015 bioinformatics python_introduction_wim_vancriekinge_vfinal
2015 bioinformatics python_introduction_wim_vancriekinge_vfinal2015 bioinformatics python_introduction_wim_vancriekinge_vfinal
2015 bioinformatics python_introduction_wim_vancriekinge_vfinalProf. Wim Van Criekinge
 
An introduction to go programming language
An introduction to go programming languageAn introduction to go programming language
An introduction to go programming languageTechnology Parser
 
Robotics, Search and AI with Solr, MyRobotLab, and Deeplearning4j
Robotics, Search and AI with Solr, MyRobotLab, and Deeplearning4jRobotics, Search and AI with Solr, MyRobotLab, and Deeplearning4j
Robotics, Search and AI with Solr, MyRobotLab, and Deeplearning4jKevin Watters
 
The Intersection of Robotics, Search and AI with Solr, MyRobotLab, and Deep L...
The Intersection of Robotics, Search and AI with Solr, MyRobotLab, and Deep L...The Intersection of Robotics, Search and AI with Solr, MyRobotLab, and Deep L...
The Intersection of Robotics, Search and AI with Solr, MyRobotLab, and Deep L...Lucidworks
 
Town Hall - Business Implications of Open Source OSGi Implementations - BJ Ha...
Town Hall - Business Implications of Open Source OSGi Implementations - BJ Ha...Town Hall - Business Implications of Open Source OSGi Implementations - BJ Ha...
Town Hall - Business Implications of Open Source OSGi Implementations - BJ Ha...mfrancis
 
Programming Languages #devcon2013
Programming Languages #devcon2013Programming Languages #devcon2013
Programming Languages #devcon2013Iván Montes
 
Applications of Large Language Models in Materials Discovery and Design
Applications of Large Language Models in Materials Discovery and DesignApplications of Large Language Models in Materials Discovery and Design
Applications of Large Language Models in Materials Discovery and DesignAnubhav Jain
 

Ähnlich wie groovy & grails - lecture 1 (20)

PyData Frankfurt - (Efficient) Data Exchange with "Foreign" Ecosystems
PyData Frankfurt - (Efficient) Data Exchange with "Foreign" EcosystemsPyData Frankfurt - (Efficient) Data Exchange with "Foreign" Ecosystems
PyData Frankfurt - (Efficient) Data Exchange with "Foreign" Ecosystems
 
Le PERL est mort
Le PERL est mortLe PERL est mort
Le PERL est mort
 
GPT-2: Language Models are Unsupervised Multitask Learners
GPT-2: Language Models are Unsupervised Multitask LearnersGPT-2: Language Models are Unsupervised Multitask Learners
GPT-2: Language Models are Unsupervised Multitask Learners
 
Are High Level Programming Languages for Multicore and Safety Critical Conver...
Are High Level Programming Languages for Multicore and Safety Critical Conver...Are High Level Programming Languages for Multicore and Safety Critical Conver...
Are High Level Programming Languages for Multicore and Safety Critical Conver...
 
Bioinformatica p1-perl-introduction
Bioinformatica p1-perl-introductionBioinformatica p1-perl-introduction
Bioinformatica p1-perl-introduction
 
FEC2017-Introduction-to-programming
FEC2017-Introduction-to-programmingFEC2017-Introduction-to-programming
FEC2017-Introduction-to-programming
 
sete linguagens em sete semanas
sete linguagens em sete semanassete linguagens em sete semanas
sete linguagens em sete semanas
 
Introduction to go lang
Introduction to go langIntroduction to go lang
Introduction to go lang
 
2015 bioinformatics python_introduction_wim_vancriekinge_vfinal
2015 bioinformatics python_introduction_wim_vancriekinge_vfinal2015 bioinformatics python_introduction_wim_vancriekinge_vfinal
2015 bioinformatics python_introduction_wim_vancriekinge_vfinal
 
Java basics
Java basicsJava basics
Java basics
 
An introduction to go programming language
An introduction to go programming languageAn introduction to go programming language
An introduction to go programming language
 
Sylvain Bellemare Resume
Sylvain Bellemare ResumeSylvain Bellemare Resume
Sylvain Bellemare Resume
 
Robotics, Search and AI with Solr, MyRobotLab, and Deeplearning4j
Robotics, Search and AI with Solr, MyRobotLab, and Deeplearning4jRobotics, Search and AI with Solr, MyRobotLab, and Deeplearning4j
Robotics, Search and AI with Solr, MyRobotLab, and Deeplearning4j
 
The Intersection of Robotics, Search and AI with Solr, MyRobotLab, and Deep L...
The Intersection of Robotics, Search and AI with Solr, MyRobotLab, and Deep L...The Intersection of Robotics, Search and AI with Solr, MyRobotLab, and Deep L...
The Intersection of Robotics, Search and AI with Solr, MyRobotLab, and Deep L...
 
Town Hall - Business Implications of Open Source OSGi Implementations - BJ Ha...
Town Hall - Business Implications of Open Source OSGi Implementations - BJ Ha...Town Hall - Business Implications of Open Source OSGi Implementations - BJ Ha...
Town Hall - Business Implications of Open Source OSGi Implementations - BJ Ha...
 
Craft of coding
Craft of codingCraft of coding
Craft of coding
 
Intro
IntroIntro
Intro
 
Intro
IntroIntro
Intro
 
Programming Languages #devcon2013
Programming Languages #devcon2013Programming Languages #devcon2013
Programming Languages #devcon2013
 
Applications of Large Language Models in Materials Discovery and Design
Applications of Large Language Models in Materials Discovery and DesignApplications of Large Language Models in Materials Discovery and Design
Applications of Large Language Models in Materials Discovery and Design
 

Mehr von Alexandre Masselot

Offshoring software development in Switzerland: You can do it
Offshoring software development in Switzerland: You can do itOffshoring software development in Switzerland: You can do it
Offshoring software development in Switzerland: You can do itAlexandre Masselot
 
Dev Wednesday - Swiss Transport in Real Time: Tribulations in the Big Data Stack
Dev Wednesday - Swiss Transport in Real Time: Tribulations in the Big Data StackDev Wednesday - Swiss Transport in Real Time: Tribulations in the Big Data Stack
Dev Wednesday - Swiss Transport in Real Time: Tribulations in the Big Data StackAlexandre Masselot
 
Swiss Transport in Real Time: Tribulations in the Big Data Stack
Swiss Transport in Real Time: Tribulations in the Big Data StackSwiss Transport in Real Time: Tribulations in the Big Data Stack
Swiss Transport in Real Time: Tribulations in the Big Data StackAlexandre Masselot
 

Mehr von Alexandre Masselot (6)

Offshoring software development in Switzerland: You can do it
Offshoring software development in Switzerland: You can do itOffshoring software development in Switzerland: You can do it
Offshoring software development in Switzerland: You can do it
 
Dev Wednesday - Swiss Transport in Real Time: Tribulations in the Big Data Stack
Dev Wednesday - Swiss Transport in Real Time: Tribulations in the Big Data StackDev Wednesday - Swiss Transport in Real Time: Tribulations in the Big Data Stack
Dev Wednesday - Swiss Transport in Real Time: Tribulations in the Big Data Stack
 
Swiss Transport in Real Time: Tribulations in the Big Data Stack
Swiss Transport in Real Time: Tribulations in the Big Data StackSwiss Transport in Real Time: Tribulations in the Big Data Stack
Swiss Transport in Real Time: Tribulations in the Big Data Stack
 
groovy & grails - lecture 8
groovy & grails - lecture 8groovy & grails - lecture 8
groovy & grails - lecture 8
 
groovy & grails - lecture 7
groovy & grails - lecture 7groovy & grails - lecture 7
groovy & grails - lecture 7
 
groovy & grails - lecture 4
groovy & grails - lecture 4groovy & grails - lecture 4
groovy & grails - lecture 4
 

Kürzlich hochgeladen

My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
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
 
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
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
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 AutomationSafe Software
 
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
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
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
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
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
 
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
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
[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.pdfhans926745
 

Kürzlich hochgeladen (20)

My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
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
 
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
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
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
 
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
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
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
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
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
 
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
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
[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
 

groovy & grails - lecture 1

  • 1. Perl: Efficiency Oriented Programming Lecture 1 Master Proteomics & Bioinformatics - University of Geneva Alexandre Masselot - summer 2011
  • 2. ?EOP : goal of the course • Biological experiments produce huge amount of data (proteomics => TB)
  • 3. ?EOP : goal of the course • Biological experiments produce huge amount of data (proteomics => TB) • Excel/mouse data handling is the best path to psychiatric hospital
  • 4. ?EOP : goal of the course • Biological experiments produce huge amount of data (proteomics => TB) • Excel/mouse data handling is the best path to psychiatric hospital • Powerful computers (or even small clusters) are becoming more affordable
  • 5. ?EOP : goal of the course • Biological experiments produce huge amount of data (proteomics => TB) • Excel/mouse data handling is the best path to psychiatric hospital • Powerful computers (or even small clusters) are becoming more affordable • Programming languages and frameworks more popular (scripts, web applications, relational databases)
  • 6. ?EOP : goal of the course • Biological experiments produce huge amount of data (proteomics => TB) • Excel/mouse data handling is the best path to psychiatric hospital • Powerful computers (or even small clusters) are becoming more affordable • Programming languages and frameworks more popular (scripts, web applications, relational databases) • Code is shared (open source culture)
  • 7. ?EOP : goal of the course • Biological experiments produce huge amount of data (proteomics => TB) • Excel/mouse data handling is the best path to psychiatric hospital • Powerful computers (or even small clusters) are becoming more affordable • Programming languages and frameworks more popular (scripts, web applications, relational databases) • Code is shared (open source culture) Goal of the this course: make you efficient in the lab, with a computer at you fingertips
  • 8. ?EOP: topics of this course • Fall: Programming for Bioinformatics I for programming fundamentals
  • 9. ?EOP: topics of this course • Fall: Programming for Bioinformatics I for programming fundamentals • Spring: get some independence and meet real life challenges
  • 10. ?EOP: topics of this course • Fall: Programming for Bioinformatics I for programming fundamentals • Spring: get some independence and meet real life challenges • By the end, you should be able to • deploy your own development environment, • write scripts to analyze data and give the scientist an answer, • interact with other libraries, • build a web application, • build a relational DB model, • have basic skills in software development methodologies.
  • 11. ?EOP: topics of this course • Fall: Programming for Bioinformatics I for programming fundamentals • Spring: get some independence and meet real life challenges • By the end, you should be able to • deploy your own development environment, • write scripts to analyze data and give the scientist an answer, • interact with other libraries, • build a web application, • build a relational DB model, • have basic skills in software development methodologies. Just another tool in the box (yet damned powerful!)
  • 12. Efficiency Oriented Programming • Efficiency = Result/Time
  • 13. Efficiency Oriented Programming • Efficiency = Result/Time • Time: • time spent in programming the tool • time invested in learning the technology • not only computing time (although it is important)
  • 14. Efficiency Oriented Programming • Efficiency = Result/Time • Time: • time spent in programming the tool • time invested in learning the technology • not only computing time (although it is important) • Result: • complexity of the produced code • quality (functionalities, evolution etc.) • versatility
  • 15. EOP: why not Perl (this year)? • “Perl is a language to get your job done” Larry Wall
  • 16. EOP: why not Perl (this year)? • “Perl is a language to get your job done” Larry Wall • To maximize efficiency, Perl has been perfect candidate: • from eighties until now, a constant evolution, • rich and direct syntax, • dynamic community: >7’000 of public modules, often maintained, hight quality (http://search.cpan.org), • free (speech & beer), • almost 100 OS supported (http://www.cpan.org/ports/index.html), • perl is anarchist (and even poetic).
  • 17. EOP: why not Perl (this year)? • Language are species following evolution patterns (no creationism)
  • 18. EOP: why not Perl (this year)? • Language are species following evolution patterns (no creationism) • Thousands of languages exist (http://en.wikipedia.org/wiki/ List_of_programming_languages)
  • 19. EOP: why not Perl (this year)? • Language are species following evolution patterns (no creationism) • Thousands of languages exist (http://en.wikipedia.org/wiki/ List_of_programming_languages) • Recent trends for high level languages: • syntax become more compact (and efficient), • scripting is not incompatible with classic “structured” code (writing and running), • features, culture: cross-over between languages, • language cooperation becomes a standard (parrot, .net)
  • 20. EOP: why not Perl (this year)? For general purpose bioinformatics, several nominees:
  • 21. EOP: why not Perl (this year)? For general purpose bioinformatics, several nominees: • perl 5 : a historical choice, anchored in the community (bioperl etc.),
  • 22. EOP: why not Perl (this year)? For general purpose bioinformatics, several nominees: • perl 5 : a historical choice, anchored in the community (bioperl etc.), • java : structured, safe, heavy,
  • 23. EOP: why not Perl (this year)? For general purpose bioinformatics, several nominees: • perl 5 : a historical choice, anchored in the community (bioperl etc.), • java : structured, safe, heavy, • python : a versatile language, allying strength from scripts up to object- oriented models
  • 24. EOP: why not Perl (this year)? For general purpose bioinformatics, several nominees: • perl 5 : a historical choice, anchored in the community (bioperl etc.), • java : structured, safe, heavy, • python : a versatile language, allying strength from scripts up to object- oriented models • perl 6 (rakudo) : a total re-designing of perl, by its original authors, a very appealing option, but not yet a standard
  • 25. EOP: why not Perl (this year)? For general purpose bioinformatics, several nominees: • perl 5 : a historical choice, anchored in the community (bioperl etc.), • java : structured, safe, heavy, • python : a versatile language, allying strength from scripts up to object- oriented models • perl 6 (rakudo) : a total re-designing of perl, by its original authors, a very appealing option, but not yet a standard • groovy (+grails) : a recent (2003) initiative, with powerful scripting manners & tight links with java; grails offer a very light (although powerful) framework for web development, RDBMS and Spring integration
  • 26. EOP: why not Perl (this year)? There is no “one best language” for everyone and all situations, but our winner (this year) is: •compact syntax, either “free” or “controlled”, structured or object-oriented, •modern web applications •data naturally stored in relational database •good software development practices are encouraged (agile) •powerful IDE available
  • 27. EOP: why not Perl (this year)? There is no “one best language” for everyone and all situations, but our winner (this year) is: Groovy and Grails •compact syntax, either “free” or “controlled”, structured or object-oriented, •modern web applications •data naturally stored in relational database •good software development practices are encouraged (agile) •powerful IDE available
  • 28. EOP: why not Perl (this year)? There is no “one best language” for everyone and all situations, but our winner (this year) is: Groovy and Grails •compact syntax, either “free” or “controlled”, structured or object-oriented,
  • 29. EOP: why not Perl (this year)? There is no “one best language” for everyone and all situations, but our winner (this year) is: Groovy and Grails •compact syntax, either “free” or “controlled”, structured or object-oriented, •modern web applications
  • 30. EOP: why not Perl (this year)? There is no “one best language” for everyone and all situations, but our winner (this year) is: Groovy and Grails •compact syntax, either “free” or “controlled”, structured or object-oriented, •modern web applications •data naturally stored in relational database
  • 31. EOP: why not Perl (this year)? There is no “one best language” for everyone and all situations, but our winner (this year) is: Groovy and Grails •compact syntax, either “free” or “controlled”, structured or object-oriented, •modern web applications •data naturally stored in relational database •good software development practices are encouraged (agile)
  • 32. EOP: why not Perl (this year)? There is no “one best language” for everyone and all situations, but our winner (this year) is: Groovy and Grails •compact syntax, either “free” or “controlled”, structured or object-oriented, •modern web applications •data naturally stored in relational database •good software development practices are encouraged (agile) •powerful IDE available
  • 33. Groovy+grails : setup • integrated solution: • install java 6 (sun) sdk • install SpringSource Tool Suite (eclipse) http://www.springsource.com/ products/sts • start STS • help>dashboard, • tab extensions • install groovy and grails • Launch trials environments, with either: • groovysh • groovyConsole
  • 34. Groovy: a first script + string evaluation
  • 35. Groovy: a first script + string evaluation Subroutines calls, parenthesis and ; println (“hello world”); //java-like println “hello world”; //end line with ; println “hello world” //slim fast
  • 36. Groovy: a first script + string evaluation Subroutines calls, parenthesis and ; println (“hello world”); //java-like println “hello world”; //end line with ; println “hello world” //slim fast String evaluation /* double quotes allow string evaluation single quote no evaluation looks perlish, huh? */ def name=‘Mickey Mouse’ println “hello $name” //=> hello Mickey Mouse println ‘hello ‘+name //=> hello Mickey Mouse println ‘hello $name‘ //=> hello $name
  • 37. Defining variable: to type or not to type? It is possible to define variable, without specifying their type def x= 42.4 //dynamic type variable x, //initialized with a float x= ‘ola chico‘ //a string is assigned to the same x x=[‘aa’, ‘bb’, ‘c’] //now an array...
  • 38. Defining variable: to type or not to type? It is possible to define variable, without specifying their type def x= 42.4 //dynamic type variable x, //initialized with a float x= ‘ola chico‘ //a string is assigned to the same x x=[‘aa’, ‘bb’, ‘c’] //now an array... It is generally better to assign a type to a variable (security & readability) int x=42 //static type set to integer x=12.34 // => x=12 (implicit conversion) x=[1, 1, 2, 3, 5] // => error: cannot convert // (GroovyCastException)
  • 39. More on implicit casting Whenever possible groovy compiler tries to cast variable.
  • 40. More on implicit casting Whenever possible groovy compiler tries to cast variable. Why is the following correct (from the compiler point of view)? String x=‘ola chico’ x=23.14 x=[‘a’, ‘b’, ‘c’]
  • 41. More on implicit casting Whenever possible groovy compiler tries to cast variable. Why is the following correct (from the compiler point of view)? String x=‘ola chico’ x=23.14 x=[‘a’, ‘b’, ‘c’] To know the class (the type) of a variable println x.class
  • 42. More on implicit casting Whenever possible groovy compiler tries to cast variable. Why is the following correct (from the compiler point of view)? String x=‘ola chico’ x=23.14 x=[‘a’, ‘b’, ‘c’] To know the class (the type) of a variable println x.class What will produce the following statements? int x=1 println x+2 String y=1 println y+2
  • 43. And even more on type conversion Casting can be called explicitly (TIMTOWTDI) def my_str=‘123’ int x=my_str.toInteger()+10000 x=Integer.parseInt(my_str) x=my_str as Integer x=my_str //error!!!
  • 44. And even more on type conversion Casting can be called explicitly (TIMTOWTDI) def my_str=‘123’ int x=my_str.toInteger()+10000 x=Integer.parseInt(my_str) x=my_str as Integer x=my_str //error!!! Or back to String String other_str=x.toString() other_str=x as String other_str=’’ + x //’’ force the casting other_str=”$x”
  • 45. Test the parameters type Imagine we have not statically defined a variable type (argument to function) x=23 if(x in Integer){ // true ... } 23.45 in Double // false 23.45D in Double // true 23.45 in BigDecimal // true ‘pipo’ in String // true
  • 46. Test the parameters type Imagine we have not statically defined a variable type (argument to function) x=23 if(x in Integer){ // true ... } 23.45 in Double // false 23.45D in Double // true 23.45 in BigDecimal // true ‘pipo’ in String // true More generally, we can detect numerical values x in Number
  • 47. Test the parameters type Imagine we have not statically defined a variable type (argument to function) x=23 if(x in Integer){ // true ... } 23.45 in Double // false 23.45D in Double // true 23.45 in BigDecimal // true ‘pipo’ in String // true More generally, we can detect numerical values x in Number and later x in Map; x in List
  • 49. Some available scalar types Most commons types int //or Integer double //or Double String boolean //boolean b=true
  • 50. Some available scalar types Most commons types int //or Integer double //or Double String boolean //boolean b=true And more char //single character (‘a’) byte //8 bit signed integer 0..255 short //16 bit signed integer long //64 bit signed integer (123L) float //32 bit floating point (1.23F) double //64 bit floating point (1.23D) BigInteger //large integer (123G) BigDecimal //large float (1.23G)
  • 51. Primitive type or Object? In java, there is a distinction between int and Integer
  • 52. Primitive type or Object? In java, there is a distinction between int and Integer In groovy, everything is Object
  • 53. Primitive type or Object? In java, there is a distinction between int and Integer In groovy, everything is Object So we can call methods String name=‘Mickey Mouse’ println name.length() // => 12 println name.substring(0,4) // => ‘Mick’ println name.endsWith(‘use’) // => true
  • 54. Primitive type or Object? In java, there is a distinction between int and Integer In groovy, everything is Object So we can call methods String name=‘Mickey Mouse’ println name.length() // => 12 println name.substring(0,4) // => ‘Mick’ println name.endsWith(‘use’) // => true “Hidden” methods println name[5] // name.getAt(5) println name[3..5] // name.substring(3,6)
  • 55. Primitive type or Object? In java, there is a distinction between int and Integer In groovy, everything is Object So we can call methods String name=‘Mickey Mouse’ println name.length() // => 12 println name.substring(0,4) // => ‘Mick’ println name.endsWith(‘use’) // => true “Hidden” methods println name[5] // name.getAt(5) println name[3..5] // name.substring(3,6) The total list: in groovyConsole, launch Inspector on last evaluated variable with ctrl-I -> methods tab (or http://groovy.codehaus.org/groovy- jdk/, or google)
  • 56. Operators Some common operations can be written via operators a+b a.plus(b) a/b a.div(b) // 16/3 -> 5.33333333 a%b a.mod(b) // 16%3 -> 1 a++ a.next() // difference with ++a ? a**b a.power(b) // 15**2 -> 225 a>>b a.rightShift(b) a|b a.or(b) // 5|6 -> 7 (101|110 -> 111)
  • 57. Operators Some common operations can be written via operators a+b a.plus(b) a/b a.div(b) // 16/3 -> 5.33333333 a%b a.mod(b) // 16%3 -> 1 a++ a.next() // difference with ++a ? a**b a.power(b) // 15**2 -> 225 a>>b a.rightShift(b) a|b a.or(b) // 5|6 -> 7 (101|110 -> 111) Later, we’ll see how these operators can be overridden
  • 58. Exercise 1 : string for fun • Initialize a String with ‘my funny valentine’ • what is the length of this string? • assign a boolean to store if ‘fun’ is a substring • replace ‘funny’ by ‘happy’ • convert this string to upper case • split this string into a list, with one word per element ([‘MY’, ‘HAPPY’, ‘VALENTINE’]) • reverse this list ([‘VALENTINE’, ‘HAPPY’, ‘MY’])
  • 59. Exercise 2 : integer and bit representation • Touching the integer limit • initialize an integer with 123 • what is the maximum value for Integer? the minimum value? • replace it by itself to the power 3 • do the same thing once more. What do you observe? • bit representation • initialize an integer with 103 (binary 1100111) • shift the binary representation by two steps on the right. What operation is it equivalent two? • shift it back to the left. What do you observe?
  • 60. static method Method can be bound to a object instance, e.g. : String name=‘pipo’; name.length() They can also be bound to the class itself: String str=‘23.45’ double b=Double.parseDouble(str) // 23.45D Integer.bitCount(103) // 5
  • 61. Other classes? Beside intrinsic scalar value, there are millions of classes defined, and thousands of them are available more or less by default. Example : Random Random my_rnd // -> null my_rnd=new Random() // not null anymore println my_rnd.nextDouble() // pseudo random in [0,1[ 10.times{println my_rnd.nextBoolean()}
  • 62. Exercise 3 : going random • More with Random class • is it possible for your computer to draw random numbers? • what happen if your print my_rnd? • draw 6 number with a gaussian distribution (µ=0, σ2=1) • draw 6 number with a gaussian distribution (µ=170, σ2=25) • draw a classic dice 10 times • draw the sum of two dice 10 times • what happen is you reproduce the same experiment many times? is the results the same? how could have reproducible results?
  • 63. Exercise 4 : have a date • Using the Date class • assign to a variable the current date • print the just the second (60 seconds per minute) value of the current date • assign your variable with one week ago • get the month of one week ago as an integer • is now after yesterday? (this is a boolean question, not an existentialist one) • is now equals to now? always? (how date is coded?)
  • 64. Collective types : List & Map Dynamic typing is still possible
  • 65. Collective types : List & Map Dynamic typing is still possible For List (or array) def fibonacci=[1,1,2,3,5,8,13] fibonacci=[] //empty list
  • 66. Collective types : List & Map Dynamic typing is still possible For List (or array) def fibonacci=[1,1,2,3,5,8,13] fibonacci=[] //empty list Or Map (or HashMap, or associative array) def medals = [us:36, germany:30, canada:26, norway:23] medals = [:] //empty map def medalsDetails=[ us:[gold:9, silver:15, bronze:13], germany:[gold:10, silver:13, bronze:7], canada:[gold:14, silver:7, bronze:5], norway:[gold:9, silver:8, bronze:6], ]
  • 67. Collective types (cont’d) Or static type List<Integer> fibonacci Map<String, Integer> medals Map<String, Map<String, Integer>> medal_details
  • 68. Collective types (cont’d) Or static type List<Integer> fibonacci Map<String, Integer> medals Map<String, Map<String, Integer>> medal_details List access fibonacci[0] // first element fibonacci[-1] // fibonacci[fibonacci.size()-1] fibonacci[2..4] // [2, 3, 5]
  • 69. Collective types (cont’d) Or static type List<Integer> fibonacci Map<String, Integer> medals Map<String, Map<String, Integer>> medal_details List access fibonacci[0] // first element fibonacci[-1] // fibonacci[fibonacci.size()-1] fibonacci[2..4] // [2, 3, 5] Map access medals.canada == medals[‘canada’] medal_details.norway.gold == medals_details[‘norway’][‘gold’]
  • 71. Collective types (cont’d) Add or modify fibonacci[7]=21 //add a new element medals.canada.gold=97 //modify medals.us.gold-- //anti doping control...
  • 72. Collective types (cont’d) Add or modify fibonacci[7]=21 //add a new element medals.canada.gold=97 //modify medals.us.gold-- //anti doping control... Other methods fibonnacci.size() medal_details.germany.size() medal_details.remove(‘germany’)
  • 73. Collective types (cont’d) Add or modify fibonacci[7]=21 //add a new element medals.canada.gold=97 //modify medals.us.gold-- //anti doping control... Other methods fibonnacci.size() medal_details.germany.size() medal_details.remove(‘germany’) Operators are also available fibonacci << 34 //push 34 at the end fibonacci - 1 //remove all values 1
  • 74. Exercise 5: arrays • fills an array with a few values • what is the difference between array+12, array<<12 and array+=12? • print the sum, the maximum value • store the reversed array into another one • sort the array with increasing values. With decreasing values. • A last little one • remember the 10.times{...} syntax we saw previously • put [1, 1] in a fibo array, then fill this array with the 20 next value os a Fibonacci suite, where fibo[n+1]=fibo[n]+fibo[n-1]

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. perl 5 was getting stucked by legacy weight %,@,$, $/, $!, @_, $$ and incompressible (back compatibility choices)\n
  16. perl 5 was getting stucked by legacy weight %,@,$, $/, $!, @_, $$ and incompressible (back compatibility choices)\n
  17. \n
  18. \n
  19. \n
  20. rakudo is a total rewriting of perl, as far from perl perl than groovy (almost)\n
  21. rakudo is a total rewriting of perl, as far from perl perl than groovy (almost)\n
  22. rakudo is a total rewriting of perl, as far from perl perl than groovy (almost)\n
  23. rakudo is a total rewriting of perl, as far from perl perl than groovy (almost)\n
  24. rakudo is a total rewriting of perl, as far from perl perl than groovy (almost)\n
  25. rakudo is a total rewriting of perl, as far from perl perl than groovy (almost)\n
  26. At GroovyOne 2004&amp;#x2014;a gathering of Groovy developers in London&amp;#x2014;James Strachan gave a keynote address telling the story of how he arrived at the idea of inventing Groovy.\nSome time ago, he and his wife were waiting for a late plane. While she went shopping, he visited an Internet caf&amp;#xE9; and spontaneously decided to go to the Python web site and study the language. In the course of this activity, he became more and more intrigued. Being a seasoned Java programmer, he recognized that his home language lacked many of the interesting and useful features Python had invented, such as native language support for common datatypes in an expressive syntax and, more important, dynamic behavior. The idea was born to bring such features to Java.\n\nit is important to note that developing in a language is totally portable to another (major)\ngap between perl -&gt; groovy small\nyou will use other languages during your life\n\n
  27. At GroovyOne 2004&amp;#x2014;a gathering of Groovy developers in London&amp;#x2014;James Strachan gave a keynote address telling the story of how he arrived at the idea of inventing Groovy.\nSome time ago, he and his wife were waiting for a late plane. While she went shopping, he visited an Internet caf&amp;#xE9; and spontaneously decided to go to the Python web site and study the language. In the course of this activity, he became more and more intrigued. Being a seasoned Java programmer, he recognized that his home language lacked many of the interesting and useful features Python had invented, such as native language support for common datatypes in an expressive syntax and, more important, dynamic behavior. The idea was born to bring such features to Java.\n\nit is important to note that developing in a language is totally portable to another (major)\ngap between perl -&gt; groovy small\nyou will use other languages during your life\n\n
  28. At GroovyOne 2004&amp;#x2014;a gathering of Groovy developers in London&amp;#x2014;James Strachan gave a keynote address telling the story of how he arrived at the idea of inventing Groovy.\nSome time ago, he and his wife were waiting for a late plane. While she went shopping, he visited an Internet caf&amp;#xE9; and spontaneously decided to go to the Python web site and study the language. In the course of this activity, he became more and more intrigued. Being a seasoned Java programmer, he recognized that his home language lacked many of the interesting and useful features Python had invented, such as native language support for common datatypes in an expressive syntax and, more important, dynamic behavior. The idea was born to bring such features to Java.\n\nit is important to note that developing in a language is totally portable to another (major)\ngap between perl -&gt; groovy small\nyou will use other languages during your life\n\n
  29. At GroovyOne 2004&amp;#x2014;a gathering of Groovy developers in London&amp;#x2014;James Strachan gave a keynote address telling the story of how he arrived at the idea of inventing Groovy.\nSome time ago, he and his wife were waiting for a late plane. While she went shopping, he visited an Internet caf&amp;#xE9; and spontaneously decided to go to the Python web site and study the language. In the course of this activity, he became more and more intrigued. Being a seasoned Java programmer, he recognized that his home language lacked many of the interesting and useful features Python had invented, such as native language support for common datatypes in an expressive syntax and, more important, dynamic behavior. The idea was born to bring such features to Java.\n\nit is important to note that developing in a language is totally portable to another (major)\ngap between perl -&gt; groovy small\nyou will use other languages during your life\n\n
  30. At GroovyOne 2004&amp;#x2014;a gathering of Groovy developers in London&amp;#x2014;James Strachan gave a keynote address telling the story of how he arrived at the idea of inventing Groovy.\nSome time ago, he and his wife were waiting for a late plane. While she went shopping, he visited an Internet caf&amp;#xE9; and spontaneously decided to go to the Python web site and study the language. In the course of this activity, he became more and more intrigued. Being a seasoned Java programmer, he recognized that his home language lacked many of the interesting and useful features Python had invented, such as native language support for common datatypes in an expressive syntax and, more important, dynamic behavior. The idea was born to bring such features to Java.\n\nit is important to note that developing in a language is totally portable to another (major)\ngap between perl -&gt; groovy small\nyou will use other languages during your life\n\n
  31. At GroovyOne 2004&amp;#x2014;a gathering of Groovy developers in London&amp;#x2014;James Strachan gave a keynote address telling the story of how he arrived at the idea of inventing Groovy.\nSome time ago, he and his wife were waiting for a late plane. While she went shopping, he visited an Internet caf&amp;#xE9; and spontaneously decided to go to the Python web site and study the language. In the course of this activity, he became more and more intrigued. Being a seasoned Java programmer, he recognized that his home language lacked many of the interesting and useful features Python had invented, such as native language support for common datatypes in an expressive syntax and, more important, dynamic behavior. The idea was born to bring such features to Java.\n\nit is important to note that developing in a language is totally portable to another (major)\ngap between perl -&gt; groovy small\nyou will use other languages during your life\n\n
  32. At GroovyOne 2004&amp;#x2014;a gathering of Groovy developers in London&amp;#x2014;James Strachan gave a keynote address telling the story of how he arrived at the idea of inventing Groovy.\nSome time ago, he and his wife were waiting for a late plane. While she went shopping, he visited an Internet caf&amp;#xE9; and spontaneously decided to go to the Python web site and study the language. In the course of this activity, he became more and more intrigued. Being a seasoned Java programmer, he recognized that his home language lacked many of the interesting and useful features Python had invented, such as native language support for common datatypes in an expressive syntax and, more important, dynamic behavior. The idea was born to bring such features to Java.\n\nit is important to note that developing in a language is totally portable to another (major)\ngap between perl -&gt; groovy small\nyou will use other languages during your life\n\n
  33. At GroovyOne 2004&amp;#x2014;a gathering of Groovy developers in London&amp;#x2014;James Strachan gave a keynote address telling the story of how he arrived at the idea of inventing Groovy.\nSome time ago, he and his wife were waiting for a late plane. While she went shopping, he visited an Internet caf&amp;#xE9; and spontaneously decided to go to the Python web site and study the language. In the course of this activity, he became more and more intrigued. Being a seasoned Java programmer, he recognized that his home language lacked many of the interesting and useful features Python had invented, such as native language support for common datatypes in an expressive syntax and, more important, dynamic behavior. The idea was born to bring such features to Java.\n\nit is important to note that developing in a language is totally portable to another (major)\ngap between perl -&gt; groovy small\nyou will use other languages during your life\n\n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. put a upperacase L (not l/one)\nBigDecimal &amp;&amp; BigInteger\nmix from java and groovy\n
  50. put a upperacase L (not l/one)\nBigDecimal &amp;&amp; BigInteger\nmix from java and groovy\n
  51. same kind of direction with perl 6\n
  52. same kind of direction with perl 6\n
  53. same kind of direction with perl 6\n
  54. same kind of direction with perl 6\n
  55. same kind of direction with perl 6\n
  56. \n
  57. \n
  58. use def my_array\nmy_str=my_str.kkkkk\n
  59. i&gt;&gt;1\n
  60. \n
  61. \n
  62. \n
  63. \n
  64. no quote compulsory\nend &amp;#x2018;,&amp;#x2019;\nplenty of similtudes between linear array and associative ones\n
  65. no quote compulsory\nend &amp;#x2018;,&amp;#x2019;\nplenty of similtudes between linear array and associative ones\n
  66. no quote compulsory\nend &amp;#x2018;,&amp;#x2019;\nplenty of similtudes between linear array and associative ones\n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n