 get both doors closed and then you can start. I'm gonna get the doors closed and then you can start. Yeah I can start. Okay. Thank you. Right. Good afternoon everyone. Actually I bring you greetings from Sonny Kent. It was snowing yesterday and I noticed it was Sonny today because I live in Kent in the UK, South East England. Sorry? Yes, he has. I brought you son. Right. Just before I get started, could you bear with me for a second? I actually wanted to dedicate this presentation to a classmate of mine who passed away at the beginning of the week. So his name is Afam. So may he so rest in peace. Thank you. So thank you for coming out to listen to this presentation and this talk. I hope you can all hear me. Excellent. So this presentation is basically about the work I've been doing at Ignite Real Time on a new software project called Badei. Now Badei is a Yoruba name and when you pronounce P in the Yoruba language, you have to, it has to sound explosively. So for instance a Yoruba person will go, the P has to be explosive. So it actually means meet or the verb of meeting and it's basically the name of a project that we've started at Ignite Real Time. So what do we do at Ignite Real Time? XMPP. So let me try something right now. A quick show of hands. How many people know about Ignite Real Time? Wonderful. How many people use OpenFire? How many people use SMAC, the client API? I was expecting a lot more hands with SMAC. That's very popular with Android developers. And how many people use Spark, the desktop client? Wow. Okay. I'm about to tell you about a new software project that's come out of Ignite and it's called Badei as I've said. Basically it's a unified communications client. Why is it unified? Communications? It's basically it combines not just XMPP, it combines SIP as well as XMPP and even adds in throws in email there but I'll tell you more in a minute. So one of the things about what we're doing at Ignite Real Time is about delivering real time communication solutions. And I said just a few minutes ago, our main projects are OpenFire which is an XMPP server, SMAC, the client XMPP client API and then Spark, the XMPP desktop client which was built with SMAC. Now one of the things that attracted me to XMPP about 15 years ago when I joined Ignite Real Time, at that point in time I was working with BT as a system integrator and we needed a real-time engine to route our real-time messages in the telephone system and we ended up with we chose XMPP and actually by the time I left BT we had actually integrated OpenFire into the main products in BT and as far as I can tell I think it's still using XMPP to route messages. Now this is a system that BT uses in the finance community and many of the major banks today are still using this system. So why am I excited about XMPP? It's the X in the XMPP. So another quick show of hands. Let me know about the program called X Factor on TV. Really? Wow, it's very popular in the UK. So I think XMPP has got the X Factor. Do you know why? Because it's got that X and that X is not just about being extensible. I think it's exotic. I think it's explosive. I think it's experimental. I think it's exciting, exhilarating. You want me to say some more X's? And it's that X path that really attracted me because it meant we could do a lot more than just the basic messaging and presence. And actually to prove that point is actually why I got involved in developing this, got involved in the development of this new project called Paddy. Now what does it do? Now before I can explain to you what it does, what I do in my daytime job is I'm a real-time collaboration consultant. I talk with small and medium businesses and basically I advise them on their real communication needs in terms of their solutions and things they need to do. When I used to be in BT, my job title was a system integrator. You probably have heard that fancy term. It really means a jack-of-all-trade master of nothing specific. Basically I did everything. But it was really mostly integration. So what drives me is to be able to not write code from scratch, but to take something someone else has done, especially software components, bring them together and turn them into a symphony. Sometimes I get lucky. I work with smart software that can actually become self-aware and start improvising. And guess what I get when I join them together? A jazz band. So one of the things I find exciting being at Ignite is that there's such a load of stuff and a wealth of assets and things that you can put together to deliver some really good solutions. So as a consultant when I talk to customers and I ask them what is it that you want to be able to achieve with your real-time communications? And this is the kind of picture that they painted to me. So they have employees and staff walking in teams. And those people walking in teams, they want them to be able to walk and deliver, sorry, support their external customers and clients. So the first thing they want to do is to be able to push out real-time messages to these customers and clients. And so therefore they want to do message broadcasting. They want to be able to send out blogs and stuff like that. And also they want to create a community around their customers and clients based around the products and services they offer. And they also want to have people within that user community become ambassadors for their products and their services. So they want these people to sell their products on their behalf because these people get very passionate about things. And if you've ever been in a community where you find someone so passionate about a new bed and yet he doesn't work for that company, he just likes the bed and is willing to tell everybody. Now customers want to take advantage of what those people can do to their products and services. So they want to create communities where those people can be, they can keep the communities thriving for them. Now at the same time they want their customers and clients to be able to come in the other opposite direction as in communicate back to them through their websites and actually get hold of the right person at the right time to solve the particular problem that that particular customer or client may have. And as you probably noticed quite a number of websites are now having that little bubble on the bottom right hand side in which you click on the button and you can get hold of someone. Except that for most sites that I have been to it's nobody's available, leave a message, we'll get back to you. Doesn't that remind you of voicemail Oliver again? So really what they want is real time as in you go to something like that and you can get hold of the person that you really need to get hold of. Now to be able to do that the teams within the organizations have to be able to work together better. So in other words they can, they have tools that allow them to work in groups, group chat, be able to drop out, break out of those persistent conversations into meetings and when they do that most of the companies are supported by suppliers and external partners and they want those partners and external suppliers to be on demand, to be on standby, because they're trusted. They don't want them to come in through the external network but they want them to come through a trusted network, be on standby and they can drop them straight away into conversations. So that's the landscape of the requirements that I picked up over the few years that I've been a consultant doing this. And to solve that problem I put together a solution based on what we have at Ignite real-time. You all know OpenFire, well from a show of hands not everyone knows OpenFire but basically it's an XMPP server. I really don't have time to go through the basic details of what's happening in here other than to tell you that one of the beauties of what we have at Ignite with OpenFire is that it's a plug-in architecture. You've got just like XMPP being extendable, we have the basic server doing the core XMPP stuff and then you can write a plug-in to extend it. Now this is the thing about plugins that I found working with OpenFire. So I generally end up with plugins in three types. So you have plugins that you write that extend the protocol itself. Now in XMPP when you extend the protocol we call it an EXEP and you can extend the protocol like that. And now a good example of that is the fact that we were able to implement a very early version of WebSockets in OpenFire and the reason because of that is that OpenFire has a Jetty web server built in and Jetty actually provided an experimental version of WebSockets quite a while back even before it became a standard. So it was so easy to write a plug-in that turned WebSockets into an additional channel for OpenFire. Then later on when it became a standard someone in the community then turned that plug-in into the standard and then after that plug-in settled down and became mature whose lead developer for OpenFire then brought it into the core product. Right so that brings me to the front end. So in doing the front end I actually it's an interesting story that I went through in order to do the front end. I told you that we have SMAC the client library and we have SPAC the desktop client. So when I started out trying to build Pade the client I know I had to do through things. One I wanted the user experience to be like what was what people were used to with SPAC in order to meet the requirements I had shown you earlier on. And then two I needed the front end to be very modern it had to be HTML. So my first reaction was okay we'll build the client reusing all the stuff from SMAC all the stuff from SPAC but we'll give it an HTML front end sorry. And then I came across an interesting project called JX Browser but unfortunately I couldn't go far and do anything with that. I'll come to that in a minute. So I couldn't do anything much with that. So the next thing I thought was okay I'll use there was a project called CEF and that's Chrome Embedded Framework. As anyone use that where you take Chrome and embed oh there you go you take Chrome and you embed it into your own apps. So it comes it's basically C code but there's also a Java version of it called Java CEF. The problem with that is that I would have to build my my distributables and I would have to build it for Linux I have to build it for PCs for Windows and I have to build it for Mac. So again not a good solution and then that brought me to Electron. How many people build here build their applications with Electron? The problem of distributed of the delivery sorry the runtime libraries the Electron runtime was solved with Electron because you can just pick them up and put it into your build but I still had the problem that I would have to write all the business logic all over again. I won't be able to take advantage of the code I wanted to take to reuse from SMAC and SPAC. In the end I ended up with using a Chrome extension. Now how many people have here developed with Chrome extensions or browser extensions because it's now a standard when I started out it was just it was just called Chrome extensions because it was only Google doing it but now it's now become a standard. I mean people have well I bet you don't know that they behave like desktop applications okay they actually treat Chrome like a runtime engine so you can write your Chrome extension it starts up automatically like a desktop application where you start your your operating system. Two it runs in a very privileged mode it's not like a regular web page it has super super privileges and it's more secure so you don't have the problem of cross domain cross domain contamination that you have with webpages. You've got I do music for example so you have access to to to MIDI and stuff like that and so I develop by using that. I'm sure you know what you you want to see what it looks like don't you yeah I haven't got time to show you a demo but and I haven't got time to go through all the all the features so that's why I put that up there but I would try and go quickly go through four features identified. So this is what it looks like. JC was very gracious to mention that he uses converse so as far as the messaging side of things are I've integrated converse in there and it's not just just dropping it in converse and GC meet and the SIP client are all homed in on the same user so back in OpenFire there was an OpenFire plugin that does the mapping between the SIP identity and the XMPV identity so you it's the same user identity that you use in converse that you also use in GC meet and then that you also use in the SIP client and then you have so that's GC meet down there and then you have a SIP phone so in a corporate environment that means you can take all your phone calls using that as your frontend that's why it's a unified client it also means you can do all your messaging chat group chat and then broadcast so how people use WhatsApp here so in WhatsApp you use your normal chat yes you do group chat how you use the broadcast part of it now it's very popular in business in the finance community basically you send out one message to a group but what comes back are individual replies they use it a lot in business and then the nice thing I'm very happy about and that's this is the glue part that's the part that I really do is that I put a configuration app in there so which means all the parameters in GC meet that you have to normally code in the config all the parameters in converse js that you have to code into your config are now visible just like in OpenFire you've got a web interface in front of all those parameters and you can change them right there on the client so what does it what does the pyd version of converse look like it's the same thing isn't it basically it looks like that but this is the exciting part on the surface it looks like that but because of what jc brand did with converse given it the plugin architecture means we can extend it and one of the things I've done in pyd is to write loads of plugins that extend it so you've got plugins that extend the slash commands so you've got slash commands you can start GC meet with a slash command you can search for people you can use the full text search open fire has a lucent full text search engine you can search for words keywords like that and pops it up okay so let me go through my full use cases for you um I wanted to show you the first one is auto registration so I'm I'm involved at the moment in trying to create a community for the Yoruba people so I've created a version of pyd now the nice thing about pyd is that it's generic and it's brandable you can just take it take it brand it change the logos change everything so easily and create your own version of it you can take all the config parameters take out what you need add what you need so that's a customized version for this community it doesn't have any connection details that's because the server name the domain name and all that is baked into the app you just go to the web store install it and all you do is enter your your name but the one thing I wanted it to have is auto registration now normal xmpp registration suffers a lot from spamming and that's because we can't verify the identity of the person at the other end and the solution to that is to use email now because Friday has an email built in in other words your your identity