Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2.x: Observable missing or incorrect images (tracking issue) #5319

Closed
87 tasks done
akarnokd opened this issue Apr 27, 2017 · 37 comments
Closed
87 tasks done

2.x: Observable missing or incorrect images (tracking issue) #5319

akarnokd opened this issue Apr 27, 2017 · 37 comments

Comments

@akarnokd
Copy link
Member

akarnokd commented Apr 27, 2017

  • Observable.singleOrError(): There is no default value and an empty source should result in an error.
  • Observable.combineLatestDelayError(ObservableSource[], Function): missing diagram
  • Observable.combineLatestDelayError(Function, int, ObservableSource...): missing diagram
  • Observable.concatArrayEager: missing diagram
  • Observable.error: should include the X in the operator body indicating it as being the parameter/return value
  • Observable.fromFuture: the operator name in the box
  • Observable.fromIterable: the operator name in the box
  • Observable.fromPublisher: missing diagram
  • Observable.just: the element should be a parameter inside the box, such outside elements imply a subject type external push.
  • Observable.just(T, T) +7: optionally tailor the diagram to the actual number of arguments, plus move the constant values inside the box
  • Observable.rangeLong: the operator name in the box
  • Observable.switchOnNextDelayError: the operator name in the box, indicator of an error getting delayed
  • Observable.zipArray: indicate there is a function instead of implying the output is an array containing one element from each source.
  • Observable.zipIterable: the operator name in the box
  • Observable.all: example of a false result
  • Observable.ambWith: the operator name in the box
  • Observable.blockingFirst: missing diagram
  • Observable.blockingForEach: the operator name in the box
  • Observable.blockingIterable: the operator name in the box, indicate that blocking may happen for each element
  • Observable.blockingLast: the operator name in the box
  • Observable.blockingLast(T): the operator name in the box, indicate default in the box, fix labels
  • Observable.blockingLatest: missing diagram
  • Observable.blockingMostRecent: the operator name in the box
  • Observable.blockingNext: the operator name in the box
  • Observable.blockingSingle: the operator name in the box
  • Observable.blockingSingle(T): the operator name in the box, indicate default in the box, fix labels
  • Observable.toFuture(): the operator name in the box, indicate multi-value, empty and error behavior
  • Observable.blockingSubscribe: missing diagram
  • Observable.cacheWithInitialCapacity: the operator name in the box
  • Observable.collectInto: the operator name in the box, indicate the shared collection
  • Observable.concatMapCompletable: missing diagram
  • Observable.concatMapDelayError: missing diagram
  • Observable.concatMapEager: missing diagram
  • Observable.concatMapEagerDelayError: missing diagram
  • Observable.concatMapIterable: missing diagram
  • Observable.doAfterNext: missing diagram
  • Observable.doFinally: missing diagram
  • Observable.doOnDispose: the operator name in the box
  • Observable.doOnComplete: indicate that the events pass through and the star is execute before the onComplete to downstream
  • Observable.doOnError: indicate that the events pass through and the star is execute before the onError to downstream
  • Observable.doOnLifecycle: change unsubscribe to dispose
  • Observable.doOnNext: indicate that the events pass through and the star is execute before the onNext to downstream
  • Observable.doOnTerminate: indicate that the events pass through and the star is execute before the onError or onComplete to downstream
  • Observable.elementAt(long): example of empty source
  • Observable.elementAt(long, T): example of empty source
  • Observable.elementAtOrError(long): example of empty source
  • Observable.firstElement: diagram is stretched
  • Observable.firstOrError: the operator name in the box
  • Observable.flatMap(Function, boolean, int): missing diagram
  • Observable.flatMap(Function, boolean, int, int): missing diagram
  • Observable.flatMap(Function, Function, Callable, int): missing diagram
  • Observable.flatMap(Function, int): missing diagram
  • Observable.flatMap(Function, BiFunction, boolean, int): missing diagram
  • Observable.flatMap(Function, BiFunction, boolean, int, int): missing diagram
  • Observable.flatMap(Function, BiFunction, int): missing diagram
  • Observable.flatMapCompletable(): missing diagram
  • Observable.flatMapIterable(Function): diagram looks stretched
  • Observable.forEach(): missing diagram
  • Observable.forEachWhile(): missing diagram
  • Observable.hide(): missing diagram - not sure how to represent this
  • Observable.lastOrError(): operator name in the box, error case example.
  • Observable.onErrorReturn(): indicate that the value is the result of a function call
  • Observable.onErrorReturnItem(): operator name in the box
  • Observable.onTerminateDetach: missing diagram
  • Observable.publish(Function): there is no connect call, may need extensive redrawing
  • Observable.reduceWith(): operator name in the box
  • Observable.repeat() + overloads: indicate fresh subscriptions happen, not caching
  • Observable.repeatUntil: operator name in the box, indicate fresh subscriptions
  • Observable.replay() + overloads: remove publish
  • Observable.replay(Function, ...) overloads: may need extensive redrawing
  • Observable.retry(long) indicate limited retry effect
  • Observable.retry(Predicate) indicate predicate effect, show it in the box
  • Observable.retry(long, Predicate) indicate predicate, show them in the box
  • Observable.retryUntil: operator name in the box, show BooleanSupplier
  • Observable.share(): fix labels with unsubscribe
  • Observable.singleElement: example with empty source
  • Observable.sorted: missing diagram
  • Observable.startWith(T): have a single item as start value
  • Observable.startWithArray(T...): operator name
  • Observable.subscribe + overloads: missing diagram
  • Observable.switchMapSingle: inner sources should have 1 item.
  • Observable.switchMapDelayError + indicate the error case
  • Observable.toList(Callable): indicate the custom collection somehow?
  • Observable.toFlowable(): missing diagram
  • Observable.unsubscribeOn(): missing diagram
  • Observable.zipWith() + overloads: the diagram is in line with some text and appears pushed to the right
  • Observable.test(): missing diagram, can this be represented as diagram?
@akarnokd akarnokd added this to the 2.0 backlog milestone Apr 27, 2017
@akarnokd
Copy link
Member Author

PRs welcome. The most easy ones are those that require alignment/displayed size corrections.

@digitalbuddha
Copy link

Hi David, I'd love to help, what would I use to edit the diagrams?

@akarnokd
Copy link
Member Author

If you are on Mac and you own OmniGraffle, there is a file for all traditional diagrams:
ReactiveX/reactivex.github.io#223

I'm using Excel 2007+ on Windows to draw the newer diagrams and have a file here you can use as basis for newer diagrams. I don't know if the open office variants could open this file or not, Google's viewer certainly doesn't show the drawings.

I suppose as a last resort you can draw in the open-office variants as well and post the PNGs in this issue. Uploading it requires access to the wiki git of RxJava. The target rendering is 640 pixels wide and as long as it needs to be.

The process is as follows:

  • Draw diagram(s)
  • Upload to git
  • Modify Javadoc locally to point to the raw usercontent
  • Verify and fix alignment/stretching
  • Commit PR to RxJava itself

@wbinarytree
Copy link

Is it switchMapSingle need a new diagram too? SingleResource can't emit 2 items.

@akarnokd
Copy link
Member Author

Yes. I'll add it to the list above.

@akarnokd
Copy link
Member Author

ConcatArrayEager

Image

@akarnokd
Copy link
Member Author

Error

Image
Image

@akarnokd
Copy link
Member Author

fromFuture

Image
Image
Image
Image

@akarnokd
Copy link
Member Author

fromIterable

Image

@davidmoten
Copy link
Collaborator

Another option is to use free open-source multi-platform Inkscape. Templates here:

https://github.com/davidmoten/rxjava-marble-template

@leonardortlima
Copy link
Contributor

leonardortlima commented Jul 29, 2017

startWith(T)

startwith t

@leonardortlima
Copy link
Contributor

leonardortlima commented Jul 29, 2017

startWithArray(T...)

startwitharray

@akarnokd
Copy link
Member Author

Thanks. Could you make sure the operator box has its contents centered?

@leonardortlima
Copy link
Contributor

Sure. Going to edit them.

@leonardortlima
Copy link
Contributor

leonardortlima commented Jul 29, 2017

sorted()

Is it okay to add numbers to the marbles?

sorted

@akarnokd
Copy link
Member Author

In this case yes, because it also demonstrates the self-comparable nature required (changing the order of colors is unlikely to convey the sorting aspect). For most of the other operators, the matching up of the color should be enough.

@akarnokd
Copy link
Member Author

Not sure how you do these images, could you add shadows to the marbles, the time arrows and the vertical complete indicators?

@leonardortlima
Copy link
Contributor

I'm using @davidmoten's template. Going to edit them to add the shadows.

@akarnokd
Copy link
Member Author

sorted(): it would be better that the source marbles are at the beginning and the output is only happening after onComplete:

---5--3--1--4--2--|--------------
[            sorted()           ]
---------------------1-2-3-4-5-|-

@leonardortlima
Copy link
Contributor

Added shadows and edited the sorted() operator.

@leonardortlima
Copy link
Contributor

just(T)

just

@leonardortlima
Copy link
Contributor

rangelong()

rangelong

@akarnokd
Copy link
Member Author

Thanks @leonardortlima ! The first 5 images is added via #5524.

@cardamon
Copy link
Contributor

cardamon commented Aug 4, 2017

Just noticed that Single.filter and Maybe.filter are also incorrect; they seem to be copied from Observable.filter.

@akarnokd
Copy link
Member Author

akarnokd commented Aug 4, 2017

Quite possibly the other base reactive classes have copy-paste diagrams. This issue tracks the fixes of Observable but if you want, I can open issues for the other classes individually.

@akarnokd
Copy link
Member Author

akarnokd commented Oct 9, 2017

just(2)

just(2)

just(2)

just(2)

just(2)

just(2)

just(2)

just(2)

just(2)

switchOnNextDelayError

@akarnokd
Copy link
Member Author

From #5668:

singleelement

@akarnokd
Copy link
Member Author

zipIterable

zipIterable

ambWith

ambWith

blockingForEach

blockingForEach

blockingIterable

blockingIterable

blockingLast

blockingLast

blockingLast

blockingMostRecent

blockingMostRecent

blockingNext

blockingNext

blockingSingle

blockingSingle

blockingSingle

cacheWithInitialCapacity

cachecWithInitialCapacity

@akarnokd
Copy link
Member Author

all

cachecWithInitialCapacity

fromPublisher

cachecWithInitialCapacity

zipArray

cachecWithInitialCapacity

@akarnokd
Copy link
Member Author

akarnokd commented Nov 28, 2017

blockingFirst

blockingFirst

blockingFirst

toFuture

toFuture

blockingSubscribe

blockingSubscribe

blockingSubscribe

blockingSubscribe

blockingSubscribe

collectInto

collectInto

doOnComplete

doOnComplete

doOnError

doOnError

doOnLifecycle

doOnLifecycle

doOnNext

doOnNext

@akarnokd
Copy link
Member Author

akarnokd commented Dec 6, 2017

concatMapCompletable

concatMapCompletable

concatMapDelayError

concatMapDelayError

concatMapEager

concatMapEager

concatMapEagerDelayError

concatMapEagerDelayError

concatMapIterable

concatMapIterable

doAfterNext

doAfterNext

doFinally

doFinally

@akarnokd
Copy link
Member Author

akarnokd commented Dec 11, 2017

doOnTerminate

doOnTerminate

elementAt

elementAt
elementAt

elementAtOrError

elementAtOrError

firstOrError

firstOrError

flatMap

flatMap
flatMap

@akarnokd akarnokd changed the title 2.x: Observable incorrect images 2.x: Observable missing or incorrect images (tracking issue) Jan 5, 2018
@akarnokd
Copy link
Member Author

akarnokd commented Jan 8, 2018

flatMapCompletable

flatMapCompletable

forEach

forEachWhile

hide

@akarnokd
Copy link
Member Author

akarnokd commented Jan 8, 2018

lastOrError
onErrorReturn
onErrorReturnItem
onTerminateDetach
publish(Function)
reduce(seed, f)
reduceWith
repeat()
repeat(long)
repeatUntil
replay()
replay(int)
replay(int, long, TimeUnit)
replay(int, long, TimeUnit, Scheduler)
replay(int, Scheduler)
replay(long, TimeUnit)
replay(long, TimeUnit, Scheduler)
replay(Scheduler)

@akarnokd akarnokd modified the milestones: 2.0 backlog, 2.2 Jan 9, 2018
@akarnokd
Copy link
Member Author

akarnokd commented Jan 9, 2018

no arguments
scheduler
bufferSize
bufferSize, scheduler
time
time, scheduler
bufferSize, time
bufferSize, time, scheduler

@akarnokd
Copy link
Member Author

retry(int)
retry(BiFunction)
retry(Predicate)
retry(int, Predicate)
retryUntil(BooleanSupplier)
share
switchMapSingle
switchMapSingleDelayError

@akarnokd
Copy link
Member Author

toList(Callable)
toFlowable(BUFFER)
toFlowable(DROP)
toFlowable(LATEST)
toFlowable(ERROR)
toFlowable(MISSING)
unsubscribeOn

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants