bp203 limitless languages

46
© 2013 IBM Corporation BP203 Limitless Languages In The IBM Social Stack Mark Myers | London Developer Coop

Upload: mark-myers

Post on 28-Nov-2014

817 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: BP203 limitless languages

© 2013 IBM Corporation

BP203 Limitless Languages In The IBM Social StackMark Myers | London Developer Coop

Page 2: BP203 limitless languages

© 2013 IBM Corporation

Agenda

Overview

The JVM

Programming paradigms

JVM Alternative Languages

Scala

Existing Code

Working With Domino

Page 3: BP203 limitless languages

© 2013 IBM Corporation

This presentation skims over the hard work and dedication of thousands of developers passions, any

generalizations or sweeping statements are not intended to give offense, corrections are gratefully

received.

But most of all please interrupt!

Don't wait till the end of the session

Page 4: BP203 limitless languages

© 2013 IBM Corporation

Who Am I?

MarkMember of the London Developer Co-op (londc.com)Developer from a support background12+ years on Domino, 15+ years in ITSpeaker at 2x Lotuspheres, 3x UKLUGs, 1x ILUGTwitter: @stickfight, Skype: Stickfight, Blog: stickfight.co.uk

Page 5: BP203 limitless languages

© 2013 IBM Corporation

Tools We Used

IBM® Lotus® Notes® version 8.5.3

IBM Lotus Domino® version 8.5.3

Eclipse 3.7 (indigo)

Scala plug-in 29

Various other software tools mentioned throughout this presentation

Most code and techniques we talk about should be applicable to other versions of Notes/Domino/Windows too

Page 6: BP203 limitless languages

© 2013 IBM Corporation

Limitless Languages?

Limitless Languages=

Alternative JVM Languages

Alternative JVM Languages =

Any Language that Compiles to Java ByteCode

Page 7: BP203 limitless languages

© 2013 IBM Corporation

Why this Session?

Existing and Traditional IT cant keep up with the speed of green field and start-up development

You need little or no Investment to get started and you don’t have to throw your existing Java stuff away

Its not all up to IBM to keep us up to date.

Never get left behind again

Its simple and helps your CV

Its Cool

Nearly all of you are already using an IBM alternative JVM Language (sort of)

Page 8: BP203 limitless languages

© 2013 IBM Corporation

The JVM

The JVM (Java Virtual Machine) runs Java ByteCode

It’s Increased in reliability and performance since 1996

All variations of the JVM guarantees binary compatibility

Java ByteCode does NOT have to have been generated from Java, any Language that compiles down to ByteCode can run on the JVM

We will take a look at the Pack Leaders

After some boring stuff

Page 9: BP203 limitless languages

© 2013 IBM Corporation

Dynamic Vs Static typed: Dynamic

In a dynamically typed language, every variable name is (unless it is null) bound only to an object.

Names are bound to objects at execution time by means of assignment statements, and it is possible to bind a name to objects of different types during the execution of the program.

LotusNotes = 8.5.4LotusNotes = “Awesome”

This does not cause an error, unless you for get which type the variable currently is

Page 10: BP203 limitless languages

© 2013 IBM Corporation

Dynamic Vs Static typed: Static

In a statically typed language, every variable name is bound both to a type (at compile time) and to an object.

Once a variable name has been bound to a type (that is, declared) it can be bound (via an assignment statement) only to objects of that type; it cannot ever be bound to an object of a different type. An attempt to bind the name to an object of the wrong type will raise a type exception.

Page 11: BP203 limitless languages

© 2013 IBM Corporation

Functional Programming

“functional programming is a programming paradigm that treats computations as the evaluation of mathematical functions and avoids state and mutable data.”

Think of the states a document goes through

An object which can be modified after it is created

-Wikipedia

A method of coding like Object Oriented Programming

Page 12: BP203 limitless languages

© 2013 IBM Corporation

Functional Programming

Grants us greater modularity

Means code reuse and maintenance is easier

Immutable objects allows data to be accessed concurrently from multiple threads without locking

Why?

Page 13: BP203 limitless languages

© 2013 IBM Corporation

JVM Alternative Languages

An agile and dynamic language

A Core of Java with lots of features inspired by languages like Python, Ruby and Smalltalk

Very small-zero learning curve

provides the ability to statically type check and statically compile your code ( good for speed)

Seamlessly integrates with all existing Java classes and libraries i.e. unlike a lot of other Alternative JVM languages you can include Java code in the same file as Groovy

One of Groovy's top companions is Grails, a high-productivity web development environment inspired by Ruby on Rails. not much use for domino designers but fab if you are having to build your own UI (used by sky)

Page 14: BP203 limitless languages

© 2013 IBM Corporation

JVM Alternative Languages

A general-purpose dynamic programming language

Is a dialect of Lisp

Also runs on Microsoft's Common Language Runtime and JavaScript engines.

Used by Citigroup, Typewire, Tianya (largest forum in china), AltLaw.org (one of the first production websites to use it)

Page 15: BP203 limitless languages

© 2013 IBM Corporation

JVM Alternative Languages

JRuby is an implementation of the Ruby programming language

JRuby is held to be faster than Ruby for most implementations (once loading the JVM is taken into consideration)

Jruby is called from Java using either the JSR 223 Scripting for Java 6 or the Apache Bean Scripting framework

LinkedIn uses JRuby for its front end

Page 16: BP203 limitless languages

© 2013 IBM Corporation

JVM Alternative Languages

Jython the successor of JPython is an implementation of Python

Supports nearly all of the Core Python standard library modules and all Java Libs

Jython programs cannot currently use CPython extension modules written in C (although this is supposedly coming)

Wsadmin (webSphere Server command shell) and Bea WebLogic use Jython as their scripting language

Page 17: BP203 limitless languages

© 2013 IBM Corporation

JVM Alternative Languages

This is the Actual Logo

Rhino

Kotlin

Page 18: BP203 limitless languages

© 2013 IBM Corporation

Scala

Stands for “scalable language.” named for its ability to grow with user needs

Designed by Martin Odersky, creator of Pizza (the forerunner of Java generics), author of GJ compiler

"... if someone had shown me the Programming in Scala book ... back in 2003, I'd probably have never created Groovy."

- James Strachan, July 2009

Page 19: BP203 limitless languages

© 2013 IBM Corporation

Scala

Under active development at Ecole Polytechnique Fédérale de Lausanne (EPFL) and in the open source community, also nicely funded by none corporations.

Programming in Scala second edition by Martin Odersky, Lex Spoon and Bill Venners

http://www.artima.com/shop/programming_in_scala_2ed

Page 20: BP203 limitless languages

© 2013 IBM Corporation

Who Uses Scala?

LinkedIn

Twitter

FourSquare

Sony

Siemens

Électricité de France (EDF)

The Guardian

Xerox

IBM knows about it too, see Adrian Spender excellent presentation at http://www.slideshare.net/aspender/scala-introduction-6963846

And from IBM them selveshttp://www.ibm.com/developerworks/training/kp/j-kp-altlang/index.html

Page 21: BP203 limitless languages

© 2013 IBM Corporation

Why?: Shorter / Less Boiler

// this is Javaclass MyClass {

private int index;private String name;

public MyClass(int index, String name) {this.index = index;this.name = name;}

}

// this is Scalaclass MyClass(index: Int, name: String)

http://stackoverflow.com/questions/2952732/samples-of-scala-and-java-code-where-scala-code-looks-simpler-has-fewer-lines for an extreme example

Page 22: BP203 limitless languages

© 2013 IBM Corporation

Why?: Type Inference

Java – Static Type Good – Catch type errors BEFORE you runBAD – Verbose, bulky

Scripting LanguagesGood – Short , easy to codeBAD – You get to catch your errors in test/production

Scala (with Type Inference)Good – Catch Type Errors BEFORE you runGood – Short , easy to code

Page 23: BP203 limitless languages

© 2013 IBM Corporation

Why?: Type Inference

val cost = new BigInteger("99999999")var stringcost = List("nine", "nine")Stringcost += cost

But Compiler still says no, when you assign the wrong type

You don’t have to assign a type here, it infers this from type of

data you try and put in the variable

Page 24: BP203 limitless languages

© 2013 IBM Corporation

Why?: Unified types

All types are objects. (Int, Boolean,Double etc etc)

No more primitives ( no more double and Double)

All Mapped Automatically for integration with Java

All functions get the nice add-ons like toInt and toFloat for String

Page 25: BP203 limitless languages

© 2013 IBM Corporation

Why?: Pattern matching

Not Limited to primitives

You can even call Class and Functions :-)

Page 26: BP203 limitless languages

© 2013 IBM Corporation

Why?: Actors

Concurrency Made simple

Designed to get over the fundamental problems with Javas shared data and locks model

It is a share-nothing model all communication is doing by messaging

An actor is a bit like a thread with a mailbox for receiving messages

Page 27: BP203 limitless languages

© 2013 IBM Corporation

Why?: Actor example

Page 28: BP203 limitless languages

© 2013 IBM Corporation

Why?: Parallel Processing

How do you make this run in parallel?

Page 29: BP203 limitless languages

© 2013 IBM Corporation

Why?: Parallel Processing

Now running in parallel

Calling thread WAITS for completion of computation

2 CPU Machine = 2 items running in parallel

Page 30: BP203 limitless languages

© 2013 IBM Corporation

Sanity Warning! : Scalaz

A Plug in Library for Scala

An implementation of pure functional programming with very high-level abstractions represented by symbols

Awesomely powerful and concise but a steep learning curve unless you are familiar with the complexity and are dealing with things like Trading platforms

http://code.google.com/p/scalaz/

Danger Will Robinson

Page 31: BP203 limitless languages

© 2013 IBM Corporation

Sanity Warning! : Scalaz

:'-(

Page 32: BP203 limitless languages

© 2013 IBM Corporation

Cross Language Dependency

Existing Code

Page 33: BP203 limitless languages

© 2013 IBM Corporation

Cross Language DependencyAfter Inclusion of a new Scala Class

Page 34: BP203 limitless languages

© 2013 IBM Corporation

Installing

Scala has plug-ins for Eclipse, IntelliJIDEA and NetBeans ( http://www.scala-lang.org/node/91 )

I use http://scala-ide.org/ for the eclipse plug-in

Install Eclipse 3.6 (Helios) or Eclipse 3.7 (Indigo) and install as a standard plug-in site (http://download.scala-ide.org/releases-29/stable/site )

Restart and you’re done

Page 35: BP203 limitless languages

© 2013 IBM Corporation

Nice and Simple in Eclipse

Page 36: BP203 limitless languages

© 2013 IBM Corporation

Nice and Simple in Eclipse

Page 37: BP203 limitless languages

© 2013 IBM Corporation

Working in Domino

Copy these 3 files to your ..\jvm\lib\ext directory (they are about 9meg in total and cause a noticeable pause if in the agent)

Restart and you’re done

Page 38: BP203 limitless languages

© 2013 IBM Corporation

Working in Domino

Normal Java Class doing Stuff in Domino

Page 39: BP203 limitless languages

© 2013 IBM Corporation

Working in Domino

Scala Class, containing an Scala Object, calling that Java Class

Page 40: BP203 limitless languages

© 2013 IBM Corporation

Working in Domino

Export Class files to a Jar

Page 41: BP203 limitless languages

© 2013 IBM Corporation

Working in Domino

Import Jar file into normal Agent

Page 42: BP203 limitless languages

© 2013 IBM Corporation

Working in Domino

Calling the Scala Object from Within

a Java Agent

Page 43: BP203 limitless languages

© 2013 IBM Corporation

Working in Domino

Be Still my beating heart!!!

Page 44: BP203 limitless languages

© 2013 IBM Corporation

Questions?

Mark MyersLondon Developer [email protected]: @stickfight

Page 45: BP203 limitless languages

45 © 2013 IBM Corporation

Legal disclaimer• © IBM Corporation 2013. All Rights Reserved.

• The information contained in this publication is provided for informational purposes only. While efforts were made to verify the completeness and accuracy of the information contained in this publication, it is provided AS IS without warranty of any kind, express or implied. In addition, this information is based on IBM’s current product plans and strategy, which are subject to change by IBM without notice. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, this publication or any other materials. Nothing contained in this publication is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software.

• References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. Product release dates and/or capabilities referenced in this presentation may change at any time at IBM’s sole discretion based on market opportunities or other factors, and are not intended to be a commitment to future product or feature availability in any way. Nothing contained in these materials is intended to, nor shall have the effect of, stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results.

• Performance is based on measurements and projections using standard IBM benchmarks in a controlled environment. The actual throughput or performance that any user will experience will vary depending upon many factors, including considerations such as the amount of multiprogramming in the user's job stream, the I/O configuration, the storage configuration, and the workload processed. Therefore, no assurance can be given that an individual user will achieve results similar to those stated here.

• Adobe, the Adobe logo, PostScript, and the PostScript logo are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States, and/or other countries.

• Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.

• Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both.

• Intel, Intel Centrino, Celeron, Intel Xeon, Intel SpeedStep, Itanium, and Pentium are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

• UNIX is a registered trademark of The Open Group in the United States and other countries.

• Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both. Other company, product, or service names may be trademarks or service marks of others.

• All references to [insert fictitious company name] refer to a fictitious company and are used for illustration purposes only.

Page 46: BP203 limitless languages

© 2013 IBM Corporation

THANK YOU!

Mark MyersLondon Developer [email protected]: @stickfight