-
YEHUDA: Hey, so, EmberConf 2015
-
this is the second time we're doing EmberConf
-
and it's twice as big or something as last year
-
There are 625 plus attendees,
-
we didn't count everybody in here
-
but it looks full
-
and there are 625 seats in here, so, great
-
also Tom hand counted 25 countries
-
on the Excel spreadsheet, so...
-
TOM: Well, it's actually 24, but I consider
-
New Jersey it's own country, so
-
YEHUDA: We need the rimshot
-
So, Ember is actually doing really great
-
Ember is growing a lot in a lot of different ways
-
and we wanted to talk a little bit about that
-
just to start, so obviously as we said
-
there's more EmberConf attendees,
-
there's twice as many
-
every year when we decide to go with,
-
you know, 625, that's the number this year
-
we're like "are we going to be able to sell out"
-
and as usual it sold out super fast, right, so
-
great. There's more Ember CLI users,
-
way more than there were last year
-
when Ember CLI was barely a thing.
-
We announced it at EmberConf last year.
-
Way more addons, if you go to
-
emberaddons.com, there's hundreds
-
and hundreds of addons now for Ember.
-
There's also more apps, and I thought
-
we'd highlight a few of them, that
-
came out this year, apps that happened
-
this year. So first of all, Square Cash,
-
that's an Ember app you may not have known
-
about, yeah, go Square.
-
Heroku Dashboard, announced this year
-
TOM: Yeah! That is awesome.
-
YEHUDA: This is actually a really awesome app
-
I often see accolades on Twitter,
-
about the Heroku Dashboard,
-
people who may not know it's
-
an Ember app. Ghost switched to
-
Ember this year, so now it's another
-
big open source project using Ember.
-
The app Beatport, I think Tom
-
knows more about Beatport than me.
-
TOM: It's like a hip DJ thing, you
-
wouldn't really know about it.
-
[audience laughter]
-
Intercom.io, did a large rework in Ember
-
this year. Consul, which is like Hashicorp's
-
new thing, is written in Ember.
-
Customer.io is written in Ember,
-
and the Nest Store is written in Ember.
-
So a whole bunch of new apps that you may
-
have heard of that are written in Ember
-
and this is actually something that maybe
-
doesn't get captured that effectively
-
when you're looking at some random trend
-
graph that someone's passing around
-
is, how many really big apps end up
-
being written in Ember? Ember's really
-
competing in the big app space, and
-
we do really well in that space.
-
TOM: And, probably the biggest thing for me,
-
the most awesome thing, is seeing the
-
number of meetups, spring up around the
-
world, that list on the Ember Community page
-
listing all the different cities around the world
-
that have their own meetups. It's just been
-
really heartwarming. And, actually, today
-
we have a special guest, here, someone
-
who has been spending a lot of their time
-
travelling the world, sharing their love
-
about Ember.
-
[laughter, applause]
-
Tomster.
-
TOM: So, we will have an opportunity, we
-
have a photo booth, you will be able
-
to have your photo taken. Alright,
-
have to get you a little hamster
-
treadmill. Alright, so say hi to
-
Tomster everyone, he's here!
-
Alright.
-
YEHUDA: Thank you.
-
TOM: Thank you Tomster.
-
YEHUDA: And we had a little video
-
we put together, just to showcase
-
some of the awesome meetups
-
we've been having.
-
My name is Jamie, and I
-
run the Ember user group
-
here in London, England.
-
Hey, my name is Luke,
-
and I'm the organizer
-
of Ember.js NYC.
-
Hi, I'm Kait, with the
-
Ember Portland group.
-
I'm Carsten
-
Mattia
-
Jorge
-
And I'm Megan
-
And together with the trope
-
formerly known as
-
Robin Ward, we've been coordinating
-
with Toronto Ember.js user groups
-
since about November of 2012.
-
Our meetup started in 2012.
-
We have been doing this since 2012,
-
I think.
-
We have over 500 members
-
and growing.
-
We currently have just around
-
400 members and are continuing to grow.
-
We have roughly 220 members,
-
but we're growing a lot.
-
We have been consistent,
-
great talks, [..]
-
incredible community here in
-
New York. I have made so many
-
friends and met so many great people.
-
We also hold Ember Hacker Hours,
-
where members of the Ember community
-
can get together, learn and hack on
-
Ember with other developers,
-
while having a chance to socialize
-
and get to know other members
-
in the community.
-
We've held 28 events including meetups,
-
project nights and hackathons.
-
to have you come visit us. Bye!
-
Ember!
-
[applause]
-
Not Synced
(You're on the big screen.) Cheers everybody.
-
Not Synced
Long live Ember.
-
Not Synced
[...] if I do scoot forward a little bit.
-
Not Synced
What if we do something like
-
Not Synced
where we just scooted forward all
-
Not Synced
of the team? [..]
-
Not Synced
What if we all like run by and scream
-
Not Synced
happy things about Ember?
-
Not Synced
Happy things about Ember.
-
Not Synced
Or if we just say "yay!"
-
Not Synced
Yay!
-
Not Synced
[applause]
-
Not Synced
TOM: Alright, thanks.
-
Not Synced
Leah, Leah put that together.
-
Not Synced
She sent out a request for all the little videos.
-
Not Synced
It's really awesome to see,
-
Not Synced
you know as a community run project,
-
Not Synced
to see all these user groups springing up around the world.
-
Not Synced
YEHUDA: And the next thing I want to talk about
-
Not Synced
is the core team. And, so here's the core team
-
Not Synced
today, it's a good group.
-
Not Synced
One thing that I like to talk about,
-
Not Synced
when I talk about the core team,
-
Not Synced
is just how many different groups
-
Not Synced
are represented here. It's not,
-
Not Synced
one company that does most of the work.
-
Not Synced
It's really a bunch of different companies.
-
Not Synced
I like to think of Postgres as an examplar
-
Not Synced
for me. I like our core team to be as many,
-
Not Synced
as diverse as possible.
-
Not Synced
And today, we're going to announce that
-
Not Synced
we're adding 3 new people to the
-
Not Synced
Ember Core team.
-
Not Synced
[applause]
-
Not Synced
These are 3 new people from 3 new
-
Not Synced
companies who haven't previously been
-
Not Synced
on the Ember Core team.
-
Not Synced
And all three of them have been doing
-
Not Synced
amazing work. Martin and "mixonic"
-
Not Synced
have been doing great work on the
-
Not Synced
HTMLBars engine, which has landed
-
Not Synced
recently, we'll talk about that more.
-
Not Synced
And Edward has actually done a lot of work,
-
Not Synced
starting with Liquid Fire, which is a pretty
-
Not Synced
awesome animation library if you
-
Not Synced
haven't used it yet.
-
Not Synced
Since he's been around the core team,
-
Not Synced
he's been doing a lot of RFCs, and
-
Not Synced
work in more general areas.
-
Not Synced
So thank you, welcome to all three of them.
-
Not Synced
TOM: Yeah. Give 'em a round of applause.
-
Not Synced
[applause]
-
Not Synced
TOM: So, since last year, hopefully many
-
Not Synced
of you were here. We've been really busy.
-
Not Synced
And we made a lot of promsies in that
-
Not Synced
keynote, so we're gonna do a little bit
-
Not Synced
of report card, if you will, and let you know
-
Not Synced
what we tried, and what worked last year.
-
Not Synced
So the first thing is rapid release.
-
Not Synced
Last EmberConf, I think we were on version 1.4.
-
Not Synced
So we had introduced this rapid release train
-
Not Synced
model of releasing new versions.
-
Not Synced
But we were only at version 4.
-
Not Synced
And I'm here to report,
-
Not Synced
I think you'll all agree with me.
-
Not Synced
That model has been amazing.
-
Not Synced
We are extremely happy with the results
-
Not Synced
of having a six-week release cycle,
-
Not Synced
so we can rapidly get new features
-
Not Synced
into your hands, and you can use them
-
Not Synced
as soon as possible.
-
Not Synced
It's also been great for us,
-
Not Synced
as maintainers, because it takes the pressure off.
-
Not Synced
We know that if the feature's not ready,
-
Not Synced
we don't have to rush to ship it
-
Not Synced
in a big-bang release, we can just sneak
-
Not Synced
it into the next train.
-
Not Synced
YEHUDA: And when we started to do this,
-
Not Synced
we basically had Chrome and Firefox as models,
-
Not Synced
but now you're starting to see other projects,
-
Not Synced
like the Rust project has recently announced
-
Not Synced
that they're also going to do this rapid release
-
Not Synced
project. So it's great that we were able to do
-
Not Synced
a little R&D, to see if this thing that works well
-
Not Synced
for browser engines could work outside
-
Not Synced
of the browser space. But it's worked really great.
-
Not Synced
And here's an example tweet,
-
Not Synced
there's tons of tweets like this,
-
Not Synced
of people who go from a pretty early version
-
Not Synced
and then jump directly through many versions.
-
Not Synced
Obviously we're in a dynamic language,
-
Not Synced
JavaScript, and you can do a lot of stuff,
-
Not Synced
so you know, you may have ended up doing
-
Not Synced
something using some private API
-
Not Synced
that wasn't expected,
-
Not Synced
or doing something we didn't expect.
-
Not Synced
But for the most part,
-
Not Synced
people have a really good time upgrading,
-
Not Synced
even though we've been releasing a huge
-
Not Synced
amount of releases. And that's, that's really,
-
Not Synced
we're very proud of that.
-
Not Synced
TOM: And if you're not doing it already,
-
Not Synced
I would really encourage you,
-
Not Synced
all your Ember apps at work,
-
Not Synced
or at home, subscribe to the beta channel.
-
Not Synced
When a new beta comes out, please
-
Not Synced
test it on your app and let us know
-
Not Synced
if it breaks anything. That's really
-
Not Synced
the only way we can know and we
-
Not Synced
really rely on that beta process,
-
Not Synced
and you filing any bugs, any regressions
-
Not Synced
that you run into.
-
Not Synced
YEHUDA: We effectively rely on people
-
Not Synced
complaining a lot during the beta process
-
Not Synced
so by the time it makes it to the release process
-
Not Synced
the bugs have been ironed out.
-
Not Synced
Specifically compatibility issues.
-
Not Synced
TOM: Please don't feel like a jerk
-
Not Synced
for complaining.
-
Not Synced
It's actually, it's not a bug, it's a feature.
-
Not Synced
And we couldn't do this without Robert Jackson.
-
Not Synced
Robert Jackson has been, [applause]
-
Not Synced
Robert has been the conductor
-
Not Synced
of the release train for a long time,
-
Not Synced
it makes me a little bit nervous,
-
Not Synced
if he gets hit by a bus we should
-
Not Synced
all pack it up and go home.
-
Not Synced
It's not going to be pretty.
-
Not Synced
So thank you very much Robert.
-
Not Synced
If any of you see him out, tonight,
-
Not Synced
or during the conference,
-
Not Synced
please feel free to get him a beer,
-
Not Synced
as suggested by getrwjblueabeer.com
-
Not Synced
YEHUDA: One thing we added to the rapid release
-
Not Synced
process, and this was something we actually got
-
Not Synced
from the Rust project, is adding a process
-
Not Synced
of RFCs. So we have the three Tomster bust,
-
Not Synced
and this is the "blueprint" Tomster bust,
-
Not Synced
that represents the RFC process.
-
Not Synced
But if you look, there's a couple dozen
-
Not Synced
RFCs now that were contributed by
-
Not Synced
people on the core team, also
-
Not Synced
community members. And this is the
-
Not Synced
point where people have an opportunity
-
Not Synced
to propose new ideas, and get some
-
Not Synced
feedback before people go to implement.
-
Not Synced
One thing that's really great about RFCs,
-
Not Synced
is that not everyone necessarily has
-
Not Synced
the chops to go in and do some
-
Not Synced
deep implementation work, but RFCs
-
Not Synced
are an opportunity for someone to give
-
Not Synced
a high level idea, and get really detailed
-
Not Synced
technical feedback on feasibility.
-
Not Synced
You can throw something out there and
-
Not Synced
get people who know the area to check
-
Not Synced
you and make sure it makes sense
-
Not Synced
before you go and do implementation work.
-
Not Synced
So this is a great addition to the process.
-
Not Synced
TOM: So, we talked a little about process.
-
Not Synced
Let's talk about some of the features that we've landed.
-
Not Synced
Probably the biggest one, the one
-
Not Synced
that was certainly the most hyped up
-
Not Synced
at EmberConf last year,
-
Not Synced
was HTMLBars.
-
Not Synced
So how did we do?
-
Not Synced
Well, we landed it.
-
Not Synced
It's out. The latest released version of Ember,
-
Not Synced
now contains HTMLBars. And we're very happy.
-
Not Synced
It took a little bit longer than we wanted it to take
-
Not Synced
admittedly, but we're very happy with
-
Not Synced
the results.
-
Not Synced
YEHUDA: So the first thing that it does,
-
Not Synced
just to remind you what HTMLBars
-
Not Synced
was about, since we, I think
-
Not Synced
announced it at the last EmberConf
-
Not Synced
and it took until now to release.
-
Not Synced
So, the biggest thing that this did
-
Not Synced
was remove this dreaded syntax
-
Not Synced
and replaces it with this.
-
Not Synced
So that's pretty great.
-
Not Synced
[applause]
-
Not Synced
And that feature, that particular feature,
-
Not Synced
lands in the 1.11 beta, so if you get
-
Not Synced
the beta channel right now, you can
-
Not Synced
go and change all of your bind-attrs
-
Not Synced
in your app. I've done that in my app
-
Not Synced
and it's very, very nice.
-
Not Synced
The next big feature, and this wasn't part of the
-
Not Synced
original idea for HTMLBars, but it sort of
-
Not Synced
came along with it as Handlebars itself
-
Not Synced
progressed. If you look at existing Ember,
-
Not Synced
you'll see that there's a few different ways
-
Not Synced
that in Ember you can have a block
-
Not Synced
that has some additional context
-
Not Synced
that gets used inside of it.
-
Not Synced
So we have "each item in list",
-
Not Synced
we have "with long.title as t",
-
Not Synced
and then we have components,
-
Not Synced
which don't really have any good way
-
Not Synced
of having the component provide anything
-
Not Synced
inside of the block that you're using.
-
Not Synced
And these three ended up feeling very similar,
-
Not Synced
in programming languages, these things
-
Not Synced
are just functions that take parameters.
-
Not Synced
What we've done is unify that into one API,
-
Not Synced
which is block parameters. [applause]
-
Not Synced
You can use the syntax today, it actually landed.
-
Not Synced
One thing to note is that these block params
-
Not Synced
for components, are not just something that is
-
Not Synced
magic inside of Ember. Any component can
-
Not Synced
just yield anything.
-
Not Synced
When you say "yield day" over there,
-
Not Synced
that just means that that becomes the
-
Not Synced
block parameter for the outer component.
-
Not Synced
Right, so this is very easy, it's trivial to use,
-
Not Synced
and it basically gives you the feature that
-
Not Synced
you need and it already landed in 1.10.
-
Not Synced
So this is very exciting.
-
Not Synced
The last thing that HTMLBars does in theory,
-
Not Synced
although this has not landed yet,
-
Not Synced
is it allows you to take components
-
Not Synced
that look like this,
-
Not Synced
and convert them into components
-
Not Synced
that look like this.
-
Not Synced
That actually exists in Canary, but there's
-
Not Synced
some details to work out about exactly,
-
Not Synced
precisely how this works.
-
Not Synced
But the HTMLBars engine enables the capability
-
Not Synced
of doing this, and that's something we're all very
-
Not Synced
excited about.
-
Not Synced
TOM: It's also allowed us to have a rendering
-
Not Synced
engine that's significantly faster than it was before,
-
Not Synced
And uses less memory.
-
Not Synced
So hopefully if you've upgraded to the newest
-
Not Synced
release that contains HTMLBars,
-
Not Synced
you should see better performance
-
Not Synced
across the board and reduced memory usage.
-
Not Synced
And you should expect to see us continue
-
Not Synced
to iterate on that performance and memory
-
Not Synced
benefits that HTMLBars gives us as we
-
Not Synced
proceed through the release cycle.
-
Not Synced
YEHUDA: The tl;dr is basically just,
-
Not Synced
rebuilding the rendering engine
-
Not Synced
from the bottom up gave us a lot
-
Not Synced
of headroom to make additional changes.
-
Not Synced
TOM: And then it turns out that having
-
Not Synced
an HTML parser is useful for a lot more
-
Not Synced
reasons than just implementing the rendering
-
Not Synced
engine. For one thing, it turns out
-
Not Synced
that I am a very bad programmer,
-
Not Synced
and I malform my HTML all the time.
-
Not Synced
Unfortunately, Good Guy Browser decides
-
Not Synced
that that's awesome, and just proceeds as
-
Not Synced
though nothing was wrong, and tries
-
Not Synced
to have my back. Unfortunately,
-
Not Synced
it's not really doing me a favor.
-
Not Synced
So one of my favourite features of HTMLBars,
-
Not Synced
is that at compile-time, we can tell you
-
Not Synced
that you have malformed HTML in your app
-
Not Synced
and give you a warning before you start debugging
-
Not Synced
weird errors in production.
-
Not Synced
YEHUDA: And actually, one thing to keep
-
Not Synced
in mind about our HTML engine-- parser,
-
Not Synced
is that it's a fully compliant HTML
-
Not Synced
parser. So any HTML that wasn't an error
-
Not Synced
in the first place, that you copied-and-pasted
-
Not Synced
in, you don't have to learn a new syntax
-
Not Synced
or anything, it basically just works,
-
Not Synced
but we've implemented a parser that's compliant.
-
Not Synced
And finally, this is a thing
-
Not Synced
that sucks. Maybe if you've only started
-
Not Synced
using Ember really recently, you haven't
-
Not Synced
experienced this, but we have basically killed
-
Not Synced
the metamorph tag.
-
Not Synced
[applause]
-
Not Synced
TOM: Gone baby gone.
-
Not Synced
YEHUDA: Now the next big feature that we did,
-
Not Synced
and I remember, we had already got the inspector
-
Not Synced
working at last year's EmberConf,
-
Not Synced
but we've made a huge amount of progress since then.
-
Not Synced
So, one thing that really stuck in my craw,
-
Not Synced
a lot was I would often be using the wrong version
-
Not Synced
of jQuery or something, and just not know.
-
Not Synced
And I would be like, it really feels like the
-
Not Synced
inspector could just put an info tab that
-
Not Synced
tells me all the things that's going on.
-
Not Synced
So we did that pretty early last year
-
Not Synced
And this is something that's extensible,
-
Not Synced
so any plugin, an addon, can basically
-
Not Synced
put additional stuff into this pane
-
Not Synced
to give you an idea of what versions are running.
-
Not Synced
So this is, small, but it's something
-
Not Synced
that I've spent a lot of time failing
-
Not Synced
due to not having in the past.
-
Not Synced
Second of all, the Ember Data pane
-
Not Synced
has gotten a lot better, and this is
-
Not Synced
just you can see we've gone to the
-
Not Synced
Nest website and we're just looking
-
Not Synced
at a product here.
-
Not Synced
Basically it works really well,
-
Not Synced
so, I don't really have anything else to
-
Not Synced
say on Ember Data, other than it works,
-
Not Synced
the inspector works great.
-
Not Synced
Also the promises pane, I think was
-
Not Synced
either not working last year or barely
-
Not Synced
working, and it's gotten a lot better
-
Not Synced
since last year. If you've ever had to
-
Not Synced
deal with debugging promises,
-
Not Synced
the fact that you can go in here and see all
-
Not Synced
the promises, which ones were rejected,
-
Not Synced
you can get stack traces.
-
Not Synced
All that stuff is pretty awesome,
-
Not Synced
given that you're dealing with
-
Not Synced
asynchronous stuff that inherently
-
Not Synced
is harder to debug.
-
Not Synced
And finally,
-
Not Synced
we also have a Render Performance tab,
-
Not Synced
Robin Ward contributed this.
-
Not Synced
And this basically will just show you
-
Not Synced
for any given rendering, what happened
-
Not Synced
and what took time. So you can drill down,
-
Not Synced
and say "okay, I can see that this little
-
Not Synced
area is a thing that took 100ms" and
-
Not Synced
go and optimize that area.
-
Not Synced
And we couldn't really cover everything,
-
Not Synced
but there's been a huge amount of inspector
-
Not Synced
improvements over the past year,
-
Not Synced
including things like Firefox support,
-
Not Synced
changing the UI, having a navbar
-
Not Synced
that tells you if Ember is running
-
Not Synced
on a particular page, that you can
-
Not Synced
turn on the options, these are all great.
-
Not Synced
The bookmarklet is actually maybe my favourite feature.
-
Not Synced
You can put the Ember Inspector as a bookmarklet,
-
Not Synced
into like Internet Explorer or something,
-
Not Synced
and have it work -- or Safari.
-
Not Synced
So, those are all great.
-
Not Synced
And I just want to thank @teddyzeenny,
-
Not Synced
who's really been,
-
Not Synced
who's actually at EmberConf
-
Not Synced
for the first time year.
-
Not Synced
[applause]
-
Not Synced
TOM: First time. If you see Teddy around,
-
Not Synced
please give him a big thank you. I don't
-
Not Synced
know if he drinks beer, but if he drinks
-
Not Synced
beer buy him a beer, if not, maybe like
-
Not Synced
a tea or something. He's poured in a ton
-
Not Synced
of work and I personally benefit from using
-
Not Synced
this tool every day, so big thanks to Teddy.
-
Not Synced
The other thing that's obviously huge,
-
Not Synced
and was actually just in it's infancy at
-
Not Synced
EmberConf last year,
-
Not Synced
is Ember CLI. Which is a little bit
-
Not Synced
crazy to think about, because it's become
-
Not Synced
such an integral part of the community's workflow.
-
Not Synced
And we won't get into too much detail here, but
-
Not Synced
there are so many great new features
-
Not Synced
that have been worked on over the last year.
-
Not Synced
It's been a huge theme of people working on it,
-
Not Synced
I think the biggest thing to come out
-
Not Synced
of Ember CLI obviously has been an addon
-
Not Synced
ecosystem. Ember itself was a very
-
Not Synced
opinionated framework about how you
-
Not Synced
should build and architect your web applications
-
Not Synced
but when it came time to actually build
-
Not Synced
those things for production, wire all
-
Not Synced
your assets together. I know many
-
Not Synced
of you in the audience have personally
-
Not Synced
spent weeks in meetings deciding
-
Not Synced
which tools to use.
-
Not Synced
Steve. [laughter]
-
Not Synced
So what's really great about having
-
Not Synced
a conventional structure, is that once as a community
-
Not Synced
we agree on that conventional structure,
-
Not Synced
we can start to build addons on top of it.
-
Not Synced
And there have been some awesome addons
-
Not Synced
released over the last year.
-
Not Synced
So if you want CSS pre-processing,
-
Not Synced
like Sass, or others,
-
Not Synced
if you want to deploy to hosting,
-
Not Synced
if you want to integrate real time
-
Not Synced
data updates. All of these things are
-
Not Synced
just a single install command away.
-
Not Synced
It was stuff that took half an hour
-
Not Synced
to an hour to set up before,
-
Not Synced
now you can do in seconds.
-
Not Synced
And I've noticed myself working on
-
Not Synced
more side projects on the weekends,
-
Not Synced
because before I'd be like
-
Not Synced
"well I don't really want to spend 6 hours
-
Not Synced
setting up Grunt, so maybe I'll just
-
Not Synced
go outside instead". [laughter]
-
Not Synced
But now, in literally 30 seconds,
-
Not Synced
I can have a new app up and running
-
Not Synced
and that is a tremendously liberating
-
Not Synced
thing.
-
Not Synced
YEHUDA: And even though we don't personally like
-
Not Synced
CoffeeScript in our own projects, the fact that it's
-
Not Synced
so easy to make a CoffeeScript addon and use
-
Not Synced
it in your own projects, is pretty nice also.
-
Not Synced
TOM: Yeah. The team has been doing amazing
-
Not Synced
work to make the addon system very flexible.
-
Not Synced
So really anything you could possibly want to
-
Not Synced
augment Ember CLI to do, it's possible.
-
Not Synced
You can add new generators, new blueprints,
-
Not Synced
you can shim in to add CLI commands,
-
Not Synced
you can add test outputs, so you can
-
Not Synced
add whatever test harness you want
-
Not Synced
if QUnit is not to your taste.
-
Not Synced
It's super flexible, but
-
Not Synced
super easy out of the box as well.
-
Not Synced
So we'd like to give a
-
Not Synced
big thank you to the Ember CLI team
-
Not Synced
unfortunately there's been way more
-
Not Synced
people working on it than we can
-
Not Synced
thank. [applause]
-
Not Synced
So the next thing I want to talk about
-
Not Synced
is just testing in general. So there was
-
Not Synced
a point in time when Ember had a
-
Not Synced
reputation as being hard to test,
-
Not Synced
or that it wasn't test-first.
-
Not Synced
And I'm happy to report that in 2015,
-
Not Synced
you can just (well we did this in 2014,
-
Not Synced
now it's 2015) at the end of 2014
-
Not Synced
now into 2015, I'm happy to report to you
-
Not Synced
today, that Ember has an awesome testing story.
-
Not Synced
Out of the box we have a really simple, expressive
-
Not Synced
API for doing asynchronous integration testing.
-
Not Synced
All of these helpers are built in,
-
Not Synced
you get them out of the box with Ember CLI.
-
Not Synced
Anyone, even if they're not an Ember developer
-
Not Synced
can drop in and pretty much understand what's
-
Not Synced
going on here. And they're instrumented
-
Not Synced
using promises under the hood.
-
Not Synced
So it handles asynchrony really elegantly.
-
Not Synced
And we also have a really awesome unit testing API
-
Not Synced
this is an example of a unit test for a component.
-
Not Synced
And again, very expressive.
-
Not Synced
Handles asynchrony in a very elegant way.
-
Not Synced
And we've got some awesome plans to improve
-
Not Synced
even more in 2015.
-
Not Synced
YEHUDA: There's not much to say here, except
-
Not Synced
that it sucked that in EmberConf 2014,
-
Not Synced
Query Params hadn't landed yet, and I
-
Not Synced
remember @machty gave a big talk about
-
Not Synced
why it was taking so long, and I'm glad
-
Not Synced
that it landed early in 2014 and we now
-
Not Synced
have Query Params support in Ember.
-
Not Synced
TOM: It still surprises me how easy it is,
-
Not Synced
I'm like, "man I really wish I could
-
Not Synced
persist the sorting of this list" and it's
-
Not Synced
literally one line of code and it works.
-
Not Synced
It's really amazing. Great job @machty.
-
Not Synced
YEHUDA: We also during the last year
-
Not Synced
changed all of our internals to use
-
Not Synced
JavaScript modules, and we also now
-
Not Synced
via Ember CLI, all new Ember apps
-
Not Synced
use JavaScript modules. We were actually
-
Not Synced
really early adopters of this.
-
Not Synced
We've been through a lot of changes in the syntax,
-
Not Synced
but we were also able to drive a lot of the process
-
Not Synced
of making the JavaScript module spec awesome.
-
Not Synced
So, that's great, and really I'm very thankful to the
-
Not Synced
community for having got hitched their wagon on
-
Not Synced
to my quixotic quest to get JavaScript modules
-
Not Synced
awesome in TC39 by helping to make it awesome.
-
Not Synced
So thank you very much.
-
Not Synced
YEHUDA: I can talk about Ember Data?
-
Not Synced
So Ember Data has actually been a thing
-
Not Synced
we knew we needed from the beginning,
-
Not Synced
we needed a data framework,
-
Not Synced
and it's actually gone through a number
-
Not Synced
of different iterations.
-
Not Synced
The most recent iteration has been a fairly
-
Not Synced
big rethink that took into consideration
-
Not Synced
all the things we learned over the past few years
-
Not Synced
and I would say that the number one thing
-
Not Synced
that was problematic about all the
-
Not Synced
previous versions of Ember Data
-
Not Synced
until this one was how exactly
-
Not Synced
relationships work.
-
Not Synced
Now one thing to keep in mind,
-
Not Synced
is that on the server, it's actually very easy,
-
Not Synced
because any time you want to get a
-
Not Synced
relationship, you can stop the world,
-
Not Synced
go to your database, get your
-
Not Synced
relationship, come back to it and
-
Not Synced
do whatever you need to do.
-
Not Synced
But in the browser of course,
-
Not Synced
any data could come in asynchronously
-
Not Synced
at any time, you could make any fetches
-
Not Synced
for any data asynchronously at any point.
-
Not Synced
I think that most people start with something like this,
-
Not Synced
they start with loading all their data at one time,
-
Not Synced
and they have a Post object and a few Comments,
-
Not Synced
and of course, if all your data gets loaded at the same time,
-
Not Synced
it's very easy to do this,
-
Not Synced
you basically just say
-
Not Synced
"post dot comments equals your array"
-
Not Synced
and then you set the post for each comment.
-
Not Synced
But very quickly, when people are building apps,
-
Not Synced
they don't load everything at once, they load
-
Not Synced
something first and they get relationships on demand.
-
Not Synced
So obviously you want to start
-
Not Synced
"post dot comments equals an empty array",
-
Not Synced
and then when you get your comments
-
Not Synced
you want to go and modify it so it has the right thing.
-
Not Synced
If you were doing this by hand,
-
Not Synced
you'd have to remember to do this when
-
Not Synced
you got the comments in.
-
Not Synced
Now what about what happens when you get
-
Not Synced
a few comments loaded first? Obviously,
-
Not Synced
you don't have a Post yet, so when the
-
Not Synced
Post comes in you want to be updating
-
Not Synced
the comments so they have the right thing,
-
Not Synced
so that seems easy enough,
-
Not Synced
but what happens if you get a comment later?
-
Not Synced
Now of course you want to make sure
-
Not Synced
that you update your post as well.
-
Not Synced
So the point is, the tl;dr of all this is,
-
Not Synced
data can come at any time and people
-
Not Synced
really do expect two-way relationships
-
Not Synced
to remain in sync. And this ended up
-
Not Synced
being a large quest that took multiple years
-
Not Synced
to get right, I think largely because we just
-
Not Synced
made mistakes through a few of
-
Not Synced
the iterations, and the last effort,
-
Not Synced
which was called the
-
Not Synced
"Single Source of Truth" or SSOT branch,
-
Not Synced
that landed in 2014, and I think
-
Not Synced
that's a good starting point for us
-
Not Synced
to make additional progress.
-
Not Synced
And just in general, one of the things
-
Not Synced
that came out of that was that we always
-
Not Synced
were really trying hard to have
-
Not Synced
relationship computed properties
-
Not Synced
in Ember Data be synchronous,
-
Not Synced
because we thought people would want that,
-
Not Synced
or, we thought people would feel like if they
-
Not Synced
loaded all their data at once, at first
-
Not Synced
it would feel bad for them to be asynchronous.
-
Not Synced
What we found over time was that it was
-
Not Synced
causing more confusion than help to
-
Not Synced
let relationships sometimes be synchronous
-
Not Synced
and sometimes asynchronous,
-
Not Synced
so in Ember Data, now, relationships
-
Not Synced
are pretty much always asynchronous
-
Not Synced
and that's something that we spent some
-
Not Synced
time recently on. And what that means
-
Not Synced
is that the relationship system in
-
Not Synced
Ember Data is built with async loading in mind,
-
Not Synced
where earlier on I think we were avoiding
-
Not Synced
forcing async loading into the model,
-
Not Synced
but I think it ended up being more confusing
-
Not Synced
than it helped.
-
Not Synced
And finally, one thing that really came out
-
Not Synced
of having Ember Data at all, is that
-
Not Synced
we've formed a pretty good adapter ecosystem,
-
Not Synced
so any general purpose server like
-
Not Synced
Firebase, or Parse, or CouchDB, or Rails,
-
Not Synced
people end up building adapters for it
-
Not Synced
that you can pretty much just drop in
-
Not Synced
and do a little bit of configuration if you
-
Not Synced
need to. And that ended up being pretty great,
-
Not Synced
because it means if you just want to use
-
Not Synced
Firebase, or Parse, or any of these things,
-
Not Synced
there's something that's built-in, and
-
Not Synced
it's not a totally different programming model,
-
Not Synced
it's not like "use the Parse API in Ember Data",
-
Not Synced
it's just like "use the regular Ember Data
-
Not Synced
API and the adapter will handle it behind the scenes".
-
Not Synced
So, Tom and I have been busy with Ember,
-
Not Synced
Igor basically took over the reins of
-
Not Synced
Ember Data after we moved on to Ember
-
Not Synced
to work on Ember more aggressively,
-
Not Synced
and Igor's basically been doing the heavy lifting
-
Not Synced
there for a year or more,
-
Not Synced
so thank you very much Igor. [applause]
-
Not Synced
And finally, just in general,
-
Not Synced
I touched on this a little earlier,
-
Not Synced
But we've really been an early adopter
-
Not Synced
of ES6 features, things like promises and modules,
-
Not Synced
and that has really filtered back into the
-
Not Synced
standards process. Obviously,
-
Not Synced
ES6 you may have heard is now called ES2015,
-
Not Synced
but I think the point is that we plan to
-
Not Synced
continue being an early adopter of features
-
Not Synced
in the future, so we plan to be an early adopter
-
Not Synced
of ES2016 features and 2017 features, obviously
-
Not Synced
to the extent we think that they're stable and
-
Not Synced
pretty much landed, and the standards process
-
Not Synced
has really improved to make that something that you
-
Not Synced
can feel careful about, so we're going to keep doing that.
-
Not Synced
TOM: So that's what happened last year,
-
Not Synced
and I think you'll agree we made a lot of
-
Not Synced
pretty crazy promises, and we've largely delivered on them.
-
Not Synced
Almost everything that we said was going
-
Not Synced
to be coming in the year has come,
-
Not Synced
so hopefully at this point we have a
-
Not Synced
track record of shipping, maybe off by a couple months,
-
Not Synced
but the point is, we shipped.
-
Not Synced
And I think you should rest assured,
-
Not Synced
that the stuff we talk to you about next,
-
Not Synced
we are going to ship, and it's going
-
Not Synced
to be in your hands for you to use over the next year.
-
Not Synced
So what's next for Ember in 2015?
-
Not Synced
Well, the first one is I'm very happy to announce
-
Not Synced
that we're switching to a versioned guide system.
-
Not Synced
So going forward, (yeah!) the guides will be versioned.
-
Not Synced
And a big thank you, @trek and Brian Clifton
-
Not Synced
have been working their tushes off getting
-
Not Synced
this feature ready. So this is live today.
-
Not Synced
If you go to guides.emberjs.com, you'll see
-
Not Synced
it redirect you. Here's a lovely screenshot.
-
Not Synced
And, here's a link you can type into the address
-
Not Synced
bar of your browser.
-
Not Synced
YEHUDA: Turns out that URLs are a good idea.
-
Not Synced
TOM: As it turns out.
-
Not Synced
So we're very excited about this, because it
-
Not Synced
will give us the freedom to update more rapidly
-
Not Synced
update the guides without feeling like we may
-
Not Synced
be leaving people on older versions behind
-
Not Synced
if they happen to be stuck on an older version.
-
Not Synced
And, even more importantly,
-
Not Synced
and the thing I'm most excited about,
-
Not Synced
is that we ae bringing all the guides
-
Not Synced
up to date to use Ember CLI semantics.
-
Not Synced
So the happy path using Ember, out of the box,
-
Not Synced
is going to be using Ember CLI.
-
Not Synced
You won't have to have someone tweeting at you
-
Not Synced
three weeks after you start using Ember,
-
Not Synced
being like "why are you not using Ember CLI?
-
Not Synced
You should just use it", and you're like,
-
Not Synced
"well maybe you should mention that on the website!"
-
Not Synced
Hmm.
-
Not Synced
YEHUDA: Now that you mention it.
-
Not Synced
TOM: Good point.
-
Not Synced
So, as of last night, many of you
-
Not Synced
I thought you would all be out at the bars,
-
Not Synced
but many of you were at home
-
Not Synced
compulsively refreshing the Ember.js website.
-
Not Synced
[laughter]
-
Not Synced
You've noticed that we've removed the
-
Not Synced
Starter Package, the Starter Kit,
-
Not Synced
and now we just instruct people to use
-
Not Synced
Ember CLi, the next version, all the guides
-
Not Synced
are going to be updated to use ES6 modules,
-
Not Synced
and Ember CLI. It should be really awesome.
-
Not Synced
YEHUDA: Now the next big feature,
-
Not Synced
this is something that is still in the RFC process,
-
Not Synced
Tom and I wrote this RFC several months ago,
-
Not Synced
but this is basically just the ability to
-
Not Synced
take a piece of an application in a big team
-
Not Synced
and have it be fully encapsulated with namespaces
-
Not Synced
and everything, so that if you have a company
-
Not Synced
with a number of teams on it
-
Not Synced
and you have teams working on one piece,
-
Not Synced
teams working on another piece,
-
Not Synced
people have worked out how to make this work
-
Not Synced
in sort of ad-hoc ways, and this feature is about
-
Not Synced
making an official way to do that in a reliable way.
-
Not Synced
This is something that companies that end up
-
Not Synced
adopting Ember and have a lot of teams
-
Not Synced
have asked us a lot, pretty much any time
-
Not Synced
we ever do any consulting at a company of that size
-
Not Synced
it's like the number one feature request.
-
Not Synced
So I'm excited that this will be landing as
-
Not Synced
soon as it gets through the RFC process.