Chat Robots Next Level Tooling
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Number of Parts | 65 | |
Author | ||
License | CC Attribution - ShareAlike 3.0 Unported: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this | |
Identifiers | 10.5446/37596 (DOI) | |
Publisher | ||
Release Date | ||
Language | ||
Producer |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
|
00:00
Online chatRobotFeedbackMathematical optimizationTwitterRight angleMultiplication signPosition operatorComputer programmingComputer animation
01:16
Online chatMonster groupCodeChatterbotFamilyOnline chatSinc functionTelecommunicationComputer animation
01:48
Office suiteSystem administratorComputer fileBitRepository (publishing)StapeldateiBranch (computer science)Uniform resource locatorServer (computing)Theory of relativityScripting languageTelecommunication
03:22
Online chatClient (computing)Asynchronous communicationGodHost Identity ProtocolProduct (business)2 (number)MereologyPersonal digital assistantTelecommunicationRight angleService (economics)Data managementLine (geometry)Cellular automatonWeb-DesignerSynchronizationComputer animation
05:22
Point cloudWeb 2.0Web-DesignerPattern languageOnline chatService (economics)Bit rateCuboidSinc functionComputer animation
05:51
Goodness of fitUser interfaceComputer animation
06:12
Incidence algebraWeb applicationRight angleComputer fileWeb 2.0Programmer (hardware)Frame problemVirtual machineWeb browserMereologySet (mathematics)Host Identity ProtocolUniform resource locatorComputer animation
07:45
Inclusion mapOnline chatWeb 2.0Formal languageChatterbotRoboticsSimilarity (geometry)Bridging (networking)Computer animation
08:31
Online chatBridging (networking)Staff (military)Server (computing)Shared memoryService (economics)TelecommunicationPrisoner's dilemmaTraffic reportingBitRoundness (object)Link (knot theory)Cellular automatonMultiplication signRight angleComputer animation
09:24
Link (knot theory)ChatterbotComputer animation
09:44
Correspondence (mathematics)Client (computing)Virtual machineChatterbotLine (geometry)Service (economics)CollaborationismLoginComputer fileServer (computing)Computer animation
10:25
Water vaporLink (knot theory)VideoconferencingWhiteboardPattern languageComputer animationMeeting/Interview
10:51
MultilaterationError messageIncidence algebraPattern languageOnline chat
11:53
Disk read-and-write headVideoconferencingEmailMedical imagingSoftwareHacker (term)Interface (computing)Computer animation
12:26
Mobile appComputing platformScripting languageLine (geometry)Bookmark (World Wide Web)Office suiteServer (computing)ChatterbotInterface (computing)Data miningOpen sourceComputer animation
13:47
Revision controlCodeTraffic reportingScripting languageMereologyComputer engineeringPower (physics)Java appletComputer animation
14:23
Software architectureChatterbotComputer engineeringScripting languageLine (geometry)Computer animation
14:50
StapeldateiRobotData typeDependent and independent variablesComputer wormParsingRouter (computing)Physical systemHash functionSoftware repositoryInstance (computer science)Cartesian coordinate systemEvent horizonModule (mathematics)Connectivity (graph theory)ChatterbotLine (geometry)Physical systemLogicInteractive televisionCodeInterface (computing)Information privacyModal logicRoboticsMereologyBuildingCondition numberGroup actionDependent and independent variablesConfiguration spaceConcordance (publishing)Endliche ModelltheorieDirection (geometry)Web 2.0Descriptive statisticsGreatest elementDressing (medical)DatabaseVideo gameMultiplication signDataflowMetropolitan area networkConfiguration management
16:58
DatabaseDenial-of-service attackElectronic visual displayLimit (category theory)Configuration managementGraph (mathematics)LoginMultiplication signDataflowComputer animation
17:30
BitPoint (geometry)Host Identity ProtocolMultiplication signMedical imagingDemo (music)ChatterbotGoodness of fitGodSystem administratorOntologyComputer animation
18:17
Medical imagingLink (knot theory)ChatterbotOrder (biology)Touch typingComputer animation
18:41
ChatterbotWordMultiplication signComputer animation
19:04
Link (knot theory)MereologyNumberCore dumpComputer animation
20:00
ChatterbotMoment (mathematics)Medical imagingRoutingServer (computing)Default (computer science)Computing platformOffice suiteService (economics)Web 2.0Computer animation
21:42
Scripting languageGroup actionOrder (biology)Computer animation
22:07
MereologyPresentation of a groupView (database)Computer animation
22:34
Binary fileSigma-algebraGoodness of fitChatterbotInterface (computing)Process (computing)Software testingComputer programmingComputer animation
22:57
Software developerMultiplication signFormal languageDifferent (Kate Ryan album)Front and back endsProgramming languageComputer animation
23:41
SoftwareMultiplication signOnline chatBlogTrailJava appletComputer programmingBit rateDivisorArithmetic meanSoftware testingNP-hardProcess (computing)DataflowComputer animation
24:44
TelecommunicationRight angleCodecWordChatterbotCoordinate systemOnline chatAsynchronous communicationComputer animation
26:04
SoftwareEvent horizonVideoconferencingWeb 2.0Computer animationMeeting/Interview
Transcript: English(auto-generated)
00:23
I had the idea to do a very German thing at the beginning, so I wanted to start on time. Didn't work out, but it wasn't about me, it was about you, you weren't here then. All right, so we are running three minutes late, I think that's fine. I'd like to start with a question.
00:41
Why do you program in Ruby? Oh, actually, this is a more rhetoric question. I want you to think about it, and not to answer it to me. I hope that one of your answers is because it's optimized for developer happiness.
01:01
And if that is right, why is your tooling so shitty? I came up with a question on my own, because I found myself in this situation, and this is basically the story of this talk. So it's about chat robots and lack of a tooling.
01:20
You can find me at Code monsters on Twitter, so if you got any feedback, especially the positive one, please just tweet me. The negative one, I'd rather likely to be a receiving person. As developers, we are hanging around in chat rooms since ever. But why do we do it?
01:41
I think, no, let me phrase it this way. I'd like to start, or I'd like to answer this question with a quote. This one is from Chris Wansbrad, CEO of GitHub. And he said, if you have a sick day, you're not going to miss everything if your communication is set up to be distributed. I think this is one very good reason
02:04
to hang around in chat rooms. I don't know if you have ever experienced that as well, but if you're not in the office one day, and the more you're relying on mediums which are replayable, the less likely you're going to miss something important.
02:24
Like most of the companies in the world, my company is not GitHub. So we are not completely distributed. We have a branch office in San Francisco, our headquarters in Hamburg, Germany, and we have one office in Tokyo.
02:41
So we are distributed as well, but we are not like all over the world. We are just a little bit distributed in three different locations. But still, if I'm sick, I don't want to miss something which is going on in the office. When I joined Jim New, I found a repository
03:00
which is named admin server scripts. This one should rather be a keyword scripts collection, but all of a sudden, it was a big collection of batch files. It does all different things regarding servers, adding new ones, deleting ones, all kinds admin related.
03:23
Chat rooms are awesome, and chat rooms are awesome for three main reasons. And my first reason is their asynchronity. So chat rooms are asynchronous. What does it mean? I think for us developers, it's pretty clear what asynchronous communication means, right?
03:42
If you want to know something from me, and I'm focused, working, I do not want you to interrupt me. Very unlikely, other people, especially product manager, knows that. So they're very likely to just disturb you
04:01
while you're in the tunnel, right? You're very focused, working, and then they, you know the situation? They step up right behind you, and you see them stepping up, and they think they're so friendly, not tapping on your shoulder, but they are annoying as hell, just waiting there, tipping with their feet. Oh my God. So this is synchronous communication,
04:21
and this is so annoying. So chat rooms take that part away from us. You can ask me something, and I can come back to you if I'm ready answering. Second reason, chat rooms are persistent. So whatever you write, I can read whenever I want to. If you're using the more hip toolings, like Slack or HipChat,
04:41
you can even search whatever was up later, or was up before. On other solutions, your client might implement that as well. So and actually the third reason is chat rooms make you collaborate better,
05:02
and this is the most important thing for this talk. So you can collaborate with your coworkers. You know, there's something going on, and everyone is in the room, everyone is writing, and you can't just go straight solving that problem, which is a cure.
05:22
On the other hand, we are putting more and more services into the web, right? We are all, I think most of us are web developers. So this kind of clashes, right? So we are so used to chat, but then we are moving everything into web. And I think this is okay, because not everything fits into the chat pattern.
05:43
Some things might require a slider, radio buttons, check boxes, all this stuff you do not have in chat. Like deployments. There are so many good deployment tools out there, but most of them are somehow bound to a web interface. Deployinator from Etsy is bound to web interface.
06:03
Or even worse, tools like Capistrano, they utilize the shell or bash. This is not collaborative at all. I like to talk about incidents. So beside the fact that I'm a programmer at my company,
06:23
I did ops and on-call for about a year at Jim New. So I want to share my experience about alerting and monitoring. So what happens if there's an incident? Usually people SSH into a machine,
06:41
and then based on their experience and their knowledge, querying log files, and making assumptions based on what they know, and based on their experience. Then they come back to the chat and report their assumptions. So you have no idea how they made those assumptions, how they could conclude to that.
07:03
So they still come back to the chat, but you're missing an important part. And then we have tools like Nagios. Do you know Nagios? I think it's even written in something really crude. I don't know, it's nothing hip. And it considers itself as a web app, but it's still using frames.
07:21
So I don't know, this is just a crazy thing, but it's still in the web, right? And so I can use it with more or less good in a browser. You can't copy URLs. If you ever use that, you cannot copy URLs because it has this frame set. Oh my god, that's so shitty. Anyway, so we are talking about,
07:40
on the one hand, we have this chat stuff, and on the other hand, we have this web. So both is cool. So we need something to bridge the technologies together, the web and the chat. Here, Huwod kicks in.
08:00
Who of you have ever heard about Huwod? That's almost half of the audience, that's cool. So Huwod is written in JavaScript, and I'm running a node on the V8 engine. And for this talk, I'd like to take Huwod just as an example. There are similar chat robots, like Litter or Twike, written in Ruby. So we're at RubyConf, so Litter and Twike on Ruby,
08:20
based on Ruby. But for this talk, I'd like more to talk about the basics concept of a chatbot. So it's not about the language they're written in. Huwod is a bridge between everything which happens outside of the chat and tries to bring it back to the chat. Imagine all your deployments can be triggered from the chat, your alerts suddenly arrive
08:42
at a central place, also your chat. When these things land in your chat rooms, that brings several advantages. First, sharing is caring. Everything is directly shared with your coworkers. Let me tell you a little story of Jimdo. We have a big farm of servers, likely 300 of them,
09:04
and when one is down and has an outage, our support staff is dropping in and asking what is going on with that server. If our tool would report into the chat room, they could just hang around there and they would know if the server is up or down.
09:21
I have a demo on that later on as well. Also, it's preserved history, right? Everything is recorded. Everyone can search for recent outages or posting, or imagine your tooling or your chatbot could posting links directly to your Yammer or whatever you use for your communication.
09:41
Directly linking to the corresponding chat line. And my favorite feature, collaborating. You have a direct place to collaborate. So let's think about the example of a server outage I mentioned before. The server is down. What we had before, everyone was like SSHing into the machines and then pulling stuff out of there.
10:01
But now, if you have the tooling in the chat room, you could ask your chatbot for the corresponding log lines and then you can make assumptions right in the chat with your colleagues together. So they would know what kind of files you were asking for. I think this is a super powerful tool.
10:20
And you could easily pull log lines with HuBot and then you can make those assumptions together. Teaching by doing. This is a quote from Jesse Newland. He gave a talk in RubyFusa last year. It's called ChatOps by GitHub. You will find a link to this video at the end of my deck if I upload it later.
10:42
And I think this pattern of doing it collaboratively in the chat is a really cool thing to onboard people. This is War Room. This is another War Room. This is the old War Room of GitHub HQ2, as far as I know.
11:03
And I want to symbolize a certain chat pattern which is, again, related to all this op stuff because I did this for quite a while. So when there's an incident, and you can judge by the incident or by the error message that the problem is kind of a bigger one,
11:21
you are going to open up a new chat room, gather everything who can contribute something in this chat room, and then you can fix it together. So people who are interested in this pattern or in this incident can just join and silently watch whatever is going on and check whatever is up. And even later, people could have the possibility
11:42
to follow up and to check what was going on. And you can use this transcript of the chat for a later postmortem analysis. But enough about failures. I think one of the biggest reasons why Hublot is around is for fun. So you can post images, GIFs, videos,
12:02
or doing whatever kind of bullshit you have in your head just in the chat together with your colleagues. This is pretty cool. So imagine everything Node can do, TCP, HTTP, network, email, it's up to you. Everything you can do with Node, you can do with the chat bot. You can give it a chat interface and work on that together with your colleagues.
12:23
In my old company, we did a pretty cool hack. This is what it looked like. So what you see here is an arena with breadboard and a door buzzer. So what we did is, so we had a pretty big office back then and we are way too lazy to walk all up to the door
12:41
to ring the buzzer. I don't know, we're programmers, we're lazy. So what we did is we connected this arena to the door buzzer and then we wrote, or a coworker of mine back then wrote a script which you could consider as an HTTP server. Whenever, after the TCP handshake,
13:02
the next line was HTTP something get slash, we would consider this as a valid request and then open the door with the bot. So what we did was we were putting an HTTP interface to our door and with that, we could write all kind of apps. So we had an Android app, an iPhone app, a bookmarklet, a status bar bookmarklet, applet, whatever
13:23
and I wrote a script for our bot. So our bot could basically open the office door. This was pretty cool. If you're interested in this particular kind of stuff, it's still open source on GitHub and you can find this also at the end of this deck.
13:41
It turned out that my old CDO really loved this setup. So when he joined this next company, he created an improved version of that but it's basically, it's still running the same code and it's just a better case and without the breadboard.
14:03
All that is done with the power of CoffeeScript and with that, everyone can easily extend it. That is the basic part of Hubot. There are tons of scripts already available, pre-built but due to the fact that it is all CoffeeScript
14:20
or JavaScript, everyone can contribute pretty easily. So customizing your bot is easy. You don't need to be a CS computer engineer. If you know how to get a few lines of JavaScript working, you can make it work and you can write your own scripts. You don't need the most freaked out
14:41
software architectures for this. It's just 10 lines of JavaScript and you can make something work. I wanted to show you how a basic Hubot script looks like. So as good engineers, we start with the documentation. This part is pretty, it's necessary because Hubot uses that to generate the documentation
15:01
so you need the description, dependencies, configuration, commands, notes and the order, whatever. Who does documentation anyway? But then, this line is pretty important. You have to fetch the instance of a Hubot. You do it with a module exports and then you get the instance of the bot. Here, we're going to start.
15:22
Here we can do this very first interaction with the bot. I'll give you some sex to read through code. I mean, it's pretty easy, right? At the first line, you see robot.here.
15:40
So whenever someone is writing something badger, he would actually just send out the line to you. And the next, the robot.respond is for direct commands to the bot. So you have to write Hubot, open the damn doors, for example. And then he would actually reply with a second line of the first.
16:03
Hubot also has an HTTP interface which is pretty cool for all kind webhooks. So imagine Privacy Eye or GitHub. Everything which basically has a webhook can communicate to your bot and then in your chatroom. Think your application can also do this.
16:20
Your application could report with this webhooks to the bot and make some kind of magic happen. This is pretty cool as well. And it also has an event system inbuilt. This is to decouple components. I wrote this event system because there was one little thing which annoys me. So there is a command called ship it
16:41
which actually just posting motivational squirrel. I want this command to actually ship my code. So what I did, it was just emitting the event and then everyone could just implement their deploy logic on their own in a different module. The only limit is your imagination.
17:01
Think of how you could improve your team's workflow with automating things. You could run configuration management from chat, mitigating DDoS attacks from chat, clearing logs or databases from the chat, or display graphs. Whatever comes into your mind and whatever could improve your team's workflow
17:20
could be done from the chat and you can get rid of all the shitty tooling you have somewhere else which is not collaborative and most of the times. So I also wanted to show something. Can we get this a little bit less noisy? Does it work?
17:42
Okay, I think this works. So let's see. I hope the live demo gods are with me. My company last week while I was in San Francisco already switched to Slack. So I was talking to our admins to keep our old hip chat open because I didn't have the time to move our chat bot over. So here's the gym bot which is our queue bot.
18:02
So let's start with some very basic commands. So I want the bot to image me RubyConf. What's that? Sorry, good point. All right, ooh.
18:21
Okay, so I asked the bot up here to image me RubyConf and then he's replying with an image link. So I have to write this at gym bot which is his actual name and then I could write the command. So let's try it again. Sometimes it's a different image, sometimes not. So here you see, it's a different image.
18:42
I hope I have some stuff set up here. Okay, so you could also, and this is one of my favorite features. You might guess what's happening now, right? So you could ask the bot to mustachify one of your coworkers or anyone else. All right, this was funny though.
19:03
The first time I tried this, it was working all the time and now it works sometimes. Another feature and now we're getting to the parts we wrote on our own. When I'm having a discussion in a channel, I could ask my coworkers on what is going on
19:24
with this ticket and then posting the link and Hubert will check that this is a link to our issue tracker and then hopefully, he will reply with the issue title. So it saves me to click on the link and to do this shitty HTTP basic out
19:40
which is usually in front of our issue tracker. So he's just replying on what the issue is about even if there's just a link. This also works the other way around but I think we have disabled it. So if he found an issue number, he might look it up and then reply back but again, I think we have disabled it because it happened in a different channel. So we have this bots channel here
20:01
and it happened that these bots started talking to each other because the Jenkins bot was reporting that there was something wrong and then Hubert replied and oh my God, that's why we disabled that. A similar, another thing we did
20:21
and that's one of the things I mentioned before. So imagine you just, you are a supporter in our company and you want to know the status of a server. So you could basically ask the bot what is the status of any given server. So in our web platform, everything has a default in a route
20:43
which is slash common slash status which just reports HTTP status is back and based on that, you can judge whether a service is good or not. So we can ask Jimbot for this web server or we can also ask for this WW server.
21:03
So at least these two servers are up. I could bet there is something down at the moment but I don't know. Okay, the last thing I want to show is one of my favorite features. At Jimdo, we are 180 people at the moment. We grew pretty fast and it happened
21:22
that there were people hired. I have no idea who they were. So it happened that people walked into our office and told me, oh, you actually have to talk to Ayla about that. I'm like, who's that? So I can ask our bot who's Ayla and he will actually post me an image, hopefully.
21:42
Yay, so there's Ayla. She's one of the Spanish team. So this works not only for Ayla, so I want to prove that it's actually not a fake thing. Also for our founders, for example, or also for me, but for me, I have to use my last name.
22:04
Because this script isn't too intelligent because if I just search for my first name, it would actually find Johanna Zolike sometimes. And because my first name is part of her name whatsoever. This is complicated. But actually this was pretty useful for most of us.
22:24
And this is also one of the most features we have in our bot. Presentation view, I don't see anything. What about that? Good.
22:41
Okay, this was just to give you an idea on what you actually can do with your bot. Again, it's just programming. It's just Node. So whatever you can do with Node, you can actually implement in your bot and give it a chat interface. Developers love tooling. So we tend to spend a good amount of our working time with this.
23:01
And I think this is not necessarily bad. And I think this is also what is awesome about Node.js because Node.js is JavaScript. And with JavaScript, it unites different backend and frontend programming languages. So in the JavaScript community, there are people out of the Ruby community, but also of the Python community, the PHP community.
23:23
And whatever you can think of, whoever does web, and now even more people who are not related to web, they are all uniting this community and everyone is bringing in his or her best tools, which I think is pretty neat. And this is pretty unique to this language.
23:42
I have another quote. This one is from Garen Means and she wrote a blog post about tooling. We need more engineers and more productive engineers. We don't need to send people on quests through the dark woods of our issue tracker. When I started at a company,
24:01
my first two questions are, what is your issue tracker and what is your chat program? At Gymnoo, the answer was our issue tracker is track and the chat program was Java. Somehow, I still joined out of other reasons, obviously. But for me, these are very important questions.
24:21
These are the tools I work the most with. And even if we don't want to admit that, but as developers, we are spending not the amount of time we want to in our editors, right? We spend a lot of our times with communicating people. So our issue tracker and the chat software
24:41
are pretty important pieces in the whole workflow. So I wanted to share also the challenges we had in implementing this company-wide chat workflow with everyone. And I think the hardest challenge was and still is to get everyone on board, also the non-technical people.
25:00
Because for people with a technical background, it's pretty obvious that chat programs are cool and asynchronous communication is cool and the fact that I do not have to reply instantly is a cool thing. But for other people, they might prefer the way that they have direct replies when they just step up to you and asking you questions.
25:24
So this is also a thing we are still fighting with and sending people away would be so stupid, right? Imagine I'm working on something and they interrupt me and then I would send them away and say, no, no, no, you have to write me on chat and this would be so stupid and we obviously don't do that, right?
25:42
So it's kind of hard to educate them. But we really want to do that or I really want this to happen. So my idea is to make this chat as attractive as possible with all this little things the chatbot can do so that people actually want to do this as well.
26:04
So I want you to level up your tooling. You can document your deployments, coordinate your work and have a ton of fun with these chatbots. So that's a pretty cool thing. My name is Ole Michaelis. I'm a web nerd from Hamburg working with Jim New and you can find me at Costas.
26:20
That's all I got. Thank you very much.