Player is loading...

Embed

Copy embed code

Transcriptions

Note: this content has been automatically generated.
00:00:00
and this presentation is about creating night the midi file as an entree tops since call and
00:00:05
not before actually start with the presentation uh
00:00:08
it's probably what's showing a very quick them all
00:00:30
yes
00:00:42
so
00:00:44
these are two applications that um exactly run our
00:00:48
own handwritten i. s. and the interesting part products
00:00:52
despite the fact that they are not many people think much uh yeah it's uh
00:00:58
that they are both written skull and not only that but uh
00:01:03
all their affect the crop applications and there is a back and
00:01:07
our service also written is colour that's running are on in the
00:01:11
background so now you can do simple things like delete an entry
00:01:18
refresh here and obviously that's not a select into the other out and
00:01:23
you can also all
00:01:26
access things like photos
00:01:32
and add new entries
00:01:43
and all of that will be shared across the back and
00:01:47
um and again the the the the interesting part about all
00:01:50
of that is that um it's also colour coding even the
00:01:53
details that are exchanged um even videos that are exchange c. to
00:02:01
i'm just silly so the backend part effectively are um star
00:02:07
objects in your shared between the server and the client or so
00:02:15
on this on this talk was actually called me file it's not recaps since colour without years but i had
00:02:21
to amend title but um because it turned out so
00:02:25
well when we were actually writing or that it's um
00:02:29
i don't know that it really wasn't a without much tears so uh as a matter of fact um
00:02:37
that's actually looked how all of that is possible and and and and what's the whole to
00:02:42
talk uh we we took in order to um get to that point sick i just need to
00:02:54
a kind of a separate mike presenter screen here it's
00:03:10
yeah
00:03:16
well anyway i'm still really i imagine that you're put in a situation where you
00:03:23
are a team of developers can you want to have yourself a mobile application right
00:03:28
and there are a few ways that's um a a few different ways that you can that you can go about that
00:03:36
ah one of them is to go d. take it away and
00:03:39
respect the rights um your version for i. s. non direct and
00:03:43
on on fritz you benefit from using java or copy and um it's
00:03:48
it's there's tones of know how to and support in the community um
00:03:53
and you end up with native looking applications that play nicely with the on the on the line platform
00:03:58
not only that but you're running on a mature v. and that's that's you you're probably all quite familiar with
00:04:05
you're running the j. v. m. um owned by us thought you end up writing
00:04:09
chuckled in objective c. o. or swift and now you benefit from great development work full
00:04:15
um you're right thinking x. called probably is so it's quite mature
00:04:19
and well known id that that's also i i actually quite like
00:04:24
and of course you had the added benefit that you run times
00:04:27
tailored towards a particular range of devices because you know apple just has
00:04:32
sort of a limited range of of of devices of hardware that it
00:04:36
produces some like we can direct and of course because site you are um
00:04:42
because you're running an apple and apple take security very seriously so you benefit on uh uh of
00:04:48
that as well in this is especially important if you are in a sort of a more corporate domain
00:04:56
so what are some of the drawbacks all of this particular approach well first of all
00:05:00
introducing a new language or two can be
00:05:03
quite challenge especially in in in teams that are
00:05:07
no i if you don't have it passed far more people and you need people to learn new languages that's that can be
00:05:14
a bit ah heart also going back to an old language
00:05:17
so if you're well old if you're a stella shop and that
00:05:22
it could be quite more lighting for some people to actually write java code to in case they want to do and rate and
00:05:28
you know but the biggest problem is probably the fact that you pretty much end up
00:05:32
having to join called bases so you end up implementing the same feature twice most likely um
00:05:39
four hundred and i live for example and all of that gets um even more painful
00:05:45
if your client logic so if you're apt logic is quite complicated so
00:05:49
in our particular case uh our our application waltz
00:05:54
offline capable so it had quite a bit of um
00:05:57
take quite a bit of logic around if i eventually sinking put the back and so a lot of conflict resolution
00:06:03
about logic written that was not very trivial one meeting that code base into different languages uh can quickly become
00:06:09
quite the bottleneck so what is what is another thing that you can that you can do you can the um
00:06:16
sort of turning a turn yourself towards using technology such as per our new probably are all familiar with that but
00:06:21
just to summarise crowds of high performance jet compiler that uh is written in java
00:06:27
any screw cooks with the g. n. g. v. n. c. i. interface and on top of that you have substrate v. m. that
00:06:33
is um that allows you a compilation of java programs into self
00:06:38
contained caged pupils and uh um as a matter of fact oh
00:06:43
the native image support for that the end up pretty much work would j. v. m. languages that
00:06:47
like jobless collin closer and because the arm sixty
00:06:51
four support is um is currently being worked on you
00:06:56
pretty much can write code in java and run it on a us
00:07:01
right and this is this is actually quite nice so it's in pretty powerful technology however when we
00:07:06
were at the time when we were considering that we there were some drawbacks that that we um
00:07:12
that that the soul and namely one of them was the fact that um
00:07:16
at that point take system around dallas fire support was pretty much nonexistent so you don't only needs
00:07:21
to compile some code and run it on the on the phone that prince cables world uh but
00:07:27
you kind of need to have a mature you i frame or that you can use in
00:07:30
order to design your applications and and um and can't structured i mean in a good way
00:07:36
um so at that point in time that was that was not really present
00:07:39
and or some other restrictions that i'm not going to go into much detail
00:07:43
i'm into but uh if you know riff selection uh well then i
00:07:49
class loading is not really always possible uh if you don't know in advance
00:07:53
all the all the all the things that are gonna be loaded so there's some limitations there that impact this or not that big but the main
00:08:00
point was that work was the one that going in that space and it was not really mature ecosystem
00:08:04
but this is changing so i advise you to actually go and check
00:08:07
out the probably m. talk that's later in this conference and i think
00:08:11
they've made amazing progress in this space that's deserves are being watched
00:08:17
i still another another opportunity that you can obviously i'm kind of look at a stuff
00:08:24
i'd solutions right so hyper mobile applications are
00:08:27
effectively mobile apps their web apps in disguise right
00:08:30
so what you end up using keys the usual run of the mill what's that like javascript c. s. s. h. t. m. l.
00:08:37
and they uh run into with you drink pretty much the same code on
00:08:41
every platform and on some platform like i was they can benefit from um
00:08:46
some part of civic organisations like the need for java script compiler ah
00:08:51
but nevertheless these are effectively web applications that are running on the phone right then
00:08:59
as a matter of fact i'm the one thing that you can probably uh see quite often in that space
00:09:04
is the combination of court topless ionic and um some the parts that make up such an application or though
00:09:10
cordoba web view which is weird application actually random so this is sort of like a web browser in these guys and they
00:09:17
had the whip cap which pretty much contains all the java scripts
00:09:20
logic this past it's h. t. m. l. and c. s. s.
00:09:24
and then you have or bother plug ins that are affecting the plug ins that
00:09:27
cook into the make the functionality of the underlying platform so you can access stuff like
00:09:32
camera on sensors and whatnot and then you most likely um end up implementing your
00:09:39
rap using the ionic framework which is a set of fronting components that try to mimic
00:09:43
the way of um the the we need if um u. i. components look like
00:09:51
and um you know from a schematic point of view i like if you look up that combination you probably see
00:09:57
a picture that looks like this uh you have the web apps and the plug ins of
00:10:01
the sites that you can that you can i'm not into in order to access um functionality and
00:10:07
and and the web that is rendered in the h. t.
00:10:09
m. l. rendering be however um some of the concepts that that
00:10:15
this brings is the fact that you might very well have some performance problems on all the phones and the um
00:10:22
you also um are limited to uh the need to
00:10:26
function that's provided by plug ins and from my research um
00:10:32
but allow goal i. e. not all the plug ins are quite up to date so you're kind of relying on a lot of third party
00:10:39
stuff that that's in the x. system and now of course that
00:10:43
might mention this is not really suited for high end graphics after all
00:10:46
this particular um this particular technologies for is for web applications and um
00:10:53
it's also there is this stink that's not necessarily a um that's
00:10:57
not necessarily a drawback ah it's the cart get that feel quite
00:11:01
native uh from what i've seen but this of course is not
00:11:04
always that because uh they're great apps that that are actually um
00:11:10
such a sporty five for example or whatever they they are great apps they don't look
00:11:13
native at all um but nevertheless they work and did a very nice to use so
00:11:20
another thing that you might consider a start using crack make if right and we act make
00:11:25
if it's a pretty grave framework that allows developers uh to build make applications using java script
00:11:32
and while we're but i actually a reference inside the web you
00:11:36
react make if um is using sneak if u. i. components into the
00:11:39
put for the respect platform so for example next native text input for
00:11:44
i. s. n. and rates will have a corresponding crack make if um
00:11:49
component uh that new uh uh that that you interact with in java script and and
00:11:55
you delegate in it delegates to the native components so in essence there is no
00:12:00
completion of javascript into native code base the intermediate codes uh on the device and
00:12:06
there's no way you h. t. m. l. or c. s. s. so
00:12:11
i'm pretty much the big picture is that you end up with sort of
00:12:15
a two words worlds that are connected you have your native code modules that
00:12:19
are written in objective c. or swift or java and then on the i
00:12:22
had you in the other hand you have a very likely javascript v. m. um
00:12:28
which are runs the javascript called that you've ever written and these two worlds can get over reacted
00:12:33
to branch which is the components that's responsible for between the sort of communication between these two say
00:12:40
and so what happens when you actually run a knock ah readmitted that well above
00:12:45
are pretty much package used g. s. called into single guys file and um applies
00:12:49
some transformations on it then the entry point is loaded on your device and that's wants the
00:12:55
javascript um the internet and and the javascript the the
00:12:59
javascript the anthrax and any defect communicate over the bridge
00:13:03
so if you have to draw it it kind of looks a bit like this you have these
00:13:06
two worlds that are that are connected by the bridge that's passing messages and buy a proprietary topical um
00:13:14
so i'll i'll that's an actual back native up look like from on sort of a anatomy
00:13:19
perspective well it's first oh it's important to understand some of the concepts around react make if
00:13:25
i'm back native apps are built of components in that so uh what's the
00:13:29
building block of applications and these components
00:13:32
in contrast props state and the render logic
00:13:36
and then they had the rent logic which is pretty much a function of state can props and it's
00:13:41
uh as a matter of fact i'm defines how your how your um what can be rendered on screen
00:13:47
props are are much like constructor arguments that they allow
00:13:51
you to permit tries a on to permit tries your components
00:13:55
uh but there that's market because we're make if uses them in order to do some i'm smart
00:14:01
do you think around the rendered logic and then you had state which is
00:14:05
the internal state of the component in a point that could be mutated unlike props
00:14:10
um circuit imitated by input from the user and whatnot and whatever that states may
00:14:15
take it's possible time the result of that is the reevaluation of the render function
00:14:20
and then you also have style which is a special prop that most
00:14:23
of the core components taking kind of defines how your components look like
00:14:28
so how that's very small component look like this is this is sort of a
00:14:32
uh this is a um a a java scripts caught um
00:14:36
you're gonna discover later i promise um that that defines a very simple components that's a pretty much
00:14:43
defines two children components a text input where you can type some text and then
00:14:49
the text box that's gonna reflect what you've packed right and um there is a
00:14:55
there is a um call back function on the text inputs that pretty much
00:14:59
does the state update so updates the state of the component of what you've
00:15:02
just entered then when that happens your render function is reevaluated so you showing
00:15:08
now the new the new the new stuff on screen that event so if you
00:15:13
want to use think about it from a beautiful perspective fit it kind of looks like this you have the root component
00:15:18
and then the state is passed this props so your initial
00:15:21
stages of its initiated based on these props and and props are
00:15:26
path down to the inputs when the input modifies the stated goals asset state by the call back
00:15:33
and they and this triggers revaluation of the root
00:15:36
component render function and effectively stuff changer sanskrit so
00:15:41
if you think about it so far we have a pretty mature technology that's given quite a bit of power for creating native apps
00:15:48
because you're using snake if needed components underneath there is sensible performance
00:15:52
because the sake of components could be an engineer particular for this platform
00:15:57
and on you also have easy access to the platform need the functionalities of the device so um
00:16:04
uh and on top of that you're developing javascript so by that time we already
00:16:08
know that we can use a single language that um that you know is just great
00:16:13
do we actually want that that's that's the question so i'm going for her
00:16:21
we might ask ourselves what we can do better and um in order to answer that question it
00:16:26
it's colleges deserves a look right so it's a
00:16:29
complied up until scott cotton the equivalent javascript one and
00:16:34
the great thing about is that you obtain the long term benefits of writing
00:16:37
code in the start with that language uh no um you you you can
00:16:42
use the that's got like a system di di in in the in the
00:16:45
compiler and and and this is all pretty great especially for people course call developers
00:16:51
um but probably the biggest selling point is the fact that you can share code between the server and the client
00:16:57
and some cross compilation so this this this is probably the biggest seven point something's that you probably
00:17:04
have to consider that when you're doing that is that um no we write increase colour code and that
00:17:10
that that is going to be compact that's coloured yes you probably need to
00:17:13
remember that the do you should really be any blocking everything casey sink and
00:17:18
um there is only open choruses the jays engine is pretty much single threaded as far as i know
00:17:23
and another interesting aspect is that one time type tests are uh are are are based on buttons so so you know
00:17:30
you have for everything that's for example larger definite in twenty
00:17:33
eight um can much short can float or double so um
00:17:39
and you also um need to be aware that to avoid
00:17:42
the additional overheads um of error handling uh the error handling 'cause
00:17:46
simplified so there's no worry in excel bounce exceptions and then
00:17:50
and and that kind of stuff and of course reflection is prohibited
00:17:55
but that make that called elimination quite part and that's that's something
00:17:59
that's um but you see what's important later so what is the
00:18:03
competition pipeline and and and and sort of a birds eye perspective
00:18:08
so that you have the initial compilation that comes your scott files to
00:18:11
doc class and this colour chase intermediate representation and and you can go both a two way
00:18:16
so you can go fast optimisation which pretty much does that called elimination in lining and our uses
00:18:23
your um the size of your output quite significantly but you can also do for optimisation which as far as i
00:18:29
know runs um the um book also compatible that an
00:18:33
advanced optimisation malta and and um this produces human smaller executables
00:18:39
and now this is on the statistics that that i got um that pretty much if you
00:18:43
if you think about it for him for an example problem that's a full output of of around
00:18:49
twenty megabytes after the the the fast stopped you're down to around six hundred kilobytes uh
00:18:55
and then if you run the book over
00:18:57
compiler on top of that um you're effectively um
00:19:03
no you're affected down for around two hundred megabyte um people but still
00:19:09
if we kind of need to step back what what what do we have so far so
00:19:13
um we can we know that we can write java scripts that interfaces directly with native u. i. components right
00:19:19
and we know also that's colour g. s. allows you to write for say it's
00:19:23
for g. s. libraries and use them directly from yours colour code and all that
00:19:29
provides us with the needed parts to actually write some scholar colds that
00:19:34
calls make if components on on on the on the on the blank device
00:19:40
so that's uh that's kind of on the rationale that led us to
00:19:44
creating this framework scar that we're using well for our application development and
00:19:50
star it's affected this it last rites colour colds
00:19:53
that drives your mobile applications and it is compiled java
00:19:59
script and deployed to to your mobile device planted uses yeah make if i'm on to to render things
00:20:07
so um it provides a very thin wrapper around to get
00:20:11
needed primitives and allows for a lot of the right facts
00:20:14
colour code of course was horrible sound recognise and it provides
00:20:19
quite adequate performance as a delegate sneak if u. i. components
00:20:23
and you can also of course leverage the already existing crap eighty frameworks so if
00:20:29
you have to kind of think about what you can do with that it's um
00:20:33
so when you write some stock quotes you can take a a few few weights you can use in
00:20:40
scour the react native core components it just takes flat lists and whatnot that we've provided to say it for
00:20:47
uh you can also put when external reactive component that you write seat for
00:20:52
you can also pull in any javascript library that you write of say for ah but what's probably even
00:20:58
a more great is that that you can cross compile a
00:21:03
light breeze um which colour jess so for example you piccolo
00:21:06
uh no new to us by the how we it's um get your your
00:21:11
libraries that that that you can that you can use butter on your on your
00:21:15
um oh back lantern on your summer because they're cross compartment after all
00:21:19
after you decide to use all of these things or some of them
00:21:22
this all of your cold also this colour just compiler and and the reacted
00:21:26
to blunder picks it up bundles it and runs it on your on your device
00:21:31
so what does the anatomy of a simple apps look like on so again looking at
00:21:35
our javascript coats we we that we already soul looks a bit like this right um
00:21:42
still
00:21:44
uh_huh
00:21:46
if we have to translate up to scotland and using scar it would sort of look like this fact cats um
00:21:54
it's um ah it's this collectible and so if we compare
00:22:00
these two versions it you can quickly see that your structurally
00:22:04
to see so if you're familiar with track native concepts you can
00:22:07
quickly jump and and and and and understand what's going on here um
00:22:12
despite well there is a bit of a difference you know on the skull sites we have
00:22:17
we we have type of object so our props in state are in fact types
00:22:22
that our case classes an um it's not just any kind
00:22:26
of object and so i'm your call back as well it's
00:22:29
tight so you get a string cannot can benefit from all
00:22:32
the stuff around um in your in your in your standard collider
00:22:39
so
00:22:41
um we also provide a a base screen class component that's that's provide you with some some
00:22:46
interesting things so um it contains facilities to enable navigation like going between screens back and forth
00:22:53
and it also contains logic to probably syria lies in this
00:22:56
allies sorry of make props for passing across the g. s. in
00:22:59
the needed direction and it of course also uh in forces the
00:23:03
implementation of the needed functions like render and whatnot also provides you
00:23:07
ah kooks so methods that you can override to put yourself into the life cycle of the
00:23:12
components and it also gives you typed ability to define um your initial state based on tops
00:23:20
so um
00:23:23
apart from apart from all of that um
00:23:28
a lot of applications that are that are actually i'm running
00:23:31
out here on your mobile devices you some kind of assistance so
00:23:36
um we we also wanted to use persistence and we wipes
00:23:42
do you have a database that's that's and that's running on
00:23:45
on the phone on the device and you wanted to actually
00:23:49
well i use instead of just shrinks simple commands we wanted to actually use some kind of a more high level
00:23:55
um query representation for for for that functionality so
00:24:01
we decided to look at quilt and we'll as probably a lot of you know all our all of you um uses
00:24:07
courted queries so it passes a each pull to balk at
00:24:10
compile time and translates into an internal e. s. t. um
00:24:15
and this last for compile time query generation which is a pretty great
00:24:19
because at compile time when you have your a petition it see you can
00:24:24
a quick can generate into the target thing which are for the specific sort of particular platform and
00:24:31
this allows you um to just this provides for quite minimal
00:24:35
overhead um at one time because at the end of the
00:24:38
day at run time you're just ending up with using c.
00:24:42
d. d. roll signal strength or whatever target thing which representation
00:24:47
is and on and this pretty much from overhead perspective just kind of boils down to
00:24:54
almost using a own driver direction supplying simple text so it
00:25:01
to to add benefit of all that is that you can also do come pop
00:25:03
i'm validation against your uh against your um database schema inc will so this is
00:25:09
this is pretty great and of course it didn't extensible because you can cook it
00:25:13
with any kind of database tribe or if you write those those contacts for it
00:25:19
so um we pretty much after so so we putting plaza dependency cross compile
00:25:25
that's collect yes and we ended up being able to do the following right so
00:25:29
this cold that can actually run on the device um you have a lookup
00:25:33
method that pretty much gives you one device back so it looks up from
00:25:36
at at the devices stable and get the first record if there is any so what happens when you run that
00:25:42
first uh when you compare that to the the signal is generated right at that
00:25:47
point um this is tasks to a custom
00:25:52
sickle like context that he wrote um and
00:25:57
but that that's working with twelve and on top of that also rolled of c.
00:26:00
to scholar justice eight for simple liked so there is a react native sickle like
00:26:06
storage plug in that you can use uh and now we put that in as the pen as you roll to see for it um so this is
00:26:14
this this context delegate directly to discuss eight and what send what ends up happening
00:26:19
but in a base that this is getting run on your device and it's calling the sequel light database that's there
00:26:27
so but you know we wanted to kind of uh uh also at a bit more principal out the whole thing
00:26:35
right but i it's we wanted a bit more tight integration between d. b. in in in the u. i. right
00:26:40
can we realised that are why do you actually need to database like
00:26:44
and what do you wanna do with its when you're on the device well
00:26:48
pretty much what's what's end up happening at this in our scenario is quite often is that you want to be able to mutate
00:26:54
the state of our components based on um some changes in the database
00:26:59
that are happening so what we ended up doing is that we decided to write a component that uh
00:27:05
represent the single dispatching three point four all database operations on the device
00:27:10
and there is this mechanism that a dynamic probably subscribe
00:27:12
mechanism for database updates on that are happening on the device
00:27:17
so you end up being able to subscribe to
00:27:20
database changes and use the state dynamically updates on
00:27:25
whenever anything about databases changed and uh this is a pretty great because it propagate across screens as well
00:27:32
so if you have to kind of if we have to illustrate that with a simple example
00:27:37
um what we what we have is imagine we had these c. case class right so
00:27:43
you have um the user state which is a screen state so that the components state
00:27:48
and it's contains the first or last name in the times time when it was lot
00:27:52
right and then you have the playoffs other plaster the screen this is just the user id
00:27:59
oh and so um you also have a user that's the case class that's
00:28:03
the d. v. d. director tried that you're gonna get back from well so
00:28:08
um that's a that's a again a pretty silly example oh oh but that's
00:28:13
as much as i could fit on screen but um so it's it's um
00:28:18
it's an old written which car it's it's a screen that um extent
00:28:23
d. be enabled screen so provide for that database functionality so what happens here is that um
00:28:30
you um
00:28:33
you end up um
00:28:35
when when you when you load your screen uh pretty much you you you pass it props stuff
00:28:41
are the id of some of some user and what's happening is that your way i mean the um
00:28:47
you're looking for a particular user from from energy from the
00:28:51
database and you're displaying it first and last name on screen
00:28:55
and you have a button that and when you press the button what's gonna happen is that you're gonna shove forward reverse
00:29:01
the first name of the user and then you've been up the that into into database and and
00:29:06
um york's your your screen will render in show the
00:29:10
updated version so it's like you're not backed me taking the
00:29:13
state of the screen you're going to the database and that of course goes to to all the rest screens so
00:29:20
pretty from from from a beautiful perspective again i would imagine does that um let's say we have one t. v.
00:29:26
enable screen right then we have this component called the d. v. event dispatcher that we that we um that you provided
00:29:34
um whatever the screen appears what's happening is that um it would
00:29:40
be just as itself with um with the the spotter on mounting like
00:29:45
and um initially treats the state from the database
00:29:51
and displays it
00:29:53
so when you press the button to reverse the name what's
00:29:56
happening is that your shrink a database right command that's um
00:30:02
that that dispatches this right to this this event does did it and
00:30:06
the spectre and piece that right into point is a single entry point um
00:30:13
and these d. v. rights are in a sort of simplicity serial i. stuff and um
00:30:19
when the um this dispatcher rights um uh
00:30:23
rights or to the database and operation completes
00:30:27
all the subscribers crusts cracked screens are not fight that there
00:30:31
is a stick changing database and we need the notification is not
00:30:36
more than just going through through the list in calling the on the b. update method on on on the particular screen
00:30:43
oh and of course you can hook into that screen and most of
00:30:45
the time what you would want to do it is most likely um
00:30:50
pretty much o. v. loads the state from database that you're
00:30:54
interested in uh because you know that there is some state change
00:30:58
and um you know the beauty did you if most of that is so um
00:31:05
that that's another fact this is all um i'll quite
00:31:08
easy to implement because you only you don't really care too
00:31:12
much about concurrence use like three safety because as you know that this who despite the good part to actually run
00:31:19
in the on the javascript yeah i'm on the device so i'll tell you don't need some sense a concurrent data
00:31:25
structures to start out stuff and you don't care about the chin and all that because you know you're safe with that
00:31:32
so we also added uh some um stuff around navigation right so um
00:31:39
there is a there is a um project call to
00:31:43
actually give navigation a week three at nate navigation that um
00:31:48
provides hundred percent native apply for navigation for both
00:31:52
handwritten hours so it's pretty great it it uses so
00:31:56
which is the native navigation functionalities of of done that
00:31:58
like platform it supports various um layouts on such a stack
00:32:04
aptly out and then um it it looks quite nice and it's also
00:32:08
uh provide you additional some some additional like books into the into
00:32:12
the sky life cycle components adjust component to the t. v. section
00:32:18
so uh we really kind of defines these these sort of
00:32:22
the these are some of the methods that are that are um
00:32:25
on this on in j. in yeah in javascript to say it um
00:32:32
and but if you want to read more you probably uh just you're
00:32:35
better off just going to to you and and and checking out under
00:32:38
the act nice navigation but we have that as a dependency and and
00:32:41
and in its um to see that you provide for it um however
00:32:46
uh it's um it's not so directly exposed here using that
00:32:50
but uh we we figured out that you don't really need a
00:32:53
lot more than just going between screens and returning back from
00:32:56
screen and in returning um we also provide some function at fort
00:33:00
uh_huh s. screen hitting the return value so if you go to screen
00:33:04
for example and you you you input your password or something you want
00:33:08
the screen that was that initiated that action to actually obtain the result once it's
00:33:13
done so things like that that provide for a bit more economics around um around development
00:33:19
so with all that said uh there's some um you know there's some
00:33:25
just in tears that that have uh were were present in the whole process uh no um
00:33:31
and that was mainly due to the fact that um
00:33:34
me and i was working with andrei barbara and what's yours doughnuts and and and bullet
00:33:40
an um none of us were really experts and an mobile u. i. development or or
00:33:47
or javascript or react make if or scott yes for that matter
00:33:51
so all that stuff was quite new to us and we encountered some
00:33:55
pretty interesting a tremendous i must say so first of all we had a quite a challenge around blinks right so
00:34:02
i've already mentioned a metro is so um that the buttons are used by yeah make it to bundle of huge is called
00:34:08
to be loaded from the device and it kind of does a few few things that are a little
00:34:12
more multiple so have resolution that pretty much built a graph of all the models that we depend on
00:34:17
in your javascript cult didn't have the transformation which cannibal to mice you since you're jealous holds a just
00:34:23
critical so it does it does um some kinds that analysis and then helped months your telescope called for
00:34:30
and then you have situation would pretty much is the point at which
00:34:33
all all of uh your transform models are combined into a single just fine
00:34:38
uh and uploaded some device now the problem that we get facing was that uh
00:34:44
when we were comparing put what's style okay s. and we had these a pretty big
00:34:49
javascript files uh mitchell was talking on on them right so um
00:34:54
as i said our map is quite known to go into the fluxes
00:34:58
likeable that's got all right and then you end up with the pretty sizable
00:35:03
uh javascript file so what ended up happening is that we started seeing the so um
00:35:10
started seeing this time appears that that that uh that were happening and
00:35:16
and um we just couldn't really get a around not very easily even increasing
00:35:22
the timeout is just not sensible i mean we can for five minutes to
00:35:25
just transform your call it's it's it's it's horrible development experience right so we
00:35:30
started thinking why is that happening and see what is going on ah m. soul
00:35:38
actually what's happening is is quite interesting cracked the transformation face um
00:35:44
uh with uh i've met from a pretty much builds a full wasted
00:35:47
of your old right and that this has been engineer for sizes of uh
00:35:54
a smaller sizes uh in terms of your javascript called source more files
00:35:58
well once you go over like ten megabytes of of of of codes
00:36:02
uh mitchell starts to choke quite quite quickly and we
00:36:08
read that um as a matter of fact it's probably not such
00:36:13
a bad idea to circumvent that transformation face altogether because after all
00:36:17
for our production deployment we are running from the book closer compiler on top of it and and
00:36:24
and uh as far as we've read it's it's tough pretty aggressive optimisation so
00:36:28
most likely we're not getting too much out of the metro transformer itself
00:36:33
so why don't we just forget about it and and and and and
00:36:38
um surpasses and this is exactly what we that i'm still we actually
00:36:44
in in in the in the uh metro um in in the metro
00:36:47
bundling cup pipeline we ah had to write our custom transformer which is
00:36:52
really not all that complicated but what it does is pretty much get um
00:36:57
it's um it looks for it it it looks for the files that
00:37:02
that are output with with with its uh from scott yes and that have been optimised
00:37:06
any just skip skip the transformation face with them and effective for
00:37:11
all the other file suits the delegates the default transformer so um
00:37:17
one of the problems with that was the fact that um we had
00:37:20
some problems with source maps so sick the booking became quite quite quite
00:37:25
what part and that's something that we are still working on to
00:37:28
to sort of figure out what the architect apart from that um
00:37:34
just the we we experience so it was not project that was sort of trying
00:37:38
to the same think and and indeed it uh just called s. r. i. and
00:37:42
uh the think that we noticed with with with this particular
00:37:45
um product is that they were rely quite heavily on um
00:37:51
traits that for extending well
00:37:54
i guess object so all naked javascript classes and uh they had to do that because
00:38:00
so um this is what's for example props need to begin each each of the project
00:38:05
and uh i'm really wanted tactics classes for that try to be competing
00:38:10
scotland and that was that was a bit of a problem so um
00:38:15
uh what what we that is that well we defines this side jess objects
00:38:21
traction that a combined with some mark for magic allows you to pretty much
00:38:25
take your case classes and and and and bundle them into the respective javascript javascript object format um
00:38:33
and uh it was uh it's it's quite interesting that that actually solved
00:38:36
our problem so mathias was working on that and and and it's it's
00:38:40
and he's pretty good with with mcpherson types in general so it's um it
00:38:45
kind of provided for really a lot more economic experience um and
00:38:50
apart from that what's the additional added benefit of that um um
00:38:54
the additional added benefit of all that was that
00:38:57
uh we were able to kind of mold our um
00:39:02
mould our g. s. objects in jest to say it's a little bit better so for example if you
00:39:08
look at the uh make if you need the
00:39:10
view component um in its documentation you quickly see that
00:39:16
oh and it actually contains huge a list of
00:39:21
arguments that this constructor takes as some of them are specific to
00:39:25
buy us some of the more specific two hundred and so um
00:39:31
and this is not not really great firm or organisation perspective
00:39:34
of your cold so we can put this jess object flattened
00:39:37
abstraction that pretty much are the two group these things together into case classes an um and at the end of the day
00:39:45
when when when that gets to the javascript couple that would be exploded in in in
00:39:49
into into be flattened into one long list of fargo and so this allows for better
00:39:54
um organisation of your code so you can have andreas um
00:39:59
just hundred specific top separated into separate case class and and
00:40:03
and i lost tops that that you're that you're working with
00:40:09
so in summary um star is a pretty lightweight framework
00:40:13
that enables you to use colour for your mobile applications unknown
00:40:18
it provides the ergonomic abstractions are for handling that patient persistence and that was something that
00:40:25
the epidemic to aspect it might not be that they're coming to the
00:40:28
community but this was something that we need it and we we we sold
00:40:32
um we saw some of the team points and and we we provide solutions for that
00:40:37
and of course he wasn't yours involved in the development process it it was impulse moves
00:40:41
us um as i said none of us were really that was the first time for
00:40:45
for all of us on what is still undergoing can we
00:40:48
plan to open source that um we just want to make it
00:40:52
a bit more um every comic so and then we we wants to abstract the user
00:40:59
but library as much as possible from all the intricacies around
00:41:02
all day playing crappy flaps and initialise interactive projects whatnot um so
00:41:11
oh this is this is this is kind of it um thank you for all the attention
00:41:14
with and uh i hope you liked that presentation
00:41:18
and i hope you use car once it's out
00:41:28
ooh ooh s. u. t. d. i would like jazz place
00:41:45
uh_huh
00:41:49
yeah it's real question the the humans to use us to
00:41:54
use car once it's that's what used to be really it's
00:41:58
it does is released yeah unfortunately we don't have uh uh we we don't have um
00:42:03
date that's that's set in stone um i i'd say that
00:42:08
the work is done so so this this this think it's running
00:42:11
we're and it's not just kind of an experiment that cycle yeah look at this with
00:42:15
that ah it's near our production up depends on that so so this is working is right
00:42:20
um it's just a matter of really pulling it out and
00:42:24
and open sourcing x. and then that was my class or select
00:42:27
yeah i should have been ready by now but unfortunately uh you know you're always like ninety nine percent rating in this case
00:42:34
but even started uh so i i hope that like after the conference i'll have a a bit
00:42:39
more time so i hope i'll take the prime and then actually open source that it's all about just
00:42:46
admin stuff really just putting it can give up sitting a bill
00:42:49
tracking some fast tracking proper documentation so it's easy for everyone to
00:42:54
kind of approach that's um but i think it's a very interesting thing because uh it's
00:43:00
the big part about is that you be managed she or scallop hold that is
00:43:06
the d. v. nontrivial i mean we have some very complicated colour block around conflict
00:43:10
resolution and conflict that we're types get shape this and this and that you know
00:43:14
that it's share in our common modern ones both in the back and and on
00:43:19
and refer minutes so it's it's great thanks to scott yes most of it is
00:43:30
uh so uh i see a two questions one these uh uh uh was released
00:43:38
to uh we did the enough mature isn't too isn't that will prove recently use
00:43:43
to the set was used at all and the question is it does it attendants in a movie it
00:43:50
native rice it was uh in the good this is new enjoyed it
00:43:54
will unite loses new ah it's a huge uh some changes and uh you
00:43:59
you need to wait and see did we yeah we it's native respond
00:44:02
to that and there was a huge something huge respond to rise so uh
00:44:06
d. c. to your company you would be to get up to you know make
00:44:09
changes to work with you buttons who will hopefully yeah i mean it's what first all
00:44:15
to the first question it's it's that's like not released yet
00:44:19
right because he'd get documentation and then store l. somewhat not
00:44:23
uh so that's why it's not released a and secondly um
00:44:26
yes i hope that you had asked you to quickly enough oh
00:44:31
you know what kind of a follow up with people realise affect me different whatnot although e.
00:44:36
it's not it's easier always some problem symbols to be honest like the second system
00:44:41
is very yeah there's always some problems impulse that i hope to be able to
00:44:46
to provide adequate support and after all this is why it's released to the community so the
00:44:50
community itself can also pick it up and and and work that and hopefully provide some support
00:44:56
yeah i just a to g. u. p. did you know buttons was right so if you
00:45:01
was you guys offices it and many to many many more people can have right yep exactly exactly
00:45:06
and we don't really know whether people or actually said about that or whether they're actually gonna pick
00:45:10
up and use it because it's yeah don't put in all the peoples useful tossed aside thank you
00:45:19
ooh ooh ooh ooh
00:45:29
when she does this

Share this talk: 


Conference Program

Welcome!
June 11, 2019 · 5:03 p.m.
1574 views
A Tour of Scala 3
Martin Odersky, Professor EPFL, Co-founder Lightbend
June 11, 2019 · 5:15 p.m.
8330 views
A story of unification: from Apache Spark to MLflow
Reynold Xin, Databricks
June 12, 2019 · 9:15 a.m.
1267 views
In Types We Trust
Bill Venners, Artima, Inc
June 12, 2019 · 10:15 a.m.
1569 views
Creating Native iOS and Android Apps in Scala without tears
Zahari Dichev, Bullet.io
June 12, 2019 · 10:16 a.m.
2230 views
Techniques for Teaching Scala
Noel Welsh, Inner Product and Underscore
June 12, 2019 · 10:17 a.m.
1292 views
Future-proofing Scala: the TASTY intermediate representation
Guillaume Martres, student at EPFL
June 12, 2019 · 10:18 a.m.
1152 views
Metals: rich code editing for Scala in VS Code, Vim, Emacs and beyond
Ólafur Páll Geirsson, Scala Center
June 12, 2019 · 11:15 a.m.
4695 views
Akka Streams to the Extreme
Heiko Seeberger, independent consultant
June 12, 2019 · 11:16 a.m.
1552 views
Scala First: Lessons from 3 student generations
Bjorn Regnell, Lund Univ., Sweden.
June 12, 2019 · 11:17 a.m.
577 views
Cellular Automata: How to become an artist with a few lines
Maciej Gorywoda, Wire, Berlin
June 12, 2019 · 11:18 a.m.
386 views
Why Netflix ❤'s Scala for Machine Learning
Jeremy Smith & Aish, Netflix
June 12, 2019 · 12:15 p.m.
5016 views
Massively Parallel Distributed Scala Compilation... And You!
Stu Hood, Twitter
June 12, 2019 · 12:16 p.m.
958 views
Polymorphism in Scala
Petra Bierleutgeb
June 12, 2019 · 12:17 p.m.
1112 views
sbt core concepts
Eugene Yokota, Scala Team at Lightbend
June 12, 2019 · 12:18 p.m.
1652 views
Double your performance: Scala's missing optimizing compiler
Li Haoyi, author Ammonite, Mill, FastParse, uPickle, and many more.
June 12, 2019 · 2:30 p.m.
833 views
Making Our Future Better
Viktor Klang, Lightbend
June 12, 2019 · 2:31 p.m.
1682 views
Testing in the postapocalyptic future
Daniel Westheide, INNOQ
June 12, 2019 · 2:32 p.m.
498 views
Context Buddy: the tool that knows your code better than you
Krzysztof Romanowski, sphere.it conference
June 12, 2019 · 2:33 p.m.
393 views
The Shape(less) of Type Class Derivation in Scala 3
Miles Sabin, Underscore Consulting
June 12, 2019 · 3:30 p.m.
2321 views
Refactor all the things!
Daniela Sfregola, organizer of the London Scala User Group meetup
June 12, 2019 · 3:31 p.m.
513 views
Integrating Developer Experiences - Build Server Protocol
Justin Kaeser, IntelliJ Scala
June 12, 2019 · 3:32 p.m.
551 views
Managing an Akka Cluster on Kubernetes
Markus Jura, MOIA
June 12, 2019 · 3:33 p.m.
735 views
Serverless Scala - Functions as SuperDuperMicroServices
Josh Suereth, Donna Malayeri & James Ward, Author of Scala In Depth; Google ; Google
June 12, 2019 · 4:45 p.m.
935 views
How are we going to migrate to Scala 3.0, aka Dotty?
Lukas Rytz, Lightbend
June 12, 2019 · 4:46 p.m.
709 views
Concurrent programming in 2019: Akka, Monix or ZIO?
Adam Warski, co-founders of SoftwareMill
June 12, 2019 · 4:47 p.m.
1973 views
ScalaJS and Typescript: an unlikely romance
Jeremy Hughes, Lightbend
June 12, 2019 · 4:48 p.m.
1376 views
Pure Functional Database Programming‚ without JDBC
Rob Norris
June 12, 2019 · 5:45 p.m.
6365 views
Why you need to be reviewing open source code
Gris Cuevas Zambrano & Holden Karau, Google Cloud;
June 12, 2019 · 5:46 p.m.
483 views
Develop seamless web services with Mu
Oli Makhasoeva, 47 Degrees
June 12, 2019 · 5:47 p.m.
785 views
Implementing the Scala 2.13 collections
Stefan Zeiger, Lightbend
June 12, 2019 · 5:48 p.m.
810 views
Introduction to day 2
June 13, 2019 · 9:10 a.m.
250 views
Sustaining open source digital infrastructure
Bogdan Vasilescu, Assistant Professor at Carnegie Mellon University's School of Computer Science, USA
June 13, 2019 · 9:16 a.m.
373 views
Building a Better Scala Community
Kelley Robinson, Developer Evangelist at Twilio
June 13, 2019 · 10:15 a.m.
245 views
Run Scala Faster with GraalVM on any Platform
Vojin Jovanovic, Oracle
June 13, 2019 · 10:16 a.m.
1337 views
ScalaClean - full program static analysis at scale
Rory Graves
June 13, 2019 · 10:17 a.m.
463 views
Flare & Lantern: Accelerators for Spark and Deep Learning
Tiark Rompf, Assistant Professor at Purdue University
June 13, 2019 · 10:18 a.m.
380 views
Metaprogramming in Dotty
Nicolas Stucki, Ph.D. student at LAMP
June 13, 2019 · 11:15 a.m.
1250 views
Fast, Simple Concurrency with Scala Native
Richard Whaling, data engineer based in Chicago
June 13, 2019 · 11:16 a.m.
623 views
Pick your number type with Spire
Denis Rosset, postdoctoral researcher at Perimeter Institute
June 13, 2019 · 11:17 a.m.
244 views
Scala.js and WebAssembly, a tale of the dangers of the sea
Sébastien Doeraene, Executive director of the Scala Center
June 13, 2019 · 11:18 a.m.
661 views
Performance tuning Twitter services with Graal and ML
Chris Thalinger, Twitter
June 13, 2019 · 12:15 p.m.
2003 views
Supporting the Scala Ecosystem: Stories from the Line
Justin Pihony, Lightbend
June 13, 2019 · 12:16 p.m.
162 views
Compiling to preserve our privacy
Manohar Jonnalagedda and Jakob Odersky, Inpher
June 13, 2019 · 12:17 p.m.
301 views
Building Scala with Bazel
Natan Silnitsky, wix.com
June 13, 2019 · 12:18 p.m.
564 views
242 views
Asynchronous streams in direct style with and without macros
Philipp Haller, KTH Royal Institute of Technology in Stockholm
June 13, 2019 · 3:45 p.m.
303 views
Interactive Computing with Jupyter and Almond
Sören Brunk, USU Software AG
June 13, 2019 · 3:46 p.m.
680 views
Scala best practices I wish someone'd told me about
Nicolas Rinaudo, CTO of Besedo
June 13, 2019 · 3:47 p.m.
2679 views
High performance Privacy By Design using Matryoshka & Spark
Wiem Zine El Abidine and Olivier Girardot, Scala Backend Developer at MOIA / co-founder of Lateral Thoughts
June 13, 2019 · 3:48 p.m.
752 views
Immutable Sequential Maps – Keeping order while hashed
Odd Möller
June 13, 2019 · 4:45 p.m.
275 views
All the fancy things flexible dependency management can do
Alexandre Archambault, engineer at the Scala Center
June 13, 2019 · 4:46 p.m.
389 views
ScalaWebTest - integration testing made easy
Dani Rey, Unic AG
June 13, 2019 · 4:47 p.m.
466 views
Mellite: An Integrated Development Environment for Sound
Hanns Holger Rutz, Institute of Electronic Music and Acoustics (IEM), Graz
June 13, 2019 · 4:48 p.m.
213 views
Closing panel
Panel
June 13, 2019 · 5:54 p.m.
400 views