 Okay, it's 3.45, which means the witching hour is upon us. So welcome, those of you that were able to make it to the door. I know there's like a million people here. I'm going to be abusing this quite frequently because it's recorded and can't see how many people are actually in the room. So I did a trailer of this talk. Did anyone see the trailer ahead of time? A couple of hands went up. I apologize in advance. The jokes are exactly the same. And it's actually a two minute long talk the entire time. So first of all, before I get started, I just want to give a plug for Drupal Camp PA. It's in Pittsburgh. It's August 2nd and the third. It's a bridging of higher education and industry as our theme this year. So it's the first year we're getting it off the ground. It's a collaboration of a bunch of companies and people that live in Pittsburgh area and universities in Pittsburgh area and Penn State Drupal users group. So it should be pretty awesome. It's hosted at Pitt University. So I highly recommend it. So who am I? I'm at PTO Pro as my new name is apparently. I've been a Drupal developer for seven years now. I have way too many commits to D.O. A lot of them in the middle of the night because I have young kids and I can't sleep sometimes. And some of the more popular modules I have are profiler builder, outline designer, tiny nav. These are meaningless words unless you know what they are, I guess. And it's my job to constantly automate my job out of existence as I view it. So I get bored very easily and I want other people to get bored with what they're doing now so they can automate that away. So what's actually in a title? Let's look at the case study track requirements. So these are the three criteria by which something would be selected to be up here today. The words that immediately stood out to me were new grounds, redefining what's possible, common problems and failure. So let's start with a failure title. I like to leave with my mistakes. Elm's learning network. It's more than just reverse engineered open atrium with a bad theme because that's basically what Elm's Drupal 6 was. If we go through roadmap, I consider Drupal 6 Elms a complete failure. A learning practice but a failure largely. It was one system much like open atrium. You have lots of organic groups, one big system. What could ever go wrong with one big system? It's like every major LMS that's out there already. It's the same structure. So kind of pinging through our history a little bit. We made the outline designer in 2008. I tried to present it at DrupalCon Boston and they said, it's proprietary. What are you doing here? And I said, oops, I didn't know that. So we went through the process of getting things GPL licensed. So we're allowed to contribute everything we do from that point forward. We won an award in 2010 for something called the Open Studio in 2011 for something called ELI Media. Open Studio is for students collaborating and submitting images to each other and talking via chat and stuff like that. ELI Media is an asset management system in Drupal that we embed our videos and images and courses. Then there was Elm's Drupal 6, which is kind of a flat line towards a I learned a lot, but I wouldn't recommend it at this point because it is Drupal 6 and while we're way beyond Drupal 6 now. And then there's Epic Breakthrough is the arrow burst out there. I had the graphic designer spend a lot of time on Epic Breakthrough and all that gets an arrow. So let's go with a redefining what's possible title, but I am often told I'm way too preachy. So this is the preachy title this summer coming to a server near you. We're not selling a product. We're building a platform for a hashtag edtechrevolutionatcrainin. So that one was, yeah, yeah, it's like way too preachy, but that's usually what I'm known for is just like ridiculousness at this point. So Kevin Rainin gave me that title. He's actually the only reason I'm here is because at the deadline he was like, oh, you should totally submit a session. It's like, no, I don't never get accepted. So the next one is Newgrounds, which made me think of this and I really wanted to waste our graphic designer's time some more. And then I landed on Common Problems. And the common problem I viewed everyone having was vendors. So basically it's still an extremely preachy title. So the agenda for today is how to get involved with the project, what the project is. I'm sure many of you are here if you've seen me, even if you've heard anything about it, you're probably still like, what the hell is he talking about? ELMS versus ELMS-LN because they are two different things. A philosophy of design discussion because a lot of this is a lot more the way in which you structure and build and deploy a system as opposed to necessarily what that system is. Ten years from now, Penn State will most likely be here. Hope so. Your institutions will all be here. I don't know what Drupal will be like ten years from now. But yet we're on a trajectory currently where we're putting things in Drupal. So we better have a pretty good philosophy of design and methodology planning. A platform tour and question and answer. So skipping ahead, you have devices. There's ELMS-LN.org, which I'm announcing today. I finally have started to consolidate some of these thoughts and places. It's all things about the project. So there's api.elms-ln.org as well, which is a full-blown API site documenting all of the distributions and all the modules in them. And it's in Bootstrap, so it looks nicer than Drupal.org's API in Garland. And then there's the GitHub pages for these various things, but we'll get to them later on. So DrupalCon sprints. I'm going to be around all Thursday and Friday, so please tweet me. Come up afterwards if you want to talk more, if you want hands-on demos, if you want to help getting vagrant setup, you just have a question like, what are you thinking? This is ridiculous. Anything like that, please let me know. We'll be working to build out additional flexibility in the system, or at least ping ideas off people. So often in higher education we're all in these silos where it's one or two people doing more than one or two people should be tasked with doing. So it's always good to talk to other people and balance these ideas around. So who's currently involved? It's primarily Penn State, but recently I was able to announce that we were awarded a grant, or University of Madison was awarded a grant rather, to Pilot Elms Learning Network for the law school. So they've been using it at the group called the Center for Patient Partnerships that I've been working with them to get it implemented there. They've got five courses that are active, and we're looking, it's actually July 1. We're going to start a kickoff meeting between our group and their group to say, like, okay, what are we actually talking about here? And getting things going there. So it was a big deal for me. Where can I get Elms Learning Network? I had these links up before, but elmsln.org is the most likely place. 99.5% of the system is GPL-based open source and out there. The other 0.5% would be like, you know, your way of connecting to Penn State authentication systems and things like that that really aren't relevant anyway. So a lot of that's released as examples, though, to say, like, this is the way Penn State implements this. I've tried very hard to make this a system that Penn State happens to have ingested and be implementing instead of a system just built for Penn State, because then what's the reason? I can't really share that out as easily. So what is elms? Elms is more than just a distribution. Elms is actually kind of more of an initiative. It's saying that anything produced for elms, you know, e-learning courses at the College of Arts and Architecture, where it's hosted, can be released back publicly. And that's a pretty darn generic statement. Like six years ago now, or seven years ago, when this was made. So this is spiraled way out of control from one site and one module and one website at one time into lots of modules, themes, distributions, a style guide, and multiple installation profiles. So when I say modules, I say between 150 and 200 modules at this point if we're actually counting a dot module as a module. Lots of features that are out there. These are just a couple of them. Themes we've got much less of, although at underscore mic underscore Collins is in the front row and he makes them very well. So harass him and he'll make more for it. I'll be showing something that's kind of prototyped as well. Style guide, we had a full style guide produced that is completely open source. It is for the Elms project, but it's actually for describing how a college can talk about courses and programs and faculty members in a way that's very visually appealing and it's not specific to Elms. That was very important in what we were doing. So you can take these raw assets and use them for whatever you want, quite frankly. They obviously have been implemented and make sense in our context, but I highly recommend it. Jay Perry Works did the work for us and then he actually went the extra mile and open sourced everything, made sure that everything was legally releaseable. We also have distributions, which I'll talk about. So I show, you know, I have some screenshots here. These were basically in case the internet is no longer available and I wanted to go to a real thing, but just for an idea of what some of our courses look like, they run in a system called MOOC. This is actually a course at the Center for Patient Partnerships. They do a lot more with it, but I'm not allowed to show that. Elms media, which is for asset management and embedding of items. So here we had this big grid. We've had it since 2010. It's still Drupal 6, but it uses a lot of the same concepts. It uses a short code snippet embed system, iframes for responsive video, things like that. So what is Elms learning network then? So a little bit of context for all the EDUs out there. I'm sure many of you know this already, but things must be sustainable by very small teams. Also personal identifiable information or P2, PII, leads to a lot of people self-hosting, especially around learning management analytic data specifically. So that's something to keep in mind when working with vendors. There's small windows for actual deployment of innovation, because if you think of the semesters broken up into four times a year, these are paying customers slash students, hundreds of them coming into a space expecting it to work. You're not going to make drastic changes after that initial window. You're going to breathe again because it's a small team of people, and you just got this working for a lot of people coming in. And we live in the glorious land of the do-it-all LMS. So let's briefly look at the LMS of today or the 90s, because it's the exact same thing that it's been since then. It is one massive point of success, lots of success, and failure for that matter. It's because it's an overcrowded feature set, really would you build a website that did all, if you think of what an LMS does, it's got discussion boards, it's got email routing, it's got rosters, it's got grades, it's got rubrics, it's got ways people can collaborate. It's usually got chat engines, it's got content, it's got a way to do a syllabus, and that's just the ones I could think of immediately. It's got all kinds of group management and all kinds of other stuff like that. That's a lot for anyone's system to do. No one's going to like one product that does that, much like you don't build every Drupal site the same way. So it's time for a preachy break, unfortunately, because this makes my eyes bleed. I wake up every day and I just look at this system that we have to use. We've used it since I started there. I've been there for like 12 years and it's the same system. It looks the same way. Many of you are probably familiar with this, but it's a dinosaur. We don't build things this way anymore. You don't build one behemoth system and then expect people to be happy with it. They usually roar like a dinosaur, is that obvious? Obviously it is and this causes people that are instructional technologists to drink and dinosaurs to start to roar because of how much you're drinking. So what do faculty and students do? They want to be innovative. They want to use tools that are outside of the one big bucket, so they go to Google or anywhere else for that matter. And there are issues with it. I mean it's great to be innovative. It's great to want to do new things with your course content or learning resources, but there are PII concerns affiliated with this, which is why people like me usually detract from doing that outright without contracts and things. User experience concerns associated with multiple logins. You might be on a Microsoft product for one part of a course. You might be on a Google product for another part of a course. Your actual university login, those types of things. Data retention security policies. This is getting a lot more policy centric, but are they maintaining this data? What are they doing with the data? And just general support for unknown services. If you don't know that an instructor is using something and you start getting support tickets coming in, it's like, what are you talking about? So it can be very overwhelming if that service were to go down. This is less of a problem because usually people are going to you, like Google and things, but it can still be an issue. And the big one that has bold is accessibility. So if you are developing a course and you are telling people they have to go to site ABCDEFG to get their materials to take that course, you have to ensure the accessibility of all those systems. And if you notice a problem on one of them, if it's a big vendor, you're probably putting in a support ticket. But that might not be enough to protect you legally. So how is Elm's LN different? Elm's LN is a suite of tools approach to learning management system design. I don't like calling it an LMS, but if you want to, and that makes the most sense to you, that's fine. It's getting from this concept of one big system to a lot of smaller systems that are all coupled together with web services. To quote someone, it's not about the next system to implement, it's a mindset that you will be deploying systems so long as you exist as an institution. And that was by me, just now, partly in a cool voice. So we're going to do this via Drupal. So we've got the Elm's Learning Network suite of tools, if you will, which are all these cool logos. And so the scope of these systems, we tie down so that each of them, and these relate to distributions in Drupal, but that each of them, their scope, doesn't overlap in any way. So we've got CIS, which is your logistics and more of your marketing. How do we talk about ourselves as a college and our course catalog, our programs, things like that, as well as keep the lights on? How do we get students routed through to take these courses? MOOC, I just took the namespace. I don't like MOOCs, I don't like that name, but a lot of people know what the namespace is. It's for content outlining and more of the flow of a course that you go, if you're familiar with Lesson 1, Lesson 2, Lesson 3, and you go through the instruction, that's where that happens. CLE is Elm's Collaborative Learning Environment. That's for student submissions, rubric-based feedback. We're getting into some HTML5 audio recording soon, which is really cool with that. Blogs, everyone knows what a blog is, but at least you could have a protected course blog if someone wants to more so post things in a river of news type of style to their content. Elm's Media Asset Management System, that's a mouthful, but you can tell what that is. We actually use Pwik for our analytics of just kind of generic, like, hey, students are going to all these courses. I highly recommend Pwik over Google Analytics because you own your data. It's an open source version of Google Analytics. Effectively, you install it, it runs on MySQL, has its own community, it's very cool. And then there's iCore, which I always trail off is a secret project. So in our network, we've got a single Drupal site at the CIS, which is kind of your hub that's knitting this experience together, and at our asset management system. It doesn't have to be a single point, but we do for ours. So per course network, we're talking about multiple Drupal sites being produced for each of these, which all have a better visual and second. You could produce any of these things. In fact, the CIS is capable of producing any of these things. It uses a jobs file, basically. If you're familiar with Jenkins, it doesn't use Jenkins because we didn't have time to develop that at the time, but it's the same type of idea, you kick out a job, it goes, oh, I know how to read that, runs a bunch of Drush commands, and on the other side, you get a Drupal site. And in fact, the way that we have this package, we also have support for non-Drupal platforms. So we've got Pwik built into the entire thing. So you can see we've got our little network here. And the way that this comes up visualizing it is we've got reallydateds.system.com, which points you out to online.site.com, and then all of the other tools live at a similar type of address. So we've got basically the name of what this is, so Interact, Blog, Courses, Analytics, Media, Studio, as a subdomain off of whatever this grouping organization is, whether it's a college or a department. It could be a whole university. I wouldn't deploy it that way, but it could be. So what's a course experience like? Because we're talking about taking a student and saying, you need to interact with all these systems, but obviously we have to make it so they never know they're interacting with all these systems, because otherwise UX will suffer drastically. So we have single sign-on systems, things like Cosign, LDAP, we've got something called WebAxis. It's a single sign-on system. Things like LTI, TINCAN, OAuth. These can also be used to do the same thing. I saw someone do a jig because I said TINCAN. JSON and XML can be used for the actual systems to talk to each other behind the scenes, which is also very important in stitching the experience together. So we could have one course, if you will, be a combination of these tools and have another course be a combination of these tools. So we're not limiting people or saying, you need to use these five different learning management tools or here's the group's functionality or whatever it is, because we use LTI to pipe people between the systems more easily or TINCAN or what have you. And then the systems can talk to each other on the back end via RESTful API calls. Every system that's made is a RESTful API call or is a RESTful engine. You could also have old school 001, which is just, it's a course site and you put everything there. You're still at least gaining from the automation because down the road, I don't know what will be available five years from now, but I still hopefully will be working on projects like this because this is a crazy Big Scope project. So when we come up with the Drupal 8 blog tool, I want to be able to talk to the Drupal 8 blog tool without having to go and upgrade every aspect of the code base that I've been working on for years. So if just the blog tool needs upgraded, it limits the scope of that one system so that we use JSON messages back and forth between them because REST is built into Drupal 8. And then we don't care that it's Drupal 8 anymore. We care that we're sending them off to someplace else to do a specific task. So what we're talking about is the concept of networked Drupal distributions. Each course forming a small network of sites all playing together. That way system usage is based on the goals of the course, the thing it always should have been when you're making a course. You don't ever just hand someone the same bread box and put the same bread in it every time and expect the same result. So as another preachy-wearing, this is a brand new idea, and we mean serious business with this. A brand new idea no one has ever thought of except they have because everyone outside of EdTech does this all the time with the way they deploy systems. Maybe you've heard of this one. I googled it to find this one. So we have a very thin branding bar for the most part across the top of every Google application you go to. You're on a different domain or sub-domain or what have you, but yet your user experience doesn't magically suffer when you go to these different tools. You don't expect functionality in YouTube to be the functionality in Google Docs. They have very different compartmentalized behaviors. They can share data, and that's where the rest of the API calls are going on behind the scenes. You just never think about it. So this allows Google to roll out new products more easily than they were doing in the past. So it's more of adapt and adopt technological structures and then in our case, let's implement them via open source instead of outsourcing to Google or any of these other ones because we can do the same exact type of a thing. This is a terrible screenshot on such a large screen. But this idea of having a thin consistent branding that lets you know contextually, oh, I'm in this course and I'm doing something affiliated with this course, what system you're on because as a student you shouldn't care what system you're on. You should just be interacting with the course. It doesn't matter where the information comes from. So we're talking about a college-wide learning network. That's what we've got rolled out. And doing this per college because it's based on the CIS, we start to get into something I tried to describe a long time ago, it's structured anarchy, where we've got a system that a site request system, a site factory, what have you, that is stamping out all of these different systems and then we go, oh, well, we'll just give you the same type of site request factory. This is already going on at Penn State. People just don't seem to realize it. There are six or seven colleges using a site factory in some form and they're not even using the same one. I'm using the thing I'll show today because we're trying to get people on to that approach. We've got a much older site factory that literally just does MySQL scrapes and manually creates sites.php, or settings.php files, pre-drush days, quite frankly, because of how old that was. So this is already going on and we're talking about a lot, a lot, a lot of Drupal sites. So how do we go about managing all this anarchy? Because now we're talking about intentionally causing it at some level, if people can go in and they can request new courses and parts of a course relate to Drupal sites, how do we go about managing that? So we do it through abstraction, we have a lot of abstraction, quite frankly, so modules work in any Drupal site. So a lot of the modules that have been produced for Elms Learning Network don't say anything related to Elms Learning Network. There's a module called Profiler Builder. Profiler Builder doesn't have anything to do with Elms Learning Network on the surface, but it automates the process of creating new distributions and install profiles. Elms Learning Network has a lot of distributions and install profiles, so that's the way I make life more sane, or my life more sane in doing some of these things. Themes are also all contributed back. We've got independent distributions, so even though I'll show all of them working together, any of them can be cherry-picked and used as a standalone is the idea. And then there's the Galaxy Packaging Format, which is actually a layer built on top of DSLM. It's Drush Simlig Manager, which I highly recommend checking out if you're into the multi-site versus non-multi-site debates, but I'll show that. So because we've abstracted things, we can collaborate with other groups that are doing this. There's a lot of EdTech vendors out there. Some in this room, I'm sure, saw them down on the vendor floor. But these are three things that I don't currently have coverage for in my system, and it's intentional because I'm sitting on the sideline and seeing how things play out with these. H5P is the most exciting in my mind because it's not actually Drupal-based, but it's heavily integrating with Drupal. It's a HTML5-based kind of create-interactive-experiences-widgety thing. I highly recommend checking it out. Opingo is an LMS, a traditional one-point LMS. We still need student who's logged in for this course logistical data, so I'm keeping an eye on that, as well as it's Drupal, we can have a conversation. In the last talk that some of us were in, someone said, well, why don't we just use Moodle? Okay, but let's go out five years from now. You still have to hire someone to run Moodle or go to a Moodle-hosted service, and that's yet another vendor you're going and dealing with having support issues with that can't talk to your Drupal people. I work with our website development person, and he has found all kinds of great stuff, and I come to these events and I find all kinds of great stuff. All of you out there are developing things like the Realms Learning Network. You just don't know it, right? Because you made an improvement to views. Well, that fixed tons of issues in my system. You developed entity cache. Well, now all of my stuff has a lot more performance enhancements, varnish, vagrant, all these tools that we tap into. Traditionally, EdTech builds pretty much from scratch if you've seen what's out there, or is highly proprietary. So another way of managing it is through fractal system design. Through repeatability, and so everything is a restful web service, as I mentioned, and that way everything's very repeatable. We also allow for this concept of structured descent because we're always going to have faculty or staff member that says, I want the block to be down lower, or I want something, I want that view to have an additional field in it, I want that content type to have another field in it, and they might not express the concept that way, but that's what they're asking you for. If it's one big bucket, you start making all these apps and features and just tons of stuff on stuff that you're just kind of fighting against what Drupal wants to naturally do, which is B, A site. And we use simple addresses that are readable. So we've got tool.university slash course. And if you go to any of that, you can go to that tools implementation of a course for that university. And I love this little vegetable. So this is the, it's a broccoli flower type of a thing, but so you see the fractal is a natural pattern in nature. And so the idea is looking at this at a high level, if we're looking at these little pods as Drupal sites, there's a ton of Drupal sites going on here, and this is terrifying. But if we use a repeatable pattern, as long as we can manage one Drupal site effectively, we can step up a level and manage a network of Drupal sites effectively until we stop caring how many Drupal sites there are. Because as long as the initial design pattern is sound, then you're going to be able to manage this chaos that at a high level looks like chaos. Also use, it's called Galaxy is what I started to call it. It's a distribution for distributions. So the Elms Learning Network is one downloadable package that you can spin up with Vagrant in one place. It takes an approach similar to Drupal 8 where there's like the core directory and you don't touch the core directory. And then there's the config directory. And then using DSLM and some even more crazy SimLink stuff that I'll have to show the DSLM guys, we completely abstract configuration from code as far as settings.php, sites.php, files directory. All that stuff lives in the config directory and is by reference over there. And we have support for more than just Drupal because it's a packaging format. So we've got a structure that's basically multiple multi-sites. So it'll be fun to see what they think of me tomorrow at the multi-site debates. But basically we've got a Drupal distribution living out there and each Drupal distribution has a multi-site that's not structured like a normal multi-site, but we can go over that. So this is kind, I don't know how blurry that is up there if it's even readable, but this is the basic idea with something like DSLM is that you've got everything abstracted if you look all the way to the right. All of those have little arrows in OSX. That's what you get the arrows for SimLink. And so those are all actually SimLinked as far as you see like index.php for example. Index.php is actually SimLinked back into, if you step back two levels, into the cores directory. There's a Drupal core directory. And you drop in new versions of Drupal there. So you can manage multiple versions of Drupal core. You can manage Drupal 7.28 versus 7.29 and start to slowly migrate your systems to it by just tweaking a SimLink location. It's a very different way of managing this process. And there's Drush functionality. So you basically run like Drush, DSLM add or new or something like that, getting blank stares from them. And it'll produce an entirely new multi-state for you. A side benefit of this is opcode cache performance. So this is the before and after of when we went and I switched the way we were structuring things. So we went from a 10 to 15% idle level. This is over a summer. There's nothing going on really. 10 to 15% idle traffic memory usage down to like five. So it was, I didn't actually expect that. I wasn't doing it for that reason, but it was kind of cool. We've also got a lot of automation going on. So we've got a thing that automatically sets up the whole system, or at least tries to. We've got Vagrant where it'll set it up in Vagrant. We've got Drush create site, which is the job script that actually goes and builds a new site. And there's also an automated alias file that will spider sites.php and basically look and say what are all the sites that exist so you can run Drush calls against them. So this is what one of those files looks like. The first couple lines, just reading them off. It's sing 100. That means we're making a space at slash sing 100. VU is just a grouping thing in case we have multiple colleges. And then it's the location of it to, you know, where am I putting it and what is the data path to talk to it. And then there's the title of the course, the admin account for it, what distribution to build. And then after that, you've got a ton of Drush calls. So basically it just runs through the first five, builds a site, and then it executes all these Drush calls against that site that's been produced to kick it out in a completely optimized, automated fashion. You see this even has preprocess CSS and JS turned on, things like that. There's also one line in there that is the CIS service instance UUID. You see it's a big old number. That's the unique identifier in CIS so it can talk back if it needed to. So it knows, hey, what was the thing that produced me in the first place? I also mentioned the concept of automated aliases. So we can run on any ELMS learning network system that's deployed. We can run a call, a command line of Drush at courses dot sing 100. And I know I'm in the courses system and I'm running it against the course called sing 100. There's also the notion of a dash all. So if we think of lots of requests coming in and I'm not the one building these sites, this is to get me out of the way. So I'm not building these requested sites. I don't know what Drupal sites have been requested and what courses are running over a long enough timeline. So we can run structured jobs and just say, okay, all the courses that we have feature referred the context portion of MOOC UX or something like that so that that becomes managing. So enough show me already. So I even yell at myself in here. Oh, Twitter. So first of all, just wanted to mention, this is the home of the project. They're at least talking about it's elmsln.org. And so you see there's links off to the blog is going to be moved here in the future where you can get to go to download it, the API site elevator, the style guide, which I mentioned, which is really cool. I highly recommend checking it out because it's not related to Drupal or anything that I'm doing. It just has the name on it, quite frankly. There's a, you know, a license page and YouTube channel, that fun stuff. And then there's this doodle cast that some people told me they actually watched. That's kind of cool. Trying to describe this concept. So I've got a vagrant instance up here. I'm not going to go through, you know, building it out ahead of time. Or I actually built it out ahead of time because that would take some time. So I'm going to go and we're going to SSH into it. So the vagrant image is also available publicly. So you can download it and play with it if you want to with a lot of instructions on how to make it work. So when you get this all up and going, you're basically given this blank slate. And I've had a lot of people say, like, what the heck do you do with that site? So I'll show what we've done with the site. Because again, it's a tool that Penn State has used. I don't want it to be Penn State's thing that, you know, then you have to reverse engineer. So it comes with some default content out of the box. The School of Singularity. And so there's Sing100. And you see it's got this, you know, the idea of a promotional page where we're talking about the course Sing100. We've got a sample syllabus, overview of WoW to take it, some sample screenshots and things like that. So this is, you know, just a Drupal site. A standalone marketing Drupal site. You can think of it at the high level. You've got the faculty member. So that's me in this case. So you can kind of, there's entity references between these things. So you can see the courses that I taught, see a highlight reel or what have you. And so in the system, we're highlighting our faculty. We've got our courses or programs and services we offer just to put something there. So to see the way we get into one of these courses, so we're at our course page. You see we follow a path. Even in here, we've got home courses Sing100. We've got tool name, dot institution using it, slash the name of this course, which is Sing100. If I click on offerings, we can kind of peel back and go for behind the scenes. So this is, you know, this course runs every year or every semester or what have you. This is where the logistical information can get routed through from a SIS, LTI launch from some other tool. You know, a legacy LMS, what have you, or it doesn't even have to be a legacy LMS, you know, run them side by side, what have you. So you can see I've got this one offering and a section in here. We can just edit that a little bit to see what that looks like. So it says the services that this uses, some resources it uses, sample syllabus, welcome letter, the welcome page text, things like that, right? So this could be information that's really good to have access to if we're trying to unify a user experience across systems. And we've also got access duration, which, because of the way the Cron jobs work, it will look at this and go, hey, what should be activated on May 11th? And so it's May 11th and this runs and it'll go, oh, we need to put that in these various courses to give access. On August 16th, we can then use that information and say, like, okay, well, we gotta boot these people out or what have you. So, again, very logistical information that's stored in here. So I'm gonna save this section offering because that's much less interesting and it's gonna think about it for a while because it is running locally based on the resources that it has. I'm gonna quit Twitter in the background and we're gonna move on from that to this one while that runs in the background there for some reason locally. Oh, there we go. Okay, I did it. So we've got a lot of services that I produced ahead of time. One of those services is our course content outline. It's what would be most familiar with looking at as far as a course. So we've got our marketing and logistics. This is really long. There we go. Marketing and logistics, one system, course and actual instructional flow in another system. And so you'll see we've got only a few options. This information is, you know, actually coming from the CIS. So there's the welcome page text that I had placed. If I want the syllabus, there's syllabus language. So this was actually a RESTful API call that pulled in this default syllabus language and then gave a link to the syllabus. From a logistics standpoint, this also lets you construct paths that are looking at who the student is. So you'll see I've got Singularity 100 and this ADF 123. That's because that's the section that I'm in. So if you imagine this is the offering of this course. The domain and the location don't actually change for the offering of this course. So then when I do setup and I talk about it and I post links, which happens a lot. You'd be shocked when you post links to the course space and the course space changes to fall, to spring, to summer, to whatever. And you need to republicize those everywhere. It's the same link every time. It figures out what section that student is affiliated with. So in this case, I can do slash syllabus slash download. And that is a generic download link that will always give me the syllabus of the student that's logged into that course and should be there for that point in time. I don't have any other sections in here at the moment, but there's this slide out admin panel here, which we're going to show different user experience for that as well. Collins is working on. But you can see I have my list of sections in here. And so this is the little identifier that's kind of hooking things together from the CIS to make sense of it in this system so that the student gets a unified user experience. Looking at just, you know, this is the MOOC tool, just looking at it quickly. You see we've got an outline of pages here. We can click through. This is the book module. The site that I had produced ahead of time, actually just, you can tell it, you know, what default content to create. And, you know, you should be pretty familiar with this stuff, right? So this is, you know, we're just looking at Drupal. And we've got the title for the page. We've got a well-optimized version of CK Editor 4, which has a lot of nice accessibility enhancements in it. We've got CodeMirror. That's what does this Dreamweaver-esque thing. And we've also got some templates that we can dump in. And so we've got some well-made ones. Like we've got a nice-looking table here that you can edit that is an accessible table out of the box. We've also got topic readings. So this is a well-formatted CSS list of items that's also accessible. And so go down and save, like it normally would, so that we would generate a page. It's also mobile responsive. This is, you know, a while... These are things that are sometimes while factors for educational technology people, people familiar with LMSs, but at a Dribble conference it's not going to be impressive that you can go responsive. But so we've got a mobile mode experience for that. There's also, thanks to... There's a module called... It's actually called Accessibility. And the Quail API, which is an external library. You can get this thing that's right here, says Check Accessibility. And so click Check Accessibility, and it'll take a moment because it actually skims the page. And what it's going to do is... There we go. It's going to look at the content in the context of what I'm working on and give me pointers about how to make it accessible. So it's not a heavy-handed approach to accessibility because a lot of people complain that, okay, well, we got to go and... We got to panelize everything, right? And then we'll make the panels accessible and the blocks accessible, and then we don't have to worry about it. They don't have a WYSIWYG. And so instead of us making a million different panels or giving them that level of flexibility because I've seen what happens, we can help enforce better accessibility practices through knowledge of accessibility. So you see here we've got... I don't actually have any straight-up errors. It will give you, like, a red X type of a thing if you have something that's wrong. But if I click on, in this case, we've got Image Title, it just says, hey, make sure that H2s aren't used for formatting. So that's the actual recommendation associated with an H2. You're not supposed to use an H2 for a purely stylistic purpose. You're not supposed to have meaning and convey it, but then it can also be used visually. Looking at bullet lists, there's an H3 in there. There's this at the bottom that's, you know, a fake block quote. So it's saying, hey, just make sure you're not using block quotes for indentation purposes. You have no idea how many people actually just want to indent stuff and make it block quote for that reason. Also give feedback on the table. So there's a lot more feedback on the table to say, you know, make sure that this has summary information that actually makes sense. Make sure there's a caption affiliated with it that makes sense. Make sure that you have, I believe it's call, yeah, call or call group on it. So it can better educate people about how to make accessible content, which is a huge deal for education at any site. It doesn't have to be an Elms Learning Network stuff. You need to have your content accessible. We're required to meet WCAG 2.0AA at the moment. Another nice aspect of the module is it input at, you can say, I'm using this. So you could use Section 508 if it's government. You can use double A. And then I guarantee once we get everything up to double A, they'll say you need to do triple A or you need to do whatever the new thing is. So it's nice that it's not designed specifically for that. As far as some other functionality in here, there's the outline designer. So you got book outline. It's basically scaffold on top of the book module so that you can quickly assemble outlines of how this course should work. This works in any Drupal site. I often use it for scaffolding out what the actual site outline is of a site in the context of the site. You can delete things quickly, duplicate them, all that fun stuff. So let's jump back to, you see here we've got these other tools that are in here so we can have completely different experiences based on the tool that you're going to. And so they can look different, be a different theme, it can have different functionality, and we're siloing it in its own Drupal site. So each one of these that I'm going to here, we go open up my vagrant instance. You'll see there's a kind of, again, following this fractal idea. There's a fractal pattern even to the naming of the database structure so that you can, if you had to, you know, we're going to move this to a different hosting cluster or whatever with just the courses tool set. That we could do that very easily from a visual or a pattern match perspective. So we've got courses underscore some grouping item, underscore the name of the course. In this case it's media underscore grouping item in the name of the course. So you see I've got, you know, my blog tool. This is actually using medium blog, which is a distribution I didn't make and was able to integrate into this approach. We can go to interactive course object repository, which is for all of our HTML5 fun stuff in the future. So this is where I plan on putting in H5P. It doesn't have a nice theme, obviously. But, you know, we can tap into these really interactive, nice slick looking tools like the timeline module, or at least timeline JS, so that you can construct a timeline and we do that in a different site instead of inline with the course because if we want to update the course content system as a whole to Drupal 8, we can still just embed iframes to this very interactive content that might have fairly exotic modules that aren't going to be updated nearly as rapidly. Or in the worst case, aren't going to be updated until you pay for them. So seeing what that looks like in our course content then, if we go back to the content outline, we've got the introduction page. We've actually embedded that in there. And so this is served up from that other thing. You saw there was just a simple iframe embed code. We put that in there and now we can leverage the interactive capabilities of that system in the context of this. And the wonderful thing about iframes is that they're pretty naturally responsive. And so if the content inside of it is responsive, it will just appear that it's there. It uses a theme called entity iframe theme, which uses a module called entity iframe that I wrote to do this. And so it also allows for cross-domain communication if you need that to get data in and out of it. So that's the basic idea. We're embedding lots of iframes. And this isn't anything new either because that's what YouTube does, right? People go, oh, my iframes. They're terrible, terrible design. You use them every day with YouTube. Every time you embed YouTube somewhere, it's an iframe instead of object code. Because when they want to change their API, they do it just inside that little window and you've got the update on your site and you don't even think about it usually. So let's go about actually requesting a site in the background here. So building out a new site is, I go to, we've got in this case, there's setup course up here. And I'm going to build a new one. A new one. We've got a title of a new one because I'm really original at this point. We're going to require a login to it. We can select the default content for it. So in this case, I'll just go with very minimalist content, but it's basically doing a feeds import of data. And we'll create that outline. Say that it's for summer now. A bunch of random characters because it's a demo. Can upload the syllabus and welcome letter right there. And we'll hit create course. So this will run a batch API, batch API call, which there we go. It's going to sit there and it's waiting until it notices that it's picked it up. So we go into the vagrant area and look at, you know, this is the structure of Elm's learning network. So this is the galaxy packaging format. It doesn't look anything like Drupal, does it? But if I go into something like domains, you'll see these are the different, you know, subdomains going out to the left. So if you go online, it will start to look like Drupal, but with a lot of sim links involved. So it is packaging even where those sim links should live so that it's doing it in a very logical manner, a fractal-based manner. Config, as I mentioned, that's where all these things are sim linking to. By looking config, it has a structure that mirrors what's going on with the rest of the structure of the system. So that way everything's pointing to very logical places, but it's outside of where you are actually deploying or the directory that has Drupal Core's code. So when I say configuration is separate from code, I mean like settings.php's all live inside the config directory at some level. In here as well, there's the jobs file or folder. So if I go to jobs, you'll see that this, a new one right here is currently processing. And if I pull this up, you'll see, hey, it takes about three minutes to build a site on average. So it's not, it's stepping through and then saying, like, okay, it's about three minutes. If we look at that, we've got this, a new course.courses.processing to see what that looks like. So by filling out that form, we created this template, basically. And the Drush create site script, which is built into Elm's learning network, knows how to read this and turn it into a site in the right location. So you see we've got all these Drush calls. All these Drush calls. Oops, I broke it. And so there's also, we've got feeds, you know, the feeds import call here. And so as I said, this will actually import content automatically from this location. So we have a default working outline. That could be legacy course data. If you've, you know, done it in a previous system and you're able to get it into XML, it's not a squirm thing. It then runs across and clears the caches. So it's got a progress file that's running. Well, that goes there. To quickly show some of these are, some of our actual courses that we've, you know, been able to produce with this system. So you see we've got courses. The name of our institution, body, which is Arts and Architecture, slash Music 11 in this case. And so here's an image that we've pulled in and luckily enough, it's actually used in our course, this little vegetable thing. I just realized that actually in coming here. But it's not actually there. So if you're used to the media module or you're used to any inline drop in image there, that's not what's happening to get that there. This is actually talking to the Elm's media server and taking this short code and going, oh, I know that short code. You want me to talk to that system and ask it for in this case, it says the image that's being pulled up at this location. And then it's going to throw it down there. Same with down the page is actually one, because we used to do this with JW players. So this is a legacy snippet for grabbing and rendering out his video. So you see as I scroll down the page, you've got that image. We actually even pull across things to auto light box, pull in copyright information that is stored in Elm media. We've got a video that's being served up from Elm media here. And again, because it's an iframe, it's inherently responsive. We make the content inside of it be responsive and then it becomes responsive in the parent item. So as students are going through, they don't even know that they're interacting with all these other systems. The thing is that the student user experience doesn't suffer. We can also do, we do some nice things. There's a footnotes module. So this actually goes and grabs the footnotes from Elm media and then prints them out in the order in which these things are placed on the page. So if you have the citation data, it'll nicely format it and put it in the correct order. And then you have, you know, footnotes to jump back and forth between things. I mentioned Elm media. This is Elm media. We're running out of time here. So this just has all of our images in media. We are an arts college. So we've got almost 2,000 videos and 1,600 images at this point for like 30, 40 courses. And some of those videos will be, you know, two minutes long, some of them will be like an hour. So we've got a lot of media in use in our courses. Let's see if that, oh, it said access denied. That's because it's running on a bakery. The vagrant instance uses, bakery is a single sign on thing in Drupal, Drupal.org uses it with groups.drupal.org. And sometimes it doesn't always notice that you were actually in a course when it's created it. But that only happens locally. So if I refresh this now, yeah, because my session expired from when I was working on it before. And this is where we're going with the UX of the course outline. So very well produced fonts. It's using Zerb Foundation. And we've got very nicely styled content. Use of typography, columns, nice little widgety things from Zerb. This is Peewick. It's a system onto itself, but it does the analytics. So this is sitting there watching where people are going different pages and give us different reports. This is a collaborative learning environment. So you see we've got students ability to submit kitten images. Obviously a lot of kittens in our courses for this. And people to be able to go and comment on them. It uses the achievements module if you've ever heard of the achievements module so that when I do this and hit save I think I'll unlock an achievement. Yep, so we've got Xbox live style achievements to try and gamify our course content and course experiences. We've got the ability to produce rubrics. You can see I'm going very fast through way too many systems at this point. Oh, it's points. So that should be like 10. I'm 23. So we've got ways of auto-populating rubrics which are also accessible and responsive by default. And then my favorite little gem in all of this. And these are the things, you know, I'm trying to intentionally be overwhelming at this point and I'm running out of time. This is the stuff that's possible when you use a platform that's not specific to education. Because this right here is an HTML5 recording widget that is recording everything I'm saying, saving it directly to Wave, sending it to the server, and then when we're done it's going to be an MP3 so I could actually talk to a student after I'm reviewing their work. If it's an image of their work, right, so they submit an image, this isn't just this snarky looking picture, that I could actually using HTML5 canvas properties do mockups and say in my feedback, hey, you need to really focus on the areas where I use the red pen, the black pen, you're doing things the right way. And I can hit save. And as a saved feedback thing, again we're not, you know, the UX for this isn't finished, that we have an HTML5 recording widget that is recording everything I'm saying. Yeah. So that we've got, we can start to build different user tools like this much more easily because people are out there developing them for huge projects and they never know that they're benefitting us. So in the background, this got produced and you'll see it only has one system in its old network. So I am way beyond out of time here I think. This is online.ana.pshaedu, if you want to go check it out, that's our CIS instance of this technology. And we also do some other fun stuff with it like Google chart tools and views. Because again, Google made this cool thing, someone made views, now we can make better decisions based on our enrollments and things throughout time. So thank you very much. And if you have questions, there's a microphone over there. Thank you. Brian, is this on? Yeah. Yeah. First of all, just to thanks man, this is incredible work. Where do y'all host? Y'all host, you know, at Penn State? Yes. And if, you know, one of the blocks that this is running on goes down to every single course instance. Yeah, that's not a limitation of Elm's Learning Network so much as it's a limitation of us having it on one server. If you had unlimited resources, and you know, how could you spread it out? I was just trying to wrap my brain around it and it's like, you can't really use a lot of Drupal specific hosting because of the Galaxy format and because of things like that. So what do you think about distributing the load? So I think that the automation script, because right now it's pretty naive. It's a bash script basically that picks up the job and does something with it. Because it's doing Drush commands, if that actual automation script was changed into Jenkins or whatever to say, hey, you have some additional logic to go, oh, I want to produce this distribution, that should go to this server over here. The databases are all, each one of these core sites is a different database and yeah, the Galaxy packaging format is mostly to do this all in one big space. You'd have to start to get creative probably with our syncing between systems, what that code base is. This is also a, there is no point release yet because I'm waiting until the work with Madison in July to start to get to actual point releases to go like, okay, well, this server is running, you know, this site factory type of stuff. You're right, I don't know. I honestly don't know if you could put it on something like Pantheon or AQUIA Cloud. You would need a more generalized hosting approach. I don't know enough about BlackMesh, but if they allow more generalized server access, then yeah, I think that there definitely needs to be work in the automation script to make it more flexible to say like, take this and put it over there. At least the database flexibility built in is what I was initially going for so that we weren't painted into a corner with just one site, and then the namespacing of things was also so that things could be moved around more easily. So I'm looking for big thinkers like what you just said to help do that stuff. I have a real quick question. I might have missed it. Sorry, what was the name of the drawing widget that you used, the library of? The drawing widget? Yeah, what library did you use for that? Let me, yeah, let me see if I can pull that up. Was that in Glenn? That's part of the studio, which is still not fully standard or stabilized because we're going to launch that in the fall. So submission assessment, content types, submission assessment fields. What do I have as red pen canvas widget? I believe is the name of it. That does that. The audio recording is called media recorder, but it doesn't, oh, actually no, it does require the media module for that one. The thing I've tried to avoid like the play. It's a really amazing canvas field. Just one of the problems we're really running into is that we have all these content courses in different systems like Blackboard and Moodle. Has there been any work or any talk about the possibility of creating some sort of import or export of courses from those existing systems into something like this? So that always comes up and then becomes, oh, okay, well, we'll just use SCORM. And SCORM is not just a, oh, yeah, we'll just use it. It's a lot more to it than that anyone that has any experience doing it. So we've got the ability to import an XML package, which is just, it's creating the nodes off of XML with UU IDs. So if it could export as that, then yes. That's, again, big picture, long-term type stuff I would love to talk more about. Right now we're actually, if you noticed, I talk about it in really derogatory ways, but we get a lot of our data from the LMS. I see us more as that's the host and we're the new entity. So that data is coming to us and then we never send the user experience back to it, basically. So we use that for the students getting access to it. So we've kind of slowly changed the way we make courses through this type of cobbling together approach to say like, okay, well, we've got videos and they're in Blackboard and we don't like them. Let's have a video server. And then we do, it's called LTI. LTI is used for getting, it's an OAuth push and get people two different resources that these kind of dribs and drabs were slowly rolling out other tools in different domains, we're slowly integrating them into other systems. We've got like 15 courses over into this approach versus the other 20 we have still in Drupal 6. So Drupal to Drupal we have unfortunately, but yes. Doing, that's why this is more of trying to be a mind shift of like, you're going to end up doing this again because I already talked to three people here that said like, we migrated from Blackboard to fill in the blank and now people are unhappy. And I think they're unhappy with just the approach. It's the design methodology that's all one big package you have to buy into. And if Drupal did that, that's why Drupal was so modular. That's why other systems that you get it and it's everything in a box, well then when everything in a box doesn't cut it, you get mad at it. Versus going and googling what the next thing you want to integrate is. What is the name of the accessibility module? It's called accessibility. Yeah, it utilizes, yeah, it's called accessibility. It used to be called content accessibility but it also does theme, the theme layer. And it uses something called Quail API which was PHP based but now it's jQuery based library so you can use it in anything. It's just the developer, I think his name's Kiwi. Yeah, yeah, it's right there, Kiwi. Integrated with Drupal because that was our original use case. But it is a standalone, has its own GitHub thing. Speaking of modules that you avoid like the plague, like media which not to knock that, it has its place. But one that I really avoid is organic groups and how has that been integrating with, because I noticed when I downloaded it that it's being used on your site and it seems like it causes a lot of problems with other modules or other integrations. Have you noticed that? So we use organic groups basically just to stitch together users in a tool to the fact that they are associated with that section. So the section is created, the little analytic, that word I keep misusing as we talked last time. That piece that's in the CIS is a field collection and it's actually related to an organic group in each of the sites that's produced. So all we use the organic group for though is an easy way of saying like these users are connected to this in some way. So we don't really do a lot with it other than that. There are other people that are very anti-field collections. What I love about it is it powered the CIS stuff with drilling down in the data model. But that rubric tool I showed, that's actually field collections as well. Just rendered in a completely different way. Well yeah, if you can get it working, it does take some time. So I am officially over time. But if you want Drupal Camp PA swag, come over here. Well it's not swag, it's just notes. But thank you all for attending.