├── .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 | [![Twitter](http://i.imgur.com/tXSoThF.png)](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 | ![](https://ci3.googleusercontent.com/proxy/XKUpfxNaMi4qEf-NuDV5J4aXw0mvEv-Yrdqn3siSFrWBQBiQkb-LJZRQHeLxzzJEllMj8PJggwbbUXTJ2rNzeE_T5Ex2P7WkEiyNMPS9YGo=s0-d-e1-ft#https://cloud.google.com/dataflow/images/diagram-dataflow.png) 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 | ![](https://ci3.googleusercontent.com/proxy/ysxpsIxWt1SP4pQCK6pXulpQwlxED6VeMQo6MyW_Vc6g0vpP3IeTUBI2P8Ag68L3Tg70C1IkbWZP7sCWDL3Q8tALHa1rFUK0g7c8bjLIIU5ag-91v3aslMQXUq1GpNLLvuMJ6D6manNGBc6-=s0-d-e1-ft#https://spotifylabscom.files.wordpress.com/2016/03/screen-shot-2016-01-01-at-21-00-14.png) 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 | ![](.gitbook/assets/image.png) 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 | ![](.gitbook/assets/image%20%282%29.png) 51 | 52 | ![](.gitbook/assets/image%20%283%29.png) 53 | 54 | ![](.gitbook/assets/image%20%284%29.png) 55 | 56 | ![](.gitbook/assets/image%20%285%29.png) 57 | 58 | ![](.gitbook/assets/image%20%286%29.png) 59 | 60 | 61 | 62 | ![](.gitbook/assets/image%20%287%29.png) 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 | ![](https://ci5.googleusercontent.com/proxy/0azkNkJhdmb9aqFL-ogPjJgjohioyXX-cb7G3LrjyGA342U1bzefk2TGfMSFsrLVtL0DJBiknHLdLwyhlz1mLfLAR1iSeQ2OhYWBw-XEMWQmVm1yUxyCeKhM_eYJw_P31O6qyam1SchGVv-udHPYt7YbyuveKEBFH5bbXDw6jqdk=s0-d-e1-ft#https://image.slidesharecdn.com/powersoftenredux1-180127202647/95/powers-of-ten-redux-25-638.jpg?cb=1517084949) 84 | 85 | ![](https://ci4.googleusercontent.com/proxy/OYlJi5ry2vJew2BfIEsT97JHPLhuuzWJmWgjgDGRJawggFOHAFHZTuwQOVf7sotpeRgeRwkv59IeB2thuZufSyx-ufrP1Jlx_7nK4-mOlxYMU3KJqMPladlD7Ax_3QTQR8vsk5PJn4fWiPG61dwK5eyRCke1f3DrD6WlIkVk3zqFruepsByE2oQ5Zht0sZFL8DplxD8Xg9D4JGySERhmA8WmDGZpoRISjLXzhhoCWuHojrvTh8hc1XWymgvl=s0-d-e1-ft#https://bitgamelabs.atlassian.net/wiki/download/thumbnails/645988413/image2018-6-23_8-58-38.png?version=1&modificationDate=1529737121488&cacheVersion=1&api=v2&height=250) 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 | --------------------------------------------------------------------------------