 Good afternoon, everyone. All you very prompt people, there's three or four minutes to go, but I think we might as well just start. So this is Harmony, Forums, and Communities with Drupal. Okay, who am I? I'm Ali, I look alive on most things, and I've been working with Drupal for about, I don't know, six this year now. Kind of a weird mix of roles and development front-end, kind of a bit of everything really. So this kind of project really kind of does it for me, I guess, because I get to play about with everything and have a good time with that. Enjoy all the easy stuff and then kind of run away from the hard stuff. And if you're really, really interested, you can find me on LinkedIn, but I wouldn't really bother with that. That was an interesting transition. That is the only one that is in there. I'm told that my slides are pretty boring, so that was for that friend. That's pretty much it. I can't like black and white, and it's simple and it works. So, Landscape of Forums. This talk, I'm basically going to go through why I considered even doing this, how it went about it, and the result. So, obviously the start is the current landscape, which is pretty much one of two things. You can either go with call forum, and if you really feel like it, you can sort of amp it up a bit with advanced forum, or you can go with third-party integration, which will be stuff like VBluton, PHPBB, and so on, and all the like. And of the choices, they're not really great ones. So, call forum is architecturally pretty simple and not too far away from how it started out in Drupal 4.6, I believe, where you've got a content type and you've got comments against that, and you get this kind of disjointed experience because of it, where if you wanted to theme a discussion, then it's going to be I theme the node, and I'll theme the comments separately. Theme comments separately. And really the main problem with it is the architecture, because it's always going to go back to that issue that it's just the node, and you've got comments on it. So, if you want to have a really sort of performant experience, then it doesn't kind of lend itself to that, and if you look at any design, like database design for forums, they don't do this. So really it's just kind of like, to me, a kick out door, this will do, and that's kind of how it's stayed. Third-party integrations, there are quite a few options. And when you look at them, they've pretty much, again, stayed the same for many years. Forums as a concept have changed a bit. They're still around and still very well used, and people do get a lot from them. But things have shifted around a bit in how people interact. You can see this through the fact that these projects are of some age. That said, though, they still exist. People do still use them, and it shows that people do want to use Drupal to have communities. But the downsides, they're complex in that you have to install a type of software and understand it. You've got to track it in terms of security updates, much as you would with Drupal to keep it secure. It requires more knowledge. It's not Drupal for one thing, so you just kind of fight against it a bit. On the Drupal side, you've got to make sure the Drupal project that integrates with this third-party piece of software is up to date, works how you expect it to. There's a lot of stuff, basically, and having done a few of them, I've lost some life out of it. Separate admin areas, so that's not a good thing either. It's not really as great as the experience, and you re-suffer because of it. More things. Varnish, you've ever tried to put varnish in front of the bulletin? It doesn't really go well. Again, we'll make you cry. Don't try and do it. It's just not funny or enjoyable. Just don't do it. Harmony. Harmony is meant to address these problems. Harmony is a Drupal-based form solution. Very much blown out of frustration. I started a couple of years ago. I started out with a prototype with ECK, and that kind of validated that I can plug these things together. It does make sense. That's the kind of feature list. So when you look at this, the aim is to create basically what you'd need as a developer. So from that point of view, you've got integrations with all the things you want. For example, with core forum, you can't change the location of slash forum easily. You'd have to hook menu alter to do that. Whereas because we use views for all our listings, you could just override that and then change the path. So everything that it would make sense to have available to you, you can do, you can use. So you've got views for listings, paths also for sensible thread paths. Because these are separate entities. You've got the thread entity and you've got the post entity. Yeah, all the kind of things that you'd expect. So my favorite probably being Travis CI. So we've integrated with that recently. So that will run our B-hat test when we commit to Drupal Organ GitHub. The idea with Harmony is that it's an ecosystem that provides everything you'd need. But at the very core of it, you have Harmony Core. And all you should need is that. And we're not going to give you anything extra on top of that because a lot of the problems that you can get, say with Drupal Commons, for example, will be that you spend a lot of time kind of stripping that back. And again, you're fighting something. So with Harmony, it's kind of built with an approach that do, I wouldn't say minimum, but do the sensible amount without kind of overstepping your mark. And then we've got other modules out there to provide extras such as moderation and other bits and bobs. So in terms of components, it's that kind of family of things that you'd expect. You've got a distribution moment, just one, we plan to have more, just to kind of prove the concept that you could have Stack Overflow with Drupal if you wanted to, and then some more community-focused things. You've also got modules. There are a lot of them. There's going to be a lot more. And then also themes to support that. So it aims to be kind of a full package or product. And the real vision for it is that even as like an open-source project that when you think of forums, you kind of stack it up against PHPBB or VBurtain or Discord. So any of these things, and it's a decent kind of collection or product in its own right, regardless of the fact that it's Drupal and just like the fact that it is Drupal is, you know, just like an extra thing that's an amazing bonus. So let's run through the modules very quickly. So we've got a various... quite a few different things which address different needs. We'll go through the interesting ones bit by bit. But as you can see, you know, there are modules which address the needs that you'd expect to have as a result of I want to build a community and I want to enable people to communicate in ways that make sense, whilst also administering it and then tackling spam and all those different requirements and chances that you're going to have. One thing that I do like to show is the .info file for Harmony. I don't know if you can see that or not. The point is that there's incredible amount of dependencies and it's kind of ties in with probably built elsewhere in that I'm going to let these other projects do things and I think that's kind of a sensible approach in that I'm not going to try and make listings. Listings can be views or inline-nc form works well for embedding the post form inside the thread form which is how it works. So that's one of the key approaches. Leverage all the other things out there which we can. Right now, let's have a look at the front-end demo. So this is a HTML mock-up of what I want Harmony to look like. So this will be like the distribution. So this is bootstrap 3. Responsive, all those good things. It was a break from doing like hard dev stuff. So one of the reasons why I really love this project is that I get to do all these different things in terms of I get to see some front-end stuff some dev stuff, some branding, design, badly. And the front-end was kind of sort of a short break from doing the sort of core development. So what this has done is kind of set out that high level of I'm going to make this product. I know exactly what I want to do with it what it should look like and how it should behave. And that's informed things like I know that when I want to build out views listings that I need to have a responsive table and whilst we do have these things kind of done in Drupal in some form or another there's a number of ways to do it. So we've got in Harmony Core for a separate views plugin style for Harmony Responsive Table which kind of executes this vision and much in the same way we'll see that the thread page the posts themselves they should be largely represented easily by Harmony Core by itself so when you install it it will roughly look like this or give you the means to kind of build this. And in terms of setting goals for a product very much kind of make something that looks really nice or decent and don't worry about too much the fact that it's Drupal and even if you can tell that it is Drupal then something's gone a bit wrong because you should be able to just sort of look at it and go again this is Harmony as opposed to oh this is Drupal because I can recognize the tab style or those kinds of things. Harmony Core let's have a look at Harmony Core can everyone see this okay? yep so this is yes cool right so as I said we provide a views listing at slash forum though this is something that you can override because it's a view it should more or less look like the front end mock up so if we have a look at the listing style itself then it's probably not too far away in that you've got a number of likes, views, avatar so on and it's also responsive so I won't try and do that right now because this theme is not responsive it works believe me so currently there's user one so you see the kitchen sink of all these tips but I can go and create a thread as you expect to have the regular kind of options that as a Drupal user you do expect to have so this is a thread entity with a post entity form embedded in it so in effect you're creating two things which gets a bit conceptually funny sometimes when you're trying to work out what saves first and so on but in line entity form does a good job of working that out what I would draw attention to is the fact that we do have these kind of forum based options which meshes the concept of you've got nodes they're published and threads also have that you would have that in other form software but we take on that sort of terminology just because it is Drupal and again it's what you'd expect from a Drupal module so let's create that and then we've got a thread and you've got all different kind of options this looks roughly like what we want it to so you've got thread operations if I reply it will show as a direct reply to this post as you can see in reply 2 we now have one reply so again looks like this and when you click on one reply it loads in that reply so you can see the direct replies to that post all this stuff is backed by nc references and views and core ajax type of stuff which has nice benefits in that if I like this thread here it will update it here so anywhere that we can rely on someone else doing something for us we do it and we get that benefit and then there are other nice things such as a number of projects have kind of sprung out of again I want to make this a really good product and I want to or just having that kind of approach I mean it's open source software it's separate modules but there have been bonafide projects which have kind of sprung out of trying to build this thing and we'll touch on this a bit more later but you've got things like app.js where you can inline app mention people in a post and then it will be a linked kind of tokenized thing which will appear inside the content which you can do whatever you want so in this case it's just a link to that user's profile let's have a quick look at the entities so harmony when you install it you get this little harmony menu which kind of collects everything together so you can view all the threads you've also got amount of reporting stuff in here but posts you can modify the threads again so this is all kind of stuff that you expect to have so entity reference fields quite a lot of them really you've got bundles as well you've got types of threads you can have a standard type pole thread, announcement thread Q&A, that kind of stuff and you can really just sort of do what you want with it posts are slightly more basic you've just got one post like there's no bundles but again you've got entity references you've got all the kind of things that you can achieve what you want to with this and you've got a really sort of strong basis to build what you want from it there is a harmony distro which again it's kind of a monster really just because of that dependency list so I'm not too sure how long it's going to take and it works and great if not then and this is kind of gluing everything together so this is very much a work in progress and it's mostly like different harmony modules poked together with a few other choice ones for security and again it just gives you sort of like an easy way to jump in and understand what this thing is so I encourage anyone to give this a go if they feel like it or they want to know more about this or just kind of pull it apart and see how it could work out for building community site for yourself or a client or you know someone it's going to take forever I give up so let's talk a bit about the separate different modules that exist the first one that really was a requirement is that sort of I've got a forum, I've got different cascades which people can post in, I once had a a moderator only one so from that came harmony access and harmony forum access again looking at things like core you see things such as the node access layer which is you kind of look at it and it's like okay and then you start to get into it and someone's like wow these people are really smart I'm just going to copy what they did so I pretty much just copy what they did with a few tweaks one of the pain points about creating your own entities is that you have to pretty much create your own entity and there are tools out there to help you with it but you kind of they're much on your own you've got a lot work to do some things are nice views for example which does provide an amount of integration but when it comes to things like I want to create link in my view listing that will not be provided for you you have to do that kind of stuff yourself so with all of this within as many places there's kind of this kitchen sink approach to integrating with things so with the value you've got integration to develop but you've also got to develop generate integration where you can just kind of spawn a lot of content to play about with so let's have an actual look at what it looks like again all this has been done with kind of intelligent approach to what would I want as a developer or what would I want as a site builder and I install this thing I just want it to work I want it to have sensible defaults with this as a developer I'd like to have the ability to enable or disable access control against multiple different categories and then only have that in place if I want it for that category and if I'm going to have all these permissions and they are standard permissions then let's have them with taxonomy term machine names as opposed to taxonomy term IDs because when you move between environments that's not going to work out for you so a lot of it is just try and make it work, try and make it as painless as possible harmony moderation so this was a good one through real world requirements where we've done quite a few things which allow people to or active members of the community to really be a part of preventing spam or flagging up inappropriate content in that there are features like if I don't know 5, 10 people however many people report one post you can automatically unpublish it and put it into the moderation queue and flood control against someone's going around reporting tons and tons of posts you can limit that kind of stuff so it's important in place learning lessons from other places in Drupal core, Drupal community and so on yep, so as you can see reports post then Ctools modal appears and you can provide this is using flag as well provide the reason for why you're reporting it go through write things and then you've got an admin listing which is a place to moderate that kind of stuff glued together quite nicely and again it goes back to that ecosystem and providing something which plugs in together in all the right places profanity profanity can be a problem in communities there are a few other modules which can do this kind of thing for you but they weren't really that modern so stuff like I think it's bad words and there's another one which escapes my mind but there are missing things such as features integration so I want to have multiple word lists and be able to export them and move my configuration around from different environments that was one requirement and it just sort of made sense to create a separate project and that means you can also go out and try and tackle these different problems such as I've got a views listing I want to have a profanity filtered tightly in that listing how do I do that with views and it's like good lord I have to provide a separate field which means I've now got to go through NC info also and then it's like okay now I need to provide tokens because I don't want that in my URLs so really gone to the nth degree on this one and again that's the approach that's kind of happened with this retake it as far as possible without killing yourself at JS so we saw that in action a moment ago this implements a library JavaScript library and we saw that you can at mention people but what this really is is the ability to have a trigger character trigger phrase which then references starts up a search against a list of entities and provides that back as like an also complete within a text area and when you go to output that in filter text you can theme it so make it link to use a profile make it link to a taxonomy term so for example if you wanted to you could have a hash or something as a trigger for I want to search taxonomy terms and then also complete based off of that and then you can now tag content automatically just by sort of doing hashtag whatever so there's quite a lot of potential for this one and the other thing that's quite good about it is also got this awareness of what is an existing mention and what's a new mention so if I had mentioned someone then someone goes through and edits that post which can potentially happen if I leave it alone then no new notifications will be sent as a result of it but if I choose to add in another mention then you know that there's another mention in there because that kind of stuff does happen so again as a degree really sort of think about everything as much as possible and seeing the potential for what could happen after this project because again this is a standalone project and if you want to have notifications as a result of a mention a taxonomy tag or that kind of stuff then you've got the ability to do that okay event data store so with event data store the initial requirement was that we need to make charts and having a look at what's available in Drupal there's quite a lot of stuff around charting but not I want to have a data storage back end so again it's one kind of came out requirements and it's got a lot larger kind of potential for what you can do with it in that with this module you can create your own watchdog so just like a store of events that happened and then create listings of it because we've integrated with views filtered against the date so you've got pop-up calendar again integrated with views and you can create multiple different storage items for these different events so it means that you can track things such as I want to track number of user logins, I want to track registrations storage created, post created edited, deleted, all those kind of things and then produce a chart image bigger but then produce a chart which has all the status together and do it easily because the other issue with this is that I want to create a chart easily how do I do that, I need to start using aggregation this module will aggregate your data for you so you can easily go in and say I want only the yearly monthly, weekly, daily hourly data so this is a really good module in that it makes things quite simple and easy in terms of I want to produce a chart I want to create a listing of stuff that's happened and it kind of hits on event sourcing which is a concept in that I'm going to log and track and have a storage for every different kind of event that happens and as a result of this it means that I can rebuild the state of an application so I mean have a read of this blog post here because it's really quite interesting stuff but with this module it's the kind of thing you can do so I want to rebuild the state of the application in terms of posts created so I can sort of if I wanted to in a live sense see all the posts that occur and have links through the database to the actual entities that exist and kind of recreate the sort of play by play with the different events happen that's a default avatar okay another module which has come out of real world requirements and this was surprisingly hard purely because of image magic support and it's not really you can't rely on that being there so we see this kind of happening quite a lot in that you've got a default avatar now so in I know Google inbox on try to think of other examples now quite remember discourse would be another one github I believe does have something in any case it's quite simple give me a default avatar based off the user's username with this you would you can't bring in the concept of I have a default avatar which means we had to do stuff like also the user scheme which was kind of a surprise but it says don't use the data property so we didn't use it and then provide an amount of ability to have this kind of stuff live in the CDN so we generate real images which can be derived you can provide separate fonts so this is hell best I believe and change the color set so it's all quite random and you can choose different colors but again it's kind of like another solid approach to providing something which is kind of expected now in terms of community because you don't want to have just like a simple default avatar it's just a bit more interesting and Google recently, Google being the other example of default avatars if you want to see you can have separate images so they're now doing animals so if you look on google docs you'll see an anaconda you know so on going through the alphabet you can just have images for animals whatever you like really right so what starts coming up with Harmony a lot there's a lot of effort that's going to go into this project because over the past year or so it's been kind of like gradual progression whereas we're looking to kind of kick things into overdrive in terms of providing all the different things that you want for a strong community part of that is giving people the ability to move away from things like core forum, advanced forum phpbb all those places where we want people to come to us and sort of leverage Drupal as a platform one of the things that happened recently as I was reviewing things for this talk is that I remember that Acre did a community site for twitter so dev.twitter or might be now that did use core forum which is kind of surprising because when you look at it it's like that's the best that we've got to offer and again that's really why I've done this project and looking at recently twitter now use discourse instead of Drupal so they've been the core forum thing for discourse which is not great again so this is about giving people more choice and enabling people to use Drupal to create communities one of the main things that I see coming up as a requirement is that we don't have just say good enough messaging with the message module or private message or whichever thing you choose to use it's that I want to have Slack or I don't know Facebook grade messaging in my community so there's a lot of interesting stuff that we see out on the horizon and looking to do but right now I kind of realize that communities is very niche in a way with Drupal and that's a problem and probably the twitter example is the best one that I can give and that people aren't seeing it as a viable platform which is something we're looking to change and this leads me into who's using it so cancer research in the UK is a massive charity that do a lot of good work and they want to rebuild their community going away from Jive into Drupal because that's their platform of choice Harmony was seen as pretty much the only game in town I suppose if they didn't want to use Core 4 or if they didn't want to do a third party integration which really don't do that it's horrible and they're committed to open source software so I worked with them to create the new community which launched in November migrated a lot of content and it's been quite a good experience it's given this project kind of a legitimacy that it really needed to progress and in a really good way but also a very painful way for myself the current resources that it needed to become a lot more serious in that there's a dedicated tester on the project making me cry and finding so many bugs but all this good stuff went back into the projects on Drupal.org so they've really really given a lot to the open source community for from that project and the amount of those modules which you saw previously that's from that work and the real world requirements cannot be sort of underestimated in that it's kind of stuff that none of us would ever think of depending on what kind of role you fulfill if you're a site builder, if you're a developer, it's like wow I did not have thought that people would want to do that but there's a lot of things and harmony as an ecosystem is much much better for it so I'm massively grateful to Cancer Research for that and it's aside from that, I would say have a look at the site if you want to but never actually read anything on there because it can be incredibly sad so don't read it but I appreciate it and be happy that they've believed in this open source vision which I'm very privileged to be a part of yeah who else? Right well as I was saying Drupal is a platform it's got so many incredible kind of solutions and modules available such as commerce for I almost create a shop then it's its own sort of like stand-alone thing which makes a lot of sense you can solve a lot of problems with Drupal but communities isn't really one of them that you can do easily or do well so that's exactly why I do these kind of things I do talks cons, camps, whatever that's kind of stuff I want to be doing to raise awareness that you can create communities with Drupal they can be really good and with that not that many people are using it which makes me sad because I've poured a lot of effort into this and a lot of time it is each time I do these talks I meet more people who say this is what I need I'm going to go build it but when you take on a community as a part of a build it's never a light thing it's not just I'm going to throw in the community it's far more of a consideration and it can be its own site as well as in like cancer chat that was its own thing that's its whole other project and with that I expect to see a lot more spring up I know there are launches which are coming up within the next say week on the horizon I expect to see more and more of them and there are quite a few harmony sites out there cancer chat is the one that I really want to talk about and sort of like point to but the reason for doing this is improving landscape and improving options and it's one of the things about doing open source software that you can share this kind of stuff and make things better so who else will see I hope to fill out a few more slides by the next one but yeah, for now I'd say if you are aware of requirements for a client or someone asks about I want to make community studies today about harmony, I'd be very grateful I encourage that if I can there's a d.o. group which isn't so well traveled that's kind of the state of Jupiter group sometimes but if you want to get involved then by all means come say hello, come say I think you suck you wasted all your time and then you might cry but there could be an opportunity in that I could make it better who knows and if you want to try the distribution out then simply test me is a great way to do that kind of think I wonder if that ever got there yeah it did, let's do that now aside from that I'm pretty much done, if anyone does want to get in touch then yeah you can email me, tweet do what you want if you want to keep up to date on the project itself there's a recently relaunched Get Harmony.io which has a few things on there one of which being a user to sign up so you can do that and there's 150 people somehow on that list I've sent probably two emails over the past year that's pretty bad I'm going to click through this and any questions if there are any if not then yeah you said a few things there so I'll remember all of them sure so notifications is probably the first one I talk about this kind of vision for everything that Harmony is going to be and do and all that good stuff and communication is probably the key point in that and there is a module planned called Comstack which is aiming to be that kind of solution in providing modern intelligent means to create notifications, product messaging, live chat all these different things when I talk about Slack grade, Facebook grade even in creating like an email client that's what I'd hope that you'd be able to do with this module and that's a very, very quick kind of statement on something incredibly complex so it's on the horizon I hope to get smart people like me involved in building this thing it's on the list definitely and you're right in that when you think about forums, discussion forums now they have kind of changed and they've sort of I don't know, 10 years ago they were very different and it's kind of a place that you would sort of go to to discuss things and you'd be very involved but now things are a bit more detached and when you look at new social media it's kind of this more abstract way to interact with people and guessing people back into that community is absolutely vital to ensuring that it stays active and people are engaged and they are kept up to date with what's happening so when you part of this is notifications so this vision of what I want to build has notifications and when you think about when you consider what's happening on, say, Twitter where you at mention people that's exactly where someone to at mention you on Harmony with at JS and be aware that it's a new mention in which case sends a notification about that so it's all kind of connected together for me and I've got a very clear vision of what I want to build that's top of the list basically for I mean that's its own project entirely that's not so Harmony but something Harmony would use the cover of the questions statement yeah, yeah, absolutely and that is one of the reasons and that's how things can die and slow down a bit both of those things just use rules what that guy said since there's just entities you can make a rule that says when an entity is created so you can already do that it's a strength in building a forum system in Drupal yeah Harmony is integrated with rules in many ways you can do exactly what you said and that's the point in integrating kitchen sink style with all the things and yeah, it's been a request I have comments on my blog but how about instead of using comment module I want to use Harmony you could do that, you can glue that stuff together there's probably going to be a dedicated module to provide that in some way and it could either be default rules or something a bit more involved because there is a lot of unseen things in doing something like that but in a very sort of simple way you could use rules to do that absolutely and then you get all the benefits of inline at replying and again one of the strengths is that you can sort of leverage all this community content that will exist because it's not only now about comments it's about how many times I've been mentioned or in what content I've been mentioned and with having entity reference used like a million times in the Harmony thread or Harmony post entities you can do that and you can sort of drag everything out the hope is that you have everything you need to achieve what you want and if that doesn't exist then you can request things. Any other questions? Nope, okay, well I think we're kind of about right on time yeah, thank you very much have a good rest of the conference.