1
00:00:00,000 --> 00:00:08,820
Well, hello everyone. We've got a special guest with us to talk about Esme today, Dennis

2
00:00:08,820 --> 00:00:12,360
Howlett, one of the people who's helped do all of the work around it. And you want to

3
00:00:12,360 --> 00:00:14,760
just give us a really quick rundown of what Esme is?

4
00:00:14,760 --> 00:00:21,060
Esme, Enterprise Social Media Experiment, is how it kicked off out of a plug conversation,

5
00:00:21,880 --> 00:00:29,340
where the idea is that we take the concepts that Twitter offers for messaging in the flow

6
00:00:29,340 --> 00:00:31,440
and apply that to business problems.

7
00:00:31,440 --> 00:00:35,780
And so, like, what's sort of the workflow that you would anticipate that this is built around?

8
00:00:35,940 --> 00:00:44,120
What we've done so far is build a pretty simple use case where a portal, a sales portal, is failing.

9
00:00:44,820 --> 00:00:50,120
People are not sure why, and they're finding that people are drifting off and getting involved

10
00:00:50,120 --> 00:00:51,680
with manual processes.

11
00:00:52,020 --> 00:01:01,100
What we've done is we've tied the problem-solving process that you would go through to the messaging

12
00:01:01,100 --> 00:01:06,180
service as a way of discovering who knows what the problem's about and how to get it solved.

13
00:01:06,180 --> 00:01:13,280
But what we're constantly focused on is the fact that this has to have an enterprise capability

14
00:01:13,280 --> 00:01:16,120
in the sense that it's got to be capable of being secure.

15
00:01:16,660 --> 00:01:23,280
It's got to be capable of moderating the right people in and out of groups and so forth and

16
00:01:23,280 --> 00:01:27,840
providing the right answers for them as opposed to the more consumerist side of things where

17
00:01:27,840 --> 00:01:29,660
those issues just don't get addressed.

18
00:01:29,880 --> 00:01:31,920
The way this came about was sort of interesting.

19
00:01:32,080 --> 00:01:36,660
It was developed sort of, I mean, just to call a shorthand, there's sort of an ad hoc community

20
00:01:36,660 --> 00:01:39,480
that seemed to come together within SDN.

21
00:01:39,480 --> 00:01:45,920
This arose as a result of a flirt conversation among a small group of people who just happened

22
00:01:45,920 --> 00:01:50,000
to be SAP mentors in the SAP communities.

23
00:01:50,860 --> 00:01:52,260
They are like-minded people.

24
00:01:52,340 --> 00:01:53,460
They're very passionate anyway.

25
00:01:55,280 --> 00:02:00,740
And they kind of knew that they'd be able to work together anyway.

26
00:02:01,400 --> 00:02:03,280
And they just wanted to make this thing happen.

27
00:02:03,480 --> 00:02:05,980
And it literally snowballed within a matter of days.

28
00:02:06,720 --> 00:02:11,320
I'm one of the mentors anyway, and that was how I got dragged in, because they wanted somebody

29
00:02:11,320 --> 00:02:16,040
who could help them figure out some of the business problems, but somebody who could also

30
00:02:16,040 --> 00:02:18,900
help them with the marketing side of this thing.

31
00:02:19,280 --> 00:02:21,000
And it really just snowballed from there.

32
00:02:21,120 --> 00:02:22,640
I mean, it's very difficult to describe.

33
00:02:22,780 --> 00:02:28,400
I mean, the dynamics of this are quite extraordinary in the sense that people just get on and get

34
00:02:28,400 --> 00:02:28,900
things done.

35
00:02:29,000 --> 00:02:29,960
I mean, nothing is an issue.

36
00:02:30,180 --> 00:02:32,020
Okay, so we need survey development.

37
00:02:32,180 --> 00:02:33,220
Fine, how do we get that done?

38
00:02:33,340 --> 00:02:34,060
Bang, it's done.

39
00:02:34,060 --> 00:02:37,640
We need somebody to speak to people within SAP.

40
00:02:38,000 --> 00:02:39,120
Bang, it just gets done.

41
00:02:39,300 --> 00:02:40,480
I mean, just nothing is a problem.

42
00:02:41,020 --> 00:02:45,140
It's quite a unique development effort, I would suggest.

43
00:02:45,360 --> 00:02:45,600
All right.

44
00:02:45,680 --> 00:02:46,380
Well, that's interesting.

45
00:02:47,040 --> 00:02:47,400
Well, great.

46
00:02:47,560 --> 00:02:49,840
Well, thanks for telling us about that.

47
00:02:49,920 --> 00:02:54,160
But now we're going to take a look at sort of like the evolution of the Esme stuff in

48
00:02:54,160 --> 00:02:54,740
action here.

49
00:02:54,820 --> 00:02:57,000
And we've got a special guest to show that to us.

50
00:02:57,040 --> 00:02:58,120
Would you like to introduce yourself?

51
00:02:59,480 --> 00:03:00,800
Yeah, I'm Darren Haig.

52
00:03:00,940 --> 00:03:02,360
I'm an SAP mentor.

53
00:03:02,540 --> 00:03:04,300
We're using the Lucene search engine.

54
00:03:04,640 --> 00:03:09,080
And around that, we're using a library called Compass done by Shai Bannon.

55
00:03:09,980 --> 00:03:15,240
So here, what we're looking at is the most basic possible Compass configuration file.

56
00:03:15,620 --> 00:03:20,600
And it's really just got one entry where we're saying store the search index in the target

57
00:03:20,600 --> 00:03:21,760
slash index folder.

58
00:03:23,080 --> 00:03:26,600
So from that, we're going into boot.scala.

59
00:03:27,280 --> 00:03:33,820
This is the file that gets run at the start application and does all of the configuration parts.

60
00:03:34,480 --> 00:03:40,440
And as you can see here, the Compass object is just setting up the configuration, reading

61
00:03:40,440 --> 00:03:45,220
in the configuration file that we defined, and then saying add class message.

62
00:03:45,440 --> 00:03:50,000
This is just saying that we're going to be indexing any messages that are generated in Esme.

63
00:03:50,540 --> 00:03:56,540
And this is obviously Scala code right here, which is always fun to look at.

64
00:03:56,740 --> 00:04:01,760
Because, for example, adding in classes, they're doing some sort of reflection sort of stuff.

65
00:04:01,820 --> 00:04:05,800
You can see that it's pretty similar to expectations people might have about Java.

66
00:04:06,780 --> 00:04:07,020
Yeah.

67
00:04:07,240 --> 00:04:09,480
And I mean, my background is a Java background.

68
00:04:09,680 --> 00:04:14,360
And I'm still writing Scala very much in the style of Java without semicolons.

69
00:04:14,360 --> 00:04:18,340
So then let's go and have a look at our actual message model class.

70
00:04:19,380 --> 00:04:23,880
So elsewhere in the class, we're defining the fact that it does, you know, the bits that

71
00:04:23,880 --> 00:04:24,840
associate with the message.

72
00:04:25,560 --> 00:04:29,820
And then this bit here that's highlighted, you'll see we've defined a bunch of bettas.

73
00:04:30,300 --> 00:04:36,280
So these are like standard Java-style gettas on a Java object that return the ID, the author,

74
00:04:36,500 --> 00:04:39,360
the actual text of the message, and the date that the message was done.

75
00:04:39,360 --> 00:04:43,380
And the bit that integrates with the search engine is you'll see the annotation above each

76
00:04:43,380 --> 00:04:49,120
def line saying that the first one is a searchable ID and the rest of them are searchable properties.

77
00:04:50,260 --> 00:04:54,360
And that's really all we need to do to make a class searchable in the engine.

78
00:04:54,680 --> 00:05:01,280
To go on to the bit that actually does the work, here in UserActor, this is the piece of Scala

79
00:05:01,280 --> 00:05:04,200
code that's dealing with messages coming in and out to a particular user.

80
00:05:05,560 --> 00:05:10,140
So the piece of code above the highlighted part says, you know, whenever a message comes

81
00:05:10,140 --> 00:05:13,800
in into create message, we create a message object.

82
00:05:14,740 --> 00:05:20,240
And then the highlighted code here just says, okay, the first line just goes as a hook into

83
00:05:20,240 --> 00:05:22,460
compass and call that template.

84
00:05:23,180 --> 00:05:27,640
And then the second line, template.save of the message.

85
00:05:28,180 --> 00:05:29,040
That's all we need.

86
00:05:29,080 --> 00:05:33,220
So you can see here, we've got, you know, about five lines of XML set up.

87
00:05:33,220 --> 00:05:36,700
We've got about five lines of Scala to set up the whole search engine.

88
00:05:37,260 --> 00:05:41,320
Then we've got to, we define a getter for each property and annotate it.

89
00:05:41,980 --> 00:05:46,540
And then here we've got two lines to actually store any given message in the search engine.

90
00:05:47,500 --> 00:05:52,360
So, you know, full search engine integration in terms of the indexing side in, you know,

91
00:05:52,420 --> 00:05:53,560
about a dozen lines of code.

92
00:05:54,760 --> 00:05:55,620
That makes sense.

93
00:05:55,620 --> 00:05:57,820
Well, thanks for taking all this time to show this to us today.

94
00:05:59,000 --> 00:05:59,640
Yeah, no problem.

95
00:05:59,760 --> 00:06:00,220
It's been a pleasure.

96
00:06:00,840 --> 00:06:04,740
Well, we've got another exciting person who's been working on Esme talking with us.

97
00:06:04,860 --> 00:06:06,520
And would you like to introduce yourself real quickly?

98
00:06:07,080 --> 00:06:08,220
Hi, I'm David Pollack.

99
00:06:08,320 --> 00:06:10,560
I'm the lead developer for the Lyft web framework.

100
00:06:10,700 --> 00:06:15,060
You're sort of one of the more outsider-y person who's been working on Esme.

101
00:06:15,180 --> 00:06:16,800
How did you get involved in working on it?

102
00:06:17,000 --> 00:06:20,580
Darren came to the Lyft list and was starting to ask questions.

103
00:06:20,580 --> 00:06:27,400
And we created a separate conversation and somebody pointed me to his Esme post on SDN.

104
00:06:27,660 --> 00:06:28,480
I read it.

105
00:06:28,560 --> 00:06:31,500
I looked at his architecture and said, that's some pretty nifty stuff.

106
00:06:31,700 --> 00:06:35,280
And I pinged him and said, if there's anything I can do to help, just let me know.

107
00:06:35,440 --> 00:06:37,300
And he said, well, would you like to write some code?

108
00:06:37,340 --> 00:06:38,100
And I said, sure.

109
00:06:38,480 --> 00:06:39,880
And that's kind of how things worked.

110
00:06:40,120 --> 00:06:41,420
So which part did you get drawn into?

111
00:06:41,540 --> 00:06:43,400
Like, which parts are you working on?

112
00:06:44,460 --> 00:06:46,260
Together we're working on the server portion.

113
00:06:47,620 --> 00:06:56,340
So we're working on all of the pieces from the REST APIs back and also from the HTML front end back.

114
00:06:57,360 --> 00:07:03,360
We're doing it all in Lyft and Scala and also calling out to a bunch of different Java libraries,

115
00:07:04,020 --> 00:07:09,900
making use of the large base of software that's already available for the JVM.

116
00:07:09,900 --> 00:07:13,720
And all of this stuff is running on top of NetWeaver, right, if I remember correctly?

117
00:07:14,260 --> 00:07:16,080
All of it runs on top of NetWeaver.

118
00:07:16,880 --> 00:07:22,440
It just kind of works well in the overall SAP ecosystem and infrastructure.

119
00:07:22,620 --> 00:07:27,460
How does sort of working in the SDN community, like, compare with other communities you've worked in?

120
00:07:28,140 --> 00:07:32,260
It really was surprisingly open and interactive.

121
00:07:33,660 --> 00:07:43,740
Coming from the outside, I've always imagined SAP to be a bunch of, you know, button-down, you know, six-month, 12-month development cycle kind of guys

122
00:07:43,740 --> 00:07:49,420
and seeing a bunch of people putting up wiki posts and collaborating on Twitter and collaborating on Plurk

123
00:07:49,420 --> 00:07:59,200
and just coming together and having a bunch of process but kind of agile scrum kind of process.

124
00:07:59,740 --> 00:08:01,500
I mean, it's just, it's very interesting.

125
00:08:01,660 --> 00:08:05,860
It feels like, it feels a lot different than I expected it to feel,

126
00:08:05,920 --> 00:08:09,260
and it feels an awful lot like some of the open source projects I've been involved with.

127
00:08:09,260 --> 00:08:13,120
It's been an impressive little project to watch over the past few weeks.

128
00:08:13,320 --> 00:08:16,080
So it was nice of you to spend this time to talk with us.

129
00:08:16,240 --> 00:08:16,500
Thanks.

130
00:08:16,920 --> 00:08:17,660
Thank you, Michael.

131
00:08:17,660 --> 00:08:19,260
Thank you, Michael.

132
00:08:19,420 --> 00:08:49,400
Thank you.
