Updates from John James Jacoby Toggle Comment Threads | Keyboard Shortcuts

  • John James Jacoby 6:18 pm on April 7, 2013 Permalink | Reply
    Tags:   

    We’re going to be packaging up BuddyPress 1.7 imminently. Last chance to hit us with any issues regarding:

    • Theme Compatability
    • Groups Admin
    • Users queries
    • Security issues
     
    • José Arturo Leguén Lores 6:35 pm on April 7, 2013 Permalink | Reply

      Is this version connected to Facebook in any other way so we do not need to be installing that many plugins destroying websites functionalities?

      Thanks,

    • Arturo 6:36 pm on April 7, 2013 Permalink | Reply

      Is this version connected to Facebook in any other way so we do not need to be installing that many plugins destroying websites functionalities?

      • modemlooper 4:30 pm on April 8, 2013 Permalink | Reply

        There are no login with type features included in BuddyPress

    • thatmtnman 6:38 pm on April 7, 2013 Permalink | Reply

      I’m so excited about this, i can’t even speak! I’ve been waiting for this ‘forever’!-you go guys!

    • Arturo 7:20 pm on April 12, 2013 Permalink | Reply

      Can you make this Facebook compatible so it can be integrated and we do not have to use that MANY plugins?

  • John James Jacoby 9:50 pm on January 1, 2013 Permalink | Reply
    Tags: i18n   

    Spent some time today cleaning up the many international subdomains we have at BuddyPress.org. If you are an admin for one of these sites, take a look around and make sure things aren’t too broken. A few things:

    • Cleaned up about 5k pending spam comments across all the sites. Yikes!
    • It’s using some unified header magic right now. You don’t have control over the menus yet.
    • If you want forums, just ask. I activated bbPress on a few of the recently active sites, though I didn’t make any forums for them.
    • If you’re not an admin for any language, but want to be, post here and I’ll be in touch.
    • If you’re an admin and don’t want to be anymore, speak up in case someone else wants to take it over.
    • If you want to trick out your subdomain i18n site beyond what is immediately obvious, comment here so we can figure out how to make it happen.
     
    • Diana 1:32 am on January 2, 2013 Permalink | Reply

      Hi there,
      Don’t know what is supposed to see, but br.buddypres.org got messed :( Thought menus would be great, I would like to keep some widgets areas by now so I can list links, rss from forum etc.
      Also, there is no way to set a front page anymore?

      • Remkus de Vries 9:10 am on January 2, 2013 Permalink | Reply

        I’m with Diana. Some control over the menu and frontpage would quite nice. And the option to turn off the bbPress installation on our Dutch site.

        • John James Jacoby 11:17 am on January 2, 2013 Permalink

          If you don’t want forums, I can disable them. People ask for them, you’re the first to ask not to have them. :)

          Regarding menus, it will happen soon. First step was getting off the old antiquated theme and making it match the new one. Next I’ll start building new functionality.

        • Remkus de Vries 11:21 am on January 2, 2013 Permalink

          We’ve had people ask BuddyPress questions in our regular Dutch WordPress forum. Perhaps it’s time to revisit that decision, but for now let’s indeed turn it off. Thanks!

    • Diana 1:37 am on January 2, 2013 Permalink | Reply

      ah I changed to another theme available and now I can’t change back to the one with red header?! Or the theme here is the general one? I’m quite confused now

      • John James Jacoby 11:18 am on January 2, 2013 Permalink | Reply

        Fixed. I’ve disabled all themes so you can’t break that again. :)

        • Diana 4:15 pm on January 2, 2013 Permalink

          hah ok then :) Also we don’t need forum, since we have few people supporting on regular foruns.

    • chouf1 1:04 pm on January 2, 2013 Permalink | Reply

      Hi John,
      the french blog http://fr.buddypress.org/ is no more maintained by me or somebody else since over 2 years.
      I’m daily on http://bp-fr.net providing help, tips and news to the french BP users, so i don’t want to do the same job twice.

      If no one want to take over this blog in the next days, it’s probably better to suspend it, considering that bp-fr.net after 4 years of daily service becames a reference for french users.

      Thank you ! :-)

    • Sergey 4:30 pm on January 2, 2013 Permalink | Reply

      Hello John
      I would like to have the link for a forum and to make comments here.
      Thanks. Respectfully Sergey

    • Levin 6:50 am on January 3, 2013 Permalink | Reply

      Hi jjj, I got some 404 on http://tw.buddypress.org/plugins/ , download, etc… I’ve no rights to manage the menu

      • John James Jacoby 8:43 am on January 3, 2013 Permalink | Reply

        As mentioned a few times above, the menus aren’t working yet. Any place you get a 404 is because there’s no page there on your site. I’d recommend making one. :)

    • Diana 1:30 am on January 4, 2013 Permalink | Reply

      *Suggestion*
      I think all pages in menu should be kept as pages within the site (as before), so e.g. in Plugins we can keep plugins translations, same with themes, this way we keep plugins and themes translations within the site. (Not sure how we can keep files there as we can’t upload things though)

      I would like to hear some of fellows abroad about this :)

    • yasminshamsudin 4:17 pm on January 6, 2013 Permalink | Reply

      Hi!
      I’d love to help out, but I’m a bit unsure of what is required. If I want to work on a subdomain, is it just a matter of translating the english version of buddypress.com? Or is each subdomain supposed to be run individually displaying their own themes, plugins and so forth?

    • drssay 2:55 pm on January 13, 2013 Permalink | Reply

      I am admin of http://ko.wordpress.org/. I can’t login to http://ko.buddypress.org. please help me!!

    • Vladimir Vassilev 5:42 pm on May 18, 2013 Permalink | Reply

      Hey, John,

      I’d like to manage bg.buddypress.org, as we are currently missing a buddypress community in Bulgaria, although we got some pretty active developers using it.

      Regards,

      Vladimir Vassilev

      • John James Jacoby 3:21 pm on May 21, 2013 Permalink | Reply

        Made the site, and made you the admin.

        • Vladimir Vassilev 7:46 pm on May 21, 2013 Permalink

          There seems to be some kind of a problem, as when I try to write a post, the slug goes to the main instance of buddypress.org, instead of the subdomain. The links in the admin-bar for the Bulgarian version are also messed up, as they lead to the main site. Will you check this issue, please?

  • John James Jacoby 10:12 am on December 23, 2012 Permalink | Reply
    Tags: , , search   

    Updated BuddyPress.org to use the latest bbPress trunk, which enables forum wide search.

    Finally.

    We’ll keep iterating on the templates, sidebar, and layout. Right now it’s a little wonky.

     
  • John James Jacoby 6:38 pm on December 5, 2012 Permalink | Reply
    Tags: wizard   

    In BuddyPress 1.7, we’re concentrating on simplifying as much of the experience of using BuddyPress as we can. Part of this involves removing the update/installation wizard and replacing it with simple automation; because making out-of-context decisions immediately after activating BuddyPress didn’t really make anyone happy.

    We’ll take care of the complexities and decision making, and redirect to a “What’s New” page similar to WordPress and bbPress.

    Developers: if you somehow managed to write a plugin that used the old wizard (we purposefully did not make it very extensible) consider this your warning that it is already gone in BuddyPress trunk. :)

    Those of you that really liked it, we think you’ll like the new experience even more. If not, be sure to let us know what you think and why when 1.7 is released.

     
    • Derek Perkins 12:35 am on December 7, 2012 Permalink | Reply

      Is there an expected release date?

      • John James Jacoby 5:35 am on December 7, 2012 Permalink | Reply

        Likely to beta before the end of the year or beginning of 2013 at our current pace.

        • peterpragmatist 12:43 pm on December 7, 2012 Permalink

          Should the simple install just start with Activities/Messages + Profiles?

          I am just starting to look at social networking software and BuddyPress seems to be a long way ahead of the pack. There are obviously a lot of wonderful contributors.

          From someone coming in with fresh eyes I would agree with ‘start small and add features as the community grows’. Starting with profiles and activity streams is a good idea. The other function that could be easily and usefully included with ‘activity streams’ is the ‘messages’. I would expect many people would love to see a screen where they can choose to write a short message and then just tick a box as to whether it goes as: (1) a status update (2) a group message; or (3) and individual message.

          (Messaging is the core function of a social communication tool. If the user can easily choose to go either ‘to the world’, ‘to the group’, or to an individual then this gives the right level of control to the user under the ‘networked individualism’ concept of social communities -see http://placeofsocialmedia.com/blog/2005/05/20/networked-individualism/ )

        • Saun Torby Kamagra 11:32 am on December 8, 2012 Permalink

          what about breaking the menu apart format he picture and putting them on opposite sides of the top box which is sorta empty on the right hand side as it is the end result would like what happens in a twitter profile.

      • AXJ 4:55 pm on December 23, 2012 Permalink | Reply

        Hello guys, love to be part of it!

    • peterpragmatist 1:31 pm on December 7, 2012 Permalink | Reply

      I’m thinking most of the future members of BuddyPress groups will typically be the person checking what the group is up to on the smartphone (and to a lesser extent a tablet).

      The key thing they will want is to see a list of all messages and activity since they last opened up the site. If the basic setup for BP 1.7 provides a good experience for this smartphone user then that would be such a strong foundation to start off with.

      I have just checked the smartphone app’s for twitter and facebook – very simple and straightfoward. Twitter has everything right there. Facebook has its news feed and messages on separate screens but would probably benefit from having both of these on the first screen you open (ideally with everything listed in time order + an icon to show if it is a Message v’s a Status Update).

      So my suggestion for a simple install suitable for the average buddypress user who checks on the group every day or two is:
      1. functions of Profile, Activity, Messaging;
      2. First screen listing all Activity + Messaging (with box for short text message to be either (a) posted as Activity, sent as group message, or sent as individual message);
      3. Second screen having a list of Profiles (with options to (a) make friends or (b) update your own profile.
      4. Third screen just listing some ideas of what you could add as the third screen (perhaps pictures of what a groups screen would look like, or a forum, or an events plugin etc).

      You guys know a lot more about this than me but I really believe the smartphone is where the more personalised online community is going to take off. The average user will use a desktop or laptop to initially set up their profile, list the initial contacts etc. But if you want people to come back and back to use one of these community sites every day or two then you need to make it easy for them to participate by smartphone.

      I can see how BuddyPress will allow me to do this for people with a bit of customization. But if you are doing the setup differently for BuddyPress 1.7 then I think the basic install setup should be targeted to get you a site that is immediately functional and attractive for the average smartphone user.

  • John James Jacoby 9:50 am on November 17, 2012 Permalink | Reply
    Tags: devchat, nux, pancakes   

    An agenda item for this coming weeks BuddyPress core dev chat, is determining what components we’d like to have on by default. From #4671:

    In Vancouver, the core team (minus Paul) discussed the idea of switching up the default components that BuddyPress comes activated with. I think the “all-on” approach is overwhelming for new users, can be confusing, and isn’t a very rewarding experience.

    Since every component is pretty awesome, and they all rely on each other in some way, the idea of turning components off at all is a little weird at first. Each component has strengths, weaknesses, and potential to be extended into something more than it starts as.

    I’m mostly agnostic about which components make the most sense as the default ones, but if I had to pick a favorite, I think having activity streams and profiles turned on, with everything else turned off, would make the best starter experience, and here’s why:

    • Profiles are completely missing from WordPress.
    • Friends don’t make sense without profiles.
    • Groups don’t make sense without users and profiles.
    • Settings doesn’t make sense without profiles.
    • Private messaging is useless without a profile to connect it to.
    • Forums come with bbPress now, and don’t need profiles to function at all.
    • Activity streams don’t make sense without profiles, but they can run pretty silently in the background and aggregate activity.

    It’s true that even with the XProfile component off, BuddyPress still fakes the profile experience pretty well. I’m imagining an activation experience without a setup wizard. One where when BuddyPress is activated on a new installation, the admin is greeted with a message like:

    Welcome to your new community! Check out your new profile to get started

    With a tabbed What’s New/Credits page like WordPress core has, we could easily explain what the components are, and why they might want to roll them out over time. Opening this up for discussion here, with the intention of getting this decided shortly after this weeks dev chat, and into trunk soon after.

    Join in on Wednesday (time/location in the sidebar) and help us shape the new user experience in BuddyPress 1.7.

     
    • ubernaut 9:31 pm on November 17, 2012 Permalink | Reply

      that all sounds pretty logical i just wonder if we bury the features how many people would discover them on their own.

      • John James Jacoby 12:24 pm on November 18, 2012 Permalink | Reply

        We wouldn’t be burying them any more than they already are. The goal is to be less intrusive about the way we interact with existing and established sites.

    • Tammie Lister 10:24 pm on November 19, 2012 Permalink | Reply

      I really like this idea. I think just activity and profiles is a good starting point. I don’t see this at all as burying more focusing the noise.

      I also love the idea of a new / credits screen. I love the one for BBPress and WordPress.

      • Guest 1:43 pm on November 20, 2012 Permalink | Reply

        Very awesome work everyone. I see some common solutions, and some unique approaches. The left-column navigation is something it looks like we all agree on so far.

      • raminjan 5:53 am on November 25, 2012 Permalink | Reply

        but tammie don’t you think a lots of sites today using buddypress plugin are already have forums and using all of the features that is available in previous release and the update on buddypress would really make users and their clients very un-happy?

        • ubernaut 7:23 pm on November 25, 2012 Permalink

          i don’t think anyone is suggesting this would deactivate any active features on existing BP installs. This is for new installs, which is in fact the primary goal with this release. The hope is to lower the bar of entry both in terms of theme restriction but also in terms of learning.

          It is always better to add more services/features to you user base then to turn them off both in terms of UX and customer/user service.

    • Stefan Sander 9:36 pm on November 25, 2012 Permalink | Reply

      other topic:
      Is there any hope for an useful wiki for groups?

      • Anton 11:09 pm on November 25, 2012 Permalink | Reply

        BuddyPress Docs just got a nice update, checked that out?

    • Stefan Sander 12:27 pm on November 26, 2012 Permalink | Reply

      haven’t noticed it yet, thanks a lot =)

    • James Disesso 6:58 am on November 29, 2012 Permalink | Reply

      I think we should stop classifying forums as a component, it should be a plugin with built in support. Just like that plugin that just got added to the Wp repo is a plugin without built in support. :)

      Other than that, I love this idea. But I’d go as far as suggesting we only have basic profiles (without xprofile support). What if a site doesn’t need activity? Profiles make a community, well a community, activity streams don’t. I can provide numerous examples of sites that don’t need activity streams if nessesary?

      • John James Jacoby 7:18 am on November 29, 2012 Permalink | Reply

        There’s no shortage of examples for or against any of the components, and we can change the defaults, but user profiles is one of the main things WordPress totally lacks, and I have a hunch it’s a good idea to emphasize profiles over anything else.

        • James Disesso 11:17 pm on November 29, 2012 Permalink

          John, I think profiles on by default is a good idea – WordPress doesn’t have them because its not (as Matt would say a) ‘social layer’. There’s No examples I can think of, of a social site without profiles. But activity streams are more of a case by case example. (Thus, proburbly shouldnt be on by default)

  • John James Jacoby 4:41 pm on November 13, 2012 Permalink | Reply
    Tags: , conversion, testbp.org   

    Just converted our BuddyPress test site (testbp.org) over to using bbPress 2.x for group forums.

    • 328 group forums
    • 848 topics
    • 1204 replies

    Because of the way we configured that site originally, it’s an odd setup. Suffice it to say, it works pretty well, but having hierarchically nested forums several layers deep tends to be a performance burden. This is something that the old forums suffered from too, and will be addressed in future versions of bbPress.

    That said, what’s in bbPress now should be considered final for a 2.2 release, barring any obvious bugs uncovered in the next few days.

    Once bbPress 2.2 is out, I’ll be converting the support forums at BuddyPress.org over. This will come with some significant updates to the site as a whole, as we work towards unifying some of the BuddyPress/bbPress/WordPress .org experience.

     
  • John James Jacoby 9:06 pm on August 28, 2012 Permalink | Reply
    Tags:   

    The next feature up for grabs is BuddyPress’s Theme compatibility. #3741 You’ve got to see it to believe how good it works.

    For a quick v1, I’ve literally coped templates directly from bp-default, and tweaked them to work.

    TwentyEleven:

    http://cl.ly/image/3J3v1N0Z3I3M

    TwentyTwelve:

    http://cl.ly/image/1L3s282b2z3g

    Neither theme has any modifications done to them. No child themes, no custom CSS, it’s just BuddyPress filling things in. For release, we’d polish everything up and trim out as much markup and CSS as possible.

    Please give this patch some love. It’s pretty large, and could really use some testing.

     
    • David Bisset 9:08 pm on August 28, 2012 Permalink | Reply

      Nice: “This user has been marked as a spammer.”

      • ubernaut 9:11 pm on August 28, 2012 Permalink | Reply

        yeah that’s funny how you marked yourself spammer pretty impressive you can see the issue with horizontal nav as well thanks for the update!

    • mercime 2:21 pm on August 29, 2012 Permalink | Reply

      Nice John, looking good. I especially like this:
      “Neither theme has any modifications done to them. No child themes, no custom CSS, it’s just BuddyPress filling things in. “

  • John James Jacoby 3:09 pm on March 5, 2012 Permalink | Reply
    Tags: , post types, the future   

    Since the inception of WordPress’s custom post type API, the BuddyPress core team has been bouncing ideas back and forth on how we could possibly take advantage of all the goodness it has to offer. With bbPress recently making the move last year, and BuddyPress taking advantage of that in the coming version, we’re slowly and carefully inching towards trying it out.

    A few things to consider:

    • The scalability concerns of BuddyPress on single-site WordPress become apparent much more quickly when everything is in the same set of WordPress database tables
    • Even something as straightforward as bbPress had to pull serious strings to use custom post types. Components like Groups, Friends, and Activity will be exponentially more complex.
    • By moving to custom post types, we inherit TONS of awesome features we don’t have in BuddyPress today: Trash, Import/Export, post_status, roles/caps, taxonomies, etc…
    • Migration is a pain, and writing scripts to transition each component over safely is hugely important.
    • Custom post types take much of the weight off the BuddyPress core team. It lowers the barrier of entry to get familiar with BuddyPress, and hopefully will increase both WordPress and BuddyPress core contributions.
    • Some things just aren’t meant to be custom post types. Things like user-to-user relationships, profile fields, etc… The schema for post types doesn’t really make any sense here; does it make sense to move components over just for the sake of doing it?

    Any feedback is great feedback. We really want to get as much as we can get from everyone in the WordPress community, to get a sense on the direction you want us to take for future versions. We think we’re on track, but we won’t know unless we ask. :)

    Thanks in advance for your time and thoughts.

     
    • David Bisset 3:16 pm on March 5, 2012 Permalink | Reply

      This isn’t going to be insanely helpful, but coming from someone who has used CPTs more in the past 2 months than I ever have since they came out – I can’t help but say moving to use CPTs is the future. Sounds like though there is going to be another massive wave of rebuilding and recoding BP plugins – from which i’m sure we’ll be hearing moans, groans, and debates about.

      I didn’t understand your first comment though John… about scalability. I assume w/ CPTs BuddyPress can scale better/faster/stronger (Daft Punk)? Will there be better caching, etc.?

      Would CPTs then be a BuddyPress 2.x thing?

      • Stas Sușcov 3:35 pm on March 5, 2012 Permalink | Reply

        Agree with @dimensionmedia

        Imho, the way we should put the problem regarding use of CPT in BuddyPress is not if this technology is ready/scalable, but how well it integrates into the whole codebase as a framework component.

        Since CPT are part of WordPress I don’t see why those can’t be fixed if there will be scalability problems.

        On the other side, using CPT means we will inherit a great set of already existing and stable “benefits” (features, testing tools, plugins, developers, docs).

        Imho, going with CPT is the DRY way of improving a lot of things BuddyPress lacks at this moment.

      • John James Jacoby 4:26 pm on March 5, 2012 Permalink | Reply

        The greater majority of changesets in 1.5 and 1.6 were to encapsulate things into callable functions with API’s so that if/when we want to modify the schema, plugins that are doing things as intended won’t break.

        Example: If WordPress core changes the API for WP_Query, ideally get_posts() still works the same as it did before. That’s happening now in WordPress 3.4; it’s the same goal we’d strive for, too.

      • John James Jacoby 5:41 pm on March 5, 2012 Permalink | Reply

        Scalability in terms of users to data created. Stuffing activity streams with forums and blogs and groups all into 1 set of database tables slows everything down, instead of having a custom schema purpose built to do the job efficiently for each component.

        Imagine running WordPress.com, 35 million sites, on 1 set of tables. You can’t. I know that isn’t a typical installation, but it’s a potential goal of a social network. Blogs traditionally have 1 user, social networks hopefully have more than 1. :)

        • Stas Sușcov 6:28 pm on March 5, 2012 Permalink

          I agree with the situations you described, but for average BuddyPress user, as it is for average WordPress user, scaling will mean dozens, hundreds of users.

          For the rest of the monsters, there will always exist caching technologies.

          If I remember WordPress at its early stage, I think #1 task for them was to make it appealing for end-users, not for enterprise.

    • Stas Sușcov 3:36 pm on March 5, 2012 Permalink | Reply

      Why this is tagged pizza btw? :D

    • Remkus 3:46 pm on March 5, 2012 Permalink | Reply

      IF moving forward is the main concern then it would seem to me that moving over to CPTs is the way to go. I know for a fact that this will make a lot of devs currently not looking into BuddyPress – because they’ve got to learn how it works and they don’t have the time to do it – will find it a lot easier to move once BuddyPress is built on top of CPT’s.

      • John James Jacoby 4:13 pm on March 5, 2012 Permalink | Reply

        My counter to this, is moving bbPress over to custom post types has not dramatically increased developer contributions to the project. I agree with the hope that it’s a long-term investment that will pay-off, but time will tell.

        • Remkus 4:25 pm on March 5, 2012 Permalink

          I know a lot more devs are playing with bbPress when the wouldn’t touch it before..

        • John James Jacoby 4:36 pm on March 5, 2012 Permalink

          If that’s true, I wish they’d stop by and help out on trac a bit more. :)

        • Mika Epstein (Ipstenu) 5:13 pm on March 5, 2012 Permalink

          I would be willing to put money on the drop-out from bbPress being more because of the, shall we say, narky attitude in the forums for so long. Burning out + massive shift + no apparent leadership. Lead to in-group sniping. I know that’s certainly why I use bbPress, but don’t contribute to the forums/trac (much… I have tossed out things at JJJ).

        • Marcus Sykes 5:22 pm on March 5, 2012 Permalink

          speaking personally, i think it’s a time-issue. various projects which can warrant bbpress that have already been started and we can’t jump ship until time permits. e.g. had to configure faultpress recently, when I wish I could now be using/customizing bbp :( ).

    • scribu 4:05 pm on March 5, 2012 Permalink | Reply

      I think you should move to custom post types only the components that make sense. Don’t try to shoehorn everything in just to avoid creating a few custom tables.

      • Chris Clayton 6:22 am on March 13, 2012 Permalink | Reply

        Was going to say exactly what Scribu just said, move the things that make sense. Post types are types of content, correct? Members and Groups aren’t really content… but forum posts and Activities are content.

        I personally think that better post type integration with buddypress (such as boones ticket – http://buddypress.trac.wordpress.org/ticket/3460) should be more of a priority than moving over the current stuff we have.

    • Boone Gorges 4:13 pm on March 5, 2012 Permalink | Reply

      I think what John means by ‘scalability’ is that moving to CPTs for all data types means moving more and more data into the wp_posts and wp_postmeta tables. For example, on a moderately large site, you might have 10,000 users, 500 groups, 10,000 forum posts, and 500,000 activity items (in addition to other miscellanea). Putting all this data into a single table means that the table will get into the millions, tens of millions, hundreds of millions of rows more quickly than if the pain were spread between different tables. (The problem is multiplied by about an order of magnitude for postmeta.)

      Large table size itself is not necessarily a bad thing (MySQL is optimized for that sort of thing). But keep in mind that the size issues become more pressing when we have to do a lot of tricks to fit BP data types into the WP post schema. Take something like an activity item. It currently has metadata like item_id and secondary_id. As a CPT, that data would presumably be stored in postmeta or in a taxonomy. That means costly meta_query or tax_query parameters with every bp_has_activities() call, instead of optimized WHERE clauses. It gets even more complex with other components: how do you store the recipients of a message, for instance, or data about friendships?

      As for the argument that CPTs will make BP more appealing or easier to approach for developers, I have become convinced that this isn’t really the case. Take friendships. Right now you query for friends with
      bp_has_friends( array( 'user_id' => $user_id ) )
      With CPTs, the details would depend on how we implemented the schema, but the underlying query might be something like:
      $friends = new WP_Query( array(
      'post_type' => 'bp_friends',
      'tax_query' => array(
      'relation' => 'OR',
      array(
      'taxonomy' => 'bp_friend_initiator',
      'field' => 'slug',
      'terms' => array( $user_id )
      ),
      array(
      'taxonomy' => 'bp_friend_friend',
      'field' => 'slug',
      'terms' => array( $user_id )
      )
      )
      ) )

      Is that really easier or more approachable for WP devs?

      The biggest benefit of moving some components to CPTs, IMO, is inheriting WP features and optimization. I’m thinking specifically of post-specific caching mechanisms.

      As scribu said – it will make sense for some components (forums via bbPress, maybe groups, maybe messages) but probably not for others.

      • John James Jacoby 4:23 pm on March 5, 2012 Permalink | Reply

        Exactly.

        • Yes, data can be sharded
        • Yes, import/export makes moving data around easier if you want to go multisite and move components’ data around
        • Yes, we can build awesome UI to make this invisible and mostly painless

        These are problems we can solve, but are they problems that currently need to be solved? I don’t think so, not yet anyways.

        Caching would be a huge win, but we get some of that already by way of using the WPDB class and caching our direct queries. I think we have some cache invalidation issues to work out still, but moving to CPT doesn’t make those go away, either.

      • Remkus 4:29 pm on March 5, 2012 Permalink | Reply

        I agree with you in this example, that is doesn’t make it easier persé, but it is what they know and know how to play around with. That’s all I am saying :)

        • croixhaug 6:38 pm on March 5, 2012 Permalink

          I agree with boone, the CPT querying isn’t much easier/more appealing to approach, at least not enough to entice developers. I personally fall into the non-contributing dev. I work on a few BuddyPress projects but find myself “waiting in the wings” when it comes to helping out with general BP development. It’s mostly not knowing where to start. Changing to CPTs might help a bit, but realistically that’s not what’s holding me back.

    • Marcus Sykes 4:53 pm on March 5, 2012 Permalink | Reply

      As someone that has spent the past 6-12 months doing just this to the Events Manager plugin, I feel I have something relevant to say :)

      I agree that some things could go in the posts table, but certainly not others.

      For example, I’d very strongly recommend you not add something like user activity there, or any other table that inserts transactional records of this nature, as you expect, if your site gets popular you’ll get a very bloated DB.

      Moreover, aside from what Boone says, I have my doubts as to how fast lookups will be when you’re joining tables left and right, especially for simple stuff like group memberships etc. I’m actually going to code in a way to use both in my plugin (I use a mirrored index table for searches, remenants of older versions, but has it’s uses), so I’m quite interested to see what happens when I benchmark the two on a 1-10k events site.

      Yes, there’s an argument to the fact that WP should be the ones optimising the retreival side of things, but in my case, I can’t think of many people that would like to see user booking information on the same table they store their site content.

      I should look and see what you guys did on bbPress, I had do do some dodgy stuff myself :P

      • John James Jacoby 4:56 pm on March 5, 2012 Permalink | Reply

        bbPress did some pretty straight forward things with post meta and template loading, but it took 30k lines of code and a year to get there.

        • Marcus Sykes 5:13 pm on March 5, 2012 Permalink

          same here, will have to check that out for sure then, template loading was what I was referring to as dodgy

        • John James Jacoby 5:36 pm on March 5, 2012 Permalink

          Checkout braches/plugin. There are 3 files in /bbp-includes with a bunch of awesome logic that’s meant to be reusable. Output buffers for template parts, query parsing, $post overloading, etc… :)

        • Ryan Hellyer 8:34 pm on March 5, 2012 Permalink

          Hmmm, I had no idea you had to jump through so many hoops just to get that stuff working. Thanks for putting in all the hard yards :)

    • Deryk Wenaus 5:06 pm on March 5, 2012 Permalink | Reply

      It seems the general consensus is to consider moving over components that make sense, and leave the others as they are. That makes total sense to me. And is more of an evolutionary, less jarring approach.

      As for relationships, perhaps the BP team can be the ones to finally get post and user relationships into core (http://core.trac.wordpress.org/ticket/14513). What a blessing that would be for the entire WP developer community!

      My concern is less about speed and scalability and more about codebase simplicity. Right now the BP core is a bit of a beast, and has a steep learning curve. After a transition to CPTs are made for some content, I’m guessing the code base would be simpler and easier to comprehend (putting aside the code needed for the transition), would I be wrong about this?

      • Boone Gorges 5:17 pm on March 5, 2012 Permalink | Reply

        > I’m guessing the code base would be simpler and easier to comprehend (putting aside the code needed for the transition)

        Depends on the implementation. Obviously most of the changes to the code would be in the database classes – what you call the ‘translation’ – which, depending on your point of view, may make that code easier or harder to read. (Do you prefer reading functions that concatenate SQL, or those that concatenate WP_Query args? :) ) There is also the question of template tags. We currently load the results of the DB query into “template global” – $groups_template, $activity_template, etc – and then our template tags reference values in those globals. We could conceivably leave this the way it is, which would maximize backward compatibility and wouldn’t change any of the template tag code. Alternatively, we could wipe out the structure of these globals, and turn the template tags into wrappers for the WP versions: so bp_get_group_name() is a wrapper for get_the_title(), etc. This may make code easier to read from the developer’s point of view, but would probably break a fair number of plugins and hacks that modify the template globals.

        • John James Jacoby 5:31 pm on March 5, 2012 Permalink

          Transitioning to magic methods and privatizing variables into magic getters and setters gives us a mechanism for backwards compatibility we didn’t have at our disposal with PHP4.

          I think we could transition our globals into private static instances where it’s needed, without too much pain. I fear we’re stuck with the one true $bp global forever though, since we’ve always pushed for it to be the container for anything BuddyPress related that needed to be available in global scope.

    • Marcy Capron 5:47 pm on March 5, 2012 Permalink | Reply

      Okay so I am coming at this from the perspective of building really weird things with WP/BP. Not the typical use, probably. Constant hacking at to build “minimum viable products” for startup founders.

      Our dev lead basically said that he gets the usefulness of BP such as messages and some of the other social components but that it feels so bloated (and not easy enough to turn any one part off…. so much code loaded) that he gave up (right before 1.5 I think) …. even though I begged him not to reinvent the wheel with things he needs. Much of what he likes from BP he’s sorta of re-built himself using source from BP, other WP plugins and his own library… to better suit the a la carte nature of our work.

      I, personally, am finding newer BP to be much more of a breeze (working on two small projects on my own) and the way bbPress has changed has made my life WAY easier.

      So if BP follows bbPress suit I’d be pleased. I think in general compartmentalizing features into things that can be used/not used/turned off with CPTs and such would be great. Make it more of a puzzle piece scenario where greater things can be built when chunks are combined, but get rid of how contingent each piece is on each other individually.

      p.s. unrelated – the comment system here on this wp.com blog is pretty magical ajax stuff, huh! fun to watch it load in new stuff, live, while I’m typing this…

    • Mika Epstein (Ipstenu) 8:11 pm on March 5, 2012 Permalink | Reply

      I realized I didn’t reply usefully! I blame … J-trip. Anyway, I think ‘where applicable’ it should be CPTs. That makes content easier to manage, as well as application of plugins (Akismet for example). bbPress went from ‘this thing that mostly works, if you’re savvy and have a sledgehammer’ to ‘Boom goes the dynamite! DONE!’ Groups look like the sort of thing CPTs were made for.

      The only thing I ‘dislike’ about bbPress is how many menus there are on the back end. Forums, Topics and Replies. Then there’s ‘recount’ in tools, and ‘Forums’ in settings. BuddyPress has a nice consolidation, and I wouldn’t like to lose that.

      • Ryan Hellyer 8:30 pm on March 5, 2012 Permalink | Reply

        I don’t put the bbPress menu system down to custom-post types necessarily. You can move/create menus however you want; it just requires jumping through a few hoops to achieve it. You aren’t necessarily stuck to a certain setup simply because the custom post-type defaults to something.

      • Marcus Sykes 8:48 pm on March 5, 2012 Permalink | Reply

        Good point Mika, BP will have to consider the auto-menus too. I had this problem with events/locations and had to make a few adjustments to merge them into one menu (started off with multiple, just didn’t look good). More and more plugins will run into this once everything becomes a cpt so I bet something will be done about it.

    • Joachim Kudish 8:27 pm on March 5, 2012 Permalink | Reply

      I’m very much with others on this one. I do think that a CPT conversion would be beneficial for some but not all components. It would make them easier to work with it and the added benefits (admin interface, trash, statuses, etc…) are definitely worth it. At the same time, as others mentioned, it doesn’t really make sense to have profile_fields stored as a CPT (maybe they could even just be a serialized array in the options table?).

      Anyways, just my 2 cents. I already use BP when needed/possible for projects and having CPTs in there would only be an added bonus/feature and bring it close to WP core functionality.

    • Foxly 7:11 pm on March 7, 2012 Permalink | Reply

      As somebody building a 1 million+ user BuddyPress site, I strongly recommend you avoid custom posts altogether and jump straight to a custom DBO (database object) class.

      1) Using CPT’s will only work for about 1/3 of the storage needs in BuddyPress, but will *double* the storage interface complexity. Developers working with your code would then need to learn how to use two different data interface paradigms, making work slower and more error prone.

      2) Using CPT’s will not significantly improve the speed of BuddyPress. The speed problems in BuddyPress are being caused by your data model and your caching implementation.

      3) Switching to CPT’s probably won’t help you attract more developers. Because of what it does, BuddyPress is a huge, complicated platform, and requires expert-level coding skills to make meaningful dev team contributions.

      We’ve spent thousands, and thousands, and thousands of hours solving the problems you’re currently trying to deal with.

      We’ve quietly built solutions for pretty much all of them.

      We’d be happy to teach you how to use them and help you migrate your code over. And yes, *our stuff will work* on the fragmented db setup buddypress.org runs on.

      Although its possible to do pretty much anything with [insert list of random WordPress features], doing it for a couple of million users is a completely different story. Our solutions are designed to work at the *million user* scale.

      Caching: http://code.google.com/p/buddypress-media/source/browse/bp_media/trunk/core/cache/class.memory.cache.php

      Why use WP’s incredibly limited built-in caching when you can use BPM_cache to interface with APC and Memcached *simultaneously*, along with full namespacing support.

      Database Interface: http://code.google.com/p/buddypress-media/source/browse/#svn%2Fbp_media%2Ftrunk%2Fcore%2Fdatabase

      The most powerful WP/BP database class ever written. Fully object-oriented, to the point where developers need little if any knowledge of SQL. Immune to all known SQL-injection attacks, with strong-typing and full typecasting between PHP and SQL data types. Supports transactions. Full unit tests with 100% code coverage.

      Docs: http://code.google.com/p/buddypress-media/wiki/DOCS_BPM_db_top

      Data storage classes:

      Imagine if building a massive data silo was as simple as defining an array. Everything else, from creating the DB table to implementing a writeback cache with dictionary support to data access functions was automatically done for you.

      http://code.google.com/p/buddypress-media/source/browse/bp_media/trunk/core/page_modules/class.page.module.manager.php

      The base class:

      http://code.google.com/p/buddypress-media/source/browse/bp_media/trunk/core/base_classes/abstract.class.module.manager.php

      And full docs:

      http://code.google.com/p/buddypress-media/wiki/DOCS_BPM_cache_smallCache

      BuddyPress abstraction API:

      http://code.google.com/p/buddypress-media/source/browse/bp_media/trunk/core/abstraction/class.bp.abstraction.php

      Just by 0b10 cents.

      ^F^

      • Warzan 10:28 am on March 8, 2012 Permalink | Reply

        I started reading this thinking your getting very cocky these days @foxly ;o) But to be fair, you do have a point.

        We run probably one of the larger and more busy implementations, and for us speed has always been about caching and cloudfront. We opted for W3TC but never got it to play well with BP – Heck i even see a ticket about caching issues with forums allocated to 1.6 so hopefully it will be resolved.

        CPT while nice for factoring content are probably best left for that ‘content’ – the social side is 99% noise and probably is best served within its own optimised database structure.

        Currently I don’t believe CPT have matured enough for them to be considered as the basis of ‘Apps’ UMBRACO has a fantastic framework under the hood and is already where wordpress is rapidly heading, but its back end allows you more flexibility in the presentation of its ‘post (data) types’ making it easier for the user to distinguish between content, verses default data, verses collected data etc.

        Back to Caching

        It has to be said though that while wordpress is pretty scalable these days, buddypress is not so mature in that respect.

        We have struggled with the design/development decisions taken on this project such as the dumping of default themes etc to the point where upgrades become nightmares. (We have had to fire up a project of its own to basically start from scratch with the existing database)

        I wonder if the prospect of ‘shiny new features’ sometimes takes a little precedence over what a social network is supposed to do.

        In case anyone in the development team has forgot or need a little reminder let me give you a little list of what most installations require:

        1) We want it to be simple for users to sign up
        2) We want users to take pride in their profiles and be interested in visiting other peoples profiles – profiles should reflect the user and what their doing and their personality
        3) It should be easy for users to leave comments and messages for each other on each others profiles, and use profile pages as a simple messaging platform
        4) Users should be able to share the stuff that interests them, by dropping it onto their profiles or each others – People share photos, videos, events, links and memories
        5) People should be able to highlight the stuff in the network so that their friends can go check it out.
        6) People should be able to find new friends and connections on the network easily and should be continuously prompted to make new friends.
        7) People should have three home pages 1) The main blog homepage 2) The main Activity Stream 3) Their Own Profile – From these spots they should get a good overview of everything.
        8) People should be able to invite their friends into the network by email, and when posting an update optionally inform their friends by email)
        8) It needs to sit on top of facebook and twitter because whatever way you swing it THEY ARE the social networks, we are just little but highly functional groups on the outside.
        9) It should scale without having to be a rocket scientist to at least handle 5M page views per month on a reasonable dedicated box.
        10) Users should be able to protect their privacy to a reasonable level and control what people see about them.

        You have to consider of the above:

        1) What does buddypress currently do well? (I’m hard pressed to say it does any of the above in any spectacular fashion)

        2) What of the above should be core functionality that people can count on? (Again we have a social network platform that doesn’t facilitate people sharing photos – can anyone see how ridiculous that is?) – Ohh and before the usual we have plugins response is deployed – plugins are one of the biggest security threats and weaknesses of the whole BP environment, you cannot be sure what you are installing, and if you think a plugin is good, then shame on you for not bringing it into the core and maintaining it properly)

        3) What has went so wrong that in 3 years we are rally no further along in any of the above, and are now debating how cool custom post types are? I fail to see how custom post types will help solve much of the above list.

        As an inside outsider (if you catch my drift) I just see the BP community fragmenting more and more, and people just not working together.

        We can put it down to developers not being paid, but perhaps its just about the rewards.

        Jeff was working on privacy then walked off citing the rewards are just not there, why did he not get more support from core? Is the privacy of data not considered a core component?

        Foxly and crew have been on an epic journey of seemingly endless development on BP media, he claims to have solutions to problems, the source code has been visible for months, so why hasn’t core either adopted it and said lets get this into core (providing it only does this and you strip out the following) or publicly just say their code is crap avoid at all costs? Again is sharing media not one of the core components of a social network?

        Even the forums are becoming fragmented, no method for searching for answers. Jeez move to a normal forum if you cant get it working, there is a requirement for eating your own dog food, but usually its a demonstration of how good something is not how broken it is!

        Your users don’t want plugins.

        We will tolerate them when it’s something a bit more specific but on the whole they are a risk we would rather not have to take… why… because unlike wordpress which is just a publishing platform, we have active users who become ‘dependent’ on the functionality and if it stops being maintained we are left in the lurch wondering how the hell we upgrade.

        Fork it and move on

        All being said this is pitched at @foxly – If BP Media can do what you say it can do and you feel that you can use your core to dramatically improve how buddypress works, then why not fork the project? Ditch the idea of BP Media being a plugin to a platform you have little say over and bundle it up as a complete Social platform in its own right? (I suppose the issue is it’s a plugin of a plugin right?)

        A final Word

        To be clear our team are massively appreciative of all the work Automatic, the BP Volunteers and the plugin developers have done. This is not an issue of individuals, but it does seem to be an issue of leadership, Buddypress will never flourish with a part-time leader, it needs full time management now as that would allow more core volunteers to be able to commit to the project, are Automatic planning on providing a full-time leader to Buddypress or does the community need to recruit one.

        Buddypress is not a social network platform, i can safely say after 3 years and 2 years of having it in a production environment (there are times when it feels) that its just, Fancy Profiles for WordPress with a Ropey Private Messaging system.

        Hopefully this isn’t dismissed as ‘just a rant’ or ‘yet another pointing out the obvious’ comment, as if it was obvious i’m sure this development blog would have topics relating to the above list aside from how cool CPT’s are ;o)

        Peace!

        • Foxly 12:50 pm on March 9, 2012 Permalink

          @Warzan

          “I started reading this thinking your getting very cocky these days @foxly ;o) But to be fair, you do have a point.”

          lol…maybe… but somebody has to get in there and shake things up … :)

          “All being said this is pitched at @foxly – If BP Media can do what you say it can do and you feel that you can use your core to dramatically improve how buddypress works, then why not fork the project? Ditch the idea of BP Media being a plugin to a platform you have little say over and bundle it up as a complete Social platform in its own right? (I suppose the issue is it’s a plugin of a plugin right?)”

          Simply put: there’s a lot more to running a successful open-source project than having fast code.

          BuddyPress has an established brand, a large user community, and a dedicated hard-working dev team that’s stuck with it for years. Creating a fork of BuddyPress would spread that energy over two different projects, resulting in duplicated work and less progress being made overall.

          Forking a project is a strategy of last-resort …only to be used when a project is abandoned by its developers or there are epic conflicts within the dev team.

          Our strategy for getting our technology moved into the BP core is:

          1) Release a working version of BP-Media to demonstrate our classes in action

          2) Collect performance metrics on a wide range of live sites to tune our algorithms

          3) Present our results to the BP team

          4) Work with the BP team to refactor the BP core to use the new classes

          ^F^

        • Warzan 12:57 pm on March 9, 2012 Permalink

          Sooooo… When’s it going to public beta? ;)

        • Foxly 2:15 pm on March 9, 2012 Permalink

          @Warzan

          Public alpha this summer, beta in the fall, but other developers can already use the parts of the platform that we’ve finished. BP-Media is a huge piece of software.

          ^F^

        • Foxly 11:42 pm on March 9, 2012 Permalink

          @Warzan

          Also, what’s your site’s URL.

          If you’ve got > 100K users, my team would be keenly interested in working with you to collect performance metrics and experiment with different methods to improve BP’s load times.

          ^F^

      • Stas Sușcov 12:18 pm on March 9, 2012 Permalink | Reply

        @Foxly
        With all respect, your long post has almost no arguments regarding the 3 points you started with.

        Ignoring the technical aspects you listed (which totally was not the case), I would really love to hear from you how exactly developers can not become attracted of a unified WP/BP API, and why CPT (even if are slower now in the BP context) cannot be improved, preserving the same old CPT API and making it just better/faster.

        Judging from your comment, we should throw all away and start building it from scratch with the tools that are better (in your opinion).

        Thanks.

        • Warzan 12:47 pm on March 9, 2012 Permalink

          I can’t vouch for the correctnes of his post or the quality of his code. But his argument is that moving to CPT’s is not going to improve the situation.

          1) It won’t be more simple
          2) It won’t be any faster
          3) It won’t attract any new developers to the platform.

          He then goes on to link extensively to his source code to describe solutions they have built for Simplicity and Speed and its all designed to work with the current platform.

          It doesn’t look to me like he suggested throwing anything away, but provided an alternative solution, rather than CPT’s.

          As regards a unified API for WP/BP they are completely different applications built for different purposes, 1) Is built to manage the publication of content the other 2) Is built to handle a social community and how it interacts with that content.

          Be careful that the lure of unification doesn’t cloud your judgement on the differences in purpose and requirements of these apps. :o )

          Now if someone would kindly give me the beef on whether @foxly code is up to snuff that would certainly shine a big light on the potential of this conversation ;o)

        • Foxly 2:04 pm on March 9, 2012 Permalink

          @Stas Sușcov

          “Ignoring the technical aspects you listed (which totally was not the case)”

          Lets start with this one.

          CPT’s are a “key”=>”value” storage system with serialized data and a dictionary table. CPT’s are great when you have a “one to many” relationship with objects that have custom data fields inside them …like a “blog post”.

          Its possible to use CPT’s to store things like “items in an online store” and even to use WP’s taxonomy features to make them searchable “find me all the blue sweaters”, but that’s not what the system is designed for.

          CPT’s can’t handle “many to many” relationships “find me all these users that are friends with all these other users”. They can’t handle data integrity rules “there can only be ONE user #17 in the database”, and they can’t handle transactions “Only add $50 to user #1′s account if we successfully removed $50 from user #2′s account”

          In summary, blindly using CPT’s because “everybody is using CPT’s” is a recipe for disaster. BuddyPress has completely different data storage needs than a blog management system.

          “I would really love to hear from you how exactly developers can not become attracted of a unified WP/BP API”

          Because it won’t be unified.

          The majority of the data BP has to manage can’t be handled using CPT’s. So the situation becomes:

          1) “BuddyPress is currently handling 100% of their data using a complicated DB interface system”

          2) “So let’s move 30% of that data to this other DB interface system”

          3) “So now we have two different systems handling our data that developers need to learn”

          4) “Profit?”

          Now, somewhere in BuddyPress is going to be a piece of code that needs to do a JOIN on data that’s in the CPT system *and* in the old system. For example: “Find me all the activity stream posts from users that are friends with user #2″

          So the BP team will need to write code that uses the old, complex system to access data that’s stored in the CPT system’s tables.

          So at this point we have 3 systems in use:

          1) The old system
          2) The CPT system
          3) The old-to-CPT bridge system

          System #3 violates the “abstraction” principle in software design. If WordPress changes anything about the way their CPT’s work, it will break BuddyPress. So now, BP has to block users from upgrading their WP installs until they can verify that WP’s CPT implementation still works properly.

          So you can see, how a simple idea like “I heard CPT’s are awesome. So I think BP should switch to CPT’s” turns into a big, messy problem.

          “and why CPT (even if are slower now in the BP context) cannot be improved, preserving the same old CPT API and making it just better/faster.”

          Because giving CPT’s the functions that BP needs would basically mean writing a SQL server, from scratch, inside of WordPress. And that’s just not something that’s necessary or practical to do.

          CPT’s are designed to be a simple, convenient way to store arbitrary data objects in WordPress. They’re not designed to replace a SQL server.

          “Judging from your comment, we should throw all away and start building it from scratch with the tools that are better (in your opinion).”

          That is correct.

          Do you still connect to the Internet on dial-up? Talk on a 1st generation iPhone? Or run your site on WordPress 2.1? Technology is temporary, and we can’t be afraid to move on.

          We’ve thrown out three times as much code as we’ve ever released:

          https://www.ohloh.net/p/buddypress-media/contributors/2079953877303961

          You can’t get attached to code. It’s just code. The real value in BuddyPress is the community we’ve built and the knowledge we’ve gained about what makes a viable social networking platform.

          ^F^

        • Foxly 2:09 pm on March 9, 2012 Permalink

          @Warzan

          I’m not sure what you mean by “up to snuff”. It has full unit tests with 100% code coverage.

          You can learn more about that here:

          http://code.google.com/p/buddypress-media/wiki/DOCS_bpm_unit_test_top

          ^F^

        • Stas Sușcov 2:59 pm on March 9, 2012 Permalink

          @foxly, If core team decides to move to CPT, I’ll jump in just to prove you that theoretical technical details you described are wrong (simply because that’s one of the ways you can see the problem).

          I’ve built applications within key-value storage and I’m pretty sure all the overhead and changes are worth the trouble.

          Once again, if it were to decide over: a hardcore social network system, or a niche easy to use and extend social network system. I would go for the second one. Always!

          But thanks for the reply, interesting read. :)

        • Boone Gorges 4:22 pm on March 9, 2012 Permalink

          @foxly – Thanks so much for jumping in here. I agree with most of what you’re saying. It is possible to make CPTs work for many-to-many relationships like those of BP content, but only through the use of wasteful and confusing taxonomy structures. (Check out this ticket for a long discussion of the issue in WP core https://core.trac.wordpress.org/ticket/14513).

          I’ve been thinking a lot over the last few days (prompted by much of the discussion here) about the value of using as many of WP’s internal tools as possible. On the one hand, using those tools means that you get upstream improvements; on the other, it also means you have to deal with upstream changes/breakage, as Foxly points out. On the one hand, you have the potential to reduce the size of your codebase; on the other, it means you have to jump through a fair number of hoops to make the core schemas work for your data. On the one hand, by using WP’s internal tools, you create more potential overlap between those developers who work on WP and those who work on BP; on the other, it’s totally possible to build your application in layers, so that the top layers (like the content loops) look very much like WP, while the underlying structure is different.

          I’m really looking forward to seeing what comes out of BP-Media’s alpha and beta, and to future collaborations between the BP-Media team and the BP core team.

        • Marcus 6:24 pm on March 9, 2012 Permalink

          What I haven’t (don’t?) seen on here is which bits should be CPT’ed discussed…. the more I think about it, the less use I see in having CPTs in the case of BP.

          CPTs are only useful in my opinion if it’ll make it easier for other plugins to hook in and do their thing. If it’s for caching, i don’t think that’s a worthwhile advantage on it’s own as you can make your own caching mechanism.

          Which components would truly benefit from having a WP Post structure? Groups is really the only one I can think of.

          Obviously a balance is needed, but I think consistency with WP (as much as possible at least) takes priority. Afterall, this is a WP plugin :)

          Whilst Foxly’s project sounds impressive (look forward to seeing it), and says his will work at the million+ scale, but I doubt the majority of BP users are aiming for that scale of things, so it’s a lot of effort to benefit a small subset of power users.

        • Foxly 9:18 pm on March 9, 2012 Permalink

          @Stas Sușcov

          “If core team decides to move to CPT, I’ll jump in just to prove you that theoretical technical details you described are wrong (simply because that’s one of the ways you can see the problem).”

          There’s no need to do that. The Finite Model Theorem (1974) basically states: “if you have a key-value store you can build any modern database structure”.

          The real question is: why would you want to do that?

          You’d effectively be competing against an open-source team that’s been at it for 17 years, that has 1.3 million lines of code behind them, and who have Facebook’s engineering staff contributing patches.

          1) Custom post types takes (literally) thousands of man-years of work and reduces it to a key-value store with a dictionary.

          2) Making CPT’s try to fill BuddyPress’ needs aims to add back much of that functionality by re-writing it in PHP …something that adds a 500% to1000% performance penalty and needlessly burns developer time battling very difficult problems that were solved by people with PhD’s forty years ago.

          If BuddyPress tried to switch to a 100% CPT implementation, I wouldn’t be surprised to see 15,000 lines of additional code needed in the BP core. Although the code would use the familiar CPT functions, the way BP uses them would be anything but simple.

          Put another way, there’s a BIG difference between knowing how to use foreach() and knowing how to use wp_db(), even though wp_db uses foreach() many, many times.

          “Once again, if it were to decide over: a hardcore social network system, or a niche easy to use and extend social network system. I would go for the second one. Always!”

          Consider this situation from a user’s point of view…

          Should I go with BuddyPress, the social networking platform that guarantees my site can never grow into a profitable business, because it’s designed for small hobby sites?

          Or should I go with Drupal, or Joomla, or Elgg, or Tiki, or BoonEx, or EngineY, or Telligent, or ImpressCMS, or Oxwall, or XOOPS, or SocialEngine, or dozens of other competing platforms.

          If BuddyPress is going to win as a social networking platform, we need to prove we can scale to the million-user level. If we fail to do this, we’ll lose the people who can make the biggest contributions to the project before they even try it …they’ll pick another platform that can scale.

        • Foxly 11:10 pm on March 9, 2012 Permalink

          @Marcus

          “What I haven’t (don’t?) seen on here is which bits should be CPT’ed discussed…. the more I think about it, the less use I see in having CPTs in the case of BP.”

          That’s because 95% of the people posting on this thread saying “use CPT’s in BP” have probably never even looked at BP’s source code.

          “which bits should be CPT’ed”

          To understand that, you need to take a high-level look at BuddyPress, its components, and the types of data that need to be stored.

          Custom Post Types are good at storing well …posts… but looking at that in data modeling terms, this would mean:

          a) an atomic data object
          b) which optionally contains a closed set of sub-objects
          c) that’s optionally part of a one-to-one, one-to-many, or many-to-one relationship with other data objects
          d) which doesn’t have a dependency relationship with other data objects
          e) and which is not updated frequently

          If any of principle a) through d) are violated, we risk creating a deadlock

          If principle e) is violated on a busy site, the system will probably start thrashing.

          Although there are algorithmic solutions to these problems, they are so, so, far beyond what’s realistic to do in BuddyPress, they’re not even worth discussing.

          ====

          BuddyPress has seven core components:

          1) Core
          2) Forums
          3) Friends
          4) Groups
          5) Members
          6) Messages
          7) Xprofile

          Core:

          It might be possible to store various configuration settings in a CPT, but WP’s config store does a perfectly acceptable job.

          BP-Media has a very advanced config class which includes an admin page engine, sanitizers, validators, and a 3rd-order keystore with caching and progressive load. We hope the BP team will eventually adopt our technology.

          Forums:

          BuddyPress’ forums are based on bbPress, which already uses CPT’s to store its posts. Our team has concerns about how this impacts the ability of bbPress to perform FULLTEXT searches of forum posts, and how this affects the performance of sites with large numbers of posts on their forums.

          Friends:

          Attempting to store a friend network graph using CPT’s would probably cripple any site with more than a few hundred users. This is because a network with N users could potentially have up to (N^2)/2 connections. Using CPT’s, this would require N rows in the datastore, and up to N^2 -1 rows in the dictionary. In other words, a site with 10,000 users could potentially require 100 million database entries.

          The current solution used in BuddyPress offers acceptable performance for most users. Our team is putting a considerable amount of research into designing a solution that works at the 1 million user level (1 trillion connections) using a sparse-matrix caching algorithm

          Members:

          It would be possible to store members’ sign-up data in a CPT entry. However, every single field in a user’s profile that needs to be searchable would require its own row in the dictionary table.

          So for example, if a user listed e-mail, firstName, lastName, country, state, city, age, programming languages, and “open source projects” …that would require 1 row in the “posts” table + 6 rows in the “dictionary” table + 1 additional row in the “dictionary” table for each “programming language” and each “open source project”.

          The BP-Media team has created two different solutions for this problem. For complex user data (such as associative arrays) that doesn’t need to be indexed, our user data class offers a 3rd-order key-value store with a persistent paged cache and strong data validation.

          For data that needs to be searchable, the BP team can use our BPM_db class to quickly create any table structure they want.

          Messages:

          It would be possible to store messages as CPT’s. However, handling messages sent to multiple recipients, flagging messages as spam, integration with groups, and system alerts would be immensely complicated.

          We think time would be better spent hardening BP’s messaging code with transactions. This easy to do using BPM_db’s native transaction support.

          Xprofile:

          It would be possible to store members’ xprofile data as CPT’s, but it would create the same problems as trying to store their sign-up data using CPT’s.

          This is a situation where BPM_db could offer a huge performance boost to BuddyPress. BPM_db can dynamically create tables in MySQL based on the fields the site admin enters in the profile setup. This allows fields to have their own column in the DB table, and as a result, be searchable.

          ====

          Overall, we’re happy that the BP dev team has gotten to the point where they’ve realized they need a database abstraction layer.

          Our team reached that point 12 months ago, but of course the stuff we’re working on is way more data-intensive. Since we created BPM_db we’ve been able to reduce the amount of code in our database classes by an average of 40%, massively cut our defect rate, and significantly improve our load times.

          We hope that the BP team realizes they need far, far more than what’s offered by CPT’s, and we hope that they’ll either fork the BPM_db class and tune it to their needs, or team-up with us to make it even better.

          ^F^

      • Marcus 10:21 am on March 10, 2012 Permalink | Reply

        @Foxly: I think you have some good points here and I agree with a lot of what you say. Groups is still the only one to me that would make any sense, but then, is it even worth the hassle vs the benefits? Relationships to the groups/members should definitely be handled on a separate table.

        Going through the list, my opinion

        1) Core – makes no sense
        2) Forums – n/a, the way it should be
        3) Friends – asking for trouble as foxly correctly stated
        4) Groups – see above
        5) Members – no, but would personally love to see more integration with WP accounts
        6) Messages – no
        7) Xprofile – same as 5

        • Erlend 11:51 am on March 12, 2012 Permalink

          If nothing else, Groups to me seems an ideal candidate for CPT based solely on the fact that I’ve practically seen no creative approach to groups styling whatsoever. Looking at all the crazy modifications people are doing using CPT, I’m hopeful the same would come true for Groups.

    • uloga 11:25 pm on March 7, 2012 Permalink | Reply

      I agree with Boone Gorges and John James Jacoby.however my opinion on the whole bp changes, it’s becoming messy’r and slower from version to version.

    • Billy 11:26 am on March 16, 2012 Permalink | Reply

      The most important thing that needs to be addressed right now is user permissions and privacy for end users…. Very essential to be able to grow in numbers of people willing to join our platform…

    • David 11:10 pm on March 16, 2012 Permalink | Reply

      As someone who heavily uses CPTs, I can say that I love when code is reused, and 6 months ago, I moved all of our vBulletin forums over to bbPress simply because it was cleaner. I’d love to see Buddypress using CPTs, but…..

      I know what a big problem that scalability thing is. We don’t even have a big site (~1,000 users). But when I moved all of that forum data, we ended up with a wp_posts table with 20,000+ rows. On my local test machine, this was REALLY laggy, especially when adding a few widgets like “Most Recent” and “Most Popular” topics to the page. Fortunately, we have a dedicated server, so the impact is hardly noticeable — maybe half a second. But this is with Buddypress and comments separated from wp_posts. What if everything was together? From a design perspective I like it, but I can’t disregard speed.

      I look at this as more of an issue that WordPress needs to handle, not Buddypress. Maybe something with the CPTs or the way they are queried needs to be rethought. I wish I had the knowledge to know what to do. I know that hardware can solve or help most scalability issues, but still, at some point throwing everything into one huge table becomes less efficient, not more.

    • Dave 6:24 pm on March 22, 2012 Permalink | Reply

      It seems like if Buddypress content were moved over to custom post types, then Buddypress classifications (groups memberships, etc) could be made custom taxonomies. Makes for a clean, elegant system.

    • Erlend 8:57 pm on March 31, 2012 Permalink | Reply

      So it’s been almost a month since this massive discussion was started. I think a lot of *potential* good came out of it, so I just wanted to drop back in to inquire whether this was continued somewhere else, or even better if there’s been some code developments related to it already. There was talk of a merge of sorts.

      • Vittorio 10:50 am on May 21, 2012 Permalink | Reply

        Any update about this topic?

    • ericslangley 8:58 pm on May 31, 2012 Permalink | Reply

      As a non-programmer I found this topic fascinating and worth reading the whole thing. I came here (through Google search) because I am building a site that will have hundreds of unique fields for each member (an hopefully millions of members) with either Custom Post Type Custom Fields or BuddyPress extended profile fields. These fields need to be manipulated and presented to the users as part of the profile page and other pages on the site.

      I am testing using Custom Fields using a plug in. Going this route would make them difficult to integrate with the BuddyPress profile page? Connecting them to the members profile?

      I am also testing Buddypress Extended Fields but, as @foxly noted, I need image capability. Something lacking in Extended Profiles. Though there is this fairly recent hack; http://alextheafrican.wordpress.com/2012/03/10/how-to-add-an-image-field-to-buddypress-extended-profile-fields/

      I’ll be curious to see how this progresses.

      @elangley

      ~eric

    • Eric Langley 1:08 pm on June 5, 2012 Permalink | Reply

      Commenting on this topic, again, as a non-programmer. Having researched the capabilities of Custom Post Types and Fields it seems there is a lot of power there and they could be used to extend a BuddyPress members profile and build sophisticated views of members data.

      For instance, some of the Custom Field plugins support repeating fields. Repeating fields can be used to account for member’s multiple email addresses. Presently there is only one field for email. With a repeating custom field a member could add as many email addresses as they desire. Further plugins could take advantage of these email addresses for a variety of uses, such as a public email and a private email.

      Custom fields also support any type of data desired, with the ability to create more without modifying core, making WP/BP very extensible. It seems logical to include some type of CPT in BuddyPress.

      @elangley

    • OC2PS 10:51 pm on December 1, 2012 Permalink | Reply

      Not that you are changing “Friends” into private Groups, and Groups are clearly Custom Taxonomy material…it would seem “relationships” (Friends) are also conducive to CPTs…

      P.S. https://buddypress.trac.wordpress.org/ticket/4569

      • OC2PS 10:51 pm on December 1, 2012 Permalink | Reply

        I meant Now* that you are changing “Friends” into private Groups…

  • John James Jacoby 2:53 pm on March 5, 2012 Permalink | Reply
    Tags: , , , 2.1   

    Started chipping away at the admin settings and forums screens this weekend, in preparation for bbPress 2.x migration logic.

    • Moved the complicated bbPress 1.x config-file setup to settings page
    • New bbPress 1.x installs are no longer possible in BuddyPress trunk
    • Forums settings page slowly being deprecated in lieu of it being a temporary setup/migration tab only
    • Actual Forums Settings will be controlled by bbPress going forward
    • bbPress 2.1-r3773 and beyond have preliminary Group Forums setup in place

    Some todo’s:

    • bbPress 2.1 Group Forum admin and edit screens
    • Clear migration path from bbPress 1.x to 2.x
    • Improve bbPress 1.x to 2.x migration script to make sure it’s bullet proof. See #BBP1592
     
    • Erlend 10:04 pm on March 5, 2012 Permalink | Reply

      Any chance “groups to tags” conversion could make it into the importer at this stage?
      http://bbpress.org/forums/topic/feature-request-for-importer-group-to-tag

      To iterate on that a bit further, it’d be great if the importer had a simple interface that let you go through each group step by step, choosing:

      Tags to be applied to every post within that group
      Which forum (or a new one) to move the group’s posts to

      Considering some projects have hundreds of groups, it should be possible to skip this step-by-step process all together though.

    • Grant Swaim 4:30 am on August 6, 2012 Permalink | Reply

      JJJ,

      I recently heard that bbPress 2.x as group forums was going to be pushed back to the BP 1.7 release. However, with BP 1.6 RC, I stumbled onto the fact that you can install bbPress 2.x as group forums. It is not well documented but it can be done.

      This approach doesn’t give you the “Start a Topic” and “Forum Directory” links at the top. So if you are viewing a topic you have to click on the “Forum” tab to see the directory or start a new topic.

      This approach is also not leaving me with any way to kill the sidebar with forums. If you have a WP site fixed at around 1000px you really need to drop the sidebar to make it layout right. I use a Genesis theme along with their GensisConnect plugin. It has a setting to drop the sidebar with the group forums and works will with bbPress 1.x based group forums. However, it has no effect with bbPress 2.x group forums. I have tried to get some help with this from Genesis support but they seems to look at this technique as “not legit” They seem to be saying they will support bbPress 2.x group forums when it is handled by the BuddyPress installation wizard.

      So, is a slicker (setup built into the BP installation wizard) bbPress 2.x integration on the way? I also noticed with the BP Default theme I couldn’t get rid of the sidebar in forums.

      Maybe this issue will all go away with the theme work planned 1.7…

      Thanks in advance on any enlightenment on this!

      • Grant Swaim 4:37 am on August 6, 2012 Permalink | Reply

        UPDATE:

        This is the quote on when they would support bbPress 2.x based group forums:

        “If/when the group forums are converted to the bbPress plugin the BP core dev team will update the default BP theme accordingly. At that time similar changes will be made to GenesisConnect.”

  • John James Jacoby 7:45 am on February 4, 2012 Permalink | Reply
    Tags:   

    Pushed a bunch of updates through to the codex. It now matches the refreshed BuddyPress.org site, and has some extra goodies in the sidebar to let everyone know who owns and has revised what pages. Eventually I’ll add some activity stream integration in for revisions, which I think will help give credit where it’s due.

    I also enabled some custom taxonomies to help categorize the pages.

    Take a look around and report back anything that might be broken.

     
    • Chris Clayton 11:14 am on February 4, 2012 Permalink | Reply

      Awesome! Looks great!

      Though, i dont think i’m a fan of the ‘blog style’ archive pages… especially since most pages are simply lists of functions and the excerpt feature turns them into one line…

      http://codex.buddypress.org/component/activity/ – look at the “activity streams” excerpt and tell me that it’s readable. lol

      • John James Jacoby 11:51 pm on February 4, 2012 Permalink | Reply

        Good point. I’ll see if I can pretty that up a bit. Thanks!

        • Chris Clayton 10:10 am on February 6, 2012 Permalink

          Another option (a better one i think? since it has afew other benefits too) is to add a paragraph explaining the page at the beginning. i tested it out here [http://codex.buddypress.org/developer-docs/action-reference/activity-streams-actions/] and since the intro wasn’t long enough, used the more tag to hide the rest of the content from the ‘archive’ view (see the activity link above to see how it looks in archive view)

        • Paul Gibbs 11:35 am on February 6, 2012 Permalink

          I like what Chris did to the above page, but we’d have to go through and update every page.

    • John James Jacoby 11:51 pm on February 4, 2012 Permalink | Reply

      Added a pretty new header image and the most recently edited pages to the home page of the codex.

    • Ben Dunkle 11:43 pm on February 6, 2012 Permalink | Reply

      Hey, I did the rest of the icons:
      http://field2.com/finals.png

    • kim 9:15 am on March 2, 2012 Permalink | Reply

      i want it

    • Stef 10:13 am on October 18, 2012 Permalink | Reply

      Super cool! Thanks for the efforts to make our lives easier as developers.

c
compose new post
j
next post/next comment
k
previous post/previous comment
r
reply
e
edit
o
show/hide comments
t
go to top
l
go to login
h
show/hide help
shift + esc
cancel
Follow

Get every new post delivered to your Inbox.

Join 302 other followers

%d bloggers like this: