SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

Semelhante a 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
 

Semelhante a 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
 

Mais de 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
 

Mais de 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
 

Último

The mythical technical debt. (Brooke, please, forgive me)
The mythical technical debt. (Brooke, please, forgive me)The mythical technical debt. (Brooke, please, forgive me)
The mythical technical debt. (Brooke, please, forgive me)Roberto Bettazzoni
 
architecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdfarchitecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdfWSO2
 
Software Engineering - Introduction + Process Models + Requirements Engineering
Software Engineering - Introduction + Process Models + Requirements EngineeringSoftware Engineering - Introduction + Process Models + Requirements Engineering
Software Engineering - Introduction + Process Models + Requirements EngineeringPrakhyath Rai
 
The Strategic Impact of Buying vs Building in Test Automation
The Strategic Impact of Buying vs Building in Test AutomationThe Strategic Impact of Buying vs Building in Test Automation
The Strategic Impact of Buying vs Building in Test AutomationElement34
 
Effective Strategies for Wix's Scaling challenges - GeeCon
Effective Strategies for Wix's Scaling challenges - GeeConEffective Strategies for Wix's Scaling challenges - GeeCon
Effective Strategies for Wix's Scaling challenges - GeeConNatan Silnitsky
 
The Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdf
The Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdfThe Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdf
The Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdfkalichargn70th171
 
Workshop - Architecting Innovative Graph Applications- GraphSummit Milan
Workshop -  Architecting Innovative Graph Applications- GraphSummit MilanWorkshop -  Architecting Innovative Graph Applications- GraphSummit Milan
Workshop - Architecting Innovative Graph Applications- GraphSummit MilanNeo4j
 
UNI DI NAPOLI FEDERICO II - Il ruolo dei grafi nell'AI Conversazionale Ibrida
UNI DI NAPOLI FEDERICO II - Il ruolo dei grafi nell'AI Conversazionale IbridaUNI DI NAPOLI FEDERICO II - Il ruolo dei grafi nell'AI Conversazionale Ibrida
UNI DI NAPOLI FEDERICO II - Il ruolo dei grafi nell'AI Conversazionale IbridaNeo4j
 
^Clinic ^%[+27788225528*Abortion Pills For Sale In soweto
^Clinic ^%[+27788225528*Abortion Pills For Sale In soweto^Clinic ^%[+27788225528*Abortion Pills For Sale In soweto
^Clinic ^%[+27788225528*Abortion Pills For Sale In sowetokasambamuno
 
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...Neo4j
 
Alluxio Monthly Webinar | Simplify Data Access for AI in Multi-Cloud
Alluxio Monthly Webinar | Simplify Data Access for AI in Multi-CloudAlluxio Monthly Webinar | Simplify Data Access for AI in Multi-Cloud
Alluxio Monthly Webinar | Simplify Data Access for AI in Multi-CloudAlluxio, Inc.
 
Microsoft365_Dev_Security_2024_05_16.pdf
Microsoft365_Dev_Security_2024_05_16.pdfMicrosoft365_Dev_Security_2024_05_16.pdf
Microsoft365_Dev_Security_2024_05_16.pdfMarkus Moeller
 
^Clinic ^%[+27788225528*Abortion Pills For Sale In witbank
^Clinic ^%[+27788225528*Abortion Pills For Sale In witbank^Clinic ^%[+27788225528*Abortion Pills For Sale In witbank
^Clinic ^%[+27788225528*Abortion Pills For Sale In witbankkasambamuno
 
Jax, FL Admin Community Group 05.14.2024 Combined Deck
Jax, FL Admin Community Group 05.14.2024 Combined DeckJax, FL Admin Community Group 05.14.2024 Combined Deck
Jax, FL Admin Community Group 05.14.2024 Combined DeckMarc Lester
 
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypseTomasz Kowalczewski
 
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...Lisi Hocke
 
OpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCAOpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCAShane Coughlan
 
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...Abortion Clinic
 

Último (20)

The mythical technical debt. (Brooke, please, forgive me)
The mythical technical debt. (Brooke, please, forgive me)The mythical technical debt. (Brooke, please, forgive me)
The mythical technical debt. (Brooke, please, forgive me)
 
architecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdfarchitecting-ai-in-the-enterprise-apis-and-applications.pdf
architecting-ai-in-the-enterprise-apis-and-applications.pdf
 
Software Engineering - Introduction + Process Models + Requirements Engineering
Software Engineering - Introduction + Process Models + Requirements EngineeringSoftware Engineering - Introduction + Process Models + Requirements Engineering
Software Engineering - Introduction + Process Models + Requirements Engineering
 
Abortion Clinic Pretoria ](+27832195400*)[ Abortion Clinic Near Me ● Abortion...
Abortion Clinic Pretoria ](+27832195400*)[ Abortion Clinic Near Me ● Abortion...Abortion Clinic Pretoria ](+27832195400*)[ Abortion Clinic Near Me ● Abortion...
Abortion Clinic Pretoria ](+27832195400*)[ Abortion Clinic Near Me ● Abortion...
 
The Strategic Impact of Buying vs Building in Test Automation
The Strategic Impact of Buying vs Building in Test AutomationThe Strategic Impact of Buying vs Building in Test Automation
The Strategic Impact of Buying vs Building in Test Automation
 
Effective Strategies for Wix's Scaling challenges - GeeCon
Effective Strategies for Wix's Scaling challenges - GeeConEffective Strategies for Wix's Scaling challenges - GeeCon
Effective Strategies for Wix's Scaling challenges - GeeCon
 
The Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdf
The Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdfThe Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdf
The Evolution of Web App Testing_ An Ultimate Guide to Future Trends.pdf
 
Workshop - Architecting Innovative Graph Applications- GraphSummit Milan
Workshop -  Architecting Innovative Graph Applications- GraphSummit MilanWorkshop -  Architecting Innovative Graph Applications- GraphSummit Milan
Workshop - Architecting Innovative Graph Applications- GraphSummit Milan
 
UNI DI NAPOLI FEDERICO II - Il ruolo dei grafi nell'AI Conversazionale Ibrida
UNI DI NAPOLI FEDERICO II - Il ruolo dei grafi nell'AI Conversazionale IbridaUNI DI NAPOLI FEDERICO II - Il ruolo dei grafi nell'AI Conversazionale Ibrida
UNI DI NAPOLI FEDERICO II - Il ruolo dei grafi nell'AI Conversazionale Ibrida
 
^Clinic ^%[+27788225528*Abortion Pills For Sale In soweto
^Clinic ^%[+27788225528*Abortion Pills For Sale In soweto^Clinic ^%[+27788225528*Abortion Pills For Sale In soweto
^Clinic ^%[+27788225528*Abortion Pills For Sale In soweto
 
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...
 
Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...
Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...
Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...
 
Alluxio Monthly Webinar | Simplify Data Access for AI in Multi-Cloud
Alluxio Monthly Webinar | Simplify Data Access for AI in Multi-CloudAlluxio Monthly Webinar | Simplify Data Access for AI in Multi-Cloud
Alluxio Monthly Webinar | Simplify Data Access for AI in Multi-Cloud
 
Microsoft365_Dev_Security_2024_05_16.pdf
Microsoft365_Dev_Security_2024_05_16.pdfMicrosoft365_Dev_Security_2024_05_16.pdf
Microsoft365_Dev_Security_2024_05_16.pdf
 
^Clinic ^%[+27788225528*Abortion Pills For Sale In witbank
^Clinic ^%[+27788225528*Abortion Pills For Sale In witbank^Clinic ^%[+27788225528*Abortion Pills For Sale In witbank
^Clinic ^%[+27788225528*Abortion Pills For Sale In witbank
 
Jax, FL Admin Community Group 05.14.2024 Combined Deck
Jax, FL Admin Community Group 05.14.2024 Combined DeckJax, FL Admin Community Group 05.14.2024 Combined Deck
Jax, FL Admin Community Group 05.14.2024 Combined Deck
 
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
 
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
 
OpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCAOpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCA
 
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
 

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