├── .gitbook
└── assets
│ ├── image (1).png
│ ├── image (2).png
│ ├── image (3).png
│ ├── image (4).png
│ ├── image (5).png
│ ├── image (6).png
│ ├── image (7).png
│ └── image.png
├── README.md
├── SUMMARY.md
├── apache-beam.md
├── books-and-papers.md
├── conference_and_meetup_videos.md
├── domain-driven-design.md
├── event-sourcing-and-cqrs.md
├── go-language.md
├── google-cloud.md
├── hibernate.md
├── janusgraph.md
├── java-programming-language.md
├── kafka.md
├── kotlin.md
├── kubernetes.md
├── microservices.md
├── performance-engineering.md
├── reactive.md
├── scalability.md
├── serverless.md
├── site-reliability-engineering.md
├── software-craftsmanship.md
└── software-security.md
/.gitbook/assets/image (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kgoralski/personal-wiki-and-learning-resources/de4823125451972573adfd97bbb9a43aeede285d/.gitbook/assets/image (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kgoralski/personal-wiki-and-learning-resources/de4823125451972573adfd97bbb9a43aeede285d/.gitbook/assets/image (2).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (3).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kgoralski/personal-wiki-and-learning-resources/de4823125451972573adfd97bbb9a43aeede285d/.gitbook/assets/image (3).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (4).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kgoralski/personal-wiki-and-learning-resources/de4823125451972573adfd97bbb9a43aeede285d/.gitbook/assets/image (4).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (5).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kgoralski/personal-wiki-and-learning-resources/de4823125451972573adfd97bbb9a43aeede285d/.gitbook/assets/image (5).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (6).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kgoralski/personal-wiki-and-learning-resources/de4823125451972573adfd97bbb9a43aeede285d/.gitbook/assets/image (6).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (7).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kgoralski/personal-wiki-and-learning-resources/de4823125451972573adfd97bbb9a43aeede285d/.gitbook/assets/image (7).png
--------------------------------------------------------------------------------
/.gitbook/assets/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kgoralski/personal-wiki-and-learning-resources/de4823125451972573adfd97bbb9a43aeede285d/.gitbook/assets/image.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # My Knowledge Wiki
2 |
3 | This is my personal wiki. Sharing interesting stuff. [https://kgoralski.gitbook.io/wiki/](https://kgoralski.gitbook.io/wiki/)
4 |
5 | Source is here: [https://github.com/kgoralski/personal-wiki-and-learning-resources](https://github.com/kgoralski/personal-wiki-and-learning-resources)
6 |
7 | [](https://twitter.com/k_goralski)
8 |
9 |
--------------------------------------------------------------------------------
/SUMMARY.md:
--------------------------------------------------------------------------------
1 | # Table of contents
2 |
3 | * [My Knowledge Wiki](README.md)
4 | * [Microservices](microservices.md)
5 | * [Domain-driven design \(DDD\) learning resources](domain-driven-design.md)
6 | * [Go Programming Language](go-language.md)
7 | * [Kotlin Programming Language](kotlin.md)
8 | * [Java Programming Language](java-programming-language.md)
9 | * [Hibernate](hibernate.md)
10 | * [Reactive Programming](reactive.md)
11 | * [Kubernetes](kubernetes.md)
12 | * [Apache Kafka](kafka.md)
13 | * [Apache Beam](apache-beam.md)
14 | * [Google Cloud](google-cloud.md)
15 | * [Serverless](serverless.md)
16 | * [Janusgraph](janusgraph.md)
17 | * [Event Sourcing & CQRS](event-sourcing-and-cqrs.md)
18 | * [Performance Engineering](performance-engineering.md)
19 | * [Site Reliability Engineering](site-reliability-engineering.md)
20 | * [Software Security](software-security.md)
21 | * [Scalability](scalability.md)
22 | * [Software Craftsmanship](software-craftsmanship.md)
23 | * [Books and Papers](books-and-papers.md)
24 | * [Conference and meetup videos](conference_and_meetup_videos.md)
25 |
26 |
--------------------------------------------------------------------------------
/apache-beam.md:
--------------------------------------------------------------------------------
1 | # Apache Beam
2 |
3 |
4 |
5 | ### Description
6 |
7 | For now Apache Beam has SDK for Java, Python and Go.
8 | [https://beam.apache.org/documentation/](https://beam.apache.org/documentation/)
9 |
10 | Apache Beam is actually new SDK for Google Cloud Dataflow.
11 |
12 | Cloud Dataflow is a fully-managed service for transforming and enriching data in [stream](https://cloud.google.com/solutions/big-data/stream-analytics/) \(real time\) and batch \(historical\) modes with equal reliability and expressiveness -- no more complex workarounds or compromises needed. And with its serverless approach to resource provisioning and management, you have access to virtually limitless capacity to solve your biggest data processing challenges, while paying only for what you use.
13 |
14 | Cloud Dataflow unlocks transformational use cases across industries, including:
15 |
16 | * Clickstream, Point-of-Sale, and segmentation analysis in retail
17 | * Fraud detection in financial services
18 | * Personalized user experience in gaming
19 | * IoT analytics in manufacturing, healthcare, and logistics
20 |
21 | 
22 |
23 | ### References
24 |
25 | * [https://cloud.google.com/dataflow/](https://cloud.google.com/dataflow/)
26 | * [https://beam.apache.org/](https://beam.apache.org/)
27 | * [https://github.com/pabloem/awesome-beam](https://github.com/pabloem/awesome-beam)
28 | * [https://beam.apache.org/documentation/runners/capability-matrix/](https://beam.apache.org/documentation/runners/capability-matrix/)
29 | * [https://beam.apache.org/documentation/programming-guide/](https://beam.apache.org/documentation/programming-guide/)
30 | * [https://beam.apache.org/documentation/programming-guide/\#applying-transforms](https://beam.apache.org/documentation/programming-guide/#applying-transforms)
31 | * [https://beam.apache.org/documentation/pipelines/design-your-pipeline/\#multiple-sources](https://beam.apache.org/documentation/pipelines/design-your-pipeline/#multiple-sources)
32 | * [https://beam.apache.org/documentation/programming-guide/\#pipeline-io](https://beam.apache.org/documentation/programming-guide/#pipeline-io)
33 | * [https://beam.apache.org/documentation/programming-guide/\#watermarks-and-late-data](https://beam.apache.org/documentation/programming-guide/#watermarks-and-late-data)
34 | * [https://beam.apache.org/documentation/programming-guide/\#triggers](https://beam.apache.org/documentation/programming-guide/#triggers)
35 | * [https://cloud.google.com/dataflow/pipelines/dataflow-monitoring-intf](https://cloud.google.com/dataflow/pipelines/dataflow-monitoring-intf)
36 | * [https://cloud.google.com/blog/big-data/2017/06/guide-to-common-cloud-dataflow-use-case-patterns-part-1](https://cloud.google.com/blog/big-data/2017/06/guide-to-common-cloud-dataflow-use-case-patterns-part-1) and [https://cloud.google.com/blog/big-data/2017/08/guide-to-common-cloud-dataflow-use-case-patterns-part-2](https://cloud.google.com/blog/big-data/2017/08/guide-to-common-cloud-dataflow-use-case-patterns-part-2) \(use cases\)
37 | * [https://cloud.google.com/blog/big-data/2016/04/scheduling-dataflow-pipelines-using-app-engine-cron-service-or-cloud-functions](https://cloud.google.com/blog/big-data/2016/04/scheduling-dataflow-pipelines-using-app-engine-cron-service-or-cloud-functions)
38 | * [https://cloud.google.com/blog/big-data/2016/01/handling-invalid-inputs-in-dataflow](https://cloud.google.com/blog/big-data/2016/01/handling-invalid-inputs-in-dataflow)
39 | * [https://beam.apache.org/documentation/programming-guide/\#groupbykey](https://beam.apache.org/documentation/programming-guide/#groupbykey)
40 | * [https://cloud.google.com/dataflow/service/dataflow-service-desc\#error-and-exception-handling](https://cloud.google.com/dataflow/service/dataflow-service-desc#error-and-exception-handling)
41 | * [https://beam.apache.org/documentation/io/built-in/](https://beam.apache.org/documentation/io/built-in/) \(build-in transforms IO\)
42 | * [https://github.com/apache/beam/tree/master/sdks/java/io](https://github.com/apache/beam/tree/master/sdks/java/io)
43 | * [https://cloud.google.com/dataflow/faq](https://cloud.google.com/dataflow/faq)
44 | * [https://medium.com/google-cloud/restarting-cloud-dataflow-in-flight-9c688c49adfd](https://medium.com/google-cloud/restarting-cloud-dataflow-in-flight-9c688c49adfd) restart/update google dataflow
45 | * [https://cloud.google.com/blog/big-data/2016/04/debugging-data-transformations-using-cloud-dataflow-and-stackdriver-debugger](https://cloud.google.com/blog/big-data/2016/04/debugging-data-transformations-using-cloud-dataflow-and-stackdriver-debugger) debug
46 | * [https://cloud.google.com/dataflow/docs/concepts/sdk-worker-dependencies](https://cloud.google.com/dataflow/docs/concepts/sdk-worker-dependencies) dependencies
47 | * [https://cloud.google.com/dataflow/pipelines/troubleshooting-your-pipeline\#rpc-timed-out-exceptions-deadline\_exceeded-exceptions-or-server-unresponsive-errors](https://cloud.google.com/dataflow/pipelines/troubleshooting-your-pipeline#rpc-timed-out-exceptions-deadline_exceeded-exceptions-or-server-unresponsive-errors)
48 | * [https://cloud.google.com/dataflow/service/dataflow-service-desc\#autoscaling](https://cloud.google.com/dataflow/service/dataflow-service-desc#autoscaling)
49 | * Old docs [https://cloud.google.com/dataflow/docs/](https://cloud.google.com/dataflow/docs/)
50 | * Old docs [https://cloud.google.com/dataflow/model/custom-io](https://cloud.google.com/dataflow/model/custom-io)
51 | * [https://beam.apache.org/blog/2017/08/28/timely-processing.html](https://beam.apache.org/blog/2017/08/28/timely-processing.html) \(and Batched RPC\)
52 |
53 | **Tutorials & examples**
54 |
55 | * [https://beam.apache.org/get-started/quickstart-java/](https://beam.apache.org/get-started/quickstart-java/)
56 | * [https://beam.apache.org/get-started/quickstart-py/](https://beam.apache.org/get-started/quickstart-py/)
57 | * [https://beam.apache.org/get-started/quickstart-go/](https://beam.apache.org/get-started/quickstart-go/)
58 | * [https://github.com/apache/beam/tree/master/examples/java/src/main/java/org/apache/beam/examples](https://github.com/apache/beam/tree/master/examples/java/src/main/java/org/apache/beam/examples)
59 | * [https://github.com/eljefe6a/beamexample/tree/master/BeamTutorial/src/main/java/org/apache/beam/examples/tutorial/game](https://github.com/eljefe6a/beamexample/tree/master/BeamTutorial/src/main/java/org/apache/beam/examples/tutorial/game)
60 | * [https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/io/CountingSource.java\#L33:47](https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/io/CountingSource.java#L33:47)
61 |
62 | ### **Understanding Streaming**
63 |
64 | * [https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-101](https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-101)
65 | * [https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-102](https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-102)
66 |
67 | ### Google Dataflow Pipeline example
68 |
69 | 
70 |
71 | ### Talks
72 |
73 | - Serverless data processing with Google Cloud Dataflow \(Google Cloud Next '17\) [http://youtube.com/watch?v=3BrcmUqWNm0](http://youtube.com/watch?v=3BrcmUqWNm0)
74 | - Apache Beam: Portable and Parallel Data Processing \(Google Cloud Next '17\) [https://www.youtube.com/watch?v=owTuuVt6Oro](https://www.youtube.com/watch?v=owTuuVt6Oro)
75 |
76 | ### Built-in Transforms
77 |
78 | {% embed url="https://beam.apache.org/documentation/io/built-in/" %}
79 |
80 | 
81 |
82 | ### How are Java exceptions handled in Dataflow?
83 |
84 | Your pipeline may throw exceptions while processing data. Some of these errors are transient \(e.g., temporary difficulty accessing an external service\), but some are permanent, such as errors caused by corrupt or unparseable input data, or null pointers during computation.
85 |
86 | Dataflow processes elements in arbitrary bundles, and will retry the complete bundle when an error is thrown for any element in that bundle. When running in batch mode, bundles including a failing item are retried 4 times. The pipeline will fail completely when a single bundle has failed 4 times. When running in streaming mode, a bundle including a failing item will be retried indefinitely, which may cause your pipeline to permanently stall.
87 |
88 | Exceptions in user code \(for example, your `DoFn` instances\) are reported in the [Dataflow Monitoring Interface](https://cloud.google.com/dataflow/pipelines/dataflow-monitoring-intf). If you run your pipeline with `BlockingDataflowPipelineRunner`, you'll also see error messages printed in your console or terminal window.
89 |
90 | Consider guarding against errors in your code by adding exception handlers. For example, if you'd like to drop elements that fail some custom input validation done in a `ParDo`, use a try/catch block within your `ParDo` to handle the exception and drop the element. You may also want to use an [`Aggregator`](https://cloud.google.com/dataflow/java-sdk/JavaDoc/com/google/cloud/dataflow/sdk/transforms/Aggregator) to keep track of error counts.
91 |
92 | ### Interesting stuff
93 |
94 | * [https://github.com/tuanavu/google-dataflow-examples](https://github.com/tuanavu/google-dataflow-examples) \(examples with Jupyter Notebook\)
95 | * [https://labs.spotify.com/2016/02/25/spotifys-event-delivery-the-road-to-the-cloud-part-i/](https://labs.spotify.com/2016/02/25/spotifys-event-delivery-the-road-to-the-cloud-part-i/)
96 | * [https://labs.spotify.com/2016/03/03/spotifys-event-delivery-the-road-to-the-cloud-part-ii/](https://labs.spotify.com/2016/03/03/spotifys-event-delivery-the-road-to-the-cloud-part-ii/)
97 | * [https://labs.spotify.com/2016/03/10/spotifys-event-delivery-the-road-to-the-cloud-part-iii/](https://labs.spotify.com/2016/03/10/spotifys-event-delivery-the-road-to-the-cloud-part-iii/) \(Google Dataflow here\)
98 | * [https://medium.com/@0x0ece/a-quick-demo-of-apache-beam-with-docker-da98b99a502a](https://medium.com/@0x0ece/a-quick-demo-of-apache-beam-with-docker-da98b99a502a) \(with Apache Flink\)
99 | * [https://stackoverflow.com/questions/45642292/apache-beam-job-stalled-on-google-cloud-cpu-is-high](https://stackoverflow.com/questions/45642292/apache-beam-job-stalled-on-google-cloud-cpu-is-high)
100 |
101 |
--------------------------------------------------------------------------------
/books-and-papers.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 'Books I have, read or want to read, computer science and stuff.'
3 | ---
4 |
5 | # Books and Papers
6 |
7 | ## Books
8 |
9 | #### Distributed Systems
10 |
11 | 1. Distributed Systems; Andrew S. Tanenbaum
12 | 2. Designing Data-Intensive Applications; Kleppman
13 | 3. Designing Event-Driven Systems; Stopford
14 | 4. Kafka: The Definitive Guide; Neha Narkhede, Gwen Shapira, Todd Palino
15 | 5. Making Sense of Stream Processing; Kleppmann
16 | 6. I Heart Logs; Kreps
17 | 7. Microservices AntiPatterns and Pitfalls, Richards
18 | 8. Software Architecture Patterns, Richards
19 |
20 | #### Operating Systems, Networks & SRE
21 |
22 | 1. Modern Operating Systems; Andrew S. Tanenbaum
23 | 2. Computer Networks; Andrew S. Tanenbaum
24 | 3. The Site Reliability Engineering: How Google Runs Production Systems; Murphy, Beyer, Jones, Petoff
25 | 4. The Site Reliability Workbook; Murphy, Beyer, Jones, Petoff
26 | 5. Linux System Programming; Love
27 | 6. Linux Kernel Development; Love
28 | 7. The Linux Programmer's Toolbox; Fusco
29 | 8. Systems Performance: Enterprise and the Cloud; Gregg
30 | 9. UNIX and Linux System Administration Handbook; [Evi Nemeth](https://www.amazon.com/s/ref=dp_byline_sr_book_1?ie=UTF8&field-author=Evi+Nemeth&text=Evi+Nemeth&sort=relevancerank&search-alias=books), [Garth Snyder](https://www.amazon.com/s/ref=dp_byline_sr_book_2?ie=UTF8&field-author=Garth+Snyder&text=Garth+Snyder&sort=relevancerank&search-alias=books), [Trent R. Hein](https://www.amazon.com/Trent-R-Hein/e/B001IGFJ5Q/ref=dp_byline_cont_book_3), [Ben Whaley](https://www.amazon.com/Ben-Whaley/e/B0725R4PV5/ref=dp_byline_cont_book_4), [Dan Mackin](https://www.amazon.com/Dan-Mackin/e/B076FDP78H/ref=dp_byline_cont_book_5)
31 |
32 | #### Databases
33 |
34 | 1. Database Internals. A Deep Dive into How Distributed Data Systems Work; [Alex Petrov](https://www.amazon.com/Alex-Petrov/e/B07YC94DMN/ref=dp_byline_cont_book_1)
35 | 2. Database Design for Mere Mortals: A Hands-On Guide to Relational Database Design;
36 |
37 | [Michael J. Hernandez](https://www.amazon.com/Michael-J-Hernandez/e/B000APGESM/ref=dp_byline_cont_book_1)
38 |
39 | 3. High Performance MySQL: Optimization, Backups, and Replication; [Baron Schwartz](https://www.amazon.com/Baron-Schwartz/e/B00OWS7XGU/ref=dp_byline_cont_book_1)
40 | 4. [The Art of PostgreSQL](https://theartofpostgresql.com/); [Dimitri Fontaine](https://www.youtube.com/watch?v=09b-uk9UXbM)
41 |
42 | #### Performance Engineering
43 |
44 | 1. Every Computer Performance Book: How to Avoid and Solve Performance Problems
on The Computers You Work With; [Bob Wescott](https://www.amazon.com/Bob-Wescott/e/B00C7CHP34/ref=dp_byline_cont_book_1)
45 | 2. The Practical Performance Analyst**;** [Neil Gunther](https://www.amazon.co.uk/s/ref=dp_byline_sr_book_1?ie=UTF8&field-author=Neil+Gunther&text=Neil+Gunther&sort=relevancerank&search-alias=books-uk)
46 | 3. Systems Performance: Enterprise and the Cloud; [Gregg](https://www.amazon.com/Brendan-Gregg/e/B004GG0SEW)
47 | 4. BPF Performance Tools; [Gregg](https://www.amazon.com/Brendan-Gregg/e/B004GG0SEW)
48 | 5. Performance Solutions: A Practical Guide to Creating Responsive, Scalable Software**;** [Connie U. Smith](https://www.amazon.com/Connie-U-Smith/e/B001IQXC9Q/ref=dp_byline_cont_book_1), [Lloyd G. Williams](https://www.amazon.com/s/ref=dp_byline_sr_book_2?ie=UTF8&field-author=Lloyd+G.+Williams&text=Lloyd+G.+Williams&sort=relevancerank&search-alias=books)
49 | 6. The Art of Capacity Planning: Scaling Web Resources; John Allspaw
50 | 7. Java Performance - The Definitive Guide; [Scott Oaks](https://www.amazon.com/Scott-Oaks/e/B000APH2E2)
51 | 8. Optimizing Java: Practical Techniques for Improving JVM Application Performance; [Benjamin J Evans](https://www.amazon.com/Benjamin-J-Evans/e/B07DGL1TM4/ref=dp_byline_cont_book_1) , [James Gough](https://www.amazon.com/s/ref=dp_byline_sr_book_2?ie=UTF8&field-author=James+Gough&text=James+Gough&sort=relevancerank&search-alias=books), [Chris Newland](https://www.amazon.com/Chris-Newland/e/B07L4YL11R/ref=dp_byline_cont_book_3)
52 | 9. High Performance Browser Networking: What every web developer should know about networking and web performance; [Ilya Grigorik](https://www.amazon.com/Ilya-Grigorik/e/B00CNKCS1E/ref=dp_byline_cont_ebooks_1)
53 | 10. High-Performance Java Persistence; [Vlad Mihalcea](https://www.amazon.com/Vlad-Mihalcea/e/B01N8PGJ7E/ref=dp_byline_cont_book_1)
54 | 11. [Go-Perf Book,](https://github.com/dgryski/go-perfbook) Thoughts on Go performance optimization, [Damian Gryski](https://twitter.com/dgryski)
55 | 12. The Garbage Collection Handbook: The Art of Automatic Memory Management;
56 |
57 | [Richard Jones](https://www.amazon.com/Richard-Jones/e/B000AQTHV2/ref=dp_byline_cont_book_1), [Antony Hosking](https://www.amazon.com/Antony-Hosking/e/B004QJ36QG/ref=dp_byline_cont_book_2), [Eliot Moss](https://www.amazon.com/s/ref=dp_byline_sr_book_3?ie=UTF8&field-author=Eliot+Moss&text=Eliot+Moss&sort=relevancerank&search-alias=books)
58 |
59 | #### Programming languages
60 |
61 | 1. Core Java, Volume I and II; Horstmann
62 | 2. Thinking in Java; Eckel
63 | 3. OCA/OCP Java SE 7 Programmer I & II Study Guide; Sierra & Bates
64 | 4. Effective Java; Bloch
65 | 5. Java Concurrency in Practice; Goetz
66 | 6. Spring Boot in Action; Walls
67 | 7. Java EE 7 Development with WildFly; Ćmil, Matłoka, Marchioni
68 | 8. Java Performance - The Definitive Guide - Scott Oaks
69 | 9. The C Programming Language; Kernighan, Ritchie
70 | 10. The C++ Programming Language; Stroustrup
71 | 11. Effective Modern C++; Meyers
72 | 12. The Go Programming Language; Donovan and Kernighan
73 | 13. Learning Python: Powerful Object-Oriented Programming; Lutz
74 | 14. Scala for the Impatient; Horstmann
75 | 15. Functional Programming in Scala; Chiusano, Bjarnason
76 | 16. Scala in Depth, Suereth
77 | 17. Javascript: The Good Parts, Crockford
78 | 18. Seven Languages in Seven Weeks, Tate
79 | 19. [The Rust Programming Language Paperback](https://doc.rust-lang.org/book/); [Steve Klabnik](https://www.amazon.com/Steve-Klabnik/e/B06XYFKYZB/ref=dp_byline_cont_book_1)
80 |
81 | #### Design Patterns
82 |
83 | 1. Design Patterns; Gang of Four
84 | 2. Head First, Design Patterns; Sierra, Robson, Bates & Freeman
85 |
86 | #### Algorithms & Maths
87 |
88 | 1. Algorithms Unlocked, Cormen
89 | 2. Introduction to Algorithms, Cormen
90 | 3. Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne
91 | 4. A Programmer's Introduction to Mathematics, Kun
92 |
93 | #### Craftsmanship
94 |
95 | 1. Clean Code; Martin
96 | 2. Working Effectively with Legacy Code; Martin
97 | 3. The Pragmatic Programmer; Hunt
98 | 4. Test Driven Development: By Example, Hunt
99 | 5. The Software Craftsman: Professionalism, Pragmatism, Pride; Mancuso
100 |
101 | #### Domain Driven-Design
102 |
103 | 1. Domain Driven-Design, Evans
104 | 2. Implementing Domain-Driven Design, Vernon
105 |
106 | #### Devops
107 |
108 | 1. The Goal 1 & 2, Goldratt
109 | 2. The Phoenix Project, Kim
110 | 3. The DevOPS Handbook, Kim
111 |
112 |
113 |
114 | ## Papers and articles
115 |
116 | 1. [https://paperswelove.org/](https://paperswelove.org/)
117 | 2. What Every Programmer Should Know About Memory [https://www.akkadia.org/drepper/cpumemory.pdf](https://www.akkadia.org/drepper/cpumemory.pdf)
118 | 3. First "Software Engineering" Nato Conference White Paper [http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1968.PDF](http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1968.PDF)
119 | 4. [https://aws.amazon.com/whitepapers/architecting-for-the-aws-cloud-best-practices/](https://aws.amazon.com/whitepapers/architecting-for-the-aws-cloud-best-practices/)
120 | 5. On the Impact of Memory Allocation on High-Performance Query Processing [https://arxiv.org/abs/1905.01135](https://arxiv.org/abs/1905.01135)
121 | 6. I/O Is Faster Than the CPU – Let’s Partition Resources and Eliminate \(Most\) OS Abstractions [https://penberg.org/parakernel-hotos19.pdf](https://penberg.org/parakernel-hotos19.pdf)
122 | 7. The benefits and costs of writing a POSIX kernel in a high-level language [https://www.usenix.org/system/files/osdi18-cutler.pdf](https://www.usenix.org/system/files/osdi18-cutler.pdf)
123 | 8. Learn where some of the network sysctl variables fit into the Linux/Kernel network flow [https://github.com/leandromoreira/linux-network-performance-parameters](https://github.com/leandromoreira/linux-network-performance-parameters)
124 | 9. Distributed consensus revised [https://blog.acolyer.org/2019/05/07/distributed-consensus-revised-part-i/](https://blog.acolyer.org/2019/05/07/distributed-consensus-revised-part-i/)
125 | 10. Monitoring and Tuning the Linux Networking Stack: Sending Data [https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data/](https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data/)
126 | 11. The Definitive Guide to Linux System Calls [https://blog.packagecloud.io/eng/2016/04/05/the-definitive-guide-to-linux-system-calls/](https://blog.packagecloud.io/eng/2016/04/05/the-definitive-guide-to-linux-system-calls/)
127 | 12. [https://blog.packagecloud.io/tag/linux/](https://blog.packagecloud.io/tag/linux/)
128 | 13. Simple Testing Can Prevent Most Critical Failures: An Analysis of Production Failures in Distributed Data-Intensive Systems [https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-yuan.pdf](https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-yuan.pdf)
129 | 14. [https://github.com/trimstray/technical-whitepapers](https://github.com/trimstray/technical-whitepapers)
130 |
131 | ## Various
132 |
133 | 1. Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World; by [William Kent](https://www.amazon.com/William-Kent/e/B001HPIOCS/ref=dp_byline_cont_book_1) , [Steve Hoberman](https://www.amazon.com/s/ref=dp_byline_sr_book_2?ie=UTF8&field-author=Steve+Hoberman&text=Steve+Hoberman&sort=relevancerank&search-alias=books)
134 |
135 |
--------------------------------------------------------------------------------
/conference_and_meetup_videos.md:
--------------------------------------------------------------------------------
1 | # Conference and meetup videos
2 |
3 | ## Conferences
4 |
5 | * Talkery [https://talkery.io/](https://talkery.io/)
6 | * GOTO [https://www.youtube.com/user/GotoConferences/playlists](https://www.youtube.com/user/GotoConferences/playlists)
7 | * Devoxx [https://www.youtube.com/channel/UCCBVCTuk6uJrN3iFV\_3vurg/playlists](https://www.youtube.com/channel/UCCBVCTuk6uJrN3iFV_3vurg/playlists)
8 | * Devoxx Poland [https://www.youtube.com/channel/UCAu3kLPVR1KScr5BReBJTvg/playlists](https://www.youtube.com/channel/UCAu3kLPVR1KScr5BReBJTvg/playlists)
9 | * Devoxx UK [https://www.youtube.com/channel/UCxIamwHotqAAdmecaKT9WpA/playlists](https://www.youtube.com/channel/UCxIamwHotqAAdmecaKT9WpA/playlists)
10 | * GopherCon [https://www.youtube.com/channel/UCx9QVEApa5BKLw9r8cnOFEA/playlists](https://www.youtube.com/channel/UCx9QVEApa5BKLw9r8cnOFEA/playlists)
11 | * GothamGo [https://www.youtube.com/channel/UCgRpkkcigKZk52JyAOYNs6w/playlists](https://www.youtube.com/channel/UCgRpkkcigKZk52JyAOYNs6w/playlists)
12 | * Golang UK [https://www.youtube.com/channel/UC9ZNrGdT2aAdrNbX78lbNlQ/playlists](https://www.youtube.com/channel/UC9ZNrGdT2aAdrNbX78lbNlQ/playlists)
13 | * Google I/O , GDD etc. [https://www.youtube.com/user/GoogleDevelopers/playlists](https://www.youtube.com/user/GoogleDevelopers/playlists)
14 | * Google Cloud [https://www.youtube.com/channel/UCTMRxtyHoE3LPcrl-kT4AQQ/playlists](https://www.youtube.com/channel/UCTMRxtyHoE3LPcrl-kT4AQQ/playlists)
15 | * JavaOne [https://www.youtube.com/user/java/playlists](https://www.youtube.com/user/java/playlists)
16 | * Code Europe [https://www.youtube.com/channel/UChdVVEAilVHULlycMbqRpdg/videos](https://www.youtube.com/channel/UChdVVEAilVHULlycMbqRpdg/videos)
17 | * Voxxed [https://www.youtube.com/user/voxxing/playlists](https://www.youtube.com/user/voxxing/playlists)
18 | * AWS [https://www.youtube.com/user/AmazonWebServices/playlists](https://www.youtube.com/user/AmazonWebServices/playlists)
19 | * Boiling Frogs PL [https://www.youtube.com/channel/UCgUfIjfLvWmARsQ-d5gPzrw/playlists](https://www.youtube.com/channel/UCgUfIjfLvWmARsQ-d5gPzrw/playlists)
20 | * DevopsCon [https://www.youtube.com/channel/UCttdqyJB5wuJOO2KXea6WMQ/playlists](https://www.youtube.com/channel/UCttdqyJB5wuJOO2KXea6WMQ/playlists)
21 | * DevopsTalks [https://www.youtube.com/channel/UCrlLChZc3lcBKb\_lqOIlwAQ/videos](https://www.youtube.com/channel/UCrlLChZc3lcBKb_lqOIlwAQ/videos)
22 | * DockerCon [https://www.youtube.com/user/dockerrun/playlists](https://www.youtube.com/user/dockerrun/playlists)
23 | * code::dive [https://www.youtube.com/channel/UCU0Rt8VHO5-YNQXwIjkf-1g/playlists](https://www.youtube.com/channel/UCU0Rt8VHO5-YNQXwIjkf-1g/playlists)
24 | * Confitura PL [https://www.youtube.com/user/confiturapl/playlists](https://www.youtube.com/user/confiturapl/playlists)
25 | * 4developers & JDD PL [https://www.youtube.com/user/PROIDEAconferences/playlists](https://www.youtube.com/user/PROIDEAconferences/playlists)
26 | * infoShare PL [https://www.youtube.com/user/infoSharePL/playlists](https://www.youtube.com/user/infoSharePL/playlists)
27 | * InfoQ [https://www.youtube.com/user/MarakanaTechTV/playlists](https://www.youtube.com/user/MarakanaTechTV/playlists)
28 | * MesosCon, ApacheCon, Open Source Summit [https://www.youtube.com/user/TheLinuxFoundation/playlists](https://www.youtube.com/user/TheLinuxFoundation/playlists)
29 | * Spring Framework [https://www.youtube.com/user/SpringSourceDev/playlists](https://www.youtube.com/user/SpringSourceDev/playlists)
30 | * Web Summit [https://www.youtube.com/channel/UCJtkHqH4Qof97TSx7BzE5IQ/playlists](https://www.youtube.com/channel/UCJtkHqH4Qof97TSx7BzE5IQ/playlists)
31 | * GeeCON [https://www.youtube.com/channel/UCVnJYdr91EZW8YvtMrxB1bg/playlists](https://www.youtube.com/channel/UCVnJYdr91EZW8YvtMrxB1bg/playlists)
32 | * dotConferences [https://www.youtube.com/user/dotconferences/playlists](https://www.youtube.com/user/dotconferences/playlists)
33 | * Lambda World [https://www.youtube.com/channel/UCEBcDOjv-bhAmLavY71RMHA/playlists](https://www.youtube.com/channel/UCEBcDOjv-bhAmLavY71RMHA/playlists)
34 | * Scala Days [https://www.youtube.com/channel/UCOHg8YCiyMVRRxb3mJT\_0Mg/playlists](https://www.youtube.com/channel/UCOHg8YCiyMVRRxb3mJT_0Mg/playlists)
35 | * Scala Wave [https://www.youtube.com/channel/UC1VAdzkoY7M2e3msbW9Ur8w/videos](https://www.youtube.com/channel/UC1VAdzkoY7M2e3msbW9Ur8w/videos)
36 | * KotlinConf [https://www.youtube.com/playlist?list=PLQ176FUIyIUY6UK1cgVsbdPYA3X5WLam5&app=desktop](https://www.youtube.com/playlist?list=PLQ176FUIyIUY6UK1cgVsbdPYA3X5WLam5&app=desktop)
37 | * HashiCorp [https://m.youtube.com/playlist?list=PL81sUbsFNc5Y-jbEC1y5BWenDoYscVv4t](https://m.youtube.com/playlist?list=PL81sUbsFNc5Y-jbEC1y5BWenDoYscVv4t)
38 | * Black Hat [https://www.youtube.com/user/BlackHatOfficialYT/playlists](https://www.youtube.com/user/BlackHatOfficialYT/playlists)
39 | * JetBrainsTV [https://www.youtube.com/user/JetBrainsTV/playlists](https://www.youtube.com/user/JetBrainsTV/playlists)
40 | * PyData [https://www.youtube.com/user/PyDataTV/playlists](https://www.youtube.com/user/PyDataTV/playlists)
41 | * CppCon [https://www.youtube.com/user/CppCon/playlists](https://www.youtube.com/user/CppCon/playlists)
42 | * RustConf [https://www.youtube.com/channel/UCaYhcUwRBNscFNUKTjgPFiA/videos](https://www.youtube.com/channel/UCaYhcUwRBNscFNUKTjgPFiA/videos)
43 | * HACKADAY [https://www.youtube.com/user/hackaday/playlists](https://www.youtube.com/user/hackaday/playlists)
44 | * SREcon,USENIX [https://www.youtube.com/user/USENIXAssociation/playlists](https://www.youtube.com/user/USENIXAssociation/playlists)
45 | * Various [https://www.youtube.com/channel/UCipCbzfUjg7GZ-IFYpLvYWg/playlists](https://www.youtube.com/channel/UCipCbzfUjg7GZ-IFYpLvYWg/playlists)
46 | * Various [https://www.youtube.com/user/Confreaks/playlists](https://www.youtube.com/user/Confreaks/playlists)
47 |
48 | ## Meetups
49 |
50 | * Various Poznań PL [https://www.youtube.com/channel/UCe90G1Bls8uibHTkPGEswmg/videos](https://www.youtube.com/channel/UCe90G1Bls8uibHTkPGEswmg/videos)
51 | * Warsaw JUG PL [https://www.youtube.com/channel/UC2coGyxf5x\_CzJ3l4F-N-Sw/videos](https://www.youtube.com/channel/UC2coGyxf5x_CzJ3l4F-N-Sw/videos)
52 | * Łódź JUG PL [https://www.youtube.com/user/juglodz/videos](https://www.youtube.com/user/juglodz/videos)
53 | * Wrocław JUG PL [https://www.youtube.com/channel/UCvj\_1SWNU4diTM2Z2KCUHug/videos](https://www.youtube.com/channel/UCvj_1SWNU4diTM2Z2KCUHug/videos)
54 | * Toruń JUG PL [https://www.youtube.com/channel/UCLuHypXd9ODOivs7gRpxNZg/videos](https://www.youtube.com/channel/UCLuHypXd9ODOivs7gRpxNZg/videos)
55 | * Virtual JUG [https://www.youtube.com/user/virtualJUG/playlists](https://www.youtube.com/user/virtualJUG/playlists)
56 | * Golang Warsaw PL [https://www.youtube.com/channel/UCLO1lWtbudMB83WhxQNjNFw](https://www.youtube.com/channel/UCLO1lWtbudMB83WhxQNjNFw)
57 |
58 |
--------------------------------------------------------------------------------
/domain-driven-design.md:
--------------------------------------------------------------------------------
1 | # Domain-driven design \(DDD\) learning resources
2 |
3 | ## **Introduction**
4 |
5 | Domain-driven design \(DDD\) is an approach to software development for complex needs by connecting the implementation to an evolving model. The premise of domain-driven design is the following
6 |
7 | * placing the project's primary focus on the core domain and domain logic;
8 | * basing complex designs on a model of the domain;
9 | * initiating a creative collaboration between technical and domain experts to iteratively refine a conceptual model that addresses particular domain problems.
10 |
11 | [https://en.wikipedia.org/wiki/Domain-driven\_design](https://en.wikipedia.org/wiki/Domain-driven_design)
12 |
13 | DDD for everyone [https://docs.google.com/presentation/d/1HOqF3vvvckDu05CgHwj7afZfbxrZrS62Mn3VpB0-T0w/edit\#slide=id.p](https://docs.google.com/presentation/d/1HOqF3vvvckDu05CgHwj7afZfbxrZrS62Mn3VpB0-T0w/edit#slide=id.p)
14 |
15 | ## Benefits
16 |
17 | DDD Value And Benefits \(A.K.A. How To Sell Ddd To Your Management, Domain Experts, And Technical Team Members\)
18 |
19 | * Organization gains a useful model of its domain
20 | * Develop a refined, precise definition and understanding of your business
21 | * Domain experts contribute to software design
22 | * Gain a better user experience
23 | * Place clean boundaries around pure models
24 | * Better organize elements of your enterprise architecture
25 | * Use agile, iterative, continuous modeling
26 | * Employ new tools, both strategic and tactical, to your code
27 |
28 | [http://www.informit.com/articles/article.aspx?p=1944876&seqNum=4](http://www.informit.com/articles/article.aspx?p=1944876&seqNum=4)
29 |
30 | The following are the main benefits of the Domain Driven Design style:
31 |
32 | * **Communication**. All parties within a development team can use the domain model and the entities it defines to communicate business knowledge and requirements using a common business domain language, without requiring technical jargon.
33 | * **Extensible**. The domain model is often modular and flexible, making it easy to update and extend as conditions and requirements change.
34 | * **Testable**. The domain model objects are loosely coupled and cohesive, allowing them to be more easily tested.
35 |
36 | Consider DDD if you have a complex domain and you wish to improve communication and understanding within your development team, or where you must express the design of an application in a common language that all stakeholders can understand.
37 |
38 | DDD can also be an ideal approach if you have large and complex enterprise data scenarios that are difficult to manage using other techniques.
39 |
40 | [https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ee658117\(v=pandp.10](https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ee658117%28v=pandp.10)\)
41 |
42 | In **Microservices**, we build each service to serve only one thing and do one thing well. Each service is also isolated from the others. On this matter, DDD principles can help us to keep the scope of the service small through what it calls **"bounded context."**
43 |
44 | Subsequently, DDD is going to help you **investigate and know your domain and all subdomains** well through the communication you build with the domain experts. By knowing your domain andsubdomains well, you will know the map contexts and how all subdomains interact with each other, which will help you in designing and choosing the type of your microservices architecture and what kind of approaches you use to implement them, whether a reactive approach, orchestration approach, or hybrid... it will depend on your knowledge about the domain you're working on. There are pros and cons for each approach that need to be evaluated based on the project and your domain knowledge. DDD will help you make a decision on this matter. [https://dzone.com/articles/ddd-part-iv-ddd-amp-microservices](https://dzone.com/articles/ddd-part-iv-ddd-amp-microservices)
45 |
46 | ## Glossary
47 |
48 | * [http://uniknow.github.io/AgileDev/site/0.1.8-SNAPSHOT/parent/ddd/core/glossary.html](http://uniknow.github.io/AgileDev/site/0.1.8-SNAPSHOT/parent/ddd/core/glossary.html)
49 | * [https://gist.github.com/bobthemighty/b241a4fccadbd7591024](https://gist.github.com/bobthemighty/b241a4fccadbd7591024)
50 | * [http://dddcommunity.org/resources/ddd\_terms](http://dddcommunity.org/resources/ddd_terms)
51 | * [https://en.wikipedia.org/wiki/Domain-driven\_design\#Building\_blocks](https://en.wikipedia.org/wiki/Domain-driven_design#Building_blocks)
52 |
53 | ## Books
54 |
55 | * [https://amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215](https://amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215)
56 | * [https://amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577](https://amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577)
57 | * [http://dddcommunity.org/books](http://dddcommunity.org/books)
58 | * [http://domainlanguage.com/ddd/](http://domainlanguage.com/ddd/)
59 | * [https://amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164](https://amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164)
60 | * [http://carfield.com.hk/document/software%2Bdesign/dddquickly.pdf](http://carfield.com.hk/document/software%2Bdesign/dddquickly.pdf)
61 | * [http://eventstorming.com](http://eventstorming.com)
62 | * [https://www.amazon.com/Patterns-Principles-Practices-Domain-Driven-Design/dp/1118714709](https://www.amazon.com/Patterns-Principles-Practices-Domain-Driven-Design/dp/1118714709)
63 |
64 | ## Presentations
65 |
66 | * Greg Young — A Decade of DDD, CQRS, Event Sourcing [https://youtube.com/watch?v=LDW0QWie21s](https://youtube.com/watch?v=LDW0QWie21s)
67 | * Eric Evans — Tackling Complexity in the Heart of Software [https://youtube.com/watch?v=dnUFEg68ESM](https://youtube.com/watch?v=dnUFEg68ESM)
68 | * GOTO 2014 • Event Sourcing • Greg Young [https://youtube.com/watch?v=8JKjvY4etTY](https://youtube.com/watch?v=8JKjvY4etTY)
69 | * Eric Evans - DDD and Microservices: At Last, Some Boundaries! [https://youtu.be/sFCgXH7DwxM](https://youtu.be/sFCgXH7DwxM)
70 | * JDD 2017: Keep IT clean: mid-sized building blocks and hexagonal architecture \(Jakub Nabrdalik\) [https://youtu.be/KrLFs6f2bOA](https://youtu.be/KrLFs6f2bOA)
71 | * Mariusz Gil: Discovering unknown with Event Storming [https://youtube.com/watch?v=Pl5HD8Ae3PU](https://youtube.com/watch?v=Pl5HD8Ae3PU)
72 | * Boiling Frogs 2018 - Mariusz Gil - Discovering unknown domain with Event Storming [https://youtu.be/dhoXYRqghws?t=15s\(polish](https://youtu.be/dhoXYRqghws?t=15s%28polish)\)
73 | * WJUG \#204 - Marcin Haręza: Event Sourcing - co to, po co to, jak to? [https://youtube.com/watch?v=dEA6uv0FPpE](https://youtube.com/watch?v=dEA6uv0FPpE) \(polish\)
74 | * Domain Driven Design - A place for everything and everything in its place [https://youtube.com/watch?v=jraV7xSTYVs](https://youtube.com/watch?v=jraV7xSTYVs) \(polish\)
75 | * Boiling Frogs 2018 - Jarosław Pałka - Sagi, strumienie, reaktywność i inne buzzwordy [https://youtu.be/27S0G9bE3Bg?t=0s\(polish](https://youtu.be/27S0G9bE3Bg?t=0s%28polish)\)
76 | * Sławomir Sobótka - DDD: Q&A - czyli co gryzie świadomego programistę/programistkę [https://youtu.be/FkylT96at4g](https://youtu.be/FkylT96at4g) \(polish\)
77 | * Sławomir Sobótka - DDD Q&A - wersja rozszerzona [https://youtu.be/do-xqIbKZ\_8](https://youtu.be/do-xqIbKZ_8) \(polish\)
78 | * [https://devstyle.pl/2014/12/01/devtalk04-o-domain-driven-design-ze-slawomirem-sobotka/](https://devstyle.pl/2014/12/01/devtalk04-o-domain-driven-design-ze-slawomirem-sobotka/) \(polish\)
79 | * Event-Driven Rails from scratch [https://youtube.com/watch?v=C3P3yGQyDQ4](https://youtube.com/watch?v=C3P3yGQyDQ4)
80 | * DDD europe [https://www.youtube.com/channel/UC3PGn-hQdbtRiqxZK9XBGqQ/playlists](https://www.youtube.com/channel/UC3PGn-hQdbtRiqxZK9XBGqQ/playlists)
81 |
82 | ## References
83 |
84 | * [https://github.com/heynickc/awesome-ddd](https://github.com/heynickc/awesome-ddd)
85 | * [http://alistair.cockburn.us/Hexagonal+architecture/v/slim](http://alistair.cockburn.us/Hexagonal+architecture/v/slim)
86 | * [http://mkuthan.github.io/blog/2014/09/22/ddd-how-to-learn/](http://mkuthan.github.io/blog/2014/09/22/ddd-how-to-learn/)
87 | * [http://dddweekly.com](http://dddweekly.com)
88 | * [https://docs.microsoft.com/en-gb/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/ddd-oriented-microservice](https://docs.microsoft.com/en-gb/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/ddd-oriented-microservice)
89 | * [https://martinfowler.com/bliki/AnemicDomainModel.html](https://martinfowler.com/bliki/AnemicDomainModel.html)
90 | * [https://martinfowler.com/tags/domain driven design.html](https://martinfowler.com/tags/domain%20driven%20design.html)
91 | * [https://github.com/dzfweb/microsoft-microservices-book/blob/master/microservice-ddd-cqrs-patterns/ddd-oriented-microservice.md](https://github.com/dzfweb/microsoft-microservices-book/blob/master/microservice-ddd-cqrs-patterns/ddd-oriented-microservice.md)
92 | * [https://www.ibm.com/developerworks/cloud/library/cl-domain-driven-design-event-sourcing/index.html](https://www.ibm.com/developerworks/cloud/library/cl-domain-driven-design-event-sourcing/index.html)
93 | * [https://content.pivotal.io/blog/getting-started-with-domain-driven-design-top-3-concepts](https://content.pivotal.io/blog/getting-started-with-domain-driven-design-top-3-concepts)
94 | * [https://www.linkedin.com/pulse/code-better-ddd-what-why-balazs-hideghety/](https://www.linkedin.com/pulse/code-better-ddd-what-why-balazs-hideghety/)
95 | * [https://gist.github.com/somebox/21c7c9ca3a62de9ac65a366fbb8c3250](https://gist.github.com/somebox/21c7c9ca3a62de9ac65a366fbb8c3250)
96 | * [http://mkuthan.github.io/presentations/micro-services.html\#/](http://mkuthan.github.io/presentations/micro-services.html#/)
97 | * [https://github.com/mariuszgil/awesome-eventstorming](https://github.com/mariuszgil/awesome-eventstorming)
98 |
99 | ### Java
100 |
101 | * [https://bottega.com.pl/materialy.xhtm?cat=DDD](https://bottega.com.pl/materialy.xhtm?cat=DDD) \(polish\)
102 | * [https://bottega.com.pl/pdf/materialy/sdj-ddd.pdf](https://bottega.com.pl/pdf/materialy/sdj-ddd.pdf) \(polish\)
103 | * [https://bottega.com.pl/pdf/materialy/ddd/ddd1.pdf](https://bottega.com.pl/pdf/materialy/ddd/ddd1.pdf) \(polish\)
104 | * [https://bottega.com.pl/pdf/materialy/ddd/ddd2.pdf](https://bottega.com.pl/pdf/materialy/ddd/ddd2.pdf) \(polish\)
105 | * [http://jakubn.gitlab.io/keepitclean/\#1](http://jakubn.gitlab.io/keepitclean/#1)
106 | * [http://tswiackiewicz.github.io/inside-the-source-code/architecture/ddd-layered-architecture](http://tswiackiewicz.github.io/inside-the-source-code/architecture/ddd-layered-architecture) \(polish\)
107 | * [https://devstyle.pl/2016/11/23/esencja-cqrs-to-bardzo-proste/](https://devstyle.pl/2016/11/23/esencja-cqrs-to-bardzo-proste/) \(polish\)
108 | * [http://piotrgankiewicz.com/2016/08/01/handling-domain-events](http://piotrgankiewicz.com/2016/08/01/handling-domain-events)
109 | * [http://tidyjava.com/hexagonal-architecture-powerful](http://tidyjava.com/hexagonal-architecture-powerful)
110 | * [https://geek.justjoin.it/architektura-kodu-mikrouslugi-oparta-o-domain-driven-design/](https://geek.justjoin.it/architektura-kodu-mikrouslugi-oparta-o-domain-driven-design/) \(polish\)
111 |
112 | ### Ruby
113 |
114 | * [https://blog.arkency.com/domain-driven-rails/](https://blog.arkency.com/domain-driven-rails/)
115 | * [https://ddd-ruby.github.io/](https://ddd-ruby.github.io/)
116 | * [https://www.developer.com/open/domain-driven-design-aggregates-with-ruby.html](https://www.developer.com/open/domain-driven-design-aggregates-with-ruby.html)
117 | * [https://mensfeld.pl/2017/08/domain-driven-rails-mediocrity-driven-book/](https://mensfeld.pl/2017/08/domain-driven-rails-mediocrity-driven-book/)
118 | * [https://medium.com/@poilon/domain-driven-design-with-graphql-on-ruby-on-rails-api-3f0f2a090b4f](https://medium.com/@poilon/domain-driven-design-with-graphql-on-ruby-on-rails-api-3f0f2a090b4f)
119 | * [https://github.com/envato/event\_sourcery](https://github.com/envato/event_sourcery)
120 | * [https://theplainprogrammer.com/applying-clean-architecture-to-ruby-on-rails-first-impressions-3746ed0c9668](https://theplainprogrammer.com/applying-clean-architecture-to-ruby-on-rails-first-impressions-3746ed0c9668)
121 | * [https://github.com/valignatev/ddd-dynamic](https://github.com/valignatev/ddd-dynamic)
122 |
123 | ### Go
124 |
125 | * [https://gist.github.com/eduncan911/c1614e684e4802d626ae](https://gist.github.com/eduncan911/c1614e684e4802d626ae)
126 | * [https://threedots.tech/post/microservices-or-monolith-its-detail](https://threedots.tech/post/microservices-or-monolith-its-detail)
127 | * [https://hackernoon.com/golang-clean-archithecture-efd6d7c43047](https://hackernoon.com/golang-clean-archithecture-efd6d7c43047)
128 | * [https://medium.com/@eminetto/clean-architecture-using-golang-b63587aa5e3f](https://medium.com/@eminetto/clean-architecture-using-golang-b63587aa5e3f)
129 | * [https://juicemia.com/post/go-ddd/](https://juicemia.com/post/go-ddd/)
130 | * [https://www.citerus.se/go-ddd/](https://www.citerus.se/go-ddd/)
131 | * [https://outcrawl.com/go-microservices-cqrs-docker/](https://outcrawl.com/go-microservices-cqrs-docker/)
132 |
133 | ## Samples
134 |
135 | ### Java
136 |
137 | * [https://github.com/ddd-by-examples/factory](https://github.com/ddd-by-examples/factory)
138 | * [https://github.com/BottegaIT/ddd-leaven-v2](https://github.com/BottegaIT/ddd-leaven-v2)
139 | * [https://github.com/eventuate-examples/eventuate-examples-java-spring-todo-list](https://github.com/eventuate-examples/eventuate-examples-java-spring-todo-list)
140 | * [https://github.com/avthart/spring-boot-axon-sample](https://github.com/avthart/spring-boot-axon-sample)
141 | * [https://github.com/jakubnabrdalik/hentai-cloudy-rental](https://github.com/jakubnabrdalik/hentai-cloudy-rental)
142 | * [https://github.com/jakubnabrdalik/hentai](https://github.com/jakubnabrdalik/hentai)
143 | * [https://ordina-jworks.github.io/conference/2016/07/10/SpringIO16-DDD-Rest.html](https://ordina-jworks.github.io/conference/2016/07/10/SpringIO16-DDD-Rest.html)
144 | * [https://github.com/olivergierke/spring-restbucks](https://github.com/olivergierke/spring-restbucks)
145 |
146 | ### Ruby
147 |
148 | * [https://github.com/paulrayner/ddd\_sample\_app\_ruby](https://github.com/paulrayner/ddd_sample_app_ruby)
149 | * [https://github.com/lcrodriguez/rails-ddd-todolist](https://github.com/lcrodriguez/rails-ddd-todolist)
150 | * [https://railseventstore.org/docs/install/](https://railseventstore.org/docs/install/) \(event sourcing lib\)
151 |
152 | ### Go
153 |
154 | * [https://github.com/bxcodec/go-clean-arch](https://github.com/bxcodec/go-clean-arch)
155 | * [https://github.com/marcusolsson/goddd](https://github.com/marcusolsson/goddd)
156 |
157 | ## Frameworks
158 |
159 | \(Actually "framework" is not important\)
160 |
161 | ### Java
162 |
163 | * [https://github.com/RBMHTechnology/eventuate](https://github.com/RBMHTechnology/eventuate)
164 | * [https://github.com/eventuate-local/eventuate-local](https://github.com/eventuate-local/eventuate-local)
165 | * [https://github.com/RBMHTechnology/eventuate/wiki/Thoughts-on-Eventuate’s-future](https://github.com/RBMHTechnology/eventuate/wiki/Thoughts-on-Eventuate’s-future)
166 | * [https://github.com/AxonFramework](https://github.com/AxonFramework)
167 | * [https://blog.eventuate.io/2016/04/05/the-eventuate-todo-list-application-microservices-springboot-eventsourcing-cqrs/](https://blog.eventuate.io/2016/04/05/the-eventuate-todo-list-application-microservices-springboot-eventsourcing-cqrs/)
168 | * [https://github.com/AxonFramework/AxonFramework](https://github.com/AxonFramework/AxonFramework)
169 | * [https://github.com/binkley/axon-spring-boot-starter](https://github.com/binkley/axon-spring-boot-starter)
170 |
171 | ### Ruby
172 |
173 | * [https://github.com/envato/event\_sourcery](https://github.com/envato/event_sourcery)
174 |
175 |
--------------------------------------------------------------------------------
/event-sourcing-and-cqrs.md:
--------------------------------------------------------------------------------
1 | # Event Sourcing & CQRS
2 |
3 | * [https://eventstore.org/docs/event-sourcing-basics/index.html](https://eventstore.org/docs/event-sourcing-basics/index.html)
4 | * [https://www.martinfowler.com/eaaDev/EventSourcing.html](https://www.martinfowler.com/eaaDev/EventSourcing.html)
5 | * [https://martinfowler.com/bliki/CQRS.html](https://martinfowler.com/bliki/CQRS.html)
6 | * [https://github.com/leandrocp/awesome-cqrs-event-sourcing](https://github.com/leandrocp/awesome-cqrs-event-sourcing)
7 | * [https://github.com/heynickc/awesome-ddd](https://github.com/heynickc/awesome-ddd)
8 | * GOTO 2014 • Event Sourcing • Greg Young [https://www.youtube.com/watch?v=8JKjvY4etTY](https://www.youtube.com/watch?v=8JKjvY4etTY)
9 | * Event sourcing - Greg Young - DPC2016 [https://youtu.be/I3uH3iiiDqY](https://youtu.be/I3uH3iiiDqY)
10 | * Greg Young — A Decade of DDD, CQRS, Event Sourcing [https://www.youtube.com/watch?v=LDW0QWie21s](https://www.youtube.com/watch?v=LDW0QWie21s)
11 | * Martin Kleppmann — Event Sourcing and Stream Processing at Scale [https://youtu.be/avi-TZI9t2I](https://youtu.be/avi-TZI9t2I)
12 | * [https://www.baeldung.com/cqrs-event-sourced-architecture-resources](https://www.baeldung.com/cqrs-event-sourced-architecture-resources)
13 | * [https://blog.softwaremill.com/event-sourcing-using-kafka-53dfd72ad45d](https://blog.softwaremill.com/event-sourcing-using-kafka-53dfd72ad45d)
14 | * [https://www.confluent.io/blog/event-sourcing-cqrs-stream-processing-apache-kafka-whats-connection/](https://www.confluent.io/blog/event-sourcing-cqrs-stream-processing-apache-kafka-whats-connection/)
15 | * [https://kalele.io/blog-posts/really-simple-cqrs/](https://kalele.io/blog-posts/really-simple-cqrs/)
16 | * [https://microservices.io/patterns/data/event-sourcing.html](https://microservices.io/patterns/data/event-sourcing.html)
17 | * [https://bulldogjob.pl/articles/122-cqrs-i-event-sourcing-czyli-latwa-droga-do-skalowalnosci-naszych-systemow\_](https://bulldogjob.pl/articles/122-cqrs-i-event-sourcing-czyli-latwa-droga-do-skalowalnosci-naszych-systemow_)
18 | * [https://eventuate.io/whyeventsourcing.html](https://eventuate.io/whyeventsourcing.html)
19 | * [http://www.kennybastani.com/2016/04/event-sourcing-microservices-spring-cloud.html](http://www.kennybastani.com/2016/04/event-sourcing-microservices-spring-cloud.html)
20 | * [https://docs.microsoft.com/en-gb/azure/architecture/patterns/cqrs](https://docs.microsoft.com/en-gb/azure/architecture/patterns/cqrs)
21 | * WJUG \#204 - Marcin Haręza: Event Sourcing - co to, po co to, jak to? [https://youtube.com/watch?v=dEA6uv0FPpE](https://youtube.com/watch?v=dEA6uv0FPpE)
22 | * [https://www.amazon.com/Exploring-CQRS-Event-Sourcing-maintainability/dp/1621140164](https://www.amazon.com/Exploring-CQRS-Event-Sourcing-maintainability/dp/1621140164)
23 | * [http://blog.langer.eu/2014/09/02/literature.html](http://blog.langer.eu/2014/09/02/literature.html)
24 | * [https://github.com/cer/event-sourcing-examples/wiki/WhyEventSourcing](https://github.com/cer/event-sourcing-examples/wiki/WhyEventSourcing)
25 | * [https://github.com/kbastani/event-sourcing-microservices-basics](https://github.com/kbastani/event-sourcing-microservices-basics)
26 | * [https://github.com/kbastani/spring-cloud-event-sourcing-example](https://github.com/kbastani/spring-cloud-event-sourcing-example)
27 | * [https://medium.com/@pierreprinetti/event-sourcing-in-go-the-event-handler-29f9438c58f0](https://medium.com/@pierreprinetti/event-sourcing-in-go-the-event-handler-29f9438c58f0)
28 | * [https://medium.com/@shijuvar/building-microservices-with-event-sourcing-cqrs-in-go-using-grpc-nats-streaming-and-cockroachdb-983f650452aa](https://medium.com/@shijuvar/building-microservices-with-event-sourcing-cqrs-in-go-using-grpc-nats-streaming-and-cockroachdb-983f650452aa)
29 | * [https://github.com/bringmeister/event-sourcing-with-kotlin](https://github.com/bringmeister/event-sourcing-with-kotlin)
30 | * [https://tuhrig.de/event-sourcing-with-kotlin/](https://tuhrig.de/event-sourcing-with-kotlin/)
31 | * [https://www.slideshare.net/ubertobarbini/cqrs-with-event-source-in-functional-sauce-served-by-kotlin](https://www.slideshare.net/ubertobarbini/cqrs-with-event-source-in-functional-sauce-served-by-kotlin)
32 | * [https://github.com/Pragmatists/eventsourcing-java-example](https://github.com/Pragmatists/eventsourcing-java-example)
33 | * [https://github.com/ddd-by-examples/event-source-cqrs-sample](https://github.com/ddd-by-examples/event-source-cqrs-sample)
34 | * [https://github.com/VaughnVernon/IDDD\_Samples](https://github.com/VaughnVernon/IDDD_Samples)
35 | * [https://www.hugopicado.com/2017/05/06/what-event-sourcing-is-not.html](https://www.hugopicado.com/2017/05/06/what-event-sourcing-is-not.html)
36 | * [https://cqrs.files.wordpress.com/2010/11/cqrs\_documents.pdf](https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf)
37 | * GOTO 2017 • The Many Meanings of Event-Driven Architecture • Martin Fowler [https://www.youtube.com/watch?v=STKCRSUsyP0](https://www.youtube.com/watch?v=STKCRSUsyP0)
38 | * Scaling Event Sourcing for Netflix Downloads [https://www.youtube.com/watch?v=rsSld8NycCU](https://www.youtube.com/watch?v=rsSld8NycCU)
39 | * [https://stackoverflow.com/questions/17708489/using-kafka-as-a-cqrs-eventstore-good-idea/](https://stackoverflow.com/questions/17708489/using-kafka-as-a-cqrs-eventstore-good-idea/)
40 | * [https://gist.github.com/bobthemighty/b241a4fccadbd7591024](https://gist.github.com/bobthemighty/b241a4fccadbd7591024)
41 | * [http://uniknow.github.io/AgileDev/site/0.1.9-SNAPSHOT/parent/ddd/core/glossary.html](http://uniknow.github.io/AgileDev/site/0.1.9-SNAPSHOT/parent/ddd/core/glossary.html)
42 | * YOW! Nights March 2016 Martin Fowler - Event Sourcing [https://www.youtube.com/watch?v=aweV9FLTZkU](https://www.youtube.com/watch?v=aweV9FLTZkU)
43 | * [http://www.kennybastani.com/2016/04/event-sourcing-microservices-spring-cloud.html](http://www.kennybastani.com/2016/04/event-sourcing-microservices-spring-cloud.html)
44 | * [https://github.com/kbastani/spring-cloud-event-sourcing-example](https://github.com/kbastani/spring-cloud-event-sourcing-example)
45 | * [https://github.com/kbastani/event-sourcing-microservices-basics](https://github.com/kbastani/event-sourcing-microservices-basics)
46 | * [https://thenewstack.io/how-cqrs-works-with-spring-tools/](https://thenewstack.io/how-cqrs-works-with-spring-tools/)
47 | * [https://github.com/ddd-by-examples](https://github.com/ddd-by-examples)
48 | * The Dark Side of Event Sourcing: Managing Data Conversion [http://files.movereem.nl/2017saner-eventsourcing.pdf](http://files.movereem.nl/2017saner-eventsourcing.pdf)
49 | * Event Sourcing Anti Patterns and Failures - Nathan Ladd [https://youtu.be/vh1QTk34350](https://youtu.be/vh1QTk34350)
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/go-language.md:
--------------------------------------------------------------------------------
1 | # Go Programming Language
2 |
3 | ## Style and Guidelines
4 |
5 | * read [https://github.com/golang/go/wiki/CodeReviewComments](https://github.com/golang/go/wiki/CodeReviewComments)
6 | * format code according to `gofmt`, nothing else will be accepted
7 | * [https://github.com/tmrts/go-patterns](https://github.com/tmrts/go-patterns)
8 | * [https://github.com/cristaloleg/go-advices/blob/master/README.md](https://github.com/cristaloleg/go-advices/blob/master/README.md)
9 | * [https://goreportcard.com](https://goreportcard.com)
10 |
11 | ## Books
12 |
13 | * The Go Programming Language \(Addison-Wesley Professional Computing Series\) by Alan A. A. Donovan, Brian W. Kernighan
14 | * [https://github.com/avelino/awesome-go\#e-books](https://github.com/avelino/awesome-go#e-books)
15 | * [https://github.com/dariubs/GoBooks](https://github.com/dariubs/GoBooks)
16 | * [https://github.com/dgryski/go-perfbook](https://github.com/dgryski/go-perfbook)
17 | * [http://shop.oreilly.com/product/0636920046189.do](http://shop.oreilly.com/product/0636920046189.do)
18 | * go-internals [https://github.com/teh-cmc/go-internals](https://github.com/teh-cmc/go-internals)
19 | * [https://www.packtpub.com/application-development/go-programming-blueprints-second-edition](https://www.packtpub.com/application-development/go-programming-blueprints-second-edition)
20 | * [https://github.com/matryer/goblueprints](https://github.com/matryer/goblueprints)
21 |
22 | ## Best Practices & interesting articles
23 |
24 | * Create object as interface type under the OOP concept, which will benefit in the test for mocking out different objects later on.
25 | * [https://github.com/avelino/awesome-go](https://github.com/avelino/awesome-go)
26 | * [https://golangweekly.com/](https://golangweekly.com/)
27 | * [https://go-proverbs.github.io/](https://go-proverbs.github.io/)
28 | * [https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully](https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully)
29 | * [https://peter.bourgon.org/go-best-practices-2016/](https://peter.bourgon.org/go-best-practices-2016/)
30 | * [https://golang.org/doc/effective\_go.html](https://golang.org/doc/effective_go.html)
31 | * [https://medium.com/@teivah/good-code-vs-bad-code-in-golang-84cb3c5da49d](https://medium.com/@teivah/good-code-vs-bad-code-in-golang-84cb3c5da49d)
32 | * [https://github.com/teivah/golang-good-code-bad-code](https://github.com/teivah/golang-good-code-bad-code)
33 | * [https://medium.com/@val\_deleplace/go-code-refactoring-the-23x-performance-hunt-156746b522f7](https://medium.com/@val_deleplace/go-code-refactoring-the-23x-performance-hunt-156746b522f7)
34 | * [https://allegro.tech/2017/07/golang-slices-gotcha.html](https://allegro.tech/2017/07/golang-slices-gotcha.html)
35 | * [https://github.com/matttproud/gochecklist](https://github.com/matttproud/gochecklist)
36 | * [https://talks.golang.org/2013/bestpractices.slide\#1](https://talks.golang.org/2013/bestpractices.slide#1)
37 | * [https://blog.depado.eu/post/checklist-for-go-projects](https://blog.depado.eu/post/checklist-for-go-projects)
38 | * Go Memory Model [https://golang.org/ref/mem](https://golang.org/ref/mem)
39 | * [https://roberto.selbach.ca/intro-to-go-modules/](https://roberto.selbach.ca/intro-to-go-modules/)
40 | * [https://medium.zenika.com/go-1-11-webassembly-for-the-gophers-ae4bb8b1ee03](https://medium.zenika.com/go-1-11-webassembly-for-the-gophers-ae4bb8b1ee03)
41 | * [https://medium.com/percolate-engineering/introducing-charlatan-df9b5d3d3107](https://medium.com/percolate-engineering/introducing-charlatan-df9b5d3d3107)
42 | * [https://itnext.io/debug-a-go-application-in-kubernetes-from-ide-c45ad26d8785](https://itnext.io/debug-a-go-application-in-kubernetes-from-ide-c45ad26d8785)
43 | * [https://github.com/enocom/gopher-reading-list](https://github.com/enocom/gopher-reading-list)
44 | * [http://oyvindsk.com/writing/common-golang-mistakes-1](http://oyvindsk.com/writing/common-golang-mistakes-1)
45 | * [https://eli.thegreenplace.net/2018/go-hits-the-concurrency-nail-right-on-the-head/](https://eli.thegreenplace.net/2018/go-hits-the-concurrency-nail-right-on-the-head/)
46 | * [https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/](https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/)
47 | * [https://blog.cloudflare.com/exposing-go-on-the-internet/](https://blog.cloudflare.com/exposing-go-on-the-internet/)
48 |
49 | ## Tutorials
50 |
51 | * For starter: [https://tour.golang.org/welcome/1](https://tour.golang.org/welcome/1)
52 | * More [https://github.com/avelino/awesome-go\#tutorials](https://github.com/avelino/awesome-go#tutorials)
53 | * [https://github.com/golang/go/wiki/Learn](https://github.com/golang/go/wiki/Learn)
54 | * Cheatsheet [https://github.com/a8m/go-lang-cheat-sheet](https://github.com/a8m/go-lang-cheat-sheet)
55 | * [https://grpc.io/docs/tutorials/basic/go.html](https://grpc.io/docs/tutorials/basic/go.html)
56 | * [https://gobyexample.com/](https://gobyexample.com/)
57 |
58 | ## Package Design
59 |
60 | * [https://medium.com/@benbjohnson/standard-package-layout-7cdbc8391fc1](https://medium.com/@benbjohnson/standard-package-layout-7cdbc8391fc1)
61 | * [Ben Johnson way](https://stackoverflow.com/a/46663495/7120456)
62 | * [https://github.com/golang-standards/project-layout](https://github.com/golang-standards/project-layout)
63 | * [https://blog.gopheracademy.com/advent-2016/go-and-package-focused-design/](https://blog.gopheracademy.com/advent-2016/go-and-package-focused-design/)
64 | * [https://www.ardanlabs.com/blog/2017/02/package-oriented-design.html](https://www.ardanlabs.com/blog/2017/02/package-oriented-design.html)
65 | * [Package oriented design by William Kennedy](https://www.youtube.com/watch?v=ik1l5a50hKQ) and sample [https://github.com/ardanlabs/service](https://github.com/ardanlabs/service)
66 | * [https://www.reddit.com/r/golang/comments/6vtp5x/go\_programming\_packageoriented\_design\_what\_are/](https://www.reddit.com/r/golang/comments/6vtp5x/go_programming_packageoriented_design_what_are/)
67 | * [https://www.reddit.com/r/golang/comments/84a1q6/go\_project\_structure\_is/](https://www.reddit.com/r/golang/comments/84a1q6/go_project_structure_is/)
68 | * [https://peter.bourgon.org/go-best-practices-2016/\#repository-structure](https://peter.bourgon.org/go-best-practices-2016/#repository-structure)
69 | * [https://medium.com/statuscode/how-i-write-go-http-services-after-seven-years-37c208122831](https://medium.com/statuscode/how-i-write-go-http-services-after-seven-years-37c208122831)
70 | * [Writing Beautiful Packages in Go - Mat Ryer](https://www.youtube.com/watch?v=cmkKxNN7cs4)
71 | * [https://dave.cheney.net/2016/08/20/solid-go-design](https://dave.cheney.net/2016/08/20/solid-go-design)
72 | * GopherCon 2018: Kat Zien - How Do You Structure Your Go Apps [https://youtu.be/oL6JBUk6tj0](https://youtu.be/oL6JBUk6tj0)
73 | * [https://github.com/katzien/go-structure-examples](https://github.com/katzien/go-structure-examples)
74 |
75 | ## Error Handling
76 |
77 | * [https://blog.golang.org/errors-are-values](https://blog.golang.org/errors-are-values)
78 | * [https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully](https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully) and [https://www.youtube.com/watch?v=lsBF58Q-DnY](https://www.youtube.com/watch?v=lsBF58Q-DnY)
79 | * [https://commandcenter.blogspot.com/2017/12/error-handling-in-upspin.html](https://commandcenter.blogspot.com/2017/12/error-handling-in-upspin.html)
80 | * [https://github.com/upspin/upspin/blob/master/errors/errors.go](https://github.com/upspin/upspin/blob/master/errors/errors.go)
81 | * [https://www.ardanlabs.com/blog/2014/10/error-handling-in-go-part-i.html](https://www.ardanlabs.com/blog/2014/10/error-handling-in-go-part-i.html)
82 | * [https://www.ardanlabs.com/blog/2014/11/error-handling-in-go-part-ii.html](https://www.ardanlabs.com/blog/2014/11/error-handling-in-go-part-ii.html)
83 | * [https://go.googlesource.com/proposal/+/master/design/go2draft-error-handling-overview.md](https://go.googlesource.com/proposal/+/master/design/go2draft-error-handling-overview.md)
84 | * [https://banzaicloud.com/blog/error-handling-go/](https://banzaicloud.com/blog/error-handling-go/)
85 | * [https://github.com/pkg/errors](https://github.com/pkg/errors)
86 | * [https://golang.org/src/os/error.go](https://golang.org/src/os/error.go)
87 | * [https://github.com/ardanlabs/service/blob/master/cmd/sales-api/handlers/errors.go\#L13](https://github.com/ardanlabs/service/blob/master/cmd/sales-api/handlers/errors.go#L13)
88 |
89 | ## JSON
90 |
91 | * [https://blog.golang.org/json-and-go](https://blog.golang.org/json-and-go)
92 | * [https://gobyexample.com/json](https://gobyexample.com/json)
93 | * [https://golang.org/pkg/encoding/json/](https://golang.org/pkg/encoding/json/)
94 | * [https://jsoniter.com/](https://jsoniter.com/)
95 | * [https://github.com/francoispqt/gojay](https://github.com/francoispqt/gojay)
96 | * [http://eagain.net/articles/go-dynamic-json/](http://eagain.net/articles/go-dynamic-json/)
97 | * [https://github.com/json-iterator/go](https://github.com/json-iterator/go)
98 | * [https://www.reddit.com/r/golang/comments/5yhfo1/jsondecoder\_vs\_jsonunmarshal/](https://www.reddit.com/r/golang/comments/5yhfo1/jsondecoder_vs_jsonunmarshal/)
99 |
100 | ## Survival Tips for Beginners
101 |
102 | * Avoid frameworks, use libraries if you must, but Go encourages you to write it yourself
103 | * review comments [https://github.com/golang/go/wiki/CodeReviewComments](https://github.com/golang/go/wiki/CodeReviewComments)
104 | * go tools and linters, static code analysis - gometalinter, golint, errcheck, golangci-lint itp.
105 | * dont panic, pro verbs [https://go-proverbs.github.io/](https://go-proverbs.github.io/)
106 | * handle all errors, dont ignore them \(use errcheck linter\) [https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully](https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully)
107 | * package design [https://kgoralski.gitbook.io/wiki/go-language\#package-design](https://kgoralski.gitbook.io/wiki/go-language#package-design)
108 | * struct injection / constructor [https://medium.com/statuscode/how-i-write-go-http-services-after-seven-years-37c208122831](https://medium.com/statuscode/how-i-write-go-http-services-after-seven-years-37c208122831)
109 | * interfaces and mocking them \(mockery tool if possible\)
110 | * avoid global state and init blocks
111 | * goroutines and for loops [https://github.com/golang/go/wiki/CommonMistakes](https://github.com/golang/go/wiki/CommonMistakes)
112 | * go encourage to use channels instead of using synchronization
113 | * gofmt goimports
114 |
115 | ## Tests
116 |
117 | * [https://quii.gitbook.io/learn-go-with-tests/](https://quii.gitbook.io/learn-go-with-tests/)
118 | * [https://medium.com/@povilasve/go-advanced-tips-tricks-a872503ac859](https://medium.com/@povilasve/go-advanced-tips-tricks-a872503ac859)
119 | * [https://medium.com/@sebdah/go-best-practices-testing-3448165a0e18](https://medium.com/@sebdah/go-best-practices-testing-3448165a0e18)
120 | * [https://github.com/stretchr/testify](https://github.com/stretchr/testify)
121 | * [https://github.com/vektra/mockery](https://github.com/vektra/mockery)
122 | * [https://plugins.jetbrains.com/plugin/10460-golang-mockery](https://plugins.jetbrains.com/plugin/10460-golang-mockery)
123 | * [https://github.com/smartystreets/goconvey](https://github.com/smartystreets/goconvey) and [http://goconvey.co/](http://goconvey.co/)
124 | * [https://onsi.github.io/ginkgo/](https://onsi.github.io/ginkgo/)
125 | * [https://onsi.github.io/gomega/](https://onsi.github.io/gomega/)
126 | * [https://blog.codeship.com/testing-in-go/](https://blog.codeship.com/testing-in-go/)
127 | * [https://medium.com/agrea-technogies/mocking-dependencies-in-go-bb9739fef008](https://medium.com/agrea-technogies/mocking-dependencies-in-go-bb9739fef008)
128 |
129 | ## Go & DDD? Debatable.
130 |
131 | * "I find DDD with Go adds unnecessary complexity, because it tends more to OOP then Go. Go has its own style and trying to port it to Go may not be Go's idiomatic way. However, by keeping "some" of DDD's and general software design principles in mind will be more" - comment from [https://blog.gopheracademy.com/advent-2016/go-and-package-focused-design/](https://blog.gopheracademy.com/advent-2016/go-and-package-focused-design/)
132 | * "Just do the minimal and keep things decoupled in your same package for easier testing. Keep a close eye on your exported API to make sure it makes sense to others.
133 |
134 |
135 | The best packages are those that the API is self explanatory. If you flood it with 50 domain objects, 19 aggregates, 40 value objects, 70 specifications, and 5 modules - it is no longer easy to follow.
136 |
137 |
138 | DDD, while needed in OOO languages, tends to have an adverse effect in Go where things end up being more complicated with object graphs of several structs and aggregates - when you could have just wrote a single func that took parameters and returned an error." [https://www.reddit.com/r/golang/comments/6ugzo2/domain\_driven\_design\_and\_go/](https://www.reddit.com/r/golang/comments/6ugzo2/domain_driven_design_and_go/)
139 |
140 | * "Most if not all concepts found in DDD and similar methodologies, guides, patterns and philosophies \(SOLID; separation of concerns, the open-closed principle and so forth\) are all based in the thoughts of people who spent years and years doing Java and other inheritance-oriented object-models like C++. It's hard to structure such applications well while at the same time keeping enough wiggle-room around to change things later. In that sense this wisdom is priceless and has saved many programmers countless hours of work.
141 |
142 |
143 | But Go is not like Java or C++, Go is much smaller \(C++ has 85 keywords, Java has 50, Go has 25\). Also, there is no inheritance and embedding is something that is only rarely used. Add to that the novel approach to implicit interface implementation and you have a language where every package hosts its own dependencies and contracts and has clearly defined boundaries.
144 |
145 | The only conventions/patterns/rules we consider as "good practice" in the Go community is using the basic interfaces that the standard library provides \(like io.Reader, io.Writer\) whenever possible, instead of inventing new ones that do the same. Some additional common idioms are described in "effective go" \([https://golang.org/doc/effective\_go.html](https://golang.org/doc/effective_go.html)\).
146 |
147 |
148 | After you've written some Go code you'll realize \(or get the impression that\) "patternism" as I like to call it has gotten out of hand; people doing design-patterns are more concerned with the form of their programs than actually shipping functional code. Hence stuff like the often mocked "ProviderBuilderFactoryFactory". That's why I called that function the antithesis of Go." [https://groups.google.com/forum/m/\#!msg/Golang-nuts/0hJuub86zpo/ftx2L523uU8J](https://groups.google.com/forum/m/#!msg/Golang-nuts/0hJuub86zpo/ftx2L523uU8J)
149 |
150 | ## Architecture & DDD
151 |
152 | * go-kit & microservices [https://www.youtube.com/watch?v=NX0sHF8ZZgw](https://www.youtube.com/watch?v=NX0sHF8ZZgw)
153 | * [https://github.com/bxcodec/go-clean-arch](https://github.com/bxcodec/go-clean-arch)
154 | * [https://www.joeldholmes.com/post/go-hex-arch/](https://www.joeldholmes.com/post/go-hex-arch/)
155 | * [https://medium.com/@eminetto/clean-architecture-using-golang-b63587aa5e3f](https://medium.com/@eminetto/clean-architecture-using-golang-b63587aa5e3f)
156 | * [https://hackernoon.com/trying-clean-architecture-on-golang-2-44d615bf8fdf](https://hackernoon.com/trying-clean-architecture-on-golang-2-44d615bf8fdf)
157 | * [https://manuel.kiessling.net/2012/09/28/applying-the-clean-architecture-to-go-applications/](https://manuel.kiessling.net/2012/09/28/applying-the-clean-architecture-to-go-applications/)
158 | * [https://hackernoon.com/golang-clean-archithecture-efd6d7c43047](https://hackernoon.com/golang-clean-archithecture-efd6d7c43047)
159 | * clean arch validator [https://github.com/roblaszczak/go-cleanarch](https://github.com/roblaszczak/go-cleanarch)
160 | * [https://gist.github.com/eduncan911/c1614e684e4802d626ae](https://gist.github.com/eduncan911/c1614e684e4802d626ae)
161 | * [https://threedots.tech/post/microservices-or-monolith-its-detail](https://threedots.tech/post/microservices-or-monolith-its-detail)
162 | * [https://hackernoon.com/golang-clean-archithecture-efd6d7c43047](https://hackernoon.com/golang-clean-archithecture-efd6d7c43047)
163 | * [https://medium.com/@eminetto/clean-architecture-using-golang-b63587aa5e3f](https://medium.com/@eminetto/clean-architecture-using-golang-b63587aa5e3f)
164 | * [https://juicemia.com/post/go-ddd/](https://juicemia.com/post/go-ddd/)
165 | * [https://www.citerus.se/go-ddd/](https://www.citerus.se/go-ddd/)
166 | * [https://outcrawl.com/go-microservices-cqrs-docker/](https://outcrawl.com/go-microservices-cqrs-docker/)
167 | * [https://github.com/marcusolsson/goddd](https://github.com/marcusolsson/goddd)
168 | * [https://www.youtube.com/watch?v=dPmqQqPn75w](https://www.youtube.com/watch?v=dPmqQqPn75w)
169 | * [Criticism](https://www.reddit.com/r/golang/comments/6ugzo2/domain_driven_design_and_go/dlsm85q)
170 | * [https://gist.github.com/gotjosh/2f00560efab83eb5d834](https://gist.github.com/gotjosh/2f00560efab83eb5d834)
171 |
172 | ## HTTP clients configuration
173 |
174 | * [https://medium.com/@nate510/don-t-use-go-s-default-http-client-4804cb19f779](https://medium.com/@nate510/don-t-use-go-s-default-http-client-4804cb19f779)
175 | * [https://medium.com/@valyala/net-http-client-has-the-following-additional-limitations-318ac870ce9d](https://medium.com/@valyala/net-http-client-has-the-following-additional-limitations-318ac870ce9d)
176 | * [http://tleyden.github.io/blog/2016/11/21/tuning-the-go-http-client-library-for-load-testing/](http://tleyden.github.io/blog/2016/11/21/tuning-the-go-http-client-library-for-load-testing/)
177 | * [https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/](https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/)
178 | * problems with current HTTP Client [https://github.com/bradfitz/exp-httpclient/blob/master/problems.md](https://github.com/bradfitz/exp-httpclient/blob/master/problems.md)
179 |
180 | ## Performance & monitoring
181 |
182 | * [https://blog.golang.org/profiling-go-programs](https://blog.golang.org/profiling-go-programs)
183 | * [https://jvns.ca/blog/2017/09/24/profiling-go-with-pprof/](https://jvns.ca/blog/2017/09/24/profiling-go-with-pprof/)
184 | * [https://github.com/google/pprof](https://github.com/google/pprof)
185 | * [https://golang.org/pkg/net/http/pprof/](https://golang.org/pkg/net/http/pprof/)
186 | * go-perfbook [https://github.com/dgryski/go-perfbook](https://github.com/dgryski/go-perfbook)
187 | * [https://golang.org/pkg/net/http/pprof/](https://golang.org/pkg/net/http/pprof/)
188 | * Command line monitoring for goroutines [https://github.com/bcicen/grmon](https://github.com/bcicen/grmon)
189 | * A tool to list and diagnose Go processes currently running on your system [https://github.com/google/gops](https://github.com/google/gops)
190 |
191 | ## Libraries
192 |
193 | * [https://github.com/kgoralski?language=go&tab=stars](https://github.com/kgoralski?language=go&tab=stars)
194 | * [https://github.com/golangci/awesome-go-linters](https://github.com/golangci/awesome-go-linters)
195 | * [https://github.com/kisielk/errcheck](https://github.com/kisielk/errcheck)
196 | * [https://github.com/sirupsen/logrus](https://github.com/sirupsen/logrus)
197 |
198 | ## Go and Rx \(Reactive\) Extensions
199 |
200 | Do we need it for Go? We have channels and goroutines.
201 |
202 | * [https://github.com/ReactiveX/RxGo](https://github.com/ReactiveX/RxGo)
203 | * [https://medium.com/@jochasinga/go-reactivex-programming-4a2d5e077ce9](https://medium.com/@jochasinga/go-reactivex-programming-4a2d5e077ce9)
204 | * [https://www.reddit.com/r/golang/comments/5rskwd/rxgo\_port\_of\_reactivex\_observable\_stream\_to\_go/](https://www.reddit.com/r/golang/comments/5rskwd/rxgo_port_of_reactivex_observable_stream_to_go/)
205 | * [https://forum.golangbridge.org/t/chans-goroutines-vs-reactive-extensions/1251](https://forum.golangbridge.org/t/chans-goroutines-vs-reactive-extensions/1251)
206 | * [https://github.com/trustmaster/goflow](https://github.com/trustmaster/goflow)
207 | * Why this is important for Java [https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape](https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape) "What is driving the rise of Reactive in Enterprise Java? Well, it’s not \(all\) just a technology fad — people jumping on the bandwagon with the shiny new toys. The driver is efficient resource utilization, or in other words, spending less money on servers and data centres. The promise of Reactive is that you can do more with less, specifically you can process higher loads with fewer threads. This is where the intersection of Reactive and non-blocking, asynchronous I/O comes to the foreground. For the right problem, the effects are dramatic. For the wrong problem, the effects might go into reverse \(you actually make things worse\). Also remember, even if you pick the right problem, there is no such thing as a free lunch, and Reactive doesn’t solve the problems for you, it just gives you a toolbox that you can use to implement solutions."
208 |
209 | ## IDE
210 |
211 | * [https://www.jetbrains.com/go/](https://www.jetbrains.com/go/)
212 | * [https://plugins.jetbrains.com/plugin/10460-golang-mockery](https://plugins.jetbrains.com/plugin/10460-golang-mockery)
213 | * File Watchers [https://www.jetbrains.com/help/go/settings-tools-file-watchers.html](https://www.jetbrains.com/help/go/settings-tools-file-watchers.html)
214 | * [https://github.com/fatih/vim-go](https://github.com/fatih/vim-go)
215 | * [https://farazdagi.com/blog/2015/vim-as-golang-ide/](https://farazdagi.com/blog/2015/vim-as-golang-ide/)
216 | * [https://github.com/derekparker/delve](https://github.com/derekparker/delve)
217 | * [https://code.visualstudio.com/docs/languages/go](https://code.visualstudio.com/docs/languages/go)
218 | * [https://blog.jetbrains.com/idea/2018/03/intellij-idea-2018-1-kubernetes-support/](https://blog.jetbrains.com/idea/2018/03/intellij-idea-2018-1-kubernetes-support/)
219 | * [https://plugins.jetbrains.com/plugin/7371-aws-cloudformation](https://plugins.jetbrains.com/plugin/7371-aws-cloudformation)
220 | * [https://plugins.jetbrains.com/plugin/7808-hashicorp-terraform--hcl-language-support](https://plugins.jetbrains.com/plugin/7808-hashicorp-terraform--hcl-language-support)
221 | * [https://github.com/amix/vimrc](https://github.com/amix/vimrc)
222 |
223 | ## Go for Java devs
224 |
225 | * [https://github.com/fstab/go-programming-for-java-developers](https://github.com/fstab/go-programming-for-java-developers)
226 | * [https://steveperkins.com/go-for-java-programmers/](https://steveperkins.com/go-for-java-programmers/)
227 | * [https://yourbasic.org/golang/go-java-tutorial/](https://yourbasic.org/golang/go-java-tutorial/)
228 |
229 |
--------------------------------------------------------------------------------
/google-cloud.md:
--------------------------------------------------------------------------------
1 | # Google Cloud
2 |
3 | ## Introduction
4 |
5 | * [https://cloud.google.com/sdk/docs/quickstarts](https://cloud.google.com/sdk/docs/quickstarts)
6 | * [https://cloud.google.com/docs/overview/](https://cloud.google.com/docs/overview/)
7 | * [https://github.com/GoogleCloudPlatform/awesome-google-cloud](https://github.com/GoogleCloudPlatform/awesome-google-cloud)
8 | * [https://cloud.google.com/tools/docs/](https://cloud.google.com/tools/docs/)
9 |
10 | ## gcloud command line tool
11 |
12 | [https://cloud.google.com/sdk/downloads](https://cloud.google.com/sdk/downloads)
13 |
14 | [https://cloud.google.com/sdk/gcloud/reference/](https://cloud.google.com/sdk/gcloud/reference/)
15 |
16 | ## Kubernetes Engine
17 |
18 | [https://cloud.google.com/kubernetes-engine/docs/](https://cloud.google.com/kubernetes-engine/docs/)[https://kubernetes.io/docs/reference/kubectl/cheatsheet/\#kubectl-context-and-configuration](https://kubernetes.io/docs/reference/kubectl/cheatsheet/#kubectl-context-and-configuration)
19 | [https://cloud.google.com/kubernetes-engine/docs/tutorials/installing-istio](https://cloud.google.com/kubernetes-engine/docs/tutorials/installing-istio)
20 |
21 | **k8s login GCP preprod**
22 |
23 | | `gcloud container clusters get-credentials prod --zone europe-west1-b --project project-name` |
24 | | :--- |
25 |
26 |
27 | [https://kubernetes.io/docs/reference/kubectl/cheatsheet/](https://kubernetes.io/docs/reference/kubectl/cheatsheet/)
28 |
29 | [https://eu.udacity.com/course/scalable-microservices-with-kubernetes–ud615](https://eu.udacity.com/course/scalable-microservices-with-kubernetes--ud615)
30 |
31 | ## Big Table
32 |
33 | * [https://cloud.google.com/bigtable/](https://cloud.google.com/bigtable/)
34 | * [https://cloud.google.com/bigtable/docs/](https://cloud.google.com/bigtable/docs/)
35 | * [https://cloud.google.com/bigtable/docs/go/cbt-overview](https://cloud.google.com/bigtable/docs/go/cbt-overview)
36 | * [https://cloud.google.com/bigtable/docs/access-control](https://cloud.google.com/bigtable/docs/access-control)
37 | * **cbt command line tool**
38 |
39 | ```bash
40 | https://
41 | cloud.google.com/bigtable/docs/go/cbt-overview
42 |
43 | /Users/username/.cbtrc
44 | project = project-name
45 | instance = instance-name
46 |
47 | $cbt ls
48 | ```
49 |
50 | ## Storage
51 |
52 | [https://console.cloud.google.com/storage/browser/](https://console.cloud.google.com/storage/browser/payments-bgl-preprod)
53 |
54 | [https://cloud.google.com/storage/](https://cloud.google.com/storage/)
55 |
56 | ## Load Balancing
57 |
58 | * [https://cloud.google.com/load-balancing/docs/network/](https://cloud.google.com/load-balancing/docs/network/)
59 | * [https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balance](https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer)
60 | * [https://cloud.google.com/load-balancing/docs/internal/](https://cloud.google.com/load-balancing/docs/internal/)
61 | * [https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0](https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0)
62 | * [https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing](https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing)
63 | * [https://medium.com/google-cloud/internal-load-balancing-for-kubernetes-services-on-google-cloud-f8aef11fb1c4](https://medium.com/google-cloud/internal-load-balancing-for-kubernetes-services-on-google-cloud-f8aef11fb1c4)
64 | * [https://estl.tech/configuring-https-to-a-web-service-on-google-kubernetes-engine-2d71849520d](https://estl.tech/configuring-https-to-a-web-service-on-google-kubernetes-engine-2d71849520d)
65 | * [https://cloud.google.com/load-balancing/docs/health-check-concepts](https://cloud.google.com/load-balancing/docs/health-check-concepts)
66 | * [https://kubernetes.io/docs/concepts/services-networking/service/](https://kubernetes.io/docs/concepts/services-networking/service/)
67 | * [http://nishadikirielle.blogspot.com/2016/03/load-balancing-kubernetes-services-and.html](http://nishadikirielle.blogspot.com/2016/03/load-balancing-kubernetes-services-and.html)
68 |
69 | "By default, to distribute traffic to instances, the Session Affinity is set to NONE. Google Cloud Load Balancing picks an instance based on a hash of the source IP and port, destination IP and port, and protocol. This means that incoming TCP connections are spread across instances and each new connection may go to a different instance. All packets for a connection are directed to the same instance until the connection is closed. Established connections are not taken into account when balancing.
70 |
71 | Regardless of the session affinity setting, all packets for a connection are directed to the chosen instance until the connection is closed and have no impact on load balancing decisions for new incoming connections. This can result in imbalance between backends if long-lived TCP connections are in use.
72 |
73 | You can choose a different Session Affinity setting if you need multiple connections from a client to go to the same instance. See sessionAffinity in the Target Pools documentation for more information."
74 |
75 | "In any of these proxy model, any traffic bound for the Service's IP:Port is proxied to an appropriate backend without the clients knowing anything about Kubernetes or Services or Pods. Client-IP based session affinity can be selected by setting service.spec.sessionAffinity to "ClientIP" \(the default is "None"\), and you can set the max session sticky time by setting the field service.spec.sessionAffinityConfig.clientIP.timeoutSeconds if you have already set service.spec.sessionAffinity to "ClientIP" \(the default is "10800"\)."
76 |
77 | ## Preemptible VM Instances
78 |
79 | [https://cloud.google.com/compute/docs/instances/preemptible](https://cloud.google.com/compute/docs/instances/preemptible)
80 |
81 | ## Deployment Manager
82 |
83 | Deployment Manager is an infrastructure deployment service that automates the creation and management of Google Cloud Platform resources for you.
84 |
85 | Write flexible template and configuration files and use them to create deployments that have a variety of Cloud Platform services, such as Google Cloud Storage, Google Compute Engine, and Google Cloud SQL, configured to work together.
86 |
87 | 1. Docs [https://cloud.google.com/deployment-manager/docs/](https://cloud.google.com/deployment-manager/docs/)
88 | 2. How to use it [https://cloudplatform.googleblog.com/2016/11/what-is-Google-Cloud-Deployment-Manager-and-how-to-use-it.html](https://cloudplatform.googleblog.com/2016/11/what-is-Google-Cloud-Deployment-Manager-and-how-to-use-it.html) and [https://medium.com/google-cloud/infrastructure-as-code-on-google-cloud-platform-beginning-templates-68882e68d666](https://medium.com/google-cloud/infrastructure-as-code-on-google-cloud-platform-beginning-templates-68882e68d666)
89 | 3. Preview Configuration [https://cloud.google.com/deployment-manager/docs/configuration/preview-configuration-file](https://cloud.google.com/deployment-manager/docs/configuration/preview-configuration-file) \(project with activated billing is needed\)
90 | 4. gcloud command line reference tool [https://cloud.google.com/sdk/gcloud/reference/deployment-manager/](https://cloud.google.com/sdk/gcloud/reference/deployment-manager/)
91 | 5. examples [https://github.com/GoogleCloudPlatform/deploymentmanager-samples/tree/master/examples/v2](https://github.com/GoogleCloudPlatform/deploymentmanager-samples/tree/master/examples/v2)
92 | 6. GCP API roles [https://cloud.google.com/iam/docs/understanding-roles](https://cloud.google.com/iam/docs/understanding-roles)
93 | 7. Custom roles [https://cloud.google.com/iam/docs/understanding-custom-roles](https://cloud.google.com/iam/docs/understanding-custom-roles)
94 | 8. Sample permissions for BigTable [https://cloud.google.com/bigtable/docs/access-control](https://cloud.google.com/bigtable/docs/access-control)
95 | 9. Alternative to deployment-manager is [https://www.terraform.io/docs/providers/google/index.html](https://www.terraform.io/docs/providers/google/index.html)
96 |
97 | ### **custom role**
98 |
99 | ```bash
100 | ### jinja
101 | resources:
102 | - name: custom-role
103 | type: gcp-types/iam-v1:projects.roles
104 | properties:
105 | parent: projects/{{ env["project"] }}
106 | roleId: {{ properties["roleId"] }}
107 | role:
108 | title: {{ properties["title"] }}
109 | description: {{ properties["description"] }}
110 | stage: {{ properties["stage"] }}
111 | includedPermissions: {{ properties["includedPermissions"] }}
112 |
113 |
114 | ### yaml
115 | - name: app-bigtable-role
116 | type: roles/project_custom_role.jinja
117 | properties:
118 | roleId: bigtable.app
119 | title: App Bigtable role
120 | description: Role for managing BigTable
121 | stage: GA
122 | includedPermissions:
123 | - bigtable.tables.create
124 | - bigtable.tables.update
125 | - bigtable.tables.checkConsistency
126 | - bigtable.tables.generateConsistencyToken
127 | - bigtable.tables.get
128 | - bigtable.tables.list
129 | - bigtable.tables.mutateRows
130 | - bigtable.tables.readRows
131 | - bigtable.tables.sampleRowKeys
132 | - bigtable.appProfiles.get
133 | - bigtable.appProfiles.list
134 | - bigtable.clusters.get
135 | - bigtable.clusters.list
136 | - monitoring.metricDescriptors.get
137 | - monitoring.metricDescriptors.list
138 | - monitoring.timeSeries.list
139 | - resourcemanager.projects.get
140 | ```
141 |
142 | ### **service account**
143 |
144 | ```bash
145 | ### jinja
146 | resources:
147 | - name: {{ env['name'] }}
148 | type: iam.v1.serviceAccount
149 | properties:
150 | accountId: {{ properties['name'] }}
151 | displayName: serviceAccount-{{ properties['name'] }}
152 |
153 |
154 | ### yaml
155 | - name: app-bigtable-sa-prod
156 | type: accounts/service_account.jinja
157 | properties:
158 | name: app-prod
159 | ```
160 |
161 | ### add roles to service accounts
162 |
163 | ```bash
164 | - name: get-iam-policy
165 | action: gcp-types/cloudresourcemanager-v1:cloudresourcemanager.projects.getIamPolicy
166 | properties:
167 | resource: project-id
168 | - name: add-iam-policy
169 | action: gcp-types/cloudresourcemanager-v1:cloudresourcemanager.projects.setIamPolicy
170 | properties:
171 | resource: project-id
172 | policy: $(ref.get-iam-policy)
173 | gcpIamPolicyPatch:
174 | add:
175 | - role: projects/project-name/roles/bigtable.app # custom role
176 | members:
177 | - serviceAccount:app-prod@project-id.iam.gserviceaccount.com
178 | - serviceAccount:app-stg@project-id.iam.gserviceaccount.com
179 | - role: roles/bigtable.reader
180 | members:
181 | - serviceAccount:app-prod-reader@project-id.iam.gserviceaccount.com
182 | - serviceAccount:app-stg-reader@project-id.iam.gserviceaccount.com
183 | ```
184 |
185 | ### Makefile deployment
186 |
187 | ```bash
188 | DRY_RUN=true
189 |
190 | ifeq ($(DRY_RUN), false)
191 | EXTRA_ARGS=
192 | else
193 | EXTRA_ARGS=--preview
194 | endif
195 |
196 | # preprod
197 | .PHONY: create-deployment
198 | create-deployment:
199 | gcloud deployment-manager deployments create deployment-name --config config.yaml --project project-id $(EXTRA_ARGS)
200 |
201 | .PHONY: update-deployment
202 | update-deployment:
203 | gcloud deployment-manager deployments update deployment-name --config config.yaml --project project-id $(EXTRA_ARGS)
204 |
205 | .PHONY: delete-deployment
206 | delete-deployment:
207 | gcloud deployment-manager deployments delete deployment-name --project project-id
208 | ```
209 |
210 | ## Problems encountered
211 |
212 | 1. Created a role bigtable.some\_name , few weeks later that bigtable prefix became reserved name
213 | 2. Created service accouunt manually, later created account and assigned role using deployment manager. Older role was also assigned and was acting like the old one. Unassigned and assigned correct role and started working.
214 | 3. Was hard to find correct api resource for IAM. Cloud Resource Manager was the answer.
215 |
216 | ## Terraform
217 |
218 | **Roles, IAM, ServiceAccounts, BigTable done with Terraform**
219 |
220 | ```bash
221 | provider "google" {
222 | project = "project-name"
223 | }
224 |
225 |
226 | ### Big Table
227 | resource "google_bigtable_instance" "bigtable-name" {
228 | name = "bigtable-name"
229 | cluster_id = "bigtable-name-cluster"
230 | zone = "europe-west1-b"
231 | num_nodes = 3
232 | storage_type = "SSD"
233 | }
234 |
235 | ### Custom role
236 | resource "google_project_iam_custom_role" "app-bigtable-role" {
237 | role_id = "bigtable.app"
238 | title = "App BigTable Role"
239 | description = "Role for managing BigTable"
240 | permissions = ["bigtable.tables.create",
241 | "bigtable.tables.update",
242 | "bigtable.tables.checkConsistency",
243 | "bigtable.tables.generateConsistencyToken",
244 | "bigtable.tables.get",
245 | "bigtable.tables.list",
246 | "bigtable.tables.mutateRows",
247 | "bigtable.tables.readRows",
248 | "bigtable.tables.sampleRowKeys",
249 | "bigtable.appProfiles.get",
250 | "bigtable.appProfiles.list",
251 | "bigtable.clusters.get",
252 | "bigtable.clusters.list",
253 | "monitoring.metricDescriptors.get",
254 | "monitoring.metricDescriptors.list",
255 | "monitoring.timeSeries.list",
256 | "resourcemanager.projects.get",]
257 | }
258 |
259 | ### service account
260 | resource "google_service_account" "app-bigtable-sa-prod" {
261 | account_id = "app-prod"
262 | display_name = "serviceAccount-app-prod"
263 | }
264 |
265 | ### service account
266 | resource "google_service_account" "app-bigtable-sa-prod-reader" {
267 | account_id = "app-prod-reader"
268 | display_name = "serviceAccount-app-prod-reader"
269 | }
270 |
271 |
272 | ### assigned custom role
273 | resource "google_project_iam_binding" "app-prod-role" {
274 | role = "projects/project-name/roles/bigtable.app"
275 |
276 | members = ["serviceAccount:app-prod@project-name.iam.gserviceaccount.com"]
277 | }
278 |
279 |
280 | ### assigned predefined BigTable role
281 | resource "google_project_iam_binding" "app-prod-role-reader" {
282 | role = "roles/bigtable.reader"
283 |
284 | members = ["serviceAccount:app-prod-reader@project-name.iam.gserviceaccount.com"]
285 | }
286 | ```
287 |
288 |
--------------------------------------------------------------------------------
/hibernate.md:
--------------------------------------------------------------------------------
1 | # Hibernate
2 |
3 | **JPA beyond copy paste by Jakub Kubrynski** [https://youtu.be/EZwpOLCfuq4](https://www.youtube.com/watch?v=EZwpOLCfuq4&t=2408s) - this is video might be a little bit outdated but still contains a lot of useful **tips**, the content of this video is described here:
4 |
5 | * [https://www.youtube.com/watch?v=EZwpOLCfuq4&lc=Ugxp9JpfgF9Hv5nfGyl4AaABAg](https://www.youtube.com/watch?v=EZwpOLCfuq4&lc=Ugxp9JpfgF9Hv5nfGyl4AaABAg)
6 | * [https://speakerdeck.com/jkubrynski/jpa-beyond-copy-paste](https://speakerdeck.com/jkubrynski/jpa-beyond-copy-paste)
7 |
8 | **Vlad Mihalcea** is Java Champion and author of probably the **best book** about Hibernate. His blog and tutorials are great.
9 |
10 | * [https://vladmihalcea.com/books/high-performance-java-persistence/](https://vladmihalcea.com/books/high-performance-java-persistence/)
11 | * [https://vladmihalcea.com/tutorials/hibernate/](https://vladmihalcea.com/tutorials/hibernate/)
12 | * [https://www.youtube.com/channel/UCYeDPubBiFCZXIOgGYoyADw/playlists](https://www.youtube.com/channel/UCYeDPubBiFCZXIOgGYoyADw/playlists)
13 |
14 | **N+1 problem**
15 |
16 | * [https://www.javacodemonk.com/what-is-n-1-problem-in-hibernate-how-will-you-identify-and-solve-it-894097b9](https://www.javacodemonk.com/what-is-n-1-problem-in-hibernate-how-will-you-identify-and-solve-it-894097b9)
17 | * [https://vladmihalcea.com/how-to-detect-the-n-plus-one-query-problem-during-testing/](https://vladmihalcea.com/how-to-detect-the-n-plus-one-query-problem-during-testing/)
18 | * [https://dziadeusz.github.io/prevent-n+1-from-creeping-in/](https://dziadeusz.github.io/prevent-n+1-from-creeping-in/)
19 |
20 | **List vs Bag vs Set**
21 |
22 | * [https://vladmihalcea.com/hibernate-facts-favoring-sets-vs-bags/](https://vladmihalcea.com/hibernate-facts-favoring-sets-vs-bags/)
23 |
24 | **equals & hashcode and UUID usage**
25 |
26 | * [https://thoughts-on-java.org/ultimate-guide-to-implementing-equals-and-hashcode-with-hibernate/](https://thoughts-on-java.org/ultimate-guide-to-implementing-equals-and-hashcode-with-hibernate/)
27 | * [https://stackoverflow.com/questions/5031614/the-jpa-hashcode-equals-dilemma](https://stackoverflow.com/questions/5031614/the-jpa-hashcode-equals-dilemma)
28 | * [https://vladmihalcea.com/hibernate-and-uuid-identifiers/](https://vladmihalcea.com/hibernate-and-uuid-identifiers/)
29 |
30 | **Performance tips**
31 |
32 | * [https://vladmihalcea.com/14-high-performance-java-persistence-tips/](https://vladmihalcea.com/14-high-performance-java-persistence-tips/)
33 | * [https://www.slideshare.net/VladMihalcea/jpa-and-hibernate-performance-tips](https://www.slideshare.net/VladMihalcea/jpa-and-hibernate-performance-tips)
34 | * [https://www.youtube.com/watch?v=BTdTEe9QL5k](https://www.youtube.com/watch?v=BTdTEe9QL5k)
35 |
36 | **Optimistic locking**
37 |
38 | * [https://vladmihalcea.com/optimistic-locking-version-property-jpa-hibernate/](https://vladmihalcea.com/optimistic-locking-version-property-jpa-hibernate/)
39 | * [https://vladmihalcea.com/a-beginners-guide-to-database-locking-and-the-lost-update-phenomena/](https://vladmihalcea.com/a-beginners-guide-to-database-locking-and-the-lost-update-phenomena/)
40 |
41 | **Common pitfalls**
42 |
43 | * [https://codete.com/blog/jpa-8-common-pitfalls/](https://codete.com/blog/jpa-8-common-pitfalls/)
44 | * [https://codete.com/blog/5-common-spring-transactional-pitfalls/](https://codete.com/blog/5-common-spring-transactional-pitfalls/)
45 |
46 | **JPA 2.2 Streaming \(fancy stuff\)**
47 |
48 | * [https://vladmihalcea.com/whats-new-in-jpa-2-2-stream-the-result-of-a-query-execution/](https://vladmihalcea.com/whats-new-in-jpa-2-2-stream-the-result-of-a-query-execution/)
49 |
50 | 
51 |
52 | 
53 |
54 | 
55 |
56 | 
57 |
58 | 
59 |
60 |
61 |
62 | 
63 |
64 |
--------------------------------------------------------------------------------
/janusgraph.md:
--------------------------------------------------------------------------------
1 | # Janusgraph
2 |
3 | ## Introduction
4 |
5 | JanusGraph is a scalable [graph database](http://en.wikipedia.org/wiki/Graph_database) optimized for storing and querying graphs containing hundreds of billions of vertices and edges distributed across a multi-machine cluster.
6 | JanusGraph is a transactional database that can support thousands of concurrent users executing complex graph traversals in real time.
7 |
8 | Official website [http://janusgraph.org/](http://janusgraph.org/)
9 |
10 | ## Links
11 |
12 | * Docs [http://docs.janusgraph.org/latest/](http://docs.janusgraph.org/latest/)
13 | * [https://github.com/JanusGraph/janusgraph/blob/master/docs/basics.adoc](https://github.com/JanusGraph/janusgraph/blob/master/docs/basics.adoc)
14 | * Schema [http://docs.janusgraph.org/latest/schema.html](http://docs.janusgraph.org/latest/schema.html)
15 | * Config reference [http://docs.janusgraph.org/latest/config-ref.html](http://docs.janusgraph.org/latest/config-ref.html)
16 | * Eventual Consistency & ConsistencyModifier.LOCK [http://docs.janusgraph.org/latest/eventual-consistency.html](http://docs.janusgraph.org/latest/eventual-consistency.html)
17 | * Storage Backends [http://docs.janusgraph.org/latest/storage-backends.html](http://docs.janusgraph.org/latest/storage-backends.html) BigTable, Hbase, Cassandra, ScyllaDB, BerkeleyDB, DynamoDB, InMemory
18 | * Index Backends [http://docs.janusgraph.org/latest/index-backends.html](http://docs.janusgraph.org/latest/index-backends.html) Elastic, Solr, Lucene
19 | * Transactions [http://docs.janusgraph.org/latest/tx.html](http://docs.janusgraph.org/latest/tx.html)
20 | * Bulk Loading [http://docs.janusgraph.org/latest/bulk-loading.html](http://docs.janusgraph.org/latest/bulk-loading.html)
21 | * Optimizing Reads & Writes [http://docs.janusgraph.org/latest/bulk-loading.html\#\_optimizing\_writes\_and\_reads](http://docs.janusgraph.org/latest/bulk-loading.html#_optimizing_writes_and_reads)
22 | * TinkerPop3 docs [http://tinkerpop.apache.org/docs/current/reference/](http://tinkerpop.apache.org/docs/current/reference/)
23 | * SQL2Gremlin [http://sql2gremlin.com/](http://sql2gremlin.com/)
24 | * Practical Gremlin Tutorial [https://github.com/krlawrence/graph](https://github.com/krlawrence/graph) and Book [https://github.com/krlawrence/graph/tree/master/book](https://github.com/krlawrence/graph/tree/master/book)
25 | * Gremlin Recipes [http://tinkerpop.apache.org/docs/current/recipes/](http://tinkerpop.apache.org/docs/current/recipes/)
26 | * JanusGraph Tutorial [https://github.com/marcelocf/janusgraph\_tutorial](https://github.com/marcelocf/janusgraph_tutorial)
27 | * Janusgraph Utils [https://github.com/IBM/janusgraph-utils](https://github.com/IBM/janusgraph-utils)
28 | * Testing [https://github.com/JanusGraph/janusgraph/blob/master/TESTING.md](https://github.com/JanusGraph/janusgraph/blob/master/TESTING.md)
29 | * Write Performance [https://www.experoinc.com/post/janusgraph-nuts-and-bolts-part-1-write-performance](https://www.experoinc.com/post/janusgraph-nuts-and-bolts-part-1-write-performance)
30 | * Loading data from file [http://tinkerpop.apache.org/docs/current/tutorials/getting-started/\#\_loading\_data](http://tinkerpop.apache.org/docs/current/tutorials/getting-started/#_loading_data)
31 | * [https://github.com/mohataher/awesome-tinkerpop](https://github.com/mohataher/awesome-tinkerpop)
32 | * docs improvement [https://github.com/JanusGraph/janusgraph/issues/452](https://github.com/JanusGraph/janusgraph/issues/452)
33 | * docs improvement [https://github.com/JanusGraph/janusgraph/issues/119](https://github.com/JanusGraph/janusgraph/issues/119)
34 | * [https://stackoverflow.com/questions/40105047/setup-and-configuration-of-titan-for-a-spark-cluster-and-cassandra/40180104\#40180104](https://stackoverflow.com/questions/40105047/setup-and-configuration-of-titan-for-a-spark-cluster-and-cassandra/40180104#40180104)
35 | * [https://stackoverflow.com/questions/41674226/how-does-the-titan-not-backend-storage-clustering-work](https://stackoverflow.com/questions/41674226/how-does-the-titan-not-backend-storage-clustering-work)
36 | * [https://www.compose.com/articles/importing-graphs-into-janusgraph/](https://www.compose.com/articles/importing-graphs-into-janusgraph/)
37 | * [https://developer.ibm.com/dwblog/2018/whats-janus-graph-learning-deployment/](https://developer.ibm.com/dwblog/2018/whats-janus-graph-learning-deployment/) [https://developer.ibm.com/dwblog/2018/janusgraph-composite-mixed-indexes-traversals/](https://developer.ibm.com/dwblog/2018/janusgraph-composite-mixed-indexes-traversals/) [https://cloud.google.com/solutions/running-janusgraph-with-bigtable](https://cloud.google.com/solutions/running-janusgraph-with-bigtable)
38 | * [https://cloud.google.com/blog/big-data/2018/07/developing-a-janusgraph-backed-service-on-google-cloud-platform](https://cloud.google.com/blog/big-data/2018/07/developing-a-janusgraph-backed-service-on-google-cloud-platform)
39 | * [https://stackoverflow.com/questions/46386299/gremlin-server-withremote-connection-closed-how-to-reconnect-automatically](https://stackoverflow.com/questions/46386299/gremlin-server-withremote-connection-closed-how-to-reconnect-automatically)
40 | * [https://stackoverflow.com/questions/47536418/how-to-connect-to-gremlin-server-through-java-using-the-gremlin-driver-with-sess](https://stackoverflow.com/questions/47536418/how-to-connect-to-gremlin-server-through-java-using-the-gremlin-driver-with-sess)
41 | * [http://gremlindocs.spmallette.documentup.com/](http://gremlindocs.spmallette.documentup.com/)
42 |
43 | ## Traversal promises
44 |
45 | [http://tinkerpop.apache.org/docs/3.3.0/upgrade/\#\_traversal\_promises](http://tinkerpop.apache.org/docs/3.3.0/upgrade/#_traversal_promises)
46 |
47 | ```text
48 | gremlin> promise = g.V().out().promise{it.next()}
49 | ==>java.util.concurrent.CompletableFuture@4aa3d36[Completed normally]
50 | gremlin> promise.join()
51 | ==>v[3]
52 | gremlin> promise.isDone()
53 | ==>true
54 | gremlin> g.V().out().promise{it.toList()}.thenApply{it.size()}.get()
55 | ==>6
56 | ```
57 |
58 | ## Important
59 |
60 | * JanusGraph can work with embedded gremlin server and it is able to connect to remote standalone gremlin servers
61 | * Possible to use JanusGraph Embedded Gremlin with multiple graphs with multiple config files
62 | * It is strongly encouraged to explicitly define all schema elements and to disable automatic schema creation by setting `schema.default=none` in the JanusGraph graph configuration.
63 | * query.force-index=false/true. Whether JanusGraph should throw an exception if a graph query cannot be answered using an index. Doing solimits the functionality of JanusGraph’s graph queries but ensures that slow graph queries are avoided on large graphs. Recommended for production use of JanusGraph.
64 | * Enabling the `storage.batch-loading` configuration option will have the biggest positive impact on bulk loading times for most applications. Enabling batch loading disables Janus internal consistency checks in a number of places. Most importantly, it disables locking. In other words, Titan assumes that the data to be loaded into Titan is consistent with the graph and hence disables its own checks in the interest of performance. **Important**: Enabling `storage.batch-loading` requires the user to ensure that the loaded data is internally consistent and consistent with any data already in the graph. In particular, concurrent type creation can lead to severe data integrity issues when batch loading is enabled. Hence, we **strongly** encourage disabling automatic type creation by setting `schema.default = none` in the graph configuration. Batch loading disabling locks.
65 | * PermamentLockExceptions will appear only on properties marked as ConsistencyModifier.LOCK
66 | * Without graph.commit\(\) you can get cached result if handled in same thread
67 | * Transactions are started automatically with the first operation executed against the graph. One does NOT have to start a transaction manually. The method `newTransaction` is used to start [multi-threaded transactions](http://docs.janusgraph.org/latest/tx.html#multi-thread-tx) only
68 | * fold/unfold get or create upsert [https://stackoverflow.com/a/46053115/7120456](https://stackoverflow.com/a/46053115/7120456)
69 | * When updating an element that is guarded by a uniqueness constraint, JanusGraph uses the following protocol at the end of a transaction when calling `tx.commit()`:
70 | 1. Acquire a lock on all elements that have a consistency constraint
71 | 2. Re-read those elements from the storage backend and verify that they match the state of the element in the current transaction prior to modification. If not, the element was concurrently modified and a PermanentLocking exception is thrown.
72 | 3. Persist the state of the transaction against the storage backend.
73 | 4. Release all locks.
74 |
75 | ## Bulk/Batch loading
76 |
77 | [https://docs.janusgraph.org/latest/bulk-loading.html](https://docs.janusgraph.org/latest/bulk-loading.html)
78 |
79 | [https://docs.janusgraph.org/latest/limitations.html\#\_batch\_loading\_speed](https://docs.janusgraph.org/latest/limitations.html#_batch_loading_speed)
80 |
81 | **Important**: Enabling `storage.batch-loading` requires the user to ensure that the loaded data is internally consistent and consistent with any data already in the graph. In particular, concurrent type creation can lead to severe data integrity issues when batch loading is enabled.
82 |
83 | 
84 |
85 | 
86 |
87 | [https://github.com/IBM/janusgraph-utils/blob/master/doc/users\_guide.md\#import-csv-file-to-janusgraph](https://github.com/IBM/janusgraph-utils/blob/master/doc/users_guide.md#import-csv-file-to-janusgraph)
88 |
89 | [https://docs.datastax.com/en/dse/6.0/dse-dev/datastax\_enterprise/graph/dgl/dglOverview.html](https://docs.datastax.com/en/dse/6.0/dse-dev/datastax_enterprise/graph/dgl/dglOverview.html)
90 |
91 | **Batching** - Looking at our script, you’ll notice that I’m including more than one addV per call. The exact number you’ll want to send over at once may vary, but the basic idea holds that there are performance benefits to be gained from batching. In addition to batching, note that I chained all of the mutations into a single traversal. This amortizes the cost of traversal compilation, which can be non-trivial when you’re going for as high of throughput as possible. Note that Gremlin is quite powerful and you can mix reads and writes into the same traversal, extending way beyond my simple insert example. So keep that in mind as you write your mutating traversals. The chosen batch size 10 is rather arbitrary so plan to test a few different sizes when you’re doing performance tuning.
92 |
93 | [https://www.experoinc.com/post/janusgraph-nuts-and-bolts-part-1-write-performance](https://www.experoinc.com/post/janusgraph-nuts-and-bolts-part-1-write-performance)
94 |
95 | _"Florian Hockmann lis 14 2017 09:27_
96 | _`@alimuzaffarkhan I would try it without any locks as they can slow down parallel inserts a lot. That's why it's often a good idea to handle de-duplication in your client application or at least make it robust against duplicate data. See also Chapter 29 of the docs for this topic. Even if you really need the locks, it might be interesting to benchmark performance without locks as that will tell whether locks are responsible for the low performance or whether there's another issue.`_
97 |
98 | _Thijs lis 14 2017 10:19_
99 | _`@alimuzaffarkhan I have also struggled with the performance due to unique constraints which caused a lot of locking. After a while I removed all constraints and build a de-duplication mechanism to merge duplicate nodes (when detected) and now I can insert thousands of vertices and edges a second. I build a linked data platform and hence when I query for some URI I perform a dedup-action if multiple nodes are found. I use additional timestamp properties and some other arbitrary rules to determine which elements to keep. This way I can have a reliable eventual consistent linked data platform.My setup: 1 cassandra node (non-unique-indexes on my URI-identifiers), 1 es node (indexes on all properties), 1 kafka node, zookeeper, scala-data-listeners importing data from multiple sources and pushing it to Kafka, scala-graph-importer listening to Kafka and importing incoming records to the graph. I stream the Kafka-topics in batches of 100 and am also commiting to the graph by batch (committing single records is slow). I also stream the batches concurrently and this is where a little optimization/tuning can be done, I currently have set the parallelism to 30 (so processing 30x100 records/sec, where a record results in committing one or more vertices and zero or more edges).Currently I am running this on a single machine.So my dedup-mechanism is ad-hoc executed but you could also scan for duplicate id's after a certain delay since the moment a new id was inserted last (perhaps do this in batches)."`_
100 |
101 | ## Standalone Gremlin Server
102 |
103 | "I generally wouldn't recommend embedding Janus in your app though unless you have a really good reason to." - by Ted Wilmes [https://www.experoinc.com/post/janusgraph-nuts-and-bolts-part-1-write-performance](https://www.experoinc.com/post/janusgraph-nuts-and-bolts-part-1-write-performance)
104 |
105 | [https://github.com/JanusGraph/janusgraph/issues/1108](https://github.com/JanusGraph/janusgraph/issues/1108)
106 |
107 | "By default, communication with Gremlin Server occurs over WebSockets and exposes a custom sub-protocol for interacting with the server."
108 | [http://tinkerpop.apache.org/docs/3.2.3/reference/\#starting-gremlin-server](http://tinkerpop.apache.org/docs/3.2.3/reference/#starting-gremlin-server)
109 | [http://tinkerpop.apache.org/docs/3.2.3/reference/\#connecting-via-console](http://tinkerpop.apache.org/docs/3.2.3/reference/#connecting-via-console)
110 | [http://tinkerpop.apache.org/docs/3.2.3/reference/\#\_connecting\_via\_rest](http://tinkerpop.apache.org/docs/3.2.3/reference/#_connecting_via_rest)
111 | [http://docs.janusgraph.org/0.2.0/server.html\#\_websocket\_versus\_http](http://docs.janusgraph.org/0.2.0/server.html#_websocket_versus_http)
112 | [http://docs.janusgraph.org/0.2.0/server.html\#\_janusgraph\_server\_as\_a\_websocket\_endpoint](http://docs.janusgraph.org/0.2.0/server.html#_janusgraph_server_as_a_websocket_endpoint)
113 | [http://docs.janusgraph.org/0.2.0/server.html\#\_advanced\_janusgraph\_server\_configurations](http://docs.janusgraph.org/0.2.0/server.html#_advanced_janusgraph_server_configurations)
114 |
115 | ## Presentations about Janusgraph
116 |
117 | * [https://www.slideshare.net/JasonPlurad/airline-reservations-and-routing-a-graph-use-case](https://www.slideshare.net/JasonPlurad/airline-reservations-and-routing-a-graph-use-case)
118 | * [https://www.slideshare.net/ChinHuang4/onboarding-with-janusgraph-performance](https://www.slideshare.net/ChinHuang4/onboarding-with-janusgraph-performance)
119 | * Airline reservations and routing: a graph use case [https://www.youtube.com/watch?v=zOq1FtnWDuE](https://www.youtube.com/watch?v=zOq1FtnWDuE)
120 | * JanusGraph Journey [https://www.youtube.com/watch?v=1TQcPWgPvF8](https://www.youtube.com/watch?v=1TQcPWgPvF8)
121 | * Scylla Summit 2017: Performance Evaluation of Scylla as a Database Backend for JanusGraph [https://www.youtube.com/watch?v=YBsbXYvyZnA](https://www.youtube.com/watch?v=YBsbXYvyZnA)
122 | * Ted Wilmes on the state of JanusGraph 2018 [https://www.youtube.com/watch?v=yLm0ruUGgng](https://www.youtube.com/watch?v=yLm0ruUGgng)
123 | * [https://www.scylladb.com/2017/12/21/performance-evaluation-scylla-4-janusgraph/](https://www.scylladb.com/2017/12/21/performance-evaluation-scylla-4-janusgraph/)
124 |
125 |
--------------------------------------------------------------------------------
/java-programming-language.md:
--------------------------------------------------------------------------------
1 | # Java Programming Language
2 |
3 | ## For Beginners
4 |
5 | 1. Tutorial [https://docs.oracle.com/javase/tutorial/](https://docs.oracle.com/javase/tutorial/)
6 | 2. Video Tutorial . [https://www.udemy.com/java-tutorial/](https://www.udemy.com/java-tutorial/)
7 | 3. Even more tutorials [https://www.javacodegeeks.com/2015/01/get-your-advanced-java-programming-degree-with-these-tutorials-and-courses.html](https://www.javacodegeeks.com/2015/01/get-your-advanced-java-programming-degree-with-these-tutorials-and-courses.html)
8 | 4. Project Ideas: [http://www.dreamincode.net/forums/topic/78802-martyr2s-mega-project-ideas-list/](http://www.dreamincode.net/forums/topic/78802-martyr2s-mega-project-ideas-list/)
9 | 5. Introduction to Computer Science [https://www.edx.org/course/introduction-computer-science-harvardx-cs50x](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x)
10 | 6. [https://www.javacodegeeks.com/2015/06/java-programming-tips-best-practices-beginners.html](https://www.javacodegeeks.com/2015/06/java-programming-tips-best-practices-beginners.html)
11 |
12 | ## Links
13 |
14 | 1. Tutorials . [http://www.baeldung.com/](http://www.baeldung.com/)
15 | 2. Spring Boot [https://spring.io/guides/gs/spring-boot/](https://spring.io/guides/gs/spring-boot/)
16 | 3. Gradle [https://www.tutorialspoint.com/gradle/](https://www.tutorialspoint.com/gradle/)
17 | 4. gRPC [https://github.com/grpc/grpc-java/tree/master/examples/src/main/java/io/grpc/examples/helloworld](https://github.com/grpc/grpc-java/tree/master/examples/src/main/java/io/grpc/examples/helloworld)
18 | 5. Why field injection is evil [http://olivergierke.de/2013/11/why-field-injection-is-evil/](http://olivergierke.de/2013/11/why-field-injection-is-evil/)
19 | 6. FileInputStream / FileOutputStream Considered Harmful [https://www.cloudbees.com/blog/fileinputstream-fileoutputstream-considered-harmful](https://www.cloudbees.com/blog/fileinputstream-fileoutputstream-considered-harmful)
20 | 7. `https://`[`github.com/in28minutes/java-best-practices`](http://github.com/in28minutes/java-best-practices)
21 | 8. `https://`[`github.com/cxxr/better-java`](http://github.com/cxxr/better-java)
22 | 9. `https://`[`github.com/akullpp/awesome-java`](http://github.com/akullpp/awesome-java)
23 | 10. `http://`[`www.javapractices.com/home/HomeAction.do`](http://www.javapractices.com/home/HomeAction.do)
24 | 11. `so you want to throw an Exception` [`http://normanmaurer.me/blog/2013/11/09/The-hidden-performance-costs-of-instantiating-Throwables/`](http://normanmaurer.me/blog/2013/11/09/The-hidden-performance-costs-of-instantiating-Throwables/)
25 | 12. [https://github.com/Vedenin/useful-java-links](https://github.com/Vedenin/useful-java-links)
26 | 13. [https://martinfowler.com/bliki/MonolithFirst.html](https://martinfowler.com/bliki/MonolithFirst.html)
27 | 14. [https://about.sourcegraph.com/go/grpc-in-production-alan-shreve/](https://about.sourcegraph.com/go/grpc-in-production-alan-shreve/)
28 | 15. Spring 5 [http://www.baeldung.com/spring-5-functional-web](http://www.baeldung.com/spring-5-functional-web)
29 | 16. [http://www.baeldung.com/swagger-2-documentation-for-spring-rest-api](http://www.baeldung.com/swagger-2-documentation-for-spring-rest-api)
30 | 17. Spring Cloud for Microservices Compared to Kubernetes [https://developers.redhat.com/blog/2016/12/09/spring-cloud-for-microservices-compared-to-kubernetes/](https://developers.redhat.com/blog/2016/12/09/spring-cloud-for-microservices-compared-to-kubernetes/)
31 |
32 | ## Golang for Java Developers
33 |
34 | 1. [https://github.com/fstab/go-programming-for-java-developers](https://github.com/fstab/go-programming-for-java-developers)
35 | 2. [https://steveperkins.com/go-for-java-programmers/](https://steveperkins.com/go-for-java-programmers/)
36 | 3. [https://yourbasic.org/golang/go-java-tutorial/](https://yourbasic.org/golang/go-java-tutorial/)
37 |
38 | ## Testing
39 |
40 | * [http://spockframework.org/](http://spockframework.org/)
41 | * [http://spockframework.org/spock/docs/1.1/index.html](http://spockframework.org/spock/docs/1.1/index.html)
42 | * [http://www.baeldung.com/groovy-spock](http://www.baeldung.com/groovy-spock)
43 | * [https://thejavatar.com/testing-with-spock/](https://thejavatar.com/testing-with-spock/)
44 | * [http://farenda.com/spock-framework-tutorial/](http://farenda.com/spock-framework-tutorial/)
45 | * [https://github.com/spockframework/spock-example](https://github.com/spockframework/spock-example)
46 |
47 | ## IntelliJ IDEA
48 |
49 | 1. [https://www.jetbrains.com/toolbox/app/](https://www.jetbrains.com/toolbox/app/)
50 | 2. [https://plugins.jetbrains.com/plugin/9696-java-stream-debugger](https://plugins.jetbrains.com/plugin/9696-java-stream-debugger)
51 | 3. [https://plugins.jetbrains.com/plugin/9354-kubernetes-and-openshift-resource-support](https://plugins.jetbrains.com/plugin/9354-kubernetes-and-openshift-resource-support)
52 | 4. [https://plugins.jetbrains.com/plugin/4455-key-promoter](https://plugins.jetbrains.com/plugin/4455-key-promoter)
53 | 5. [https://plugins.jetbrains.com/plugin/8277-protobuf-support](https://plugins.jetbrains.com/plugin/8277-protobuf-support)
54 | 6. [https://plugins.jetbrains.com/plugin/6317-lombok-plugin](https://plugins.jetbrains.com/plugin/6317-lombok-plugin)
55 | 7. [https://plugins.jetbrains.com/plugin/7495--ignore](https://plugins.jetbrains.com/plugin/7495--ignore)
56 | 8. [https://plugins.jetbrains.com/plugin/4230-bashsupport](https://plugins.jetbrains.com/plugin/4230-bashsupport)
57 | 9. [https://plugins.jetbrains.com/top-downloads/idea](https://plugins.jetbrains.com/top-downloads/idea)
58 | 10. [https://www.voxxed.com/blog/presentation/presentation-42-intellij-idea-tips-tricks-45-minutes](https://www.voxxed.com/blog/presentation/presentation-42-intellij-idea-tips-tricks-45-minutes)
59 | 11. [https://www.jetbrains.com/help/idea/sharing-your-ide-settings.html](https://www.jetbrains.com/help/idea/sharing-your-ide-settings.html)
60 |
61 | ## Books
62 |
63 | 1. Core Java, Volume I and II; Horstmann
64 | 2. OCA/OCP Java SE 7 Programmer I & II Study Guide; Sierra & Bates
65 | 3. Effective Java; Bloch
66 | 4. Java Concurrency in Practice; Goetz
67 | 5. Spring Boot in Action; Walls
68 | 6. The Software Craftsman: Professionalism, Pragmatism, Pride; Mancuso
69 | 7. Java Performance - The Definitive Guide - Scott Oaks
70 | 8. Design Patterns; Gang of Four
71 | 9. Head First, Design Patterns; Sierra, Robson, Bates & Freeman
72 | 10. Clean Code; Martin
73 | 11. The Pragmatic Programmer; Hunt
74 | 12. Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne
75 | 13. Introduction to Algorithms, Cormen
76 |
77 | ## Package scope, hexagonal architecture, DDD, CQRS
78 |
79 | 1. \(PL\) Keep IT clean: mid-sized building blocks and hexagonal architecture
80 |
81 | [https://www.youtube.com/watch?v=ma15iBQpmHU](https://www.youtube.com/watch?v=ma15iBQpmHU&t=771s)
82 |
83 | 2. \(ENG\) Keep IT clean: mid-sized building blocks and hexagonal architecture [https://www.youtube.com/watch?v=KrLFs6f2bOA](https://www.youtube.com/watch?v=KrLFs6f2bOA)
84 | 3. Slides: [https://jakubn.gitlab.io/keepitclean/\#1](https://jakubn.gitlab.io/keepitclean/#1)
85 | 4. Sample code: [https://github.com/jakubnabrdalik/hentai](https://github.com/jakubnabrdalik/hentai) and [https://github.com/jakubnabrdalik/hentai-cloudy-rental](https://github.com/jakubnabrdalik/hentai-cloudy-rental)
86 | 5. Hexagonal [http://alistair.cockburn.us/Hexagonal+architecture](http://alistair.cockburn.us/Hexagonal+architecture)
87 | 6. Anemic vs Rich Model [https://dzone.com/articles/anaemic-vs-rich-domain-objects-finding-the-balance](https://dzone.com/articles/anaemic-vs-rich-domain-objects-finding-the-balance)
88 | 7. CQRS [https://martinfowler.com/bliki/CQRS.html](https://martinfowler.com/bliki/CQRS.html)
89 |
90 | ## Java inside Docker
91 |
92 | With Java 11 should be ok now. "The Java JVM ~~until now doesn’t~~ didn’t provide support to understand that it~~‘s~~ was running inside a container and that it has some resources like those that are memory and CPU restricted. Because of that, you ~~can’t~~ couldn’t let the JVM ergonomics take the decision by itself regarding the maximum heap size."
93 |
94 | * [https://developers.redhat.com/blog/2017/03/14/java-inside-docker/](https://developers.redhat.com/blog/2017/03/14/java-inside-docker/)
95 | * [https://engineering.linkedin.com/blog/2016/11/application-pauses-when-running-jvm-inside-linux-control-groups](https://engineering.linkedin.com/blog/2016/11/application-pauses-when-running-jvm-inside-linux-control-groups)
96 | * [https://jaxenter.com/nobody-puts-java-container-139373.html](https://jaxenter.com/nobody-puts-java-container-139373.html)
97 | * Why you’re going to FAIL running Java on docker [https://www.youtube.com/watch?v=UrAE0hD1\_pM](https://www.youtube.com/watch?v=UrAE0hD1_pM)
98 | * [https://bugs.openjdk.java.net/browse/JDK-8146115](https://bugs.openjdk.java.net/browse/JDK-8146115)
99 | * [https://stackoverflow.com/questions/53451103/java-using-much-more-memory-than-heap-size-or-size-correctly-docker-memory-limi/53624438\#53624438](https://stackoverflow.com/questions/53451103/java-using-much-more-memory-than-heap-size-or-size-correctly-docker-memory-limi/53624438#53624438)
100 |
101 |
--------------------------------------------------------------------------------
/kafka.md:
--------------------------------------------------------------------------------
1 | # Apache Kafka
2 |
3 | ## Introduction
4 |
5 | Apache Kafka® is a distributed streaming platform.
6 |
7 | A streaming platform has three key capabilities:
8 |
9 | * Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.
10 | * Store streams of records in a fault-tolerant durable way.
11 | * Process streams of records as they occur. Kafka is generally used for two broad classes of applications:
12 | * Building real-time streaming data pipelines that reliably get data between systems or applications
13 | * Building real-time streaming applications that transform or react to the streams of data
14 |
15 | To understand how Kafka does these things, let's dive in and explore Kafka's capabilities from the bottom up.
16 |
17 | First a few concepts:
18 |
19 | * Kafka is run as a cluster on one or more servers that can span multiple datacenters.
20 | * The Kafka cluster stores streams of records in categories called topics.
21 | * Each record consists of a key, a value, and a timestamp.
22 |
23 | ## Kafka Adoption Stories
24 |
25 | * [https://blog.twitter.com/engineering/en\_us/topics/insights/2018/twitters-kafka-adoption-story.html](https://blog.twitter.com/engineering/en_us/topics/insights/2018/twitters-kafka-adoption-story.html)
26 | * [https://tech.trello.com/why-we-chose-kafka/](https://tech.trello.com/why-we-chose-kafka/)
27 | * [https://medium.com/pinterest-engineering/how-pinterest-runs-kafka-at-scale-ff9c6f735be](https://medium.com/pinterest-engineering/how-pinterest-runs-kafka-at-scale-ff9c6f735be)
28 | * [https://allegro.tech/2019/05/hermes-1-0-released.html](https://allegro.tech/2019/05/hermes-1-0-released.html)
29 | * [https://opensource.com/article/17/9/apache-kafka](https://opensource.com/article/17/9/apache-kafka)
30 | * [https://www.confluent.io/customers/](https://www.confluent.io/customers/)
31 |
32 | ## References
33 |
34 | * [https://kafka.apache.org/](https://kafka.apache.org/)
35 | * Tutorial [https://www.udemy.com/apache-kafka/](https://www.udemy.com/apache-kafka/)
36 | * Books [https://www.confluent.io/apache-kafka-stream-processing-book-bundle](https://www.confluent.io/apache-kafka-stream-processing-book-bundle)
37 | * Mastering Apache Kafka [https://legacy.gitbook.com/book/jaceklaskowski/apache-kafka/details](https://legacy.gitbook.com/book/jaceklaskowski/apache-kafka/details)
38 | * GCP [https://cloud.google.com/blog/big-data/2018/05/google-cloud-platform-and-confluent-partner-to-deliver-a-managed-apache-kafka-service](https://cloud.google.com/blog/big-data/2018/05/google-cloud-platform-and-confluent-partner-to-deliver-a-managed-apache-kafka-service)
39 | * AWS [https://aws.amazon.com/kafka/](https://aws.amazon.com/kafka/), [https://aws.amazon.com/quickstart/architecture/confluent-platform/](https://aws.amazon.com/quickstart/architecture/confluent-platform/), [https://www.confluent.io/confluent-cloud/](https://www.confluent.io/confluent-cloud/) <- managed service
40 | * Beam has KafkaIO [https://cloud.google.com/blog/big-data/2016/09/apache-kafka-for-gcp-users-connectors-for-pubsub-dataflow-and-bigquery](https://cloud.google.com/blog/big-data/2016/09/apache-kafka-for-gcp-users-connectors-for-pubsub-dataflow-and-bigquery)
41 | * Spring Boot and Kafka [https://cloud.spring.io/spring-cloud-stream/](https://cloud.spring.io/spring-cloud-stream/)
42 | * Kafka has many connectors [https://www.confluent.io/product/connectors/](https://www.confluent.io/product/connectors/) one for Blockchain.info too
43 | * KSQL - enables something really effective: reading, writing and transforming data in real-time and a scale using a semantic already known by the majority of the community working in the data space, the SQL! [https://www.confluent.io/product/ksql/](https://www.confluent.io/product/ksql/) oraz [https://www.rittmanmead.com/blog/2017/10/ksql-streaming-sql-for-apache-kafka/](https://www.rittmanmead.com/blog/2017/10/ksql-streaming-sql-for-apache-kafka/)
44 |
45 | similar to blockchain in some way [https://www.rittmanmead.com/blog/2017/10/ksql-streaming-sql-for-apache-kafka/](https://www.rittmanmead.com/blog/2017/10/ksql-streaming-sql-for-apache-kafka/)
46 |
47 | * it is fast [https://softwaremill.com/mqperf/](https://softwaremill.com/mqperf/)
48 | * you can keep data forever there ... [https://www.confluent.io/blog/okay-store-data-apache-kafka/](https://www.confluent.io/blog/okay-store-data-apache-kafka/)
49 | * Google PubSub vs Kafka [https://stackoverflow.com/questions/38572071/i-am-evaluating-google-pub-sub-vs-kafka](https://stackoverflow.com/questions/38572071/i-am-evaluating-google-pub-sub-vs-kafka)
50 | * Neo4j Use Case: Low Latency Graph Analytics & OLTP - Update 1M Nodes in 90 secs with Kafka and Neo4j Bolt [https://gist.github.com/graphadvantage/a148613f75818897e396a64957dc6ef1](https://gist.github.com/graphadvantage/a148613f75818897e396a64957dc6ef1)
51 | * Streaming Comparison [https://databaseline.bitbucket.io/images/2016-03-12-apache-streaming-technologies.png](https://databaseline.bitbucket.io/images/2016-03-12-apache-streaming-technologies.png)
52 | * What is Apache Kafka? Why is it so popular? Should you use it? [https://techbeacon.com/what-apache-kafka-why-it-so-popular-should-you-use-it](https://techbeacon.com/what-apache-kafka-why-it-so-popular-should-you-use-it)
53 | * [https://content.pivotal.io/blog/understanding-when-to-use-rabbitmq-or-apache-kafka](https://content.pivotal.io/blog/understanding-when-to-use-rabbitmq-or-apache-kafka)
54 | * [https://www.infoq.com/articles/apache-kafka](https://www.infoq.com/articles/apache-kafka)
55 | * Free books bundle [https://www.confluent.io/apache-kafka-stream-processing-book-bundle](https://www.confluent.io/apache-kafka-stream-processing-book-bundle)
56 | * [https://blog.scottlogic.com/2018/04/17/comparing-big-data-messaging.html](https://blog.scottlogic.com/2018/04/17/comparing-big-data-messaging.html)
57 | * Rabbit & Kafka microservices [https://news.ycombinator.com/item?id=11284765](https://news.ycombinator.com/item?id=11284765)
58 | * Rabbit & Kafka [https://tech.trello.com/why-we-chose-kafka/](https://tech.trello.com/why-we-chose-kafka/)
59 | * Rabbit & Kafka [https://blog.mavenhive.in/which-one-to-use-and-when-rabbitmq-vs-apache-kafka-7d5423301b58](https://blog.mavenhive.in/which-one-to-use-and-when-rabbitmq-vs-apache-kafka-7d5423301b58)
60 | * [https://www.confluent.io/blog/event-driven-2-0](https://www.confluent.io/blog/event-driven-2-0)
61 | * [https://www.confluent.io/product/confluent-platform/](https://www.confluent.io/product/confluent-platform/)
62 | * [https://www.slideshare.net/ConfluentInc/common-patterns-of-multi-datacenter-architectures-with-apache-kafka](https://www.slideshare.net/ConfluentInc/common-patterns-of-multi-datacenter-architectures-with-apache-kafka)
63 | * [https://www.slideshare.net/KaushalLahankarFRM/kafka-vs-kinesis](https://www.slideshare.net/KaushalLahankarFRM/kafka-vs-kinesis)
64 | * [https://edoc.site/datapipe-whitepaper-kafka-vs-kinesis-pdf-free.html](https://edoc.site/datapipe-whitepaper-kafka-vs-kinesis-pdf-free.html)
65 | * [https://www.quora.com/Which-of-Amazon-Kinesis-and-Apache-Kafka-is-the-more-proven-and-high-performance-oriented](https://www.quora.com/Which-of-Amazon-Kinesis-and-Apache-Kafka-is-the-more-proven-and-high-performance-oriented)
66 | * Martin Kleppmann \| Kafka Summit SF 2018 Keynote \(Is Kafka a Database?\) [https://www.youtube.com/watch?v=v2RJQELoM6Y](https://www.youtube.com/watch?v=v2RJQELoM6Y)
67 | * [https://medium.com/@stephane.maarek/an-honest-review-of-aws-managed-apache-kafka-amazon-msk-94b1ff9459d8](https://medium.com/@stephane.maarek/an-honest-review-of-aws-managed-apache-kafka-amazon-msk-94b1ff9459d8) AWS MSK
68 |
69 | ## Apache Kafka and Microservices
70 |
71 | * [https://www.slideshare.net/KaiWaehner/eventdriven-microservices-with-apache-kafka-kafka-streams-and-ksql](https://www.slideshare.net/KaiWaehner/eventdriven-microservices-with-apache-kafka-kafka-streams-and-ksql)
72 | * [https://www.confluent.io/blog/building-a-microservices-ecosystem-with-kafka-streams-and-ksql/](https://www.confluent.io/blog/building-a-microservices-ecosystem-with-kafka-streams-and-ksql/)
73 | * [https://github.com/ewolff/microservice-kafka](https://github.com/ewolff/microservice-kafka)
74 | * [https://www.slideshare.net/wangxia5/netflix-kafka](https://www.slideshare.net/wangxia5/netflix-kafka)
75 | * [https://medium.com/netflix-techblog/kafka-inside-keystone-pipeline-dd5aeabaf6bb](https://medium.com/netflix-techblog/kafka-inside-keystone-pipeline-dd5aeabaf6bb)
76 | * [https://blog.keen.io/architecture-of-giants-data-stacks-at-facebook-netflix-airbnb-and-pinterest-9b7cd881af54](https://blog.keen.io/architecture-of-giants-data-stacks-at-facebook-netflix-airbnb-and-pinterest-9b7cd881af54)
77 | * [https://engineering.linkedin.com/blog/2016/04/kafka-ecosystem-at-linkedin](https://engineering.linkedin.com/blog/2016/04/kafka-ecosystem-at-linkedin)
78 | * [https://engineering.linkedin.com/kafka/running-kafka-scale](https://engineering.linkedin.com/kafka/running-kafka-scale)
79 | * [https://www.thoughtworks.com/radar/techniques/recreating-esb-antipatterns-with-kafka](https://www.thoughtworks.com/radar/techniques/recreating-esb-antipatterns-with-kafka)
80 | * [https://www.slideshare.net/ConfluentInc/common-patterns-of-multi-datacenter-architectures-with-apache-kafka](https://www.slideshare.net/ConfluentInc/common-patterns-of-multi-datacenter-architectures-with-apache-kafka)
81 |
82 | ## Apache Kafka and Blockchain
83 |
84 | * [https://www.linkedin.com/pulse/scaling-blockchains-apache-kafka-alex-miller/](https://www.linkedin.com/pulse/scaling-blockchains-apache-kafka-alex-miller/)
85 | * [https://codeburst.io/the-abcs-of-kafka-in-hyperledger-fabric-81e6dc18da56](https://codeburst.io/the-abcs-of-kafka-in-hyperledger-fabric-81e6dc18da56)
86 | * [https://made2591.github.io/posts/kakfa-and-blockchain](https://made2591.github.io/posts/kakfa-and-blockchain)
87 | * [https://www.kdnuggets.com/2016/07/postgres-kafka-bitcoin-common.html](https://www.kdnuggets.com/2016/07/postgres-kafka-bitcoin-common.html)
88 | * [https://www.linkedin.com/pulse/immutable-append-only-log-blockchain-apache-kafka-rajesh-yogi/](https://www.linkedin.com/pulse/immutable-append-only-log-blockchain-apache-kafka-rajesh-yogi/)
89 | * [https://www.landoop.com/docs/lenses/1.0/lenses/connectors/source/blockchain.html](https://www.landoop.com/docs/lenses/1.0/lenses/connectors/source/blockchain.html)
90 | * [https://github.com/lucrussell/kafka-blockchain](https://github.com/lucrussell/kafka-blockchain)
91 | * [http://kafka-connect-ui.landoop.com/\#/cluster/UAT](http://kafka-connect-ui.landoop.com/#/cluster/UAT)
92 | * [http://hyperledger-fabric.readthedocs.io/en/release/kafka.html](http://hyperledger-fabric.readthedocs.io/en/release/kafka.html)
93 | * [https://docs.google.com/document/d/1vNMaM7XhOlu9tB\_10dKnlrhy5d7b1u8lSY8a-kVjCO4/](https://docs.google.com/document/d/1vNMaM7XhOlu9tB_10dKnlrhy5d7b1u8lSY8a-kVjCO4/)
94 | * [https://symbiont.io/blog/2016/10/18/introducing-symbiont-assembly](https://symbiont.io/blog/2016/10/18/introducing-symbiont-assembly)
95 | * [https://www.reddit.com/r/Bitcoin/comments/53d9cq/what\_advantage\_does\_a\_private\_blockchain\_have/](https://www.reddit.com/r/Bitcoin/comments/53d9cq/what_advantage_does_a_private_blockchain_have/)
96 | * [https://github.com/btccom/btcpool](https://github.com/btccom/btcpool)
97 |
98 |
--------------------------------------------------------------------------------
/kotlin.md:
--------------------------------------------------------------------------------
1 | # Kotlin Programming Language
2 |
3 | ## Introduction
4 |
5 | "Kotlin is a statically typed programming language that runs on the Java virtual machine and also can be compiled to JavaScript source code or use the LLVM compiler infrastructure. Its primary development is from a team of JetBrains programmers based in Saint Petersburg, Russia.While the syntax is not compatible with Java, the JVM implementation of the Kotlin standard library is designed to interoperate with Java code and is reliant on Java code from the existing Java Class Library, such as the collections framework. Kotlin uses aggressive type inference to determine the type of values and expressions for which type has been left unstated. This reduces language verbosity relative to Java, which demands often entirely redundant type specifications prior to version 10.
6 |
7 | As of Android Studio 3.0 \(released in October 2017\), Kotlin is fully supported by Google for use with their Android operating system, and is directly included in the IDE's installation package as an alternative to the standard Java compiler. The Android Kotlin compiler lets the user choose between targeting Java 6, Java 7, or Java 8-compatible bytecode."
8 |
9 | [https://en.wikipedia.org/wiki/Kotlin\_\(programming\_language](https://en.wikipedia.org/wiki/Kotlin_%28programming_language)\)
10 |
11 | ## References
12 |
13 | * [https://kotlinlang.org/](https://kotlinlang.org/)
14 | * [https://kotlin.link/](https://kotlin.link/)
15 | * [https://github.com/KotlinBy/awesome-kotlin](https://github.com/KotlinBy/awesome-kotlin)
16 | * [https://kotlinlang.org/docs/reference/server-overview.html](https://kotlinlang.org/docs/reference/server-overview.html)
17 | * [https://kotlinlang.org/docs/reference/comparison-to-java.html](https://kotlinlang.org/docs/reference/comparison-to-java.html)
18 | * [https://kotlinlang.org/docs/books.html](https://kotlinlang.org/docs/books.html) books
19 | * [https://github.com/KotlinBy/awesome-kotlin](https://github.com/KotlinBy/awesome-kotlin)
20 | * [https://blog.gradle.org/kotlin-scripting-update](https://blog.gradle.org/kotlin-scripting-update)
21 | * [https://codebeat.co/open-source/kotlin](https://codebeat.co/open-source/kotlin) - static code analysis
22 | * [https://spring.io/blog/2017/01/04/introducing-kotlin-support-in-spring-framework-5-0](https://spring.io/blog/2017/01/04/introducing-kotlin-support-in-spring-framework-5-0)
23 | * [https://kotlinlang.org/docs/reference/native-overview.html](https://kotlinlang.org/docs/reference/native-overview.html) kotlin native
24 | * KotlinConf 2017 [https://www.youtube.com/playlist?list=PLQ176FUIyIUY6UK1cgVsbdPYA3X5WLam5](https://www.youtube.com/playlist?list=PLQ176FUIyIUY6UK1cgVsbdPYA3X5WLam5)
25 | * [https://kotlinlang.org/docs/resources.html](https://kotlinlang.org/docs/resources.html)
26 | * [http://www.baeldung.com/junit-5-kotlin](http://www.baeldung.com/junit-5-kotlin)
27 | * [https://geek.justjoin.it/kotlin-coroutine-pewno-kolejny-krok-dla-programisty-rxjava/](https://geek.justjoin.it/kotlin-coroutine-pewno-kolejny-krok-dla-programisty-rxjava/) \(polish\)
28 | * [https://stackoverflow.com/questions/46864623/which-of-coroutines-goroutines-and-kotlin-coroutines-are-faster](https://stackoverflow.com/questions/46864623/which-of-coroutines-goroutines-and-kotlin-coroutines-are-faster)
29 | * [https://www.infoq.com/articles/intro-kotlin-java-developers](https://www.infoq.com/articles/intro-kotlin-java-developers)
30 |
31 | ## Tutorials
32 |
33 | * [https://try.kotlinlang.org/](https://try.kotlinlang.org/)
34 | * [http://www.baeldung.com/spring-boot-kotlin](http://www.baeldung.com/spring-boot-kotlin)
35 | * [https://fabiomsr.github.io/from-java-to-kotlin/](https://fabiomsr.github.io/from-java-to-kotlin/)
36 | * [https://github.com/MindorksOpenSource/from-java-to-kotlin](https://github.com/MindorksOpenSource/from-java-to-kotlin)
37 | * [https://engineering.talkdesk.com/migrating-from-java-to-kotlin-the-easy-way-37b25a379d72](https://engineering.talkdesk.com/migrating-from-java-to-kotlin-the-easy-way-37b25a379d72)
38 | * [https://stackoverflow.com/questions/40499452/how-to-build-google-protocol-buffers-and-kotlin-using-gradle](https://stackoverflow.com/questions/40499452/how-to-build-google-protocol-buffers-and-kotlin-using-gradle)
39 |
40 | ## Samples
41 |
42 | * [https://github.com/ssouris/petclinic-spring5-reactive](https://github.com/ssouris/petclinic-spring5-reactive)
43 | * [https://github.com/spring-petclinic/spring-petclinic-kotlin](https://github.com/spring-petclinic/spring-petclinic-kotlin)
44 | * [https://github.com/FlavioF/kotlin-grpc-sample](https://github.com/FlavioF/kotlin-grpc-sample)
45 | * [https://github.com/kgoralski/kotlin-springboot-template](https://github.com/kgoralski/kotlin-springboot-template)
46 | * [https://github.com/kgoralski/kotlin-reactive-playground](https://github.com/kgoralski/kotlin-reactive-playground)
47 | * [https://github.com/kgoralski/go-kotlin-java-kafka](https://github.com/kgoralski/go-kotlin-java-kafka)
48 |
49 | ## Should you switch from Java to Kotlin?
50 |
51 | ### Pros
52 |
53 | * "Better Java" & "Java after Effective Java"
54 | * Syntax Sugar
55 | * Null safety & Immutability
56 | * Easy to pick up by Java devs
57 | * Spring Framework official support \(and this support is much better than year ago\)
58 | * Google Android Support and Google using it too
59 | * Data classes vs Lombok
60 | * Great IDE support - Intellij can convert Java to Kotlin - but you can use Kotlin with Vim, VSCode and others... but IntelliJ recommended
61 | * "when" pattern matching
62 | * less boilerplate
63 | * Maybe some devs with Kotlin will be better and more modern \(?\) - it would be good to create job ad with Kotlin and check feedback
64 | * Java Interoperability
65 | * Destructuring Declarations
66 | * It is possible to mix Kotlin & Java in same project
67 | * backed by Jetbrains
68 | * Gradle Kotlin Script \(?\)
69 | * Played with it and it is nice, also got some colleagues which are using it at their work and they like it
70 | * Coroutines? [https://kotlinlang.org/docs/reference/coroutines.html](https://kotlinlang.org/docs/reference/coroutines.html)
71 | * Kotlin Native? \(mobile\) [https://kotlinlang.org/docs/reference/native-overview.html](https://kotlinlang.org/docs/reference/native-overview.html)
72 | * Got test libraries like Spek, KotlinTest... but you can use Spock or JUnit too
73 | * it is polish ketchup [https://ketchupy.pl/](https://ketchupy.pl/) ;\)
74 |
75 | ### Cons
76 |
77 | * Most people will stick to Java
78 | * Java development will be slower but it will probably catch Kotlin features later. But switching back to Java will be easy.
79 | * "Better Java" - but still you need to learn it.
80 | * Mindset change \(which is actually a pro to me\) - about null safety and immutability - using Kotlin as java is kinda ugly
81 | * Switching from Kotlin to Java and from Java to Kotlin in multiple project is a little bit annoying
82 | * Less tools? Like static code analysis? Still there are detekt, ktlint and plugin for SonarQube or codebeat.com
83 | * Some compatibility Java problems
84 | * Still it is a some kind of risk and time investment
85 | * A litle bit slower compilation time \(?\)
86 |
87 | ### More opinnions
88 |
89 | * [https://medium.com/@magnus.chatt/why-you-should-totally-switch-to-kotlin-c7bbde9e10d5](https://medium.com/@magnus.chatt/why-you-should-totally-switch-to-kotlin-c7bbde9e10d5)
90 | * [https://hashnode.com/post/why-i-abandoned-java-in-favour-of-kotlin-ciuzhmecf09khdc530m1ghu6d](https://hashnode.com/post/why-i-abandoned-java-in-favour-of-kotlin-ciuzhmecf09khdc530m1ghu6d)
91 | * [http://natpryce.com/articles/000815.html](http://natpryce.com/articles/000815.html)
92 | * [https://medium.com/keepsafe-engineering/kotlin-the-good-the-bad-and-the-ugly-bf5f09b87e6f](https://medium.com/keepsafe-engineering/kotlin-the-good-the-bad-and-the-ugly-bf5f09b87e6f)
93 | * [https://www.quora.com/Would-you-use-Kotlin-to-build-back-end-microservices-Why-or-why-not](https://www.quora.com/Would-you-use-Kotlin-to-build-back-end-microservices-Why-or-why-not)
94 | * [https://hackernoon.com/kotlin-in-production-should-you-stay-or-should-you-go-a3428b44b236](https://hackernoon.com/kotlin-in-production-should-you-stay-or-should-you-go-a3428b44b236)
95 | * [https://medium.com/@Pinterest\_Engineering/the-case-against-kotlin-2c574cb87953](https://medium.com/@Pinterest_Engineering/the-case-against-kotlin-2c574cb87953)
96 | * [https://medium.com/@mumayank/why-you-should-totally-switch-to-kotlin-not-3d20290d18bd](https://medium.com/@mumayank/why-you-should-totally-switch-to-kotlin-not-3d20290d18bd)
97 | * [https://www.reddit.com/r/androiddev/comments/47613n/can\_we\_talk\_about\_the\_downsides\_of\_using\_kotlin/](https://www.reddit.com/r/androiddev/comments/47613n/can_we_talk_about_the_downsides_of_using_kotlin/)
98 | * [https://medium.com/@xzan/the-drawbacks-of-migrating-to-kotlin-51f49a96107a](https://medium.com/@xzan/the-drawbacks-of-migrating-to-kotlin-51f49a96107a)
99 |
100 | Also... new things in Java 10 [https://www.quora.com/What-is-new-in-Java-10/answer/Nick-Maiorano](https://www.quora.com/What-is-new-in-Java-10/answer/Nick-Maiorano)
101 |
102 | ## Comparison to Java Programming Language
103 |
104 | [https://kotlinlang.org/docs/reference/comparison-to-java.html](https://kotlinlang.org/docs/reference/comparison-to-java.html)
105 |
106 | "Some Java issues addressed in Kotlin
107 |
108 | ### Kotlin fixes a series of issues that Java suffers from
109 |
110 | * Null references are controlled by the type system.
111 | * No raw types
112 | * Arrays in Kotlin are invariant
113 | * Kotlin has proper function types, as opposed to Java's SAM-conversions
114 | * Use-site variance without wildcards
115 | * Kotlin does not have checked exceptions
116 |
117 | ### **What Java has that Kotlin does not**
118 |
119 | * Checked exceptions
120 | * Primitive types that are not classes
121 | * Static members
122 | * Non-private fields
123 | * Wildcard-types
124 | * Ternary-operator a ? b : c
125 |
126 | ### What Kotlin has that Java does not
127 |
128 | * Lambda expressions + Inline functions = performant custom control structures
129 | * Extension functions
130 | * Null-safety
131 | * Smart casts
132 | * String templates
133 | * Properties
134 | * Primary constructors
135 | * First-class delegation
136 | * Type inference for variable and property types
137 | * Singletons
138 | * Declaration-site variance & Type projections
139 | * Range expressions
140 | * Operator overloading
141 | * Companion objects
142 | * Data classes
143 | * Separate interfaces for read-only and mutable collections
144 | * Coroutines"
145 |
146 |
--------------------------------------------------------------------------------
/kubernetes.md:
--------------------------------------------------------------------------------
1 | # Kubernetes
2 |
3 | ## Introduction
4 |
5 | * [https://kubernetes.io/](https://kubernetes.io/)
6 | * [https://github.com/ramitsurana/awesome-kubernetes](https://github.com/ramitsurana/awesome-kubernetes)
7 | * [https://aws.amazon.com/eks/](https://aws.amazon.com/eks/)
8 | * [https://cloud.google.com/kubernetes-engine/](https://cloud.google.com/kubernetes-engine/)
9 | * [https://azure.microsoft.com/pl-pl/services/kubernetes-service/](https://azure.microsoft.com/pl-pl/services/kubernetes-service/)
10 | * [https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615)
11 | * The Illustrated Children's Guide to Kubernetes [https://www.youtube.com/watch?v=4ht22ReBjno](https://www.youtube.com/watch?v=4ht22ReBjno)
12 | * [https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)
13 | * [https://kubernetes.io/docs/reference/kubectl/cheatsheet/](https://kubernetes.io/docs/reference/kubectl/cheatsheet/)
14 | * [https://github.com/dennyzhang/cheatsheet-kubernetes-A4](https://github.com/dennyzhang/cheatsheet-kubernetes-A4)
15 | * [https://github.com/ramitsurana/awesome-kubernetes\#books](https://github.com/ramitsurana/awesome-kubernetes#books)
16 | * [https://www.replex.io/blog/the-ultimate-kubernetes-cost-guide-aws-vs-gce-vs-azure-vs-digital-ocean](https://www.replex.io/blog/the-ultimate-kubernetes-cost-guide-aws-vs-gce-vs-azure-vs-digital-ocean)
17 | * [https://divvycloud.com/blog/kubedex-comparison-google-gke-microsoft-aks-amazon-eks/](https://divvycloud.com/blog/kubedex-comparison-google-gke-microsoft-aks-amazon-eks/)
18 | * [https://github.com/ramitsurana/awesome-kubernetes\#useful-article](https://github.com/ramitsurana/awesome-kubernetes#useful-articles)
19 | * [https://github.com/kelseyhightower/kubernetes-the-hard-way](https://github.com/kelseyhightower/kubernetes-the-hard-way)
20 | * [https://kubedex.com/google-gke-vs-microsoft-aks-vs-amazon-eks/](https://kubedex.com/google-gke-vs-microsoft-aks-vs-amazon-eks/)
21 | * [https://github.com/darshanime/notes/blob/master/kubernetes.org](https://github.com/darshanime/notes/blob/master/kubernetes.org)
22 |
23 | ## CNI & Networking
24 |
25 | * [https://chrislovecnm.com/kubernetes/cni/choosing-a-cni-provider/](https://chrislovecnm.com/kubernetes/cni/choosing-a-cni-provider/)
26 | * [https://itnext.io/benchmark-results-of-kubernetes-network-plugins-cni-over-10gbit-s-network-36475925a560](https://itnext.io/benchmark-results-of-kubernetes-network-plugins-cni-over-10gbit-s-network-36475925a560)
27 | * [https://itnext.io/kubernetes-networking-behind-the-scenes-39a1ab1792bb](https://itnext.io/kubernetes-networking-behind-the-scenes-39a1ab1792bb)
28 | * [https://itnext.io/kubernetes-multi-cluster-networking-made-simple-c8f26827813](https://itnext.io/kubernetes-multi-cluster-networking-made-simple-c8f26827813)
29 |
30 | ## AWS EKS
31 |
32 | * [https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)
33 | * [https://aws.amazon.com/eks/faq/](https://aws.amazon.com/eks/faq/)
34 | * [https://eksworkshop.com/introduction/](https://eksworkshop.com/introduction/)
35 | * [https://medium.com/@zhaimo/learning-kubernetes-by-doing-part-1-setting-up-eks-in-aws-50dcf7a76247](https://medium.com/@zhaimo/learning-kubernetes-by-doing-part-1-setting-up-eks-in-aws-50dcf7a76247)
36 | * [https://docs.aws.amazon.com/eks/latest/userguide/eks-ug.pdf](https://docs.aws.amazon.com/eks/latest/userguide/eks-ug.pdf)
37 | * [https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)
38 | * [https://docs.aws.amazon.com/eks/latest/userguide/dashboard-tutorial.html](https://docs.aws.amazon.com/eks/latest/userguide/dashboard-tutorial.html)
39 | * [https://docs.aws.amazon.com/eks/latest/userguide/create-public-private-vpc.html](https://docs.aws.amazon.com/eks/latest/userguide/create-public-private-vpc.html)
40 | * [https://github.com/uswitch/kiam/pull/112](https://github.com/uswitch/kiam/pull/112)
41 | * [https://sourcediving.com/elastic-kubernetes-service-536a9ffe9223](https://sourcediving.com/elastic-kubernetes-service-536a9ffe9223)
42 | * [https://aws.amazon.com/blogs/opensource/eksctl-eks-cluster-one-command/](https://aws.amazon.com/blogs/opensource/eksctl-eks-cluster-one-command/)
43 | * [https://aws.amazon.com/blogs/opensource/category/compute/amazon-elastic-container-service-for-kubernetes/](https://aws.amazon.com/blogs/opensource/category/compute/amazon-elastic-container-service-for-kubernetes/)
44 | * [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)
45 | * [https://www.reddit.com/r/aws/comments/9kbejr/anyone\_using\_eks\_yet\_for\_prod/](https://www.reddit.com/r/aws/comments/9kbejr/anyone_using_eks_yet_for_prod/)
46 | * [https://aws.amazon.com/blogs/opensource/eksctl-eks-cluster-one-command/](https://aws.amazon.com/blogs/opensource/eksctl-eks-cluster-one-command/)
47 | * [https://aws.amazon.com/blogs/opensource/aws-service-operator-kubernetes-available/](https://aws.amazon.com/blogs/opensource/aws-service-operator-kubernetes-available/)
48 | * [https://aws.amazon.com/about-aws/whats-new/2018/10/amazon-eks-enables-support-for-kubernetes-dynamic-admission-cont/](https://aws.amazon.com/about-aws/whats-new/2018/10/amazon-eks-enables-support-for-kubernetes-dynamic-admission-cont/) \(istio stuff\)
49 | * [https://docs.aws.amazon.com/eks/latest/userguide/calico.html](https://docs.aws.amazon.com/eks/latest/userguide/calico.html)
50 | * [https://github.com/awsdocs/amazon-eks-user-guide/blob/master/doc\_source/doc-history.md](https://github.com/awsdocs/amazon-eks-user-guide/blob/master/doc_source/doc-history.md)
51 | * [https://github.com/awslabs/amazon-ecr-credential-helper](https://github.com/awslabs/amazon-ecr-credential-helper#installing)
52 | * [https://blog.giantswarm.io/load-balancer-service-use-cases-on-aws/](https://blog.giantswarm.io/load-balancer-service-use-cases-on-aws/)
53 | * [https://kubernetes.io/docs/concepts/services-networking/service/\#internal-load-balancer](https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer)
54 | * [https://github.com/kubernetes/kubernetes/issues/26670](https://github.com/kubernetes/kubernetes/issues/26670)
55 | * [https://www.weave.works/technologies/kubernetes-on-aws](https://www.weave.works/technologies/kubernetes-on-aws/)
56 | * [https://stripe.com/blog/operating-kubernetes](https://stripe.com/blog/operating-kubernetes)
57 | * [https://eksworkshop.com/introduction/](https://eksworkshop.com/introduction/)
58 | * [https://github.com/aws/containers-roadmap/projects/1](https://github.com/aws/containers-roadmap/projects/1)
59 | * [https://github.com/pahud/eks-alb-ingress](https://github.com/pahud/eks-alb-ingress)
60 | * [https://github.com/awslabs/aws-app-mesh-examples](https://github.com/awslabs/aws-app-mesh-examples)
61 | * [https://www.slideshare.net/AmazonWebServices/building-paas-with-amazon-eks-for-the-largescale-highly-regulated-enterprise-con309r1-aws-reinvent-2018](https://www.slideshare.net/AmazonWebServices/building-paas-with-amazon-eks-for-the-largescale-highly-regulated-enterprise-con309r1-aws-reinvent-2018)
62 | * [https://aws.amazon.com/app-mesh/features/](https://aws.amazon.com/app-mesh/features/)
63 | * [https://aws.amazon.com/blogs/opensource/kubernetes-service-catalog-aws-service-broker-on-eks/](https://aws.amazon.com/blogs/opensource/kubernetes-service-catalog-aws-service-broker-on-eks/)
64 |
65 | ## Ingress
66 |
67 | * [https://github.com/kubernetes/ingress-nginx](https://github.com/kubernetes/ingress-nginx)
68 | * [https://github.com/Kong/kong](https://github.com/Kong/kong) \(nginx\)
69 | * [https://github.com/containous/traefik](https://github.com/containous/traefik)
70 | * [https://github.com/haproxy/haproxy](https://github.com/haproxy/haproxy)
71 | * [https://github.com/appscode/voyager](https://github.com/appscode/voyager) \(haproxy\)
72 | * [https://github.com/heptio/contour](https://github.com/heptio/contour) \(envoy\)
73 | * [https://github.com/datawire/ambassador](https://github.com/datawire/ambassador) \(envoy\) \(with istio [https://www.getambassador.io/user-guide/with-istio/](https://www.getambassador.io/user-guide/with-istio/)\)
74 | * [https://istio.io/docs/tasks/traffic-management/ingress/](https://istio.io/docs/tasks/traffic-management/ingress/) \(envoy\)
75 | * [https://github.com/kubernetes-sigs/aws-alb-ingress-controller](https://github.com/kubernetes-sigs/aws-alb-ingress-controller) \(ALB\)
76 | * [https://github.com/zalando-incubator/kube-ingress-aws-controller](https://github.com/zalando-incubator/kube-ingress-aws-controller)
77 | * [https://kubedex.com/nginx-ingress-vs-kong-vs-traefik-vs-haproxy-vs-voyager-vs-contour-vs-ambassador/](https://kubedex.com/nginx-ingress-vs-kong-vs-traefik-vs-haproxy-vs-voyager-vs-contour-vs-ambassador/)
78 | * [https://www.envoyproxy.io/](https://www.envoyproxy.io/)
79 | * [https://github.com/pahud/amazon-eks-workshop/tree/master/03-creating-services/ingress/traefik-ingress](https://github.com/pahud/amazon-eks-workshop/tree/master/03-creating-services/ingress/traefik-ingress)
80 | * [https://github.com/aws-samples/aws-workshop-for-kubernetes](https://github.com/aws-samples/aws-workshop-for-kubernetes)
81 | * [https://www.slideshare.net/Provectus/dive-into-devops-march-traefik-as-kubernetes-ingress-controller-ihor-borodin](https://www.slideshare.net/Provectus/dive-into-devops-march-traefik-as-kubernetes-ingress-controller-ihor-borodin)
82 | * [https://medium.com/@dmaas/amazon-eks-ingress-guide-8ec2ec940a70](https://medium.com/@dmaas/amazon-eks-ingress-guide-8ec2ec940a70)
83 | * [https://itnext.io/save-on-your-aws-bill-with-kubernetes-ingress-148214a79dcb](https://itnext.io/save-on-your-aws-bill-with-kubernetes-ingress-148214a79dcb)
84 | * Traefik from kubedex.com: "Another consideration is minimizing server reloads because that impacts load balancing quality and existing connections etc. Traefik doesn’t support hitless reloads so you need NGINX or Envoy Proxy for this. For a lot of people this is a big deal." vs from rancher.com: "Traefik has a true zero downtime reload and implements the possibility of defining circuit breakers rules."
85 | * [https://github.com/nginxinc/nginmesh](https://github.com/nginxinc/nginmesh)
86 | * [https://blog.giantswarm.io/load-balancer-service-use-cases-on-aws/](https://blog.giantswarm.io/load-balancer-service-use-cases-on-aws/)
87 | * [https://medium.com/devopslinks/istio-step-by-step-part-01-introduction-to-istio-b9fd0df30a9e](https://medium.com/devopslinks/istio-step-by-step-part-01-introduction-to-istio-b9fd0df30a9e) Istio
88 | * [https://github.com/pahud/eks-alb-ingress](https://github.com/pahud/eks-alb-ingress)
89 |
90 | ## External DNS
91 |
92 | * [https://github.com/kubernetes-incubator/external-dns](https://github.com/kubernetes-incubator/external-dns)
93 | * [https://github.com/helm/charts/tree/master/stable/external-dns](https://github.com/helm/charts/tree/master/stable/external-dns)
94 | * [https://github.com/kubernetes-incubator/external-dns/blob/master/docs/tutorials/nginx-ingress.md](https://github.com/kubernetes-incubator/external-dns/blob/master/docs/tutorials/nginx-ingress.md)
95 | * [https://banzaicloud.com/blog/k8s-external-dns-route53/](https://banzaicloud.com/blog/k8s-external-dns-route53/)
96 | * [https://ryaneschinger.com/blog/automatic-dns-kubernetes-ingresses-externaldns/](https://ryaneschinger.com/blog/automatic-dns-kubernetes-ingresses-externaldns/)
97 | * [https://medium.com/@russell.whelan/traefik-and-external-dns-naming-magic-b4d6a01d3634](https://medium.com/@russell.whelan/traefik-and-external-dns-naming-magic-b4d6a01d3634)
98 | * [https://github.com/kubernetes-incubator/external-dns/blob/master/docs/tutorials/istio.md](https://github.com/kubernetes-incubator/external-dns/blob/master/docs/tutorials/istio.md)
99 | * [https://appscode.com/products/voyager/8.0.1/guides/ingress/dns/external-dns/](https://appscode.com/products/voyager/8.0.1/guides/ingress/dns/external-dns/)
100 | * [https://stackoverflow.com/questions/50251672/how-to-setup-up-dns-and-ingress-controllers-for-a-public-facing-web-app](https://stackoverflow.com/questions/50251672/how-to-setup-up-dns-and-ingress-controllers-for-a-public-facing-web-app)
101 | * [https://github.com/kubernetes-incubator/external-dns/issues/413](https://github.com/kubernetes-incubator/external-dns/issues/413)
102 |
103 | Ingress with traefik
104 |
105 | ```yaml
106 | apiVersion: extensions/v1beta1
107 | kind: Ingress
108 | metadata:
109 | name: test-wordpress
110 | annotations:
111 | kubernetes.io/ingress.class: traefik
112 | external-dns.alpha.kubernetes.io/target: mytraefikservice.mydomain.com
113 | spec:
114 | rules:
115 | - host: test.mydomain.com
116 | http:
117 | paths:
118 | - path: /
119 | backend:
120 | serviceName: test-wordpress
121 | servicePort: 80
122 | ```
123 |
124 | ## AWS/GCP IAM with Kubernetes
125 |
126 | * [https://github.com/uswitch/kiam](https://github.com/uswitch/kiam)
127 | * [https://github.com/jtblin/kube2iam](https://github.com/jtblin/kube2iam)
128 | * [https://github.com/ash2k/iam4kube](https://github.com/ash2k/iam4kube)
129 | * [https://github.com/mikkeloscar/kube-aws-iam-controller](https://github.com/mikkeloscar/kube-aws-iam-controller)
130 | * [https://docs.google.com/document/d/1rn-v2TNH9k4Oz-VuaueP77ANE5p-5Ua89obK2JaArfg/edit?usp=sharing](https://docs.google.com/document/d/1rn-v2TNH9k4Oz-VuaueP77ANE5p-5Ua89obK2JaArfg/edit?usp=sharing)
131 | * [https://github.com/kernelpayments/kube-google-iam](https://github.com/kernelpayments/kube-google-iam)
132 | * [https://github.com/istio/istio/issues/9297](https://github.com/istio/istio/issues/9297)
133 |
134 | ## Service Mesh
135 |
136 | * [https://istio.io/docs/concepts/what-is-istio/](https://istio.io/docs/concepts/what-is-istio/)
137 | * [https://kubernetes.io/blog/2017/05/managing-microservices-with-istio-service-mesh/](https://kubernetes.io/blog/2017/05/managing-microservices-with-istio-service-mesh/)
138 | * [https://www.hashicorp.com/blog/consul-1-2-service-mesh](https://www.hashicorp.com/blog/consul-1-2-service-mesh)
139 | * [https://linkerd.io/1/getting-started/k8s/](https://linkerd.io/1/getting-started/k8s/)
140 | * [https://thenewstack.io/which-service-mesh-should-i-use/](https://thenewstack.io/which-service-mesh-should-i-use/)
141 | * [https://medium.com/@jeffzzq/how-to-integrate-an-aws-lambda-function-into-your-kubernetes-service-mesh-5d665f351675](https://medium.com/@jeffzzq/how-to-integrate-an-aws-lambda-function-into-your-kubernetes-service-mesh-5d665f351675)
142 |
143 | ## Helm
144 |
145 | * [https://helm.sh/](https://helm.sh/)
146 | * [https://www.digitalocean.com/community/tutorials/how-to-install-software-on-kubernetes-clusters-with-the-helm-package-manager](https://www.digitalocean.com/community/tutorials/how-to-install-software-on-kubernetes-clusters-with-the-helm-package-manager)
147 | * [https://rancher.com/docs/rancher/v2.x/en/installation/ha/helm-init/](https://rancher.com/docs/rancher/v2.x/en/installation/ha/helm-init/)
148 | * [https://github.com/helm/charts](https://github.com/helm/charts)
149 | * [https://www.terraform.io/docs/providers/helm/index.html](https://www.terraform.io/docs/providers/helm/index.html)
150 | * [https://github.com/roboll/helmfile](https://github.com/roboll/helmfile)
151 | * [https://github.com/Praqma/helmsman](https://github.com/Praqma/helmsman)
152 |
153 | ## Security
154 |
155 | * [https://kubernetes.io/blog/2018/07/18/11-ways-not-to-get-hacked/](https://kubernetes.io/blog/2018/07/18/11-ways-not-to-get-hacked/)
156 | * [https://github.com/kubernetes-sigs/aws-iam-authenticator](https://github.com/kubernetes-sigs/aws-iam-authenticator)
157 | * [https://kubernetes.io/docs/reference/access-authn-authz/rbac/](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)
158 | * [https://github.com/freach/kubernetes-security-best-practice](https://github.com/freach/kubernetes-security-best-practice)
159 | * [https://kubernetes.io/docs/tasks/administer-cluster/securing-a-cluster/](https://kubernetes.io/docs/tasks/administer-cluster/securing-a-cluster/)
160 | * [https://engineering.bitnami.com/articles/sealed-secrets.html](https://engineering.bitnami.com/articles/sealed-secrets.html)
161 | * [https://github.com/bitnami-labs/sealed-secrets](https://github.com/bitnami-labs/sealed-secrets)
162 | * [https://www.slideshare.net/sebastiengoasguen/kubernetes-sealed-secrets](https://www.slideshare.net/sebastiengoasguen/kubernetes-sealed-secrets)
163 | * [https://medium.com/@gmaliar/dynamic-secrets-on-kubernetes-pods-using-vault-35d9094d169](https://medium.com/@gmaliar/dynamic-secrets-on-kubernetes-pods-using-vault-35d9094d169)
164 | * [https://github.com/Boostport/kubernetes-vault](https://github.com/Boostport/kubernetes-vault)
165 | * [https://coreos.com/blog/introducing-vault-operator-project](https://coreos.com/blog/introducing-vault-operator-project)
166 | * [https://medium.com/containerum/top-security-tips-for-your-kubernetes-cluster-9b23a4e95111](https://medium.com/containerum/top-security-tips-for-your-kubernetes-cluster-9b23a4e95111)
167 | * [https://neuvector.com/container-security/kubernetes-security-guide/](https://neuvector.com/container-security/kubernetes-security-guide/)
168 |
169 | ## Chaos Engineering & Kubernetes
170 |
171 | * [https://kubernetes.io/docs/tasks/administer-cluster/securing-a-cluster/](https://kubernetes.io/docs/tasks/administer-cluster/securing-a-cluster/)
172 | * [https://thenewstack.io/how-chaos-engineering-can-drive-kubernetes-reliability/](https://thenewstack.io/how-chaos-engineering-can-drive-kubernetes-reliability/)
173 | * [https://learnk8s.io/blog/kubernetes-chaos-engineering-lessons-learned](https://learnk8s.io/blog/kubernetes-chaos-engineering-lessons-learned)
174 | * [https://github.com/asobti/kube-monkey](https://github.com/asobti/kube-monkey)
175 | * [https://github.com/bloomberg/powerfulseal](https://github.com/bloomberg/powerfulseal)
176 |
177 | ## Serverless & Kubernetes
178 |
179 | * [https://github.com/knative/](https://github.com/knative/)
180 | * [https://cloud.google.com/knative/](https://cloud.google.com/knative/)
181 | * [https://github.com/kubeless/kubeless](https://github.com/kubeless/kubeless)
182 | * [https://fission.io/](https://fission.io/)
183 | * [https://thenewstack.io/the-future-of-kubernetes-is-serverless/](https://thenewstack.io/the-future-of-kubernetes-is-serverless/)
184 | * [https://thenewstack.io/why-serverless-vs-kubernetes-isnt-a-real-debate/](https://thenewstack.io/why-serverless-vs-kubernetes-isnt-a-real-debate/)
185 | * [https://dzone.com/articles/when-to-use-serverless-when-to-use-kubernetes](https://dzone.com/articles/when-to-use-serverless-when-to-use-kubernetes)
186 | * [https://medium.com/coryodaniel/from-erverless-to-elixir-48752db4d7bc](https://medium.com/coryodaniel/from-erverless-to-elixir-48752db4d7bc)
187 |
188 | ## Misc \(Tools, CI/CD, ML, CD/CI, Metrics\)
189 |
190 | * [https://kubernetes.io/docs/reference/tools/](https://kubernetes.io/docs/reference/tools/)
191 | * [https://github.com/ahmetb/kubectx](https://github.com/ahmetb/kubectx)
192 | * [https://github.com/txn2/kubefwd](https://github.com/txn2/kubefwd)
193 | * [https://about.gitlab.com/solutions/kubernetes/](https://about.gitlab.com/solutions/kubernetes/)
194 | * [https://www.spinnaker.io/](https://www.spinnaker.io/)
195 | * [https://www.kubeflow.org/](https://www.kubeflow.org/)
196 | * [https://opencensus.io/](https://opencensus.io/)
197 | * [https://www.pulumi.com/](https://www.pulumi.com/)
198 | * [https://kubernetes.io/docs/tasks/debug-application-cluster/resource-usage-monitoring/](https://kubernetes.io/docs/tasks/debug-application-cluster/resource-usage-monitoring/)
199 | * [https://itnext.io/kubernetes-monitoring-with-prometheus-in-15-minutes-8e54d1de2e1](https://itnext.io/kubernetes-monitoring-with-prometheus-in-15-minutes-8e54d1de2e13)
200 | * [https://www.abhishek-tiwari.com/10-open-source-tools-for-highly-effective-kubernetes-sre-and-ops-teams/](https://www.abhishek-tiwari.com/10-open-source-tools-for-highly-effective-kubernetes-sre-and-ops-teams/)
201 | * [https://logz.io/blog/kubernetes-monitoring/](https://logz.io/blog/kubernetes-monitoring/)
202 | * [https://thenewstack.io/5-tools-monitoring-kubernetes-scale-production/](https://thenewstack.io/5-tools-monitoring-kubernetes-scale-production/)
203 | * [https://medium.com/containerum/4-tools-to-monitor-your-kubernetes-cluster-efficiently-ceaf62818eea](https://medium.com/containerum/4-tools-to-monitor-your-kubernetes-cluster-efficiently-ceaf62818eea)
204 | * [https://www.weave.works/technologies/monitoring-kubernetes-with-prometheus/](https://www.weave.works/technologies/monitoring-kubernetes-with-prometheus/)
205 | * [https://github.com/XiaoMi/naftis](https://github.com/XiaoMi/naftis)
206 |
207 | ## Multi-cloud
208 |
209 | * [https://banzaicloud.com/blog/multi-cloud-k8s/](https://banzaicloud.com/blog/multi-cloud-k8s/)
210 | * [https://kubernetes.io/docs/setup/turnkey/stackpoint/](https://kubernetes.io/docs/setup/turnkey/stackpoint/)
211 | * [https://kubernetes.io/docs/concepts/cluster-administration/federation/](https://kubernetes.io/docs/concepts/cluster-administration/federation/)
212 | * [https://dzone.com/articles/best-practices-for-multi-cloud-kubernetes](https://dzone.com/articles/best-practices-for-multi-cloud-kubernetes)
213 | * [https://cloudify.co/webinars/multi-cloud-orchestration-kubernetes](https://cloudify.co/webinars/multi-cloud-orchestration-kubernetes)
214 | * [https://containership.io/](https://containership.io/)
215 | * [http://superuser.openstack.org/articles/how-to-multi-cloud-kubernetes/](http://superuser.openstack.org/articles/how-to-multi-cloud-kubernetes/)
216 | * [https://www.tripwire.com/state-of-security/security-data-protection/cloud/multi-cloud-security-best-practices-guide/](https://www.tripwire.com/state-of-security/security-data-protection/cloud/multi-cloud-security-best-practices-guide/)
217 |
218 | ## PREEMPTIBLE & SPOT Instances
219 |
220 | * [https://cloud.google.com/preemptible-vms/](https://cloud.google.com/preemptible-vms/)
221 | * [https://aws.amazon.com/ec2/spot/](https://aws.amazon.com/ec2/spot/)
222 |
223 | ## RBAC Sample
224 |
225 | ```text
226 | # Allows scaling deployments or stateful sets up/down
227 | # Generally bound at the namespace level to allow scaling only in that namespace
228 | kind: ClusterRole
229 | apiVersion: rbac.authorization.k8s.io/v1
230 | metadata:
231 | name: namespace-scale
232 | rules:
233 | - apiGroups:
234 | - '' # core group
235 | resources:
236 | - deployments/scale
237 | - statefulsets/scale
238 | verbs:
239 | - create
240 | ---
241 | ```
242 |
243 | ##
244 |
245 |
--------------------------------------------------------------------------------
/performance-engineering.md:
--------------------------------------------------------------------------------
1 | # Performance Engineering
2 |
3 | "**Performance engineering** encompasses the techniques applied during a [systems development life cycle](https://en.m.wikipedia.org/wiki/Systems_development_life_cycle) to ensure the [non-functional requirements](https://en.m.wikipedia.org/wiki/Non-functional_requirement) for performance \(such as [throughput](https://en.m.wikipedia.org/wiki/Throughput), [latency](https://en.m.wikipedia.org/wiki/Latency_%28engineering%29), or [memory](https://en.m.wikipedia.org/wiki/Computer_memory) usage\) will be met. It may be alternatively referred to as **systems performance engineering** within [systems engineering](https://en.m.wikipedia.org/wiki/Systems_engineering), and **software performance engineering** or [application performance engineering](https://en.m.wikipedia.org/wiki/Application_performance_engineering) within [software engineering](https://en.m.wikipedia.org/wiki/Software_engineering)." - Wikipedia
4 |
5 | ## Books
6 |
7 | 1. Every Computer Performance Book: How to Avoid and Solve Performance Problems
on The Computers You Work With; [Bob Wescott](https://www.amazon.com/Bob-Wescott/e/B00C7CHP34/ref=dp_byline_cont_book_1)
8 | 2. The Practical Performance Analyst**;** [Neil Gunther](https://www.amazon.co.uk/s/ref=dp_byline_sr_book_1?ie=UTF8&field-author=Neil+Gunther&text=Neil+Gunther&sort=relevancerank&search-alias=books-uk)
9 | 3. Systems Performance: Enterprise and the Cloud; [Gregg](https://www.amazon.com/Brendan-Gregg/e/B004GG0SEW)
10 | 4. BPF Performance Tools; [Gregg](https://www.amazon.com/Brendan-Gregg/e/B004GG0SEW)
11 | 5. Performance Solutions: A Practical Guide to Creating Responsive, Scalable Software**;** [Connie U. Smith](https://www.amazon.com/Connie-U-Smith/e/B001IQXC9Q/ref=dp_byline_cont_book_1), [Lloyd G. Williams](https://www.amazon.com/s/ref=dp_byline_sr_book_2?ie=UTF8&field-author=Lloyd+G.+Williams&text=Lloyd+G.+Williams&sort=relevancerank&search-alias=books)
12 | 6. The Art of Capacity Planning: Scaling Web Resources; John Allspaw
13 | 7. Java Performance - The Definitive Guide; [Scott Oaks](https://www.amazon.com/Scott-Oaks/e/B000APH2E2)
14 | 8. Optimizing Java: Practical Techniques for Improving JVM Application Performance; [Benjamin J Evans](https://www.amazon.com/Benjamin-J-Evans/e/B07DGL1TM4/ref=dp_byline_cont_book_1) , [James Gough](https://www.amazon.com/s/ref=dp_byline_sr_book_2?ie=UTF8&field-author=James+Gough&text=James+Gough&sort=relevancerank&search-alias=books), [Chris Newland](https://www.amazon.com/Chris-Newland/e/B07L4YL11R/ref=dp_byline_cont_book_3)
15 | 9. High Performance Browser Networking: What every web developer should know about networking and web performance; [Ilya Grigorik](https://www.amazon.com/Ilya-Grigorik/e/B00CNKCS1E/ref=dp_byline_cont_ebooks_1)
16 | 10. High-Performance Java Persistence; [Vlad Mihalcea](https://www.amazon.com/Vlad-Mihalcea/e/B01N8PGJ7E/ref=dp_byline_cont_book_1)
17 | 11. [Go-Perf Book,](https://github.com/dgryski/go-perfbook) Thoughts on Go performance optimization, [Damian Gryski](https://twitter.com/dgryski)
18 |
19 | ## Blogs
20 |
21 | 1. [http://www.brendangregg.com/blog/](http://www.brendangregg.com/blog/)
22 | 2. [https://alexanderpodelko.com/blog/](https://alexanderpodelko.com/blog/)
23 | 3. [https://www.codeblueprint.co.uk/](https://www.codeblueprint.co.uk/)
24 | 4. [https://thomasdullien.github.io/about/\#blogs](https://thomasdullien.github.io/about/#blogs)
25 | 5. [http://perfsherpa.blogspot.com/](http://perfsherpa.blogspot.com/?m=1)
26 | 6. [https://facebookmicrosites.github.io/bpf/blog/](https://facebookmicrosites.github.io/bpf/blog/)
27 | 7. [https://www.igvita.com/](https://www.igvita.com/)
28 | 8. [https://travisdowns.github.io/](https://travisdowns.github.io/)
29 | 9. [https://pdziepak.github.io/](https://pdziepak.github.io/)
30 | 10. [https://branchfree.org/](https://branchfree.org/)
31 | 11. [https://lemire.me/blog/](https://lemire.me/blog/)
32 | 12. [https://mr.gy/blog/](https://mr.gy/blog/)
33 | 13. [https://blog.stgolabs.net/search/label/performance](https://blog.stgolabs.net/search/label/performance)
34 | 14. [https://mechanical-sympathy.blogspot.com/](https://mechanical-sympathy.blogspot.com/)
35 | 15. [https://easyperf.net/notes/](https://easyperf.net/notes/)
36 |
37 | ## Twitter
38 |
39 | 1. [https://twitter.com/brendangregg](https://twitter.com/brendangregg)
40 | 2. [https://twitter.com/mjpt777](https://twitter.com/mjpt777)
41 | 3. [https://twitter.com/matt\_dz](https://twitter.com/matt_dz)
42 | 4. [https://twitter.com/dendibakh](https://twitter.com/dendibakh)
43 | 5. [https://twitter.com/trav\_downs](https://twitter.com/trav_downs)
44 | 6. [https://twitter.com/PawelDziepak](https://twitter.com/PawelDziepak)
45 | 7. [https://twitter.com/halvarflake](https://twitter.com/halvarflake)
46 | 8. [https://twitter.com/rygorous](https://twitter.com/rygorous)
47 | 9. [https://twitter.com/DrQz](https://twitter.com/DrQz)
48 | 10. [https://twitter.com/geofflangdale](https://twitter.com/geofflangdale)
49 | 11. [https://twitter.com/lemire](https://twitter.com/lemire)
50 | 12. [https://twitter.com/tuxology](https://twitter.com/tuxology)
51 | 13. [https://twitter.com/giltene](https://twitter.com/giltene)
52 | 14. [https://twitter.com/kwalfridsson](https://twitter.com/kwalfridsson)
53 | 15. [https://twitter.com/matthewwarren](https://twitter.com/matthewwarren)
54 | 16. [https://twitter.com/perfsherpa](https://twitter.com/perfsherpa)
55 | 17. [https://twitter.com/tkadlec](https://twitter.com/tkadlec)
56 | 18. [https://twitter.com/patmeenan](https://twitter.com/patmeenan)
57 | 19. [https://twitter.com/yoavweiss](https://twitter.com/yoavweiss)
58 | 20. [https://twitter.com/MarkZeman](https://twitter.com/MarkZeman)
59 | 21. [https://twitter.com/apodelko](https://twitter.com/apodelko)
60 | 22. [https://twitter.com/JVMPerformance](https://twitter.com/JVMPerformance)
61 | 23. [https://twitter.com/PerfBytes](https://twitter.com/PerfBytes)
62 | 24. [https://twitter.com/go\_perf](https://twitter.com/go_perf)
63 | 25. [https://twitter.com/fast\_code\_r\_us](https://twitter.com/fast_code_r_us)
64 |
65 | ## Links
66 |
67 | ### Aggregators
68 |
69 | 1. [https://github.com/meteorfox/performance-engineering](https://github.com/meteorfox/performance-engineering)
70 | 2. [https://github.com/mfleming/performance-resources/](https://github.com/mfleming/performance-resources/)
71 | 3. [https://github.com/andriisoldatenko/awesome-performance-testing](https://github.com/andriisoldatenko/awesome-performance-testing)
72 |
73 | ### Talks
74 |
75 | 1. [code::dive conference 2014 - Scott Meyers: Cpu Caches and Why You Care](https://www.youtube.com/watch?v=WDIkqP4JbkE)
76 | 2. [Performance Matters](https://youtu.be/r-TLSBdHe1A), Emery Berger
77 | 3. [Latency SLOs Done Right](https://www.usenix.org/conference/srecon19asia/presentation/schlossnagle-latency), Theo Schlossnagle
78 |
79 | ### Courses
80 |
81 | 1. [https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-172-performance-engineering-of-software-systems-fall-2018/](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-172-performance-engineering-of-software-systems-fall-2018/)
82 | 2. [http://www.perfeng.com/classic-site/seminars.htm](http://www.perfeng.com/classic-site/seminars.htm)
83 |
84 | ### Linux
85 |
86 | 1. [http://www.brendangregg.com/blog/2020-03-08/lisa2019-linux-systems-performance.html](http://www.brendangregg.com/blog/2020-03-08/lisa2019-linux-systems-performance.html)
87 | 2. [http://www.brendangregg.com/linuxperf.html](http://www.brendangregg.com/linuxperf.html)
88 | 3. [http://www.brendangregg.com/blog/2019-01-01/learn-ebpf-tracing.html](http://www.brendangregg.com/blog/2019-01-01/learn-ebpf-tracing.html)
89 | 4. [http://www.brendangregg.com/blog/2019-07-15/bpf-performance-tools-book.html](http://www.brendangregg.com/blog/2019-07-15/bpf-performance-tools-book.html)
90 | 5. [https://github.com/leandromoreira/linux-network-performance-parameters](https://github.com/leandromoreira/linux-network-performance-parameters)
91 | 6. [https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data/](https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data/)
92 |
93 | ### Websites
94 |
95 | 1. [http://www.spe-ed.com/classic-site/](http://www.spe-ed.com/classic-site/)
96 | 2. [https://sites.google.com/site/swperfengg/](https://sites.google.com/site/swperfengg/)
97 |
98 | ### Various
99 |
100 | 1. [https://en.m.wikipedia.org/wiki/Performance\_engineering](https://en.m.wikipedia.org/wiki/Performance_engineering)
101 | 2. [https://www.alexanderpodelko.com/PerfDesign.html](https://www.alexanderpodelko.com/PerfDesign.html)
102 | 3. [https://developer.akamai.com/blog/2017/01/11/skills-performance-engineers](https://developer.akamai.com/blog/2017/01/11/skills-performance-engineers)
103 | 4. [https://stackify.com/performance-engineering/](https://stackify.com/performance-engineering/)
104 | 5. [https://www.dynatrace.com/news/blog/trades-of-a-performance-engineer-in-2020/](https://www.dynatrace.com/news/blog/trades-of-a-performance-engineer-in-2020/)
105 | 6. [https://opensource.com/article/19/5/life-performance-engineer](https://opensource.com/article/19/5/life-performance-engineer)
106 | 7. [https://developers.google.com/web/fundamentals/performance/why-performance-matters](https://developers.google.com/web/fundamentals/performance/why-performance-matters)
107 | 8. [https://techbeacon.com/app-dev-testing/30-top-performance-engineering-leaders-follow-twitter](https://techbeacon.com/app-dev-testing/30-top-performance-engineering-leaders-follow-twitter)
108 | 9. [https://tangowhisky37.github.io/PracticalPerformanceAnalyst/2017/12/25/Six-Reasons-Why-You-Want-To-Be-A-Systems-Performance-Engineer/](https://tangowhisky37.github.io/PracticalPerformanceAnalyst/2017/12/25/Six-Reasons-Why-You-Want-To-Be-A-Systems-Performance-Engineer/)
109 | 10. [https://www.keycdn.com/blog/https-performance-overhead](https://www.keycdn.com/blog/https-performance-overhead)
110 | 11. [https://techbeacon.com/app-dev-testing/5-ways-learn-performance-engineering-skills](https://techbeacon.com/app-dev-testing/5-ways-learn-performance-engineering-skills)
111 | 12. [https://dzone.com/articles/skills-required-to-be-a-perfect-performance-engine](https://dzone.com/articles/skills-required-to-be-a-perfect-performance-engine)
112 | 13. [https://cloud.google.com/appengine/docs/standard/java/microservice-performance](https://cloud.google.com/appengine/docs/standard/java/microservice-performance)
113 | 14. [https://www.researchgate.net/publication/313220433\_Performance\_Engineering\_for\_Microservices\_Research\_Challenges\_and\_Directions](https://www.researchgate.net/publication/313220433_Performance_Engineering_for_Microservices_Research_Challenges_and_Directions)
114 | 15. [https://www.hostingmanual.net/3-seconds-how-website-speed-impacts-visitors-sales/](https://www.hostingmanual.net/3-seconds-how-website-speed-impacts-visitors-sales/)
115 | 16. [http://normanmaurer.me/blog/2013/11/09/The-hidden-performance-costs-of-instantiating-Throwables/](http://normanmaurer.me/blog/2013/11/09/The-hidden-performance-costs-of-instantiating-Throwables/)
116 | 17. [https://pathtoperf.com/](https://pathtoperf.com/)
117 | 18. On the Impact of Memory Allocation on High-Performance Query Processing [https://arxiv.org/abs/1905.01135](https://arxiv.org/abs/1905.01135)
118 | 19. I/O Is Faster Than the CPU – Let’s Partition Resources and Eliminate \(Most\) OS Abstractions [https://penberg.org/parakernel-hotos19.pdf](https://penberg.org/parakernel-hotos19.pdf)
119 | 20. What Every Programmer Should Know About Memory [https://www.akkadia.org/drepper/cpumemory.pdf](https://www.akkadia.org/drepper/cpumemory.pdf)
120 | 21. [https://www.nginx.com/blog/performance-tuning-tips-tricks/](https://www.nginx.com/blog/performance-tuning-tips-tricks/)
121 | 22. [https://blog.cloudflare.com/the-problem-with-event-loops/](https://blog.cloudflare.com/the-problem-with-event-loops/)
122 | 23. [https://www.datadoghq.com/blog/network-performance-monitoring/](https://www.datadoghq.com/blog/network-performance-monitoring/)
123 | 24. [https://easyperf.net/blog/2020/04/01/HW-SW-rules-of-thumb](https://easyperf.net/blog/2020/04/01/HW-SW-rules-of-thumb)
124 | 25. [https://youtu.be/Ho3bCIJcMcc](https://youtu.be/Ho3bCIJcMcc) - Performance Analysis & Tuning on Modern CPU - Denis Bakhvalov.
125 |
126 |
127 |
128 |
--------------------------------------------------------------------------------
/reactive.md:
--------------------------------------------------------------------------------
1 | # Reactive Programming
2 |
3 | ## Introduction
4 |
5 | [http://reactivex.io/](http://reactivex.io/)
6 |
7 | [https://www.reactivemanifesto.org/](https://www.reactivemanifesto.org/)
8 |
9 | "Reactive programming is programming with asynchronous data streams. Reactive extensions help with async code."
10 |
11 | "Reactive Programming is a style of micro-architecture involving intelligent routing and consumption of events, all combining to change behaviour."
12 |
13 | Best intro [https://gist.github.com/staltz/868e7e9bc2a7b8c1f754](https://gist.github.com/staltz/868e7e9bc2a7b8c1f754)
14 |
15 | Rx marbles for better understanding [http://rxmarbles.com/](http://rxmarbles.com/)
16 |
17 | ## It is nothing new
18 |
19 | "The origins of Reactive Programming can probably be traced to the 1970s or even earlier, so there’s nothing new about the idea, but they are really resonating with something in the modern enterprise. "
20 |
21 | ## Why Now?
22 |
23 | "What is driving the rise of Reactive in Enterprise? Well, it’s not \(all\) just a technology fad — people jumping on the bandwagon with the shiny new toys. The driver is efficient resource utilization, or in other words, spending less money on servers and data centres. The promise of Reactive is that you can do more with less, specifically you can process higher loads with fewer threads. This is where the intersection of Reactive and non-blocking, asynchronous I/O comes to the foreground. For the right problem, the effects are dramatic. For the wrong problem, the effects might go into reverse \(you actually make things worse\). Also remember, even if you pick the right problem, there is no such thing as a free lunch, and Reactive doesn’t solve the problems for you, it just gives you a toolbox that you can use to implement solutions.
24 |
25 | Functional - Avoid intricate stateful programs, using clean input/output functions over observable streams. Less is more - ReactiveX's operators often reduce what was once an elaborate challenge into a few lines of code. Async error handling - Traditional try/catch is powerless for errors in asynchronous computations, but ReactiveX is equipped with proper mechanisms for handling errors. Concurrency made easy - Observables and Schedulers in ReactiveX allow the programmer to abstract away low-level threading, synchronization, and concurrency issues."
26 |
27 | ## Implementations
28 |
29 | [http://reactivex.io/](http://reactivex.io/) [https://github.com/ReactiveX/](https://github.com/ReactiveX/) [http://reactivex.io/languages.html](http://reactivex.io/languages.html)
30 |
31 | Languages
32 |
33 | * Java: RxJava
34 | * JavaScript: RxJS
35 | * C\#: Rx.NET
36 | * C\#\(Unity\): UniRx
37 | * Scala: RxScala
38 | * Clojure: RxClojure
39 | * C++: RxCpp
40 | * Lua: RxLua
41 | * Ruby: Rx.rb
42 | * Python: RxPY
43 | * Go: RxGo
44 | * Groovy: RxGroovy
45 | * JRuby: RxJRuby
46 | * Kotlin: RxKotlin
47 | * Swift: RxSwift
48 | * PHP: RxPHP
49 | * Elixir: reaxive
50 | * Dart: RxDart
51 | * ReactiveX for platforms and frameworks
52 | * RxNetty
53 | * RxAndroid
54 | * RxCocoa
55 | * Spring Project Reactor \(WebFlux\) [https://projectreactor.io/](https://projectreactor.io/)
56 |
57 | ## Use Cases
58 |
59 | From [https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape](https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape) :
60 |
61 | "The hardest question to get an answer to as a newbie seems to be "what is it good for?" Here are some examples from an enterprise setting that illustrate general patterns of use:
62 |
63 | External Service Calls Many backend services these days are REST-ful \(i.e. they operate over HTTP\) so the underlying protocol is fundamentally blocking and synchronous. Not obvious territory for FRP maybe, but actually it’s quite fertile ground because the implementation of such services often involves calling other services, and then yet more services depending on the results from the first calls. With so much IO going on if you were to wait for one call to complete before sending the next request, your poor client would give up in frustration before you managed to assemble a reply. So external service calls, especially complex orchestrations of dependencies between calls, are a good thing to optimize. FRP offers the promise of "composability" of the logic driving those operations, so that it is easier to write for the developer of the calling service.
64 |
65 | Highly Concurrent Message Consumers Message processing, in particular when it is highly concurrent, is a common enterprise use case. Reactive frameworks like to measure micro benchmarks, and brag about how many messages per second you can process in the JVM. The results are truly staggering \(tens of millions of messages per second are easy to achieve\), but possibly somewhat artificial - you wouldn’t be so impressed if they said they were benchmarking a simple "for" loop. However, we should not be too quick to write off such work, and it’s easy to see that when performance matters, all contributions should be gratefully accepted. Reactive patterns fit naturally with message processing \(since an event translates nicely into a message\), so if there is a way to process more messages faster we should pay attention.
66 |
67 | Spreadsheets Perhaps not really an enterprise use case, but one that everyone in the enterprise can easily relate to, and it nicely captures the philosophy of, and difficulty of implementing FRP. If cell B depends on cell A, and cell C depends on both cells A and B, then how do you propagate changes in A, ensuring that C is updated before any change events are sent to B? If you have a truly reactive framework to build on, then the answer is "you don’t care, you just declare the dependencies," and that is really the power of a spreadsheet in a nutshell. It also highlights the difference between FRP and simple event-driven programming — it puts the "intelligent" in "intelligent routing".
68 |
69 | Abstraction Over \(A\)synchronous Processing This is more of an abstract use case, so straying into the territory we should perhaps be avoiding. There is also some \(a lot\) of overlap between this and the more concrete use cases already mentioned, but hopefully it is still worth some discussion. The basic claim is a familiar \(and justifiable\) one, that as long as developers are willing to accept an extra layer of abstraction, they can forget about whether the code they are calling is synchronous or asynchronous. Since it costs precious brain cells to deal with asynchronous programming, there could be some useful ideas there. Reactive Programming is not the only approach to this issue, but some of the implementaters of FRP have thought hard enough about this problem that their tools are useful.
70 |
71 | This Netflix blog has some really useful concrete examples of real-life use cases:Netflix Tech Blog: Functional Reactive in the Netflix API with RxJava "
72 |
73 | From [http://www.introtorx.com/content/v1.0.10621.0/01\_WhyRx.html](http://www.introtorx.com/content/v1.0.10621.0/01_WhyRx.html) :
74 |
75 | * UI events like mouse move, button click
76 | * Domain events like property changed, collection updated, "Order Filled", "Registration accepted" etc.
77 | * Infrastructure events like from file watcher, system and WMI events
78 | * Integration events like a broadcast from a message bus or a push event from WebSockets API or other low latency middleware like Nirvana
79 | * Integration with a CEP engine like StreamInsight or StreamBase.
80 |
81 | ## Tutorials
82 |
83 | * [https://github.com/ReactiveX/RxJava/wiki/How-To-Use-RxJava](https://github.com/ReactiveX/RxJava/wiki/How-To-Use-RxJava)
84 | * [http://rxmarbles.com/](http://rxmarbles.com/)
85 | * [http://reactive.how/](http://reactive.how/)
86 | * RxRuby [https://ieftimov.com/reactive-programming-rxruby](https://ieftimov.com/reactive-programming-rxruby)
87 | * RxRuby [https://github.com/fteem/RxRubyKoans](https://github.com/fteem/RxRubyKoans)
88 | * RxRuby [https://rubyinrails.com/2017/09/16/async-mongo-queries-in-ruby/](https://rubyinrails.com/2017/09/16/async-mongo-queries-in-ruby/)
89 | * RxRuby [https://www.gitbook.com/book/vovayartsev/reactive-rails-app/details](https://www.gitbook.com/book/vovayartsev/reactive-rails-app/details)
90 | * RxJava [https://github.com/Froussios/Intro-To-RxJava](https://github.com/Froussios/Intro-To-RxJava)
91 | * RxJava [http://www.baeldung.com/rxjava-tutorial](http://www.baeldung.com/rxjava-tutorial)
92 | * Project Reactor \(Java\) [http://www.baeldung.com/spring-reactor](http://www.baeldung.com/spring-reactor)
93 | * RxJS [https://github.com/Reactive-Extensions/RxJSKoans](https://github.com/Reactive-Extensions/RxJSKoans)
94 | * RxJS [http://reactivex.io/rxjs/manual/tutorial.html](http://reactivex.io/rxjs/manual/tutorial.html)
95 | * RxJS [https://tech.pic-collage.com/a-gentle-introduction-to-reactive-programming-via-rxjs-52d801228763](https://tech.pic-collage.com/a-gentle-introduction-to-reactive-programming-via-rxjs-52d801228763)
96 | * RxGo [https://github.com/ReactiveX/RxGo](https://github.com/ReactiveX/RxGo) \(not sure if Go needs it \(smile\) \)
97 | * [https://www.coursera.org/course/reactive](https://www.coursera.org/course/reactive)
98 | * [http://reactivex.io/documentation](http://reactivex.io/documentation)
99 | * [http://blog.kontena.io/event-driven-microservices-with-rabbitmq-and-ruby/](http://blog.kontena.io/event-driven-microservices-with-rabbitmq-and-ruby/)
100 | * [http://blog.cloud66.com/supercharge-rails-with-vuejs-and-actioncables/](http://blog.cloud66.com/supercharge-rails-with-vuejs-and-actioncables/)
101 |
102 | ## Samples:
103 |
104 | * [https://github.com/AleksanderBrzozowski/spring-reactive-pet-clinic](https://github.com/AleksanderBrzozowski/spring-reactive-pet-clinic)
105 | * [https://github.com/ssouris/petclinic-spring5-reactive](https://github.com/ssouris/petclinic-spring5-reactive)
106 | * [https://github.com/kgoralski/kotlin-reactive-playground](https://github.com/kgoralski/kotlin-reactive-playground)
107 |
108 | ## Advantages & disadvantages
109 |
110 | Actually it is good for use cases described above.
111 |
112 | "So let’s take a closer look at a few advantages
113 |
114 | * Avoid the dreaded “callback hell”;
115 | * It’s a lot simpler than regular threading;
116 | * Has a standard mechanism for error recovery;
117 | * Pretty straight forward and obvious way to compose asynchronous operations;
118 | * Handling UI interactions/events is insanely easy;
119 | * It offers the same “API” for database access, UI, computation, network access and everything you need it to be;
120 | * It makes a lot easier to do complex threading, synchronising work in parallel and running some code when everything is done;
121 | * Super easy way to talk to the UI thread;
122 | * Makes concurrency almost hassle free;
123 | * As soon as you understand the basics you can learn other operators as you need them, you don’t have to understand everything to start using it;
124 | * Operators bring a lot of well tested code that can help you solve tasks;
125 | * It helps make things more maintainable as you can add and remove blocks of code to a stream as needed;
126 | * Doing things in a more functional way leads to readable declarative code that is easier to understand, test, and debug;
127 | * There are some disadvantages though
128 |
129 | Not everything is good
130 |
131 | * The steep learning curve is not only because of the libraries, but also thinking reactively and using FRP to solve problems.
132 | * It’s easy to not properly handle subscriptions and accidentally leak memory;
133 | * Although being lightweight, RxJava still adds a good amount of methods towards the dex limit \(with over 3500 methods\);"
134 |
135 | [https://medium.com/@cesarmcferreira/why-you-should-be-doing-functional-reactive-programming-858bd9bb8001](https://medium.com/@cesarmcferreira/why-you-should-be-doing-functional-reactive-programming-858bd9bb8001)
136 |
137 | ## References
138 |
139 | * [http://reactivex.io/](http://reactivex.io/)
140 | * [http://reactivex.io/documentation](http://reactivex.io/documentation)
141 | * [https://www.reactivemanifesto.org/](https://www.reactivemanifesto.org/)
142 | * [https://gist.github.com/staltz/868e7e9bc2a7b8c1f754](https://gist.github.com/staltz/868e7e9bc2a7b8c1f754)
143 | * [http://www.introtorx.com/content/v1.0.10621.0/01\_WhyRx.html](http://www.introtorx.com/content/v1.0.10621.0/01_WhyRx.html)
144 | * [https://www.slideshare.net/epoberezkin/wtf-is-reactive-programming-75512905](https://www.slideshare.net/epoberezkin/wtf-is-reactive-programming-75512905)
145 | * [https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0](https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0)
146 | * [https://dzone.com/articles/spring-5-webflux-and-jdbc-to-block-or-not-to-block](https://dzone.com/articles/spring-5-webflux-and-jdbc-to-block-or-not-to-block)
147 | * [https://docs.spring.io/spring-framework/docs/5.0.0.M1/spring-framework-reference/html/web-reactive.html](https://docs.spring.io/spring-framework/docs/5.0.0.M1/spring-framework-reference/html/web-reactive.html)
148 | * [https://spring.io/blog/2016/11/28/going-reactive-with-spring-data](https://spring.io/blog/2016/11/28/going-reactive-with-spring-data)
149 | * [https://kgoralski.github.io/post/rxjava-basics/](https://kgoralski.github.io/post/rxjava-basics/)
150 | * [http://www.vogella.com/tutorials/RxJava/article.html](http://www.vogella.com/tutorials/RxJava/article.html)
151 | * [https://www.future-processing.pl/blog/reactivex-asynchronous-programming-done-right/](https://www.future-processing.pl/blog/reactivex-asynchronous-programming-done-right/)
152 | * [https://github.com/ssouris/petclinic-spring5-reactive](https://github.com/ssouris/petclinic-spring5-reactive)
153 | * [http://www.baeldung.com/vavr](http://www.baeldung.com/vavr)
154 | * [https://www.youtube.com/watch?v=LrPBHADuGuw](https://www.youtube.com/watch?v=LrPBHADuGuw)
155 | * [https://developers.redhat.com/blog/2017/06/30/5-things-to-know-about-reactive-programming/](https://developers.redhat.com/blog/2017/06/30/5-things-to-know-about-reactive-programming/)
156 | * [https://blog.mindorks.com/a-complete-guide-to-learn-rxjava-b55c0cea3631](https://blog.mindorks.com/a-complete-guide-to-learn-rxjava-b55c0cea3631)
157 | * [https://stackify.com/when-to-use-asynchronous-programming/](https://stackify.com/when-to-use-asynchronous-programming/)
158 | * [https://github.com/AleksanderBrzozowski/spring-reactive-pet-clinic](https://github.com/AleksanderBrzozowski/spring-reactive-pet-clinic)
159 | * [https://www.kotlindevelopment.com/kotlin-webflux/](https://www.kotlindevelopment.com/kotlin-webflux/)
160 | * [https://dzone.com/articles/spring-boot-20-webflux-reactive-performance-test](https://dzone.com/articles/spring-boot-20-webflux-reactive-performance-test)
161 | * [https://www.youtube.com/watch?v=LrPBHADuGuw](https://www.youtube.com/watch?v=LrPBHADuGuw)
162 | * [https://www.slideshare.net/brendangregg/rxnetty-vs-tomcat-performance-results](https://www.slideshare.net/brendangregg/rxnetty-vs-tomcat-performance-results)
163 | * [https://dzone.com/articles/spring-boot-20-webflux-reactive-performance-test](https://dzone.com/articles/spring-boot-20-webflux-reactive-performance-test)
164 | * [https://stackify.com/reactive-spring-5/](https://stackify.com/reactive-spring-5/)
165 | * [https://medium.com/@ggonchar/reactive-spring-5-and-application-design-impact-159f79678739](https://medium.com/@ggonchar/reactive-spring-5-and-application-design-impact-159f79678739)
166 | * [https://spring.io/blog/2016/02/09/reactive-spring](https://spring.io/blog/2016/02/09/reactive-spring)
167 | * [https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape](https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape)
168 | * [https://medium.com/@cesarmcferreira/why-you-should-be-doing-functional-reactive-programming-858bd9bb8001](https://medium.com/@cesarmcferreira/why-you-should-be-doing-functional-reactive-programming-858bd9bb8001)
169 | * [https://www.cocoawithlove.com/blog/reactive-programming-what-and-why.html](https://www.cocoawithlove.com/blog/reactive-programming-what-and-why.html)
170 | * [https://medium.com/netflix-techblog/reactive-programming-at-netflix-b944d49874d2](https://medium.com/netflix-techblog/reactive-programming-at-netflix-b944d49874d2)
171 | * [https://github.com/ReactiveX/RxJava/wiki/Additional-Reading](https://github.com/ReactiveX/RxJava/wiki/Additional-Reading)
172 | * [https://vimeo.com/221255968](https://vimeo.com/221255968)
173 | * [https://www.infoq.com/articles/Servlet-and-Reactive-Stacks-Spring-Framework-5](https://www.infoq.com/articles/Servlet-and-Reactive-Stacks-Spring-Framework-5)
174 | * [https://allegro.tech/2014/10/async-rest.html](https://allegro.tech/2014/10/async-rest.html)
175 | * ReactSphere: Reactive programming: lessons learned by Tomasz Nurkiewicz [https://youtu.be/g\_JyHJ20Iog](https://youtu.be/g_JyHJ20Iog)
176 |
177 |
178 |
179 | ## Books
180 |
181 | * [http://introtorx.com/](http://introtorx.com/)
182 | * [http://reactivex.io/tutorials.html\#books](http://reactivex.io/tutorials.html#books)
183 | * Reactive Application Development [https://www.manning.com/books/reactive-application-development](https://www.manning.com/books/reactive-application-development)
184 | * Rx.NET in Action [https://www.manning.com/books/rx-dot-net-in-action](https://www.manning.com/books/rx-dot-net-in-action)
185 | * Reactive Programming with RxJava [http://shop.oreilly.com/product/0636920042228.do](http://shop.oreilly.com/product/0636920042228.do)
186 | * [https://www.gitbook.com/book/talanta/rx-book/details](https://www.gitbook.com/book/talanta/rx-book/details)
187 |
188 | ## About Netty/Webflux \(Java\)
189 |
190 | Spring Webflux enables using Netty with less effort. Not forcing you to use async/rx. The code can looks pretty much the same like Spring MVC. And use Rx when needed. Btw. Spring WebFlux is supported on Netty, Undertow, Tomcat, Jetty, and Servlet 3.1+ containers.
191 |
192 | "Netty is a non-blocking I/O client-server framework for the development of Java network applications such as protocol servers and clients. The asynchronous event-driven network application framework and tools are used to simplify network programming such as TCP and UDP socket servers.
193 |
194 | WebFlux can run on Servlet containers with support for the Servlet 3.1 Non-Blocking IO API as well as on other async runtimes such as Netty and Undertow. Each runtime is adapted to a reactive ServerHttpRequest and ServerHttpResponse exposing the body of the request and response as Flux, rather than InputStream and OutputStream, with reactive backpressure. REST-style JSON and XML serialization and deserialization is supported on top as a Flux, and so is HTML view rendering and Server-Sent Events."
195 |
196 | [http://normanmaurer.me/presentations/2014-netflix-netty/slides.html](http://normanmaurer.me/presentations/2014-netflix-netty/slides.html) - Why Netty?
197 |
198 | [https://www.techempower.com/benchmarks/\#section=data-r15&hw=ph&test=json](https://www.techempower.com/benchmarks/#section=data-r15&hw=ph&test=json)
199 |
200 | [http://normanmaurer.me/blog/2013/11/09/The-hidden-performance-costs-of-instantiating-Throwables/](http://normanmaurer.me/blog/2013/11/09/The-hidden-performance-costs-of-instantiating-Throwables/)
201 |
202 | [https://docs.spring.io/spring/docs/5.0.0.BUILD-SNAPSHOT/spring-framework-reference/html/web-reactive.html](https://docs.spring.io/spring/docs/5.0.0.BUILD-SNAPSHOT/spring-framework-reference/html/web-reactive.html)
203 |
204 | [https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html](https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html)
205 |
206 | [https://www.infoq.com/articles/Servlet-and-Reactive-Stacks-Spring-Framework-5](https://www.infoq.com/articles/Servlet-and-Reactive-Stacks-Spring-Framework-5)
207 |
208 | The code of Webflux is very similar to MVC [https://github.com/kgoralski/kotlin-reactive-playground](https://github.com/kgoralski/kotlin-reactive-playground)
209 |
210 | ## Who is using it?
211 |
212 | Reactive programming with RxJava has enabled Netflix developers to leverage server-side concurrency without the typical thread-safety and synchronization concerns.
213 |
214 |
--------------------------------------------------------------------------------
/scalability.md:
--------------------------------------------------------------------------------
1 | # Scalability
2 |
3 | * [https://github.com/binhnguyennus/awesome-scalability](https://github.com/binhnguyennus/awesome-scalability)
4 | * [https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321](https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321)
5 | * [http://highscalability.com/all-time-favorites/](http://highscalability.com/all-time-favorites/)
6 | * GOTO 2016 • Microservices at Netflix Scale: Principles, Tradeoffs & Lessons Learned • R. Meshenberg [https://www.youtube.com/watch?v=57UK46qfBLY](https://www.youtube.com/watch?v=57UK46qfBLY)
7 | * GOTO 2016 • What I Wish I Had Known Before Scaling Uber to 1000 Services • Matt Ranney [https://www.youtube.com/watch?v=kb-m2fasdDY](https://www.youtube.com/watch?v=kb-m2fasdDY)
8 | * Lessons from the Birth of Microservices at Google [https://www.youtube.com/watch?v=Fz1PoXqxAZc](https://www.youtube.com/watch?v=Fz1PoXqxAZc)
9 | * [http://highscalability.com/blog/2017/12/11/netflix-what-happens-when-you-press-play.html](http://highscalability.com/blog/2017/12/11/netflix-what-happens-when-you-press-play.html)
10 | * [https://www.datanami.com/2018/07/31/inside-fortnites-massive-data-analytics-pipeline/](https://www.datanami.com/2018/07/31/inside-fortnites-massive-data-analytics-pipeline/)
11 | * [https://medium.com/netflix-techblog/scaling-event-sourcing-for-netflix-downloads-episode-1-6bc1595c5595](https://medium.com/netflix-techblog/scaling-event-sourcing-for-netflix-downloads-episode-1-6bc1595c5595)
12 | * [http://highscalability.com/blog/2016/10/12/lessons-learned-from-scaling-uber-to-2000-engineers-1000-ser.html](http://highscalability.com/blog/2016/10/12/lessons-learned-from-scaling-uber-to-2000-engineers-1000-ser.html)
13 | * [http://highscalability.com/blog/2016/6/29/scaling-hotjars-architecture-9-lessons-learned.html](http://highscalability.com/blog/2016/6/29/scaling-hotjars-architecture-9-lessons-learned.html)
14 | * [http://highscalability.com/blog/2013/8/26/reddit-lessons-learned-from-mistakes-made-scaling-to-1-billi.html](http://highscalability.com/blog/2013/8/26/reddit-lessons-learned-from-mistakes-made-scaling-to-1-billi.html)
15 | * [https://www.infoq.com/presentations/scalability-ebay-google-kixeye](https://www.infoq.com/presentations/scalability-ebay-google-kixeye)
16 | * [https://medium.com/@sarahtavel/five-lessons-from-scaling-pinterest-6a699a889b08](https://medium.com/@sarahtavel/five-lessons-from-scaling-pinterest-6a699a889b08)
17 | * Stevey's Google Platforms Rant [https://gist.github.com/chitchcock/1281611](https://gist.github.com/chitchcock/1281611)
18 | * [https://medium.com/@steve.yegge/why-i-left-google-to-join-grab-86dfffc0be84](https://medium.com/@steve.yegge/why-i-left-google-to-join-grab-86dfffc0be84)
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/serverless.md:
--------------------------------------------------------------------------------
1 | # Serverless
2 |
3 | * [https://www.infoq.com/news/2018/07/serverless-patterns-antipatterns](https://www.infoq.com/news/2018/07/serverless-patterns-antipatterns)
4 | * [https://www.youtube.com/watch?v=Xi\_WrinvTnM](https://www.youtube.com/watch?v=Xi_WrinvTnM) AWS re:Invent 2017: Serverless Architectural Patterns and Best Practices \(ARC401\)
5 | * [https://www.jfokus.se/jfokus18/preso/Serverless-Architecture-Patterns-and-Best-Practices.pdf](https://www.jfokus.se/jfokus18/preso/Serverless-Architecture-Patterns-and-Best-Practices.pdf)
6 | * [https://www.slideshare.net/AmazonWebServices/serverless-architectural-patterns-and-best-practices](https://www.slideshare.net/AmazonWebServices/serverless-architectural-patterns-and-best-practices)
7 | * Serverless Computing: One Step Forward, Two Steps Back [https://arxiv.org/abs/1812.03651](https://arxiv.org/abs/1812.03651)
8 | * AWS Lambda — should you have few monolithic functions or many single-purposed functions?[https://hackernoon.com/aws-lambda-should-you-have-few-monolithic-functions-or-many-single-purposed-functions-8c3872d4338f](https://hackernoon.com/aws-lambda-should-you-have-few-monolithic-functions-or-many-single-purposed-functions-8c3872d4338f)
9 | * [https://www.forbes.com/sites/forbesproductgroup/2018/01/25/how-to-avoid-common-emerging-anti-patterns-in-serverless-computing/\#2ae1af085dac](https://www.forbes.com/sites/forbesproductgroup/2018/01/25/how-to-avoid-common-emerging-anti-patterns-in-serverless-computing/#2ae1af085dac)
10 | * [https://www.3pillarglobal.com/insights/silence-lambdas-5-anti-patterns-aws-lambda](https://www.3pillarglobal.com/insights/silence-lambdas-5-anti-patterns-aws-lambda)
11 | * [https://www.slideshare.net/keisuke69/serverless-antipatterns](https://www.slideshare.net/keisuke69/serverless-antipatterns)
12 | * [https://speakerdeck.com/antstanley/serverless-anti-patterns?slide=3](https://speakerdeck.com/antstanley/serverless-anti-patterns?slide=3)
13 | * [https://www.amazon.com/Serverless-Design-Patterns-Best-Practices/dp/178862064X](https://www.amazon.com/Serverless-Design-Patterns-Best-Practices/dp/178862064X)
14 | * [https://www.packtpub.com/application-development/serverless-design-patterns-and-best-practices](https://www.packtpub.com/application-development/serverless-design-patterns-and-best-practices)
15 | * [https://thenewstack.io/serverless-architecture-five-design-patterns/](https://thenewstack.io/serverless-architecture-five-design-patterns/)
16 | * [https://freecontent.manning.com/patterns-for-solving-problems-in-serverless-architectures/](https://freecontent.manning.com/patterns-for-solving-problems-in-serverless-architectures/)
17 | * [https://www.goodreads.com/book/show/29970427-serverless-architectures-on-aws](https://www.goodreads.com/book/show/29970427-serverless-architectures-on-aws)
18 | * [https://docs.aws.amazon.com/lambda/latest/dg/invocation-options.html](https://docs.aws.amazon.com/lambda/latest/dg/invocation-options.html)
19 | * [https://www.amazon.com/Building-Serverless-Architectures-Unleash-applications/dp/1787129195](https://www.amazon.com/Building-Serverless-Architectures-Unleash-applications/dp/1787129195)
20 | * [https://medium.com/@PaulDJohnston/serverless-best-practices-b3c97d551535](https://medium.com/@PaulDJohnston/serverless-best-practices-b3c97d551535)
21 | * [https://aws.amazon.com/blogs/architecture/serverless-architectures-with-aws-lambda-overview-and-best-practices/](https://aws.amazon.com/blogs/architecture/serverless-architectures-with-aws-lambda-overview-and-best-practices/)
22 | * [https://techbeacon.com/essential-guide-serverless-technologies-architectures](https://techbeacon.com/essential-guide-serverless-technologies-architectures)
23 | * [https://www.jfokus.se/jfokus18/preso/Serverless-Architecture-Patterns-and-Best-Practices.pdf](https://www.jfokus.se/jfokus18/preso/Serverless-Architecture-Patterns-and-Best-Practices.pdf)
24 | * [https://thenewstack.io/serverless-architecture-five-design-patterns/](https://thenewstack.io/serverless-architecture-five-design-patterns/)
25 | * [https://www.protego.io/9-serverless-security-best-practices/](https://www.protego.io/9-serverless-security-best-practices/)
26 | * [https://docs.apigee.com/api-baas/get-started/asynchronous-vs-synchronous-calls](https://docs.apigee.com/api-baas/get-started/asynchronous-vs-synchronous-calls)
27 | * [https://www.simform.com/serverless-antipatterns/](https://www.simform.com/serverless-antipatterns/)
28 | * [https://medium.com/@tjholowaychuk/aws-lambda-lifecycle-and-in-memory-caching-c9cd0844e072](https://medium.com/@tjholowaychuk/aws-lambda-lifecycle-and-in-memory-caching-c9cd0844e072)
29 | * [https://www.jfokus.se/jfokus18/preso/Serverless-Architecture-Patterns-and-Best-Practices.pdf](https://www.jfokus.se/jfokus18/preso/Serverless-Architecture-Patterns-and-Best-Practices.pdf)
30 | * [https://github.com/arun-gupta/serverless/blob/master/best-practices.adoc](https://github.com/arun-gupta/serverless/blob/master/best-practices.adoc)
31 | * [https://www.youtube.com/watch?v=kmYMuFrANjw](https://www.youtube.com/watch?v=kmYMuFrANjw)
32 | * [https://serverless.com/blog/dynamodb-backend-crudl-example-using-golang/](https://serverless.com/blog/dynamodb-backend-crudl-example-using-golang/)
33 | * [https://www.slideshare.net/YochayKiriaty/anti-patterns-and-mistakes-using-serverless-serverlessconf-sf-08-2018](https://www.slideshare.net/YochayKiriaty/anti-patterns-and-mistakes-using-serverless-serverlessconf-sf-08-2018)
34 | * [https://www.slideshare.net/kimjclark/where-can-you-use-serverless-how-does-it-relate-to-apis-integration-and-microservices](https://www.slideshare.net/kimjclark/where-can-you-use-serverless-how-does-it-relate-to-apis-integration-and-microservices)
35 | * [https://www.infoq.com/presentations/serverless-patterns-antipatterns](https://www.infoq.com/presentations/serverless-patterns-antipatterns)
36 | * [https://qconnewyork.com/ny2018/ny2018/presentation/serverless-patterns-and-anti-patterns-presentation.html](https://qconnewyork.com/ny2018/ny2018/presentation/serverless-patterns-and-anti-patterns-presentation.html)
37 | * [https://forums.aws.amazon.com/thread.jspa?messageID=708378](https://forums.aws.amazon.com/thread.jspa?messageID=708378)
38 | * [https://medium.com/employbl/tutorial-for-building-a-web-application-with-amazon-s3-lambda-dynamodb-and-api-gateway-6d3ddf77f15a](https://medium.com/employbl/tutorial-for-building-a-web-application-with-amazon-s3-lambda-dynamodb-and-api-gateway-6d3ddf77f15a)
39 | * [https://read.acloud.guru/building-a-serverless-multi-region-active-active-backend-36f28bed4ecf](https://read.acloud.guru/building-a-serverless-multi-region-active-active-backend-36f28bed4ecf)
40 | * [https://www.forbes.com/sites/forbesproductgroup/2018/01/25/how-to-avoid-common-emerging-anti-patterns-in-serverless-computing/\#3f4437a55dac](https://www.forbes.com/sites/forbesproductgroup/2018/01/25/how-to-avoid-common-emerging-anti-patterns-in-serverless-computing/#3f4437a55dac)
41 | * [https://docs.microsoft.com/en-us/dotnet/standard/serverless-architecture/](https://docs.microsoft.com/en-us/dotnet/standard/serverless-architecture/)
42 | * [https://read.acloud.guru/lambda-for-alexa-skills-7-tips-from-the-trenches-684c963e6ad1](https://read.acloud.guru/lambda-for-alexa-skills-7-tips-from-the-trenches-684c963e6ad1)
43 | * [https://leanpub.com/serverless](https://leanpub.com/serverless)
44 | * [https://zef.me/serverless-first-d2117ecc12da](https://zef.me/serverless-first-d2117ecc12da)
45 | * [https://read.acloud.guru/simon-wardley-is-a-big-fan-of-containers-despite-what-you-might-think-18c9f5352147](https://read.acloud.guru/simon-wardley-is-a-big-fan-of-containers-despite-what-you-might-think-18c9f5352147)
46 | * [https://read.acloud.guru/save-time-and-money-with-aws-lambda-using-asynchronous-programming-3548ea65f751](https://read.acloud.guru/save-time-and-money-with-aws-lambda-using-asynchronous-programming-3548ea65f751)
47 |
48 |
--------------------------------------------------------------------------------
/site-reliability-engineering.md:
--------------------------------------------------------------------------------
1 | # Site Reliability Engineering
2 |
3 | **Site Reliability Engineering** \(**SRE**\) "is a discipline that incorporates aspects of software engineering and applies them to IT operations problems. The main goals are to create ultra-scalable and highly reliable software systems. According to Ben Treynor, founder of Google's Site Reliability Team, SRE is "what happens when a software engineer is tasked with what used to be called operations."
4 | [https://en.wikipedia.org/wiki/Site\_Reliability\_Engineering](https://en.wikipedia.org/wiki/Site_Reliability_Engineering)
5 |
6 | "Fundamentally, it's what happens when you ask a software engineer to design an operations function. So SRE is fundamentally doing work that has historically been done by an operations team, but using engineers with software expertise, and banking on the fact that these engineers are inherently both predisposed to, and have the ability to, substitute automation for human labor." - Ben Treynor
7 |
8 | * [https://github.com/dastergon/awesome-sre](https://github.com/dastergon/awesome-sre)
9 | * [https://github.com/binhnguyennus/awesome-scalability](https://github.com/binhnguyennus/awesome-scalability)
10 | * [https://landing.google.com/sre/](https://landing.google.com/sre/)
11 | * [https://landing.google.com/sre/books/](https://landing.google.com/sre/books/)
12 | * [https://landing.google.com/sre/interview/ben-treynor/](https://landing.google.com/sre/interview/ben-treynor/)
13 | * [https://github.com/dastergon/awesome-sre\#books](https://github.com/dastergon/awesome-sre#books)
14 | * [https://medium.com/@jdavidmitchell/principles-of-site-reliability-engineering-at-google-8382b054e498](https://medium.com/@jdavidmitchell/principles-of-site-reliability-engineering-at-google-8382b054e498)
15 | * [https://hackernoon.com/so-you-want-to-be-an-sre-34e832357a8c](https://hackernoon.com/so-you-want-to-be-an-sre-34e832357a8c)
16 | * [https://hackernoon.com/the-must-know-checklist-for-devops-system-reliability-engineers-f74c1cbf259d](https://hackernoon.com/the-must-know-checklist-for-devops-system-reliability-engineers-f74c1cbf259d)
17 | * [https://thenewstack.io/site-reliability-engineering-kind-magic/](https://thenewstack.io/site-reliability-engineering-kind-magic/)
18 | * [https://thenewstack.io/the-new-devops-site-reliability-engineering-comes-of-age/](https://thenewstack.io/the-new-devops-site-reliability-engineering-comes-of-age/)
19 | * [https://cloud.kapostcontent.net/pub/1418185e-b325-49d3-b65c-de338e45cb6f/ebook-10-essential-skills-of-a-site-reliability-engineer-sre.pdf](https://cloud.kapostcontent.net/pub/1418185e-b325-49d3-b65c-de338e45cb6f/ebook-10-essential-skills-of-a-site-reliability-engineer-sre.pdf)
20 | * [https://www.slideshare.net/initcron/devops-skills-survey](https://www.slideshare.net/initcron/devops-skills-survey)
21 | * [https://cloudacademy.com/blog/what-is-the-role-of-a-site-reliability-engineer](https://cloudacademy.com/blog/what-is-the-role-of-a-site-reliability-engineer/)
22 | * AWS re:Invent 2015: DevOps at Amazon: A Look at Our Tools and Processes \(DVO202\) [https://www.youtube.com/watch?v=esEFaY0FDKc](https://www.youtube.com/watch?v=esEFaY0FDKc)
23 | * [https://github.com/dastergon/awesome-chaos-engineering](https://github.com/dastergon/awesome-chaos-engineering)
24 | * [https://blog.packagecloud.io/eng/2016/04/05/the-definitive-guide-to-linux-system-calls/](https://blog.packagecloud.io/eng/2016/04/05/the-definitive-guide-to-linux-system-calls/)
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/software-craftsmanship.md:
--------------------------------------------------------------------------------
1 | # Software Craftsmanship
2 |
3 | * Manifesto [http://manifesto.softwarecraftsmanship.org/](http://manifesto.softwarecraftsmanship.org/)
4 | * Awesome list [https://github.com/benas/awesome-software-craftsmanship](https://github.com/benas/awesome-software-craftsmanship)
5 | * Book [https://www.amazon.com/Software-Craftsman-Professionalism-Pragmatism-Robert/dp/0134052501](https://www.amazon.com/Software-Craftsman-Professionalism-Pragmatism-Robert/dp/0134052501) and reviews [https://www.goodreads.com/book/show/18054154-software-craftsmanship](https://www.goodreads.com/book/show/18054154-software-craftsmanship) and sample [https://www.goodreads.com/book/show/18054154-software-craftsmanship](https://www.goodreads.com/book/show/18054154-software-craftsmanship)
6 | * Presentation [https://www.youtube.com/watch?v=AQlsOPMKgBE](https://www.youtube.com/watch?v=AQlsOPMKgBE)
7 | * Clean code in a nutshell [https://www.planetgeek.ch/wp-content/uploads/2013/06/Clean-Code-V2.2.pdf](https://www.planetgeek.ch/wp-content/uploads/2013/06/Clean-Code-V2.2.pdf)
8 | * Kata exercices [https://github.com/pivotal-legacy/code-katas/blob/master/README.md](https://github.com/pivotal-legacy/code-katas/blob/master/README.md)
9 | * Versus [http://agilemanifesto.org/](http://agilemanifesto.org/)
10 | * Criticism of these all manifestos [https://www.youtube.com/watch?v=neI\_Pj558CY&t](https://www.youtube.com/watch?v=neI_Pj558CY&t)
11 | * Does TDD really lead to good design? [https://codurance.com/2015/05/12/does-tdd-lead-to-good-design/](https://codurance.com/2015/05/12/does-tdd-lead-to-good-design/)
12 | * Clean Architecture: [https://github.com/coi-gov-pl/spring-clean-architecture](https://github.com/coi-gov-pl/spring-clean-architecture) [https://medium.com/@teo2k/go-clean-54c5cd866fe5](https://medium.com/@teo2k/go-clean-54c5cd866fe5) [https://github.com/bxcodec/go-clean-arch](https://github.com/bxcodec/go-clean-arch)
13 | * [https://jvns.ca/blog/senior-engineer/](https://jvns.ca/blog/senior-engineer/)
14 | * [https://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/](https://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/)
15 | * [https://en.wikipedia.org/wiki/Extreme\_programming](https://en.wikipedia.org/wiki/Extreme_programming)
16 | * [http://www.extremeprogramming.org/](http://www.extremeprogramming.org/)
17 | * [https://blog.versionone.com/how-to-become-a-software-craftsman/](https://blog.versionone.com/how-to-become-a-software-craftsman/)
18 |
19 |
--------------------------------------------------------------------------------
/software-security.md:
--------------------------------------------------------------------------------
1 | # Software Security
2 |
3 | #### Books
4 |
5 | 1. The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws; Dafydd Stuttard, Marcus Pinto
6 | 2. The Tangled Web: A Guide to Securing Modern Web Applications
7 | 3. Software Security Vulnerability A Complete Guide; Gerardus Blokdyk
8 | 4. Security Engineering; Ross Anderson
9 | 5. Sekurak: [Bezpieczeństwo aplikacji webowych](https://sklep.sekurak.pl/product/view?id=1)
10 | 6. [https://auth0.com/blog/30-cybersecurity-books-to-deepen-your-knowledge/](https://auth0.com/blog/30-cybersecurity-books-to-deepen-your-knowledge/)
11 | 7. [https://github.com/sbilly/awesome-security\#ebooks](https://github.com/sbilly/awesome-security#ebooks)
12 |
13 | #### Links
14 |
15 | 1. [https://github.com/sbilly/awesome-security](https://github.com/sbilly/awesome-security)
16 | 2. [https://github.com/fabionoth/awesome-cyber-security](https://github.com/fabionoth/awesome-cyber-security)
17 | 3. [https://picoctf.com/](https://picoctf.com/)
18 | 4. [https://class.malware.re/](https://class.malware.re/)
19 | 5. [https://www.coursera.org/learn/software-security](https://www.coursera.org/learn/software-security)
20 | 6. [https://github.com/kmicinski/security-courses](https://github.com/kmicinski/security-courses)
21 | 7. [https://github.com/onlurking/awesome-infosec](https://github.com/onlurking/awesome-infosec)
22 | 8. [https://www.crypto101.io/](https://www.crypto101.io/)
23 | 9. [https://www.cl.cam.ac.uk/~rja14/book.html](https://www.cl.cam.ac.uk/~rja14/book.html)
24 | 10. [https://www.udemy.com/topic/owasp/](https://www.udemy.com/topic/owasp/)
25 | 11. [https://www.cloudflare.com/learning/security/glossary/what-is-zero-trust/](https://www.cloudflare.com/learning/security/glossary/what-is-zero-trust/)
26 | 12. [https://www.hashicorp.com/resources/how-zero-trust-networking](https://www.hashicorp.com/resources/how-zero-trust-networking)
27 | 13. [https://dawidbalut.com/2018/08/18/programming-skills-in-infosec-career/](https://dawidbalut.com/2018/08/18/programming-skills-in-infosec-career/)
28 | 14. [https://portswigger.net/web-security](https://portswigger.net/web-security)
29 | 15. [https://github.com/OWASP/Serverless-Goat](https://github.com/OWASP/Serverless-Goat)
30 | 16. [https://github.com/OWASP/Vulnerable-Web-Application](https://github.com/OWASP/Vulnerable-Web-Application)
31 | 17. [https://www.katacoda.com/sebastienblanc/courses/keycloak](https://www.katacoda.com/sebastienblanc/courses/keycloak)
32 | 18. [https://github.com/thomasdarimont/awesome-keycloak](https://github.com/thomasdarimont/awesome-keycloak)
33 |
34 |
--------------------------------------------------------------------------------