May 29, 2014

We were honored to have Frankie Jarrett and Japh Thomson join us for episode 18 to talk about their work with the WP Stream plugin, as well as their contributions to WordPress core.

This episode was sponsored by WP Ninjas, a leading WordPress plugin development team that is constantly innovating and building excellent tools for the rest of us. WP Ninjas just recently launched NinjaDemo, the only complete demo solution for WordPress.

Screenshot from 2014-05-29 17:59:36

Show Notes:

Transcript

INTRO: Welcome to Apply Filters, the podcast all about WordPress development. Now here’s your hosts, Pippin Williamson and Brad Touesnard.

BRAD: Yes, I am Brad Touesnard, and this Episode 18. This time we have a special guest, Frankie Jarrett, and Japh Thomson is also joining us. Say hello, guys.

FRANKIE: Hello.

JAPH: Hey, everyone.

PIPPIN: Glad to have you guys onboard. Real quick before we get started, we just want to give a quick shout out to our sponsors, which is WP Ninjas, and their latest project, Ninja Demo, which is a fantastic new platform they’ve created for easily setting up live demos of your plugins and themes. If you want to create a demo that customers can log into and then view the plugin or the theme in a live sandbox that’s unique to that instance, that’s what Ninja Demo allows you to do. You can check it out at NinjaDemo.com. I’ve used it a couple times already and it’s really pretty slick, so go check it out and see what you think.

BRAD: Awesome. Frankie, do you want to start off by just maybe introducing yourself and let us know who you are, what you do?

FRANKIE: Sure! Absolutely! It’s good to be here with you guys. If I can just say, that Ninja Demo thing looks really cool.

PIPPIN: Yeah.

FRANKIE: I was playing around with it, and I thought, wow, this fills a huge need.

PIPPIN: Yeah, it’s pretty slick.

FRANKIE: Yeah. Yeah, so a little bit about myself. My name is Frankie Jarrett, and I’m a WordPress developer. I work for X-Team, and I’m based in the Kansas City, Missouri area. I’ve been working with WordPress since about somewhere around 2.7, 2.8 release cycle, so it’s been about six years or so. When 3.0 came out is when I really decided, okay, WordPress is going to be my platform of choice, and I’ve been working in WordPress ever since. I’ve been a core contributor in the past, and now I work full time on a plugin called Stream, which is X-Team’s first venture into the plugin space. That’s been a lot of fun. It’s been a blast working on.

My favorite thing, probably, about working on X-Team is just getting to work with my colleagues remotely. It’s a blast just being able to work from home, being able to work with just such amazingly passionate people who are just excited to be doing, you know, the things that we do, developing on WordPress, and sharing that passion with … is fun.

PIPPIN: That’s a great — that’s one of the great benefits of having a team of people that you work with.

FRANKIE: For sure.

PIPPIN: Whether it’s 5 or 20. How many people are there on X-Team?

FRANKIE: On X-Team, X-Team as a whole, there’s lots of different teams, I suppose, within X-Team, and so X-Team, as a whole, I would say, is around just over 100 people, but the WordPress X-Team —

PIPPIN: Holly cow!

FRANKIE: Yeah. The WordPress portion of X-Team is about 17 or so developers. Then our Stream team is even smaller than that since we’re kind of a bootstrapping startup within that team. So there’s like about four of us, three of us full time.

PIPPIN: I never realized that X-Team was so big. I guess I’ve always known of X-Team from the WordPress side, and so I’m familiar with like the WordPress team of X-Team. For some reason I always assumed that that was all of X-Team.

FRANKIE: I know. That’s what a lot of people think. We actually even have a Drupal team within X-Team.

PIPPIN: Cool.

FRANKIE: We have front-end developers. We have a game development team.

PIPPIN: Nice.

FRANKIE: Yeah.

BRAD: Do you guys get together, like, during the year?

FRANKIE: Man, I wish we did. I wish we did. We get together with our —

BRAD: You could have like a Drupal/WordPress battle, like water fight or something.

FRANKIE: Like a match-up, yeah. Have, yeah, a water fight.

PIPPIN: Nice.

FRANKIE: Yeah, we get together with our WordPress team, but we don’t get together, unfortunately, with the whole team, and maybe we can change that some day.

PIPPIN: That’s fantastic. And I know you guys were all down in Miami, or a lot of you were two weeks ago. Real quick before we go any further, Japh, let’s have you jump in and tell us about yourself real quick.

Japh, are you around?

BRAD: Oh, he might be —

PIPPIN: Oh, did we lose —

JAPH: Sorry. I’m back.

PIPPIN: Oh, no worries. Fantastic. Yeah, tell us about —

JAPH: I muted myself and forgot to un-mute myself. Excellent.

PIPPIN: No worries.

JAPH: I’m Japh. You may know me from my WordPress evangelist days at Envato. I relatively recently, the last two months or so, joined X-Team to work on their Stream product that Frankie was talking about because basically it’s something I found really interesting, really passionate about it, and wanted to get in there and help build.

BRAD: Awesome.

PIPPIN: Very cool. And how long have you been working with WordPress now? I know that you worked for Envato as a WordPress evangelist for at least several years.

JAPH: Yeah, that’s for about four years or so, I think. And I’ve been working with WordPress since around about 2006, 2007.

BRAD: Cool.

PIPPIN: So I think we all got in around the same time, somewhere in the 2.7 release cycle.

FRANKIE: Sounds like it.

PIPPIN: I think I got in —

BRAD: Not me, man. I go way back.

PIPPIN: Oh, yeah? How long have you been working with it?

BRAD: 2004.

PIPPIN: I don’t know what release cycle that is. What, 2.4?

FRANKIE: Yeah.

BRAD: I don’t know either, man.

FRANKIE: You’re vintage, man.

BRAD: Yeah, yeah.

JAPH: That’s like — WordPress was like, what, one year old at that point?

PIPPIN: I was in high school then.

BRAD: Yeah, I was working at a coop work term. My coworker started a blog on this thing called WordPress, and so I was like, maybe I should have a blog.

PIPPIN: Nice!

BRAD: That’s pretty much how it started.

FRANKIE: Nice.

PIPPIN: Cool, so you guys work — you’re both part of X-Team, and you both work on the WordPress team, obviously. And you’re both working on the Stream plugin. Within your work with X-Team, are you doing any other WordPress work, or is it only Stream right now?

FRANKIE: Yeah, so we, the X-Team WordPress team, we mainly do enterprise level work, so working at a partner type level with other large companies that have maybe multiple websites or multisite networks or, you know, big sites running on WordPress. We’ll come in and, you know, develop custom plugins and custom functionalities, custom themes. Then we do the ongoing support and maintenance type contracts to keep those sites running, working with their producer teams to make sure that things are being tested and implemented, and QA’d properly with their QA teams, and then overseeing deployments of that stuff to production.

It’s kind of full service type stuff. We’ve been doing that for several years. We’re a VIP partner, and that’s been a good part of the business.

BRAD: Cool.

PIPPIN: Excellent.

BRAD: Cool. Did you guys–? I don’t think we talked about what is Stream. Have we? We haven’t really.

PIPPIN: Not really. I think we only maybe hinted on it.

BRAD: Yeah. Let’s dig into that. Do you want to do that, Japh? Maybe you can start off.

JAPH: Sure. Yeah, yeah, sure. Essentially, Stream is a free plugin that you can download from the WordPress.org plugin directory that lets you track and monitor everything that happens in your WordPress site, basically. It’ll show you an activity feed of what’s been happening, whether it was new posts created, published, installing, activating the activating plugins, changing settings, everything that happens.

BRAD: Cool.

JAPH: So you can kind of keep track of all that stuff. It’s great for troubleshooting if you have it installed on a client’s website and your client says something has happened on my website, and I have no idea how that happened. You can log in and go, oh, well, that’s because you did this. So next time just be careful of that and make sure you do that first or whatever, and that kind of stuff. You can also, for security, you know, if someone has added a link into your post, you can sort of see how that came in, happened and, yeah, it’s got a pretty wide range of uses, but that’s essentially what it does.

PIPPIN: I see that it’s — so one of the things that you guys mentioned in the summary of what the plugin does is that it tracks logged in user activity. Does it also track changes? Okay, so let’s say that you modify a page, and you insert a post, you insert a link in that page. If that’s done by a logged in user, that’s going to be tracked, right?

JAPH: Right.

PIPPIN: Okay. Now let’s say that a plugin modifies that same page, but from the plugin side of things, so it’s not via a logged in user. Does it still get tracked, or is it only tied to users?

JAPH: It’s not only tied to users. And assuming that fires, you know, the correct hooks in WordPress.

PIPPIN: Mm-hmm, yep.

JAPH: Which, you know, if the plugin is built properly, it should. Then it will still track it.

PIPPIN: Okay, cool.

BRAD: What if someone has like a form, like they’re using one of the form plugins on the front-end and a form submission occurs? Is that tracked? Do you see that in Stream?

JAPH: Again, assuming that it fires all the right hooks, yeah.

BRAD: Right.

PIPPIN: You guys have it — am I right? You guys have it set up so that there is an API or an API coming that allows you to create custom events, so if a plugin wanted to tie in to track custom actions, regardless of the hook they’re using, they can do that.

FRANKIE: Yes.

JAPH: You can do that —

PIPPIN: I don’t remember. Is that something that’s in the plugin right now, or is that coming?

JAPH: It’s in there right now.

FRANKIE: It’s in the plugin right now, and I think the logged in user kind of, I guess, blurb that describes that plugin, I think, is for, you know, the overwhelming majority of use cases, it tracks logged in activity. But, yeah, Japh is totally right. If it fires the hooks, then that’s what Stream is listening for. So if those hooks are fired within the WordPress API, even if they’re fired by using WP-CLI, Stream will track it. So it’ll even know, hey, things are being modified on the command or to WordPress using the command line, and it’ll track that as well.

PIPPIN: Nice.

BRAD: So you guys are listening on, like, certain hooks and recording, you know, activity on those hooks. Is that how it works?

FRANKIE: Yeah. Mm-hmm.

BRAD: What are some examples of the hooks?

JAPH: Essentially, and sometimes we’re having to hack around even. If there’s not a particular hook there, we kind of hook it; use other hooks to kind of detect when something has happened.

BRAD: Gotcha.

PIPPIN: Quick question for you because I actually ran into this the other day. Have you ever found yourself needing to track some data when something gets inserted into the database, and there is no hook that fires during that database write. And so you actually hook into the filters and actions that are in the WP DB class. Have you ever done that?

FRANKIE: I don’t think we’ve ever done that in particular. Well, wait. I might take that back. We may be doing something like that actually for widgets because widgets lack some proper hooks when things are changed. And so we’re having to grab. I think, though, we’re grabbing into the globals, and we’re monitoring changes that occur.

PIPPIN: I just remember, not too long ago. I don’t remember what plugin I was working on, but I couldn’t figure out a way to track it. I think I was doing an integration between a membership plugin and my affiliate plugin. I was trying to find a way to identify their queries. And the only way that I could find it was literally looking at the SQL query before it’s executed and say, like, well, if it’s for this table.

FRANKIE: Whoa!

PIPPIN: And … kind of query stuff, I could do it.

FRANKIE: That’s pretty low level.

PIPPIN: It felt pretty dirty, but there’s actually hooks in the DB class that allow you to do that if you wanted to.

FRANKIE: Mm-hmm, mm-hmm.

BRAD: It feels dirty at first, Pippin, but you get used to it.

PIPPIN: There’s a certain level of awesome to it as well.

FRANKIE: Sure.

BRAD: Yeah. What are some examples of hooks that you guys are using? What kind of activity are we talking about? What are some examples?

FRANKIE: Yeah, so I think some examples, the most common ones would be — so WordPress is made up of all these different APIs, right? There’s widgets API. There’s settings API. There’s post types. There’s taxonomies. The list goes on.

Every one of these areas within WordPress, we have set up each one of these areas as “connectors”. If you look at the source code of the plugin, you’ll see that there’s an abstract class called connector. Then we’ve got these child classes that are for each individual area within WordPress. We have unique callbacks fired within those, so for post types we’re looking for things like, you know, when the post is updated, post created, post deleted, post transition, so keeping track of when posts transition through statuses.

Then for things like the settings API, you know, when are settings created? When are they updated? When are they deleted? And keeping track of those changes, so when they get piped into Stream, Stream then filters that data that’s happening and organizes it in such a way so when you’re viewing your Stream inside of your WordPress admin, you see all that activity in an organized fashion. So you could say: show me all settings that have updated. Show me all settings in the general tab that have been updated. And you can kind of narrow down your search to see what’s happening on the site.

BRAD: That’s really cool. You guys have extensions for this free plugin that you’re selling too, right? What are those?

JAPH: Yeah, that’s right. We have four extensions available at the moment. There’s one called Cherry Pick, which allows you to remove items from your activity feed. There’s a data importer/exporter, so you can get all the activity back out of your database if you want to.

PIPPIN: Can you export it from one Stream install into another?

FRANKIE: No, there’s no import functionality. It’s export only.

JAPH: Sorry —

FRANKIE: We thought about that, and we were like, well, if you’re migrating sites, you’re going to do a database migration anyway.

PIPPIN: Sure.

JAPH: Yeah.

FRANKIE: Probably. And Stream isn’t really content. It’s just activity, right?

PIPPIN: Right.

JAPH: Yeah. And then we have —

PIPPIN: That makes sense.

JAPH: — reporting, so you can kind of — instead of just having the activity feed, you can kind of have a nice, more histogramic kind of look at your activity. And the last one we have, and it’s probably my personal favorite, is notifications, which is really nice. You can kind of tailor very much what you do and don’t get notified about. So you’re not just getting a fire hose of notifications, but they are either push notifications to your mobile device or email notifications for, you know, really specific activity that you want.

Using the example I mentioned before, if you have your client using your website, and you know they don’t update all that often, but you’d like to kind of be able to help them out if they do something wrong when they are, you could make it so it just notifies you when anyone other than you modifies that site. Then you get a push notification, and you can give them a call. I think Frankie has experienced exactly that too.

FRANKIE: Yeah, for sure, notifications. I’m the same as Japh. It’s probably my favorite one. Reports has the eye candy factor, I guess. It shows you some cool looking, responsive charting. But with notifications, I really like that one because you can do some pretty granular things.

Have you guys played with the iTunes Smart Playlist feature before?

BRAD: Yes.

PIPPIN: I haven’t.

FRANKIE: Yeah, so that’s where the idea was actually inspired from for building these notification triggers. So you can do and/or logic and nesting of triggers inside of a notification rule. And you can do some cool stuff, you know, like saying if the editor role and author roles log into the site on a Saturday and make a change, notify me. So it’s like you can use some pretty —

PIPPIN: That’s so cool!

FRANKIE: Yeah, so you can do, like, are people working on the weekends? Are people not working on the weekends?

BRAD: That’s awesome, yeah.

FRANKIE: Yeah, it’s pretty neat. You could even say, like, if they are updating just this particular post. So it’s not just any update. It could be: are they just changing widgets, or are they just updating the main menu? You know, if I don’t want anyone messing with the main menu because the main menu is really important, then I can say, hey; notify me if anyone ever touches this and changes something about the main navigation. That kind of stuff, I think, is pretty cool. There are just like so many use cases that it could apply to.

BRAD: Cool.

PIPPIN: Yeah, that’s pretty fantastic. I think that’s by far my favorite aspect of the entire plugin as well is that kind of control in getting those notifications of different things that you need. One of my favorite ideas of how to extend the Stream plugin, which I know you and I, we’ve talked about it a couple times in the past, but I love the idea of saying, like if you take an ecommerce system and create a custom login event using what I think you guys call your connectors and set up certain rules. For example, if you have a sale over $500, or you have a sale that matches possible fraud flags. Take those parameters and then send an alert to somebody. I love the idea of hooking into Stream to add that kind of support.

FRANKIE: Yeah, totally, that’s a really cool idea.

PIPPIN: Hopefully at some point in the near future that’s something I’m going to be working on. It would be fun.

FRANKIE: Awesome.

PIPPIN: I have a question about Stream. I’m curious. Okay. Here’s a quick scenario first. Let’s say you have a large membership website that is all based around user accounts.

BRAD: Let’s say your name is Pippin Williamson.

PIPPIN: No, let’s say your name is Jonathan Williamson. You run the website my brother has.

BRAD: Ah, okay.

PIPPIN: For example, my brother runs a website that has 6,000 to 7,000 active subscribers log in constantly every day. The entire site is membership. Tons and tons of content, as well as tons of publicly submitted content, which is all then stored as posts. Are there performance concerns when you have that much stuff happening with logged in users?

Obviously there’s the natural decrease in performance you’re going to have simply based on that much content being created, being delivered, etc. But I guess what I’m asking is, what have you guys done with Stream to help mitigate possible performance concerns simply because of how you’re logging everything? I mean, because if you’re logging too much data, do you ever run into where you bog down the database? I’ve played with it, and I didn’t see any issues with that.

FRANKIE: Yeah, so —

PIPPIN: What I’m really curious is how did you do it.

FRANKIE: Yeah, so this is a huge — this is a really important topic and something that we are always looking to improve and want feedback from. One of the best pieces of feedback we got was actually from Jason Cohen, the founder of WP Engine.

PIPPIN: Nice.

FRANKIE: We were talking with him in Austin, at WordCamp Austin, and we were talking to him specifically about performance and things like that. We were talking about how Stream, you know, it’s monitoring database changes, right? So when there’s a database change that happens, that’s when Stream makes a log to let you know that it happened.

I guess the principle is that a database write is happening anyway. And so what Stream is essentially doing is, after that writes, it’s doing another lightweight write to its own table saying that it happened. And it’s more lightweight because it doesn’t; the object isn’t nearly as big as like a post object. It’s not nearly as resource intensive, and the table is a lot more flat.

But we are interested in how can we make things even more performance conscious, so Japh and I were having a conversation with Shady, another developer on the project, and we were coming to some new conclusions because we had architected Stream in such a way that every action that happens can have a context. Well, we had originally architected it to where there could be multiple contexts. Well, to do that, we had to have a relationship table in between Stream’s main table and the metatable to be able to say, hey, there are multiple contexts available for this record row.

Then after getting a lot of user feedback and a lot of testing ourselves, we came to the conclusion that having multiple contexts for a single action, there’s never going to be a use case for that, and it doesn’t appear that there — we haven’t come across one yet. And no customer or no user has said that they need this, and so we decided we’re going to remove that in an upcoming version. It actually eliminates another database table, so now there are only two database tables and makes the writing even quicker.

Those kinds of things are definitely a concern. I think, when you do have maybe tens of thousands of users, it’s something you need to monitor, just like you would need to monitor database performance anyway for, I think, a site that big.

PIPPIN: Of course. Right.

FRANKIE: But that would be my take on it.

BRAD: I guess, like, how many people or how many of your users have you seen where they have a ton of traffic hitting their dashboard though? That must be fairly rare. Is it?

JAPH: We had one example relatively recently where we saw a real world kind of example from one of our users. They were just getting pummeled by failed login attempts.

BRAD: Right.

JAPH: And so what Stream does probably even more than just tracking logged in users, what Stream does is track changes to your site. We actually kind of worked out that something like 95%, I think it was, of the activity being tracked by this site was failed login attempts.

FRANKIE: Yeah.

JAPH: And we thought, well, that’s not a change. I mean, it’s not ideal, but there’s other things like Brute Protect or things like that that you should be using to mitigate that, right? We actually made the executive decision to stop Stream from tracking that because it bloats the database. It kind of makes it difficult to see what else is happening in your Stream. And it’s not a change to your site.

BRAD: Right. Yeah, that makes sense.

PIPPIN: Ultimately, it might be nice to see those here and there. But if you’re seeing a ton of those, it’s really not that useful. You’ve already been; you’ve already realized now that you have an issue and that you should address it in some other means that you don’t need to register that, or you don’t need to track it.

FRANKIE: Yeah.

JAPH: Yeah.

FRANKIE: It’s like if Stream is — if 95% of what Stream is tracking is failed login attempts, which is a front-end action by a user, there’s no database write involved. Then, effectively, what Stream becomes is a failed login attempt tracker and, oh, it happens to track some other cool stuff too. And that’s not the purpose of Stream.

PIPPIN: It’s now where you want the focus.

FRANKIE: Yeah, so we — then the next version in 1.4.6, like Japh mentioned, we kind of had a pow-wow. We decided, okay, the next version we’re stripping this functionality. If people want it, you know, we’ll give them a Gist or something for developers, but it’s going to not be something that’s part of Stream anymore.

PIPPIN: Do you guys have–? I want to get into the topic, two different subjects in development now. Number one, do you guys have any developer documentation, or plans to, to help people who want to create custom login events?

Let’s say that I wanted to log some event in Easy Digital Downloads, for example. As far as I know, there’s a way to do that. But will you guys be putting together any documentation or examples that show how to do it?

FRANKIE: Yes.

JAPH: We definitely will.

PIPPIN: Cool. That would be awesome.

JAPH: There’ll be documentation coming to kind of explain how to do that, sort of just developer docs. Yeah, exactly.

PIPPIN: Yeah, yeah.

JAPH: We will definitely be doing that. We haven’t done that yet. We’ve got our — so we have our four main extensions and, in sort of the next few things that we’ll be adding to the list of extensions are connectors for some other popular plugins. And so once we have those out, that’s actually helping us flush out some of that documentation.

PIPPIN: Cool. And my other developer question for you is, as far as I know, this is public on GitHub. Are you guys actively interested in encouraging an open community development?

FRANKIE: Yeah, we definitely are. It’s been great because I think our plugin has only been out for about seven months. I think we initially launched in like the very beginning of December with like an alpha version to the public. Since then, just by last count, I’m just checking now, 22. We have 22 contributors on the project. A lot of those are X-Teamers that kind of caught the vision too and wanted to be a part, and contributed here and there. But there are a handful of folks on there that just, they fell in love with Stream too, and they wanted to do something to contribute back.

We’ve got a lot of good issues created from the community too, and not just pull requests, but just issues just saying, hey, I found a bug or, hey, I’ve got a feature enhancement idea for consideration. It’s been a big part. I think that’s what really makes us the most excited about the project, in general, is just getting other folks contributing to it because, at some point, the project becomes limited by your own … if you are so worried about, you know, doing every little thing in a closed little box. If you open that up, I think you can reach further and do cooler stuff.

PIPPIN: Definitely.

JAPH: Yeah. Yeah.

PIPPIN: Very cool.

BRAD: How much of your guys’ time goes into Stream right now? Are you guys full time on this? How many of you are full time on this?

JAPH: Yeah, we are full time on this.

FRANKIE: Yeah.

JAPH: Yeah.

FRANKIE: Yeah. Yep, yep, Japh is full time. Luke Carbis is another developer on our team who is full time. I am full time, but then I am also, technically, I’ve got other obligations with some of our VIP partners, so I jump out every now and then to talk to customers or help with other developers that are dealing with issues with some of our enterprise clients. So I guess I’m full time and then some on that stuff.

BRAD: Right. Eighty hours a week, right?

FRANKIE: Yeah, yeah, yeah. But like Japh and Luke and myself, we’re full time on Stream. We have other developers on the team that are part-time like Shady. He’s one of our developers in Cairo. And he is instrumental in creating the architecture of Stream from the early days and continues to be a force to be reckoned with because the guy is a machine. I mean, he’s one of my favorite guys to work with. And so just having guys — and Weston Ruter, who is a big contributor in WordPress 3.9. He’s been contributing. He built the WP-CLI integration into Stream. And so just having guys like even part time has been great.

PIPPIN: I just looked at — I’m actually looking through the code of the plugin right now, and I just looked at your connectors class. That’s fantastic. I love the way that it works.

FRANKIE: Awesome.

PIPPIN: That’s so simple.

FRANKIE: Yeah.

PIPPIN: At first —

FRANKIE: We try to be simple.

PIPPIN: I like the way that you guys have basically set up a white list of actions, and then you just create a call back for each one on how you want that to run.

FRANKIE: Yep.

PIPPIN: That’s really cool. Is there–? I haven’t — I originally used the plugin, I think, like the first week that you guys released it, and I haven’t used it since because I haven’t had a use case. Is there a UI for enabling and disabling connectors, or are all connectors generally considered to be enabled?

FRANKIE: Yeah, all connectors technically are enabled by default. However, there is a settings screen in a tab called exclude where you can exclude certain connectors or contexts or even actions from ever being tracked by Stream. So if you know for a fact that, you know, this is my website.

I’m going to assume that I’m Pippin for a second. I’m Pippin. I’ve got a website. I want to track everything everyone else is doing, but I don’t want to track what I’m doing. Then you could put yourself in, your user as an exclusion, so nothing that you did would be tracked.

PIPPIN: Cool. Ha-ha-ha-ha.

BRAD: Mu-ha-ha.

PIPPIN: Yeah, I’m kind of excited to play with it again now. I kind of want to throw it up on one of my sites and just — I’m generally the only person that’s on my sites, but I still want to play with it just because I think it’s super cool.

FRANKIE: Do it.

PIPPIN: Yeah, so I might be — we’ll see how it goes. I’m kind of interested in going in and looking at creating a new connector, mostly for fun.

FRANKIE: Mm-hmm, yeah.

PIPPIN: We’ll see how that goes. That’ll be cool. Brad, any other questions for the guys about Stream?

BRAD: I don’t think so, no. I think we’ve covered lots here.

PIPPIN: Cool. Why don’t we switch topics really quickly then? Frankie, I know you have contributed to WordPress Core.

FRANKIE: Mm-hmm.

PIPPIN: And, Japh, I think you have as well. Is that true?

JAPH: Yep, yep, certainly have.

PIPPIN: Cool. Why don’t you tell us real quickly what kind of contributions have you given back to WordPress Core and what’s your interest in contributing to Core?

FRANKIE: Yeah, so my contributions have been pretty minimal, but they were up my alley, which is, I was at WordCamp San Francisco last year, so that’d be 2013, and we had a contrib day. I think it was the day before. Maybe it was the day after. I don’t remember, but it was a lot of fun. It was the first time I got to sit down with some of the Core devs and, you know, because Trac is a scary place. It’s frightening and laced with all kinds of landmines. You get deathly afraid, no matter how seasoned of a developer you are. You’re looking around going what in the hell is all this. This seems like a lot of red tape.

Then once you get past that fear, that’s what I needed. And so I was able to sit down with some guys, watch them do some tickets and be like, oh, I can do this. And was able to contribute to some of like the escaping functions, some cleanup that needed to be done in Core that was kind of waiting for cleanup. So I went through, found some tickets, was able to clean up some escaping functions that were needing to be patched. That was my first experience with Core.

Any advice I could give to any developer, no matter what stage you’re in, is to not be afraid of Trac and to try to attend a WordCamp that does have a contributor day. It was hugely valuable for me, and I think it would be valuable to anyone who is interested in contributing to find a Core contrib day and go to it.

BRAD: Cool.

PIPPIN: Yeah, I would absolutely agree with that. Japh, how about you?

JAPH: Definitely. Yeah, definitely. I think it must have been for 3.4, Mike Schroder and Marko Heijnen were working on Image Editor, and making it so you didn’t have to just use GD for image stuff. You could also use Imagick. And so I helped with some of that stuff.

On that stuff in particular, a lot of the work that I was doing didn’t make it in, mainly because it was for the command line version. And the idea was to be able to do, so like if you were doing a batch resize or things like that, to be able to handle it on the command line in a single command instead of doing a call for each image and stuff like that. And basically we couldn’t guarantee that hosts would necessarily have access to all of that stuff and checking for it and all that kind of stuff.

That stuff, most of that stuff didn’t make it in, the bulk of that work. And every time I see Mike now, he’s like, oh, man, it’d be really good if we could go back and get that stuff in there. But, you know, maybe it’ll happen one day.

Then in 3.6, I contributed on the plugins screen. When you go to install a plugin, there’s a favorites tab, so you could go add a new plugin.

PIPPIN: Oh, that’s right. I remember that ticket.

JAPH: The favorites tab, basically I built a plugin that added that. There was no API call to WordPress.org at the time, and so I was essentially being … scraping, and I got an email from Otto saying my plugin had been removed because it was scraping, and that wasn’t very nice. And I said, well, how about an API. And he said, funny you should say. The reason I realized you were scraping is because I was building the API just for that. So Otto and I worked together and got the favorites screen in there.

PIPPIN: I think it was the fastest large feature I’ve ever seen built in the core. It was just amazing timing.

BRAD: Scraping will do that, right.

PIPPIN: …build a plugin.

JAPH: Well, it was such amazing timing that I just built it. Yeah.

BRAD: Yeah.

PIPPIN: Obviously we don’t know how long Otto, I mean, unless you do — we don’t know how long Otto spent writing the API and updating that. But, I mean, it was like Japh wrote the plugin, released it. The next day it was gone. And then there was a track ticket that says, hey, let’s do this. And later that night it was committed and done.

JAPH: Yeah.

BRAD: That’s amazing.

FRANKIE: Wow.

PIPPIN: It was pretty cool to watch.

JAPH: It was just amazing. Just the timing thing, I think, you know, Otto had done that, done the backend stuff. I had done the interface stuff. Then we merged it together, together, and yeah.

PIPPIN: It’s kind of a cool example of how —

JAPH: That’s my contribution to Core, anyway, and I’m hoping to get some time to do some stuff, either in 4 or 4.1 for either the WP-API or maybe some internationalization stuff.

PIPPIN: The WP-API as in the JSON API?

JAPH: Yeah.

PIPPIN: That would be cool. I played with it quite a bit, and I was actually trying to work on it actively in the early days of the API, and then I got busy, and I kind of dropped off from it.

JAPH: The same here.

PIPPIN: But I love what they’re doing with it.

BRAD: Did you guys see that —

JAPH: Yeah, well, it’s slated for the 4.1 roadmap now, so that’s pretty awesome.

BRAD: Yeah.

PIPPIN: Yeah.

BRAD: So did you guys see that email that went out about reworking the plugin screen?

PIPPIN: Yes.

FRANKIE: I did, yeah.

JAPH: Yeah.

BRAD: That was pretty — I like that the discussion got started on that because I think it is an area.

JAPH: It’s Alex Shields, right?

BRAD: What’s that?

JAPH: I think Alex is working on that, right? I was in the dev chat yesterday morning.

PIPPIN: Yes, I believe so.

JAPH: Yeah.

BRAD: I think there’s several.

JAPH: Yes, and he’s an Aussie.

BRAD: I think there’s several people working on it, actually, already.

JAPH: Yes. Yeah, there are.

BRAD: But —

JAPH: (Indiscernible).

PIPPIN: Yeah, I really can’t wait to see how that turns out. I mean, there are a so many different ways that it could go. But I love the fact that it’s getting discussed and changing because it really hasn’t changed. Well, put it this way. I’ve never seen anything different as long as I’ve used WordPress.

JAPH: I was going to say, in the meeting yesterday they said, if you look at the 2.7 plugin screen and the plugin screen now, so like they’re pretty much the same.

PIPPIN: Yeah.

JAPH: So that basically means, from what we talked about at the beginning of this podcast, that’s pretty much as long as most of us have been using WordPress.

PIPPIN: Yeah.

BRAD: It means it’s perfect, that it doesn’t need to be changed.

PIPPIN: It’s clearly perfect. Don’t change it.

FRANKIE: Well, the thing that stuck out to me the most on that discussion, and I don’t know if this will actually happen. It’s maybe more than just a rework of the design and maybe has to do with search API. But talking about re-weighting the search so that, like, plugins that have, you know, graphics or plugins that have a good ratio of closed support tickets, high activity, good ratings and recent ratings get higher up on the search results because right now it’s like, you know, fortunately, if you type in Stream into a plugin search, we’re the first one. But I know that, for a lot of other plugins, if you type in ecommerce, for instance, you know, I don’t think Easy Digital Downloads is the number one result.

PIPPIN: I don’t think I’m even remotely close to it.

FRANKIE: But if there was something more than just like keywords because sometimes plugins that maybe aren’t worthy to be the number one on the list because they haven’t been updated in two years, show up number one on the list when there is another plugin five down below it that maybe should be a the top of the list because it’s an active project.

BRAD: Right. A lot of….

PIPPIN: I would love to see the weighting happen so that let’s say that you have an old plugin that’s been at the top of the list for a long time, and it’s just kind of an old man in the game. But then a new one comes along and immediately gets 100 awesome ratings. Like that should show up really high.

FRANKIE: Right. Where’s the WordPress Panda, you know … for this.

BRAD: Yeah.

PIPPIN: I would love to see that.

BRAD: Right, right.

JAPH: They were talking about this yesterday where Alex Shields mentioned that, at the moment, you know, it’s like a MySQL backend on the search stuff, and there’s only so much they can sort of get out of that. And he was thinking, at some point, probably not for this initial change, but some point soon he might tackle changing it across to a different, more search oriented platform, which I think would be pretty exciting.

FRANKIE: Yes.

JAPH: And that’s actually even something that we’re talking about doing with Stream. You know, a little bit of a kind of a secret, bit of information, I suppose, that we’re kind of working on a hosted platform for Stream so that you can host your activity loads in the cloud. And one of the advantages for that is better search.

FRANKIE: Mm-hmm.

PIPPIN: That would be cool.

JAPH: Yeah, yeah.

BRAD: Interesting. Yeah, so there’s quite a discussion already going on under Alex’s post on Make, on the Make blog, make.wordpress.org. Yeah, we’ll link that up in the show notes. And so if anybody is interested in taking part in that discussion, hop right in there.

We were all at WordCamp Miami.

FRANKIE: Yes.

BRAD: Maybe we should just have a little — what did you guys think of that?

FRANKIE: I had a great time. It was like, wow, that campus was beautiful, right?

BRAD: Oh, my God.

JAPH: Yeah.

BRAD: Amazing. It was such an amazing venue, man.

JAPH: How would you get work done?

BRAD: You didn’t get any work done? Isn’t that like the sign of a great conference? I didn’t get any work done.

JAPH: No, I just mean, like, how would you if you went to that university? You’d be sitting there all the time just going, I’m just going to have a coffee by the water here.

FRANKIE: Well, it’s funny because I was talking to a local, and I said, yeah, we’re at this conference at University of Miami. And she goes, oh, yeah, University of Miami where you go to work on your tan. So apparently it’s like a local saying is the students there don’t work very hard, so.

BRAD: I could see that. Just like the venue itself, like the building itself, like the way the conference rooms were set up, and then they had that nice hallway with the couches outside. I thought it was just like —

FRANKIE: It was excellent.

BRAD: — perfect setup for….

FRANKIE: Yeah.

PIPPIN: I’ve always liked the venue that they’ve had in the previous years, which is on the same university, just a different building. It was a completely different setup, but also really excellent. I think university campuses generally work pretty well for WordCamps. I’d love to see them use more. I don’t know if they’re really hard to get a hold of and reserve or not, but WordCamp Miami has always done an excellent job with that.

JAPH: WordCamp Sidney, I think, usually tends to happen in a university campus as well, and that is actually quite good. I know that if I ran a WordCamp here in Hobart, or if someone did, the University of Tasmania is okay, but you would feel a little bit like maybe you ducked back to the ’70s for a minute if you were on the campus there.

BRAD: Sweet! You could sell that, man. Time warp. It’s like going back in time.

JAPH: Time warp WordCamp, yeah.

FRANKIE: So, Brad and Pippin, I know you both spoke at Miami, but what was your favorite talk that wasn’t your own?

JAPH: Yeah.

BRAD: Good question.

PIPPIN: Well, I usually don’t like my own that well, so that wouldn’t even be hard. I watched —

BRAD: I’d say Brian Richards’ talk was my favorite, actually.

PIPPIN: Yes. Brian Richards was excellent.

BRAD: He was so well spoken.

FRANKIE: Yes, a great talk.

BRAD: Yeah, it was just so polished.

PIPPIN: I don’t hate you. I just hate your code.

BRAD: Yeah.

JAPH: Yeah, that was it. Yeah. Yeah, I really enjoyed that one.

PIPPIN: It sounds kind of like a silly or title or whatever, but it was a really good example of how you can have a great, great plugin or a great theme or any great platform. I think WordPress is a really perfect example of it where you can have a great platform, but it has some really crappy code in it. And a lot of that is because of legacy. It’s not necessarily because they were bad developers who wrote it or whatever reason. But the point is that every project, whether it’s WordPress or a plugin, has parts that are less than beautiful to it, but that doesn’t make it a bad system. And I like that, and I like Brian worked to highlight that, including mentioning a very well known plugin in his talk.

BRAD: Right, right.

JAPH: Just slipped that in there nicely. I actually also really enjoyed Mark Jaquith’s I Can’t JavaScript, and so Can You!

BRAD: Oh, man.

PIPPIN: I was really sad I didn’t get to go to it.

BRAD: Yeah, totally. Pippin and I were on the podcasting.

PIPPIN: Because that was during our podcasting panel.

BRAD: Yeah, the podcasting panel next door. We could hear you guys in the other room, and we were like, oh, man, they’re having such a good time.

PIPPIN: I’ve seen Mark a couple of times. He’s always excellent.

JAPH: Well, don’t feel too bad, but it was awesome, and you really missed out.

PIPPIN: Thanks, Japh.

BRAD: What a jerk. Should we wrap things up?

PIPPIN: Mark is one —

BRAD: Pippin, I think it’s pretty close to time.

PIPPIN: Yeah, sure.

BRAD: Yeah.

PIPPIN: So just give a real quick shout out again to our sponsors, NinjaDemo.com. Go check them out, as well as everything else they do at NinjaForms.com or WPNinjas.com. A couple of great guys there.

If we could, if you would like to give us a review on iTunes, if you have a plugin or a theme on WordPress.org or anywhere else, we would be happy to take a look at it. Give you some feedback. Maybe even leave you a public review as a trade, as a thanks.

And we also want to thank Shawn Hesketh or @leftlane on Twitter for doing the excellent job that he did with the new Apply Filters intro —

BRAD: Yeah.

PIPPIN: — that you hear on this episode, as well as all upcoming episodes. And thanks to Frankie and Japh for coming on.

JAPH: Thank you, guys.

FRANKIE: Thanks, guys.

PIPPIN: We had a little bit of technical problems getting everybody together, but it worked out in the end.

FRANKIE: It was worth it.

BRAD: Yeah.

JAPH: Yeah.

BRAD: Totally worth it. Yeah, thanks, guys.

PIPPIN: Awesome. Thanks so much, everyone.

FRANKIE: Thank you.