Oof ok yeah. I hadn't realized that beam had a hard JVM requirement. I think that initially offering a local or block storage based solution with easy extensions for users is totally in line with airflow philosophy. I think that offering alternative transfer operators inproviders is a great idea!
On Sun, Sep 6, 2020, 9:07 AM Ash Berlin-Taylor <[email protected]> wrote: > No strong opinion - but it seems like generic is the easiest for us to > code (as we have most of it already via hooks?) and adopt (and doesn't > place a hard requirement on Beam/JVM, even if JVM would only be runtime. > Still) > > This is possibly where Airflow has a core TransferOperator, and > providers.apache.beam.operators.BeamTransferOperator? If the "same" python > API could be used for both, and it doesn't needlessly complicated things. > > -a > > On 6 September 2020 16:20:37 BST, Tomasz Urbaszek <[email protected]> > wrote: > >Thanks, Ash for pointing to https://pypi.org/project/smart-open/ This > >one looks really interesting for blob storages transfer! > > > >As stated in the initial design doc I don't think we should focus on > >best performance but rather on versatility. Currently, we have many > >AtoB operators that do not yield the highest performance but do their > >work and are widely used. > > > >I would say that we should prepare an AIP that will propose two > >approaches: generic vs beam. This will allow us to compare them and > >then we can vote which one is better from the Airflow community > >perspective. > > > >What do you think? > > > >Tomek > > > > > >On Sun, Sep 6, 2020 at 2:42 PM Ash Berlin-Taylor <[email protected]> > >wrote: > >> > >> For background: in the past I had an S3 to S3 transfer using > >smartopen (since we wanted to split one giant ~300GB file onto smaller > >parts) and it took about 10mins, so even "large" uses can work fine in > >Airflow - no JVM required. > >> > >> -ash > >> > >> On 6 September 2020 12:01:24 BST, Tomasz Urbaszek > ><[email protected]> wrote: > >> >I think using direct runner as default with the option to specify > >> >other setup is a win-win. However, there are few doubts I have about > >> >Beam based approach: > >> > > >> >1. Dependency management. If I do `pip install apache-airflow[gcp]` > >> >will it install `apache-beam[gcp]`? What if there's a version clash > >> >between dependencies? > >> > > >> >2. The initial approach using `DataSource` concept allowed users to > >> >use it in any operator (not only transfer ones). In case of relying > >on > >> >Beam we are losing this. > >> > > >> >3. I'm not a Beam expert but it seems to not support any data > >lineage > >> >solution? > >> > > >> > > >> >On Sun, Sep 6, 2020 at 6:15 AM Daniel Imberman > >> ><[email protected]> wrote: > >> >> > >> >> I think there are absolutely use-cases for both. I’m totally fine > >> >with saying “for small/medium use-cases, we come with an in-house > >> >system. However for larger cases, you’ll require spark/Flink/S3. > >That’s > >> >totally in line with PLENTY of use-cases. This would be especially > >cool > >> >when matched with fast-follow as we could EVEN potentially tie in > >data > >> >locality. > >> >> > >> >> via Newton Mail > >> > >>[ > https://cloudmagic.com/k/d/mailapp?ct=dx&cv=10.0.50&pv=10.15.6&source=email_footer_2 > ] > >> >> On Sat, Sep 5, 2020 at 5:11 PM, Austin Bennett > >> ><[email protected]> wrote: > >> >> I believe - for not large data - the direct runner is wholly > >doable, > >> >which > >> >> seems in line with airflow patterns. I have, and have spoken with > >> >several > >> >> others that have, been productive with that runner. > >> >> > >> >> For much larger transfers, the generic operator could accept > >> >parameters for > >> >> submitting the compute to an actual runner. Though, imagining that > >> >> (needing a runner) would not be the primary use case for such an > >> >operator. > >> >> > >> >> > >> >> On Tue, Sep 1, 2020, 11:52 PM Tomasz Urbaszek > ><[email protected]> > >> >wrote: > >> >> > >> >> > Austin, you are right, Beam covers all (and more) important IOs. > >> >> > However, using Apache Beam to design a generic transfer operator > >> >> > requires Airflow users to have additional resources that will be > >> >used > >> >> > as a runner (Spark, Flink, etc.). Unless you suggest using > >> >> > DirectRunner? > >> >> > > >> >> > Can you please tell us more how exactly you think we can use > >Beam > >> >for > >> >> > those Airflow transfer operators? > >> >> > > >> >> > Best, > >> >> > Tomek > >> >> > > >> >> > > >> >> > On Wed, Sep 2, 2020 at 12:37 AM Austin Bennett > >> >> > <[email protected]> wrote: > >> >> > > > >> >> > > Are there IOs that would be desired for a generic transfer > >> >operator that > >> >> > > don't exist in: > >> >https://beam.apache.org/documentation/io/built-in/ <- > >> >> > > there is pretty solid coverage? > >> >> > > > >> >> > > Beam is getting to the point where even python beam can > >leverage > >> >the java > >> >> > > IOs, which increases the range of IOs (and performance). > >> >> > > > >> >> > > > >> >> > > > >> >> > > On Tue, Sep 1, 2020 at 3:24 PM Jarek Potiuk > >> ><[email protected]> > >> >> > > wrote: > >> >> > > > >> >> > > > But I believe those two ideas are separate ones as Tomek > >> >explained :) > >> >> > > > > >> >> > > > On Wed, Sep 2, 2020 at 12:03 AM Jarek Potiuk > >> ><[email protected] > >> >> > > > >> >> > > > wrote: > >> >> > > > > >> >> > > > > I love the idea of connecting the projects more closely! > >> >> > > > > > >> >> > > > > I've been helping recently as a consultant in improving > >the > >> >Apache > >> >> > Beam > >> >> > > > > build infrastructure (in many parts based on my Airflow > >> >experience > >> >> > and > >> >> > > > > Github Actions - even recently they adopted the "cancel" > >> >action I > >> >> > > > developed > >> >> > > > > for Apache Airflow). > >> >https://github.com/apache/beam/pull/12729 > >> >> > > > > > >> >> > > > > Synergies in Apache projects are cool. > >> >> > > > > > >> >> > > > > J. > >> >> > > > > > >> >> > > > > > >> >> > > > > On Tue, Sep 1, 2020 at 11:16 PM Gerard Casas Saez > >> >> > > > > <[email protected]> wrote: > >> >> > > > > > >> >> > > > >> Agree on keeping those separate, just intervened as I > >> >believe its a > >> >> > > > great > >> >> > > > >> idea. But lets keep @beam and @spark to a separate > >thread. > >> >> > > > >> > >> >> > > > >> > >> >> > > > >> Gerard Casas Saez > >> >> > > > >> Twitter | Cortex | @casassaez > ><http://twitter.com/casassaez> > >> >> > > > >> > >> >> > > > >> > >> >> > > > >> On Tue, Sep 1, 2020 at 2:14 PM Tomasz Urbaszek < > >> >> > [email protected]> > >> >> > > > >> wrote: > >> >> > > > >> > >> >> > > > >> > Daniel is right we have few Apache Beam committers in > >> >Polidea so > >> >> > we > >> >> > > > >> > will ask for advice. However, I would be highly in > >favor > >> >of > >> >> > having it > >> >> > > > >> > as Gerard suggested as @beam decorator. This is > >something > >> >we > >> >> > should > >> >> > > > >> > put into another AIP together with the mentioned @spark > >> >decorator. > >> >> > > > >> > > >> >> > > > >> > Our proposition of transfer operators was mainly to > >create > >> >> > something > >> >> > > > >> > Airflow-native that works out of the box and allows us > >to > >> >simplify > >> >> > > > >> > read/write from external sources. Thus, it requires no > >> >external > >> >> > > > >> > dependency other than the library to communicate with > >the > >> >API. In > >> >> > the > >> >> > > > >> > case of Beam we need more than that I think. > >> >> > > > >> > > >> >> > > > >> > Additionally, the ideas of Source and Destination play > >> >nicely with > >> >> > > > >> > data lineage and may bring more interest to this > >feature > >> >of > >> >> > Airflow. > >> >> > > > >> > > >> >> > > > >> > Cheers, > >> >> > > > >> > Tomek > >> >> > > > >> > > >> >> > > > >> > > >> >> > > > >> > On Tue, Sep 1, 2020 at 9:31 PM Kaxil Naik > >> ><[email protected]> > >> >> > > > wrote: > >> >> > > > >> > > > >> >> > > > >> > > Nice. Just a note here, we will need to make sure > >that > >> >those > >> >> > > > "Source" > >> >> > > > >> and > >> >> > > > >> > > "Destination" needs to be serializable. > >> >> > > > >> > > > >> >> > > > >> > > On Tue, Sep 1, 2020, 20:00 Daniel Imberman < > >> >> > > > [email protected] > >> >> > > > >> > > >> >> > > > >> > > wrote: > >> >> > > > >> > > > >> >> > > > >> > > > Interesting! Beam also could potentially allow > >> >transfers > >> >> > within > >> >> > > > >> > Dask/any > >> >> > > > >> > > > other system with a java/python SDK? I think @jarek > >> >and > >> >> > Polidea > >> >> > > > do a > >> >> > > > >> > lot of > >> >> > > > >> > > > work with Beam as well so I’d love their thoughts > >if > >> >this a > >> >> > good > >> >> > > > >> > use-case. > >> >> > > > >> > > > > >> >> > > > >> > > > via Newton Mail [ > >> >> > > > >> > > > > >> >> > > > >> > > >> >> > > > >> > >> >> > > > > >> >> > > >> > >> > https://cloudmagic.com/k/d/mailapp?ct=dx&cv=10.0.50&pv=10.15.6&source=email_footer_2 > >> >> > > > >> > > > ] > >> >> > > > >> > > > On Tue, Sep 1, 2020 at 11:46 AM, Gerard Casas Saez > >< > >> >> > > > >> > [email protected]> > >> >> > > > >> > > > wrote: > >> >> > > > >> > > > I would be highly in favour of having a generic > >Beam > >> >operator. > >> >> > > > >> Similar > >> >> > > > >> > > > to @spark_task decorator. Something where you can > >> >easily > >> >> > define > >> >> > > > and > >> >> > > > >> > wrap a > >> >> > > > >> > > > beam pipeline and convert it to an Airflow > >operator. > >> >> > > > >> > > > > >> >> > > > >> > > > Gerard Casas Saez > >> >> > > > >> > > > Twitter | Cortex | @casassaez > >> ><http://twitter.com/casassaez> > >> >> > > > >> > > > > >> >> > > > >> > > > > >> >> > > > >> > > > On Tue, Sep 1, 2020 at 12:44 PM Austin Bennett < > >> >> > > > >> > > > [email protected]> > >> >> > > > >> > > > wrote: > >> >> > > > >> > > > > >> >> > > > >> > > > > Are you guys familiar with Beam > >> ><https://beam.apache.org>? > >> >> > Esp. > >> >> > > > >> if > >> >> > > > >> > not > >> >> > > > >> > > > > doing transforms, it might rather straightforward > >to > >> >rely > >> >> > on the > >> >> > > > >> > > > ecosystem > >> >> > > > >> > > > > of connectors in that Apache Project to use as > >the > >> >> > foundations > >> >> > > > >> for a > >> >> > > > >> > > > > generic transfer operator. > >> >> > > > >> > > > > > >> >> > > > >> > > > > On Tue, Sep 1, 2020 at 11:05 AM Jarek Potiuk < > >> >> > > > >> > [email protected]> > >> >> > > > >> > > > > wrote: > >> >> > > > >> > > > > > >> >> > > > >> > > > > > +1 > >> >> > > > >> > > > > > > >> >> > > > >> > > > > > On Tue, Sep 1, 2020 at 1:35 PM Kamil Olszewski > >< > >> >> > > > >> > > > > > [email protected]> > >> >> > > > >> > > > > > wrote: > >> >> > > > >> > > > > > > >> >> > > > >> > > > > > > Hello all, > >> >> > > > >> > > > > > > since there have been no new comments shared > >in > >> >the POC > >> >> > doc > >> >> > > > >> > > > > > > < > >> >> > > > >> > > > > > > > >> >> > > > >> > > > > > > >> >> > > > >> > > > > > >> >> > > > >> > > > > >> >> > > > >> > > >> >> > > > >> > >> >> > > > > >> >> > > >> > >> > https://docs.google.com/document/d/1o7Ph7RRNqLWkTbe7xkWjb100eFaK1Apjv27LaqHgNkE/edit > >> >> > > > >> > > > > > > > > >> >> > > > >> > > > > > > for a couple of days, then I will proceed > >with > >> >creating > >> >> > an > >> >> > > > AIP > >> >> > > > >> > for > >> >> > > > >> > > > this > >> >> > > > >> > > > > > > feature, if that is ok with everybody. > >> >> > > > >> > > > > > > Best regards, > >> >> > > > >> > > > > > > Kamil > >> >> > > > >> > > > > > > On Thu, Aug 27, 2020 at 10:50 AM Tomasz > >Urbaszek > >> >< > >> >> > > > >> > > > [email protected] > >> >> > > > >> > > > > > > >> >> > > > >> > > > > > > wrote: > >> >> > > > >> > > > > > > > >> >> > > > >> > > > > > > > I like the approach as it itnroduces > >another > >> >> > interesting > >> >> > > > >> > operators' > >> >> > > > >> > > > > > > > interface standarization. It would be > >awesome > >> >to here > >> >> > more > >> >> > > > >> > opinions > >> >> > > > >> > > > > :) > >> >> > > > >> > > > > > > > > >> >> > > > >> > > > > > > > Cheers, > >> >> > > > >> > > > > > > > Tomek > >> >> > > > >> > > > > > > > > >> >> > > > >> > > > > > > > On Wed, Aug 19, 2020 at 8:10 PM Jarek > >Potiuk < > >> >> > > > >> > > > > [email protected] > >> >> > > > >> > > > > > > > >> >> > > > >> > > > > > > > wrote: > >> >> > > > >> > > > > > > > > >> >> > > > >> > > > > > > > > I like the idea a lot. Similar things > >have > >> >been > >> >> > > > discussed > >> >> > > > >> > before > >> >> > > > >> > > > > but > >> >> > > > >> > > > > > > the > >> >> > > > >> > > > > > > > > proposal is I think rather pragmatic and > >> >solves a > >> >> > real > >> >> > > > >> > problem > >> >> > > > >> > > > (and > >> >> > > > >> > > > > > it > >> >> > > > >> > > > > > > > does > >> >> > > > >> > > > > > > > > not seem to be too complex to implement) > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > There is some discussion about it already > >in > >> >the > >> >> > > > document > >> >> > > > >> > (please > >> >> > > > >> > > > > > > > chime-in > >> >> > > > >> > > > > > > > > for those interested) but here a few > >points > >> >why I > >> >> > like > >> >> > > > it: > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > - performance and optimization is not a > >> >focus for > >> >> > that. > >> >> > > > >> For > >> >> > > > >> > > > generic > >> >> > > > >> > > > > > > stuff > >> >> > > > >> > > > > > > > > it is usually to write "optimal" solution > >> >but once > >> >> > you > >> >> > > > >> admit > >> >> > > > >> > you > >> >> > > > >> > > > > are > >> >> > > > >> > > > > > > not > >> >> > > > >> > > > > > > > > going to focus for optimisation, you come > >> >with > >> >> > simpler > >> >> > > > and > >> >> > > > >> > easier > >> >> > > > >> > > > > to > >> >> > > > >> > > > > > > use > >> >> > > > >> > > > > > > > > solutions > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > - on the other hand - it uses very > >> >"Python'y" > >> >> > approach > >> >> > > > >> with > >> >> > > > >> > using > >> >> > > > >> > > > > > > > > Airflow's familiar concepts (connection, > >> >transfer) > >> >> > and > >> >> > > > has > >> >> > > > >> > the > >> >> > > > >> > > > > > > potential > >> >> > > > >> > > > > > > > of > >> >> > > > >> > > > > > > > > plugging in into 100s of hooks we have > >> >already > >> >> > easily - > >> >> > > > >> > > > leveraging > >> >> > > > >> > > > > > all > >> >> > > > >> > > > > > > > the > >> >> > > > >> > > > > > > > > "providers" richness of Airflow. > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > - it aims to be easy to do "quick start" > >- > >> >if you > >> >> > have a > >> >> > > > >> > number > >> >> > > > >> > > > of > >> >> > > > >> > > > > > > > > different sources/targets and as a data > >> >scientist > >> >> > you > >> >> > > > >> would > >> >> > > > >> > like > >> >> > > > >> > > > to > >> >> > > > >> > > > > > > > quickly > >> >> > > > >> > > > > > > > > start transferring data between them - > >you > >> >can do it > >> >> > > > >> easily > >> >> > > > >> > with > >> >> > > > >> > > > > > only > >> >> > > > >> > > > > > > > > basic python knowledge and simple DAG > >> >structure. > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > - it should be possible to plug it in > >into > >> >our new > >> >> > > > >> functional > >> >> > > > >> > > > > > approach > >> >> > > > >> > > > > > > as > >> >> > > > >> > > > > > > > > well as future lineage discussions as it > >> >makes > >> >> > > > connection > >> >> > > > >> > between > >> >> > > > >> > > > > > > sources > >> >> > > > >> > > > > > > > > and targets > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > - it opens up possibilities of adding > >simple > >> >and > >> >> > > > flexible > >> >> > > > >> > data > >> >> > > > >> > > > > > > > > transformation on-transfer. Not a > >> >replacement for > >> >> > any of > >> >> > > > >> the > >> >> > > > >> > > > > external > >> >> > > > >> > > > > > > > > services that Airflow should use (Airflow > >is > >> >an > >> >> > > > >> > orchestrator, not > >> >> > > > >> > > > > > data > >> >> > > > >> > > > > > > > > processing solution) but for the kind of > >> >quick-start > >> >> > > > >> > scenarios I > >> >> > > > >> > > > > > > foresee > >> >> > > > >> > > > > > > > it > >> >> > > > >> > > > > > > > > might be most useful, being able to apply > >> >simple > >> >> > data > >> >> > > > >> > > > > transformation > >> >> > > > >> > > > > > on > >> >> > > > >> > > > > > > > the > >> >> > > > >> > > > > > > > > fly by data scientist might be a big > >plus. > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > Suggestion: Panda DataFrame as the format > >of > >> >the > >> >> > "data" > >> >> > > > >> > component > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > Kamil - you should have access now. > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > J. > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > On Tue, Aug 18, 2020 at 6:53 PM Kamil > >> >Olszewski < > >> >> > > > >> > > > > > > > > [email protected]> > >> >> > > > >> > > > > > > > > wrote: > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > > Hello all, > >> >> > > > >> > > > > > > > > > in Polidea we have come up with an idea > >> >for a > >> >> > generic > >> >> > > > >> > transfer > >> >> > > > >> > > > > > > operator > >> >> > > > >> > > > > > > > > > that would be able to transport data > >> >between two > >> >> > > > >> > destinations > >> >> > > > >> > > > of > >> >> > > > >> > > > > > > > various > >> >> > > > >> > > > > > > > > > types (file, database, storage, etc.) - > >> >please > >> >> > find > >> >> > > > the > >> >> > > > >> > link > >> >> > > > >> > > > > with a > >> >> > > > >> > > > > > > > short > >> >> > > > >> > > > > > > > > > doc with POC > >> >> > > > >> > > > > > > > > > < > >> >> > > > >> > > > > > > > > > > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > >> >> > > > >> > > > > > > > >> >> > > > >> > > > > > > >> >> > > > >> > > > > > >> >> > > > >> > > > > >> >> > > > >> > > >> >> > > > >> > >> >> > > > > >> >> > > >> > >> > https://docs.google.com/document/d/1o7Ph7RRNqLWkTbe7xkWjb100eFaK1Apjv27LaqHgNkE/edit?usp=sharing > >> >> > > > >> > > > > > > > > > > > >> >> > > > >> > > > > > > > > > where we can discuss the design > >initially. > >> >Once we > >> >> > > > come > >> >> > > > >> to > >> >> > > > >> > the > >> >> > > > >> > > > > > > initial > >> >> > > > >> > > > > > > > > > conclusion I can create an AIP on cWiki > >- > >> >can I > >> >> > ask > >> >> > > > for > >> >> > > > >> > > > > permission > >> >> > > > >> > > > > > to > >> >> > > > >> > > > > > > > do > >> >> > > > >> > > > > > > > > so > >> >> > > > >> > > > > > > > > > (my id is 'kamil.olszewski')? I believe > >> >that > >> >> > during > >> >> > > > the > >> >> > > > >> > > > > discussion > >> >> > > > >> > > > > > we > >> >> > > > >> > > > > > > > > > should definitely aim for this feature > >to > >> >be > >> >> > released > >> >> > > > >> only > >> >> > > > >> > > > after > >> >> > > > >> > > > > > > > Airflow > >> >> > > > >> > > > > > > > > > 2.0 is out. > >> >> > > > >> > > > > > > > > > > >> >> > > > >> > > > > > > > > > What do you think about this idea? > >Would > >> >you find > >> >> > such > >> >> > > > >> an > >> >> > > > >> > > > > operator > >> >> > > > >> > > > > > > > > helpful > >> >> > > > >> > > > > > > > > > in your pipelines? Maybe you already > >use a > >> >similar > >> >> > > > >> > solution or > >> >> > > > >> > > > > know > >> >> > > > >> > > > > > > > > > packages that could be used to > >implement > >> >it? > >> >> > > > >> > > > > > > > > > > >> >> > > > >> > > > > > > > > > Best regards, > >> >> > > > >> > > > > > > > > > -- > >> >> > > > >> > > > > > > > > > > >> >> > > > >> > > > > > > > > > Kamil Olszewski > >> >> > > > >> > > > > > > > > > Polidea <https://www.polidea.com> | > >> >Software > >> >> > Engineer > >> >> > > > >> > > > > > > > > > > >> >> > > > >> > > > > > > > > > M: +48 503 361 783 > >> >> > > > >> > > > > > > > > > E: [email protected] > >> >> > > > >> > > > > > > > > > > >> >> > > > >> > > > > > > > > > Unique Tech > >> >> > > > >> > > > > > > > > > Check out our projects! < > >> >> > > > >> https://www.polidea.com/our-work> > >> >> > > > >> > > > > > > > > > > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > -- > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > Jarek Potiuk > >> >> > > > >> > > > > > > > > Polidea <https://www.polidea.com/> | > >> >Principal > >> >> > Software > >> >> > > > >> > Engineer > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > M: +48 660 796 129 <+48660796129> > >> >> > > > >> > > > > > > > > [image: Polidea] > ><https://www.polidea.com/> > >> >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > >> >> > > > >> > > > > > > > >> >> > > > >> > > > > > > > >> >> > > > >> > > > > > > -- > >> >> > > > >> > > > > > > > >> >> > > > >> > > > > > > Kamil Olszewski > >> >> > > > >> > > > > > > Polidea <https://www.polidea.com> | Software > >> >Engineer > >> >> > > > >> > > > > > > > >> >> > > > >> > > > > > > M: +48 503 361 783 > >> >> > > > >> > > > > > > E: [email protected] > >> >> > > > >> > > > > > > > >> >> > > > >> > > > > > > Unique Tech > >> >> > > > >> > > > > > > Check out our projects! < > >> >> > https://www.polidea.com/our-work> > >> >> > > > >> > > > > > > > >> >> > > > >> > > > > > > >> >> > > > >> > > > > > > >> >> > > > >> > > > > > -- > >> >> > > > >> > > > > > > >> >> > > > >> > > > > > Jarek Potiuk > >> >> > > > >> > > > > > Polidea <https://www.polidea.com/> | Principal > >> >Software > >> >> > > > >> Engineer > >> >> > > > >> > > > > > > >> >> > > > >> > > > > > M: +48 660 796 129 <+48660796129> > >> >> > > > >> > > > > > [image: Polidea] <https://www.polidea.com/> > >> >> > > > >> > > > > > > >> >> > > > >> > > > > > >> >> > > > >> > > >> >> > > > >> > > >> >> > > > >> > > >> >> > > > >> > -- > >> >> > > > >> > > >> >> > > > >> > Tomasz Urbaszek > >> >> > > > >> > Polidea | Software Engineer > >> >> > > > >> > > >> >> > > > >> > M: +48 505 628 493 > >> >> > > > >> > E: [email protected] > >> >> > > > >> > > >> >> > > > >> > Unique Tech > >> >> > > > >> > Check out our projects! > >> >> > > > >> > > >> >> > > > >> > >> >> > > > > > >> >> > > > > > >> >> > > > > -- > >> >> > > > > > >> >> > > > > Jarek Potiuk > >> >> > > > > Polidea <https://www.polidea.com/> | Principal Software > >> >Engineer > >> >> > > > > > >> >> > > > > M: +48 660 796 129 <+48660796129> > >> >> > > > > [image: Polidea] <https://www.polidea.com/> > >> >> > > > > > >> >> > > > > > >> >> > > > > >> >> > > > -- > >> >> > > > > >> >> > > > Jarek Potiuk > >> >> > > > Polidea <https://www.polidea.com/> | Principal Software > >> >Engineer > >> >> > > > > >> >> > > > M: +48 660 796 129 <+48660796129> > >> >> > > > [image: Polidea] <https://www.polidea.com/> > >> >> > > > > >> >> > >
