Seq. Time Transcript 1 00:01 man: Ladies and gentlemen, 2 00:02 please welcome Vice President, Engineering, Vic Gundotra. 3 00:07 [cheers and applause] 4 00:11 Gundotra: Well, good morning, everyone. 5 00:13 Welcome to day two of Google I/O. 6 00:16 I hope you all had a great time yesterday. 7 00:18 I hope you enjoyed your sessions, 8 00:20 and I hope you enjoyed those Android phones. 9 00:23 [audience whoos] 10 00:24 [cheers and applause] 11 00:29 Yesterday, we promised you a surprise for this morning. 12 00:33 And this morning, Google will surprise you. 13 00:37 We are about to unveil 14 00:39 a personal communication and collaboration tool 15 00:43 in a very early form. 16 00:45 We decided to do this at this forum 17 00:48 for a couple of reasons. 18 00:49 This unbelievable product, 19 00:51 one that I'm very, very excited about, 20 00:54 will be open-sourced. 21 00:57 It's open-sourced for many reasons. 22 00:59 Not only do we want to contribute to the Internet, 23 01:01 but frankly, we need developers 24 01:03 to help us complete this product, 25 01:05 and we need your support. 26 01:06 So we hope after you see this 27 01:08 you're as excited about it as we are. 28 01:11 And number two, 29 01:13 we decided to unveil this product 30 01:15 in its early form at this conference 31 01:17 because it is an unbelievable, powerful demonstration 32 01:20 of what is possible in the browser. 33 01:23 I guarantee you that over the next hour and a half, 34 01:26 as you see this product, you will forget 35 01:29 that you are looking at the browser. 36 01:31 And I want you to repeat after me. 37 01:33 "I am looking at an HTML 5 app. 38 01:36 I am looking at what's possible in the browser." 39 01:39 And I hope you are as excited and delighted as I was 40 01:43 when I first saw the thinking behind this product. 41 01:46 Now, it shouldn't have surprised me 42 01:48 that this product would be magical. 43 01:50 After all, the engineering leadership 44 01:53 had already produced a magical product. 45 01:55 The engineering leadership behind what you're about to see 46 01:59 is the work of two brothers, 47 02:01 and an amazing engineering team with them. 48 02:03 Those two brothers are Lars and Jens Rasmussen 49 02:07 You might remember those names, 50 02:09 because those were the same amazing people 51 02:12 that did another magical app called Maps--Google Maps. 52 02:16 And so you'll see what they've been working on 53 02:18 unveiled for the first time today. 54 02:20 So why don't we go ahead and get started? 55 02:21 Remember, this is an early developer preview 56 02:24 for this audience. 57 02:26 Everyone in this room will get accounts to give us feedback, 58 02:30 and we'll talk about that a little bit later. 59 02:32 We have your email addresses, so you will get those passwords 60 02:35 a little bit later on, likely tomorrow. 61 02:37 With that, let me just go ahead and get started. 62 02:39 Let me introduce Lars Rasmussen and Stephanie Hannon. 63 02:43 Thank you. 64 02:45 [cheers and applause] 65 02:47 Lars Rasmussen: Thank you. 66 02:48 Thank you. Thank you. 67 02:54 Thank you very much. 68 02:56 I shall wake up my laptop. 69 03:00 Good morning, everyone. 70 03:02 Thank you very much for coming early. 71 03:03 I know you've been here partying all night. 72 03:06 Uh, we're going to show a demo today 73 03:07 of a product that we've been working on 74 03:09 for a couple of years down in Sydney, Australia. 75 03:12 It's called Google Wave, 76 03:15 and it's a communication and collaborations tool 77 03:18 that we're launching later in the year. 78 03:20 Uh, like Vic said, it's a little unusual for us 79 03:22 to be showing it to the world this early. 80 03:25 The reason we're doing it is very simple. 81 03:27 We're starting a developer preview today. 82 03:30 You guys will all get accounts 83 03:31 on a sandbox build of the system. 84 03:33 You are the first outside of Google to see this, 85 03:36 and you'll be the first to get accounts on the system. 86 03:39 And we're doing that because as you will see from the demo, 87 03:43 Google Wave comes with a set of really nice APIs, 88 03:45 and we're hoping we can persuade you guys 89 03:47 to start building cool things with those APIs 90 03:51 while we're getting the product ready for launch, 91 03:54 which is going to happen later this year. 92 03:56 Because that way, when we do launch, 93 03:58 our users and your users can enjoy both Google Waves 94 04:01 and all the cool things that we hope you'll build 95 04:04 at the same time. 96 04:05 Let me introduce Stephanie Hannon. 97 04:07 She's quite possibly the best PM in the world. 98 04:10 [cheers and applause] 99 04:12 Hannon: [laughs] 100 04:16 Good morning, I/O. 101 04:18 Thank you, Vic, for the invitation to be here. 102 04:20 We couldn't imagine a better audience 103 04:22 to show our product to first. 104 04:24 Lars Rasmussen: I second that. 105 04:26 Hannon: Our presentation today is in three parts. 106 04:29 First, we're going to show you a demo of the product. 107 04:31 Second, we'll show you the APIs that Lars talked about. 108 04:35 You can use Waves to enhance your Web site 109 04:38 and you can build extensions to Wave itself. 110 04:41 Third, we'll show you that Wave is also a protocol. 111 04:44 We are very passionate about this being 112 04:46 an open system of communication. 113 04:49 We hope other people build Wave services 114 04:51 that interoperate with ours 115 04:53 so users have choice in their provider. 116 04:55 We affectionately call this the three Ps. 117 04:59 Product, platform, protocol. 118 05:01 And we'll talk about them all today. 119 05:04 Lars Rasmussen: Okay, so communication. 120 05:07 Um, email today is by far the most popular way 121 05:10 for us to communicate on the Internet, 122 05:11 which is remarkable, 123 05:13 because email was invented more than 40 years ago. 124 05:16 before the Internet, before the Web, 125 05:19 and it was done without the experience 126 05:21 of things like SMS, and instant messenging, 127 05:24 and blogs, and Wikis, and bulletin boards, 128 05:26 and discussion groups, and social networks, and Wikis, 129 05:29 and media sharing sites, and collaborative editors-- 130 05:33 All of these different kinds of communication 131 05:35 that we take for granted today. 132 05:37 Also, of course, computers and networks 133 05:40 have dramatically improved in those four decades, 134 05:43 and so when we started this project-- 135 05:45 and it's been more than two years-- 136 05:47 we asked ourselves the question, 137 05:49 "what might email look like if it was invented today?" 138 05:53 And needless to say, there is about a million 139 05:54 different ways you can answer that question. 140 05:57 What you're going to see today, Google Wave, is our attempt. 141 06:01 And so let me start by briefly contrasting 142 06:04 email from Wave. 143 06:06 Email essentially mimics snail mail. 144 06:09 The basic metaphor is you write a message 145 06:11 and you send it to one or more recipients, 146 06:14 and then email systems-- 147 06:15 and we like to think Gmail does this particularly well-- 148 06:18 can collate related messages into conversations or threads. 149 06:24 Wave, by contrast, starts out 150 06:28 with the definition of a conversation, 151 06:29 which is simply a lightweight tree structure of messages 152 06:32 and a set of users participating in that conversation. 153 06:35 And then instead of thinking of individual messages 154 06:38 as being sent back and forth, 155 06:40 we think of the entire conversation object 156 06:42 as being a shared object hosted on a server somewhere. 157 06:46 And users that participate can open up that wave, 158 06:50 leave their replies, go away, 159 06:52 and then when the next user comes, 160 06:54 she can open up that same shared object, 161 06:57 see those replies, and add her own. 162 06:59 That's how the wave grows. 163 07:00 That's how the conversation builds up. 164 07:02 And you'll recognize that this is a model 165 07:05 that came to how bulletin boards work. 166 07:07 We found that with a tight enough implementation, 167 07:09 you can use that to build a single communication tool 168 07:12 that has functionality spanning quite a lot further 169 07:15 than what you can do with email today. 170 07:18 And so we'll show you a demo. 171 07:20 It'll take you through a series of usage scenarios 172 07:24 that you'll be familiar with, 173 07:25 but where today we would use different tools for each one, 174 07:29 and we'll show you how it all fits neatly 175 07:31 in this one metaphor of hosted conversations. 176 07:33 Stephanie. 177 07:35 Hannon: So what you are looking at is an HTML 5 app 178 07:38 that we built with the Google Web Toolkit. 179 07:40 On the left side is Lars running Chrome. 180 07:43 On the right side, I'm running Safari. 181 07:46 And a little bit later we're going to throw in Firefox. 182 07:48 So the same thing is being shown on each pair of screens, 183 07:51 you can just choose one to look at. 184 07:54 Lars Rasmussen: Okay, so we'll start 185 07:56 with plain vanilla-type email conversations, 186 07:59 and we'll show you how it looks in Wave. 187 08:02 We're planning a boat trip. 188 08:04 And I'm going to start by clicking "New Wave" here, 189 08:06 and then I'll type my title in the first line. 190 08:08 Hannon: Watch your spelling, Lars. 191 08:09 There's a lot of people. 192 08:11 Lars Rasmussen: [laughs] There is a lot of people. 193 08:12 They can't see what I'm typing anyway. 194 08:14 "Are you ready for the boat trip? 195 08:18 Hey, Steph." 196 08:20 Did you guys like the spell-checker? 197 08:22 [applause] 198 08:23 You do. 199 08:26 We'll talk more about that later. 200 08:27 Since you don't want to watch me type for an hour, 201 08:30 we put canned messages in there. 202 08:31 We'll try hard to pull them out before we launch. 203 08:35 I click "Done," it asks me for more users. 204 08:38 I'll add Stephanie. 205 08:40 And since she is offline, 206 08:42 I'm going to go stare at a blank page. 207 08:45 Hannon: So I will open Wave. 208 08:48 And you'll see in my Search panel, the middle panel, 209 08:50 will be an unread message from Lars. 210 08:53 He's asking me if I want to go shopping, 211 08:55 uh, before this boat trip, 212 08:56 so I'll do something very email like, 213 08:58 which is hit "Reply," 214 08:59 and say, "I looove shopping." 215 09:03 Lars Rasmussen: I wrote the script. 216 09:05 Hannon: "I need new fins. Let's go." 217 09:11 The first benefit I want to show you 218 09:13 of this being a hosted conversation 219 09:15 is it's easier to keep track of structure. 220 09:18 If this was email and I wanted to reply 221 09:20 to the middle part of Lars's message 222 09:21 where he asked which bus to take, 223 09:24 I would hit "Reply," the email client would copy the message, 224 09:27 and I'd hand-edit in the response. 225 09:29 Because this is a hosted conversation 226 09:31 that lives in one place, 227 09:33 I can just instruct the server to split the message apart 228 09:37 and say, "You never wake up early," 229 09:40 which is true. 230 09:42 "Let's take the late bus." 231 09:45 Okay, Lars isn't online; I'm going to close this wave. 232 09:49 Lars Rasmussen: So a little bit later I come back online, 233 09:51 and you'll see, for starters, that that wave is now bold 234 09:54 to show me there is new material in it. 235 09:56 When I open it up, Stephanie's first message gets the highlight 236 09:59 and I can navigate the conversation with my keyboard, 237 10:02 and of course, continue her thread here. 238 10:04 "You know me too well." 239 10:06 Like that. 240 10:08 And that's how plain vanilla email-type conversations 241 10:11 work in Wave. 242 10:13 So you've noticed that we have carefully avoided 243 10:15 having the wave open on both screens. 244 10:17 When we do have the wave open at the same time, 245 10:20 my message bounces right off the server 246 10:23 into Stephanie's browser. 247 10:24 The effect is that you can also 248 10:26 do Instant Messaging-type conversations in Wave. 249 10:29 In fact in the same wave you can switch back and forth 250 10:32 between these different ways of communicating. 251 10:34 I'll show you that now. 252 10:36 Shiny. You must know a good store. 253 10:41 [cheers and applause] 254 10:42 Hannon: There is a new one over on George Street. 255 10:48 Lars Rasmussen: Cool. Let's go at 7:00. 256 10:52 Hannon: "Sounds good. Let's invite Jens too." 257 10:56 Lars Rasmussen: "Okay." 258 10:57 So you noticed that it didn't wait for me to hit "Done" 259 11:00 before showing Stephanie the message, 260 11:02 but rather--and this was difficult to do-- 261 11:04 we transmit live almost character by character 262 11:07 what I'm typing. 263 11:08 Why did we do that? 264 11:09 It's because with today instant messaging tools 265 11:11 you spend half of your time looking at it saying, 266 11:14 "Stephanie is typing, she's typing, she's typing, 267 11:16 she's typing," and then you see what she said. 268 11:21 Thank you. [laughs] 269 11:23 But because in general you can start formulating your own reply 270 11:27 before Stephanie is done typing hers, 271 11:30 by doing this live transmission, 272 11:31 you end up spending 100% of your time either reading or writing, 273 11:34 which dramatically speeds up the conversation. 274 11:37 Now needless to say, there are times 275 11:38 you don't want everyone to see every keystroke, 276 11:41 in particular if you spell like I do. 277 11:43 Um, and so we have this checkbox here. 278 11:46 All you have to do is check it 279 11:47 and now no one can see what you're typing 280 11:49 until you hit that "Done" button. 281 11:50 This is one of the features we haven't implemented quite yet. 282 11:53 [laughter] 283 11:58 Okay, so that's how email conversations, 284 12:00 or rather email-type conversations 285 12:02 and instant messaging-type conversations 286 12:04 no longer require two separate tools. 287 12:07 Next thing we want to show you is how easy it is 288 12:09 to add a new person to an ongoing conversation. 289 12:12 Can I just introduce my brother Jens, by the way? 290 12:15 Give him a hand, please. 291 12:16 [cheers and applause] 292 12:22 So we want to-- 293 12:23 We want to add Jens to the conversation. 294 12:25 If this was email, I would take the last message here, 295 12:28 reply to it and add Jens to the recipient list. 296 12:31 There's two problems with that. 297 12:32 For starters, 298 12:33 because we branched the conversation up here, 299 12:36 that last email message 300 12:37 would not contain the entire conversation. 301 12:39 But also, if Stephanie then later 302 12:42 went and replied to an earlier message of mine, 303 12:44 Jens wouldn't get that anyway. 304 12:46 You end up with these cat and mouse games. 305 12:48 In the Wave model, all you have to do 306 12:51 is make Jens a participant in the wave like that. 307 12:55 And now I'll switch over to Firefox here 308 12:58 where Jens is already signed in. 309 13:01 Jens Rasmussen: So now that I'm on the wave, 310 13:03 um, I'm going to open it, 311 13:05 and, of course, everything is going to be marked 312 13:08 as unread for me. 313 13:10 But because I was added late, 314 13:11 I didn't get to see Lars's message in one piece, 315 13:14 and by the time I'm added they could be arbitrarily far apart. 316 13:17 So we added a feature called Playback. 317 13:20 So I get to see Lars's original message, 318 13:23 Lars asks Stephanie, Stephanie replies, 319 13:26 Steph does in-line reply, and so on, and so on. 320 13:29 [applause] 321 13:32 Thank you. 322 13:34 So Playback turns out to be a really useful feature, 323 13:37 particularly when the wave 324 13:38 starts picking up more structure, 325 13:39 and we'll show you more of that later. 326 13:41 But now that I've caught up on this wave, 327 13:43 I'm going to just add my reply. 328 13:48 "Me too." 329 13:50 Oh, I think I crashed. 330 13:51 Lars Rasmussen: Did I mention that it's a developer preview? 331 13:54 [laughter] 332 13:55 So we made sure to inject a few bugs 333 13:57 so that you wouldn't have too high expecta-- 334 13:59 I'm just kidding. 335 14:05 Jens Rasmussen: Did you notice how quickly it reloads? 336 14:07 [laughter] 337 14:09 Did we mention we used GWT? 338 14:13 All right, so I'm going to add my reply. 339 14:16 "Me too. 340 14:17 Don't forget your keys." 341 14:22 And then I'll hand it back to Lars. 342 14:24 Lars Rasmussen: Thank you. 343 14:25 So that's how easy it is to add a new person 344 14:28 to an ongoing conversation. 345 14:30 And so often we end up having 346 14:31 very nice group conversations in Wave. 347 14:33 And then occasionally you want to say something 348 14:35 in a wave that's not visible to all the participants. 349 14:38 We call that a "Private Reply," 350 14:40 and I'll add one down here at the bottom, 351 14:42 and I'll say, 352 14:43 "Let's buy Steph a reeeally nice present." 353 14:49 Hannon: I wrote this part. 354 14:51 Lars Rasmussen: And then I will add just Jens, 355 14:53 and you will see, 356 14:55 if I just quickly flip over to Jens's browser, 357 14:58 and scroll down, 358 14:59 he sees that private reply, 359 15:01 but if you look at Stephanie's screen, 360 15:04 she doesn't see it. 361 15:06 If you remember, I've explained 362 15:07 that a wave is a tree structure of messages. 363 15:09 Essentially you can take any sub-tree of the wave 364 15:13 and restrict access to a subset of the participants. 365 15:17 Okay, I switch back to my own account, here. 366 15:20 The next thing we want to show you 367 15:22 is how attachments work in Wave. 368 15:23 So we've been on a boat trip-- 369 15:25 It was very nice, thank you-- 370 15:26 And we all got pictures. 371 15:28 I have six of them sitting here on my desktop, 372 15:30 and I'm going to drag them onto the wave like this. 373 15:35 [applause] 374 15:42 Hannon: You might not have noticed, 375 15:44 but the thumbnails appeared on my screen 376 15:47 long before the full images were uploaded from Lars's computer. 377 15:50 I'll show you that again 378 15:52 by dragging in my own photos from iPhoto. 379 15:57 Ready? Here we go. 380 15:59 Lars Rasmussen: And you can see them show up over on my screen. 381 16:02 audience member: Yeah. 382 16:03 [applause] 383 16:04 Lars Rasmussen: Don't be shy, you guys. 384 16:06 If you like what you see, don't be shy letting us know. 385 16:09 [cheers and applause] 386 16:11 We can--we can handle pretty much any amount of applause. 387 16:15 [laughter] 388 16:17 Hannon: This feature-- 389 16:18 drag and drop from the desktop to the browser-- 390 16:20 is the one part of Wave that HTML 5 can't support yet. 391 16:25 We're working on a proposal to add it to the standard. 392 16:28 In the meantime, you need to download Gears 393 16:30 for this specific feature to work. 394 16:32 It's the only part of Wave that you need Gears for. 395 16:36 When Lars dropped in his images, 396 16:38 you might've noticed at the bottom of the Wave panel 397 16:40 there's an Image menu 398 16:41 with actions you'd probably do on images, 399 16:43 like upload or download. 400 16:46 What's important is these actions 401 16:47 apply to all the images in the wave, 402 16:50 not just the ones I dropped in, 403 16:52 which makes Wave really an easy, lightweight way 404 16:54 to create a group photo album together, 405 16:57 which is surprisingly hard to do with today's tools. 406 17:00 Lars Rasmussen: And so here's the photo album. 407 17:02 This is Captain Athena. 408 17:04 Here's the hard life down under. 409 17:06 And as advertised, you'll see over here 410 17:08 Stephanie's images show up in my slideshow 411 17:10 so that I can show you 412 17:11 just how much fun life down under is. 413 17:17 And that's images. 414 17:19 So that's how easy it is to share photos in Wave. 415 17:21 This was a group trip. 416 17:23 We'll all throw our photos in here. 417 17:24 We'd probably share it with the rest of the office 418 17:26 to make them envious. 419 17:27 In this particular case, it's not clear 420 17:30 that we want everyone to know that we went shopping together. 421 17:33 And so one of the features down here 422 17:35 lets me copy just the images 423 17:37 from this wave into a fresh wave. 424 17:39 "Boating in January. 425 17:42 Enjoy all, here and yonder." 426 17:47 And then I'll add Stephanie to this. 427 17:49 I could now share that with the rest of the office. 428 17:52 Now, this feature here of extracting images 429 17:55 from a wave and putting them in a new one 430 17:57 is actually part of a very important 431 17:59 design principle for us. 432 18:00 Namely that we care just as much 433 18:02 about the product of the wave as we do the wave itself. 434 18:06 And we'll show you more examples of that later. 435 18:11 Yes, we will. 436 18:13 Um, I forgot what's next. 437 18:16 Hannon: How 'bout we show them the embedding APIs? 438 18:19 Lars Rasmussen: Excellent idea. 439 18:20 Okay, thank you. So... 440 18:21 [laughter] 441 18:22 She's right. 442 18:24 We should've rehearsed this before coming this morning. 443 18:26 Just kidding. 444 18:27 So the first-- 445 18:29 The first category of, um, APIs that we want to show you 446 18:32 are APIs that let you embed waves onto your webpage. 447 18:37 It is very similar to the Maps API, 448 18:40 which, by the way, um, thank you, everyone who used it. 449 18:43 We consider your enthusiasm for that API 450 18:46 an enormous factor in that product's success, 451 18:49 and we're hoping, obviously, to repeat that with Wave. 452 18:52 Hannon: Give a round of applause to themselves. 453 18:54 Lars Rasmussen: Oh, yeah, a round of applause to yourself. 454 18:56 Well done. [applause] 455 18:58 Lars Rasmussen: Okay, so... Hannon: Yay, developers! 456 19:01 Lars Rasmussen: Here's an example application. 457 19:02 It's a little blogging site we've built. 458 19:04 It's over on Google App Engine, 459 19:06 but you could build it anywhere you host your website. 460 19:09 And this blogging site-- 461 19:10 In addition to embedding waves on its pages, 462 19:13 it provides me with this robotic participant 463 19:16 that we affectionately call Bloggy. 464 19:18 All I have to do is add Bloggy to the wave, 465 19:22 and now you'll see-- 466 19:24 You can probably not read that, 467 19:25 but on that yellow banner, 468 19:27 all users on the wave is now warned that Bloggy, 469 19:30 this new participant, has published the blog 470 19:33 on a page which we built over an app engine. 471 19:36 Can I just introduce Gregory Delasander? 472 19:39 He's another PM on the team. 473 19:40 [cheers and applause] 474 19:42 And he's going to show you the blog site now. 475 19:45 Delasander: Hi, I'm Greg, 476 19:46 and I'm a huge fan of Lars's blog, 477 19:47 just like everybody on the team is told they should be. 478 19:50 I'm going to show you... Hannon: He makes us read it. 479 19:53 Lars Rasmussen: It's a good blog. Come on. 480 19:54 Delasander: Oh, hold on just a second. 481 19:59 Did we lose... 482 20:02 Hannon: Did we lose VPN? 483 20:03 Delasander: Yes, I think we might have. 484 20:05 Hannon: Lars, this is where you do the dance. 485 20:06 Delasander: Lars, dance a little bit. 486 20:07 Lars Rasmussen: Everyone look at me. 487 20:08 Don't look at his screen. 488 20:09 [humming] 489 20:11 The Wave dance. 490 20:12 Delasander: I think we lost all connectivity. 491 20:14 Lars Rasmussen: Neener, neener. Neener, neener. 492 20:19 There's not a-- Delasander: And then... 493 20:22 Lars Rasmussen: There's not a lot of people in the world 494 20:23 that can have their demos as spectacularly fail 495 20:25 in front of 4,000 people and not break a sweat. 496 20:29 Hannon: It wasn't the demo, it was the network. 497 20:31 Lars Rasmussen: We wish we were one of them. 498 20:33 Delasander: Excellent. 499 20:34 Lars Rasmussen: I think your proxy server might be missing. 500 20:36 Oh, there we go. Hannon: All right, we're back. 501 20:38 Delasander: So as I was saying... 502 20:42 The blog. 503 20:44 So in the blog, one of the cool things you'll s-- 504 20:46 you can see is that we're not just embedding the images, 505 20:49 we're actually embedding the whole wave 506 20:50 with all of its UI. 507 20:52 This means that I can respond. 508 20:54 "Hey, that looks fun. Why wasn't I invited?" 509 20:57 [cheers and applause] 510 21:03 The same way we embed-- 511 21:06 And we--we do-- 512 21:07 You can respond in the same way you do in the Wave client. 513 21:10 Lars Rasmussen: Exactly. 514 21:11 And so now, I can see, obviously, uh, 515 21:13 Greg's question from inside my Wave client. 516 21:15 I can answer from in here. 517 21:17 I don't have to go to the blog site to do that. 518 21:19 I could if I wanted to, but I can stay here. 519 21:22 "Um, I lost the phone with your number." 520 21:28 I really, truly can't spell. 521 21:30 Here we go. 522 21:32 Delasander: So one of the things you just saw 523 21:34 is that I happened to be online when Lars was online, 524 21:36 and I saw his response coming in live on his blog. 525 21:39 That's not always going to be the case. 526 21:40 Since I responded to this blog, 527 21:42 it'll show up in my Wave client. 528 21:45 Right after I refresh my Wave client. 529 21:49 Um, it will show up in my Wave client 530 21:51 and I can continue the conversation in there. 531 21:54 "But, Lars, I live next door." 532 21:57 [laughter] 533 22:00 And, um-- And then we can-- 534 22:01 That response shows up on the blog, 535 22:04 we can continue the conversation from there, 536 22:06 and anyone else can join in that conversation. 537 22:09 Lars Rasmussen: Thank you, Greg. Delasander: No problem. 538 22:11 [applause] 539 22:14 Lars Rasmussen: Thank you. 540 22:17 And so this, again, is an example 541 22:19 of how to use our embedding APIs to put blogs on your web pages, 542 22:23 and here we showed you with a blogging site, 543 22:25 but you could imagine discussion group sites, 544 22:27 community forums-- 545 22:28 if you have a rich-media site 546 22:29 you can let your users discuss that using waves. 547 22:33 The benefit for developers, of course, 548 22:34 is you get to provide this very live, rich experience 549 22:38 with very little code. 550 22:39 For your users, for starters, they get to use a familiar UI, 551 22:43 but for those of your users that have Wave accounts, 552 22:46 they get to walk around the Web 553 22:48 and aggregate the conversations they're interested in 554 22:50 into the Wave client so that they don't 555 22:52 have to go check back on 10,000 different pages 556 22:55 whether someone responded to them. 557 22:57 Which will make flame wars so much more effective. 558 23:00 [laughter] 559 23:01 She hates that joke. 560 23:03 Hannon: I hate it. [laughs] 561 23:05 Lars Rasmussen: Okay. 562 23:06 So that was an example of how to embed waves. 563 23:09 The embedding APIs can do other things, 564 23:11 and Stephanie will show you that now. 565 23:13 Hannon: So we invited some of our colleagues 566 23:15 from Brazil and India to Sydney 567 23:17 who work on one of our social networks called Orkut. 568 23:20 We wanted to build a demo of what it could look like 569 23:23 to put waves inside of Orkut. 570 23:25 Obviously, it's a place where lots of discussions happen. 571 23:28 It demonstrates three important principles, 572 23:31 or features, of our embed API. 573 23:34 Let me load up the demo. 574 23:42 So here's my Orkut account. 575 23:44 And you can see there's a Wave panel in the middle. 576 23:47 And the first thing is I can create a wave on Orkut. 577 23:51 So I'm starting a new wave, and I'll say, "Brazil trip? 578 23:54 Wonder when Lars will let me go." 579 00:01 The second important feature is that you can 580 00:03 use contacts other than your Wave contacts. 581 00:06 In this case, the authors of the site 582 00:08 chose to use the Orkut contacts, 583 00:10 so I can add some of my Orkut friends 584 00:12 like Sid, Torston, and Rodrigo, 585 00:16 who all helped build this demo. 586 00:18 The third principle is that I can embed a "Search" panel 587 00:21 inside of Orkut using the embed API. 588 00:25 I'll show you that now. 589 00:27 I can search for all my waves from here. 590 00:32 And so on. And look at them. 591 00:35 So that's waves embedded in Orkut. 592 00:38 What's important is that our embed API 593 00:41 is powerful enough for you to build your own Wave client. 594 00:45 In this case, the Orkut team 595 00:46 chose to focus on waves created inside of Orkut. 596 00:49 But just like in the blog example, 597 00:52 I can go back to my Wave client, 598 00:54 and I can see the wave I started there. 599 00:57 "Wonder when Lars will let me go to Brazil." 600 00:59 So that's the embed API. 601 01:02 Lars Rasmussen: You guys-- [applause] 602 01:04 Thank you. 603 01:09 Are you guys feeling inspired yet? 604 01:11 So remember that we're all going to give you accounts 605 01:13 on a sandbox build, 606 01:15 which is in fact the build that we're demo-ing from later today, 607 01:18 and this is all sample applications 608 01:21 that we're hoping you'll pick up 609 01:22 and build much, much cooler things with. 610 01:25 Okay, so the next thing I want to show is 611 01:27 of course you're going to want Wave on your mobile devices, 612 01:31 and I have an Android and an iPhone here, 613 01:34 and I was going to show you how well it works communicating 614 01:38 from mobile devices to the desktop, 615 01:41 but you guys are all on Facebook, aren't you? 616 01:43 Because I can't get on the wireless. 617 01:46 [laughter] 618 01:47 So if it doesn't work, it's your fault. 619 01:51 Okay, so you can see my inbox over here. 620 01:53 This is on the Android device. 621 01:54 Here's an open-- 622 01:56 uh, the same open wave we saw before. 623 01:58 You see the pretty pictures here. 624 02:00 And then I can click the "Reply" button like this, 625 02:05 and you'll see over on Stephanie's screen, 626 02:08 which I can't see. 627 02:11 You will see a reply. 628 02:13 Imagine I was actually on a network, 629 02:15 and then I could type in, "I am on the boat." 630 02:21 Done. 631 02:23 Notice again my spelling. 632 02:25 And nothing is going to show up over there 633 02:27 because we haven't yet figured out 634 02:28 squeezing this through without a connection. 635 02:32 Maybe we'll show you that. 636 02:33 [laughter] 637 02:35 Hannon: As long as it's your fault that it's not working. 638 02:37 Lars Rasmussen: We are-- 639 02:38 Hannon: I just don't want to screw up the-- 640 02:39 Lars Rasmussen: We are working on it. 641 02:40 Okay, so that's mobile. 642 02:44 Hannon: How 'bout we talk about editing? 643 02:46 Lars Rasmussen: Oh, that's a brilliant idea. 644 02:47 Thank you. 645 02:49 Okay, so the next thing we're going to show. 646 02:51 Again because, um, there's only-- 647 02:53 Back to my desktop. Thank you. 648 02:54 There is only one copy of the wave out there. 649 02:57 Even though we put these pictures on my blog, 650 02:59 I discussed them with Greg, 651 03:01 uh, we had them on my mobile device. 652 03:03 Now I notice that some of the captions 653 03:05 are kind of wonky. 654 03:06 And all I have to do is click this "Edit" button here, 655 03:09 and then I can fix that. 656 03:11 Kayaks. Beer Man. 657 03:14 Thank you. [applause] 658 03:18 Hannon: And as you notice, 659 03:19 the captions are updating on the blog. 660 03:22 Lars Rasmussen: Yes, hopefully you saw that the captions 661 03:24 were actually updating live on the blog as I was typing. 662 03:28 So, here I edited my own message, 663 03:30 but we actually let users edit each other's messages as well, 664 03:34 which is a very nice effect that in addition 665 03:36 to everything we showed you already, 666 03:38 you can use waves 667 03:39 to collaboratively author documents, 668 03:41 which we'll show you now. 669 03:42 So let's leave the boat behind, and let's go to work. 670 03:45 Stephanie. 671 03:47 Hannon: As Lars mentioned, I'm a product manager, 672 03:49 and I often have to take notes in a meeting. 673 03:51 Today I have to decide if I want to send those notes 674 03:54 out on email because I want people to discuss them, 675 03:57 or if I'm going to put them in a dock or a Wiki, 676 03:59 'cause I want other people to help me edit them. 677 04:01 With Wave you don't have to make that choice. 678 04:03 You can do both discussion and content collaboration 679 04:07 in one tool. 680 04:09 So these are our meeting notes. 681 04:11 I'm going to add Lars, 682 04:13 Jens, Greg, and ACD. 683 04:17 [Lars Rasmussen and Hannon speak over each other] 684 04:18 Lars Rasmussen: Pardon me. 685 04:20 Hannon: Then you open it. 686 04:21 Lars Rasmussen: Then I open it. 687 04:22 And even though this is Stephanie's message, 688 04:24 I can click that same "Edit" button 689 04:26 and change this to "glorious." 690 04:31 And then I can add an action item. 691 04:33 "AI. Make more better AIs, already." 692 04:38 Whoo, like that. 693 04:39 Thank you. 694 04:40 [applause] 695 04:43 Thank you. 696 04:44 And so that's how easy it is 697 04:46 for me to edit Stephanie's message. 698 04:48 We want to show you now how it looks 699 04:49 to the other participants on the wave-- 700 04:51 the fact that I edited her message. 701 04:52 We'll start with Stephanie. 702 04:54 Hannon: So you can see the wave pop back into my inbox 703 04:56 because there's new material. 704 04:58 If I open it, I see the markups. 705 05:01 So I see the changes that Lars made. 706 05:03 Lars Rasmussen: Thank you. 707 05:05 [applause] 708 05:09 Hannon: We haven't implemented it yet, 709 05:11 but we'll also have a little description at the top 710 05:12 that says Lars edited this message. 711 05:15 What's important is I see these markups 712 05:17 not because I wrote the original message, 713 05:20 but because I saw the original message. 714 05:23 Anyone who saw my original message 715 05:25 would see these same markups 716 05:27 the next time they visited the wave 717 05:29 after Lars made his edits. 718 05:31 Jens Rasmussen: All right, now, 719 05:32 I didn't get to see the original message, 720 05:33 so when I open up this wave, 721 05:35 I just see the current version of it. 722 05:37 But I do get to see 723 05:38 that both Stephanie and Lars wrote this message. 724 05:41 Most of the time I'm not going to care, 725 05:44 but if I do care, then Playback is my friend again. 726 05:47 So I see Stephanie's original message, 727 05:49 she adds Lars, 728 05:51 and then I get to see Lars's edits. 729 05:55 [applause] 730 05:58 Thank you. 731 06:00 So now that we have accountability-- 732 06:01 accountability in place, 733 06:03 we're going to allow everybody on a wave 734 06:05 to edit everything by default. 735 06:08 When something is changed, 736 06:09 the author is notified immediately, 737 06:10 and, if needed, can take action. 738 06:12 and everybody who's on the wave can find out who did what. 739 06:17 So Stephanie promised that we were going to do 740 06:20 collaboration and communication using the same tool. 741 06:22 Hannon: I did. Jens Rasmussen: So I'm going-- 742 06:24 Now that I know that Lars made this--the request for more AIs, 743 06:27 I'm going to use the in-line reply tool we showed earlier, 744 06:30 um, to add my reply here. 745 06:34 "No, enough AIs already." 746 06:40 My spelling is not doing well either. 747 06:44 Lars Rasmussen: It's hard when 4,000 people are watching. 748 06:46 Jens Rasmussen: Typing and talking? 749 06:47 It's a little bit too much. 750 06:48 There we go. So I'll hand it back to Lars. 751 06:50 Lars Rasmussen: Okay, thank you. 752 06:51 So notice-- 753 06:53 Notice that we never said, "Let's start a document, here." 754 06:56 These are all just waves. 755 06:57 The only thing different here 756 06:58 is that we chose to think of that opening message 757 07:01 more like a document we're collaborating about 758 07:03 than a message that starts a conversation. 759 07:06 And then we're choosing to think about that in-line reply 760 07:09 more like the beginning of a conversation 761 07:11 about the point in that document. 762 07:13 But to the system, they're all just waves, 763 07:15 and in fact, you can collaboratively edit 764 07:17 any message in the tree. 765 07:19 Doesn't have to be, uh, document-like at all. 766 07:22 Stephanie often comes and very friendly fixes 767 07:24 all of my spelling errors. 768 07:27 And so we think this combination of collaborative editing 769 07:31 and in-line discussion 770 07:33 makes for a very powerful collaboration tool. 771 07:35 And I want to show you that with a design document 772 07:38 that the team wrote a while back. 773 07:41 Let me just reconfigure my client, here. 774 07:43 I'm going to go do a safe search, find the document here, 775 07:49 Let me make some more space for it. 776 07:51 And you'll see here that it's a RISTEX document. 777 07:54 It's got headlines, it's got bullet points. 778 07:55 It's got illustrations, different types of fonts. 779 07:58 And then it's interrupted 780 07:59 by these little snippets of conversation 781 08:02 that help facilitate the collaboration. 782 08:05 And as always, the best way to see how this happened 783 08:07 is to play back the wave. 784 08:09 And you'll see Steven, our trusted server guy, 785 08:11 started out with a terse draft. 786 08:13 He added the rest of the team 787 08:15 Lars the manager says, "Please do more work." 788 08:18 Steven grudgingly adds another paragraph. 789 08:20 He says, "Yeah, whatever." 790 08:22 Then Stephanie the PM makes an edit here. 791 08:24 She adds a comment there, 792 08:26 starts a discussion there, and so on. 793 08:29 I can use the slider here to drag it 794 08:31 to anywhere in the history of the wave. 795 08:34 And we're planning a bunch of power tools 796 08:36 that come with Playback. 797 08:38 For example, I might ask it 798 08:39 only to play back Stephanie's contribution. 799 08:41 So I might ask it to only play back a single message 800 08:44 or even a single paragraph inside a message. 801 08:47 we're definitely going to let you take 802 08:48 one change in the history 803 08:50 and revert it at the end of the history. 804 08:52 Maybe name aversion so that you can find it again and so on. 805 08:55 Playback is going to be a really powerful tool 806 08:57 for investigating and manipulating 807 09:00 the entire history of the wave. 808 09:04 Thank you. 809 09:05 [applause] 810 09:10 And so now imagine we're done with the design document. 811 09:13 Or we find we're in a good state; 812 09:15 we want to share it with a wider audience. 813 09:17 You'll notice it's not super comfortable reading a document 814 09:19 interrupted by all this discussion, 815 09:21 so we added this widget here 816 09:23 that lets you hide and show some discussions, 817 09:27 but also, just like we extracted images from a wave earlier, 818 09:31 we let you extract the current version 819 09:33 of any message in a tree into a fresh wave. 820 09:36 Like this. 821 09:37 And now I have a fresh wave 822 09:39 with the pristine product of our work, 823 09:42 which I can now submit to the server 824 09:44 and share with whomever I like, 825 09:45 put on a mailing list internal blog or even keep working on. 826 09:49 And in fact, we're planning more features here 827 09:52 for document production. 828 09:53 Imagine you go back and do more work 829 09:55 in the original wave. 830 09:57 Then you'll be able to merge just those changes 831 09:59 into that same product wave. 832 10:01 The product wave will just have a two-step history now, 833 10:04 where each step is attributed to whoever did the copy. 834 10:07 In fact, and you guys will recognize this as, um, 835 10:10 inspired by source-controlled systems. 836 10:12 We'll have you-- 837 10:13 We'll let you have a whole string of work waves, 838 10:15 all pointing to the same product wave. 839 10:17 You can have different themes 840 10:18 working on different parts of a wave, 841 10:20 and then when one team merges 842 10:22 and that changes into the product wave, 843 10:24 the other teams can pull that down, 844 10:25 merge it with the local changes, and so on. 845 10:28 So this is going to become 846 10:29 a very powerful document production tool. 847 10:33 Thank you. 848 10:34 [applause] 849 10:39 We showed you this, of course, with, um, 850 10:42 with, uh, rich text documents. 851 10:44 There's no reason we shouldn't 852 10:46 later add spreadsheet-type functionality in there, 853 10:48 or presentation building-type functionality in there. 854 10:50 In fact as we'll show you later, we've taken great care 855 10:53 to make the content model inside Wave extendable, 856 10:56 both by us and by you. 857 10:59 Okay, the next thing I want-- 858 11:00 Hannon: Why don't you just talk for a minute 859 11:02 before you open it? 860 11:03 Lars Rasmussen: Talk for a minute... 861 11:05 Hannon: You know. 862 11:06 Lars Rasmussen: Before I open it. 863 11:07 Hannon: 30 seconds. 864 11:08 Lars Rasmussen: We could do a little interpretive dance 865 11:10 while we open it. 866 11:11 It's not that there's anything wrong 867 11:12 with the thing I was about to open, 868 11:13 it's just that-- 869 11:14 How're you guys doing? 870 11:15 [laughter] 871 11:17 Are you having a good time? 872 11:18 I know it's a long demo. Thank you. 873 11:20 Don't be shy if you like it. 874 11:23 Hannon: All right, we're ready. 875 11:24 Lars Rasmussen: There's a whole bunch of people 876 11:25 in blue shirts working feverishly over there. 877 11:28 [chuckles] And we're ready. 878 11:30 Okay, so here is a wave, um... 879 11:33 Here is a wave. That's right. 880 11:34 So my little introduction here is the following: 881 11:37 We're going to show you now 882 11:38 the thing we had the most fun working on. 883 11:40 As in this was the hardest thing we did. 884 11:43 Um, which is to let more than one person 885 11:46 edit the same message at the same time 886 11:48 and still transmitting the characters live on the wire. 887 11:51 So we have a set of pictures here, 888 11:52 and Stephanie is going to start 889 11:54 at the top-left editing the captions. 890 11:56 You can see on my screen 891 11:57 I can see exactly where that orange label--where she is, 892 12:00 and I'm going to start from the lower-right. 893 12:02 Hannon: "Thumbs up." 894 12:04 Lars Rasmussen: "Spelling Google." 895 12:06 Hannon: "Lars in the lead." 896 12:07 Lars Rasmussen: "Smiley David." 897 12:09 Hannon: "Wave crew hiking." Lars Rasmussen: "Kapow." 898 12:11 [applause] 899 12:12 Thank you. 900 12:14 Now we're very close to each other. 901 12:15 I'll add some styling here. 902 12:17 I'll make this italic. 903 12:19 Oh, boy, if someone can add some color. 904 12:22 We can do this. 905 12:23 Notice how close we can edit to each other. 906 12:25 You can see we've got a couple of-- 907 12:26 of our team has joined us. 908 12:28 We've got three people here. 909 12:29 Casey, Steph, Ophir and Dan. 910 12:32 We have four people now, 911 12:34 editing the same document right next to each other. 912 12:37 [applause] 913 12:41 Thank you. 914 12:43 Thank you. 915 12:45 And so apart from hours and hours of fun 916 12:47 just chasing each other's carrots around on the screen... 917 12:50 [laughter] 918 12:51 Hannon: It's a lot of fun. Lars Rasmussen: A lot of fun. 919 12:54 Um, the--the--this sort of live, concurrent editing 920 12:57 opens up a whole set of new ways of using the tool. 921 13:00 We're actually still discovering some. 922 13:02 Imagine you're in the same room, 923 13:03 you're taking notes from a meeting. 924 13:05 Oftentimes people don't even come to the meeting, 925 13:07 they just open up the wave, see the notes being taken, 926 13:10 they just pop their questions in the wave, and so on. 927 13:14 I want to-- while I'm showing off our edit, 928 13:16 I want to make sure you see 929 13:18 that it supports right-to-left languages. 930 13:20 This is Ophir speaking in Hebrew. 931 13:23 Thank you. 932 13:24 [applause] 933 13:28 You see up at the top-left that the editor supports languages 934 13:31 that require international input method editors as well. 935 13:35 I'm pretty sure that's Chinese. 936 13:40 Okay. That's collaborative editing. 937 13:46 And now... 938 13:48 Man, this is a long demo. 939 13:50 You guys want to stand up a little? 940 13:51 Stretch. Hannon: Any stretching? 941 13:52 Lars Rasmussen: Stretch a little. 942 13:53 Hug the person next to you. 943 13:55 [laughter] 944 13:56 You don't have to do that. 945 13:57 Hannon: A hug break. Make some friends. 946 14:00 Lars Rasmussen: Um, I want to take a little break. 947 14:02 We have lots more to show you, 948 14:04 but I want to take a little break, 949 14:05 and I want to, um, call out to our friends and colleagues 950 14:09 on the Google Web Toolkit team. 951 14:11 So--Thank you. 952 14:12 [applause] 953 14:14 Thank you. 954 14:18 So Google Wave is 100% built with the Google Web Toolkit 955 14:22 from the first line of code we wrote in a prototype 956 14:25 back in early 2007. 957 14:27 And as I'm sure you know, the Google Web Toolkit 958 14:30 lets you write HTML 5 applications in Java. 959 14:34 And then GWT, as we call it, 960 14:36 automatically translates that into HTML, JavaScript, CSS, 961 14:40 all of those things that then run 962 14:41 in all of the modern browsers. 963 14:43 And I think that we couldn't possibly have built 964 14:47 something this rich without the Google Web Toolkit. 965 14:50 In fact, I don't think we would even have thought to do that. 966 14:54 I think using modern tools like this 967 14:56 changes your way of thinking. 968 14:58 When I was still hand rolling JavaScript for Google Maps, 969 15:01 I found too much of my brain cycles 970 15:05 were used worrying about the constraints of programming 971 15:07 in a scripting language in a browser. 972 15:09 But by using GWT, I get to write in Java 973 15:12 and have this amazing set of tools 974 15:13 that come with writing in Java, 975 15:15 and we found that our programmers 976 15:17 can now spend most of their time 977 15:18 thinking about the amazing potential of the Web. 978 15:23 And by the way, this is both if you're on a desktop 979 15:26 or if you're on a mobile device, 980 15:28 when I showed you on the Android and iPhone here, 981 15:31 Wave was running in the browser in both of those phones. 982 15:35 GWT makes that fairly easy to do. 983 15:37 It's actually the same code 984 15:39 that runs in those mobile devices, 985 15:41 it's just a different layout. 986 15:43 We estimate that the extra requirement of serving this 987 15:46 both into desktop browsers and mobile browsers 988 15:49 only adds about 5% extra engineering effort, 989 15:52 which I find remarkable. 990 15:56 Okay. 991 15:57 Hannon: And that graph from yesterday. 992 15:58 Lars Rasmussen: Pardon me. 993 16:00 Oh, the graph from yesterday. Did you see that? 994 16:01 How we built 1.4 megs of code and then all of a sudden 995 16:04 it went down to 200k? 996 16:06 We like GWT for that. 997 16:09 [applause] 998 16:13 Hannon: All right. So back to the demo. 999 16:15 Let's talk about organization. 1000 16:17 We learned from our own use of Wave 1001 16:20 that you get a lot of waves, which is great, 1002 16:23 but you need tools to organize them. 1003 16:25 We have things you're familiar with 1004 16:26 like folders and saved searches. 1005 16:29 We also have tags and they're shared 1006 16:31 by all the participants on the wave. 1007 16:34 So you have just as much incentive 1008 16:35 to put a great tag on a wave as a great subject. 1009 16:39 For example, Lars is way too lazy 1010 16:41 to organize his own stuff. 1011 16:42 Lars Rasmussen: Oh, yeah. 1012 16:43 Hannon: So we have a team help him do it. 1013 16:46 Lars Rasmussen: Thank you. Hannon: [laughs] 1014 16:48 But the most powerful way to organize waves 1015 16:50 is with waves themselves. 1016 16:52 Let me open a wave we used to organize this demo. 1017 16:55 You can see it has links to other waves in it 1018 16:57 and you can combine, uh, them in sections, formatting. 1019 17:01 You can discuss them. 1020 17:03 And if I click on one of these links, 1021 17:05 it'll take me to that wave 1022 17:07 and I can use the back button to go back. 1023 17:10 So let me show you how easy it is 1024 17:12 to create one of these wave links. 1025 17:14 If I missed one, I can just pick it up 1026 17:17 from the search panel and drop it in. 1027 17:20 [applause] 1028 17:25 I'll do that one more time 'cause I think it's cool. 1029 17:28 Drop it in. 1030 17:30 So we found on our own team 1031 17:32 links--wave links are good for more than just lists. 1032 17:34 We're actually interlinking a lot of waves on our site 1033 17:37 almost like a Wiki, uh, on our team. 1034 17:40 Before we get to Wave extensions, 1035 17:42 which I know this audience is really excited about, 1036 17:44 I want to show you one more thing 1037 17:46 that we worked really hard on. 1038 17:48 I'm going to go up here and search for Google Wave. 1039 17:51 Lars Rasmussen: I have a feeling, uh, you're going 1040 17:52 to want to refresh your browser before we do this. 1041 17:55 Hannon: Just like my inbox, when a wave matches this search, 1042 17:59 it will pop into the panel. 1043 18:03 Lars Rasmussen: And so Stephanie has a search 1044 18:04 for Google Wave over there. 1045 18:06 I'm teeing up a new wave here. 1046 18:08 Said, "Wow. 1047 18:09 I am finally demo-ing Google Wave." 1048 18:15 Now the reason this hasn't showed up 1049 18:17 in Stephanie's search yet is I didn't type the E. 1050 18:20 So what I'm going to do, I'm going to count to three, 1051 18:22 then I'm going to hit the E, 1052 18:24 and you guys can count how many seconds it takes 1053 18:26 before it shows up in Stephanie's browser. 1054 18:28 One, two, three. 1055 18:32 [applause] 1056 18:37 You guys want to-- you guys want to see that again? 1057 18:40 [laughter] 1058 18:41 Hey, Stephanie, can you open up that wave for me? 1059 18:44 Hannon: All right, let me go over there. 1060 18:45 Lars Rasmussen: Backspace. 1061 18:46 Hannon: [laughs] 1062 18:48 [laughter and applause] 1063 18:51 Lars Rasmussen: E, backspace, E, 1064 18:53 backspace, E, backspace, E, backspace. 1065 18:57 We call that the Wave dance. 1066 19:00 So we've worked really hard on this. 1067 19:02 We're pretty proud of the result. 1068 19:03 I should just say after we started using it, 1069 19:06 we found this is almost too fast. 1070 19:07 Sometimes, uh, it draws your attention 1071 19:09 to unfinished work. 1072 19:10 And we're actually looking for the right balance 1073 19:12 between speed and not being interrupted too often. 1074 19:17 Okay, what's next? 1075 19:19 Hannon: Extensions. Lars Rasmussen: Extensions. 1076 19:22 The reasons you guys came here. 1077 19:24 Okay. So the next thing we want to show 1078 19:27 is the other category of APIs 1079 19:30 that we're making available today, 1080 19:31 which is about extending the functionality of Wave. 1081 19:35 So we have tried hard to maintain a discipline 1082 19:37 on the team that even significant offerings 1083 19:40 of our own should be built with our own extension APIs 1084 19:43 so that your extensions will live 1085 19:45 as first-class citizens inside Wave. 1086 19:47 It's similar, actually, to how browsers like Firefox 1087 19:51 let you extend them. 1088 19:52 This is just the web site you're extending 1089 19:54 instead of the browser. 1090 19:55 So let me show you some examples. 1091 19:58 You've undoubtedly noticed how all morning, 1092 20:00 I've been pretending my spelling is bad 1093 20:03 just so that we could show off our spell-checker. 1094 20:06 So normally spell-checkers work 1095 20:07 by matching words up against a dictionary. 1096 20:09 If they find there's-- if they don't find a word 1097 20:11 that is in error, 1098 20:12 the problem is that oftentimes 1099 20:14 spelling mistakes hits other dictionary words. 1100 20:16 And so our spell-checker actually takes the context 1101 20:19 of the word into account 1102 20:21 and then it matches it up 1103 20:22 against an enormous language model 1104 20:24 that we've built from the entire web. 1105 20:26 Let me show you how powerful that is. 1106 20:29 We call this the "Bean Soup Demo." 1107 20:32 "Can I have some been soup?" 1108 20:38 It puts a red on the line 1109 20:39 and it knows that I meant "bean soup." 1110 20:42 Thank you. 1111 20:43 [applause] 1112 20:47 Okay, now watch carefully. 1113 20:49 "It has bean so long." 1114 20:54 Did you see that? 1115 20:59 So it is--it has become so good at spell-checking 1116 21:02 that often, it has enough confidence 1117 21:04 that we let it automatically correct my errors. 1118 21:07 Let me show you that again. 1119 21:10 "Icland is an icland." 1120 21:15 [applause] 1121 21:22 "You are to kind." 1122 21:29 Pretty cool, huh? [laughs] 1123 21:31 You didn't see that last one. 1124 21:33 Okay, so that's our spell-checker, 1125 21:35 or Spelly as we affectionately call it. 1126 21:37 Let me show you another simpler one 1127 21:38 that detects links in what you're typing. 1128 21:41 And we call it Linky. 1129 21:42 "I love google.com." 1130 21:47 It immediately puts an underline--.a-- 1131 21:50 ooh, that's not a link-- .u--now it's a link again. 1132 21:54 [applause] 1133 21:58 You're wondering what's this all got to do 1134 21:59 with extensions and let me explain that. 1135 22:02 So you remember we showed you a robot earlier 1136 22:04 called "Bloggy." 1137 22:05 All that one did was publish a blog 1138 22:08 that let you use the embedding API. 1139 22:10 But robots are really powerful ways 1140 22:11 of extending Wave's functionality. 1141 22:13 They're server-side programs that participate in Wave 1142 22:17 with all the power of the human participants. 1143 22:19 You can see from your robot the live changes in the wave. 1144 22:22 You can make live changes to the wave 1145 22:24 including adding and removing messages, 1146 22:26 collaboratively edited messaging, 1147 22:28 adding and removing participants. 1148 22:30 You can even start new waves from robots. 1149 22:33 And the way Spelly works 1150 22:34 is that it uses our robot APIs to watch what I'm typing. 1151 22:38 It sits on the server. It watches what I'm typing. 1152 22:40 It takes every so many words and matches it up 1153 22:43 against a language model. 1154 22:45 And then when it finds an error, 1155 22:46 it uses collaborative editing to edit the content. 1156 22:50 And in fact, when it doesn't have enough confidence 1157 22:52 and it put that red underline, 1158 22:54 if Steph and I were editing the message at the same time, 1159 22:56 she would also see the red underline 1160 22:58 and she could be the one taking the suggestion. 1161 23:01 Linky works in the same way. 1162 23:05 But who wants to be typing in links all day? 1163 23:08 We had a very good friend of ours 1164 23:10 from the Google Search Team build this extension for us here 1165 23:13 called Searchy. 1166 23:15 Let's search for Australia. 1167 23:16 Hannon: We have a really clever naming convention. 1168 23:19 Lars Rasmussen: And here you can do a Google search 1169 23:20 from right inside Wave and add the link like that. 1170 23:24 [applause] 1171 23:28 You guys want to see that again? 1172 23:30 I search for Bora Bora. It's so pretty there. 1173 23:33 I add an image to the wave just like that. 1174 23:36 Thank you. 1175 23:38 [applause] 1176 23:41 Let me just quickly return to our friend Linky. 1177 23:44 I've got a video sitting here. 1178 23:46 Let me copy the URL. 1179 23:49 And inside my wave, 1180 23:51 I'm going to type "Check this out." 1181 23:55 And then I'm going to copy the link in there. 1182 23:58 And then I'm going to dance a little bit 1183 00:01 while the system spectacularly fails. 1184 00:04 [laughter] 1185 00:07 Maybe we'll return to that later. 1186 00:10 Okay, so that's extensions that we built 1187 00:13 with internal APIs. 1188 00:15 And what we're doing today as part of the developer preview 1189 00:17 is--is make external versions of these APIs 1190 00:21 available to you guys. 1191 00:23 The external APIs have almost all the power 1192 00:25 of the internal APIs. 1193 00:27 There is a few things we haven't quite figured out 1194 00:29 how to secure the export. 1195 00:31 We're working very hard to close the gap. 1196 00:33 We're going to show you now a series of examples 1197 00:37 of things that are built with the external APIs. 1198 00:39 These are all sample codes 1199 00:41 that are going to be on code.google.com 1200 00:43 where we'll host the API. 1201 00:45 Stephanie. 1202 00:48 Hannon: Any open social gadget can sit inside a wave. 1203 00:51 In fact, we were about to show you one 1204 00:52 which might come a little bit later. 1205 00:55 But we also make an additional API available 1206 00:58 that lets you the developer make your gadget 1207 01:00 live and collaborative. 1208 01:02 I want to show you that. 1209 01:04 But before I do, I'll digress and tell you a little story. 1210 01:07 Even though we on this team have been building Wave 1211 01:10 and thinking about Wave for a year and a half, 1212 01:12 when we first started using it ourselves, 1213 01:14 it took awhile for us to discover all the ways 1214 01:17 Wave can make you more productive 1215 01:19 because we were so used to older tools. 1216 01:21 In fact, we're still discovering new ways all the time. 1217 01:25 I'll show you that by opening a wave 1218 01:27 and using Playback to tell you what happened. 1219 01:31 Uh, someone on our team wanted to create a movie outing 1220 01:33 and we should all go see the Transformers. 1221 01:35 So he sent a wave out and people did something 1222 01:37 very email-like and responded. 1223 01:40 "I'm interested." "What place are you going to?" 1224 01:43 "Is that really a good movie?" And so on. 1225 01:45 I tried to get them to see Confessions of a Shopaholic. 1226 01:49 Nobody went for that. 1227 01:50 Lars Rasmussen: She's still trying. 1228 01:52 Hannon: Still trying. 1229 01:53 So when you look at this wave, 1230 01:55 it's sort of hard to parse out the important information 1231 01:57 of who wants to go. 1232 01:58 So somebody suggested we should all edit 1233 02:00 the opening message instead of putting it 1234 02:02 in individual messages. 1235 02:05 And we cleaned up the wave. 1236 02:06 Everyone started editing the opening message and so on. 1237 02:12 This was a much better way to construct this RSVP list. 1238 02:16 And we could still have discussions 1239 02:17 about which car to take and so on. 1240 02:20 Now, we're all engineers, 1241 02:22 and you can look at this workflow 1242 02:23 and think there are better ways 1243 02:25 or there are ways to make this even better 1244 02:27 using our extensions. 1245 02:29 So another engineer on our team wrote a gadget. 1246 02:35 We call this the "yes-no-maybe gadget." 1247 02:39 Hey. [laughs] 1248 02:41 [applause] 1249 02:44 So if you--it's hard to see for you guys, I know. 1250 02:46 But I'm currently in "No" in the middle column 1251 02:48 and I'm to change it to "Maybe." 1252 02:51 And you see it update on Lars' screen. 1253 02:54 [applause] 1254 02:56 Lars Rasmussen: And I'm currently 1255 02:57 in the "Maybe" column. 1256 02:58 And I click the "Yes" over here. 1257 02:59 And you'll see it quickly updates 1258 03:01 on both our screens. 1259 03:03 Hannon: So you the gadget developer 1260 03:04 only have to worry about two things. 1261 03:07 When I click the button, 1262 03:08 update the state of the gadget in XML and the wave, 1263 03:12 then we automatically transmit through the server 1264 03:15 to Lars' client where your gadget 1265 03:18 has to update the UI to reflect the new state. 1266 03:23 Now, of course we did all this-- 1267 03:25 ooh, it's a secret though-- 1268 03:27 I, um, uh, don't tell anyone, 1269 03:29 but we did all this so we could build 1270 03:30 impossibly fun, addictive games. 1271 03:32 And we'll show you a few of those now. 1272 03:34 Lars and I are going to open Sudoku. 1273 03:37 Lars Rasmussen: Hmm. Hmm. 1274 03:40 Hannon: And we intended for this to be a collaborative game 1275 03:42 so we could solve the puzzle together, 1276 03:44 but somehow it turned competitive. 1277 03:46 [laughter] 1278 03:47 And, uh, you get a point for making a good move 1279 03:51 and a negative point for doing something wrong. 1280 03:53 You can see Lars' score is going negative. 1281 03:56 Lars Rasmussen: How can you play Sudoku 1282 03:58 in front of 4,000 people? 1283 03:59 Come on. 1284 04:00 Hannon: Then, uh, back in 1851, 1285 04:02 Lars and I played this chess game 1286 04:04 that became very famous. 1287 04:05 It ended in 23 moves. 1288 04:07 And it illustrates how well Playback works with gadgets. 1289 04:11 So if I go into playback and I click forward, 1290 04:15 you can actually step through the whole game. 1291 04:18 [applause] 1292 04:27 So as we mentioned in the beginning, 1293 04:28 we come from the Maps team. 1294 04:30 So probably wouldn't be a good demo 1295 04:32 if we didn't do a Maps gadget as well. 1296 04:34 It's been a lot of work to prepare for this demo. 1297 04:36 So I'm going to send Lars a wave about taking a vacation. 1298 04:40 Lars Rasmussen: Stephanie's favorite topic. 1299 04:41 She wants to go on vacation in Bora Bora. 1300 04:43 She's asking me for recommendations. 1301 04:46 I highlight the term Bora Bora here. 1302 04:48 And then I click this button that's provided 1303 04:50 by an extension that you guys could've written 1304 04:52 that inserts a map to Bora Bora. 1305 04:56 Thank you. [applause] 1306 04:58 Hannon: Now, the important thing 1307 04:59 is my hands are off of my computer, 1308 05:01 but my screen is still on the right. 1309 05:03 Lars Rasmussen: And now I click the satellite button 1310 05:05 and it changes on both screens. 1311 05:06 And I go zoom, zoom, zoom, zoom, zoom, zoom. 1312 05:12 [applause] 1313 05:14 [laughs] Thank you. 1314 05:17 [applause] 1315 05:20 And now, Stephanie loves swimming with sharks. 1316 05:24 And I happen to know that the lemon sharks hang 1317 05:26 over here. 1318 05:28 And you can see that I put that marker on. 1319 05:31 Shows up live over on Stephanie's screen. 1320 05:33 Now my hands are off. 1321 05:34 Hannon: And I'll pick up the polygon tool 1322 05:36 and I'll tell Lars, actually, I want to stay in this area. 1323 05:39 Lars Rasmussen: And you see that showing up on my screen too. 1324 05:41 And so again, all you guys have to do with your gadgets 1325 05:44 is to store updates to the state 1326 05:46 in the local XML. 1327 05:48 And then we transmit on the wire 1328 05:49 and then the other instance of your gadget 1329 05:51 just updates its state when it gets notified 1330 05:54 of that change. 1331 05:57 And so those are client-side, um, extensions. 1332 06:01 I want to just show you, actually, 1333 06:02 the team in blue over here is scrambled. 1334 06:05 And they brought back up Linky. 1335 06:07 And I wanted to show you what happened 1336 06:08 when I dropped that YouTube URL into the old extension wave. 1337 06:13 So you'll see that Linky didn't just recognize 1338 06:15 it was a link, 1339 06:17 but it recognized it was a link to a video. 1340 06:19 It puts this little friendly light bulb 1341 06:21 on my screen where I can open up 1342 06:23 a set of suggestions for what I might want to do. 1343 06:26 Like, for example, I might want to embed the video 1344 06:29 right inside my wave 1345 06:32 and play it for you guys. 1346 06:35 [wobbling noise] 1347 06:38 Dah nah. Pretty cool, huh? 1348 06:40 [applause] 1349 06:46 Thank you. 1350 06:48 Okay. What's next? 1351 06:50 So Stephanie showed you a bunch of gadgets. 1352 06:52 They're all client-side extensions. 1353 06:55 We want to show you next what you can do 1354 06:57 on a server side with robots. 1355 06:59 And we're going to show you three examples. 1356 07:01 The first one is an application-- 1357 07:03 a collaborative application built entirely within Wave 1358 07:06 with our extension API. 1359 07:09 So let me just open up my inbox again. 1360 07:11 And instead of clicking "new wave," 1361 07:13 I'm going to hit this drop-down button here. 1362 07:15 And I'm going to hit this item 1363 07:16 called a "new poll." 1364 07:18 New poll is just a new wave, 1365 07:21 but with a special robot that comes from an extension 1366 07:24 that you guys could build called Polly the Pollster. 1367 07:28 I'll add Steph to the wave as well. 1368 07:31 Polly added a form to the wave. 1369 07:35 Yes. And so this is not a gadget. 1370 07:37 Forms are native to wave. 1371 07:39 You can put them in there. 1372 07:40 And now I can fill out the form 1373 07:42 starting with the title of the poll 1374 07:44 that I want to conduct. 1375 07:46 And you'll see as I'm typing in the form, 1376 07:49 Polly sits on the server side. 1377 07:51 She saw that letter by letter, 1378 07:52 and she updated the title of the wave. 1379 07:56 Now the really cool thing about having forms in waves 1380 07:58 is that you can fill them out collaboratively. 1381 08:01 So Stephanie's going to fill in the choices 1382 08:03 while I add the question here. 1383 08:05 "Which movie is the best ever?" 1384 08:10 And you see that Stephanie's filling in the options 1385 08:13 in the field below. 1386 08:15 Hannon: Star Wars. 1387 08:17 Lars Rasmussen: Star Wave. [laughs] 1388 08:21 Hannon: Not on purpose. [laughs] 1389 08:24 Lars Rasmussen: Confessions of a Shopaholic. 1390 08:25 So now Stephanie's going to fill out a number of people 1391 08:28 that we're going to send the poll to 1392 08:30 in the recipient list there. 1393 08:36 She's putting in-- 1394 08:37 Hannon: Done. 1395 08:38 Lars Rasmussen: Putting in six of them. 1396 08:39 Now I'll hit the button here that says "distribute poll." 1397 08:42 Now, what happens is that Polly sees 1398 08:43 that I hit that button. 1399 08:45 She fills in a results section 1400 08:48 in that same wave here. 1401 08:50 And then she sends out fresh waves 1402 08:52 with the questions we specified 1403 08:54 to all the recipients we specified. 1404 08:56 And Stephanie's one of them. 1405 08:58 Hannon: So I'm going to answer the poll 1406 08:59 that Star Trek's my favorite. 1407 09:01 Lars Rasmussen: And you'll see that Polly updates the results 1408 09:03 live in the admin wave. 1409 09:07 With a bit of luck-- thank you. 1410 09:09 [applause] 1411 09:15 Okay. So that's the-- an example of an extension 1412 09:17 built exclusively inside of Wave. 1413 09:21 The next type of extension we want to demonstrate for you 1414 09:24 are extensions that integrate Wave 1415 09:27 with existent communication systems. 1416 09:29 In this case, we'll show you with everyone's favorite 1417 09:31 microblogging service, Twitter. 1418 09:35 Hannon: So at this point, you're probably wondering 1419 09:37 how to install these extensions. 1420 09:39 So let me open a wave. 1421 09:41 And you probably won't be surprised to hear 1422 09:42 that extensions can live inside a wave. 1423 09:45 Here's their--a bunch of puzzle pieces 1424 09:47 showing some of the things we're using today. 1425 09:51 All I have to do if I want to use one of these inst-- 1426 09:53 extensious--is-- 1427 09:55 Sorry. Click the "install" button. 1428 09:59 And you can see over here, there's a new drop-down menu. 1429 10:02 And I have the option to create a new twave. 1430 10:05 Lars Rasmussen: A wave, of course--twave, of course, 1431 10:07 is a wave of tweets. 1432 10:10 Hannon: You can describe as a developer 1433 10:11 how your extensions hook into Wave. 1434 10:14 It could be a keyboard shortcut, 1435 10:15 a button on the tool bar. 1436 10:17 It could be something like a new twave button. 1437 10:19 There'll be a confirmation page 1438 10:20 that tells the users how you're going to interact. 1439 10:23 We haven't quite implemented that yet. 1440 10:26 So let me log in here. 1441 10:28 I have to tell you that Lars created my Twitter account. 1442 10:30 Lars Rasmussen: I made her Twiffanie. 1443 10:32 She hates that. 1444 10:35 Hannon: [laughs] 1445 10:36 Lars Rasmussen: She's Twiffanie at Twitter. 1446 10:40 Hannon: I think that tab button should be implemented, you guys. 1447 10:42 [laughs] 1448 10:44 I feel like all sorts of bad stuff is about to happen. 1449 10:48 [laughs] 1450 10:50 All right, so I'll sign in to Twitter. 1451 10:57 And you can see tweets 1452 10:58 from all the famous people I follow. 1453 11:01 And down here at the bottom, Lars. 1454 11:03 Lars Rasmussen: No. 1455 11:05 Hannon: I'm just going to close it. 1456 11:06 We still haven't, uh, uh... 1457 11:10 I wanted to get the contacts out. 1458 11:13 Um, it's important you can see that each of these avatars, 1459 11:17 they're not necessarily Wave users. 1460 11:19 Through our APIs, you can be a proxy 1461 11:22 for contacts on a different system. 1462 11:24 So I have Lance Armstrong, Ryan Seacrest, 1463 11:27 lots of different people. 1464 11:28 If I go down here and I look for Lars' tweet, 1465 11:32 I can respond to it. 1466 11:34 He says, "The demo's going pretty well." 1467 11:37 And I'll say, "It ain't over yet." 1468 11:41 [laughs] 1469 11:42 Lars Rasmussen: And now I've logged in 1470 11:44 to Twiffanie at Twitter over here. 1471 11:46 And if I refresh the page, 1472 11:48 you'll see that the extension took Stephanie's wave reply 1473 11:52 and tweeted it. 1474 11:55 Thank you. 1475 11:56 [applause] 1476 11:59 Hannon: Now Tweety also lets you search 1477 12:01 over the public timeline of Twitter. 1478 12:03 For example, for a phrase like "Google Wave." 1479 12:06 So I'm going to start a new twave. 1480 12:09 Lars Rasmussen: You're going to search for Google Wave now? 1481 12:11 Hannon: Gonna do it. 1482 12:12 Lars Rasmussen: How brave it that? 1483 12:14 Hannon: [laughs] I'm not afraid. 1484 12:17 So try again. 1485 12:21 I'm going to log in. 1486 12:24 And then I'm going to type Google Wave. 1487 12:28 So we did this yesterday and there are only two tweets. 1488 12:31 One of them was a woman interviewing at a company 1489 12:33 called Wave so she said, "I should google Wave 1490 12:36 before my interview." 1491 12:39 So now let's sign in. See what happens. 1492 12:46 Lars Rasmussen: * Doo doo * Hannon: A lot more than two. 1493 12:49 Lars Rasmussen: Oh! [laughs] 1494 12:51 Hannon: And we can go down to the bottom 1495 12:53 and see tweets still coming in. 1496 12:54 Lars Rasmussen: Oh, my God, you guys, thank you. 1497 12:57 [laughs] Wow. Thank you. 1498 12:59 [applause] 1499 13:07 Hannon: So that was a example of an integration 1500 13:09 between Wave and another communication system. 1501 13:12 Lars Rasmussen: I'll just add to the search functionality 1502 13:15 here, actually, that you can-- you can have Tweety 1503 13:17 continuously search over in Twitter 1504 13:19 and update the wave as they come. 1505 13:21 So you can use them like "twit alerts" 1506 13:23 for whatever you're interested in. 1507 13:24 It'll just pop into your inbox. 1508 13:31 Buggy. Hannon: Buggy. 1509 13:33 We were reading the tweets. 1510 13:34 Lars Rasmussen: We were reading the tw-- 1511 13:35 Hannon: Totally threw us off. 1512 13:36 [laughs] 1513 13:38 Lars Rasmussen: Okay, the last example 1514 13:40 of a robot extension we want to show 1515 13:42 is an example of how you can use Wave extension APIs 1516 13:45 to integrate Wave within existent workflows. 1517 13:49 You guys are programmers like us. 1518 13:50 You probably deal with filing bugs. 1519 13:53 I want to show you an integration 1520 13:54 between Wave and the issue tracker-- 1521 13:57 the bugs database over on code.google.com. 1522 14:00 But this could be any issue tracker Bugzilla could host, 1523 14:03 whichever is your favorite. 1524 14:05 So I'll just conjure up a canned message here. 1525 14:08 And I'll tell you a little bit 1526 14:09 about how we do bugs on my team. 1527 14:12 So a programmer has built some code. 1528 14:13 They send it for code review. 1529 14:14 They also send a demo to the PMs and the UI people 1530 14:17 and Jens and I. 1531 14:19 And then we sit in the room and we test it. 1532 14:20 And you can't read the text here. 1533 14:22 But there's a bunch of bullet points 1534 14:23 with observations we made. 1535 14:25 We, of course, edited this collaboratively. 1536 14:27 Some of them are bugs. 1537 14:29 Some of them are observations for discussion later. 1538 14:31 Some of them are notes for the UI designers. 1539 14:33 And, of course, we should now go and file bugs. 1540 14:36 Um, but instead of doing that manually, 1541 14:38 we run an extension that lets me just select a bullet point, 1542 14:42 click this button here, 1543 14:43 and now a robot enters the fray called Buggy, 1544 14:47 takes that text, and files it as a bug for me. 1545 14:50 [applause] Thank you. 1546 14:52 Hannon: Hey, Lars, why don't you add me? 1547 14:54 Lars Rasmussen: Yes. Excellent. 1548 14:56 And I'll add Steph to the wave. 1549 14:57 The bug--the, uh--the--the-- sorry, the robot 1550 15:00 also grabs a little summary from issue tracker 1551 15:03 and puts it right inside the wave. 1552 15:05 There's a link there to the bug 1553 15:06 will Stephani--which Stephanie will now click 1554 15:09 so that you can see the bug sitting over on issue tracker. 1555 15:15 Hannon: All right, so I'm going to open this bug, 1556 15:17 number 11. 1557 15:19 Lars Rasmussen: And while she does that, 1558 15:20 I'll file a bunch more. 1559 15:21 You can see how easy it is. 1560 15:23 And I just triple click here. There's another one. 1561 15:26 And I'll file that bug too. 1562 15:28 Okay. And so now, we might send this wave-- 1563 15:30 we might share this wave with our bug triage team. 1564 15:33 I'll just do that myself. 1565 15:35 All I have to do is change the assignee here. 1566 15:38 I'll give this to Stephanie. I'll take this myself. 1567 15:41 And then this one goes to Lars. 1568 15:44 Ooh, I'm sorry. Was that Greg? 1569 15:45 Like this. 1570 15:46 And now you'll see-- Stephanie will refresh the bug 1571 15:48 and you'll see the robot change the assignee over 1572 15:52 in the issue tracker. 1573 15:53 Hannon: On the left-hand panel where it says "owner." 1574 15:56 Lars Rasmussen: And also, most issue trackers 1575 15:57 or bug databases lets you debate bugs-- 1576 16:00 endlessly if I recall-- inside the database. 1577 16:03 Which is normally not the strength 1578 16:04 of the database. 1579 16:05 But it is the strength of Wave. 1580 16:07 And so instead of debating them over on issue tracker, 1581 16:10 you can debate the bug from inside Wave. 1582 16:13 I'll just use the inline reply tool here. 1583 16:15 And I'll say, 1584 16:16 "That is so not my fault!" 1585 16:21 Hannon: And I'll refresh. You can see the update there. 1586 16:25 [applause] 1587 16:30 Lars Rasmussen: And so now we can continue 1588 16:31 the endless debate inside of Wave, 1589 16:33 which would be much more efficient. 1590 16:35 We could also build-- 1591 16:36 We haven't done this in the sample here-- 1592 16:38 that if someone wanted to go make a comment 1593 16:40 over on issue tracker, 1594 16:41 the robot would see that and update the wave as well. 1595 16:45 And just like we did a search through Twitter 1596 16:47 into a-a wave, 1597 16:49 we could also have the robot start a new wave of bugs 1598 16:51 and just pull in all of the bugs assigned to you 1599 16:53 so that you could track them from within a wave. 1600 16:56 It's remarkable--thank you-- how much more effective 1601 16:59 this sort of thing makes you. 1602 17:02 Okay. That's extensions for you. 1603 17:04 You guys feeling-- 1604 17:06 Hannon: And I think that's two of our Ps. 1605 17:07 Lars Rasmussen: Those are two Ps. 1606 17:08 Are you guys feeling inspired yet? 1607 17:10 Good. Yeah. Thank you. [applause] 1608 17:13 Thank you. 1609 17:17 Okay, let's talk a little bit about the protocols 1610 17:19 and algorithms, um, underlying Wave. 1611 17:22 So we want Wave, as Stephanie said in the beginning, 1612 17:24 to be an open system. 1613 17:26 Obviously, it's an enormous reason 1614 17:28 behind the success of email that it's an open protocol. 1615 17:31 Anyone can build an email system. 1616 17:33 Anyone can email with each other 1617 17:34 regardless of where they got their accounts from. 1618 17:37 We want Wave to work the same way. 1619 17:41 And so we've designed the algorithms-- 1620 17:44 we've designed the protocol to, um, uh, to support 1621 17:47 what we call "federation." 1622 17:49 Which means that any organization 1623 17:50 could build their own Wave system, 1624 17:53 give accounts to their users even in competition with Google, 1625 17:56 and then the system will still ensure 1626 17:58 that we can share waves with each other 1627 18:00 across these boundaries. 1628 18:02 And we want to-- we want to first show you 1629 18:05 how that's going to look. 1630 18:06 And then we'll talk a little bit 1631 18:07 about how far along we are with that. 1632 18:10 So let me--so this is very much work in progress. 1633 18:13 Everything we've shown you is work in progress. 1634 18:16 I'm going to sign in to, um, a different version 1635 18:19 of the system that sits inside our corporate network 1636 18:23 that has an open port on it for this sort of federation. 1637 18:26 And we're going to imagine two separate wave systems. 1638 18:30 One is the one Google has built 1639 18:31 that you've been looking at all morning. 1640 18:34 The other one is from Acme Wave, 1641 18:37 which you'll see over on Stephanie's screen. 1642 18:39 They have built a separate system. 1643 18:40 They're actually giving out accounts 1644 18:42 in competition with Google. 1645 18:43 You'll realize that their client looks very similar to ours. 1646 18:47 That's because we're intending to open source 1647 18:49 the lion's share of the code that we used to build our system 1648 18:53 so that organizations can get started quickly. 1649 18:56 And that's how Acme Wave built their system. 1650 18:59 So I'll start a wave over on my account here. 1651 19:03 And I will say "Project. 1652 19:05 You want to work with me on that thing?" 1653 19:11 And then I will add-- what's your account 1654 19:13 over on Acme Wave? 1655 19:15 Hannon: It's Stephanie. Lars Rasmussen: Stephanie. 1656 19:18 Stephanie on Acme Wave. 1657 19:19 So Stephanie momentarily has her account-- 1658 19:21 Hannon: Actually, it's Steph. Lars Rasmussen: There we go. 1659 19:23 Hannon: Sorry. 1660 19:24 Lars Rasmussen: Stephanie is now a user 1661 19:25 over on Acme Wave. 1662 19:26 And I'm going to add her to the wave. 1663 19:30 Hannon: So I'm going to open up the wave. 1664 19:32 And he says, "You want to work with me on that thing?" 1665 19:34 And I said, "I think the guys over at Initech can help too." 1666 19:40 Lars Rasmussen: [laughs] And so... 1667 19:43 And so even though Steph and I have accounts 1668 19:45 on different wave systems, 1669 19:46 you still get that live 1670 19:48 character by character interaction. 1671 19:50 The way it works is that from our two clients, 1672 19:52 these fine-grained operations 1673 19:54 travel to our respective servers, 1674 19:56 then it crosses over and goes back up to our client. 1675 20:00 And all of the liveness and concurrency control 1676 20:02 and live--um, sorry, and real-time resolution 1677 20:05 of conflicts happen in an algorithm 1678 20:07 that supports this sort of federation. 1679 20:09 Let's bring a third wave system into the system. 1680 20:12 So we have a couple of friends, Peter and Milton, 1681 20:15 that work for a company called Initech. 1682 20:17 They have chosen to run their own wave server 1683 20:19 in their server closet. 1684 20:21 These guys didn't take our code. 1685 20:23 Milton is the kind of engineer who prefers building stuff 1686 20:26 from scratch. 1687 20:29 Hannon: I'm not sure I want to show this, Lars. 1688 20:31 Lars Rasmussen: Oh, come on. You show it. 1689 20:33 I'm going to add Peter and I'm going to add Milton. 1690 20:35 Why don't you want me to show it? 1691 20:37 Hannon: I'm afraid this crowd might like their UI 1692 20:39 better than ours and it would break my heart. 1693 20:41 Lars Rasmussen: Don't break her heart. 1694 20:44 [cheers and applause] 1695 20:51 Do you have the wave? Do you have the wave? 1696 20:56 Hannon: No, 'cause-- Lars Rasmussen: Hmm? 1697 20:58 Hannon: Just make another edit. 1698 21:01 So now I have the wave. 1699 21:03 Lars Rasmussen: So she opens-- Hannon: And if I go into it... 1700 21:08 [cheers and applause] 1701 21:12 Lars Rasmussen: Thank you. 1702 21:15 Hannon: Now I want to show you an important principle 1703 21:17 of--an important feature of the protocol. 1704 21:21 So I go back to Acme Wave 1705 21:23 and I'm going to make a private reply 1706 21:24 just like you saw earlier in the demo. 1707 21:26 But I'm going to add everyone except Lars. 1708 21:29 So I'll say, "What do you think of that Google guy?" 1709 21:35 So I'll add all of my friends Peter and Milton. 1710 21:40 Even though this wave is owned at Google 1711 21:43 and there's copies on Acme Wave and Initech servers, 1712 21:46 this private reply is never seen by Google 1713 21:50 and cannot be discovered by Lars in any way. 1714 21:53 In fact, if Peter and Milton made a private reply 1715 21:56 between themselves, 1716 21:58 that wave would never leave their server closet. 1717 22:01 [applause] 1718 22:06 Lars Rasmussen: Thank you. 1719 22:07 Hannon: And I just want to go back over to Milton 1720 22:09 for a second. 1721 22:10 You can see the private reply came in there as well. 1722 22:13 Lars Rasmussen: Okay, so let me just say this, 1723 22:15 um, federation... 1724 22:17 that was hard. 1725 22:19 So we're building this thing 1726 22:20 with live concurrent editing, and chatting, 1727 22:22 and instant messaging, and email, and pictures, 1728 22:23 and all that stuff. 1729 22:25 And then we throw federation into the mix, 1730 22:27 which vastly complicates things. 1731 22:30 It would be so much easier, frankly, 1732 22:31 from an engineering point of view. 1733 22:33 If we could just keep this proprietary, 1734 22:35 then we'd control all the servers, 1735 22:36 we'd control all the update schedules, 1736 22:38 and so on. 1737 22:39 But we think it's worth the effort-- 1738 22:42 and we hope you guys will help us with this. 1739 22:44 We think the world will be a much better place 1740 22:46 if this is an open system that everyone can build 1741 22:48 wave services with it. 1742 22:50 And so--thank you. 1743 22:52 [applause] 1744 22:53 Thank you. 1745 22:55 [applause] 1746 22:59 And so let me tell you, um, where we're at with it. 1747 23:01 So later today, there's a web site-- 1748 23:03 I'll show you the URL later-- that's going to launch, 1749 23:06 which will have-- it's a very early draft 1750 23:08 of this protocol. 1751 23:10 It'll have, I think, four whitepapers 1752 23:12 describing how the system works. 1753 23:15 It's going to have, of course, 1754 23:16 a public discussion forum 1755 23:17 so that we can start debating how this hopefully bright future 1756 23:21 of Wave will look. 1757 23:23 And then like I said, later, 1758 23:25 we're going to open source the lion's share of our code, 1759 23:28 which will serve both as a reference implementation 1760 23:31 of the protocol, 1761 23:32 but also essentially a production ready system 1762 23:34 like you saw Acme Wave do. 1763 23:36 I'm obviously vastly simplifying it here. 1764 23:38 But essentially, you could take that code, 1765 23:41 you could put it on top of your own database, 1766 23:42 and you would have a simple wave server 1767 23:44 and you would be up and running. 1768 23:47 Okay. So that's federation. 1769 23:53 [laughs] 1770 23:54 Hannon: I'm excited about our next demo. 1771 23:55 Lars Rasmussen: The next demo is very, very nice. 1772 23:58 This is something, um, to end off our demo with. 1773 00:02 It's something, uh, a friend of ours 1774 00:04 on the Google research team has been building 1775 00:06 over the past month. 1776 00:08 I saw it myself the first time just a few days ago. 1777 00:11 Um, and it blew me away. 1778 00:12 So, um, let's see. 1779 00:14 I'm going to make sure I'm on the right system here. 1780 00:16 I'm back on the sandbox. 1781 00:18 So again, we've been doing this demo 1782 00:19 on a system where we'll get you guys accounts. 1783 00:22 Now, Stephanie is going to log into, um, an account 1784 00:26 of one of our colleagues, Alexi. 1785 00:28 And then I'm going to start a new wave. 1786 00:30 I want to make sure you guys can see 1787 00:31 what we're typing. 1788 00:33 I'm making this a little bigger like this. 1789 00:36 Do you make your font bigger there, Steph? 1790 00:38 Hannon: Yeah, I was going to wait 1791 00:40 till you started the wave. 1792 00:42 Lars Rasmussen: And then I'll start a new wave here. 1793 00:44 And I'll add Alexi, one of our colleagues. 1794 00:47 And then I'll add my all-time favorite robot 1795 00:51 called Rosy. 1796 00:54 Yes. 1797 00:55 So, um, Alexi is from France. 1798 00:58 His English is not terribly good. 1799 01:01 Hannon: Aww! 1800 01:03 Lars Rasmussen: For the purposes of this demo. 1801 01:05 [laughter] 1802 01:07 And Rosy is a robot that very kindly translates 1803 01:11 what I'm typing. 1804 01:13 "Hello, world!" 1805 01:16 [applause] 1806 01:18 "What do you think 1807 01:20 "of this demo-- 1808 01:24 of this demo?" 1809 01:32 And now Alexi's typing in France. 1810 01:34 And I get to see him saying, "Ah, yes... 1811 01:37 since new--we are in can--use--used--" 1812 01:41 Translates word by word, character by character 1813 01:43 as he's typing. 1814 01:45 Rosy speaks, I believe, 40 languages. 1815 01:47 She can translate between any pair of them. 1816 01:50 Um, she's quite the thing. 1817 01:54 Okay. That finishes our demo. 1818 01:57 Oh, thank you. 1819 01:58 [cheers and applause] Thank you. Thank you. 1820 02:03 Thank you. Thank you. Thank you. 1821 02:09 Thank you. 1822 02:13 Thank you. Thank you. Thank you. Thank you. 1823 02:15 [cheers and applause] Thank you. Thank you. 1824 02:18 Hannon: I think they like it. Lars Rasmussen: They like it. 1825 02:22 You guys like it? Okay. Thank you. 1826 02:27 Hannon: Thank you. Wow. Thank you. [laughs] 1827 02:31 [cheers and applause] Lars Rasmussen: Thank you. 1828 02:36 Thank you. [whistling and cheers] 1829 02:39 Hannon: They have a lot of skills. 1830 02:41 [applause] 1831 02:46 I think... Lars Rasmussen: Thank you. 1832 02:47 Hannon: If they really liked it... 1833 02:51 [man shouting indistinctly] 1834 02:52 If you guys--you guys really liked it, 1835 02:54 you could do a wave. 1836 02:56 Lars Rasmussen: So, so, so-- Hannon: Anyone? 1837 02:58 It's time to do the wave. Lars Rasmussen: So-- 1838 03:00 So, um, what do you guys think? 1839 03:03 Okay. [laughs] 1840 03:05 So just-- Hannon: Thank you for filming. 1841 03:07 Lars Rasmussen: Just to summarize, 1842 03:08 um, what we like to think we've built here 1843 03:11 is really quite a simple communication object 1844 03:13 called a wave. 1845 03:15 And we've showed how you can use it 1846 03:16 for quite a lot of different types 1847 03:18 of communication and collaboration. 1848 03:20 We showed you how plain vanilla email-type conversations 1849 03:23 could be done. 1850 03:25 We showed you how instant messaging conversations 1851 03:27 could be done. 1852 03:28 We showed you how easy it is to share photos 1853 03:29 and other rich media types with it. 1854 03:31 We introduced a platform that we're hoping you guys 1855 03:34 will pick up 1856 03:35 that will let you build things like blogging sites, 1857 03:37 discussion groups, uh, letting your users 1858 03:40 discuss images on your web site. 1859 03:42 With the editing functionality, 1860 03:43 you can see you can build Wiki-like sites 1861 03:45 with that as well. 1862 03:46 We showed you how you can use waves 1863 03:48 to collaboratively edit documents. 1864 03:50 We showed you a rich set of extension APIs 1865 03:53 that could let you build everything from games, 1866 03:56 through collaborative applications inside a wave, 1867 03:59 through integrations with other communication systems. 1868 04:02 We showed you Twitter. 1869 04:03 We're hoping you guys will build gateways 1870 04:05 from Wave to email, to Facebook, 1871 04:08 to instant messaging, and so on. 1872 04:10 We showed you how you can use these extension APIs 1873 04:14 to also integrate waves into work flows. 1874 04:18 Whew. Okay. 1875 04:22 And now... 1876 04:24 Hannon: Just going to bring up... 1877 04:25 Lars Rasmussen: For the administrativia 1878 04:27 at the end, 1879 04:28 I want to-- I want to just point out-- 1880 04:32 I forgot that earlier 1881 04:33 that we have three breakout sessions 1882 04:35 that I don't believe has been in the program so far. 1883 04:39 Um, the first one at noon is about, um, the API. 1884 04:44 If you can only come to one of our breakout sessions, 1885 04:46 please make it that one. 1886 04:49 The next one is a little run-through 1887 04:50 of some of the more exciting pieces of technology 1888 04:52 under the hood. 1889 04:54 We're going to show you from the top of the-- 1890 04:56 top of the stack how our amazing spell-checker works, 1891 04:59 how the rich text editor in the browser works, 1892 05:03 and the algorithms that we used underneath 1893 05:04 to do all the concurrency, control, 1894 05:06 and conflict resolution and so on. 1895 05:09 And then at 2:30, 1896 05:10 one of our client team tech leads 1897 05:13 are going to explain how we build 1898 05:16 the web application with the Google Web Toolkit, 1899 05:19 why we love it so much, 1900 05:21 and what some other future plans are. 1901 05:24 We also have in Room B4 1902 05:26 from noon till 4:30 office hours 1903 05:28 where you guys can come talk to the team in blue here. 1904 05:32 They love talking. 1905 05:36 And then I wanted to show you, 1906 05:39 um, three important URLs here. 1907 05:42 So for starters, wave.google.com 1908 05:44 is going to be the home of Google Wave 1909 05:47 when we launch it later in the year. 1910 05:49 If you go there now or when the site goes live 1911 05:52 in a little bit, 1912 05:53 um, there is a sign-up form there 1913 05:55 where you can sign up for notifications 1914 05:56 when we launch it. 1915 05:57 There's also going to be a beautifully edited video 1916 06:01 of today's keynote. 1917 06:03 Um, the API site is going to go live... 1918 06:06 man: Already live. 1919 06:07 Lars Rasmussen: The API site is already live. 1920 06:09 No wonder I couldn't-- couldn't get a connection 1921 06:11 to my mobile phone before. 1922 06:13 It's at code.google.com/apis/wave. 1923 06:18 It's got the API. It's got the documentation. 1924 06:21 It's got the code samples we showed before. 1925 06:23 Actually, I should just mention really quickly 1926 06:25 the bug--the--the issue tracker integration 1927 06:28 we showed at the end, 1928 06:30 we have to cheat ever slow slightly 1929 06:31 by using, uh, using an internal API 1930 06:35 to the issue tracker. 1931 06:36 I think they're working really hard 1932 06:37 making APIs available. 1933 06:39 So that particular sample is not going to be there 1934 06:41 for--for a wee while. 1935 06:43 Lastly, at waveprotocol.org, 1936 06:46 you'll find the protocol draft, 1937 06:48 the whitepapers, the discussion forum, 1938 06:50 and so on if you guys are interested 1939 06:52 in helping us, um, build that wave 1940 06:55 to be an open system. 1941 06:57 Hannon: You should tell them about the email. 1942 06:59 Lars Rasmussen: Yes. 1943 07:00 And the way you're going to get an account 1944 07:02 is you'll receive an email later today 1945 07:04 that explains where you can go and sign up 1946 07:07 for an account, 1947 07:08 which you will get shortly. 1948 07:12 Okay. So, look, the last thing I want to say, 1949 07:14 um, you can probably imagine it felt kind of nice 1950 07:18 that you guys seemed to like what we built. 1951 07:21 Um, one of the-- one of the best times 1952 07:23 in my professional life 1953 07:24 was after we launched Google Maps back in 2005 1954 07:28 and developers started doing all kinds of crazy things 1955 07:30 with Google Maps. 1956 07:32 I hope some of you are here. 1957 07:33 This was even before we had an API on Maps. 1958 07:36 We scrambled to put an API on Maps. 1959 07:38 And it's, uh, it's-- it's become very popular 1960 07:41 and it's a huge driving force of success. 1961 07:45 We learned a very important lesson 1962 07:47 that--that you guys, developers, 1963 07:48 are incredibly important to the success 1964 07:51 of the kind of products that we build. 1965 07:53 And so I can't wait to see what you guys 1966 07:56 are gonna come up with. 1967 07:58 Um, please, please, please, check it out. 1968 08:00 Build cool stuff. Surprise us. 1969 08:02 I just can't wait to see what you come up with. 1970 08:06 Thank you very much. 1971 08:07 [cheers and applause]