Hello. I just fixed the draft implementation, with rebasing onto the latest trunk. The KIP was also restored.
Please have a look, and if there is no major problem, please vote to the voting thread. You know, KIP freeze for 2.2.0 is almost imminent. Thanks, Dongjin On Tue, Jan 22, 2019 at 1:04 AM Ismael Juma <ism...@juma.me.uk> wrote: > Thanks! > > Ismael > > On Mon, Jan 21, 2019 at 6:02 AM Dongjin Lee <dong...@apache.org> wrote: > > > Hi Ismael, > > > > After reviewing > `LogValidator#validateMessagesAndAssignOffsetsCompressed`, > > yes, you are right. If source codec and target codec is identical and the > > magic is above 0, the broker can do an in-place assignment, without > > recompressing. Sorry for my misunderstanding. > > > > Since we don't need `compression.[gzip,lz4,zstd].level` and > > `compression.[gzip,snappy,lz4].buffer.size` anymore, I will revert those > > changes and update the KIP with the recent discussions. I will complete > it > > in 48 hours from now. > > > > Thanks, > > Dongjin > > > > On Mon, Jan 21, 2019 at 4:18 PM Dongjin Lee <dong...@apache.org> wrote: > > > > > I see. Let me have a check. If not needed, of course, we don't have to > > > waste on configuration options. > > > > > > Since the KIP deadline is imminent, I just opened the voting thread. > > Let's > > > continue the discussion here. > > > > > > Best, > > > Dongjin > > > > > > On Mon, Jan 21, 2019 at 1:30 AM Ismael Juma <ism...@juma.me.uk> wrote: > > > > > >> Hi Dongjin, > > >> > > >> When the compression type is "producer", then the broker doesn't > > >> recompress > > >> though. Thinking about it some more, there are some uncommon cases > where > > >> recompression does happen (the old (and hopefully hardly used by now) > > >> message format == 0 and some edge cases), so it is a good point you > > >> raised. > > >> > > >> It's a bit unfortunate to add so many topic configs for cases that > > >> probably > > >> don't matter. That is, if you are using "producer" compression, you > > >> probably don't need to configure these settings and can live with the > > >> defaults. Perhaps we should only support the topic config for the > cases > > >> where you are actually recompressing in the broker. > > >> > > >> What do you think? I'd be interested in other people's thoughts too. > > >> > > >> Ismael > > >> > > >> On Sun, Jan 20, 2019 at 2:14 AM Dongjin Lee <dong...@apache.org> > wrote: > > >> > > >> > Hi Ismael, > > >> > > > >> > It seems like it needs more explanation. Here is the detailed > > reasoning. > > >> > > > >> > You know, topic and broker's 'compression.type' allows > 'uncompressed', > > >> > 'producer' with standard codecs (i.e., gzip, snappy, lz4, zstd.) And > > >> this > > >> > configuration is used by the broker in the re-compressing process > > after > > >> > offset assignment. After this feature, the new configs, > > >> 'compression.level' > > >> > and 'compression.buffer.size', also will be used in this process. > > >> > > > >> > The problem arises when given topic's compression type (whether it > was > > >> > inherited from broker's configuration or explicitly set) is > > 'producer.' > > >> > With this setting, the compression codec to be used is decided by > the > > >> > producer client. Since there is no way to restore the compression > > level > > >> and > > >> > buffer size from the message, we can take the following strategies: > > >> > > > >> > 1. Just use given 'compression.level' and 'compression.buffer.size' > > >> > settings. > > >> > > > >> > It will cause so many errors. Let's imagine the case of topic's > > >> > configuration is { compression.type=producer, compression.level=10, > > >> > compression.buffer.size=8192 }. In this case, all producers with > gzip > > or > > >> > lz4 compressed messages will result in an error. (gzip doesn't allow > > >> > compression level 10, and lz4 also for a buffer size of 8192.) > > >> > > > >> > 2. Extend the message format to include compression configurations. > > >> > > > >> > With this strategy, we need to change the message format - it's a > too > > >> big > > >> > change. > > >> > > > >> > 3. If topic's compression.type is 'producer', use the default > > >> configuration > > >> > for the given codec. > > >> > > > >> > With this strategy, allowing fine-grained compression configuration > is > > >> > meaningless. > > >> > > > >> > For the above reasons, I think the only alternative is providing > > options > > >> > that can be used when the topic's 'compression.type' is 'producer.' > In > > >> > other words, adding compression.[gzip, lz4, zstd].level and > > >> > compression.[gzip.snappy.lz4].buffer.size options - and it is what I > > >> did in > > >> > the last modification. > > >> > > > >> > (wait, the reasoning above should be included in the KIP in the > > rejected > > >> > alternatives section, isn't it?) > > >> > > > >> > Thanks, > > >> > Dongjin > > >> > > > >> > On Sun, Jan 20, 2019 at 2:33 AM Ismael Juma <ism...@juma.me.uk> > > wrote: > > >> > > > >> > > Hi Dongjin, > > >> > > > > >> > > For topic level, you can only have a single compression type so > the > > >> way > > >> > it > > >> > > was before was fine, right? The point you raise is how to set > broker > > >> > > defaults that vary depending on the compression type, correct? > > >> > > > > >> > > Ismael > > >> > > > > >> > > On Mon, Jan 14, 2019 at 10:18 AM Dongjin Lee <dong...@apache.org> > > >> wrote: > > >> > > > > >> > > > I just realized that there was a missing hole in the KIP, so I > > fixed > > >> > it. > > >> > > > The draft implementation will be updated soon. > > >> > > > > > >> > > > In short, the proposed change did not regard the case of the > topic > > >> or > > >> > > > broker's 'compression.type' is 'producer'; in this case, the > > broker > > >> has > > >> > > to > > >> > > > handle all kinds of the supported codec. So I added additional > > >> options > > >> > > > (compression.[gzip,snappy,lz4, zstd].level, > > >> > compression.[gzip,snappy,lz4, > > >> > > > zstd].buffer.size) with handling routines. > > >> > > > > > >> > > > Please have a look when you are free. > > >> > > > > > >> > > > Thanks, > > >> > > > Dongjin > > >> > > > > > >> > > > On Mon, Jan 7, 2019 at 6:23 AM Dongjin Lee <dong...@apache.org> > > >> wrote: > > >> > > > > > >> > > > > Thanks for pointing out Ismael. It's now updated. > > >> > > > > > > >> > > > > Best, > > >> > > > > Dongjin > > >> > > > > > > >> > > > > On Mon, Jan 7, 2019 at 4:36 AM Ismael Juma <isma...@gmail.com > > > > >> > wrote: > > >> > > > > > > >> > > > >> Thanks Dongjin. One minor suggestion: we should mention that > > the > > >> > > broker > > >> > > > >> side configs are also topic configs (i.e. can be set for a > > given > > >> > > topic). > > >> > > > >> > > >> > > > >> Ismael > > >> > > > >> > > >> > > > >> On Sun, Jan 6, 2019, 10:37 AM Dongjin Lee < > dong...@apache.org > > >> > wrote: > > >> > > > >> > > >> > > > >> > Happy new year. > > >> > > > >> > > > >> > > > >> > I just updated the title and contents of KIP and Jira > issue, > > >> with > > >> > > > >> updated > > >> > > > >> > draft implementation. Now both of compression level and > > buffer > > >> > size > > >> > > > >> options > > >> > > > >> > are available to producer and broker configuration. You can > > >> check > > >> > > the > > >> > > > >> > updated KIP from modified URL: > > >> > > > >> > > > >> > > > >> > > > >> > > > >> > > > >> > > > >> > > >> > > > > > >> > > > > >> > > > >> > > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-390%3A+Allow+fine-grained+configuration+for+compression > > >> > > > >> > > > >> > > > >> > Please have a look when you are free. > > >> > > > >> > > > >> > > > >> > Thanks, > > >> > > > >> > Dongjin > > >> > > > >> > > > >> > > > >> > On Mon, Dec 3, 2018 at 12:50 AM Ismael Juma < > > isma...@gmail.com > > >> > > > >> > > > wrote: > > >> > > > >> > > > >> > > > >> > > The updated title sounds fine to me. > > >> > > > >> > > > > >> > > > >> > > Ismael > > >> > > > >> > > > > >> > > > >> > > On Sun, Dec 2, 2018, 5:25 AM Dongjin Lee < > > dong...@apache.org > > >> > > wrote: > > >> > > > >> > > > > >> > > > >> > > > Hi Ismael, > > >> > > > >> > > > > > >> > > > >> > > > Got it. Your direction is perfectly reasonable. I am > now > > >> > > updating > > >> > > > >> the > > >> > > > >> > KIP > > >> > > > >> > > > document and the implementation. > > >> > > > >> > > > > > >> > > > >> > > > By allowing the buffer/block size to be configurable, > it > > >> would > > >> > > be > > >> > > > >> > better > > >> > > > >> > > to > > >> > > > >> > > > update the title of the KIP like 'Allow fine-grained > > >> > > configuration > > >> > > > >> for > > >> > > > >> > > > compression'. Is that right? > > >> > > > >> > > > > > >> > > > >> > > > @Other committers: > > >> > > > >> > > > > > >> > > > >> > > > Is there any other opinion on allowing the buffer/block > > >> size > > >> > to > > >> > > be > > >> > > > >> > > > configurable? > > >> > > > >> > > > > > >> > > > >> > > > Thanks, > > >> > > > >> > > > Dongjin > > >> > > > >> > > > > > >> > > > >> > > > On Thu, Nov 29, 2018 at 1:45 AM Ismael Juma < > > >> > ism...@juma.me.uk> > > >> > > > >> wrote: > > >> > > > >> > > > > > >> > > > >> > > > > Hi Dongjin, > > >> > > > >> > > > > > > >> > > > >> > > > > To clarify, I mean a broker topic config with regards > > to > > >> > point > > >> > > > 1. > > >> > > > >> As > > >> > > > >> > > you > > >> > > > >> > > > > know, compression can be done by the producer and/or > by > > >> the > > >> > > > >> broker. > > >> > > > >> > The > > >> > > > >> > > > > default is for the broker to just use whatever > > >> compression > > >> > was > > >> > > > >> used > > >> > > > >> > by > > >> > > > >> > > > the > > >> > > > >> > > > > producer, but this can be changed by the user on a > per > > >> topic > > >> > > > >> basis. > > >> > > > >> > It > > >> > > > >> > > > > seems like it would make sense for the configs to be > . > > >> > > > consistent > > >> > > > >> > > between > > >> > > > >> > > > > producer and broker. > > >> > > > >> > > > > > > >> > > > >> > > > > For point 2, I haven't looked at the implementation, > > but > > >> we > > >> > > > could > > >> > > > >> do > > >> > > > >> > it > > >> > > > >> > > > in > > >> > > > >> > > > > the `CompressionType` enum by invoking the right > > >> constructor > > >> > > or > > >> > > > >> > > > retrieving > > >> > > > >> > > > > the default value via a constant (if defined). That's > > an > > >> > > > >> > implementation > > >> > > > >> > > > > detail and can be discussed in the PR. The more > general > > >> > point > > >> > > is > > >> > > > >> to > > >> > > > >> > > rely > > >> > > > >> > > > on > > >> > > > >> > > > > the library defaults instead of choosing one > ourselves. > > >> > > > >> > > > > > > >> > > > >> > > > > For point 3, I'm in favour of doing that in this KIP. > > >> > > > >> > > > > > > >> > > > >> > > > > Ismael > > >> > > > >> > > > > > > >> > > > >> > > > > On Wed, Nov 28, 2018 at 7:01 AM Dongjin Lee < > > >> > > dong...@apache.org > > >> > > > > > > >> > > > >> > > wrote: > > >> > > > >> > > > > > > >> > > > >> > > > > > Thank you Ismael, here are the answers: > > >> > > > >> > > > > > > > >> > > > >> > > > > > *1. About topic config* > > >> > > > >> > > > > > > > >> > > > >> > > > > > After some consideration, I concluded that topic > > config > > >> > > > doesn't > > >> > > > >> > need > > >> > > > >> > > to > > >> > > > >> > > > > > support compression.level. Here is why: since the > > >> > > compression > > >> > > > is > > >> > > > >> > > > > conducted > > >> > > > >> > > > > > by the client, the one who can select the best > > >> compression > > >> > > > >> level is > > >> > > > >> > > the > > >> > > > >> > > > > > client itself. Let us assume that the compression > > >> level is > > >> > > set > > >> > > > >> at > > >> > > > >> > the > > >> > > > >> > > > > topic > > >> > > > >> > > > > > config level. In that case, there is a possibility > > that > > >> > the > > >> > > > >> > > compression > > >> > > > >> > > > > > level is not optimal for some producers. Actually, > > >> Kafka's > > >> > > go > > >> > > > >> > client > > >> > > > >> > > > also > > >> > > > >> > > > > > supports compression level functionality for the > > >> producer > > >> > > > config > > >> > > > >> > > only. > > >> > > > >> > > > > > < > > >> https://github.com/Shopify/sarama/blob/master/config.go> > > >> > > > >> (wait, > > >> > > > >> > do > > >> > > > >> > > we > > >> > > > >> > > > > > need > > >> > > > >> > > > > > to add this reasoning in the KIP, rejected > > alternatives > > >> > > > >> section?) > > >> > > > >> > > > > > > > >> > > > >> > > > > > *2. About default level* > > >> > > > >> > > > > > > > >> > > > >> > > > > > As of current draft implementation, the default > > >> > compression > > >> > > is > > >> > > > >> set > > >> > > > >> > on > > >> > > > >> > > > the > > >> > > > >> > > > > > CompressionType enum. Of course, changing this > > strategy > > >> > into > > >> > > > >> > relying > > >> > > > >> > > > on a > > >> > > > >> > > > > > method from the library to pick the default > > compression > > >> > > level > > >> > > > >> seems > > >> > > > >> > > > > > possible, like `GZIPBlockOutputStream` does. In > this > > >> case, > > >> > > we > > >> > > > >> need > > >> > > > >> > to > > >> > > > >> > > > add > > >> > > > >> > > > > > similar wrapper class for zstd and modify lz4 the > > >> wrapper > > >> > > > also. > > >> > > > >> Add > > >> > > > >> > > to > > >> > > > >> > > > > > this, it seems like we need to explicitly state > that > > we > > >> > > follow > > >> > > > >> the > > >> > > > >> > > > > default > > >> > > > >> > > > > > compression level of the codec in the > documentation. > > Is > > >> > this > > >> > > > >> what > > >> > > > >> > you > > >> > > > >> > > > > > intended? > > >> > > > >> > > > > > > > >> > > > >> > > > > > *3. Whether to allow the buffer/block size to be > > >> > > configurable* > > >> > > > >> > > > > > > > >> > > > >> > > > > > Well, As of current draft implementation, the lz4 > > >> level is > > >> > > > >> > > implemented > > >> > > > >> > > > as > > >> > > > >> > > > > > block size; this is caused by my misunderstanding > on > > >> lz4. > > >> > > > After > > >> > > > >> > > > reviewing > > >> > > > >> > > > > > lz4 today, I found that it also supports > compression > > >> level > > >> > > of > > >> > > > >> 1~16 > > >> > > > >> > > > > > (default: 1), not block size. I will fix it in this > > >> > weekend > > >> > > by > > >> > > > >> > > updating > > >> > > > >> > > > > the > > >> > > > >> > > > > > wrapper class. > > >> > > > >> > > > > > > > >> > > > >> > > > > > For the problem of the buffer/block size, I have no > > >> strong > > >> > > > >> opinion. > > >> > > > >> > > If > > >> > > > >> > > > > the > > >> > > > >> > > > > > community needs it, I will do it all together. How > do > > >> you > > >> > > > think? > > >> > > > >> > > > > > > > >> > > > >> > > > > > In short, it seems like I need to update the KIP > > >> document > > >> > > for > > >> > > > >> issue > > >> > > > >> > > #1 > > >> > > > >> > > > > and > > >> > > > >> > > > > > update the compression wrapper for issue #2, #3. Is > > >> this > > >> > > okay? > > >> > > > >> > > > > > > > >> > > > >> > > > > > Thanks, > > >> > > > >> > > > > > Dongjin > > >> > > > >> > > > > > > > >> > > > >> > > > > > On Wed, Nov 28, 2018 at 12:34 AM Ismael Juma < > > >> > > > isma...@gmail.com > > >> > > > >> > > > >> > > > >> > > > wrote: > > >> > > > >> > > > > > > > >> > > > >> > > > > > > Thanks for the KIP, this is helpful. A few > > >> questions: > > >> > > > >> > > > > > > > > >> > > > >> > > > > > > 1. Have we considered whether we want to allow a > > >> similar > > >> > > > topic > > >> > > > >> > > > config? > > >> > > > >> > > > > > > 2. Can we rely on a method from the library to > pick > > >> the > > >> > > > >> default > > >> > > > >> > > > > > compression > > >> > > > >> > > > > > > level if compression.level is not set? We do it > for > > >> gzip > > >> > > and > > >> > > > >> it > > >> > > > >> > > would > > >> > > > >> > > > > > seem > > >> > > > >> > > > > > > reasonable to do something similar for the other > > >> > > compression > > >> > > > >> > > > libraries. > > >> > > > >> > > > > > > 3. Do we want to allow the buffer/block size to > be > > >> > > > >> configurable? > > >> > > > >> > > This > > >> > > > >> > > > > has > > >> > > > >> > > > > > > an impact on memory usage and people may want to > > >> trade > > >> > > > >> > compression > > >> > > > >> > > > for > > >> > > > >> > > > > > > less/more memory in some cases. For example, the > > >> default > > >> > > for > > >> > > > >> LZ4 > > >> > > > >> > is > > >> > > > >> > > > > 64KB > > >> > > > >> > > > > > > which is a bit high. > > >> > > > >> > > > > > > > > >> > > > >> > > > > > > Ismael > > >> > > > >> > > > > > > > > >> > > > >> > > > > > > On Sun, Nov 18, 2018, 2:07 PM Dongjin Lee < > > >> > > > dong...@apache.org > > >> > > > >> > > wrote: > > >> > > > >> > > > > > > > > >> > > > >> > > > > > > > Hello dev, > > >> > > > >> > > > > > > > > > >> > > > >> > > > > > > > I hope to initiate the discussion of KIP-390: > Add > > >> > > producer > > >> > > > >> > option > > >> > > > >> > > > to > > >> > > > >> > > > > > > adjust > > >> > > > >> > > > > > > > compression level > > >> > > > >> > > > > > > > < > > >> > > > >> > > > > > > > > > >> > > > >> > > > > > > > > >> > > > >> > > > > > > > >> > > > >> > > > > > > >> > > > >> > > > > > >> > > > >> > > > > >> > > > >> > > > >> > > > >> > > >> > > > > > >> > > > > >> > > > >> > > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-390%3A+Add+producer+option+to+adjust+compression+level > > >> > > > >> > > > > > > > >. > > >> > > > >> > > > > > > > All feedbacks will be highly appreciated. > > >> > > > >> > > > > > > > > > >> > > > >> > > > > > > > Best, > > >> > > > >> > > > > > > > Dongjin > > >> > > > >> > > > > > > > > > >> > > > >> > > > > > > > -- > > >> > > > >> > > > > > > > *Dongjin Lee* > > >> > > > >> > > > > > > > > > >> > > > >> > > > > > > > *A hitchhiker in the mathematical world.* > > >> > > > >> > > > > > > > > > >> > > > >> > > > > > > > *github: <http://goog_969573159/> > > >> > > github.com/dongjinleekr > > >> > > > >> > > > > > > > <http://github.com/dongjinleekr>linkedin: > > >> > > > >> > > > > > > kr.linkedin.com/in/dongjinleekr > > >> > > > >> > > > > > > > <http://kr.linkedin.com/in/dongjinleekr > > >> >slideshare: > > >> > > > >> > > > > > > > www.slideshare.net/dongjinleekr > > >> > > > >> > > > > > > > <http://www.slideshare.net/dongjinleekr>* > > >> > > > >> > > > > > > > > > >> > > > >> > > > > > > > > >> > > > >> > > > > > > > >> > > > >> > > > > > > > >> > > > >> > > > > > -- > > >> > > > >> > > > > > *Dongjin Lee* > > >> > > > >> > > > > > > > >> > > > >> > > > > > *A hitchhiker in the mathematical world.* > > >> > > > >> > > > > > *github: <http://goog_969573159/> > > >> github.com/dongjinleekr > > >> > > > >> > > > > > <https://github.com/dongjinleekr>linkedin: > > >> > > > >> > > > > kr.linkedin.com/in/dongjinleekr > > >> > > > >> > > > > > <https://kr.linkedin.com/in/dongjinleekr > > >speakerdeck: > > >> > > > >> > > > > > speakerdeck.com/dongjin > > >> > > > >> > > > > > <https://speakerdeck.com/dongjin>* > > >> > > > >> > > > > > > > >> > > > >> > > > > > > >> > > > >> > > > > > >> > > > >> > > > > > >> > > > >> > > > -- > > >> > > > >> > > > *Dongjin Lee* > > >> > > > >> > > > > > >> > > > >> > > > *A hitchhiker in the mathematical world.* > > >> > > > >> > > > *github: <http://goog_969573159/> > > github.com/dongjinleekr > > >> > > > >> > > > <https://github.com/dongjinleekr>linkedin: > > >> > > > >> > > kr.linkedin.com/in/dongjinleekr > > >> > > > >> > > > <https://kr.linkedin.com/in/dongjinleekr>speakerdeck: > > >> > > > >> > > > speakerdeck.com/dongjin > > >> > > > >> > > > <https://speakerdeck.com/dongjin>* > > >> > > > >> > > > > > >> > > > >> > > > > >> > > > >> > > > >> > > > >> > > > >> > > > >> > -- > > >> > > > >> > *Dongjin Lee* > > >> > > > >> > > > >> > > > >> > *A hitchhiker in the mathematical world.* > > >> > > > >> > *github: <http://goog_969573159/>github.com/dongjinleekr > > >> > > > >> > <https://github.com/dongjinleekr>linkedin: > > >> > > > >> kr.linkedin.com/in/dongjinleekr > > >> > > > >> > <https://kr.linkedin.com/in/dongjinleekr>speakerdeck: > > >> > > > >> > speakerdeck.com/dongjin > > >> > > > >> > <https://speakerdeck.com/dongjin>* > > >> > > > >> > > > >> > > > >> > > >> > > > > > > >> > > > > > > >> > > > > -- > > >> > > > > *Dongjin Lee* > > >> > > > > > > >> > > > > *A hitchhiker in the mathematical world.* > > >> > > > > *github: <http://goog_969573159/>github.com/dongjinleekr > > >> > > > > <https://github.com/dongjinleekr>linkedin: > > >> > > > kr.linkedin.com/in/dongjinleekr > > >> > > > > <https://kr.linkedin.com/in/dongjinleekr>speakerdeck: > > >> > > > speakerdeck.com/dongjin > > >> > > > > <https://speakerdeck.com/dongjin>* > > >> > > > > > > >> > > > > > >> > > > > > >> > > > -- > > >> > > > *Dongjin Lee* > > >> > > > > > >> > > > *A hitchhiker in the mathematical world.* > > >> > > > *github: <http://goog_969573159/>github.com/dongjinleekr > > >> > > > <https://github.com/dongjinleekr>linkedin: > > >> > > kr.linkedin.com/in/dongjinleekr > > >> > > > <https://kr.linkedin.com/in/dongjinleekr>speakerdeck: > > >> > > > speakerdeck.com/dongjin > > >> > > > <https://speakerdeck.com/dongjin>* > > >> > > > > > >> > > > > >> > > > >> > > > >> > -- > > >> > *Dongjin Lee* > > >> > > > >> > *A hitchhiker in the mathematical world.* > > >> > *github: <http://goog_969573159/>github.com/dongjinleekr > > >> > <https://github.com/dongjinleekr>linkedin: > > >> kr.linkedin.com/in/dongjinleekr > > >> > <https://kr.linkedin.com/in/dongjinleekr>speakerdeck: > > >> > speakerdeck.com/dongjin > > >> > <https://speakerdeck.com/dongjin>* > > >> > > > >> > > > > > > > > > -- > > > *Dongjin Lee* > > > > > > *A hitchhiker in the mathematical world.* > > > *github: <http://goog_969573159/>github.com/dongjinleekr > > > <https://github.com/dongjinleekr>linkedin: > > kr.linkedin.com/in/dongjinleekr > > > <https://kr.linkedin.com/in/dongjinleekr>speakerdeck: > > speakerdeck.com/dongjin > > > <https://speakerdeck.com/dongjin>* > > > > > > > > > -- > > *Dongjin Lee* > > > > *A hitchhiker in the mathematical world.* > > *github: <http://goog_969573159/>github.com/dongjinleekr > > <https://github.com/dongjinleekr>linkedin: > kr.linkedin.com/in/dongjinleekr > > <https://kr.linkedin.com/in/dongjinleekr>speakerdeck: > > speakerdeck.com/dongjin > > <https://speakerdeck.com/dongjin>* > > > -- *Dongjin Lee* *A hitchhiker in the mathematical world.* *github: <http://goog_969573159/>github.com/dongjinleekr <https://github.com/dongjinleekr>linkedin: kr.linkedin.com/in/dongjinleekr <https://kr.linkedin.com/in/dongjinleekr>speakerdeck: speakerdeck.com/dongjin <https://speakerdeck.com/dongjin>*