1. outline of article
  2. code to generate cycles from TreeMap
  3. [ ] CANCELLED: write code to draw graph just before loop detected (too many race conditions)
  4. draw it using graphviz
    1. add colours
  5. sample stacktrace
  6. link code to article
    1. simple experiment
    2. printing out cycle
    3. executor experiment
    4. grpc experiment
  7. come up with a bigger example that will produce a prettier graph
  8. [ ] CANCELLED: animation for red-black tree deep dive
  9. [ ] CANCELLED: solid 2 thread code interleaving that generates the loop?
    1. [ ] do it by hand
    2. [ ] generate it with logging
      1. [ ] wouldn’t logging with synchronized make the issue less likely to happen due to locking introduced?
  10. [ ] CANCELLED: simple diagrams that demonstrate the concurrent rotation issue
  11. spring-rest/grpc realistic example
    1. get grpc protobuf generating
    2. implement service
    3. implement client-server main method
    4. write up situation in blog post
  12. threadpool with swallowed stack trace realistic example
  13. look into GRPC NPE. I thought NPEs make it to the logs. not sure what happened in my example. i’m not seeing NPE in standard out.
  14. high level why it happens with two threads executing and tree rotation pseudo code hint is the NPE
  15. different languages that also have the issue (as long as you can catch NPE)
    1. research
      1. javascript
      2. python
      3. typescript
      4. java
      5. C#
      6. C++
      7. PHP
      8. [ ] C
      9. Go
      10. Rust
      11. kotlin
      12. Ruby
    2. implement the ones that are possible
      1. [ ] javascript
      2. [ ] python
      3. [ ] typescript
      4. java
      5. C#
      6. C++
      7. [ ] PHP
      8. [ ] C
      9. Go
      10. Rust
      11. [ ] kotlin
      12. Ruby
  16. easy solution: locking/monitors
  17. controversial solution using lg(N) extra memory
    1. high level description
    2. drawbacks
    3. implementation
    4. re run experiment with safe TreeMap
    5. Add diff viewer somehow
  18. conclusion
  19. related work
  20. [ ] include source code under a detail tag in addition to a link the repo jekyll wasn’t liking detail tags
  21. include source snippets with link
    1. Experiment: SimpleRepro
    2. Experiment: Generate Graph
    3. Real: Executor
    4. Real: gRPC
    5. Languages: Java
    6. Languages: C#
    7. Languages: Ruby
    8. Languages: Go
    9. Languages: C++
    10. Languages: Rust
  22. fix link in related worked
  23. Fix language table
  24. clean up article
    1. first skim expand existing content
      1. Intro
      2. Experiment
      3. Related Work
      4. Realistic
      5. How
      6. Other langs
      7. Easy fix
      8. Controversial fix
      9. Layered
      10. Conclusion
    2. spell check
    3. proof read 1
      1. Intro
      2. Experiment
      3. Related Work
      4. Realistic
      5. How
      6. Other langs
      7. Easy fix
      8. Controversial fix
      9. Layered
      10. Conclusion
    4. proof read 2
      1. Intro
      2. Experiment
      3. Related Work
      4. Realistic
      5. How
      6. Other langs
      7. Easy fix
      8. Controversial fix
      9. Layered
      10. Conclusion
  25. send for review
  26. determine commands to transfer to public repo ``` cd java-by-experiments git remote add private ../java-by-experiments-private/.git git fetch private git checkout private/main -b private-main git checkout main git merge private-main git branch -d private-main git remote remove private git push

cd josephmate.github.io git remote add private ../josephmate.github.io-private/.git git fetch private git checkout private/main -b private-main git checkout master git merge private-main git branch -d private-main git remote remove private git push ```

  1. push to public repos
  2. test links to public experiment repo
    1. SimpleRepro
    2. java
    3. C#
    4. C++
    5. Go
    6. Rust
    7. Ruby
    8. Link to ProtectedTreeMap
  3. report bug to jekyll about using detail tag. for now just include source snippets with link
    1. already reported: https://github.com/jekyll/jekyll/issues/9297