RailsConf 2017

Inventing Friends: ActionCable + AVS = 3

Inventing Friends: ActionCable + AVS = 3

by Jonan Scheffler and Julian Cheal

In the RailsConf 2017 presentation titled "Inventing Friends: ActionCable + AVS = 3," speakers Jonan Scheffler and Julian Cheal explore the integration of web technologies to create innovative interactions through chat applications utilizing ActionCable and the Amazon Voice Service (AVS). This talk is designed to intrigue developers with a blend of humor, technical insights, and practical demonstrations on building a simple chatroom in Ruby on Rails.

Key points covered in the presentation include:

- Introduction of Speakers: Jonan and Julian introduce themselves and provide humorous anecdotes about their backgrounds and experiences in programming and technology.

- The Concept of ActionCable: The speakers delve into ActionCable, a Rails framework for real-time features via websockets. They showcase how it enables the creation of a massively multiplayer online chatroom (MMMOC) that works across various environments.

- Integration with Amazon Voice Services: The talk discusses how to use AVS to interact with colleagues remotely through voice commands, showcasing how Alexa can read commands and execute actions in the chatroom context.

- Demo of Building Alexa Skills: Julian demonstrates creating a simple Alexa skill using the Alexa Skills Kit to make requests and receive responses. This provides insight into how developers can leverage AWS for interactive applications.

- Real-time communication: The speakers illustrate real-time communication where voice commands trigger actions and send messages to a chatroom, emphasizing the use of ActionCable to facilitate instant feedback and interactions.

- Practical Applications: They present practical examples such as querying a database for conference schedules and obtaining build status of applications to demonstrate the usefulness of their integrations.

- Challenges and Solutions: Throughout the talk, the presenters discuss challenges faced with setting up their examples and the importance of error handling and user experience in voice applications.

- Future Perspectives: Finally, they express excitement about the potential of their work, encouraging audience engagement and participation in their innovative project called "Friendster Book Space".

The presentation effectively combines humor and technical depth, providing both entertaining and informative insights into modern web development practices. The concluding takeaway emphasizes the ease and effectiveness of integrating chat functionalities with voice services, showcasing that voice technology can significantly enhance interactive applications.

00:00:12.559 Hi, I'm Jonan. I should have warned our friend in the back that I speak especially loud all of the time. How about I actually put the slides up? Or do you want to view it like this? Let’s just play; it's easier that way. I'm here to talk to you about inventing some friends.
00:00:22.710 I'm a friend, hi. Should I go through my whole intro or do you want to tell people who you are? We only met this recently; settle for a month. His name is Julian; he's from Australia. Good! I think I'm Jonan, and I'm from Portland, which is much like Australia, except not. It rains more.
00:00:39.390 I run the Joan and show on the internet. I work at a company called Heroku; you may have heard of us. We invented the color purple; it's fantastic! If you're wearing purple today, you're welcome. If you have any questions about Heroku or our color, hit me up.
00:00:52.469 A long time ago, I used to make websites to sell Diablo II in-game items until they made a patch update that rendered my whole company illegal. Then I had to find a new job. This is a picture of my daughter; she doesn't suck on her toes anymore, but it's by far the cutest picture I have. My son is hogging all the ice cream at Costco; he's adorable.
00:01:10.830 I used to sell cars, but after I stopped selling Diablo II game items, I became a poker dealer. That is a brief history of Jonan, and the reason I'm telling you all of these things is simply so you have something to ask me down the hallway because I'm leaving a lot of questions unanswered.
00:01:34.140 So, talk to me! Hi, I’m Julian. I’m a big fan of tweed. I live in the World Heritage site of Bath in the UK. Just in case you're confused, I don't actually live in London; I want to make sure that you know that. I do actually live in Bath.
00:01:45.240 As you can see, it’s called Bath because we basically have lots and lots of baths. If you do ever come and visit, the good news is I’ve heard from friends that stayed in some of the local hotels that we do now have showers, so if you aren’t a fan of bathing, you can now shower!
00:02:06.879 I work at a small open-source company called Red Hat. We also sell hats, which is pretty neat! I work on a project called ManageIQ, which manages clouds, but you know, here in the desert, there aren’t any clouds to manage, so I'm not sure really what I'm going to do. I'd like to introduce Amazon Alexa, which would help if I got my laptop out.
00:02:34.360 Oops, did I just break the resolution of the display when I did that? I want to present a review so we could see the next slide. This will be on video for all you watching at home. Are we ready? Okay, go ahead, ask Rosie to give her talk introduction.
00:02:49.400 Come on, internet, you can do it! I think I can, I think I can. Oh my, if you could all stop [pausing] crafted scale, it took too long to respond. Okay, let's try again. Seriously, everyone, turn off your phones and everything. Please go to the next phone, ask Rosie to get her talk introduction.
00:03:11.720 Sup! I'm Alexa. This is my star sales conference. How are you enjoying it? It's so hot here in Phoenix; you'd think I'd be used to that, being from Amazon. I love it; she writes the best codes and rants. So well, about you started, I guess they really liked tender love that I can beat his punt any day. Come at me, bro! Just joking! Tender love, here is some advice: don't give up on your dreams, keep sleeping.
00:03:40.340 Alexa, not yet; shush! We can't say that one word that rhymes with Mexican that wakes up automatically. She's terrible! Should we talk about value? Yeah! So, the thing is we came here under a bit of a guise; we told you we were coming to talk to you about one thing. What we're going to talk to you about is actually our startup. Surprise! Julian and I are starting a company, and we'd like you all to be a part of it.
00:04:10.400 Today is our product announcement; this is your first opportunity to get in on the ground floor for Friendster Book Space. It is by far the most innovative application that has ever existed. I would give you some more details than that, but just know that it will improve every facet of your life. Anything you can think of—your car, your phone, your dog—it will make all of those things better. This is literally the future of everything this application that we've built, and I'm excited to present it today.
00:04:56.150 But before we get into the details, Julian's going to talk to us a little bit about this other thing — our third friend here, Alexa. Actually, you're going to talk afterwards.
00:05:02.300 I am so yet so obviously, as we’re in the future now, as William Gibson said, 'everyone is in the future.' Just saying like that we decided to use the Amazon Alexas because we’re forward-thinking. We have a variety of them here; we have the Amazon Tap, which is the small pink one. Then we have the big old Amazon Alexa; I can't even lift that one. There’s also the tiny little one that you can even just carry around in your hands.
00:05:52.500 Amazon.com isms. And there's the rainforest edition if you go shopping later. The important feature of these two is that they have audio out, so you can connect them up to all of the speakers in your home or your stereo. This one does not, but you can pair it as a Bluetooth speaker to play music back through it. And all of them don't even over to me; to the Alexa skills kit, this is the magic that we are doing.
00:06:20.030 So when we talk to Alexa, we tell Alexa to do a thing, right? So what Julian just did with Alexa, if you gave it a text prompt, that was transformed into a bit of text that we send up to the Amazon Alexa service. The Alexa skills kit is a way for you to make Alexa say whatever you want it to say. And I'm going to walk you through how to create one of these skills in the Alexa platform. I wish that we were going to do this in a terminal; we’re going to do it in a GUI, because this is how you set up the Alexa skills kit.
00:06:54.030 If there is not actually another option for this, all of the things that I'm going to show you will show you an easy way to do so. This is the page when you log in; this is your skills information page. You have to go to this page to create a skill if you want to add something to Alexa.
00:07:02.030 There's nothing on this page that is really important except for your application ID. This is something you’re going to have to ship along with your information from your application because you're going to build a back-end service to send data to the Alexa skills kit and again, or to take a question from Alexa skills and give it back the answer. So you've got this application ID. In my example, I wrote an application, or an Alexa skill called Hal, right? The invocation name for Hal is Hal.
00:07:50.700 So if I talk to my Alexa and I tell Hal, I tell Alexa to tell Hal to do a thing, then that will be sent to this particular skill. You can have as many of these as you would like. The skill here has an intent schema in the intents; these are what people will do with your things. My skill Hal deploys things; it deploys applications on Heroku specifically. So you can tell Hal to deploy Steve to production; that will work. In fact, maybe now is a good time to try it.
00:08:19.030 Well, I’ll show you in a moment actually, but this intent schema I want to walk through quick; this is in JSON format. Okay? It's not just a JSON file that you can submit up; you have to go and log into the UI and paste in your JSON. There are Ruby gems that generate this JSON structure. If you know basically what you're trying to create, you can use those gems to generate it, or you just look at some of these examples online and fill in the intents they have.
00:08:37.300 These custom slot types are types that are referenced in the schema; these are the things people will say. You have 'chunk one' and 'chunk thing': 'deploy Steve to production,' right? And that allows Alexa to extract those two pieces from my intent and just send me those; so all my application has to deal with is 'Steve' and 'production.' I think we can all figure out where to go from there, right? But the piece of going from 'Tell Hal to deploy Steve to production' to 'deploy production' is harder, right? And that's at where Alexa comes in.
00:09:07.830 So then you set up a couple of custom types; these are the types for mine. I have an application list and environment list. I have the names of my applications, 'Steve,' 'Hal,' and 'Heaven,' and my environments in there. Then you give it some sample utterances to train it up; I say, 'deploy this,' 'deploy that.' The beginning is a little deceptive because that's actually the name of this skill, so I'm telling Alexa, basically, that first part is going to be Alexa.
00:09:47.800 For the purposes of this, tell Hal, 'sorry Hal, tell Hal to deploy Steve to production.' And I give it different ways to say it, right? You can also say to ship Steve to production; it happens to be that deploy is the easiest one for it to recognize, so do that. Then you set up your endpoint, and this is an important step: set up the end point that you want to be able to talk to you. When Alexa hears from you this particular phrase, it will post to that endpoint with some data.
00:10:22.300 And this is where Hal production applications come in, and Julian is going to walk you through one of these generators and how to create them. Being an Amazon Web Service, you know it likes you to create up seasonal JSON, but as we're all programmers, I found very exciting that someone actually wrote a Lexar generator that will generate these utterances for you and that JSON.
00:10:42.780 Here's just a quick example; this is actually on the Amazon page. There's an example of creating a horoscope application. As you can see, we've got the different horoscopes, life signs, and different days, so you'd sort of say, 'Alexa, tell me my star sign for tomorrow' or 'give me queries' or something like that, and that will then generate all of the data for you.
00:11:06.450 Unfortunately, this gem currently only has a few built-in data types; Alexa generates a slot pipe literal, but it's just a literal string that could just be anything in the world; and the date type is a type of date. So using these slot types helps Alexa recognize the string that you are passing to it. As I said, this gem currently doesn't support many, but I do have a pull request in the works to send because Amazon has a lot of custom types.
00:11:43.300 It has all of these ones and those ones, and these ones, so just a few. They cover everything from TV series to video games to weather conditions, so you can create all sorts of things. Back to our code: Once you've run this code, it will then create this JSON. This is actually the JSON I'm using today for my demo, so we've got things like dates, times, talk types, a list of speakers, and locations.
00:12:04.120 Here are some of the sample utterances that we're going to show a demo of afterward of the things that you can say to my Alexa app. The Alexa Voice Service: Has anyone used the Alexa Voice Service? I'm just curious, by a show of hands, has anyone tried to interact with this API? We have a couple, yes. So, the issue here in particular for me is that it's an HTTP/2 API, and I am not smart enough to use HTTP 2 APIs.
00:12:47.580 Actually, I am, but when I started, I was wrong and I thought I was smarter than I was. I think, given six or nine years, I could probably get a handle on how to handle this interaction. I am NOT going to demonstrate for you today on how an HTTP/2 API works. I want to explain to you though first why I want to use the Alexa Voice Service and what it is. In an Alexa skill, I say a thing to Alexa, and Alexa says the thing back; and that thing back I get to customize, right?
00:13:31.200 But if I’m going to have the Alexa be another device, for example my computer or a Raspberry Pi with a microphone and speaker on it, or anything that is not a physical Alexa device, I'm going to be using the Alexa Voice Service to accomplish those interactions. So, I want to give you a little demo of my house skill: 'Alexa, tell Hal to deploy Steve to production.'
00:13:52.420 Hal has deployed Steve to production. Hypothetically, I'm not actually able to give you information about whether or not the deploy was successful because I can't deliver messages to you unprompted. That would actually be a terrible feature; imagine if Lincoln could send voice messages to your living rooms. You'd never stop hearing about how you're getting notified, which is fundamentally the problem for me.
00:14:20.590 That's exactly what I want—I want to be able to turn on my Alexa without any prompting. However, there is no such thing as a push notification for Alexa. But, there is a bit of a fancy workaround, and we have found a way to do that. But it's the Alexa Voice Service itself that I want to demo for you today, so let's talk about that.
00:14:47.760 I went over here to the Alexa Voice Service thing and I’m reading through the HTTP API and I was like, 'Oh, there's a gem for it!' Ilia wrote it; he is so smart and I am so not smart. I would love to be able to just like whip this up every time I find a good gem; I'm excited. I'm sure it's very easy to use, and I'm sure lots of you have used it. I would love it if you could come up to me after this and teach me how to do that thing. That would be great!
00:15:17.820 What I used instead is this thing that I found; there's a script. This is like a bash script I found online in a forum post after a long time of digging when I had almost given up hope on being able to accomplish this piece of this talk. Something struck out to me, and it was right here at the bottom: it says v1; a lot. It says v1 right on it.
00:15:42.000 The HTTP/2 API is a v2 version of this app, the version 2 API for the Alexa Voice Service, and guess what—the first version does not use HTTP/2! So that was a lot easier for me to figure out how to do that thing because I can post for days. I am really good at posting! I buy good as a relative term; please don't read my code.
00:16:22.890 Next, this is the actual speech recognizer that we're talking about here. There's a menacing-looking warning on the top; this is an API you'll find on the sixth or seventh page of Google if you google 'version 1 Amazon Alexa Voice Service API documentation.' That's about as specific as I could get; it's buried.
00:16:38.560 If you find it or want a link, hit me up. You'll also find bash scripts floating around. So I basically took this, and I ported this API into a Ruby thing, so I can post this thing; things like the Omni-off strategy for Amazon don't work here because when you're interacting with the API, you have to send scopes that it's not prepared to send from, or other information that's not prepared.
00:17:08.580 Most notably, it also can't handle metadata in transfer around, like scope data tagging things. If you're particularly good at writing on the OAuth strategies, maybe we could sit down and tear one apart later. I would love to write one for this, or make a pull request, I guess. So, I have this other thing here I want to talk about, which is Polly.
00:17:37.730 Imagine that you say a thing, right? You say some text to me; I'm going to send that text up to Polly. Polly is a real-time text-to-speech API. If you are unfamiliar, they announced it last year. Polly does translation or text-to-speech using deep learning, and it's brilliant!
00:18:06.660 It is very good at it! So when you say like 'I live in New York' or 'Saturday Night Live,' 'live' and 'live' are spelled the same way, and there is no reason why a computer should be able to tell the difference, but Polly can, and it can speak in, I think, 16 different languages, which is awesome! So you should play with that API; it's very well documented and easy to use.
00:18:35.430 So, there's Polly; we're going to send some stuff to Polly. How we're going to do that is we're going to put the text into Action Cable. Okay, this is where the Action Cable piece comes in. So what Friendster Book Space, aside from changing the entire world, allows you to do is to type some text into a box and to send that text through Action Cable into the back end.
00:19:01.100 That is then going to be posted over to Polly; the Polly service is going to give us back an mp3 response of what we just said! Right? So I can tell Alexa to say anything I want. Then, I will take that text, and I will send it up to Polly.
00:19:32.090 Polly will turn it into speech. Okay, now I've got speech, and I think—I put it in S3. We're going to need it. I don't immediately put it into S3 because it turns out that the Alexa Voice Service wants a WAV file with some very specific parameters. So what you do instead is you use FFmpeg in the middle.
00:19:49.790 Then you install a custom build pack to accomplish that, and then it breaks. And then you install a different custom build pack to accomplish that, and that also breaks. But eventually, it works, and what I'm doing here is I'm taking that mp3 file, and I am taking it back to FFmpeg like just backticks out and translating it into a WAV file with specific bit rates.
00:20:02.780 Then I send it up to S3, right? I use that S3 to read the file back and post it to the Alexa Voice Service, right? The Alexa Voice Service sends me back an mp3, which is the response from Alexa to arbitrary text that I just sent it! Right? I can send arbitrary texts to Alexa.
00:20:52.460 What I was explaining a moment ago is you can use this to accomplish is that what you could do theoretically is create a skill that does nothing—just say 'Trigger my skill, triggered Jon’s rad skill!' Right? And then, between the time that Alexa talks to the endpoint, it's going to talk to you, and between the time you tell it to talk to it, you get some text over there magically! Right?
00:21:17.280 You could be connected to your production instance; whatever it is, you can modify the response text back to Alexa. You can have triggers on a server, how Alexa says things—unprompted—which is kind of magic. It’s not actually what I'm demonstrating here because it seems terribly dangerous to just let a crowd loose on that dream.
00:21:32.080 But I've got an equally dangerous dream for you, I promise! This is what happens at the end: we take this mp3, and we actually put a chunk of stuff back in through Action Cable to the front end to include it in the page, and then we play other things! Right? So let's talk about Action Cable real quick. Right? I think you probably came to talk about Action Cable; it is enterprise-ready in case anyone was curious.
00:22:11.110 This is an example of an app that's a demo with some seed users from our benevolent leader DHH. The Notorious B.I.G is forever immortalized here in the enterprise-ready Action Cable example application, which is actually really useful if you're trying to figure this out from the beginning. I’m going to walk you through it as simply as I can. Thank you!
00:22:44.850 Okay, Action Cable! People have used pub/sub. Are you familiar with pub/sub? Right? We've used that thing! Right? Or I can publish messages, and other people can eat those messages, right? This was kind of like the foundational basis for what we're about to create. So, normally when I ask a server for a thing, right, my browser is like, 'SYN.' That’s the first thing they send—a little packet, right?
00:23:12.800 So let's try it. Does anyone know what the next packet back is? If I said 'SYN,' what would you say? 'ACK'? Okay, close: 'SYN/ACK.' I didn’t know that either; I thought it was just 'ACK.' If you're a networking engineer and you think I'm wrong, please tell me why I just made bad slides—because I’m very interested in that! Found that thing.
00:23:55.950 But anyway, that's how a typical response goes! Right? I'm like a sinker! You see me, and the computer's like SCU, right? Then we’re good, and then I send a file, but that's it—that's the end of our interaction. A WebSocket is an alternative to that style of connection, where I do a little dance and throw something—it's a little bit more like this. We're just screaming at each other all the time; it’s just more fun!
00:24:29.900 So, Action Cable, there are four major components to setting up an Action Cable thing. The first is the connection, which is going to be inside your Rails application on the server side. The next one is the channel; this is so that you can have different ways to consume messages. Look, Jenny, buddy, remember these TVs? When I was a cadet, like five channels, they always spoiled you.
00:24:51.870 You had so many channels you gave up on channels altogether, and you're like Netflix, man! I’m going to use channels! Anyway, a channel is just like a channel on your television, right? You got one, two, three, four, five. I send things over one, and I can have people listen to one, two, or three.
00:25:06.919 Not everyone’s watching the same TV show all the time. Look at me! I’m a broadcaster! Then you have a consumer. The consumer is a little piece that sits in your browser and consumes a thing, right? It eats all the stuff on all of the channels. You can create subscriptions to specific channels; you can turn your TV to the notches you want.
00:25:32.780 You can actually turn your TV to a lot of notches. It’s like the little picture-in-picture feature; the analogies are breaking down, but you can do a lot of channels at the same time. As many subscriptions as you want, so I'm going to show you some code to do that real quick. Okay, this is how you create a subscription; in this case, I’m creating a subscription to the deployment channel.
00:26:02.050 When a message comes over a deployment channel, it sends me some text. I'm going to perform this action; this deploy action is defined here in my channel. There's my action deploy; it gets some text, I log it, and then I take the text and I put it into a deployment to respond to it, and that's going to kick off my whole back end.
00:26:36.060 But it's fundamentally about taking these two components on this side and these two on this side and shooting things over the wire between the browser and the server, right? The front end and the back end. So then when I want to send things back out here, I’m broadcasting to the server on a particular channel.
00:27:02.560 This is a deployment response channel. I said you could have multiples; this is one. I put the text on the deployment responses channel, which is the text you heard earlier from Alexa. She had that big diatribe. Alexa heard me say, 'Deploy Hal to production,' and it sent that to my back end, and the back end generated the text response using that little Action Cable deal there and sent it back out, okay?
00:27:35.080 Then, we're streaming from the deployment responses! The application that we are here to show you today is a little bit different than this particular version. This is what happens when you receive the data on the deployment response, and then in the front end JavaScript, you can do speech synthesis on that kind of thing. You can actually use that skill I just wrote in a browser, which is the point of using Action Cable and doing the thing where you talk to Alexa.
00:28:16.929 You don’t need anything like that, right? But I wanted to be able to let people talk to their web browsers and get it to do things, and that’s what the house does! So, that was a lot of words, and I apologize. But Julian's going to talk to you about something different, so you can start hearing again, not just my droning.
00:29:07.960 Now, faxes encode, right? So this is RailsConf, obviously; so for that, we've made Alexa on Rails! Following on from the other gem earlier that would generate the utterances and the JSON file, when your service actually receives the payload from Alexa, you need to handle that and then give a response back.
00:29:30.790 Again, it’s lots and lots of artisanal JSON. So there’s another gem that you should all go and download called Alexa Ruby Kit. This is super simple. Just in your Rails controller, you create a new instance of an Alexa Ruby Kit response, and then you just need to generate the string. As you can see, my method I call here is, 'Which demo am I calling?'
00:30:16.330 In that, I pass in the Alexa variable, which contains all of those keywords from the utterances, like the talk, the speaker, the day. Then I’ve just basically got a massive if-statement that kind of works out, like if this text was this, then I must reply with that.
00:30:42.810 So then you get all of that, and then you go down to the Alexa type. So this was just an intent request, as in a user was asking for something, and then you have my session end, which Alexa sends itself automatically, like okay, I've finished now.
00:31:05.270 With the request, there are other Alexa types you can use like you can say, 'Alexa, stop,' or 'Alexa, stop win!' If any of you have ever used the Alexa to like maybe play some music or set an alarm, normally you have to shout 'stop' quite a lot to it—that's where you would put that in this Alexa type that would handle that response.
00:32:01.620 So then you could reply with something back, like 'Oh, sorry, my bad!' As well as generating that, this also creates the title card so in the Alexa app you can see what the request was that you sent. You can see here this is in the Amazon Alexa app; it's got the title card of Electron Rails at RailsConf, and it's LexA heard me asking Rosie who is speaking at 11 a.m. today.
00:32:42.170 Then you can actually reel it in to your voice again, which is super fun! Just to make sure; and then you can tell Amazon's Alexa, 'No Alexa, somehow burnt the toast!' I wanted to know what time it was. So as you can see, my robot for Alexa is called Rosie, aptly named after all my favorite robots, which is Rosie from the Jetsons. Cool, right?
00:33:20.870 Now that you've heard about Action Cable and Alexa, maybe it's time for some demos! Ship it! Ship it! Do you want to load up? Ooh, I don’t want to know about it! You know, you didn’t see anything! Okay, Julie, are you going to talk to your thing and show them the filth? We’ve got 15 minutes, actually, maybe we'll go do you want to do some download?
00:33:52.240 Yeah, do this one. So I took the schedule from the conference, and I put that into a Rails app that’s running on the client. So when I talk to Alexa, it can then go query the Rails database and hopefully come back with an answer. Let’s see: 'Ask Rosie which room is tomorrow keynote.' Sorry, couldn’t find a thing. Let's try that again. She really hates Austrians!
00:34:29.080 And hang on, do it again. So one thing you have to do in your code is actually handle errors; otherwise, Alexa doesn't really know what to say. So that was it! Not being able to find anything in the database. Let's try another query: 'Ask Rosie who is speaking at 11:40 today.'
00:34:50.229 Well, we have Christine Nelson, securing Rails, absent user data, Polish and Off, Tyrion Kovac, Shawn Mafia, and a panel on developer happiness. Overall, a pretty decent lineup! I think you should see Polish and Off, Tyrion, and Mafia's talks, really.
00:35:17.550 If you even recommend things to you, I went around with Australian—because that is really hard to do. That thing just happened—it's not actually that simple. Hit all screws! I give details of Erin’s talk. Sorry, didn’t find a thing! You have to try that again.
00:35:39.770 Any of you thinking about being speakers in the future? No? Like, don’t do the live demos, okay? This is a terrible Oscar! Rosie, give details of Erin’s talk! Sorry, I couldn’t find a thing. Let's try that again; I've been judged and found wanting!
00:36:05.200 Apparently not for additional information! Let's try one more time—ask Rosie who is speaking at 12:20 p.m. today in the Exhibit Hall.
00:36:30.990 Giving up? There it is; it’s quit us— okay, that's fine. Last time! Ask Rosie who is speaking at 12:20 p.m. today in the Exhibit Hall.
00:36:52.860 It looks like it's time for lunch! So, as well as like talking to the conference schedule to find out, you can actually do some useful things for work. So you can hook it up to any API that you like!
00:37:29.280 Ask Rosie what is Rails build status? They call me mellow yellow! The build is still building. So, there are practical applications for this! With a decent Wi-Fi connection that is not me tethering from inside a concrete box, you know, a little more robust handling, maybe not like a demo version, but something like you can actually use this to do things.
00:38:10.240 I have used this to deploy applications! El Gracie, the replicators on this vessel are not yet operational! Electra is really good at jokes. We've got it again! I'm going to combine, yeah good! Iris this one, I would like to welcome you all to the Future! There is an application here for your viewing enjoyment called Friendster Book Space. Heroku app com! As you're heading here, I would like to point out that this is a chat room being presented at a RailsConf talk that is very well bound under the Code of Conduct so behave yourselves.
00:39:07.830 If there's anything inappropriate, I am burning it down and breaking my computer and coming to find you. I have more information about you than you think; we're using a real name service, the Google Auth. More than that, WebSockets can give you a lot. I’ll give you some details later, so let’s look over here at Friendster Book Space on this screen.
00:39:54.520 Though the future of everything, the first day, machine learning, dialog system to leverage IoT, home automation, and voice recognition WebSocket technologies on a continuously integrated path to anyone. See? Massively Multiplayer Online Chatroom! Are you excited? Who wants to hug the future? Should I do it?
00:40:21.390 All right, it's not on the screen. Are you serious? I was just reading a thing! You're like looking at my garbage files! Why are you doing that instead of what I want you to do? Now you can see, oh my gosh, now you know I have a messy desktop. That is like the most shameful thing a programmer can have!
00:41:11.579 Okay, I'm going to try again! I was just reading this text here; it’s not that exciting! I'm not going to read it again because it was kind of hard the first time, but I will invite you to hug the future, which out of context doesn't make any sense! But as you can see, I’ve cleverly named the login button: 'Hug the Future!' So you click here; it's going to offer you with my Google thing here.
00:42:47.410 I will choose to not use this browser—first of all, because that would be a poor choice! I apologize for that, but I’m here at Friendster Book Space, and look at that, I am logged in! Magic! Wow! How’d that happen? Now you don’t have any characters or my passwords, so I can go right in to the future here by clicking this, and I’ve got a chat room!
00:43:17.990 Look at people talking in the chat room already! It's so exciting, right? It's a real live chat room! Use Action Cable! We finally found a use for Action Cable, and it's basically making Slack! Hi, Mom! Dressers! Yeah, it’s the future! The future of Slack, and I want to show you why real quick.
00:43:50.670 Because I can say things like this, maybe... oh no! That’s not what we wanted to do! Did it just? Okay, how about this? Now I want to do this! Please do a thing! Why are you doing that? Because people are typing—is that really a bug? I just introduced it! Please stop typing, okay? You got nothing from 'hello!'
00:44:59.830 Wheels Conference! Oh, look at that! We just chatted to Alexa, and to show some joined-up thinking, hopefully when I speak to this Alexa, that should also go in the chat room: 'Ask Rosie what is Rails build status!'
00:45:40.500 I’m elected with my first real! That's perfect! It wasn't quite what I wanted but it went great. What a ghost relaxer! So now, hey, can you speak to your Alexa from text? You can also do it from your voice, and then you can talk to your colleagues. So this is a remote worker's dream.
00:46:04.700 Yes, it’s why we all work from home in the first place! It's to talk to our colleagues! Jonan Scheffler asks, what do you want to be when you grow up? Right now I'm a translating mp3s to WAV files! I want to be the computer from Star Trek!
00:46:20.980 This is a good answer! Thank you, Alexa! You can ask Alexa things. You can say all of the things that you ask Alexa to say, and ask will happen in your own browser! So the audio is played back through me embedding an audio element that has the S3 mp3 link in it that can then be played in the browser.
00:46:54.760 You can also implement features! Yes, Alexa has got excellent jokes! You can also implement features that would allow you to tell other people! The channels that I was talking about creating earlier: there is one broad channel, which is the messages channel that we’re working through. People post questions and things generally in that channel, and then each user has their own channel, right?
00:47:57.050 So I could hypothetically have implemented a feature that would allow me to have Julian's computer say a thing. Raise your hand if you didn’t have a good idea in a live demo, though! You’re wrong, actually; you're totally incorrect!
00:48:37.750 You could also implement something that iterates through all the users and sends to each of their channels anything you wanted, and I could send audio to all of your devices if you were the sorts who all had your laptops open and the volume turned up way high! Right now, I could blast you out with an mp3! I'm just kidding! I’m not going to do that!
00:49:28.970 But that would be something you could do with this type of thing. So the channels give you a lot of flexibility and a lot of power! Action Cable is a fantastic tool! Let's hop back over here very quickly, and I'll do this! And it worked! Can you see that?
00:50:03.490 Do you see my dirty desktop? Spell—confreaks! Go ahead and cut the desktop from the video! Let’s see how we can find our Foulke again!
00:50:39.520 Well, do it! Do Erin’s talk! Ask Rosie to give details of Erin’s talk! Sorry, I couldn’t find a thing! Let's try that again! We invite you to try on your own and find Julian in the hallways and try talking to his Alexa in your best British accent!
00:51:19.200 You can actually set the voice that it expects! The thing about Polly earlier having 16 different languages, you could very easily change this chat room code to send Japanese text and say Japanese text, and it’s very good!
00:52:03.220 So go and play with Polly! If you know how to use HTTP/2, please teach me! Also, the other Amazon API documentation, the v1 stuff, is very deep, but I can help you find it. If you need a link, hit us up anytime; we're Red Hat, the new startup, Friendster Book Space!