SlideShare a Scribd company logo
1 of 40
Franco Lombardo – Agile software developer @Sme.UP
franco.lombardo@smeup.com
Twitter: @f_lombardo
Milan - 1st February 2020AGILE VENTURE 2020
Unit testing on AS400?
Yes, we can! (With Kotlin)
AS400 ~= RPG
Milan - 1st February 2020AGILE VENTURE 2020
AS400 ~= RPG
AS400 programs
~=
RPG programs
(Report Program Generator)
Milan - 1st February 2020AGILE VENTURE 2020
RPG – What is RPG?
"RPG is an IBM proprietary
programming language
and its later versions are
available only on IBM i
or OS/400-based systems"
Milan - 1st February 2020AGILE VENTURE 2020
Wikipedia
RPG – What is RPG?
"RPG is an IBM proprietary
programming language
and its later versions are
available only on IBM i
or OS/400-based systems"
Milan - 1st February 2020AGILE VENTURE 2020
Wikipedia
RPG – Available only on IBM i
Milan - 1st February 2020AGILE VENTURE 2020
How can you learn it?
RPG – Available only on IBM i
Milan - 1st February 2020AGILE VENTURE 2020
How can you create prototypes?
RPG – Available only on IBM i
Milan - 1st February 2020AGILE VENTURE 2020
Infrastructure as code?
How to create and distribute
pre-configured machines (DevOps)
RPG – Available only on IBM i
Milan - 1st February 2020AGILE VENTURE 2020
Horizontal scalability?
RPG – IBM proprietary
Could RPG grow
independently from IBM?
Milan - 1st February 2020AGILE VENTURE 2020
RPG – IBM proprietary
How to add new technologies
quickly
Milan - 1st February 2020AGILE VENTURE 2020
RPG interpreter – Towards a better RPG
Our idea:
creating an RPG interpreter
- Open Source
- Portable: working both on IBM i,
and on other platforms (Kotlin + ANTLR)
- Extendable
Milan - 1st February 2020AGILE VENTURE 2020
extendable
RPG interpreter – Why Kotlin?
Seamless integration
with Java
(and its libraries)
Milan - 1st February 2020AGILE VENTURE 2020
RPG interpreter – Why Kotlin?
Succinct
↓
less boilerplate code
↓
easier to understand
(less cognitive overload)
↓
fewer bugs
Milan - 1st February 2020AGILE VENTURE 2020
RPG interpreter – Why Kotlin?
Milan - 1st February 2020AGILE VENTURE 2020
RPG interpreter – Why Kotlin?
Milan - 1st February 2020AGILE VENTURE 2020
RPG interpreter – Why Kotlin?
Milan - 1st February 2020AGILE VENTURE 2020
RPG interpreter – Why Kotlin?
Milan - 1st February 2020AGILE VENTURE 2020
RPG interpreter – Why Kotlin?
Milan - 1st February 2020AGILE VENTURE 2020
Lots of data classes
RPG interpreter – Why Kotlin?
Milan - 1st February 2020AGILE VENTURE 2020
RPG interpreter – Why Kotlin?
Milan - 1st February 2020AGILE VENTURE 2020
RPG interpreter – Why Kotlin?
Milan - 1st February 2020AGILE VENTURE 2020
RPG interpreter – Why Kotlin?
Milan - 1st February 2020AGILE VENTURE 2020
Test blocks of RPG CODE easily
RPG interpreter – Why Kotlin?
Milan - 1st February 2020AGILE VENTURE 2020
Default arguments: less overloading
RPG interpreter – Why Kotlin?
Succinct,
but comprehensible
Milan - 1st February 2020AGILE VENTURE 2020
(OK, you can write cryptic code in Kotlin too, but…)
See for example Scala… ☺
RPG interpreter – Why Kotlin?
Composing nullable values/functions
in a safe way
Milan - 1st February 2020AGILE VENTURE 2020
Can be null
Not null
RPG interpreter – Why Kotlin?
Code organization based on domain aspects
Milan - 1st February 2020AGILE VENTURE 2020
Extension methods for domain objects
regarding the “SQL aspect”
RPG interpreter – Towards a better RPG
Our idea:
creating an RPG interpreter
- Open Source
- Portable: working both on IBM i,
and on other platforms (Kotlin + ANTLR)
- Extendable
Milan - 1st February 2020AGILE VENTURE 2020
extendable
RPG interpreter – From RPG to a DSL
Milan - 1st February 2020AGILE VENTURE 2020
RPG interpreter – Unit tests in RPG
Milan - 1st February 2020AGILE VENTURE 2020
RPG interpreter – A modern ecosystem
• Unit Tests
• Editor
• Debugger
• Version Control System
Milan - 1st February 2020AGILE VENTURE 2020
Side effects of our project:
RPG interpreter – A sample workflow
Milan - 1st February 2020AGILE VENTURE 2020
RPG interpreter – Visual Studio Code
Milan - 1st February 2020AGILE VENTURE 2020
RPG Interpreter – The rules for FizzBuzz
• We get an integer number as input
• If it’s divisible by 3 the output is ‘FIZZ’
• If it’s divisible by 5 the output is ‘BUZZ’
• If it’s divisible by 3 and by 5 the output is
‘FIZZBUZZ’
• Otherwise the output is the input number
8-9 Novembre 2019ITALIAN AGILE DAYS 2019
See the video on YouTube: http://bit.ly/fizzbuzzrpg
Interprete RPG – Visual Studio Code
Milan - 1st February 2020AGILE VENTURE 2020
RPG Interpreter – Purposes
8-9 Novembre 2019ITALIAN AGILE DAYS 2019
The purpose of this project
is not getting rid of AS400
(although you will be able to do it),
but creating a modern ecosystem
and giving customers and developers
the opportunity to choose
where to run their applications
AS400 ~= RPG
Milan - 1st February 2020AGILE VENTURE 2020
Please, Ginni, don’t do it!
RPG interpreter – JaRIKo
Milan - 1st February 2020AGILE VENTURE 2020
A great team (thanks to Strumenta.com), but...
We want you!
https://github.com/smeup/jariko
Erbusco (BS)
Headquarters
Via A. Zanella, 23 – 25030
+39 030 7724111
Sme.UP
Nova Milanese (MB)
Via Saragat, 4 – 20834
+39 02 910871
Rivoli (TO)
Via Pavia, 11/B – 10098
+39 011 906211
Savigliano (CN)
Corso Roma 54 – 12038
+39 0172 31412
Lecco (LC)
Via della Pergola, 73 – 23900
+39 0341 496864
Parma (PR)
Strada dei Mercati, 16/E – 43126
+39 0521 940611
Roma (RM)
Via Prenestina, 390 – 00171
+39 06 5940517
Vigonza (PD)
Via Trevisan 1, – 35010
+39 049 8936173
Modena (MO)
Via Canaletto, 164 – 41122
+39 059 451721
Reggio Emilia (RE)
Via A.Gramsci, 88/A -
42124
+39 0522 516121
Brescia (BS)
Via Padova, 11 – 25125
+39 030 2585325
Villaverla (VI)
Piazza delle Fornaci, 4 – 36030
+39 0444 1835222
Vercelli (VC)
Corso Giuseppe Garibaldi, 51 – 13100
+39 0161 56924
Udine (UD)
Via Mantova 108/E, – 33100
+39 0432 540364
info@smeup.com
+39 030 7724111
SME UP S.p.A.
Via Iseo, 43 - 25030 Erbusco (BS) - Italy
www.smeup.com

More Related Content

Similar to Agile Venture Milan - Unit testing on AS400? Yes we can! (With Kotlin)

IRJET- IOT Dune Buggy –Control it from Anywhere
IRJET-  	  IOT Dune Buggy –Control it from AnywhereIRJET-  	  IOT Dune Buggy –Control it from Anywhere
IRJET- IOT Dune Buggy –Control it from AnywhereIRJET Journal
 
Leverage OSGI to create Extensible plugins for Liferay 6.2
Leverage OSGI to create Extensible plugins for Liferay 6.2Leverage OSGI to create Extensible plugins for Liferay 6.2
Leverage OSGI to create Extensible plugins for Liferay 6.2Julio Camarero
 
Azure Functions Deep Dive
Azure Functions Deep DiveAzure Functions Deep Dive
Azure Functions Deep DiveMarco Parenzan
 
The best or nothing! (?) What does it mean for your API product?
The best or nothing! (?) What does it mean for your API product?The best or nothing! (?) What does it mean for your API product?
The best or nothing! (?) What does it mean for your API product?Katja Weisheit
 
IoT Development from Software Developer Perspective
IoT Development from Software Developer PerspectiveIoT Development from Software Developer Perspective
IoT Development from Software Developer PerspectiveAndri Yadi
 
Getting started with AGL using a Raspberry Pi
Getting started with AGL using a Raspberry PiGetting started with AGL using a Raspberry Pi
Getting started with AGL using a Raspberry PiLeon Anavi
 
Raspberry Pi 2 + Windows 10 IoT Core + Node.js
Raspberry Pi 2 + Windows 10 IoT Core + Node.jsRaspberry Pi 2 + Windows 10 IoT Core + Node.js
Raspberry Pi 2 + Windows 10 IoT Core + Node.jsAndri Yadi
 
Metail Skin Colour Authoring Tool
Metail Skin Colour Authoring ToolMetail Skin Colour Authoring Tool
Metail Skin Colour Authoring ToolDavid Gavilan
 
Building a Raspberry Pi Robot with .NET 5, Blazor and SignalR - DDD 2020
Building a Raspberry Pi Robot with .NET 5, Blazor and SignalR - DDD 2020Building a Raspberry Pi Robot with .NET 5, Blazor and SignalR - DDD 2020
Building a Raspberry Pi Robot with .NET 5, Blazor and SignalR - DDD 2020Peter Gallagher
 
Python and the Raspberry Pi
Python and the Raspberry PiPython and the Raspberry Pi
Python and the Raspberry PiRachel Wang
 
Iot andriod app development
Iot andriod app development Iot andriod app development
Iot andriod app development AbhinavKumarMeena
 
Pre meetup intel® roadshow london
Pre meetup intel® roadshow londonPre meetup intel® roadshow london
Pre meetup intel® roadshow londonHugo Espinosa
 
20180124 android taipei_arinterface
20180124 android taipei_arinterface20180124 android taipei_arinterface
20180124 android taipei_arinterfacePRADA Hsiung
 
OSGi IoT Demo & Contest 2015
OSGi IoT Demo & Contest 2015OSGi IoT Demo & Contest 2015
OSGi IoT Demo & Contest 2015mfrancis
 
Opencast Architecture
Opencast ArchitectureOpencast Architecture
Opencast ArchitectureGregLogan7
 

Similar to Agile Venture Milan - Unit testing on AS400? Yes we can! (With Kotlin) (20)

IRJET- IOT Dune Buggy –Control it from Anywhere
IRJET-  	  IOT Dune Buggy –Control it from AnywhereIRJET-  	  IOT Dune Buggy –Control it from Anywhere
IRJET- IOT Dune Buggy –Control it from Anywhere
 
GraphQL in Magento 2
GraphQL in Magento 2GraphQL in Magento 2
GraphQL in Magento 2
 
Leverage OSGI to create Extensible plugins for Liferay 6.2
Leverage OSGI to create Extensible plugins for Liferay 6.2Leverage OSGI to create Extensible plugins for Liferay 6.2
Leverage OSGI to create Extensible plugins for Liferay 6.2
 
Azure Functions Deep Dive
Azure Functions Deep DiveAzure Functions Deep Dive
Azure Functions Deep Dive
 
The best or nothing! (?) What does it mean for your API product?
The best or nothing! (?) What does it mean for your API product?The best or nothing! (?) What does it mean for your API product?
The best or nothing! (?) What does it mean for your API product?
 
IoT Development from Software Developer Perspective
IoT Development from Software Developer PerspectiveIoT Development from Software Developer Perspective
IoT Development from Software Developer Perspective
 
Getting started with AGL using a Raspberry Pi
Getting started with AGL using a Raspberry PiGetting started with AGL using a Raspberry Pi
Getting started with AGL using a Raspberry Pi
 
Robko js
Robko jsRobko js
Robko js
 
Raspberry Pi 2 + Windows 10 IoT Core + Node.js
Raspberry Pi 2 + Windows 10 IoT Core + Node.jsRaspberry Pi 2 + Windows 10 IoT Core + Node.js
Raspberry Pi 2 + Windows 10 IoT Core + Node.js
 
Metail Skin Colour Authoring Tool
Metail Skin Colour Authoring ToolMetail Skin Colour Authoring Tool
Metail Skin Colour Authoring Tool
 
Building a Raspberry Pi Robot with .NET 5, Blazor and SignalR - DDD 2020
Building a Raspberry Pi Robot with .NET 5, Blazor and SignalR - DDD 2020Building a Raspberry Pi Robot with .NET 5, Blazor and SignalR - DDD 2020
Building a Raspberry Pi Robot with .NET 5, Blazor and SignalR - DDD 2020
 
Python and the Raspberry Pi
Python and the Raspberry PiPython and the Raspberry Pi
Python and the Raspberry Pi
 
ataei-thesis
ataei-thesisataei-thesis
ataei-thesis
 
Iot andriod app development
Iot andriod app development Iot andriod app development
Iot andriod app development
 
Nizar Romdhane, ARM
Nizar Romdhane, ARMNizar Romdhane, ARM
Nizar Romdhane, ARM
 
ARDUINO presentation by Bamidele Samuel.ppt
ARDUINO presentation by Bamidele Samuel.pptARDUINO presentation by Bamidele Samuel.ppt
ARDUINO presentation by Bamidele Samuel.ppt
 
Pre meetup intel® roadshow london
Pre meetup intel® roadshow londonPre meetup intel® roadshow london
Pre meetup intel® roadshow london
 
20180124 android taipei_arinterface
20180124 android taipei_arinterface20180124 android taipei_arinterface
20180124 android taipei_arinterface
 
OSGi IoT Demo & Contest 2015
OSGi IoT Demo & Contest 2015OSGi IoT Demo & Contest 2015
OSGi IoT Demo & Contest 2015
 
Opencast Architecture
Opencast ArchitectureOpencast Architecture
Opencast Architecture
 

More from Franco Lombardo

Kotlin from-scratch 3 - coroutines
Kotlin from-scratch 3 - coroutinesKotlin from-scratch 3 - coroutines
Kotlin from-scratch 3 - coroutinesFranco Lombardo
 
Kotlin from-scratch 2 - functions
Kotlin from-scratch 2 - functionsKotlin from-scratch 2 - functions
Kotlin from-scratch 2 - functionsFranco Lombardo
 
Interprete Kotlin per l’RPG e libreria Web Components: Open Source per la m...
Interprete Kotlin per l’RPG  e libreria Web Components: Open Source per  la m...Interprete Kotlin per l’RPG  e libreria Web Components: Open Source per  la m...
Interprete Kotlin per l’RPG e libreria Web Components: Open Source per la m...Franco Lombardo
 
TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019
TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019
TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019Franco Lombardo
 
Un interprete Kotlin per il linguaggio RPG AS400 - IBM i
Un interprete Kotlin per il linguaggio RPG AS400 - IBM iUn interprete Kotlin per il linguaggio RPG AS400 - IBM i
Un interprete Kotlin per il linguaggio RPG AS400 - IBM iFranco Lombardo
 
Agile Happiness - Agile O'Day 2018
Agile Happiness - Agile O'Day 2018Agile Happiness - Agile O'Day 2018
Agile Happiness - Agile O'Day 2018Franco Lombardo
 
Rock scissors-paper-kata
Rock scissors-paper-kataRock scissors-paper-kata
Rock scissors-paper-kataFranco Lombardo
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con ScalaFranco Lombardo
 

More from Franco Lombardo (14)

happiness_2023.pdf
happiness_2023.pdfhappiness_2023.pdf
happiness_2023.pdf
 
Kotlin from-scratch 3 - coroutines
Kotlin from-scratch 3 - coroutinesKotlin from-scratch 3 - coroutines
Kotlin from-scratch 3 - coroutines
 
Kotlin from-scratch 2 - functions
Kotlin from-scratch 2 - functionsKotlin from-scratch 2 - functions
Kotlin from-scratch 2 - functions
 
Kotlin from-scratch
Kotlin from-scratchKotlin from-scratch
Kotlin from-scratch
 
Interprete Kotlin per l’RPG e libreria Web Components: Open Source per la m...
Interprete Kotlin per l’RPG  e libreria Web Components: Open Source per  la m...Interprete Kotlin per l’RPG  e libreria Web Components: Open Source per  la m...
Interprete Kotlin per l’RPG e libreria Web Components: Open Source per la m...
 
TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019
TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019
TDD su AS400? Con Kotlin si può fare! - Italian Agile Days 2019
 
Un interprete Kotlin per il linguaggio RPG AS400 - IBM i
Un interprete Kotlin per il linguaggio RPG AS400 - IBM iUn interprete Kotlin per il linguaggio RPG AS400 - IBM i
Un interprete Kotlin per il linguaggio RPG AS400 - IBM i
 
Agile Happiness - Agile O'Day 2018
Agile Happiness - Agile O'Day 2018Agile Happiness - Agile O'Day 2018
Agile Happiness - Agile O'Day 2018
 
Agile Happiness 2
Agile Happiness 2Agile Happiness 2
Agile Happiness 2
 
Agile Happiness
Agile HappinessAgile Happiness
Agile Happiness
 
Java per as400
Java per as400Java per as400
Java per as400
 
Rock scissors-paper-kata
Rock scissors-paper-kataRock scissors-paper-kata
Rock scissors-paper-kata
 
A First Date With Scala
A First Date With ScalaA First Date With Scala
A First Date With Scala
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 

Recently uploaded

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 

Recently uploaded (20)

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 

Agile Venture Milan - Unit testing on AS400? Yes we can! (With Kotlin)

  • 1. Franco Lombardo – Agile software developer @Sme.UP franco.lombardo@smeup.com Twitter: @f_lombardo Milan - 1st February 2020AGILE VENTURE 2020 Unit testing on AS400? Yes, we can! (With Kotlin)
  • 2.
  • 3. AS400 ~= RPG Milan - 1st February 2020AGILE VENTURE 2020
  • 4. AS400 ~= RPG AS400 programs ~= RPG programs (Report Program Generator) Milan - 1st February 2020AGILE VENTURE 2020
  • 5. RPG – What is RPG? "RPG is an IBM proprietary programming language and its later versions are available only on IBM i or OS/400-based systems" Milan - 1st February 2020AGILE VENTURE 2020 Wikipedia
  • 6. RPG – What is RPG? "RPG is an IBM proprietary programming language and its later versions are available only on IBM i or OS/400-based systems" Milan - 1st February 2020AGILE VENTURE 2020 Wikipedia
  • 7. RPG – Available only on IBM i Milan - 1st February 2020AGILE VENTURE 2020 How can you learn it?
  • 8. RPG – Available only on IBM i Milan - 1st February 2020AGILE VENTURE 2020 How can you create prototypes?
  • 9. RPG – Available only on IBM i Milan - 1st February 2020AGILE VENTURE 2020 Infrastructure as code? How to create and distribute pre-configured machines (DevOps)
  • 10. RPG – Available only on IBM i Milan - 1st February 2020AGILE VENTURE 2020 Horizontal scalability?
  • 11. RPG – IBM proprietary Could RPG grow independently from IBM? Milan - 1st February 2020AGILE VENTURE 2020
  • 12. RPG – IBM proprietary How to add new technologies quickly Milan - 1st February 2020AGILE VENTURE 2020
  • 13. RPG interpreter – Towards a better RPG Our idea: creating an RPG interpreter - Open Source - Portable: working both on IBM i, and on other platforms (Kotlin + ANTLR) - Extendable Milan - 1st February 2020AGILE VENTURE 2020 extendable
  • 14. RPG interpreter – Why Kotlin? Seamless integration with Java (and its libraries) Milan - 1st February 2020AGILE VENTURE 2020
  • 15. RPG interpreter – Why Kotlin? Succinct ↓ less boilerplate code ↓ easier to understand (less cognitive overload) ↓ fewer bugs Milan - 1st February 2020AGILE VENTURE 2020
  • 16. RPG interpreter – Why Kotlin? Milan - 1st February 2020AGILE VENTURE 2020
  • 17. RPG interpreter – Why Kotlin? Milan - 1st February 2020AGILE VENTURE 2020
  • 18. RPG interpreter – Why Kotlin? Milan - 1st February 2020AGILE VENTURE 2020
  • 19. RPG interpreter – Why Kotlin? Milan - 1st February 2020AGILE VENTURE 2020
  • 20. RPG interpreter – Why Kotlin? Milan - 1st February 2020AGILE VENTURE 2020 Lots of data classes
  • 21. RPG interpreter – Why Kotlin? Milan - 1st February 2020AGILE VENTURE 2020
  • 22. RPG interpreter – Why Kotlin? Milan - 1st February 2020AGILE VENTURE 2020
  • 23. RPG interpreter – Why Kotlin? Milan - 1st February 2020AGILE VENTURE 2020
  • 24. RPG interpreter – Why Kotlin? Milan - 1st February 2020AGILE VENTURE 2020 Test blocks of RPG CODE easily
  • 25. RPG interpreter – Why Kotlin? Milan - 1st February 2020AGILE VENTURE 2020 Default arguments: less overloading
  • 26. RPG interpreter – Why Kotlin? Succinct, but comprehensible Milan - 1st February 2020AGILE VENTURE 2020 (OK, you can write cryptic code in Kotlin too, but…) See for example Scala… ☺
  • 27. RPG interpreter – Why Kotlin? Composing nullable values/functions in a safe way Milan - 1st February 2020AGILE VENTURE 2020 Can be null Not null
  • 28. RPG interpreter – Why Kotlin? Code organization based on domain aspects Milan - 1st February 2020AGILE VENTURE 2020 Extension methods for domain objects regarding the “SQL aspect”
  • 29. RPG interpreter – Towards a better RPG Our idea: creating an RPG interpreter - Open Source - Portable: working both on IBM i, and on other platforms (Kotlin + ANTLR) - Extendable Milan - 1st February 2020AGILE VENTURE 2020 extendable
  • 30. RPG interpreter – From RPG to a DSL Milan - 1st February 2020AGILE VENTURE 2020
  • 31. RPG interpreter – Unit tests in RPG Milan - 1st February 2020AGILE VENTURE 2020
  • 32. RPG interpreter – A modern ecosystem • Unit Tests • Editor • Debugger • Version Control System Milan - 1st February 2020AGILE VENTURE 2020 Side effects of our project:
  • 33. RPG interpreter – A sample workflow Milan - 1st February 2020AGILE VENTURE 2020
  • 34. RPG interpreter – Visual Studio Code Milan - 1st February 2020AGILE VENTURE 2020
  • 35. RPG Interpreter – The rules for FizzBuzz • We get an integer number as input • If it’s divisible by 3 the output is ‘FIZZ’ • If it’s divisible by 5 the output is ‘BUZZ’ • If it’s divisible by 3 and by 5 the output is ‘FIZZBUZZ’ • Otherwise the output is the input number 8-9 Novembre 2019ITALIAN AGILE DAYS 2019 See the video on YouTube: http://bit.ly/fizzbuzzrpg
  • 36. Interprete RPG – Visual Studio Code Milan - 1st February 2020AGILE VENTURE 2020
  • 37. RPG Interpreter – Purposes 8-9 Novembre 2019ITALIAN AGILE DAYS 2019 The purpose of this project is not getting rid of AS400 (although you will be able to do it), but creating a modern ecosystem and giving customers and developers the opportunity to choose where to run their applications
  • 38. AS400 ~= RPG Milan - 1st February 2020AGILE VENTURE 2020 Please, Ginni, don’t do it!
  • 39. RPG interpreter – JaRIKo Milan - 1st February 2020AGILE VENTURE 2020 A great team (thanks to Strumenta.com), but... We want you! https://github.com/smeup/jariko
  • 40. Erbusco (BS) Headquarters Via A. Zanella, 23 – 25030 +39 030 7724111 Sme.UP Nova Milanese (MB) Via Saragat, 4 – 20834 +39 02 910871 Rivoli (TO) Via Pavia, 11/B – 10098 +39 011 906211 Savigliano (CN) Corso Roma 54 – 12038 +39 0172 31412 Lecco (LC) Via della Pergola, 73 – 23900 +39 0341 496864 Parma (PR) Strada dei Mercati, 16/E – 43126 +39 0521 940611 Roma (RM) Via Prenestina, 390 – 00171 +39 06 5940517 Vigonza (PD) Via Trevisan 1, – 35010 +39 049 8936173 Modena (MO) Via Canaletto, 164 – 41122 +39 059 451721 Reggio Emilia (RE) Via A.Gramsci, 88/A - 42124 +39 0522 516121 Brescia (BS) Via Padova, 11 – 25125 +39 030 2585325 Villaverla (VI) Piazza delle Fornaci, 4 – 36030 +39 0444 1835222 Vercelli (VC) Corso Giuseppe Garibaldi, 51 – 13100 +39 0161 56924 Udine (UD) Via Mantova 108/E, – 33100 +39 0432 540364 info@smeup.com +39 030 7724111 SME UP S.p.A. Via Iseo, 43 - 25030 Erbusco (BS) - Italy www.smeup.com