Download - MWLUG 2014: ATLUG Comes To You
ATLUG Comes To
You
Quarterly Meetings
3rd T
hursd
ay
2nd
Month
ATLUG Day of Champions
April 7-8, 2104 - Atlanta, Georgia
Speed-Roaring
ChampTalks
GURUpalooza
The impact of mobile on human perceptionTim
Tripco
ny
Best M
eth
ods
Presented By Nathan Freeman, Red Pill Development
8
Affordable
9
"For 5 dollars, this better get fixed soon”
10
"Please fix, a 5 dollar app should work flawlessly"
11
"For 5 dollars I opulent expect this."
12
“It was quite expensive for a short game. very
disappointed."
13
"If it was 99 cents then I would have rated it four or five stars, because if you think
about it Angry Birds is cheap and you get days worth of play."
14
15
does your enterprise have an
app store?
16
if so, are you paying attention to
reviews?
17
the pace of modern
18
modern release cyclemonthly = standard
quarterly = acceptable
semi-annually = apathetic
> 12 months = abandoned
19
What % of your applications
20
> 1 month?
21
> 1 Year?
22
> 1 Decade?
23
Then
24
Now
25
Then
26
Now
27
Then
28
Now
29
Are you still delivering this
30
When your customers want
31
Convergence
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
54
55
56
57
58
59
–Alex Salkever, readwrite.com
“One Card To Smarten Up Dumb Gadgets And Connect
Them All”
60
61
62
63
simplicity
64
Next, Next, Yes, Next, No, I Agree, Yes, Next,
Finish
65
66
Lotus NotesLive Long and Prosper
Peter PresnellCEO
Technology Trends
What is the market?
Is there a reason to change?
Are the barriers to exit high?
Mainframe
A mainframe has one of the worst price/performance ratios of any product or technology in any industry.
Slam dunk to replace mainframes with faster, smaller,
cheaper servers?
COBOL (circa 1959)
55 Years
COBOL is not modern
80% of daily business transactions are still processed in COBOL * IT Modernization: The Changing COBOL Market Could Affect Your Decision – Gartner Group, 8 August 2008
One in four universities teach COBOL
* Bridging the COBOL skills gap – Micro Focus, 2013
1980: It was the ONLY choice
170 billion lines of code
* IT Modernization: The Changing COBOL Market Could Affect Your Decision – Gartner Group, 8 August 2008
That’s a lot of bitcoins….
And they just keep going
The Risk Of Failure Is High
31% of projects are cancelled before completed53% of projects will cost 189% of their original costs* Choas Report – Standish Group
Businesses will rely on COBOL for another
ten to twenty years*
* Bridging the COBOL skills gap – Micro Focus, 2013
Enterprise Applications
High barriers to exit
Blackberry
A once thriving company
Suddenly looked like this…..
No longer just a business device
Ubiquitous device
Everybody has one
I don’t need multiple phones!
We replace our phones every two years
Soon everyone was using something else
Mobile Devices
Low barriers to exit
Notes will soon turn 25
1989 - 2014
What does the future hold?
Notes Mail
Current messaging
File store
30-day transition period
Messaging
Low barriers to exit
Notes Applications
Domino Designer on every desk
Easy to learn and deploy
Handle any problem
The most successful SMA platform ever!
• 50,000 companies• 200 applications (avg)• 10 million applications
Apple’s app store reached 1 million applications in October 2013
And the code….
5,000 lines per application x10 million applications =50 billion lines of code
Cost200 applications x$20,000 per application =$4 million investment
10 million applications x$20,000 per application =$200 billion investment
Time
IBM XPages:200 applications x5 weeks per application = 20 years
i.e. Team of 4 developers 5 years
Time
Platform migration:200 applications x3 months per application = 50 years
i.e. Large team of consultants forever
SMAs
High barriers to exit
Implications
Notes applications are NOT going away!
Think 10+ years
Business needs are not frozen
The expectation gap Is growing
Adding modern features deliversadditional business value
Notes is web 2.0
Notes is mobile
Notes Client
Keeping your employees happy
Keeping your business profitable
A sustained investment in the platform
Maintenance
Latest Version of Domino Always
Training
Web Enablement: XPages
Mobile Access: XPages
Social Capabilities: SBT
A sustained investment in the platform
Maintenance
Latest Version of Domino Always
Training
Web Enablement: XPages
Mobile Access: XPages
Social Capabilities: SBT
You Will Take Me To Java Now
Nath
an
Freem
an
Red
Pill Develo
pm
ent
Clone of Visual Basic (circa 1994)
• Netscape Navigator 1.0 was released
China got its first Internet connection
LotusScript Advancements
• Boolean• Array…()• Fulltrim()
VisualBasic Advancements
• Initializers and argument defaults• Optional parameters• Static methods• Detailed Accessmodifers• Enums, Generics and Abstracts• Interfaces, Modules, Operators, Events,
Delegates• Asynchronous processes• Boolean, Byte, Char, Date, Decimal• Directives• Try/Catch/Finally• …
Features of Java• Initializers and argument defaults• Optional parameters• Static methods• Detailed Accessmodifers• Enums, Generics and Abstracts• Interfaces, Modules, Operators, Events,
Delegates• Asynchronous processes• Boolean, Byte, Char, Date, Decimal• Directives• Try/Catch/Finally
It’s a different language!
No, this is a different language
Público Función obtenerLafechaDelDocumento() Como Variante
Oscurecer sess Como Nuevo NotasSesiónOscurecer db Como NotasBasededatosEstablecer db = sess.ObtenerBasededatos("servidor", "registros.nsf", falso)Oscurecer doc Como NotasDocumentoEstablecer doc = db.CrearElDocumento()doc.formulario = "cuarto de baño"Convocar doc.firmar()Convocar doc.guardar(verdadero, verdadero, falso)obtenerLafechaDelDocumento = doc.modificadaPorúltimaVez
Terminar Función
This is not a different language
Dim db as NotesDatabaseSet db = session.Getdatabase(“server”, “file”)
Database db = session.getDatabase(“server”, “file”);
Classes: How do they work?
You already knowSet s = New NotesSession()Set item = doc.Replaceitemvalue(“foo”, “bar”)doc.Replaceitemvalue(“Readers”, “Nathan T Freeman”).readers=true
But I like procedures!
Fine, stick with them‘ScriptLibrary libs.atFormulas
Public Function atRightBack(stringToSearch As String, subString As String) As String
End Function
Use “atFormulas”
//Java class libs.atFormulas
public static String rightBack(String stringToSearch, String subString ) {
}
import static libs.atFormulas;
I tried Java before…
Java is different now
Why bother?• Cheaper to maintain• Fewer bugs• Runs faster• Easier to hire• Better guidance• Portable skills• Millions of open source and commercial
libraries
Future ProofingLotusScriptTim
Tripco
ny
Best M
eth
ods
Presented By Devin Olson, Czarnowski
LotusScript is the past
20 years old (almost to the day)Only 2 key changes to the language itself:- Booleans Convenience functionsEverything else has been API enhancements
The future is XPages
JavaJavascript
Subconscious preparation
Apply 4 optional changes to how you write LotusScript
Backwards compatible to R4 Training yourself for free and without even
realizing it Runtime execution and ongoing maintenance
will be either Identical or Better
Case matters
Learn to love “camel case” The LotusScript editor is wrong
Autocompletes to proper case database.Gettitle() should be database.getTitle() document.Getitemvalue() should be document.getItemValue()
Lower camel is the convention for nearly every language in common use For method names (e.g. identifyUser() ) Class names should still be upper camel (e.g. Database,
DocumentCollection)
Case matters
If becomes if For becomes for While becomes while ...you’re probably seeing a pattern here Because these are all one word, the lower camel is indistinguishable from lowercase
( )
Parentheses matter
Optional in several portions of LotusScript syntax Mandatory in each equivalent in Java and JavaScript
Functions:o Somemethodnameo someMethodName()
Conditionals:o if somethingistrue theno if (somethingIsTrue) then
If it doesn’t make the code harder to read, add parentheses
In Java, you can tell Designer to remove any parentheses you don’t need
Document fields are method parameters
Stop using:doc.SubjectStart using: doc.getItemValue(“subject”)doc.replaceItemValue(“subject”,“Hello world!”)
Write your own classes LotusScript has always had classes (yes, since R4) Most LotusScript developers only write top-level
functions If you’ve ever written code that uses NotesSession,
NotesDatabase, etc., you’re already using classes, you just might not be writing your own
Classes simplify variable management Classes maximize code reusability Classes help our code to stop thinking in “documents”
and start thinking in business processes, and the people, places, and things that interact with and are impacted by those processes
Write your own classes Don’t use the Property Get / Property Set pattern Define private properties, expose each via “getters” and
“setters” If it’s a Boolean, use isPropertyName() instead of
getPropertyName()
Private firstName As String Public Function getFirstName() getFirstName = firstNameEnd Function Public Function setFirstName(firstName byVal As String) Me.firstName = firstNameEnd Function
Write your own classes
THIS IS THE SINGLE MOST IMPORTANT THING YOU CAN DO TO EASE YOUR TRANSITION TO XPAGES OR SHAREPOINT OR NATIVE MOBILE DEVELOPMENT OR PRETTY MUCH ANY DEVELOPMENT PLATFORM THAT CURRENTLY EXISTS OR IS LIKELY TO EMERGE IN THE FORESEEABLE FUTURE OH MY GOD I SIMPLY CANNOT STRESS THIS ENOUGH JUST DO IT!
What language is this?
if (workflow.isComplete()) { doc.replaceItemValue(“status”, “Approved”); }
Okay, fine, there’s one other difference
LotusScriptDim doc As NotesDocumentSet doc = database.getDocumentByID(“OU812”)
JavaScriptvar doc = database.getDocumentByID(“OU812”);
JavaDocument doc = database.getDocumentByID(“OU812”);
If you adopt these habits now…
Learning JavaScript or Java is mostly about remembering two things: 1. where to use curly
braces2. where to use
semicolons
Yes, I’m serious!
Future-proofingNotes client applications
Nothing lasts forever
Make hay while the sun shines
Before they end up here!!
Domain Catalog
Retirement
Hidden design
Assign a template
UsersPower Users
(Admins)Developers
Segment Users
Gestures
Actions EventsHotspotsButtons
What are gestures?
Client server
@FormulaLotusScrip
t
JavaScript
SSJSJava
LotusScript
(Agents)
Back end versus front end
Move the code
Agents
Views
Outlines made us lazy
Organize views
Hidden views
Division Lookup
(Division Lookup)
Web views
$Flags +“n”
Eliminate unwanted viewsCopy Of By Category
Another Copy Of By Category
By Category 12091989
Backup copy of By Category
By Category (Old)
Eliminate unused views
log.nsf (Database Usage)
$Collection
Eliminate conflicts
@IsUnavailable ($Conflict)
Minimize response documents
Forms
Mobile First
Clearly define labels
Group fields carefully
Adding Style Sheets
Address Fields
StreetAddress1 + “ “ + StreetAddress2 + “ “ + City +
“ “ + State + “ “ + Zipcode
Rich Text
OLE
Rich Text Lite