Google+ Platform Office Hours for May 16th, 2012: Hangouts API v1.1


Uploaded by GoogleDevelopers on 17.05.2012

Transcript:

JENNY MURPHY: Hi everyone.
Welcome to this week's session of the Google+
Platform Office Hours.
This week we're going to be talking about the new release
of the Hangouts APIs, version--
which number?
WILL THOMPSON and JOHN BERRY: 1.1.
JENNY MURPHY: 1.1 It adds a lot of cool new functionality.
And we have some engineers from the team joining us.
And a bunch of people from the community, so we should have a
nice, fun discussion.
So before we dive into stuff, let's tell you a little bit
about ourselves.
I'm Jenny Murphy.
I'm a developer programs engineer here at Google.
I focus mostly on the [? reft ?]
APIs and the social plug-ins, like the +1 Button.
But I like hacking Hangout apps when I have the time.
And I'm joined here today by--
MARTIN: Hi, I'm Martin.
I'm a software engineering intern at Google.
And I'm working on a Google+ 3 [? project. ?]
JENNY MURPHY: Very cool.
And, if you remember, he's actually been on the other end
of these Hangouts pretty often.
So it's great to have you in person.
JOHN BERRY: And hi, yes everybody, I'm John Berry.
I'm the develop advocate for Google+ working on Hangouts.
WILL THOMPSON: I'm Will Thompson.
I'm a developer programs engineer on Hangouts.
JENNY MURPHY: And then joining us over the Hangout from left
to right, from my view, we have Alan.
ALAN FURTZENBURG: Hi there, I'm Alan Furtzenburg.
I'm an outside developer.
I mostly develop Hangout apps.
I'm most known for my caption app, and the app appearing in
my upper left hand corner is the My Time Hangout app.
JENNY MURPHY: Now say hi to Gerwin.
GERWIN STURM: Yeah hi, I'm Gerwin from Austria.
I do lots of stuff with the Google APIs for fun, actually.
So probably my most well-known Hangout app is the Comment
Tracker, but I'm doing lots of different stuff with WebGL.
And I just tried the face tracking thing, and just
playing around really.
JENNY MURPHY: Cool, we're actually using the Comment
Tracker today, so.

JD?
JD SALAZAR: Hey, I'm JD Salazar, and I'm a developer
on the Hangouts API team.

JENNY MURPHY: Next, Moritz.
MORITZ TOLXDORFF: Hi, I'm Moritz from Germany, and I'm
also playing around with the Hangouts API a lot.
And I think I'm most common for my two apps, I deal a lot
with the Hangout Lower Third and the Hangout
Volume Control apps.
JENNY MURPHY: And, last but not least, Richard.
RICHARD DUNN: And I'm Richard Dunn.
I'm the lead for the Hangouts API team.
JENNY MURPHY: Cool.
According to your lower third, you're apparently Google.
RICHARD DUNN: You're all of Google.
JENNY MURPHY: You're all of Google.
JD SALAZAR: All in one, one for all, that's what I say.
JENNY MURPHY: Cool.
So we were talking about the latest release of
the Hangouts API.
Richard, would you like to give us a little overview of
what's been added in this release?
RICHARD DUNN: Sure, yeah.
We added a bunch of stuff this time around.
The first thing we added was facial motion detection and
getting the data where the face is.
So in the past we've had images that can track the
face, and now we're actually exposing that data so that any
app can use it to display whatever they like.
Or use it to control a game or anything like that.
We also released a new way of broadcasting messages to
instances of your app, which lets it go much faster.

Use it for things like sending mouse movements or tracking an
object in a game, things like that.
We added static overlays.
So images that you can overlay over your video that don't
track a facial feature but are fixed on the screen.
And there's obviously examples of that
running in this Hangout.
The Lower Thirds app, which is fixing the names there.
And I believe Alan's Time is probably using that as well.
And then we added a bunch of miscellaneous stuff.
You know, ways to figure out whether the Hangout is an on
air Hangout, whether it's a public Hangout.
And we did some changes actually based on developer
feedback, which was allowing you to see the names of people
that aren't using the app.
I believe Moritz needed that for volume control, because
you'd like to be able to identify whose
volume you're affecting.
I think that's about it.

ALAN FURTZENBURG: This also has the first of the on-air
features, correct?
RICHARD DUNN: Yeah.
So we just started with whether the hangout is an on
air Hangout, and whether it's broadcasting.
And we obviously plan to add a bunch of stuff
in that area soon.
JOHN BERRY: And there's both the methods and as well as
events for that?
RICHARD DUNN: Correct.
JENNY MURPHY: Very cool.
It's a lot of neat stuff.
We're really looking forward to seeing what people will do
with some of these features.
I'm kind of excited about the face
tracking, the data stream.
And there's a lot of cool potential.
I'm waiting for someone to write a robotic camera that
tracks faces.
I'll do that.
If someone else does it, I'll send you
a t-shirt or something.
JOHN BERRY: Well, Will's camera has got
a pretty cool WebGL.
WILL THOMPSON: Yeah, the giant floating robot head.
Yeah, it's actually in the video that we released when we
released the version 1.1.
Yeah, it's just--
we have a roll, pan, and tilt.
And I hook that up to a cube to kind of move it around.
And then, I made the mouth move up and down with volume.
Although, actually I want to go back and change that so it
actually moves with the top and bottom lip endpoints, or
attach points.
The other thing is, I was able to go zoom in and out.
And we're able to do zoom in and out by basically using the
scale between your eye and the tip of your nose.
That should stay constant the entire time.
If your nose is like moving out someplace
it's going to be bad.
That person's going to have suboptimal performance.
GERWIN STURM: Yeah, I actually use the distance between the
two eyes to measure the zoom.
So that's what I use for that.
WILL THOMPSON: That's how the Wii works too.
It sees those two points and zooms in and out.
And that's how you know how far away the controller is
from the thing.
Yeah, it works really well.
I would worry that if I was using-- well, it's probably
the same either way--
whether if you turn your head and zoom in and out, whether
the two eyes close together or these two close together are
going to be better or worse.
But anyway, it's pretty neat.
I hope to release [INAUDIBLE] for that really soon.
[LAUGHTER]
JOHN BERRY: You also did some cool things like you added
weighting and [INTERPOSING VOICES]
WILL THOMPSON: Yeah, I absolutely used smoothing.

I'll show you the code as soon as I can.
It's basically weight--
I have a five frame smoothing, and I weight the most recent
frame the highest but still use those other five frames.
It does mean that if you shake your head like this really
fast it doesn't move quite as much, but that's OK as long as
you're not Richard Nixon or something.
JENNY MURPHY: I think the probability of Richard Nixon
using your Hangout app is pretty low.
WILL THOMPSON: That would be pretty low.
You know, I should probably make a Richard
Nixon robot head, too.
That would be [INTERPOSING VOICES].
MORITZ TOLXDORFF: I was thinking about creating a
head-controlled pong game.
[INAUDIBLE]
by moving your head up and down or something.
WILL THOMPSON: Yeah.
One of the things that I would absolutely recommend is that
you put a mustache or something on whoever the face
is tracking right now.
Because one of the things I discovered during testing is
it would lock on to somebody standing behind me.
And I would be like, God, it's not working, what's this?
[LAUGHTER]
WILL THOMPSON: Then I realized, oh wait it's--

JOHN BERRY: Another cool idea that I heard was like soccer,
or using your head to bounce a ball back up and down, and
then knocking it over to somebody else.
WILL THOMPSON: Head hacky sack.
JOHN BERRY: Yeah.
JENNY MURPHY: That would be pretty cool.
Cool.
So I see some questions are starting to
pile up on the feed.
And this is primarily a question and answer show.
So if any of you out there would like to ask questions,
go find the announcement post on the Google+
developers plus page.
And it should be pretty close to the top now,
because it's active.
And it's also linked from the original post of this
broadcast. And ask your question there and we will
respond to it live at some point in this session.
WILL THOMPSON: I have some questions.
JENNY MURPHY: You do Will?
WILL THOMPSON: I do.
I actually have questions that Alan asked on the newsgroup
and I haven't had a chance to respond to it yet.
I figured we could ask Richard and JD.
Here, I'm going to read from Alan.

So if we don't set the scale for our bottom thirds, for our
non-tracking overlays, what does the system assume?

JD SALAZAR: I believe the default is width--
the references width and a scale of one.
WILL THOMPSON: OK.

Also, I know there's a method to get to display ratio.
Will the ratio change during the Hangout?

JD SALAZAR: No, it shouldn't.

WILL THOMPSON: OK.
MORITZ TOLXDORFF: I think there's a slight small issue
or mistake in the reference.
JD SALAZAR: OK.
Let me just find it.
WILL THOMPSON: Live document debugging right here.
JENNY MURPHY: Yeah.
We could to change it at the same time?
[INTERPOSING VOICES]

MORITZ TOLXDORFF: I can't find it.
JOHN BERRY: If you can actually send us that link.
WILL THOMPSON: Yeah, send us the link.
JOHN BERRY: We'll be happy to update it.

WILL THOMPSON: OK.
And the last question is about resolution of the feed.

One of the things that's interesting is how wide is the
feed exactly, so that I can make ideally-sized overlays.
And I guess it would be interesting for you guys to
address some of that.
JD SALAZAR: Sure.
So the problem with that is it's camera-dependent.
So even more than that, it's camera-dependent and what we
detect with reference to your computer.
Like how much load there is and so forth.
And so you can't really guarantee anything about the
resolution.
I think we could look into giving some guidelines on
approximate image sizes that we think might look good.
But I don't think we'll ever be able to tell you exactly
what the resolution is so that you can optimize perfectly.
ALAN FURTZENBURG: And I think we can understand and
appreciate that.
I think guidelines would really, really help.
Or at the very least, an API method that told us what the
maximum resolution is, or something along those lines.
Because I know when I started playing with the static
graphics, I pretty quickly figured out what the numbers
were going to be that I usually ended up with.
And that gave me an idea for what maximum I
should design for.
But even scaling down from that doesn't always look good,
and certainly if I needed to scale up to that, it'll come
out really badly.
JD SALAZAR: Right.
Yeah, I think that there's definitely work we can do in
both providing guidelines outside of the API to what
looks good, and also trying to come up with ways in the API
to give you feedback on what might look good in specific
situations.
That's definitely a to-do item for us, I think.
JOHN BERRY: And you know, we say this all the time, but
since you've experimented, I'm sure other developers would
love to hear about those ranges, and how you found
those useful.
And we'd love to hear feedback in terms of what we could be
recommending, too.
JENNY MURPHY: Great.

JOHN BERRY: So that was all the questions?
WILL THOMPSON: Those are Alan's questions?
JENNY MURPHY: Unless you thought of any in
the interim, Alan.
ALAN FURTZENBURG: Oh, I've thought of
plenty in the interim.
And in fact, I know I emailed some of them last night while
I was in the middle of trying to get the clock working.
The documentation indicates that the URLs for an image
resource should be either HTTP, HTTPS, or a data URL.
I had trouble getting the HTTPS one working.
And one of the things I realized is that there's no
error called if it can't load an image resource
for whatever reason.
A, am I correct about the fact that HTTPS is not supported?
And B, is there supposed to be some indication somewhere that
it can't load a resource?
And I guess the follow up to C is, if either of those are no,
what can be done to change this?
JD SALAZAR: OK, so an HTTPS should work.
And if you're experiencing problems, then--
WILL THOMPSON: Well, one thing you can do is absolutely send
us a piece of sample code that demonstrates the error.
And we can take a look at that, definitely.
I saw your email and was like, yeah that's interesting.
Let me go try that.
And I haven't had a chance to try it yet.
J.D. SALAZAR: B, you are correct that we do not
currently provide any feedback as to whether the image was
loaded or not, and we're working on it.
That's definitely high on the list of things that we want to
add, I think.
JOHN BERRY: Just get better feedback, or specifically
about the overlays?
WILL THOMPSON: Just when a overlay fails to load.
JD SALAZAR: Yeah, I think in general for any image
resources we'll look into adding some type of event that
tells you when it loaded and if it loaded.
MORITZ TOLXDORFF: In my case--
I just posted the code in the chat.
I'm basically just doing the forward slash, and just
leaving out the HTTP or HTTPS, so the Hangout
[UNINTELLIGIBLE]
whatever it should use.
But actually, it should use HTTPS, because the Hangout is
running HTTPS as well.
And this is working fine without
any error or something.
ALAN FURTZENBURG: I couldn't get it to use a
relative URL at all.
[INTERPOSING VOICES]
MORITZ TOLXDORFF: I had some issues when I was running my
apps on my own server, but it has issues with a non-trusted
certificate and stuff.
But since I run everything on AppSpot, it's running
perfectly fine.
JD SALAZAR: Yeah, that would be my I guess for you, Alan,
is that it has something to do with the certificate that is
being used.
The talk plug-in isn't quite as accepting as Chrome is.
So you might be able to hit the URL in Chrome, but the
talk plug-in might have issues with the certificate.
But we can look at that.
JOHN BERRY: Alan, I'm more talking about a protocol
relative URL.
WILL THOMPSON: So instead of just a
relative URL, it's HTTPS.
And instead of saying HTTPS colon slash slash, whatever,
you just leave off the first HTTPS colon slash.
And then whatever protocol you used to get there, it'll use
that one to get the next resource.
JOHN BERRY: You'll see--
ALAN FURTZENBURG: But in this case that would have failed.
Because it loads the rest of the resources securely, but it
can't load the image resources securely.
WILL THOMPSON: Well, in your case.
[UNINTELLIGIBLE PHRASE]
JENNY MURPHY: Yeah, we'll get to the bottom of it.
WILL THOMPSON: Yeah.
Send us some code and a link to the image that's not
working, and we'd be curious.

JENNY MURPHY: Cool.
So are there any other questions in the Hangout?
MORITZ TOLXDORFF: Yeah.
What about adding animated GIF support?
JENNY MURPHY: Animated GIFs as overlays?
MORITZ TOLXDORFF: Yeah.
Right now you probably can load PNGs and JPEGs.
JOHN BERRY: And data URLs.
WILL THOMPSON: Well, data URLs may contain--
[INTERPOSING VOICES]
MORITZ TOLXDORFF: Yeah, and data URLs.
Sure.
An animated GIF would be quite cool.
I had some ideas with that.
JD SALAZAR: Yeah, I think that's an option.
I think also just better support for animating image
resources in general.
Such that you can have some guarantees about showing and
hiding images will happen in the same frame, could help
with that too.
It's not the same.
An animated GIF is obviously an easier way to do it.
But I think both of those things are something
we should work on.
MORITZ TOLXDORFF: And would it also be possible to add text
or other elements to the UI without messing up the whole
video pane?
Like, just adding somewhere a button or text somewhere in
the UI as an addition?
JOHN BERRY: Can you give us an example?
What kind of thing are you looking for?

MORITZ TOLXDORFF: What was it?

WILL THOMPSON: Where in the interface do you
want to add this text?
JENNY MURPHY: Yeah, can you give us the specifics?
You know, a story, tell us the story about how you'd use it?

MORITZ TOLXDORFF: For example, my volume control app, right?
I have the mute Hangout button, and that if I want to
place the button not inside the left extension pane, and I
want to move it up where the microphone and video mute
buttons are.
Something like that.
JOHN BERRY: So you want to influence the outer
Chrome of the UI.
MORITZ TOLXDORFF: Right.
JENNY MURPHY: That would be really cool.
It's a lot of potential there but--
MORITZ TOLXDORFF: I mean, sure you can mess around a lot
then, but if you do it right you can produce
some awesome stuff.
WILL THOMPSON: Just put white boxes over everything.
[LAUGHTER]
JENNY MURPHY: You can no longer exit.
[LAUGHTER]
WILL THOMPSON: Yes, it's the no exit.
JENNY MURPHY: [UNINTELLIGIBLE PHRASE]

JOHN BERRY: Until the Hangout cuts out.
MORITZ TOLXDORFF: Yeah, that way you can actually create
your own themes for Hangouts.
JENNY MURPHY: Cool.
JOHN BERRY: All right, so [UNINTELLIGIBLE]--
ALAN FURTZENBURG: It has been a feature that a lot of people
who were broadcasting without using Hangouts on air have
been requesting.

JOHN BERRY: The Hangouts team in general is every day
looking at how to improve the UI.
And we've gone through at least two major UI refreshes
since we launched.
And the developer feature has to go hand in hand with the
user experience, you know, the end user feature.
So that's great feedback for thinking of the future.
There is no plan I know of today to add that, but
something to look into.
JENNY MURPHY: Yep, cool.
ALAN FURTZENBURG: A broad question about resources and
image resources.
There's a note in the API guide that warns us that once
images are allocated in the plug-in, they can't
deallocated.
How big of a problem is this really, and is there any work
being done on being able to free up those resources?
JD SALAZAR: Yes, there is work being done.
And it's probably not a problem unless you're loading,
like, hundreds or thousands of images.
WILL THOMPSON: I was going to say, I've definitely crashed
the Hangout when I was loading images like crazy, but that
was when I was loading them almost every frame.
[UNINTELLIGIBLE PHRASE]
JOHN BERRY: I mean, certainly we can try it with 100 images
on a MacBook Air and it works, for 100 overlays, and that's
not a problem.
So I can tell you that's my benchmark.
[LAUGHTER]
ALAN FURTZENBURG: OK.
The reason I ask is, I know Moritz and I had been talking
about doing digital clocks.
And one of the questions was, well why don't you just create
a canvas, put the text on it, and replace the image from the
canvas every minute or every second?
And I'm like, well, because you're allocating all these
images and they're never going to get freed up.
And there was--
MORITZ TOLXDORFF: [UNINTELLIGIBLE] will crash.
ALAN FURTZENBURG: And there was some people who were
surprised like, come on, you've got to be freeing up
the image resources somewhere.
And I'm like, the documentation says they don't
get freed up.

JD SALAZAR: Yeah.
It's definitely important for us to provide a way for you to
free them up to do things like that.
But for now I would say, as a general guideline, if you're
in the low hundreds of images it's probably, won't have much
of a problem.
WILL THOMPSON: Yeah, it depends on how big they are.
JOHN BERRY: And also--
JD SALAZAR: Yeah, that's true.
JOHN BERRY: I noticed, that also includes other overlays.
So the sound overlays also take up memory and do
not get freed up.
So if you have a bunch of images and a bunch of sounds,
you should be [UNINTELLIGIBLE].
MORITZ TOLXDORFF: By the way, are the sounds broadcasted to
all the participants, or only locally?
I think only locally, right?
J.D. SALAZAR: Yeah.
That's correct.
WILL THOMPSON: Yeah.
And actually, if you play them through the plug-in, they are
more likely to be noise-cancelled.
Which is a great use for if you want to alert somebody
without alerting everybody, rather than using an HTML5
audio tag or something, you can just be like, bong,
through the plug-in.
So if you're making a game that takes turns or
something like that.
It's a very easy part.
JD SALAZAR: Yeah, that's probably the best part about
using the audio in the API is that you should get echo
cancellation most of the time.
MORITZ TOLXDORFF: Are you planning on broadcasting
sounds to our participants like you do with the overlay?
JD SALAZAR: Yeah, that's a heavily requested feature and
something we're looking at adding.
MORITZ TOLXDORFF: Cool.
And also, what I would like to see--
I mean, with my volume control when I mute the Hangout, now I
have the overlay to indicate that I muted the Hangout.
And it would also be cool if I get notifications on top of
the Hangout, that I'm able to broadcast these notifications
to all the participants.
Like, when I block someone it shows up
on everybody's Hangout.

[UNINTELLIGIBLE PHRASE] the people in the Hangout that I
muted the Hangout for me.
WILL THOMPSON: Yeah, we only provide that the same way we
did the [UNINTELLIGIBLE] avatar, which is that you
[UNINTELLIGIBLE] state, and then have each of the
individual apps post it themselves.

WILL THOMPSON: But yeah, that's cool.
JENNY MURPHY: Agreed.
MORITZ TOLXDORFF: And another more general thing is a lot of
people asking me how they can remove an app they installed.
Which is currently not possible.

Because when you try out a lot of apps, at some point you
just think the app is not worth having it installed.
And you want to remove it.
There's no way to do it.
You can revoke access, but this is not enough.
The app is still showing up in your Recent tab and whatever.
WILL THOMPSON: It can be incriminating, depending.
If you have poker in there and you're
working out or something.

JOHN BERRY: Unless you work for a video game company.
RICHARD DUNN: Yeah, we agree.
We definitely need a way to do that.
It's in progress.
You can revoke the permissions for the app.
WILL THOMPSON: Yes.
You can go to Google.com/dashboard, and
click on the revoke permissions.
RICHARD DUNN: I mean, they really have
no permissions out.
If you don't run them in the Hangout, they really have no
permission to do anything.
I mean, they're not running.
It's not like they're offline apps.
But yes, that will be coming soon.
JENNY MURPHY: Yeah, this is an artifact of the fact that, on
the Hangouts, we're moving really fast. So lots of cool
stuff is coming out.
This is just one of those rough edges where
we'll clean it up.
Hang tight.
RICHARD DUNN: It's a happy problem to have, that people
have too many apps that they feel like they
need to remove some.
JENNY MURPHY: Exactly.
JOHN BERRY: I mean, as I develop a lot, I have probably
40 that are just called Hangout app.
So I'd love to get that feature.
RICHARD DUNN: So fill in your metadata people.
JENNY MURPHY: Yeah, especially you.
WILL THOMPSON: Yeah, I was going to say, I may actually
be the person who has the most apps in their API console.
I think I win.
Yeah, and everybody who calls them Hangout gadget--
I have this sea of Hangout gadgets.
JOHN BERRY: Cool, you want to jump to the comment screen?
JENNY MURPHY: Sure.
So I'm going to be reading some questions from the
comment stream.
So again, if you're watching and you'd like to ask a
question go to the Google+ developers page
and you can ask there.
There's an announcement post where you can post your
questions, and we'll find them and answer them.
So I'm going to start from the oldest questions first. And
Joshua Owen asked, yesterday-- way ahead of the curve--
asked the question, is there any way through the [? dom ?]
to identify the user's filmstrip partitions on the
bottom filmstrip?
It would be great if we could drag and drop things from our
Hangout app onto a person's partition to initiate actions.
RICHARD DUNN: So, two answers to that.
One, yes, you do have their filmstrip position.
It's in the participant object.
So you can use that.
And I don't know if we'll do anything as complicated as
drag and drop, but we've definitely identified that
people want a quick way to do some action that's
based on the user.
So we'll be looking into ways that maybe we can either
circle, click events on the film strip or
something like that.
So that people can initiate an action on a particular user
without having to reimplement that UI.
Like--
ALAN FURTZENBURG: Well--
no, sorry.
Finish first.
RICHARD DUNN: Like volume control, right?
I mean, you have that list, but it might just be easier if
it's, like, click on a person, and then adjust their volume.
ALAN FURTZENBURG: I think related to that is also the
question that I get a bit is, are you guys looking at being
able to position the individual small thumbnails
elsewhere on the screen, like we can position the large
video stream anywhere on screen?
RICHARD DUNN: Yeah, we're definitely looking at that.
ALAN FURTZENBURG: OK awesome.
JOHN BERRY: And, you know, I've seen people experiment
with the filmstrip position for example.
Because if you know how many persons you have, and you kind
of know how wide each object is.
And you're using the drag data from the JavaScript, you know
you've exited the eye frame.
Right?
So you can just assume, kind of, that they're there.
JENNY MURPHY: So you can put little air hockey gates at the
bottom of the screen?
RICHARD DUNN: It's definitely hack, though.
Because any minor tweak to the UI could screw that up.
JD SALAZAR: There's also a problem where if you have an
extension open, then you can't actually get to some people on
the filmstrip.
Right?
It will obscure the people on the left, for example.
JENNY MURPHY: Right.
So if you do something like that, put a visual indication
on the bottom of the screen, the approximate location, it
will probably help a little bit.
But it would be a hack.
But it would work, probably.l
RICHARD DUNN: We will definitely look into a way to
have some way to select people via the filmstrip.

JENNY MURPHY: Cool.
OK, so moving on to the next question.
[UNINTELLIGIBLE]
asked, I need a consistent unique ordering for all
participants of a Hangout.
I thought display index would be suited for this, however, I
periodically run into the situation where it seems
multiple participants have the same display index value.
Can somebody explain this?
This seems to be related to whether a user is just present
in the Hangout or they've started my Hangout app.
RICHARD DUNN: Interesting.
Well, taking it from the end back, I would say multiple
people having the same display index seems like a bug to me.
So we should probably look into whether that happens.
And as for the first part, like just getting the
consistent number, I think, Will, you've had a feature
request opened for that as well.
Like an absolute ordering based on when they--
WILL THOMPSON: Yeah, I'd be really interested in knowing--
and either an absolute order.
You can do it a little bit by looking at the time stamp on
when they arrived in the Hangout.
You know, you have somebody just call a set
[UNINTELLIGIBLE] as soon as they walk in.
And then just declare that's an arbitrary order.
It's not necessarily the order they appear in the thumb
strip, but it is an arbitrary ordering.
JD SALAZAR: If you don't care about the ordering and getting
people jumping in the middle [INAUDIBLE]
like Hangout ID or something, too.
It just depends on what you're looking for, I guess.
RICHARD DUNN: I would definitely like to add--
just because it's super easy for us to add, I would
definitely like to add some sort of absolute ordering.
But in terms of the display index, my expectation would be
that they were always different.
So that's a surprise to hear.
JOHN BERRY: He actually updated his post with an edit,
and said, just realized I'm using Get Participants while
using Get Enabled Participants guarantees that
display index is unique.
Consistent order across all users.
And he ends with a question mark.
So I think the question we should raise is Get
Participants versus Get Enabled Participants.
RICHARD DUNN: Actually, I know what this--
I wonder if that might be that, if they leave--
well, then they'd disappear.
GERWIN STURM: I think that problem might
be the display index.
If I have to display index two for someone, someone else in
the Hangout might have the same person
display index three.
Because the ordering isn't unique among all participants.
So that might be the problem he's having.
JD SALAZAR: I think that's true.
I think that you can't guarantee that participants
will be displayed in the same order for
everyone in the Hangout.
GERWIN STURM: So that might be the problem.
That the display index two is different for me than for
someone else in the Hangout.
RICHARD DUNN: Well, Jonathan, can you forward
that message to me?
We'll definitely fix that.
WILL THOMPSON: Assuming it's buggy, we will fix it.
JENNY MURPHY: Yes.
Thanks for the bug report.

So moving on to the next question.
[UNINTELLIGIBLE]
asks, is it possible to access Picasa photos within a Google+
Hangout that were shared from another Picasa web account?
So within--
or actually, someone else like to field this one?
I will field--
GERWIN STURM: Yeah, actually it is possible, because if
it's a public photo you can access it.
Because you can access all Picasa photos, so you can use
the Picasa data API to access those photos.
You just would need the Google ID of the person you want to
have the photos access of.
And now with the possibility that you can actually add
[UNINTELLIGIBLE]
to your Hangout, the ones you want, you can actually request
limited photos as well, which have been shared with you in
some cases.
JOHN BERRY: That is a super awesome feature
[UNINTELLIGIBLE] just rolled out.
And I know you worked on a photo app.
So why don't you explain a little bit about what you had
to do to do that?
Because it's not so straightforward.
GERWIN STURM: Yeah, so actually for my photo app I'm
using the Picasa data API to access the photo.
So I'm taking my Google IT, and use it to access the
Picasa data API that can request albums which I have.
And I can request the photos in the albums, and then just
put the link to the photo actually put into the shared
state, so the others can have the link for
the photo to be displayed.
And this should work for my photos or for the photos of
others as well.
So if I know the link to a photo I can
share it in the Hangout.
JOHN BERRY: Pretty neat.
GERWIN STURM: Actually, I could just screen share the
app if you want, if anyone's interested.
[INTERPOSING VOICES]
JOHN BERRY: And you're using the JS client, right?
The--

GERWIN STURM: Actually for the data API I'm just using the
[UNINTELLIGIBLE]
requests to access it.
So let's see if I can screen share this.

OK, do you see it?
So actually what I'm doing on this side here, I'm just
loading all my Picasa albums. The public Picasa albums.
Where the Picasa data API and then just
can choose one album.
So this side part here, this is only private to me in the
Hangout app.
And now I can choose one photo.
It shares the link with all the other people who
are using the app.
And they can see the same display if they
are using the app.
So that's about it what I'm doing.
And if you, actually it should be possible if you do access
albums of other people, as long as they are public and
you have the IT.
So in this case I'm just refilling the API
with my Google IT.
So it accesses my albums, but in the same way you can access
the public albums of other people as well.
So you could actually just say, I want to access the
public albums of Richard, and then it would be able to
display them and share those photos as well.
JOHN BERRY: And again, that's using the Picasa
[UNINTELLIGIBLE]
API, which [UNINTELLIGIBLE]
unrelated Google+, but because Picasa and Google+ photos are
related, he's able to do that.
Cool.
Cool integration.
JENNY MURPHY: Yeah, the photos on Google+ use the Picasa
backend, so that's the relationship between them.
The Picasa APIs allow you to access some of them.
Cool, thank you very much for demoing that.
That was really--
So continuing on through the questions.
Joshua asks another question.
What is the best way to detect when a
Hangout app gets unloaded?
So that I could do some cleanup once it's been
unloaded, for example?

Anyone?

JD SALAZAR: Sorry.
Could you repeat the question?
JENNY MURPHY: What is the best way to detect when a Hangout
app becomes unloaded?
For example, if you want to do a clean up.
RICHARD DUNN: So we don't really have--
We don't have this notion of--

I guess there's two answers to that, right?
There is the other people that are--
other instances of the app can detect that.
Yeah, so other instances of the app can detect that that
person's left the app, if they want to do clean up there.
What we don't have is, we don't have a way that the app
instance itself, when it gets unloaded,
has time to do anything.
We basically just kill it off.
So it's an open question of whether that's a
good thing to do.
I guess there are some nice things that can be done there.
WILL THOMPSON: Well, yeah.
It's certainly sort of like the OnApp hidden event.
JOHN BERRY: Yeah, so there's the OnApp hidden, which I
think is the second answer to that.
Because apps don't run if you hide it.
So for example if you toggle an extension, or if the app,
you switch over to the video feed, at that point, we fire
an event that says--
I think that's exactly what you call
the app, OnApp hidden.
So if you have animation, you might want
to pause the animation.
Or if you want to-- if you've queued up background data that
you need to send out to your server, that may be a good
time to do that.
And if you want to do something if the user leaves,
and there's other users on your app, then you could do
the On Enable Participant Changed, and say, hey, we have
a lost user and it's changed the games.
JENNY MURPHY: Cool.
That's [UNINTELLIGIBLE].
ALAN FURTZENBURG: People have asked me this question as
well, in regards to suggestions that I've made
about how to trigger something when a Hangout is
started with an app.
How it can then go communicate with a web server.
They said, well how do you do the opposite?
If a person leaves without anybody showing up, how do you
clear that value?
And I said, uh, that's a really good question.
And the best solution that I had come up with, that I
hadn't tested yet, was to attach something to the iframe
and detect when the iframe was close.
So when it receives an On Close event for--
I forget the correct name of the event.
But I haven't tested it yet, and I don't know for sure how
it'll work, how well it will work, or what other problems
that are associated with that.
JENNY MURPHY: Cool.
Thanks for the possible solution.
Which would work in most cases.
Someone killed the process in the web browser.
You wouldn't get that--
[INTERPOSING VOICES]
WILL THOMPSON: In that case, you almost
might consider a KeepAlive.
JENNY MURPHY: Yeah, a KeepAlive or a heartbeat?
WILL THOMPSON: Yeah, just once a minute, be like, oh, this
Hangout's still going with this app, and then, nope, this
Hangout's not going anymore.
[INAUDIBLE]

JENNY MURPHY: Interesting.
JOHN BERRY: In KeepAlive 108, which I've been experimenting
with this morning, is Google analytics.
JENNY MURPHY: Google analytics for KeepAlive?
JOHN BERRY: Yeah, right.
So with the new real time infrastructure.
JENNY MURPHY: Oh, the real time [UNINTELLIGIBLE]?
RICHARD DUNN: Are you actually working on
editing that, Johnson?
JOHN BERRY: No, I was just playing around with Google
[UNINTELLIGIBLE] this morning, and I've been doing some
things around trying to look at the [UNINTELLIGIBLE]
API, right?
[UNINTELLIGIBLE]
API, as well as the JavaScript wrapper.
So there's some cool things that you can experiment with
inside of the Hangout.

JENNY MURPHY: This is actually a problem that's existed in
web applications pretty much from the beginning.
Is you don't know when people disappear.
So there are a lot of solutions out
there on the web.
And any solution that's been out there to solve this
problem for regular, traditional web applications
will also be able to help you figure out--
for example, if you have server side state that you
need to clean up when the Hangout app is closed.
WILL THOMPSON: [UNINTELLIGIBLE PHRASE]
Whatever it is that you need to do.
JENNY MURPHY: Yeah.
Cool.
Okey doke.
So moving on to the next one.
Chad asks, is there any chance that facial tracking will be
able to support multiple faces?
So like we have right here, four people on camera.
WILL THOMPSON: Wow, that would be cool.
JENNY MURPHY: It would.
[LAUGHTER]
[INTERPOSING VOICES]

JENNY MURPHY: OK, moving on to the next one.
MORITZ TOLXDORFF: Then we have [UNINTELLIGIBLE]
games in the Hangout.
WILL THOMPSON: Yeah, we have no announcements about that.
JOHN BERRY: I will say, as we're developing two of us on
the screen, the standard use case for Hangouts is you in
front of your laptop.
Definitely right now we're behind a camera and it's
getting all four of us.
But most people use Hangouts while their on their laptop.

WILL THOMPSON: This is the use case why you need a mark when
you're doing puppets.
Like [UNINTELLIGIBLE PHRASE]
or playing a game with your head.
Mark which face you are actually attached to.
WILL THOMPSON: It should say "one-up."
WILL THOMPSON: P1.
JENNY MURPHY: P1.
P1, P2, P3, P4?
That would be cool.
WILL THOMPSON: I think his next question was, gosh,
wouldn't it be cool if there's WebGL?
And the answer is, yeah, that'd be so cool.
That's how the 3D robot floating head works.
It's in [UNINTELLIGIBLE]
So again--
JOHN BERRY: Yeah.
He said something simpler.
He said, I want to see a face tracker in my [UNINTELLIGIBLE]
image.
And somebody was demoing--
JD-- the--
JD SALAZAR:
J.D. SALAZAR: I don't actually have this app.
[INTERPOSING VOICES]
JOHN BERRY: But it was a picture of John Malkovich, and
his mouth was moving with your mouth.
And it was pretty striking, as well.
It's doable with the current API.
JENNY MURPHY: Is that one open source anywhere?
JOHN BERRY: I have no idea.
JD was the one who was playing with it
JENNY MURPHY: So a lot of the hangout applications are
actually open source.
So if you track them down, sometimes you can figure out
how people did them, too.
WILL THOMPSON: Right click, Resource.
JENNY MURPHY: That works, also.

Cool, so just moving up the stream of questions.
WILL THOMPSON: But yeah, I would actually add that WebGL
is really great in the Hangouts, as opposed to Flash,
because it's running natively rather than
running in a plug-in.
It's awesome.
JOHN BERRY: Gerwin has some experience, right?
GERWIN STURM: Yeah.
A little bit.
JOHN BERRY: I think, Gerwin, you're the first person to try
WebGL inside of Hangout.
So you get that--
GERWIN STURM: Yeah, I think it was the first thing I tried
with a Hangout app actually.

JENNY MURPHY: Cool.
OK, so there's a question unrelated to Hangouts API that
Harold asks, that I will answer.
Harold asks, how do I use the Google+ +1 button on a web
page, and it seems that Google apps users can't use it.
The complaint is that login is required in
response to the RPC call.
He's also having trouble with the badge, which renders as a
big white box.
So this could depend on a lot of things.
And the easiest thing is for us is just hook up and
troubleshoot.
It could be an issue because it's a JavaScript that's
running on your page it can sometimes be in conflict with
other JavaScript on your page.
Or even web server configuration, because our
buttons will fetch your page to create the snippet, and if
they can't access it for some reason, our page fetchers
can't access it, that will cause problems, also.
So in other reasons, there's a lot of things that could be
causing these issues.
So I'll look back with you after the broadcast, and we'll
solve your problems. We'll get back to you.

So, moving up the thread.
While I'm poking around on the thread, does anyone in the
Hangout have any other questions or comments they'd
like to chat about?
Announcements?
GERWIN STURM: So I actually don't have a question--

So I actually don't have a question, but a suggestion,
really, because you just start with the on-air functionality
in Hangout apps.
There's actually three things I want to see in there.
Actually, I think would be interesting to see who's the
one hosting the Hangout on there.
So which of the participants is the one who broadcasts?
So that he maybe can get special privileges inside of
the Hangout app.
Then there's the thing with the YouTube URL, so we can
link it and I can use it in the comment tracker.
And then also the link to the broadcast URL on
[UNINTELLIGIBLE] which announces the--
so those are actually the three things.
Actually, I would be happy with the broadcast, because
there's a lot of things you could do with that.
MORITZ TOLXDORFF: [INAUDIBLE] the outgoing volume.
RICHARD DUNN: What's that?
MORITZ TOLXDORFF: Being able to adjust the outgoing volume
to the video stream, so you can use volume control to
adjust actually the video, audio levels from all the
participants as a host.
RICHARD DUNN: OK.
More good suggestions.
WILL THOMPSON: And definitely more metadata about the
Hangout on air, is what I'm hearing.
Has anybody ever tried to put the Hangout on air broadcast
inside the Hangout?
What would happen?

It's like the IT Crowd.
Searching for Google inside Google causes
the internet to close.
[LAUGHTER]
JOHN BERRY: Then they do a screen share with the video--
[INTERPOSING VOICES]
WILL THOMPSON: Screen share the
broadcast inside the Hangout.
That would be awesome.
We should try that.
JENNY MURPHY: Do you want to try it right now?
WILL THOMPSON: I don't want to set fire to this room, so we
better not.
JENNY MURPHY: Yeah, we're in a new room, which is not as
equipped as previous ones.
So we don't want our work lab to catch on fire.
But later when it's a different computer.
WILL THOMPSON: Yeah.
We'll see if we open a wormhole in time and space.
JOHN BERRY: I don't know about you guys, but I don't own a
fire retardant suit.
JENNY MURPHY: You don't?
JOHN BERRY: Nope.
[INTERPOSING VOICES]

JENNY MURPHY: They're useful when
doing things like welding.
All the wool.
Wool clothing is very fire resistent.
Just in case you were wondering, everyone.
WILL THOMPSON: You don't have asbestos gloves?
JENNY MURPHY: No, I actually don't.
WILL THOMPSON: They gave those to us in high school.
It was amazing.
It was like, later on, [UNINTELLIGIBLE]
But as it was.

JENNY MURPHY: Anyway, moving on.
[INAUDIBLE]
asked a question earlier about the Picasa photos being
accessible from the Hangout app, actually
clarifies the question.
Actually, I mean for non-public Picasa web photos
shared via Google+ from a different account.
So I'm assuming this would be if Martin would share a photo
with just me, would I be able to access--
oh, we can access our own Picasa web via [INAUDIBLE],
but there doesn't seem to be a way to access the photo that
Martin shared to me, for example.
Is there a way?
So this is starting to get to one of the corners where using
these multiple APIs together doesn't always work
wonderfully.
The Picasa web APIs do not include all of the features of
the security model Google+, for example, which is built on
the same backend, but uses the slightly different system for
managing all the sharing and stuff.
I am not aware of a way to do this specific thing.
It's a great question.
I do not believe you can do it with the current
APIs that are available.
But I think you've done more hacking on these
APIs than I, Gerwin.
Do you have any input?
GERWIN STURM: Yeah, I actually only used public APIs without
the [UNINTELLIGIBLE], so I'm not sure what is possible with
the Picasa data.
They're actually pretty difficult to work with, to
actually get to know how to use them.
So I haven't really went into all the stuff with the Picasa.
JENNY MURPHY: Yeah, they're using our older, G data style
APIs, which are different than the APIs that, for example,
Google+ uses.
And as a result they have a little bit more rough edges.
We learned a lot when we built all the API infrastructure,
and as a result we like our new APIs a lot more.
So you're in an interesting case, where you're having to
work with both of them at the same time, which is
challenging.

And if you can find a way let us know.
It's cool.

And with that question, we're actually just
about out of time.
JOHN BERRY: Well there's one question I wanted to answer.
JENNY MURPHY: Oh, there's one question you
wanted to answer, huh?
JOHN BERRY: Somebody asked, where you can get all those
cool stickers on your laptop?
[LAUGHTER]
JOHN BERRY: So this one right here, this G+ sticker, you can
actually buy it from the online Google store.
We just started shipping that.
So you can get a pack of five for a couple of bucks US.
And I'm pretty sure it ships internationally.
WILL THOMPSON: And we have the old +1 button.
We have all kinds of--
JOHN BERRY: But the only one you can buy is this guy.
Actually, my HTML5 one, which I'm very proud of, you can get
from the HTML5 site, and a bunch of other places.
The JS one, the logo's at opensource.
You can print it yourself.
And the Hangouts one and the circles one, you'll
have to bribe us.
WILL THOMPSON: You'll have to bribe us.
JENNY MURPHY: You'll have to do awesome.
Do extra awesome.
JOHN BERRY: I actually send out stickers to people who do
cool things, or help me out, or help the community.
So if you [UNINTELLIGIBLE]
JENNY MURPHY: Yeah, so do cool stuff.
Let us know.
WILL THOMPSON: [UNINTELLIGIBLE] like move his
laundry over or something.
He's like, here's a sticker.
ALAN FURTZENBURG: There are a couple of questions on the
YouTube page that may be of interest. Somebody asked, as a
regular user, is there a page that lists the Hangout apps?
Anything like the Chrome web store for Hangout apps.
I know that we all needed to register with
the Chrome web store.
What are the plans for a web store for Hangout apps?
RICHARD DUNN: Well Hangoutapps.com has been doing
a pretty good job of listing all of them.
WILL THOMPSON: Yeah, that's a community project that's
pretty cool.
JOHN BERRY: The short answer for that is, there are plans,
and we're still developing them.
A lot of that is based on feedback.
The main way that people discover is through the viral
nature of apps.
If somebody's doing a Hangout with an app and
you discover it.
And then, we're recommending people make plus pages to
drive traffic to their Hangout app.
Either a Hangout app per plus page, or if you have a brand
that you've created around your apps, or just
my apps plus page.
And Google's trying to strive to build platforms for
developers.
So a way to distribute and monetize is definitely on our
radar, and we're working towards that.

ALAN FURTZENBURG: You had somebody who agrees with the
special privileges of the Hangout creator to boot and
mute a user who's causing a problem.
And I know that comes up frequently in the Hangout
discussions.
And a request. Please implement messaging from G+
app to the web browser while a friend is within your circle.
What are the plans for interaction between the app
and the chat window?

RICHARD DUNN: Well, obviously that's a big request. I think
there's some sensitivity around chat.
I don't know quite if that's pushing stuff into the chat
window or pulling it out.
Pulling it out is obviously--
[LAUGHTER]
RICHARD DUNN: Yeah I mean, we're looking at those issues
and we're trying to solve some of them.
JENNY MURPHY: Yeah, we're working through the chat
issue, but we're just very cautious about interacting
with the chat too much because we don't want it to either
become too noisy.
And we also don't want to compromise the privacy of
anyone in the chat.
So we're taking a cautious approach to
this particular feature.
But there's some cool potential there, so we'll see.
ALAN FURTZENBURG: And finally from the YouTube chats,
several people thanking for the answer.
And finally, this is an awesome Hangout.
[LAUGHTER]
JENNY MURPHY: And it's awesome because all of
you guys joined us.
WILL THOMPSON: From Google engineers
to all of our community.
It's really been great.
JENNY MURPHY: And the overlap of our community and Google
engineering.
So thanks very much to everyone for joining.
This has been a really great session in our new location,
which will hopefully have a dinosaur next time.
WILL THOMPSON: Yeah, we need to get a whiteboard so we can
plan a dinosaur.
JENNY MURPHY: Yeah, we'll figure it out.
WILL THOMPSON: Somebody will provide a dinosaur.
JENNY MURPHY: But in regards to this video, there will be
an edited version published to the Google+ developers page.
It'll include the show notes, like we
have for every session.
And it'll be up later today or tomorrow.
In the meantime--
JOHN BERRY: And also the YouTube Google Developers
[INAUDIBLE].
JENNY MURPHY: It'll also be added to
YouTube.com/GoogleDevelopers way at the bottom of the page
under the Google+ platform office hours.
It'll also be visible there.
And the show notes will be there too.
Well, until next session, thanks
everyone for joining us.
See
you later ALL: Bye.