SlideShare a Scribd company logo
1 of 89
Lucas Jellema
Architect & CTO AMIS | Conclusion
How and Why
you can and
should
contribute to an
open source
project?!
Publiek
Well known Open Source Products
Linux
Apache Http
Server
Apache
Tomcat
Apache
Struts
Hibernate
MySQL GlassFish Ant Maven
Hudson
Jenkins
JUnit
Spring
Framework
Log4J Wordpress Kubernetes
Apache
Kafka
Apache
Spark
VS Code Eclipse Ubuntu
Azure
Functions
Firefox Magento Diagrams.net OpenOffice
How and Why participate in an Open Source Project
I am
because
we are
Publiek
Quiz
• How many open source products did you inspect the source of?
• For how many open source products did you change code?
• and submitted it?
• For how many did you:
• file issues & enhancement requests
• contribute to documentation
• submitted examples or test cases
• About how many did you
• present
• blog
• Tweet?
• How many open source products did you make use of?
• today?
• this month?
• in your professional career
How and Why participate in an Open Source Project
Publiek
Open Source code analyzed and contributed
How and Why participate in an Open Source Project
Publiek
Contributions to or about open source projects
How and Why participate in an Open Source Project
Publiek
Number of open source products used in your career
How and Why participate in an Open Source Project
Publiek
Why Participate?
• To give back/make a contribution (“moral debt”)
• Make the product better
• Influence the product
• Plug your own product
• Help grow and spread, thrive and persist
• Learn about and understand the product (technically and strategically)
• To increase your own personal status
• For fun, thrill
• Meet new people, belong to a team
• Grow as a software engineer
• learn from process, tooling, communication
• learn from studying examples and emulating them
• learn from review feedback and interaction
How and Why participate in an Open Source Project
Publiek
Why not?
• I think lack the skills to be of value
• Scary to be exposed to public scrutiny
• Don’t know how to
• I do not really care
• I have a day job
• I do not particularly like IT
• I have other things to do
How and Why participate in an Open Source Project
Publiek
How and Why participate in an Open Source Project
Publiek
Terms to come to grips with
LGTM
PR
Clone
Fork
Merge
Push
Pull
Origin
Commit (verb & noun)
Branch
Milestone
Issue
upstream
repository
How and Why participate in an Open Source Project
review
alpha
beta
stable
Git
GitHub
GitHub Action
GitHub Code Space
Dev Container
Markdown
Founder
Maintainer
Committer
Author
Contributor
unit test
conformance test
end 2 end test
integration test
Hugo
Go
Go Mod Tidy
Go Lint
Go Test
fumpt
Publiek
Types of Open Source Projects
How and Why participate in an Open Source Project
Code dumped by commercial vendor
One person effort go-ora
Project with wonderful past but
bleak future
Apache Struts, Apache MyFaces, Apache
Xalan, Apache Ant
Closely controlled by and mixed up
with a single commercial entity
Elastic Stack, OpenShift, VirtualBox, VS Code,
MySQL
Strategic support [and interest] from
multiple commercial vendors
OpenJDK, Kubernetes, Apache Spark
Unaffiliated project with large
committer community
Python, Linux, NodeJS
Publiek
OutSystems “donating open source”
How and Why participate in an Open Source Project
Publiek
Assess status of an Open Source Project
• # issues (open and closed) (bug reports, enhancement requests)
• # pull requests (open and closed) – these constitute the actual evolution of the product
(although the number does not prove the value and scope of the changes)
• # authors (how many different contributors have made a substantial contribution)
• who is using the product/who have dependencies and direct stakes?
• for example (large) commercial players? other (big) open source products?
• # forks (how many times have the repositories been forked
• this would be done for local experimentation and customizations and for making contributions
• release history (frequency of new releases and delta between releases)
• # commits (individual code changes
• # stars (how many "likes" have been awarded by the community)
• # threads on StackOverflow (recently); Google Trends - # recent searches
• visibility through presentations on conferences, articles on Medium, tweets
• activity on the community discussion forum (such as Slack or Discord); #members, #threads,
#messages in recent times
• # different people participating in issues and PRs
• immerse oneself in a project for a few weeks
How and Why participate in an Open Source Project
Publiek
Dapr
• Runtime
• Personal Assistant for Applications
• Distributed Application Runtime
• Microservice architecture
• Decoupling
Code Café Speed Dating - December 2021 14
Publiek
Dapr.io
• Launched by Microsoft (2019)
• Application runtime framework –
supporting cloud native and serverless
• Every application gets a uniform Personal Assistant
that takes care of common tasks
• remember (take note and reproduce)
• keep log
• restrict access
• handle incoming
• route outgoing
• interact with
other PAs
Code Café Speed Dating - December 2021 15
Application
Microservice or
Monolith
Personal
Assistant
(Dapr)
Personal
Assistant
(Dapr)
Personal
Assistant
(Dapr)
Personal
Assistant
(Dapr)
Personal
Assistant
(Dapr)
Personal
Assistant
(Dapr)
Publiek
Dapr.io
• Personal Assistant is Dapr Side Car
• companion process or side car container in Kubernetes Pod
• Out of the Box
support for
• local products &
cloud services
• Kafka, AWS SQS
Azure Event Hub,
GCP Pub/Sub,
RabbitMQ
• DynamoDB, RDS,
CosmosDB,
PostgreSQL,
Redis, MySQL,
MongoDB,
Zookeeper
• SMTP, Twillio,
Twitter, Consul
Code Café Speed Dating - December 2021 16
= Custom Application
Publiek
Dapr Statestores
• No Oracle anywhere in Dapr
• Introducing Oracle based components has value
• for Dapr
• for Oracle
• for me (to use Dapr in Oracle context)
• And: I can bring value as bridge between Dapr, microservices & Oracle & OCI
• at last my chance to contribute to OSS!
• One little obstacle: Dapr is Go – I do not know Go.
• My Objective: contribute Dapr State Store component for OCI Object Storage
• and subsequently Oracle Database/ATP, OCI Streaming, Oracle NoSQL, …
• how to go get going?
How and Why participate in an Open Source Project
Publiek
Observability
Prometheus AppInsights Jaeger
Zipkin
Bindings
& Triggers
State
Stores
Secret
Stores
PubSub
Brokers
Dapr Architecture
How and Why participate in an Open Source Project
Dapr main
state store
interface
pub/sub
interface
binding
interface
secret
interface
register all
components
(per type)
observable
interface
do something for me – store
or retrieve state, subscribe
to topic (and callback with
messages), invoke service,
retrieve secret
components.yaml
Publiek
How to contribute to Dapr.io?
• Analyze Dapr.io website & GitHub
• Repositories, subprojects
• Discord community communication platform
• Developer instructions
• process & tooling
• technical docs?
• existing code & tests
• PRs and review conversations
• submission steps
How and Why participate in an Open Source Project
Publiek
Dapr Community
How and Why participate in an Open Source Project
Publiek
How and Why participate in an Open Source Project
project X repo
lucasjellema/
project X
fork
1
my laptop
2
local-dev/
project X
branch
3
Create Docs,
Code, Example, Test
4
Commit Changes
5
push
6
c
l
o
n
e
PR
7
my-contribution-branch
my-contribution
-branch
Fork-Clone-Branch-Code-Commit-Push-PR
Milestone
8
my GitHub account
Publiek
How and Why participate in an Open Source Project
dapr/
components-contrib
Issue: Proposal
1
lucasjellema/
components-contrib
fork
2
my laptop
3
dapr-dev/
components-contrib
branch
4
Create Test & Code
5
Commit Changes
(with sign-off)
6
push
7
dapr/
docs
Issue: Proposal
9
c
l
o
n
e
PR
8
oci-objectstorage-state
oci-objectstorage
-state
Milestone
10
Publiek
Good First Issue
How and Why participate in an Open Source Project
Publiek
My Contribution: a new State Store component based on
Oracle Cloud Object Storage Service
• State is stored as object in a special bucket on OCI Object Storage
How and Why participate in an Open Source Project
Object
Storage
Custom
State Store
Component
OCI Object
Storage
set & get state
components.yaml components.yaml
set & get state
Publiek
Create Issue to Propose Change
How and Why participate in an Open Source Project
https://github.com/dapr/components-contrib/issues/1400
Publiek
Encouragement from one of the founders himself
How and Why participate in an Open Source Project
Publiek
Fork Repository
How and Why participate in an Open Source Project
dapr/
components-contrib
lucasjellema/
components-contrib
fork
Publiek
Repository Fork in my GitHub account
How and Why participate in an Open Source Project
lucasjellema/
components-contrib
Publiek
Set up local environment
• WSL2 + Ubuntu
• Go Runtime
• VS Code with Go extensions
• Clone Repository Fork
How and Why participate in an Open Source Project
lucasjellema/
components-contrib
my laptop
dapr-dev/
components-contrib
c
l
o
n
e
Publiek
35
My
Application
Object
Storage
tenancy, user,
fingerprint,
private key
create bucket
create object
What I need to develop ….
OCI Go
SDK
Publiek
Create branch to develop on
How and Why participate in an Open Source Project
my laptop
dapr-dev/
components-contrib
branch
Create Code Commit Changes
(with sign-off)
oci-objectstorage-state
Publiek
Create Test, Create Code
How and Why participate in an Open Source Project
Publiek
Create Test, Create Code
• Two levels of testing
• Unit Testing (with Mock OCI interactor)
• Integration Testing (actually talking to OCI environment)
How and Why participate in an Open Source Project
Publiek
Code Formatting and Linting
• Apply formatting rules for uniform code layout
• [also] to facilitate compare and merge
• Check Code Quality against rules
• formatting, commenting, complexity of functions, variable naming,
(un)reachable code
How and Why participate in an Open Source Project
Publiek
Add, Commit, Push
• Add changed files to change set
• Commit change set
• with Sign Off in message
• Push Changes - to Repository Fork
on GitHub
How and Why participate in an Open Source Project
lucasjellema/
components-contrib
dapr-dev/
components-contrib
Create Test & Code Commit Changes
(with sign-off)
push
c
l
o
n
e
oci-objectstorage-state
oci-objectstorage
-state
Publiek
How and Why participate in an Open Source Project
lucasjellema/
components-contrib
dapr-dev/
components-contrib
Create Test & Code Commit Changes
(with sign-off)
push
c
l
o
n
e
oci-objectstorage-state
oci-objectstorage
-state
Publiek
How and Why participate in an Open Source Project
Changes have landed in GitHub – branch in forked repo
Publiek
Next: the big PR!
How and Why participate in an Open Source Project
fork
push
c
l
o
n
e
PR
my-contribution
-branch
my GitHub account
lucasjellema/
components-contrib
dapr/
components-contrib
Publiek
First: the big PrepaRe!
How and Why participate in an Open Source Project
Publiek
First: the big PrepaRe – Fetch from Upstream
How and Why participate in an Open Source Project
Publiek
Create the Pull Request for merging my branch to the master
How and Why participate in an Open Source Project
Publiek
Create the Pull Request for merging my branch to the master
How and Why participate in an Open Source Project
Publiek
Next: the big PR!
How and Why participate in an Open Source Project
Publiek
Initial feedback on PR
How and Why participate in an Open Source Project
Publiek
Automated Checks – did not all succeed
How and Why participate in an Open Source Project
Publiek
Extend PR with additional commits
How and Why participate in an Open Source Project
Publiek
Extend PR with additional commits
How and Why participate in an Open Source Project
Publiek
Waiting….
• The automated checks are not triggered automatically
How and Why participate in an Open Source Project
Publiek
Enter PR conversation
How and Why participate in an Open Source Project
Publiek
Wait for OK
How and Why participate in an Open Source Project
Publiek
Tests are broken - not my code
How and Why participate in an Open Source Project
Publiek
At last! PR is Merged
How and Why participate in an Open Source Project
now as Contributor my commits will trigger the automated checks
Publiek
Entering the Community
How and Why participate in an Open Source Project
Publiek
Extend Documentation
• Issue – link to component issue
• Fork dapr/docs repository
• Clone
• Install Hugo Server
• Create Branch
• Make changes, commit, push
• Create PR
How and Why participate in an Open Source Project
dapr/
docs
Issue: Proposal
PR
Publiek
How and Why participate in an Open Source Project
dapr/
components-contrib
Issue: Proposal
1
lucasjellema/
components-contrib
fork
2
my laptop
3
dapr-dev/
components-contrib
branch
4
Create Test & Code
5
Commit Changes
(with sign-off)
6
push
7
dapr/
docs
Issue: Proposal
9
c
l
o
n
e
PR
8
oci-objectstorage-state
oci-objectstorage
-state
Milestone 1.6
10
Publiek
Done?
• Yes
• Now wait for milestone 1.6 to be released
How and Why participate in an Open Source Project
Publiek
Dapr 1.6 Release Day – January 25, 2022
How and Why participate in an Open Source Project
Publiek
How and Why participate in an Open Source Project
Publiek
How and Why participate in an Open Source Project
Publiek
Party? Kudos?
How and Why participate in an Open Source Project
Publiek
The Effort of Setting up and
Running an Open Source Project
• Vision, High level design, architecture, roadmap, license
• Attract, organize, facilitate a contributor community
• Guidelines, Developer How-Tos, DevContainer
• Code of Conduct
• Community Communication – Discord, Slack
• Manage people (egos, ambitions, emotions, opinions)
• Involve vendors
• Design and Implement structure and automated processes for software engineering
• GitHub Set Up – Repositories, Issues, branching strategy
• Automated Code Quality checks and End to End tests – GitHub Actions
• Active management of Issues, Pull Requests, Tags (milestones), Dependencies
• Release process and mechanism
• Attract and Foster the User Community
• Quality & Documentation (activity, bugfixing)
• Website
• Content
• “noise/buzz”
• Provide support to users
• Build relations (vendors, other projects, VIPs, analysts)
How and Why participate in an Open Source Project
Publiek
Dapr.io has dozens of committers,
100s of contributors
How and Why participate in an Open Source Project
Publiek
Dapr.io has dozens of components
How and Why participate in an Open Source Project
Publiek
On the essence of automation, human attention and civil
conversation
How and Why participate in an Open Source Project
Publiek
On the essence of automation, human attention and civil
conversation (part 2)
How and Why participate in an Open Source Project
Publiek
What happened since 25th January?
• Improvements in OCI Object Storage
state store component
• Introduced new Oracle Database state
store component
• inspired by the existing PostgreSQL
state store component
• small contribution to sijms/go-ora
project (Go driver for Oracle Database)
How and Why participate in an Open Source Project
Publiek
72
Custom
State Store
Component
Oracle
Database
set & get state
components.yaml components.yaml
set & get state
host, port
sid, username,
password,
tableName
Publiek
PR was merged on February 8th
How and Why participate in an Open Source Project
Publiek
Personal Findings
• Learning experience
• I can play at this level
• Join, participate, contribute
• Patience (time zones and more)
• Complexity of managing an open source
project
• fragility
How and Why participate in an Open Source Project
Live Open Source Contribution
Flashback History
in Oracle Database State Store
How and Why participate in an Open Source Project
Publiek
Live Open Source Coding:
Let’s enrich the Oracle Database State Store Component
• Idea
• Issue – Feature Proposal
• Issue – Documentation modification
• (Fetch Upstream, Pull latest)
• Create Test
• Create Code (run test, run lint)
• (Fetch Upstream, Pull latest)
• Create Branch
• Commit changes
• Push
• Create Pull Request
• wait for automated checks to give initial verdict
• (refine based on failed checks, commit, push)
• wait for human reviewers to give feedback
How and Why participate in an Open Source Project
Publiek
Idea: Flashback Feature - hints to retrieve historical state
• Allow the use of “flashback hints” in the metadata sent in Get requests; these hints
instruct the state store to return for a specific key
• previous generations or versions of a state element
• the state as it existed X seconds ago
• the state as it existed at a specific timestamp in the past
possibly even return the state from before it expired or was deleted
• The response will provide metadata to indicate
• what generation of the state is returned
(current, previous, one before previous)
• when the state returned was created and when it ceased to exist
• if the element state element for this key no longer exists (expired or deleted)
• If the requested history cannot be returned, no data is returned (and no error)
How and Why participate in an Open Source Project
Publiek
Idea: flashback– hints in get-requests
• Proposed Metadata in Get requests
• flashback-generation – values 0 (for current value), -1 (for previous value), -2
(for the one but previous value), -3...-X – to ask for a specific generation of
the state under the specified key
• flashback-atTime – a UTC timestamp in the past - to ask for the value of the
state under the specified key at a specific moment in the past
• flashback- age– a positive integer - to ask for the value of the state under the
specified key at the specified number seconds ago
• flashback-allow-deleted – true or false – to indicate whether a value should
be returned if the key currently is deleted or expired from the state store
How and Why participate in an Open Source Project
Publiek
Idea: flashback– metadata in get-responses
• Proposed Metadata in Get responses
• flashback-generation – values 0 (for current value), -1 (for previous
value), -2 (for the one but previous value), -3...-X – to indicate the specific
generation of the state returned in the response
• flashback-startTime – a UTC timestamp in the past – to indicate the time
at which the state that is returned was created
• flashback-endTime – a UTC timestamp in the past – to indicate the time at
which the state that is returned was updated, deleted or expired
• flashback-deleted – true or false – to indicate whether the key is deleted
or expired from the state store at the present moment
How and Why participate in an Open Source Project
Publiek
Issue – Feature Proposal
How and Why participate in an Open Source Project
dapr/
components-contrib
Issue: Proposal
10
issue
Publiek
Issue – Documentation modification
How and Why participate in an Open Source Project
Publiek
(Fetch Upstream, Pull latest)
• To start from the latest code on the master branch
• and prevent ugly merge operations later on
• Fetch Upstream – to get current latest from Upstream repo to my Fork
• In my Local Environment – pull to get the latest commit
How and Why participate in an Open Source Project
dapr/
components-contrib
lucasjellema/
components-contrib
fetch
upstream
my laptop
dapr-dev/
components-contrib
p
u
l
l
10
Publiek
Create Test – Unit Test
Label Actions *) Outcome
flashback-generation is 0 or negative
integer
get – flashback-generation:24 error (incorrect value - positive integer
- for flashback-generation)
flashback-age is zero or positive
number
get – flashback-age:-3 error (incorrect value - negative value -
for flashback-age)
flashback-atTime is valid timestamp get – flashback-atTime:3 error (incorrect value – not a valid
timestamp - for flashback-atTime)
flashback-atTime is valid timestamp in
the past
get – flashback-atTime:2050-01-
31T23:59:59
error (incorrect value – future
timestamp - for flashback-atTime)
flashback-atTime is valid timestamp in
the past after 10th November 2009 at
23:00 UTC
get – flashback-atTime:2009-11-
10T22:0:0
error (incorrect value – too old
timestamp - for flashback-atTime)
flashback-generation is 0 or negative
integer
get – flashback-generation:XYZ error (incorrect value – not a number -
for flashback-generation)
flashback-age and flashback-atTime
are both set
get – flashback-age:50, flashback-
atTime:2009-11-10T22:0:0
error (only one flashback metadata
can be set – to prevent conflicts)
How and Why participate in an Open Source Project
*) a random key is generated for each test and used for all get, set and delete operations
Publiek
Create Test –Integration Test
Label Actions *) Outcome
Not found returned for non
existing generation
set, get – flashback-generation:-1 not found
Value returned for existing
generation
set, get – flashback-generation:0 value returned
Value returned for existing
generation
set, set, get – flashback-generation:-1 first (previous) value returned
Original value returned after
delete
set, delete, get – flashback-generation:-1; flashback-allow-
deleted: true
value returned + flashback-
deleted meta data
Older generation value returned set, set, set, set, get – flashback-generation:-3 first value returned
Value from past timestamp set, wait one second, set, set, get – flashback-age:-0.5 first value returned
Value from before first
timestamp cannot be found
set, wait one second, set, set, get – flashback-age:-2.5 not found
Value from past timestamp set, <time>, wait one second, set, set, get – flashback-
asOf:<time>
first value returned
Value from before first
timestamp cannot be found
<time>, wait, set, set, set, get – flashback-asOf:<time> not found error
How and Why participate in an Open Source Project
*) a random key is generated for each test and used for all get, set and delete operations
Publiek
Run Test
• Add flashback test-cases to unit test and integration test
• Without having touched the state store component’s code – run the test
• the run should be successful – but [most] new tests will fail
• our objective is clear: change the code to make all tests succeed
How and Why participate in an Open Source Project
my laptop
dapr-dev/
components-contrib
add test
cases
Publiek
Create Code – Run Test – Run Lint
• Implement the desired functionality
• by making all tests succeed
• Run gofumpt and lint to prepare code for automated checks that will run
when the PR is submitted
• fix relevant rule violations
How and Why participate in an Open Source Project
my laptop
dapr-dev/
components-contrib
add code implementing
features & satisfying test cases
Publiek
Create Branch, Commit Changes, Push
• Create a new branch flashback-in-oracle-database-state-store based on master
• Switch to branch
• Add changes and commit [with sign-off]
• Push (publish branch to repository fork on GitHub, include local commits)
How and Why participate in an Open Source Project
lucasjellema/
components-contrib
my laptop
dapr-dev/
components-contrib
branch
Commit Changes
(with sign-off)
push
flashback-in-oracle-
database-state-store
flashback-in-oracle-
database-state-store
Publiek
Create Pull Request
• Create PR for feature branch to upstream master – with link to issue
• wait for automated checks to give initial verdict
• refine based on failed checks, commit modifications, push to add to PR
• wait for human reviewers to give feedback
How and Why participate in an Open Source Project
lucasjellema/
components-contrib
my laptop
dapr-dev/
components-contrib
flashback-in-oracle-
database-state-store
flashback-in-oracle-
database-state-store
dapr/
components-contrib
PR
issue
Publiek
Create – Commit – Branch - Push – PR Documentation
• Produce the documentation that describe the new behavior of the Oracle
Database state store component
• Commit on a feature branch
• Push branch and changes to docs repository fork
• Create a PR to merge to the 1.8 documentation branch
How and Why participate in an Open Source Project
lucasjellema/
docs
Branch, Commit, Push
dapr/
docs
PR
Publiek
Uitnodiging
• Heb jij zin om mee te werken aan Dapr componenten?
How and Why participate in an Open Source Project
dapr/
components-contrib
AMIS-services/
components-contrib
fork
c
l
o
n
e
c
l
o
n
e
feature
branch
c
l
o
n
e
Publiek
Uitnodiging
• Heb jij zin om mee te werken aan Dapr componenten?
How and Why participate in an Open Source Project
dapr/
components-contrib
AMIS-services/
components-contrib
fork
c
l
o
n
e
c
l
o
n
e
PR
pull, commit,
push
feature
branch
feature dev
branch
pull, commit,
push
c
l
o
n
e
PR
The End
How and Why participate in an Open Source Project
Publiek
X
How and Why participate in an Open Source Project
dapr/
components-contrib
Issue: Proposal
1
lucasjellema/
components-contrib
fork
2
my laptop
3
dapr-dev/
components-contrib
branch
4
Create Code
5
Commit Changes
(with sign-off)
6
push
7
dapr/
docs
Issue: Proposal
9
c
l
o
n
e
PR
8
oci-objectstorage-state
oci-objectstorage
-state
Milestone
10
Publiek
Brief introduction on Open Source Projects
• types
• organization
• roles
• process
• tools/infra (GitHub)
• aliveness (see Yammer thread)
How and Why participate in an Open Source Project

More Related Content

What's hot

Get A Head on Your Repository
Get A Head on Your RepositoryGet A Head on Your Repository
Get A Head on Your Repositoryeosadler
 
Microservices Journey NYC
Microservices Journey NYCMicroservices Journey NYC
Microservices Journey NYCChristian Posta
 
Making software-projects-successful-nicar-2013
Making software-projects-successful-nicar-2013Making software-projects-successful-nicar-2013
Making software-projects-successful-nicar-2013Rich Gordon
 
SFbayACM ACM Data Science Camp 2015 10 24
SFbayACM ACM Data Science Camp 2015 10 24SFbayACM ACM Data Science Camp 2015 10 24
SFbayACM ACM Data Science Camp 2015 10 24Greg Makowski
 
DDD and Microservices: Like Peanut Butter and Jelly - Matt Stine
DDD and Microservices: Like Peanut Butter and Jelly - Matt StineDDD and Microservices: Like Peanut Butter and Jelly - Matt Stine
DDD and Microservices: Like Peanut Butter and Jelly - Matt StineVMware Tanzu
 
AppliFire Blue Print Design Guidelines
AppliFire Blue Print Design GuidelinesAppliFire Blue Print Design Guidelines
AppliFire Blue Print Design GuidelinesAppliFire Platform
 
Changing Views on Integration (AUSOUG Webinar Series, May 2020)
Changing Views on Integration (AUSOUG Webinar Series, May 2020)Changing Views on Integration (AUSOUG Webinar Series, May 2020)
Changing Views on Integration (AUSOUG Webinar Series, May 2020)Lucas Jellema
 
Microservices for Mortals
Microservices for MortalsMicroservices for Mortals
Microservices for MortalsBert Ertman
 
5/ GitHub Inner Source @ OPEN'16
5/ GitHub Inner Source @ OPEN'165/ GitHub Inner Source @ OPEN'16
5/ GitHub Inner Source @ OPEN'16Kangaroot
 
Codemotion Rome 2018 "Continuous Delivery with Containers: The Good, the Bad ...
Codemotion Rome 2018 "Continuous Delivery with Containers: The Good, the Bad ...Codemotion Rome 2018 "Continuous Delivery with Containers: The Good, the Bad ...
Codemotion Rome 2018 "Continuous Delivery with Containers: The Good, the Bad ...Daniel Bryant
 
From Monoliths to Services: Paying Your Technical Debt
From Monoliths to Services: Paying Your Technical DebtFrom Monoliths to Services: Paying Your Technical Debt
From Monoliths to Services: Paying Your Technical DebtTechWell
 
Digital Rebar Community Welcome Guide
Digital Rebar Community Welcome GuideDigital Rebar Community Welcome Guide
Digital Rebar Community Welcome GuideRackN
 
The Paradox of Agile Architecture Quality: Designing for Failure
The Paradox of Agile Architecture Quality: Designing for FailureThe Paradox of Agile Architecture Quality: Designing for Failure
The Paradox of Agile Architecture Quality: Designing for FailureJason Bloomberg
 
The eBay Architecture: Striking a Balance between Site Stability, Feature Ve...
The eBay Architecture:  Striking a Balance between Site Stability, Feature Ve...The eBay Architecture:  Striking a Balance between Site Stability, Feature Ve...
The eBay Architecture: Striking a Balance between Site Stability, Feature Ve...Randy Shoup
 
Best Practices in Starting an Open Source Project for Companies
Best Practices in Starting an Open Source Project for CompaniesBest Practices in Starting an Open Source Project for Companies
Best Practices in Starting an Open Source Project for CompaniesAll Things Open
 
REST - Why, When and How? at AMIS25
REST - Why, When and How? at AMIS25REST - Why, When and How? at AMIS25
REST - Why, When and How? at AMIS25Jon Petter Hjulstad
 
Emerging Experiences - More Personal Computing (MPC) - Tim Huckaby
Emerging Experiences - More Personal Computing (MPC) - Tim HuckabyEmerging Experiences - More Personal Computing (MPC) - Tim Huckaby
Emerging Experiences - More Personal Computing (MPC) - Tim HuckabyITCamp
 
CI-CD Jenkins, GitHub Actions, Tekton
CI-CD Jenkins, GitHub Actions, Tekton CI-CD Jenkins, GitHub Actions, Tekton
CI-CD Jenkins, GitHub Actions, Tekton Araf Karsh Hamid
 

What's hot (19)

Get A Head on Your Repository
Get A Head on Your RepositoryGet A Head on Your Repository
Get A Head on Your Repository
 
Microservices Journey NYC
Microservices Journey NYCMicroservices Journey NYC
Microservices Journey NYC
 
Making software-projects-successful-nicar-2013
Making software-projects-successful-nicar-2013Making software-projects-successful-nicar-2013
Making software-projects-successful-nicar-2013
 
SFbayACM ACM Data Science Camp 2015 10 24
SFbayACM ACM Data Science Camp 2015 10 24SFbayACM ACM Data Science Camp 2015 10 24
SFbayACM ACM Data Science Camp 2015 10 24
 
DDD and Microservices: Like Peanut Butter and Jelly - Matt Stine
DDD and Microservices: Like Peanut Butter and Jelly - Matt StineDDD and Microservices: Like Peanut Butter and Jelly - Matt Stine
DDD and Microservices: Like Peanut Butter and Jelly - Matt Stine
 
AppliFire Blue Print Design Guidelines
AppliFire Blue Print Design GuidelinesAppliFire Blue Print Design Guidelines
AppliFire Blue Print Design Guidelines
 
Changing Views on Integration (AUSOUG Webinar Series, May 2020)
Changing Views on Integration (AUSOUG Webinar Series, May 2020)Changing Views on Integration (AUSOUG Webinar Series, May 2020)
Changing Views on Integration (AUSOUG Webinar Series, May 2020)
 
Microservices for Mortals
Microservices for MortalsMicroservices for Mortals
Microservices for Mortals
 
5/ GitHub Inner Source @ OPEN'16
5/ GitHub Inner Source @ OPEN'165/ GitHub Inner Source @ OPEN'16
5/ GitHub Inner Source @ OPEN'16
 
Codemotion Rome 2018 "Continuous Delivery with Containers: The Good, the Bad ...
Codemotion Rome 2018 "Continuous Delivery with Containers: The Good, the Bad ...Codemotion Rome 2018 "Continuous Delivery with Containers: The Good, the Bad ...
Codemotion Rome 2018 "Continuous Delivery with Containers: The Good, the Bad ...
 
From Monoliths to Services: Paying Your Technical Debt
From Monoliths to Services: Paying Your Technical DebtFrom Monoliths to Services: Paying Your Technical Debt
From Monoliths to Services: Paying Your Technical Debt
 
Digital Rebar Community Welcome Guide
Digital Rebar Community Welcome GuideDigital Rebar Community Welcome Guide
Digital Rebar Community Welcome Guide
 
The Paradox of Agile Architecture Quality: Designing for Failure
The Paradox of Agile Architecture Quality: Designing for FailureThe Paradox of Agile Architecture Quality: Designing for Failure
The Paradox of Agile Architecture Quality: Designing for Failure
 
The eBay Architecture: Striking a Balance between Site Stability, Feature Ve...
The eBay Architecture:  Striking a Balance between Site Stability, Feature Ve...The eBay Architecture:  Striking a Balance between Site Stability, Feature Ve...
The eBay Architecture: Striking a Balance between Site Stability, Feature Ve...
 
Best Practices in Starting an Open Source Project for Companies
Best Practices in Starting an Open Source Project for CompaniesBest Practices in Starting an Open Source Project for Companies
Best Practices in Starting an Open Source Project for Companies
 
A Microservice Journey
A Microservice JourneyA Microservice Journey
A Microservice Journey
 
REST - Why, When and How? at AMIS25
REST - Why, When and How? at AMIS25REST - Why, When and How? at AMIS25
REST - Why, When and How? at AMIS25
 
Emerging Experiences - More Personal Computing (MPC) - Tim Huckaby
Emerging Experiences - More Personal Computing (MPC) - Tim HuckabyEmerging Experiences - More Personal Computing (MPC) - Tim Huckaby
Emerging Experiences - More Personal Computing (MPC) - Tim Huckaby
 
CI-CD Jenkins, GitHub Actions, Tekton
CI-CD Jenkins, GitHub Actions, Tekton CI-CD Jenkins, GitHub Actions, Tekton
CI-CD Jenkins, GitHub Actions, Tekton
 

Similar to How and Why you can and should Participate in Open Source Projects (AMIS, Software Engineering SIG, February 2022)

Docs as Part of the Product - Open Source Summit North America 2018
Docs as Part of the Product - Open Source Summit North America 2018Docs as Part of the Product - Open Source Summit North America 2018
Docs as Part of the Product - Open Source Summit North America 2018Den Delimarsky
 
Oscon 2016: open source lessons from the todo group
Oscon 2016: open source lessons from the todo groupOscon 2016: open source lessons from the todo group
Oscon 2016: open source lessons from the todo groupBen VanEvery
 
Open Source Lessons from the TODO Group
Open Source Lessons from the TODO GroupOpen Source Lessons from the TODO Group
Open Source Lessons from the TODO GroupChris Aniszczyk
 
Prototyping like it is 2022
Prototyping like it is 2022 Prototyping like it is 2022
Prototyping like it is 2022 Michael Yagudaev
 
Guide to open source
Guide to open source Guide to open source
Guide to open source Javier Perez
 
Code the docs-yu liu
Code the docs-yu liuCode the docs-yu liu
Code the docs-yu liuStreamNative
 
OpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot CampOpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot CampAnne Gentle
 
Delivering Developer Tools at Scale
Delivering Developer Tools at ScaleDelivering Developer Tools at Scale
Delivering Developer Tools at ScaleOracle Developers
 
But we're already open source! Why would I want to bring my code to Apache?
But we're already open source! Why would I want to bring my code to Apache?But we're already open source! Why would I want to bring my code to Apache?
But we're already open source! Why would I want to bring my code to Apache?gagravarr
 
7 Apache Process Cloudstack Developer Day
7 Apache Process Cloudstack Developer Day7 Apache Process Cloudstack Developer Day
7 Apache Process Cloudstack Developer DayKimihiko Kitase
 
Application Deployment at UC Riverside
Application Deployment at UC RiversideApplication Deployment at UC Riverside
Application Deployment at UC RiversideMichael Kennedy
 
Contributing to open source
Contributing to open sourceContributing to open source
Contributing to open sourceDevin Abbott
 
OpenStack Documentation in the Open
OpenStack Documentation in the OpenOpenStack Documentation in the Open
OpenStack Documentation in the OpenAnne Gentle
 
How to get started in Open Source!
How to get started in Open Source!How to get started in Open Source!
How to get started in Open Source!Pradeep Singh
 
apidays Paris 2022 - OpenAPI: An Early Design Feedback Engine, Lukas Rosensto...
apidays Paris 2022 - OpenAPI: An Early Design Feedback Engine, Lukas Rosensto...apidays Paris 2022 - OpenAPI: An Early Design Feedback Engine, Lukas Rosensto...
apidays Paris 2022 - OpenAPI: An Early Design Feedback Engine, Lukas Rosensto...apidays
 
Intro to open source - 101 presentation
Intro to open source - 101 presentationIntro to open source - 101 presentation
Intro to open source - 101 presentationJavier Perez
 
Testing API's: Tools & Tips & Tricks (Oh My!)
Testing API's: Tools & Tips & Tricks (Oh My!)Testing API's: Tools & Tips & Tricks (Oh My!)
Testing API's: Tools & Tips & Tricks (Oh My!)Ford Prior
 

Similar to How and Why you can and should Participate in Open Source Projects (AMIS, Software Engineering SIG, February 2022) (20)

Docs as Part of the Product - Open Source Summit North America 2018
Docs as Part of the Product - Open Source Summit North America 2018Docs as Part of the Product - Open Source Summit North America 2018
Docs as Part of the Product - Open Source Summit North America 2018
 
Oscon 2016: open source lessons from the todo group
Oscon 2016: open source lessons from the todo groupOscon 2016: open source lessons from the todo group
Oscon 2016: open source lessons from the todo group
 
Open Source Lessons from the TODO Group
Open Source Lessons from the TODO GroupOpen Source Lessons from the TODO Group
Open Source Lessons from the TODO Group
 
Prototyping like it is 2022
Prototyping like it is 2022 Prototyping like it is 2022
Prototyping like it is 2022
 
Guide to open source
Guide to open source Guide to open source
Guide to open source
 
Code the docs-yu liu
Code the docs-yu liuCode the docs-yu liu
Code the docs-yu liu
 
Ice dec05-04-wan leung
Ice dec05-04-wan leungIce dec05-04-wan leung
Ice dec05-04-wan leung
 
Stackato
StackatoStackato
Stackato
 
OpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot CampOpenStack Doc Overview for Boot Camp
OpenStack Doc Overview for Boot Camp
 
Delivering Developer Tools at Scale
Delivering Developer Tools at ScaleDelivering Developer Tools at Scale
Delivering Developer Tools at Scale
 
But we're already open source! Why would I want to bring my code to Apache?
But we're already open source! Why would I want to bring my code to Apache?But we're already open source! Why would I want to bring my code to Apache?
But we're already open source! Why would I want to bring my code to Apache?
 
7 Apache Process Cloudstack Developer Day
7 Apache Process Cloudstack Developer Day7 Apache Process Cloudstack Developer Day
7 Apache Process Cloudstack Developer Day
 
Application Deployment at UC Riverside
Application Deployment at UC RiversideApplication Deployment at UC Riverside
Application Deployment at UC Riverside
 
Contributing to open source
Contributing to open sourceContributing to open source
Contributing to open source
 
OpenStack Documentation in the Open
OpenStack Documentation in the OpenOpenStack Documentation in the Open
OpenStack Documentation in the Open
 
Stackato v6
Stackato v6Stackato v6
Stackato v6
 
How to get started in Open Source!
How to get started in Open Source!How to get started in Open Source!
How to get started in Open Source!
 
apidays Paris 2022 - OpenAPI: An Early Design Feedback Engine, Lukas Rosensto...
apidays Paris 2022 - OpenAPI: An Early Design Feedback Engine, Lukas Rosensto...apidays Paris 2022 - OpenAPI: An Early Design Feedback Engine, Lukas Rosensto...
apidays Paris 2022 - OpenAPI: An Early Design Feedback Engine, Lukas Rosensto...
 
Intro to open source - 101 presentation
Intro to open source - 101 presentationIntro to open source - 101 presentation
Intro to open source - 101 presentation
 
Testing API's: Tools & Tips & Tricks (Oh My!)
Testing API's: Tools & Tips & Tricks (Oh My!)Testing API's: Tools & Tips & Tricks (Oh My!)
Testing API's: Tools & Tips & Tricks (Oh My!)
 

More from Lucas Jellema

Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...Lucas Jellema
 
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...Lucas Jellema
 
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...Lucas Jellema
 
Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...Lucas Jellema
 
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...Lucas Jellema
 
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...Lucas Jellema
 
Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!Lucas Jellema
 
IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)Lucas Jellema
 
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...Lucas Jellema
 
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...Lucas Jellema
 
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...Lucas Jellema
 
Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...Lucas Jellema
 
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...Lucas Jellema
 
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)Lucas Jellema
 
Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)Lucas Jellema
 
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...Lucas Jellema
 
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...Lucas Jellema
 
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...Lucas Jellema
 
Triple C - Centralize, Cloudify and Consolidate Dozens of Oracle Databases (O...
Triple C - Centralize, Cloudify and Consolidate Dozens of Oracle Databases (O...Triple C - Centralize, Cloudify and Consolidate Dozens of Oracle Databases (O...
Triple C - Centralize, Cloudify and Consolidate Dozens of Oracle Databases (O...Lucas Jellema
 
Cloud Native Application Development-build fast, low TCO, scalable & agile so...
Cloud Native Application Development-build fast, low TCO, scalable & agile so...Cloud Native Application Development-build fast, low TCO, scalable & agile so...
Cloud Native Application Development-build fast, low TCO, scalable & agile so...Lucas Jellema
 

More from Lucas Jellema (20)

Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...
 
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
 
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
 
Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...
 
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
 
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
 
Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!
 
IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)
 
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
 
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
 
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
 
Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...
 
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
 
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
 
Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)
 
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
 
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
 
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
 
Triple C - Centralize, Cloudify and Consolidate Dozens of Oracle Databases (O...
Triple C - Centralize, Cloudify and Consolidate Dozens of Oracle Databases (O...Triple C - Centralize, Cloudify and Consolidate Dozens of Oracle Databases (O...
Triple C - Centralize, Cloudify and Consolidate Dozens of Oracle Databases (O...
 
Cloud Native Application Development-build fast, low TCO, scalable & agile so...
Cloud Native Application Development-build fast, low TCO, scalable & agile so...Cloud Native Application Development-build fast, low TCO, scalable & agile so...
Cloud Native Application Development-build fast, low TCO, scalable & agile so...
 

Recently uploaded

KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
(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
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
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
 

Recently uploaded (20)

KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
(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...
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
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
 

How and Why you can and should Participate in Open Source Projects (AMIS, Software Engineering SIG, February 2022)

  • 1. Lucas Jellema Architect & CTO AMIS | Conclusion How and Why you can and should contribute to an open source project?!
  • 2. Publiek Well known Open Source Products Linux Apache Http Server Apache Tomcat Apache Struts Hibernate MySQL GlassFish Ant Maven Hudson Jenkins JUnit Spring Framework Log4J Wordpress Kubernetes Apache Kafka Apache Spark VS Code Eclipse Ubuntu Azure Functions Firefox Magento Diagrams.net OpenOffice How and Why participate in an Open Source Project I am because we are
  • 3. Publiek Quiz • How many open source products did you inspect the source of? • For how many open source products did you change code? • and submitted it? • For how many did you: • file issues & enhancement requests • contribute to documentation • submitted examples or test cases • About how many did you • present • blog • Tweet? • How many open source products did you make use of? • today? • this month? • in your professional career How and Why participate in an Open Source Project
  • 4. Publiek Open Source code analyzed and contributed How and Why participate in an Open Source Project
  • 5. Publiek Contributions to or about open source projects How and Why participate in an Open Source Project
  • 6. Publiek Number of open source products used in your career How and Why participate in an Open Source Project
  • 7. Publiek Why Participate? • To give back/make a contribution (“moral debt”) • Make the product better • Influence the product • Plug your own product • Help grow and spread, thrive and persist • Learn about and understand the product (technically and strategically) • To increase your own personal status • For fun, thrill • Meet new people, belong to a team • Grow as a software engineer • learn from process, tooling, communication • learn from studying examples and emulating them • learn from review feedback and interaction How and Why participate in an Open Source Project
  • 8. Publiek Why not? • I think lack the skills to be of value • Scary to be exposed to public scrutiny • Don’t know how to • I do not really care • I have a day job • I do not particularly like IT • I have other things to do How and Why participate in an Open Source Project
  • 9. Publiek How and Why participate in an Open Source Project
  • 10. Publiek Terms to come to grips with LGTM PR Clone Fork Merge Push Pull Origin Commit (verb & noun) Branch Milestone Issue upstream repository How and Why participate in an Open Source Project review alpha beta stable Git GitHub GitHub Action GitHub Code Space Dev Container Markdown Founder Maintainer Committer Author Contributor unit test conformance test end 2 end test integration test Hugo Go Go Mod Tidy Go Lint Go Test fumpt
  • 11. Publiek Types of Open Source Projects How and Why participate in an Open Source Project Code dumped by commercial vendor One person effort go-ora Project with wonderful past but bleak future Apache Struts, Apache MyFaces, Apache Xalan, Apache Ant Closely controlled by and mixed up with a single commercial entity Elastic Stack, OpenShift, VirtualBox, VS Code, MySQL Strategic support [and interest] from multiple commercial vendors OpenJDK, Kubernetes, Apache Spark Unaffiliated project with large committer community Python, Linux, NodeJS
  • 12. Publiek OutSystems “donating open source” How and Why participate in an Open Source Project
  • 13. Publiek Assess status of an Open Source Project • # issues (open and closed) (bug reports, enhancement requests) • # pull requests (open and closed) – these constitute the actual evolution of the product (although the number does not prove the value and scope of the changes) • # authors (how many different contributors have made a substantial contribution) • who is using the product/who have dependencies and direct stakes? • for example (large) commercial players? other (big) open source products? • # forks (how many times have the repositories been forked • this would be done for local experimentation and customizations and for making contributions • release history (frequency of new releases and delta between releases) • # commits (individual code changes • # stars (how many "likes" have been awarded by the community) • # threads on StackOverflow (recently); Google Trends - # recent searches • visibility through presentations on conferences, articles on Medium, tweets • activity on the community discussion forum (such as Slack or Discord); #members, #threads, #messages in recent times • # different people participating in issues and PRs • immerse oneself in a project for a few weeks How and Why participate in an Open Source Project
  • 14. Publiek Dapr • Runtime • Personal Assistant for Applications • Distributed Application Runtime • Microservice architecture • Decoupling Code Café Speed Dating - December 2021 14
  • 15. Publiek Dapr.io • Launched by Microsoft (2019) • Application runtime framework – supporting cloud native and serverless • Every application gets a uniform Personal Assistant that takes care of common tasks • remember (take note and reproduce) • keep log • restrict access • handle incoming • route outgoing • interact with other PAs Code Café Speed Dating - December 2021 15 Application Microservice or Monolith Personal Assistant (Dapr) Personal Assistant (Dapr) Personal Assistant (Dapr) Personal Assistant (Dapr) Personal Assistant (Dapr) Personal Assistant (Dapr)
  • 16. Publiek Dapr.io • Personal Assistant is Dapr Side Car • companion process or side car container in Kubernetes Pod • Out of the Box support for • local products & cloud services • Kafka, AWS SQS Azure Event Hub, GCP Pub/Sub, RabbitMQ • DynamoDB, RDS, CosmosDB, PostgreSQL, Redis, MySQL, MongoDB, Zookeeper • SMTP, Twillio, Twitter, Consul Code Café Speed Dating - December 2021 16 = Custom Application
  • 17. Publiek Dapr Statestores • No Oracle anywhere in Dapr • Introducing Oracle based components has value • for Dapr • for Oracle • for me (to use Dapr in Oracle context) • And: I can bring value as bridge between Dapr, microservices & Oracle & OCI • at last my chance to contribute to OSS! • One little obstacle: Dapr is Go – I do not know Go. • My Objective: contribute Dapr State Store component for OCI Object Storage • and subsequently Oracle Database/ATP, OCI Streaming, Oracle NoSQL, … • how to go get going? How and Why participate in an Open Source Project
  • 18. Publiek Observability Prometheus AppInsights Jaeger Zipkin Bindings & Triggers State Stores Secret Stores PubSub Brokers Dapr Architecture How and Why participate in an Open Source Project Dapr main state store interface pub/sub interface binding interface secret interface register all components (per type) observable interface do something for me – store or retrieve state, subscribe to topic (and callback with messages), invoke service, retrieve secret components.yaml
  • 19. Publiek How to contribute to Dapr.io? • Analyze Dapr.io website & GitHub • Repositories, subprojects • Discord community communication platform • Developer instructions • process & tooling • technical docs? • existing code & tests • PRs and review conversations • submission steps How and Why participate in an Open Source Project
  • 20. Publiek Dapr Community How and Why participate in an Open Source Project
  • 21. Publiek How and Why participate in an Open Source Project project X repo lucasjellema/ project X fork 1 my laptop 2 local-dev/ project X branch 3 Create Docs, Code, Example, Test 4 Commit Changes 5 push 6 c l o n e PR 7 my-contribution-branch my-contribution -branch Fork-Clone-Branch-Code-Commit-Push-PR Milestone 8 my GitHub account
  • 22. Publiek How and Why participate in an Open Source Project dapr/ components-contrib Issue: Proposal 1 lucasjellema/ components-contrib fork 2 my laptop 3 dapr-dev/ components-contrib branch 4 Create Test & Code 5 Commit Changes (with sign-off) 6 push 7 dapr/ docs Issue: Proposal 9 c l o n e PR 8 oci-objectstorage-state oci-objectstorage -state Milestone 10
  • 23. Publiek Good First Issue How and Why participate in an Open Source Project
  • 24. Publiek My Contribution: a new State Store component based on Oracle Cloud Object Storage Service • State is stored as object in a special bucket on OCI Object Storage How and Why participate in an Open Source Project Object Storage Custom State Store Component OCI Object Storage set & get state components.yaml components.yaml set & get state
  • 25. Publiek Create Issue to Propose Change How and Why participate in an Open Source Project https://github.com/dapr/components-contrib/issues/1400
  • 26. Publiek Encouragement from one of the founders himself How and Why participate in an Open Source Project
  • 27. Publiek Fork Repository How and Why participate in an Open Source Project dapr/ components-contrib lucasjellema/ components-contrib fork
  • 28. Publiek Repository Fork in my GitHub account How and Why participate in an Open Source Project lucasjellema/ components-contrib
  • 29. Publiek Set up local environment • WSL2 + Ubuntu • Go Runtime • VS Code with Go extensions • Clone Repository Fork How and Why participate in an Open Source Project lucasjellema/ components-contrib my laptop dapr-dev/ components-contrib c l o n e
  • 30. Publiek 35 My Application Object Storage tenancy, user, fingerprint, private key create bucket create object What I need to develop …. OCI Go SDK
  • 31. Publiek Create branch to develop on How and Why participate in an Open Source Project my laptop dapr-dev/ components-contrib branch Create Code Commit Changes (with sign-off) oci-objectstorage-state
  • 32. Publiek Create Test, Create Code How and Why participate in an Open Source Project
  • 33. Publiek Create Test, Create Code • Two levels of testing • Unit Testing (with Mock OCI interactor) • Integration Testing (actually talking to OCI environment) How and Why participate in an Open Source Project
  • 34. Publiek Code Formatting and Linting • Apply formatting rules for uniform code layout • [also] to facilitate compare and merge • Check Code Quality against rules • formatting, commenting, complexity of functions, variable naming, (un)reachable code How and Why participate in an Open Source Project
  • 35. Publiek Add, Commit, Push • Add changed files to change set • Commit change set • with Sign Off in message • Push Changes - to Repository Fork on GitHub How and Why participate in an Open Source Project lucasjellema/ components-contrib dapr-dev/ components-contrib Create Test & Code Commit Changes (with sign-off) push c l o n e oci-objectstorage-state oci-objectstorage -state
  • 36. Publiek How and Why participate in an Open Source Project lucasjellema/ components-contrib dapr-dev/ components-contrib Create Test & Code Commit Changes (with sign-off) push c l o n e oci-objectstorage-state oci-objectstorage -state
  • 37. Publiek How and Why participate in an Open Source Project Changes have landed in GitHub – branch in forked repo
  • 38. Publiek Next: the big PR! How and Why participate in an Open Source Project fork push c l o n e PR my-contribution -branch my GitHub account lucasjellema/ components-contrib dapr/ components-contrib
  • 39. Publiek First: the big PrepaRe! How and Why participate in an Open Source Project
  • 40. Publiek First: the big PrepaRe – Fetch from Upstream How and Why participate in an Open Source Project
  • 41. Publiek Create the Pull Request for merging my branch to the master How and Why participate in an Open Source Project
  • 42. Publiek Create the Pull Request for merging my branch to the master How and Why participate in an Open Source Project
  • 43. Publiek Next: the big PR! How and Why participate in an Open Source Project
  • 44. Publiek Initial feedback on PR How and Why participate in an Open Source Project
  • 45. Publiek Automated Checks – did not all succeed How and Why participate in an Open Source Project
  • 46. Publiek Extend PR with additional commits How and Why participate in an Open Source Project
  • 47. Publiek Extend PR with additional commits How and Why participate in an Open Source Project
  • 48. Publiek Waiting…. • The automated checks are not triggered automatically How and Why participate in an Open Source Project
  • 49. Publiek Enter PR conversation How and Why participate in an Open Source Project
  • 50. Publiek Wait for OK How and Why participate in an Open Source Project
  • 51. Publiek Tests are broken - not my code How and Why participate in an Open Source Project
  • 52. Publiek At last! PR is Merged How and Why participate in an Open Source Project now as Contributor my commits will trigger the automated checks
  • 53. Publiek Entering the Community How and Why participate in an Open Source Project
  • 54. Publiek Extend Documentation • Issue – link to component issue • Fork dapr/docs repository • Clone • Install Hugo Server • Create Branch • Make changes, commit, push • Create PR How and Why participate in an Open Source Project dapr/ docs Issue: Proposal PR
  • 55. Publiek How and Why participate in an Open Source Project dapr/ components-contrib Issue: Proposal 1 lucasjellema/ components-contrib fork 2 my laptop 3 dapr-dev/ components-contrib branch 4 Create Test & Code 5 Commit Changes (with sign-off) 6 push 7 dapr/ docs Issue: Proposal 9 c l o n e PR 8 oci-objectstorage-state oci-objectstorage -state Milestone 1.6 10
  • 56. Publiek Done? • Yes • Now wait for milestone 1.6 to be released How and Why participate in an Open Source Project
  • 57. Publiek Dapr 1.6 Release Day – January 25, 2022 How and Why participate in an Open Source Project
  • 58. Publiek How and Why participate in an Open Source Project
  • 59. Publiek How and Why participate in an Open Source Project
  • 60. Publiek Party? Kudos? How and Why participate in an Open Source Project
  • 61. Publiek The Effort of Setting up and Running an Open Source Project • Vision, High level design, architecture, roadmap, license • Attract, organize, facilitate a contributor community • Guidelines, Developer How-Tos, DevContainer • Code of Conduct • Community Communication – Discord, Slack • Manage people (egos, ambitions, emotions, opinions) • Involve vendors • Design and Implement structure and automated processes for software engineering • GitHub Set Up – Repositories, Issues, branching strategy • Automated Code Quality checks and End to End tests – GitHub Actions • Active management of Issues, Pull Requests, Tags (milestones), Dependencies • Release process and mechanism • Attract and Foster the User Community • Quality & Documentation (activity, bugfixing) • Website • Content • “noise/buzz” • Provide support to users • Build relations (vendors, other projects, VIPs, analysts) How and Why participate in an Open Source Project
  • 62. Publiek Dapr.io has dozens of committers, 100s of contributors How and Why participate in an Open Source Project
  • 63. Publiek Dapr.io has dozens of components How and Why participate in an Open Source Project
  • 64. Publiek On the essence of automation, human attention and civil conversation How and Why participate in an Open Source Project
  • 65. Publiek On the essence of automation, human attention and civil conversation (part 2) How and Why participate in an Open Source Project
  • 66. Publiek What happened since 25th January? • Improvements in OCI Object Storage state store component • Introduced new Oracle Database state store component • inspired by the existing PostgreSQL state store component • small contribution to sijms/go-ora project (Go driver for Oracle Database) How and Why participate in an Open Source Project
  • 67. Publiek 72 Custom State Store Component Oracle Database set & get state components.yaml components.yaml set & get state host, port sid, username, password, tableName
  • 68. Publiek PR was merged on February 8th How and Why participate in an Open Source Project
  • 69. Publiek Personal Findings • Learning experience • I can play at this level • Join, participate, contribute • Patience (time zones and more) • Complexity of managing an open source project • fragility How and Why participate in an Open Source Project
  • 70. Live Open Source Contribution Flashback History in Oracle Database State Store How and Why participate in an Open Source Project
  • 71. Publiek Live Open Source Coding: Let’s enrich the Oracle Database State Store Component • Idea • Issue – Feature Proposal • Issue – Documentation modification • (Fetch Upstream, Pull latest) • Create Test • Create Code (run test, run lint) • (Fetch Upstream, Pull latest) • Create Branch • Commit changes • Push • Create Pull Request • wait for automated checks to give initial verdict • (refine based on failed checks, commit, push) • wait for human reviewers to give feedback How and Why participate in an Open Source Project
  • 72. Publiek Idea: Flashback Feature - hints to retrieve historical state • Allow the use of “flashback hints” in the metadata sent in Get requests; these hints instruct the state store to return for a specific key • previous generations or versions of a state element • the state as it existed X seconds ago • the state as it existed at a specific timestamp in the past possibly even return the state from before it expired or was deleted • The response will provide metadata to indicate • what generation of the state is returned (current, previous, one before previous) • when the state returned was created and when it ceased to exist • if the element state element for this key no longer exists (expired or deleted) • If the requested history cannot be returned, no data is returned (and no error) How and Why participate in an Open Source Project
  • 73. Publiek Idea: flashback– hints in get-requests • Proposed Metadata in Get requests • flashback-generation – values 0 (for current value), -1 (for previous value), -2 (for the one but previous value), -3...-X – to ask for a specific generation of the state under the specified key • flashback-atTime – a UTC timestamp in the past - to ask for the value of the state under the specified key at a specific moment in the past • flashback- age– a positive integer - to ask for the value of the state under the specified key at the specified number seconds ago • flashback-allow-deleted – true or false – to indicate whether a value should be returned if the key currently is deleted or expired from the state store How and Why participate in an Open Source Project
  • 74. Publiek Idea: flashback– metadata in get-responses • Proposed Metadata in Get responses • flashback-generation – values 0 (for current value), -1 (for previous value), -2 (for the one but previous value), -3...-X – to indicate the specific generation of the state returned in the response • flashback-startTime – a UTC timestamp in the past – to indicate the time at which the state that is returned was created • flashback-endTime – a UTC timestamp in the past – to indicate the time at which the state that is returned was updated, deleted or expired • flashback-deleted – true or false – to indicate whether the key is deleted or expired from the state store at the present moment How and Why participate in an Open Source Project
  • 75. Publiek Issue – Feature Proposal How and Why participate in an Open Source Project dapr/ components-contrib Issue: Proposal 10 issue
  • 76. Publiek Issue – Documentation modification How and Why participate in an Open Source Project
  • 77. Publiek (Fetch Upstream, Pull latest) • To start from the latest code on the master branch • and prevent ugly merge operations later on • Fetch Upstream – to get current latest from Upstream repo to my Fork • In my Local Environment – pull to get the latest commit How and Why participate in an Open Source Project dapr/ components-contrib lucasjellema/ components-contrib fetch upstream my laptop dapr-dev/ components-contrib p u l l 10
  • 78. Publiek Create Test – Unit Test Label Actions *) Outcome flashback-generation is 0 or negative integer get – flashback-generation:24 error (incorrect value - positive integer - for flashback-generation) flashback-age is zero or positive number get – flashback-age:-3 error (incorrect value - negative value - for flashback-age) flashback-atTime is valid timestamp get – flashback-atTime:3 error (incorrect value – not a valid timestamp - for flashback-atTime) flashback-atTime is valid timestamp in the past get – flashback-atTime:2050-01- 31T23:59:59 error (incorrect value – future timestamp - for flashback-atTime) flashback-atTime is valid timestamp in the past after 10th November 2009 at 23:00 UTC get – flashback-atTime:2009-11- 10T22:0:0 error (incorrect value – too old timestamp - for flashback-atTime) flashback-generation is 0 or negative integer get – flashback-generation:XYZ error (incorrect value – not a number - for flashback-generation) flashback-age and flashback-atTime are both set get – flashback-age:50, flashback- atTime:2009-11-10T22:0:0 error (only one flashback metadata can be set – to prevent conflicts) How and Why participate in an Open Source Project *) a random key is generated for each test and used for all get, set and delete operations
  • 79. Publiek Create Test –Integration Test Label Actions *) Outcome Not found returned for non existing generation set, get – flashback-generation:-1 not found Value returned for existing generation set, get – flashback-generation:0 value returned Value returned for existing generation set, set, get – flashback-generation:-1 first (previous) value returned Original value returned after delete set, delete, get – flashback-generation:-1; flashback-allow- deleted: true value returned + flashback- deleted meta data Older generation value returned set, set, set, set, get – flashback-generation:-3 first value returned Value from past timestamp set, wait one second, set, set, get – flashback-age:-0.5 first value returned Value from before first timestamp cannot be found set, wait one second, set, set, get – flashback-age:-2.5 not found Value from past timestamp set, <time>, wait one second, set, set, get – flashback- asOf:<time> first value returned Value from before first timestamp cannot be found <time>, wait, set, set, set, get – flashback-asOf:<time> not found error How and Why participate in an Open Source Project *) a random key is generated for each test and used for all get, set and delete operations
  • 80. Publiek Run Test • Add flashback test-cases to unit test and integration test • Without having touched the state store component’s code – run the test • the run should be successful – but [most] new tests will fail • our objective is clear: change the code to make all tests succeed How and Why participate in an Open Source Project my laptop dapr-dev/ components-contrib add test cases
  • 81. Publiek Create Code – Run Test – Run Lint • Implement the desired functionality • by making all tests succeed • Run gofumpt and lint to prepare code for automated checks that will run when the PR is submitted • fix relevant rule violations How and Why participate in an Open Source Project my laptop dapr-dev/ components-contrib add code implementing features & satisfying test cases
  • 82. Publiek Create Branch, Commit Changes, Push • Create a new branch flashback-in-oracle-database-state-store based on master • Switch to branch • Add changes and commit [with sign-off] • Push (publish branch to repository fork on GitHub, include local commits) How and Why participate in an Open Source Project lucasjellema/ components-contrib my laptop dapr-dev/ components-contrib branch Commit Changes (with sign-off) push flashback-in-oracle- database-state-store flashback-in-oracle- database-state-store
  • 83. Publiek Create Pull Request • Create PR for feature branch to upstream master – with link to issue • wait for automated checks to give initial verdict • refine based on failed checks, commit modifications, push to add to PR • wait for human reviewers to give feedback How and Why participate in an Open Source Project lucasjellema/ components-contrib my laptop dapr-dev/ components-contrib flashback-in-oracle- database-state-store flashback-in-oracle- database-state-store dapr/ components-contrib PR issue
  • 84. Publiek Create – Commit – Branch - Push – PR Documentation • Produce the documentation that describe the new behavior of the Oracle Database state store component • Commit on a feature branch • Push branch and changes to docs repository fork • Create a PR to merge to the 1.8 documentation branch How and Why participate in an Open Source Project lucasjellema/ docs Branch, Commit, Push dapr/ docs PR
  • 85. Publiek Uitnodiging • Heb jij zin om mee te werken aan Dapr componenten? How and Why participate in an Open Source Project dapr/ components-contrib AMIS-services/ components-contrib fork c l o n e c l o n e feature branch c l o n e
  • 86. Publiek Uitnodiging • Heb jij zin om mee te werken aan Dapr componenten? How and Why participate in an Open Source Project dapr/ components-contrib AMIS-services/ components-contrib fork c l o n e c l o n e PR pull, commit, push feature branch feature dev branch pull, commit, push c l o n e PR
  • 87. The End How and Why participate in an Open Source Project
  • 88. Publiek X How and Why participate in an Open Source Project dapr/ components-contrib Issue: Proposal 1 lucasjellema/ components-contrib fork 2 my laptop 3 dapr-dev/ components-contrib branch 4 Create Code 5 Commit Changes (with sign-off) 6 push 7 dapr/ docs Issue: Proposal 9 c l o n e PR 8 oci-objectstorage-state oci-objectstorage -state Milestone 10
  • 89. Publiek Brief introduction on Open Source Projects • types • organization • roles • process • tools/infra (GitHub) • aliveness (see Yammer thread) How and Why participate in an Open Source Project

Editor's Notes

  1. URLs to share: The Dapr.io open source project https://dapr.io/ The Dapr.io Components GitHub Repo https://github.com/dapr/components-contrib Dapr.io Docs on State Store Components: https://docs.dapr.io/reference/components-reference/supported-state-stores/#oracle-cloud-infrastructure-oci And Dapr.io Docs Preview 1.7 (with OCI Autonomous Database and Oracle Database): https://v1-7.docs.dapr.io/reference/components-reference/supported-state-stores/#oracle-cloud-infrastructure-oci Dapr Discord https://discord.com/invite/ptHhX6jc34 The Medium article on my open source contribution: https://medium.com/@lucasjellema/submitting-my-custom-dapr-state-component-as-a-formal-open-source-contribution-work-in-progress-a8bd3fc1ece4
  2. https://en.wikipedia.org/wiki/Ubuntu Ubuntu is named after the Nguni philosophy of ubuntu, which Canonical indicates means "humanity to others" with a connotation of "I am what I am because of who we all are".[7]
  3. https://github.com/dapr/components-contrib/issues/1400
  4. https://docs.dapr.io/reference/components-reference/supported-state-stores/#oracle-cloud-infrastructure-oci
  5. https://opensource.guide/starting-a-project/
  6. Allow retrieval of past generations of historical state from Oracle Database State Store <!-- If you need to report a security issue please visit https://docs.dapr.io/operations/support/support-security-issues --> ## Describe the feature <!-- Please also discuss possible business value --> Through the use of a few metadata parameters in requests to get data from the state store, users of the Oracle Database State Store are able to indicate they want to retrieve state from the past, instead of the current state. They can for example ask for a specific generation (similar to HEAD~2 or HEAD~5 instruction in Git) such as the previous state or the state from five generations ago. Users can also ask for the state at a specific timestamp or the state as it existed the indicated number of seconds ago. Proposed metadata parameters: * _flashback-generation_ – values 0 (for current value), -1 (for previous value), -2 (for the one but previous value), -3...-X – to ask for a specific generation of the state under the specified key * _flashback-atTime_ – a UTC timestamp in the past - to ask for the value of the state under the specified key at a specific moment in the past * _flashback-age_– a positive integer - to ask for the value of the state under the specified key at the specified number seconds ago * _flashback-allow-deleted_ – true or false – to indicate whether a value should be returned if the key currently is deleted or expired from the state store When the state did not exist at the specified point in time (or generation) or is no longer available from the state store's flashback mechanism, the response is empty (no error) just in the case of a request for state under a key that does not occur. The response will include the following meta data parameter when the returned historical state corresponds to a state record that is in the present expired or deleted: * _flashback-deleted_ – true or false – to indicate whether the key is deleted or expired from the state store at the present moment The proposed feature leverages the Oracle Database mechanisms of Flashback Query and Flashback Versions Query. No additional setup of the database is required. This feature allows applications to track changes to a specific state element in time - and to construct a consistent picture of the world by getting all state for a specific moment in time. The retrieval of past generations can be used to resolve issues around state changes from different sources - especially when a LAST WRITE policy was used. And the feature makes it possible to rollback changes and even recover from delete and expire operations. ## Release Note <!-- How should this new feature be announced in our release notes? It can be populated later. --> <!-- Keep it as a single line. Examples: --> <!-- RELEASE NOTE: **ADD** New feature in Dapr. --> <!-- RELEASE NOTE: **FIX** Bug in runtime. --> <!-- RELEASE NOTE: **UPDATE** Runtime dependency. --> RELEASE NOTE: **ADD** Retrieval of historic state from Oracle Database state store (using metadata parameters in get state requests)
  7. Describe new feature in Oracle Database State Store for retrieval of historical state **What content needs to be created or modified?** <!--A clear and concise description of what the problem is. Ex. There should be docs on how pub/sub works...--> The docs for state store component based on Oracle Database should describe the functionality that allows retrieval of historic and deleted/expired state. **Describe the solution you'd like** <!--A clear and concise description of what you want to happen--> The page describing the state store component for Oracle Database must be complemented with the description of retrieving historic state in get requests. **Where should the new material be placed?** <!--Please suggest where in the docs structure the new content should be created--> Changes are needed (only) in this page daprdocs/content/en/reference/components-reference/supported-state-stores/setup-oracledatabase.md **The associated pull request from dapr/dapr, dapr/components-contrib, or other Dapr code repos** <!-- Specify the URL to the associated pull request, if applicable For example: https://github.com/dapr/dapr/pull/3277 --> **Additional context** <!--Add any other context or screenshots about the feature request here-->
  8. Allow retrieval of past generations of historical state from Oracle Database State Store # Description Changes in Get request flow against the Oracle Database state store component: * four new metadata parameters are supported - to control the potential retrieval of historic and even deleted or expired state * extended unit test to validate the behavior that checks these parameters for acceptable values * extended integration test to validate the intended behavior based on the flashback metadata parameters * modified state store implementation for Oracle Database to provide the flashback behavior specified through the parameters when executing get requests Note: no impact on any of the functionality outside get-ting state from this state store. Through the use of a few metadata parameters in requests to get data from the state store, users of the Oracle Database State Store are able to indicate they want to retrieve state from the past, instead of the current state. They can for example ask for a specific generation (similar to HEAD~2 or HEAD~5 instruction in Git) such as the previous state or the state from five generations ago. Users can also ask for the state at a specific timestamp or the state as it existed the indicated number of seconds ago. Supported metadata parameters: * _flashback-generation_ – values 0 (for current value), -1 (for previous value), -2 (for the one but previous value), -3...-X – to ask for a specific generation of the state under the specified key * _flashback-atTime_ – a UTC timestamp in the past - to ask for the value of the state under the specified key at a specific moment in the past * _flashback-age_– a positive integer - to ask for the value of the state under the specified key at the specified number seconds ago * _flashback-allow-deleted_ – true or false – to indicate whether a value should be returned if the key currently is deleted or expired from the state store When the state did not exist at the specified point in time (or generation) or is no longer available from the state store's flashback mechanism, the response is empty (no error) just in the case of a request for state under a key that does not occur. The response to a get request includes the following meta data parameter when the returned historical state corresponds to a state record that is in the present expired or deleted: * _flashback-deleted_ – true or false – to indicate whether the key is deleted or expired from the state store at the present moment The implementation leverages the Oracle Database mechanisms of Flashback Query and Flashback Versions Query. No additional setup of the database is required. ## Issue reference We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation. Please reference the issue this PR will close: #_[issue number]_ ## Checklist Please make sure you've completed the relevant tasks for this PR, out of the following list: * [X] Code compiles correctly * [X] Created/updated tests * [ ] Extended the documentation / Created issue in the https://github.com/dapr/docs/ repo: dapr/docs#_[issue number]_
  9. https://stackoverflow.com/questions/9153598/how-do-i-fetch-a-branch-on-someone-elses-fork-on-github
  10. https://stackoverflow.com/questions/9153598/how-do-i-fetch-a-branch-on-someone-elses-fork-on-github
  11. https://web.yammer.com/main/threads/eyJfdHlwZSI6IlRocmVhZCIsImlkIjoiMTYwMTE5MjgyNTQyMTgyNCJ9