Introduction to Python on IBM i

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 1 Agenda

• A little about Python • Why use Python? • How to install/determine if installed • Syntax101 – Variables – Strings – Functions – Command Line • DB2 Data Access

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 2 Acknowledgements

• Kevin Adler • Tony Cairns • Jesse Gorzinski • Google • Memegenerator • Corn chips & salsa • Clean socks • and, of course, – spam

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 3 Before you freak out

• Why isn’t Mike talking about PHP? – WAS the PHP company – Rogue Wave IS the Open Source company • Support for 300+ Open Source projects • And, of course, PHP

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 4 A little about Python

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 5 What is it really?

. General purpose programming language . Easy to get started . Simple syntax . Great for integrations . Access to and other API . Infrastructure first, but applications too.

Thanks: Tahani Alamanie

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 6 Historically…

. Python was conceptualized by Guido Van Rossum in the late 1980s. . Rossum published the first version of Python code (0.9.0) in February 1991 at the CWI (Centrum Wiskunde & Informatica) in the Netherlands , Amsterdam. . Python is derived from ABC programming language, which is a general-purpose programming language that had been developed at the CWI. . Rossum chose the name "Python", since he was a big fan of Monty Python's Flying Circus. . Python is now maintained by a core development team at the institute, although Rossum still holds a vital role in directing its progress.

Thanks: Tahani Alamanie

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 7 Python lineage

• Python 1 – 1994 • Python 2 – 2000 (Not dead yet…) – 2.7 - 2010 • Python 3 – 2008 – 3.5 – 2015 – 3.6.1 – March 2017

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 8 Python 2 or 3?

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 9 What’s the diff?

• Example: • Python 2 print statement replaced by function: – Python2 – print "Hello World!" – Python3 - print("Hello World!") • Many more differences, tho…

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 10 Why use it?

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 11 Python==hot

• RPG is 45, COBOL is 25, ugh…

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 12 Some reasons folks use Python

• Open source is free, right? – Yes, no…well – sort of… – No charge LP on IBM i – 5733OPS • Only scripting language to support multiple inheritance • Multi-threading – Stateful, not Async like Node – But same motivation as Node, non-blocking • Applications develop faster – Extensive standard library that is constantly evolving – Frameworks such as

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 13 Industries using Python

• Technology – Geospatial, Machine Learning – Honeywell - Build automation • Manufacturing – D-Link updates – Multithreaded – Phillips – Robot programming and sequencing • Entertainment – ILM – Scripting CGI Intensive films – Video gaming • Transportation – Airports – Frequentis for weather info • US, Denmark, Iceland, Hong Kong, etc.

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 14 Companies using Python

• YouTube - Backend • Facebook – (see next slide) • Dropbox • NASA – Weather and more • IBM • Mozilla • Instagram • Red • Quora – Why python?

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 15 Facebook in detail

• Top three languages – Hack (fork of PHP) – C++ – Python • Infrastructure management – Network switch setup – Core services (DNS, etc,) – Server imaging, burnin-in. • Platform services: Job Engine, team workflow management

https://code.facebook.com/posts/1040181199381023/python-in-production-engineering/

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 16 Got Python?

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 17 Details at Developerworks…

• https://www.ibm.com/developerworks/community/wikis/home?lang=e n#!/wiki/IBM%20i%20Technology%20Updates/page/Open%20Source% 20Technologies

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 18 Which one?

• Python 3 is LPP option 2 • Python 2 is LPP option 4 • Correct answer: It depends… – Many existing libraries are Python 2 – But 90%+ are also Python 3 compliant, or on their way • Python 2.7 will retire in less than 3 years (EOL==2020)

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 19 Need Licensed Programs

• 5733OPS Base and option 2 or 4

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 20 Python in action

• Command line via green screen (CALL QP2TERM)

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 21 Hello world?

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 22 Most prefer SSH

• Command line via SSH terminal

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 23 Hello World, again?

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 24 IDE?

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 25

• No, you don’t need to buy Zend Studio • Use Orion, etc. • But if you have Studio or RDi… – Consider something from .org – I grabbed PyDev

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 26 Eclipse

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 27 Alternatives to IBM i when learning

• What’s that? The boss won’t let you install Python? – Consider repl.it

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 28 Alternatives to IBM i when learning

• How about your PC? • Goto the Python site: – Download – Install – Viola!

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 29 Download PyDev from Eclipse

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 30 Capture URL

• Follow prompts

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 31 Editor for Eclipse

• Select what you like • Next

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 32 Confirm versions

• Next

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 33 Accept terms and EULA

• Finish

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 34 Watch the pretty status bar

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 35 Python in Eclipse (i.e. Zend Studio)

• I bet RDi works, too!

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 36 Hello world….again…

• Create a file like Ex01hello.py • Open the file • Key up some code and click save

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 37 Hello world….again…

• Change the file • Click save • Back to qp2term & F9

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 38 Syntax

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 39 How is it written

• Indentation means EVERYTHING – Don’t use tab – 4 spaces is the best practice – Mismatched indents can cause failures. Good luck finding… – Mismatched spaces and tabs will cause failures • No need for scope terminators like other languages • Colon introduces start block, then indent • Much more readable than other languages • Get a good editor!!!

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 40 Indentation

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 41 Operators – Similar to , PHP, C, etc.

• Comparison • Mathematical – Assignment = – Addition + – Comparison == – Multiplication * – Inequality != – Division / – Less than < – Floor division // – Greater than > – Modulus % – Less than or equal to <= – Exponentiation ** – Greater than or equal to >= • Booleans – And – Or – Not

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 42 Variables

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 43 Data Types – yeah…about that

• Int – Integer of unlimited size • Float – System defined precision • Complex – Complex with real and imaginary parts • Bool – TRUE & FALSE

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 44 Built in types

• Str – Character string composed of Unicode • Bytes and bytearray – Sequences of bytes • List and tuple (list/array/data structure)

• Range – Start, end, step • Set & frozenset – Unordered set of terms • Dict – Associative array (dictionary, hash map)

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 45 Variables on the fly

• Case sensitive • camelCase • Who are you? type()

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 46 Variables in a file

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 47 Data Type?

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 48 Every variable is implemented as a class!

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 49 And now for something completely different

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 50 It’s OK….

• Monty Python references are not only acceptable… – They are encouraged! • Documentation is littered with references • Examples are well covered

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 51 Back to Variables

• Numbrs - 3 Data Types – Int 1,2,42 – Float 3.14159 – Complex: + (not used much…)

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 52 Strings

• Immutable objects, cannot change value • Can reassign. (dynamic typing) • Single or Double quotes, OK (even triple…) • Index starts at 0

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 53 String formatting

• Interpolation, of sorts

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 54 Lists

• Ordered group, similar to array • Different data types, ok • Multi-dimensional (sub lists) • Mutable (changeable)

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 55 Tuples

• Similar to lists • Immutable (don’t change once created) • Use parenthesis instead of brackets

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 56 Dictionary

• Again, like lists but more like hash table • Mutable • Key value pairs

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 57 Control Structures

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 58 Ifs

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 59 For loop

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 60 While loop

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 61 Functions

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 62 Basic functions

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 63 Functions with defaults

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 64 Functions with keyword arguments

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 65 Command Line

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 66 Input from command line

• Talk with the script

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 67 Database

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 68 Locate the package or “wheel”

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 70 Install commands

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 71 Find the connector

• YMMV • With wheels

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 72 Run the pip install…

• From the command line

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 73 What version of the DB2 Extension?

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 74 Simple database access

• Import the class • Connect (with or without options • Open the cursor • Set the SQL • Read

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 75 Simple database access

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 76 Table information

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 77 Summary – Why Python?

• Lot’s of libraries • Make it easy to do stuff • OPC / OPO • Education

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 78 End the session

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 79 ATTEND EXPLORE SPONSOR Connect with experts. Share, inspire, educate. Spotlight your best in Become an authority. Network enterprise PHP, open Register now: source & frameworks: zendcon.com/register-now [email protected]

Visit zendcon.com

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 80 Who was that masked man?

Mike Pavlak – Solution Consultant, Rogue Wave Software [email protected]

© 2017 Rogue Wave Software, Inc. All Rights Reserved. 81 © 2017 Rogue Wave Software, Inc. All Rights Reserved. 82