A Useful Plugin: ShowID for Post/Page/Category/Tag/Comment plugin

I find myself in every recent version of WP (and WPMu) searching for the ID numbers for various pages, posts, categories, and/or tags on a number of occasions. I’m not sure when this feature got dropped from the core, but I do remember it was at one time part of the edit post/edit page metadata. As of the latest versions the only way to find ID numbers is to actually edit the page (or post, tag, category, comment, etc.) and look for the ID value in the URL field (pictured below). Not very intuitive, in fact, ridiculous.

ShowID for Post/Page/Category/Tag/Comment plugin actually shows the ID value right from the edit section of any of these elements. Something like the following:

I am going to activate this plugin sitewide for UMW Blogs, because a number of the plugins/widgets we have actually ask for page/posts IDs to exclude pages/posts etc. from a widget, or include categories in a page. And explaining how to find this information without this plugin is just that much more difficult. I really don’t understand why this isn’t a core feature of WP given core widgets (such as the pages widgets) and a wide variety of plugins depend on ID values.

Posted in , devwpmued, plugins, Uncategorized, Wordpress, WP, wpmu, wpmu development, wpmued | 1 Comment

Libs 101

Category test

Posted in libs101 | Leave a comment

Momentum for WP as LMS building

EDUPUNKIN you LMS Image by Tom Woodward
Image credit: bionicteaching’s “Edupunking your CMS”

Maybe it’s just cause I live in a particular bubble on the internet, but over the past six months or a year there has been what seems to me like some serious momentum towards thinking through WordPress (and/or WPMu) as a serious alternative to Learning Management Systems. And posts like this interview with Kyle Jones as well as Joe Ugoretz’s tour-de-force two part series on how he is putting the idea of WordPress as a LMS into action are pretty badass. This is some amazing stuff, and I really think Kyle Jones nails what the appeal of WP as an LMS is for many with this quote from his interview at wpmu.org:

But [offering faculty and students a hands-on approach to designing their learning] is what makes using WordPress MU wonderful as a LMS: We’ve modified and tweaked it at the students’ request, making their learning space what they need it to be – not what some company says it should be.

And, on top of that, Kyle captures the engine that is driving this emerging cooperation amongst and between a distributed group of faculty, students, and technologist all over the world:

We learn from each other, we steal from each other, in the end we try to give back to those who have helped us.

That really sums up what this vision of openness is as we work through our issues, tinker with the tools, think through the implications, and share back what we’ve learned. I might be crazy, but I still have faith that through this kind of process we can take back the means of imagining our own spaces for teaching and learning from the expedients of institutional efficiency, cause it’s exactly the imagination of these spaces that is a necessary and integral part of the teaching and learning process as Joe Ugoretz’s posts make all too clear. I may be biased, but I can;t help but think what we are seeing in the educational community working with WordPress, is just one part of a larger momentum of people using a variety of tools to escape the prison house of learning that is the LMS. And that brings me to a bigger point, I really don’t think we are simply using WordPress to ape the LMS, but rather to re-imagine the ideas that under gird this design: give students ownership of their work, control over the design, and the ability to seamlessly integrate a wide variety of other tools they already use to network online. More than that, the bigger push is to put students in a pace they own and share back what they choose, an expectation that they take ownership of their work and identities online.

Paternity leave is over, and the bava is back!!!

Posted in , cms, lms, Wordpress, wordpress multi-user, wpmu, wpmu development, wpmued | Leave a comment

Tags Test

Here is a new tags test…

Posted in Uncategorized | Leave a comment

Deleting old MySQL tables across blogs and databases in WPMu

OK, so this will probably be the final installment of my “pimp your WPMu databases” series :) Part one was moving from WPMuDEV’s Multi-DB package to SharDB; part two dealt with optimizing tables across a number of databases in MySQL, and the final installation will share some SQL code, once again thanks to Gowtham, for deleting specific tables across various blogs and databases.

Ok, so here is the setup, when we started UMW Blogs we used the spam filter Spam Karma 2. It was a personal favorite of mine, and while a lot more work than Akismet, it did a pretty good job of shutting out spam. Spam karma 2 has since died, and we moved to Akismet well over a year ago now. However, for at least the first 500 or 600 blogs (maybe more) we had Spam karma 2 installed, which inserted two tables into each blog kinda like this:
wp_21_sk2_logs
wp_21_sk2_spams

Where 21 was the blog ID, so across numerous blogs and databases there are a number of blogs with two fields like those above (just a different blog ID number, say wp_581_sk2_logs) filled with spam. It would make sense to drop these tables out as part of an optimization of our databases, but the only question I had was how?

Well I went to Gowtham, the oracle, once again (I hope this well of riches doesn’t go dry for overuse :) ) and he sent me the following script for deleting all tables with _sk2_ in the name. Now I imagine very few folks have this specific issue with Spam Karma 2, so the details of this script may seem irrelevant. But if you think about it, if there is a plugin that inserts tables on numerous blogs spread across various databases, and an uninstall of that plugin doesn’t delete the tables, then such a script would be quite useful to you. Just change the list of databases from my specific setup to yours and instead of the following bit of code:
$sql_q = "SHOW TABLES LIKE '%_sk2_%'";

Put a unique series of characters between the ‘%_uniquecharacters_%’ to delete a series of tables across blogs and databases.

How freaking cool is this? I tested the script on UMW Blogs, and it worked beautifully, UMW Blogs databases just lost another half a gig of spam fat, and I’m am happy to say it’s never been healthier. No heart disease in the future of this WPMu install—though we can never rule out plugin cancer :)

Here is a text version of the script.

And here it is sans the opening and closing PHP calls:

# PHP script to find all tables, whose name contains
# the string '_sk2', in a given set of MySQL databases
# and delete them. This is a 2-step process.
# Run this script as
#
# php mysql_skarma.php > mysql_skarma.sql
#
# Then, run the following command in a terminal
#
# mysql -u USERNAME -p < mysql_skarma.sql
#
# and enter PASSWORD when prompted.
#
# First written: Gowtham, Mon, 25 Jan 2010 08:01:48 -0500
# Last modified: Gowtham, Mon, 25 Jan 2010 09:20:22 -0500

# Connect to the database
# It is expected that you will be able to connect
# to all your databases [listed below] with this
# set of credentials
$host = 'localhost';
$dbuser = 'username';
$dbpasswd = 'password';

# The act of connecting to the MySQL server
$connect = mysql_connect($host, $dbuser, $dbpasswd) or
die('MySQL Connection Error: ' .
mysql_errno() . ': ' .
mysql_error());

# List of databases
$databases = array(
"umwblogs_wpmu_0",
"umwblogs_wpmu_1",
"umwblogs_wpmu_2",
"umwblogs_wpmu_3",
"umwblogs_wpmu_4",
"umwblogs_wpmu_5",
"umwblogs_wpmu_6",
"umwblogs_wpmu_7",
"umwblogs_wpmu_8",
"umwblogs_wpmu_9",
"umwblogs_wpmu_a",
"umwblogs_wpmu_b",
"umwblogs_wpmu_c",
"umwblogs_wpmu_d",
"umwblogs_wpmu_e",
"umwblogs_wpmu_f",
"umwblogs_wpmu_global",
"umwblogs_wpmu_vip1"
);

# FOREACH_LOOP_DATABASES BEGINS
# Loop through the array, 'databases'
# Each array element will be stored in the variable 'database'
foreach ($databases as $database) {

# Connect to the database using details specified
# above - it expects that there is one username-password
# combination that can connect to all your databases
mysql_select_db($database, $connect) or
die('Database Connection Error: ' .
mysql_errno() . ': ' .
mysql_error());

# Select all tables from 'database' that have '_sk2_'
# in their name
$sql_q = "SHOW TABLES LIKE '%_sk2_%'";
$result = mysql_query($sql_q) or
die('Invalid Query: ' .
mysql_errno() . ': ' .
mysql_error());

# WHILE_LOOP BEGINS
# Loop through the list of tables from 'database'
while ($table_details = mysql_fetch_row($result)) {
$table_name = $table_details[0];

# SQL query to DROP the table
# This will be written out to a flat text [SQL] file
# to be imported into MySQL. This is necessary because
# tables with an underscore in their names cannot be
# directly deleted from PHP [to my limited knowledge]
print "DROP TABLE `$database`.`$table_name`; \n";
}
# WHILE_LOOP ENDS

}
# FOREACH_LOOP_DATABASES ENDS

# Close the connection
mysql_close($connect);

Posted in , devwpmued, MySQL, UMW Blogs, wordpress multi-user, wpmu, wpmu development, wpmudev, wpmued | Leave a comment

Changing the Oil on a Multi-Database WPMu Install

And to build on my last post about Moving from Multi-DB to SharDB on WPMu, here is a rundown on some of the work done to further optimize the multiple-databases for our WPMu at UMW Blogs.

First off, we have a plugin install called WordPress MU Sitewide Tag Pages that basically republishes every public post from around UMW Blogs into one blog, the tags blog, which is located at http://tags.umwblogs.org. This plugin has a ton of uses for us, not least of which is sitewide tags and categories, as well as feeds off those sitewide tags and categories for syndication and republishing into course sites. Another function of this blog could be a searchable archive of all the public work done. So, needless to say, this blog is important enough that we have let it run now for almost two years without pruning. And when I checked the wp_posts table of this blog in the database there was what seemed to be 99,066 posts.

And that one table was weighing in at a hefty 425 MBs, which mean it was out-of-control, and I imagine some of our recent performance and down time issues might be related, so I decided to cull this table. So after backing it up, I tweeted looking for advice on how I might delete all posts from the tags blog before a certain day, say August 15, 2009—the week before the Fall semester started this year.

And in no time at all, Michigan’s finest, Gowtham (and sgowtham on Twitter) sent me the following bit of code:

DELETE FROM wp_posts WHERE post_date < "2009-08-15";

Along with the note, “please be sure to replace the right table name in place of wp_posts though.” Which would like like this for the tags blog with the ID 1291:

DELETE FROM wp_1291_posts WHERE post_date < "2009-08-15";

So I just copy that bit of SQL code into the PHPMyAdmin editor that lets you run SQL queries for a specific database like so…

And within a minute 66,000 posts were removed, and the table was now 142 MBs.

Now, let’s stop here for a second. How sick is that? Within minutes I got a solution to my issue and deleted 66,000 posts and potentially saved UMW Blogs a couple of more crashes this coming week, from a friend on twitter who just knew what to do. How much richer am I because of this relationship? How much richer is all of UMW? It’s kinda wild to think about that. And more than that, it doesn’t stop there….

When I removed those 66,000 posts the size of the table was still showing 425 MBs, but there was now a value in overhead column of the table that had a value of 140 MBs. I had o idea how to get rd of this, so asked again in Twitter, and D’Arcy Norman tweeted me back this:

He was right, optimizing the table brought the 425 Mbs down to a slender 140 MBs, and the overhead value was flushed clean. So this got me thinking, hmmmm, what if I could run a script and optimize every table in every database? I mean this site has been running non-stop for almost three years, and has been a work horse. How about giving UMW Blogs an “oil change”—to use Gowtham’s analogy which works beautifully. So, when I tweeted about that optimization question, Gowtham once again sent me a message, and after I gave him the naming conventions of my 18 databases on UWM Blogs, wham, I had a PHP script to optimize every table in UMW Blogs.

People, are you getting the point here? Gowtham is an Engineering Physics grad, a hell of a photographer too, but he knows his shit. And he was willing to share that will me in all of about a few minutes the first time. But for the optimization script, he actually wrote it up and sent it to me via email. I don;t know how long that took him, but it would have taken me hours and hours of research and learning to figure out I could do it. And hours more to beg someone who knew at UMW to write it for me (if that person existed). Well, this process was a matter of minutes.

And, Gowtham not only sent me the SQL Optimization script, but was more than cool with me sharing it, so here is the code to the script as a txt file.

And here it is copied below sans opening and closing PHP calls.

# PHP script to optimize each table in a given set
# of MySQL databases and improve the overall performance.
# First written: Gowtham, Mon Feb 27 09:33:01 EST 2006
# Last modified: Gowtham, Sun, 24 Jan 2010 13:01:58 -0500

# Connect to the database
# It is expected that you will be able to connect
# to all your databases [listed below] with this
# set of credentials
$host = 'localhost';
$dbuser = 'USERNAME';
$dbpasswd = 'PASSWORD';

# The act of connecting to the MySQL server
$connect = mysql_connect($host, $dbuser, $dbpasswd) or
die('MySQL Connection Error: ' .
mysql_errno() . ': ' .
mysql_error());

# List of databases
$databases = array(
"umwblogs_wpmu_0",
"umwblogs_wpmu_1",
"umwblogs_wpmu_2",
"umwblogs_wpmu_3",
"umwblogs_wpmu_4",
"umwblogs_wpmu_5",
"umwblogs_wpmu_6",
"umwblogs_wpmu_7",
"umwblogs_wpmu_8",
"umwblogs_wpmu_9",
"umwblogs_wpmu_a",
"umwblogs_wpmu_b",
"umwblogs_wpmu_c",
"umwblogs_wpmu_d",
"umwblogs_wpmu_e",
"umwblogs_wpmu_f",
"umwblogs_wpmu_global",
"umwblogs_wpmu_vip1"
);

# FOREACH_LOOP_DATABASES BEGINS
# Loop through the array, 'databases'
# Each array element will be stored in the variable 'database'
foreach ($databases as $database) {

# Connect to the database using details specified
# above - it expects that there is one username-password
# combination that can connect to all your databases
mysql_select_db($database, $connect) or
die('Database Connection Error: ' .
mysql_errno() . ': ' .
mysql_error());

# Select all tables from 'database'
$sql_q = "SHOW TABLES FROM $database";
$result = mysql_query($sql_q) or
die('Invalid Query: ' .
mysql_errno() . ': ' .
mysql_error());

# WHILE_LOOP_OPTIMIZE BEGINS
# Loop through the list of tables from 'database'
while ($table_details = mysql_fetch_row($result)) {
$table_name = $table_details[0];

# Print a message to the screen - helps in debugging
echo "$database :: $table_name \n";

# SQL query to optimize the table
$sql_o = "OPTIMIZE TABLE `$database`.`$table_name`";
$optimize = mysql_query($sql_o) or
die('Invalid Query: ' .
mysql_errno() . ': ' .
mysql_error());
}
# WHILE_LOOP_OPTIMIZE ENDS

}
# FOREACH_LOOP_DATABASES BEGINS

# Close the connection
mysql_close($connect);

I put in the drop database sign-in information, uploaded it to UMW Blogs via FTP, and went to the script at http://umwblogs.org/mysql_optimize.php, and a few minutes later all of the tables in all 18 of the databases were optimized.

Is this not awesome, UMW Blogs has gotten the oil change it has been in desparate need of—and I don’t recommend waiting every 4,000 users and blogs, every 2,000 may be wiser. So, thanks to Gowtham, UMW Blogs is purring like a cat, and I really hope it stays that way.

And just to show you I have no shame, something else I saw when the databases were optimizing is that random blogs still have the Spam Karma tables in them, I would think about 500 or 600 blog tables filled with old spam. The tables are labeled wp_blogid#_sk2_logs and wp_blogid#_sk2_spams. For example: wp_21_sk2_logs and wp_21_sk2_spams. So riddle be this Batman of Gowtham, how would you find and drop all tables with _sk2_ in them across 18 databases?

I love the internet, and I can’t thank you enough Gowtham for your selfless support, people like you make this space both fun and wonder-filled.

Posted in , devwpmued, multiple databases, MySQL, oil change, UMW Blogs, wordpress multi-user, wpmu, wpmu development, wpmudev, wpmued | Leave a comment

Moving from Multi-DB to SharDB on WPMu

In the early morning hours yesterday we moved UMW Blogs from multi-db (which is a multi-database setup provided through WPMuDev Premium at a cost) to the ever so free SharDB multi-db setup, and I’m happy to say it worked. We’ve had some “unscheduled downtime” recently at UMW Blogs, and between the ever-growing traffic and a syndication/tags blog that’s all too full with 99,000 posts—it was high time to start cleaning database house. This post will take you through the switch from multi-db to SharDB, which is surprisingly simple. And the following post will be about optimizing a multiple database setup that depends heavily on syndication like UMW Blogs does.

Multi-DB –> SharDB
So, our first step was to move to Ron Rennick’s (of wpmututotials and @wpmuguru fame) SharDB setup because UMW is no longer a subscriber of WPMuDEV Premium, and given upgrades to multi-db are no longer available to us—-we were eager to be rid of it. What’s more, I’m hoping this move to SharDB (accompanied by the database optimization and tags blog clean up) will bring UMW Blogs back to a snappiness we haven’t known for a couple of months now. So here’s to hoping….

When I downloaded SharDB I expected a lot more work than there actually was. The move is rather simple, and save a hiccup or two on my end, it went smooth as silk. The first thing to do is configure the db-settings.php file. UMW Blogs is running on 16 databases (well actually 18, but that is besides the point) on one dedicated server, we don’t have several servers or multiple data centers so I think our setup was rather simple. And while we probably should consider getting another server or two some time soon, as Joss Winn suggested, for right now we’re easy.

[What follows is pretty ugly :) ]

The UMW Blogs db-settings.php configs look like this:
// If you have multiple datacenters you can come up with your own datacenter
// detection logic (php_uname?). This helps ensure the web servers try to
// connect to the nearest database servers first, then distant ones.
define( 'DATACENTER', '' );

function add_slave($read, $host, $lhost = '', $user = DB_USER, $password = DB_PASSWORD) {
global $slaves;
$slaves[] = compact('read', 'host', 'lhost', 'name', 'user', 'password');
}

/* Add your configuration here */

//Use this configuration for a hexidecimal based hash

//Ex. you have 256 databases that follow the naming convention acct_wpmuXX
//where XX is the hexidecimal hash for the blog DB

// how many characters of hexidecimal hash
$shardb_hash_length = 1;
// what is the prefix of your blog database shards (everything before the hexidecimal hash)
$shardb_prefix = 'umwblogs_wpmu_';
// set a string to be used as an internal identifier for the dataset
$shardb_dataset = 'umwblogs';
// do you want to put your primary blog (blog_id 1) in its own 'home' database?
//$enable_home_db = true;
// how many, if any, VIP databases do you have?
$num_vipdbs = 1;
// add this to set the write master read priority (default 1)
//$shardb_master_read = 99;
// add this if all of your databases are on a local server
$shardb_local_db = true;
// use this function to add a read slave host
//add_slave($read_priority, $hostname, $local_hostname, $user, $password);

// instructions for adding vip blogs at the bottom of this confg filei

/* That's all, stop editing! Happy blogging. */

I wasn’t entirely certain about all the details in the config file, so before I did the upgrade I posted a few questions on the WPMu Forums here, and Ron himself bailed me (thanks Ron!). Once I had the db-settings file squared away I uploaded it to the main directory of UMW Blogs. After that, I added two lines to the wp-config.php file:

//SharDB Settings
define(‘WPMU’, ’1′);
require_once(‘db-settings.php’);

And finally, I uploaded the dp.php file to the wp-content directory, and the shardb-admin.php file to the mu-plugins directory. (Keep in mind I had already deleted the db-config.php and db.php files that were running multi-db setup.)

Once I had everything up, I went to the homepage of UMW Blogs and got this error:

Connected to localhost:3306 but unable to select database ‘umwblogs_umwblogs’ while querying table ‘wp_domain_mapping’ (global_r)Connected to localhost:3306 but unable to select database ‘umwblogs_umwblogs’ while querying table ‘wp_site’ (global_r)Connected to localhost:3306 but unable to select database ‘umwblogs_umwblogs’ while querying table ‘wp_site’ (global_r)Connected to localhost:3306 but unable to select database ‘umwblogs_umwblogs’ while querying table ‘wp_site’ (global_r)Connected to localhost:3306 but unable to select database ‘umwblogs_umwblogs’ while querying table ‘wp_site’ (global_r)Connected to localhost:3306 but unable to select database ‘umwblogs_umwblogs’ while querying table ‘wp_site’ (global_r)No WPMU site defined on this host. If you are the owner of this site, please check Debugging WPMU for further assistance.

Turns out, multi-db does not require you to change the database name in the wp-config for the mutliple databases. so our database settings were still set to the original single database we started UMW Blogs on: umwblogs_umwblogs. Once I figure this out, I changed the db_name setting to point to our global database:
define('DB_NAME', 'umwblogs_wpmu_global');

Now this aneming convention is particualr to our setup, we have our tables named umwblogs_wpmu_global, umwblogs_wpmu_0, umwblogs_wpmu_1, umwblogs_wpmu_2, etc., up through 9, and then a through f. So our database names look like this:

umwblogs_wpmu_global
umwblogs_wpmu_0
umwblogs_wpmu_1
umwblogs_wpmu_2
umwblogs_wpmu_3
umwblogs_wpmu_4
umwblogs_wpmu_5
umwblogs_wpmu_6
umwblogs_wpmu_7
umwblogs_wpmu_8
umwblogs_wpmu_9
umwblogs_wpmu_a
umwblogs_wpmu_b
umwblogs_wpmu_c
umwblogs_wpmu_d
umwblogs_wpmu_e
umwblogs_wpmu_f
umwblogs_wpmu_vip1

Once I changed the db_name setting in wp-config, SharDB seemed to work fine on every other blog but the main blog: umwblogs.org. After a second of panic, I realized that SharDB was looking for the home blog (or Blog ID 1) in the database _wpmu_c, but I had it in the wpmu_vip1 database. Once I exported the tables from the wpmu_vip1 database into the wpmu_c database, everything worked perfectly. Put the question for me remains, why didn’t SharDB pick up the vip1 database? I had it noted in my db-settings file as follows:

// VIP DB's
if ($enable_home_db === true) {
add_vip_blog(1,'vip1'); // home blog
}

Additionally, when I was doing something in the backend, I came across this error:

Connected to localhost:3306 but unable to select database ‘umwblogs_wpmu_global’ while querying table ‘wp_sitemeta’ (global_w)

I can’t for the life of me remember where I was precisely now, but I’m sure I’ll find it again soon. I was wondering if this might have something to do with a number of global tables we added to the db-config.php file for getting BuddyPress to work with multi-db? Not sure here, kind of fishing for some help, but I know with multi-db we had issues adding global tables for BuddyPress to the global database (same goes for the domain mapping plugin table), and one way to ensure those tables were created in the global database was through the following list of code I stole from D’Arcy, and he breaks the whole thing down better than I ever could here. Now I imagine SharDB doesn;t have this issue, but just wanted to get a sense if anyone else playing with the move from MultiDb to SharDB had any ideas.

// Usage: add_global_table(TABLE_NAME)
// EX: add_global_table(‘something’);
add_global_table(‘umwblogs_wpmu_global’);
// BuddyPress
add_global_table(‘bp_activity_sitewide’);
add_global_table(‘bp_activity_user_activity’);
add_global_table(‘bp_activity_user_activity_cached’);
add_global_table(‘bp_friends’);
add_global_table(‘bp_groups’);
add_global_table(‘bp_groups_groupmeta’);
add_global_table(‘bp_groups_members’);
add_global_table(‘bp_groups_wire’);
add_global_table(‘bp_messages_messages’);
add_global_table(‘bp_messages_notices’);
add_global_table(‘bp_messages_recipients’);
add_global_table(‘bp_messages_threads’);
add_global_table(‘bp_notifications’);
add_global_table(‘bp_user_blogs’);
add_global_table(‘bp_user_blogs_blogmeta’);
add_global_table(‘bp_user_blogs_comments’);
add_global_table(‘bp_user_blogs_posts’);
add_global_table(‘bp_xprofile_data’);
add_global_table(‘bp_xprofile_fields’);
add_global_table(‘bp_xprofile_groups’);
add_global_table(‘bp_xprofile_wire’);
add_global_table(‘wp_domain_mapping’);

Other than that SharDB is up and running on UMW Blogs, an given it may be one of the most unstable WPMu sites in the world give we have over 100 plugins and 130 themes, it has been solid as a rock thus far, so fine work Ron.. But to make sure we don’t push our luck too much, now it’s time for the database optimization drill, post forthcoming.

Posted in , devwpmued, multi, multiple databases, Plugin, SharDB, UMW Blogs, Wordpress, wordpress multi-user, wpmu, wpmu development, wpmudev, wpmued | 1 Comment

Care to share?

Image care of Ryancr
Image credit: Ryancr’s “Sharing”

This semester has been a whirlwind, and while it has been great in many respects regarding the work we are doing at DTLT—more faculty and students than ever experimenting with UMW Blogs, some larger recognition, as well as a more expansive network of peers from a variety of institutions around the world—I feel one crucial element has fallen by the wayside—featuring the work out faculty and students are doing at UMW. In many ways the output has become so great that it hard to keep up with, but that’s no excuse. 

In my mind, the crux behind fostering a community is letting others know you’re reading their work, and more than that giving them some much deserved recognition for the work they’re doing through a simple system of featuring. I’ve dropped the ball in this regard, and I wouldn’t be surprised if the community suffers some as a result.

People joke about how much I blog, but in reality, blogging needs to be a central component of the work we are all doing, and it needs to focus on the work happening at our institutions, as well as elsewhere. I’m gonna commit to doing more of this over the next year, as well as getting back into the hacks and sharing them back—which has also suffered as of late, but I don’t mind that nearly as much because there are so many great folks out there doing that far better than I ever could, just look at the work from cats like Boone Gorges, Andrea and Ron, and Joss Winn—to name just a few.

And then there’s the inimitable Luke Waltzer whose recent four part post series that recaps the work he and Mikhail Gershovich have been doing with Blogs@Baruch (you can find all their development posts under the wpmued tag on cac.ophony.org here) and I have to say it is very impressive. Not only has Luke blogged the thinking behind the redesign of Blogs@Baruch, but he also wasn’t afraid to blog about some of the difficulties they’ve had with administering and maintaining the system, and for me that is key.

What is most important about the work we’re doing at our own institutions, is narrating the process so that others can benefit from our problems and successes. It’s time to move away from the myopic logic that we only talk about the successes and promise of this stuff without narrating the difficulties and problems. Fact is, if we are only concerned about how we look to the administration or our fearless “leaders” the less we truly realize the transformative power of the simple act of sharing all elements of our struggles by honestly narrating the work we do amongst peers within and beyond institutional boundaries. We’re not running ad campaigns that are pushing products, we are connecting with other people that want and need guidance and ideas for avoiding issues and generating new ideas. Therein is the power of sharing your work, which necessarily includes all the issues and failures accumulated along the way. Hats off to the crew at Blogs@Baruch, their willingness to lift the branding veil and openly share both the triumphs and the tribulations is refreshing and essential, and a true sign of caring.

Posted in , Wordpress, wpmu, wpmu development, wpmued | Leave a comment

A WordPress Plugin App Store: Commodify and die!

Well, James Farmer and company are at it again, and the latest business venture is a WordPress Plugin App store a la iPhone apps. Another pay to play solution that is asserts that “the future of WordPress is premium plugins.” This development, like most of Farmer’s moves over the last year or so with wp.mu, blogs.mu, etc. have been rather depressing for me to watch.  What we are witnessing in the WordPress community is both a crisis and a crossroads, a fork in the logic of what this open source community stands for, and in many ways the reality that the GPL license was originally imagined for (operating systems like Linux) is not cutting it for an open source, web-based application like WordPress (thank you, Martha).

The logic of a paid service for re-worked WordPress plugins that are still under GPL is not outside the GPL license, people can still charge for re-coding plugins that others have offered up freely. And, by extension, I could get a paid membership to that service and download all those plugins and distribute them freely to anyone under the conditions of that same license. Fact is, both solutions create real issues. Those people who develop plugins with the idea of making them freely available can have their work appropriated, modified and sold at a profit, and for those who do try and profit from their work can have their own plugins or themes taken and given away freely, at least after someone pays the entry fee.

So given that, why don’t a whole bunch of us pool a dollar or two and gain access to the premium plugins site, and then redistribute everything freely? It’s within the letter of the GPL law, and it would make for a far more affordable and equitable re-distribution of wealth in the community.  Well, we don’t and won’t do it because it’s an abrogation of a bigger contract, a community contract of WordPress users that I believe has formed around the idea of openness and sharing back. What we are seeing now is the attempt to commodify that logic so that themes and plugins begin to represent some form of wealth within the open source community that needs to be traded on the open market.  But in my mind it is exactly this emerging logic of open source entrepreneurs that understand applications and code as commodities that will bring down a community of users, and represent a challenge to any movement towards sharing and openness.

We can not live by the letter of a license, we must think through the implications of our actions for a community that has moved further and further away from the prevailing political logic of the open source movement, which is namely to freely share software, which in turn provides zero cost of entry and public collaboration. Additionally, it allows individuals to re-imagine the software and build on that independently. And it’s with that last point where we see the attempt to commodify a community that can only be as strong as its diversity and openness.  The more a few people try and dominate this space and control “the market” so to speak, the less open the application and the more impoverished the community becomes over time.

I’m a fan of WordPress, and I’ve been in the game for a while now. That said, I’m not a developer, I am a member of a community and a movement that sees the possibility of people openly sharing their ideas and work apart from some kind of monetary compensation of the fruits of their labor as a possibility for something different.  A new model for sharing openly out of a passion and belief in the possibilities rather than professionalizing this development as a career or job. Look what professionalization did for politics in the US, it is the wrong direction, and I think it is time for the WordPress community to take a stand on what they believe and how they will deal with this challenge. Drupal has figured out this model, and the community is tight, despite the letter of the GPL law, and that has everything to do with the people, so we need to stop hiding behind licenses and establish who we are and where we are going before the community implodes. The logic of capital and commodification will tear us apart unless we are vigilant, making money must be subordinated to sharing openly. The more we commodify, the sooner we die!

Posted in , GPL, Wordpress, wordpress multi-user, wpmu, wpmu development, wpmued | Leave a comment

Twitter on Campus

North Carolina State University has really made an impressive case for using Twitter more extensively on campus.  A wide range of departments, organizations, and clubs at NCSU are using Twitter to get announcements, events, and relevant links out to the campus community, and they created a slick aggregation space that brings all of this together cleanly.  They’ve even made the source code for the application they developed freely available to anyone who wants to use it—-major kudos to the NCSU development team.

Now we have been playing around with this idea for a while now, and it seems like we are starting to see a wide range of departments, groups, and affiliated organizations here at UMW are interested in using Twitter for announcements and the like, so—if I can convince Martha—-we are going to hack around in UMW Blogs to try and get our own aggregation point for UMW Tweets that feature news and announcements that are relevant to campus.  The site will be http://twitter.umwblogs.org, and as I see it now, we will be using the Add Link widget to have people drop off their Twitter info, and then pull it all into FeedWordPress so that we can both aggregate and publish the various Twitter streams into one site on UMW Blogs.

You may be thinking to yourself at this point, why not just use the code NCSU so graciously made available? That actually a good question, and my only response is I know nothing about PHP libraries, and rather than setting up a new instance, I’d rather see if we can’t quickly hack together a similar model using the tools we have, a space a large part of our community already is familiar with and regularly visits. If it doesn’t work out, we can always play with the code and PHP libraries I’ve been trying to avoid.

The only issue with the Add Link/FeedWordPress setting is getting the Twitter avatar to appear. I think we can hack the P2 theme to get us most of the way there, but the avatar will be looking for a Gravatar associated with an email, or an Avatar created when a user starts their UMW Blogs account. So what we need to do is make sure anyone who adds their Twitter account to http://twitter.umwblogs.org has a UMW Blogs account. I think we can do this by putting a hacked version of the Add Users/Add Link widget that requires both their UMW email (they will need to be a member of UMW Blogs to add this) as well as their Twitter URL. This will allow us to map the RSS feed in FeedWordPress from their Twitter account onto their UMW Blogs user account. Once this happens, the avatar associated with their account on UMW Blogs (either through Gravatar or the built-in avatar function in BuddyPress) will be associated with their tweets on http://twitter.umwblogs.org, and their tweets will actually link back to their Twitter account.

The more I think through this the more I see it may be better to just figure out NCSU’s setup using their source code and go from there, but I guess I’m a glutton for bad hacks.  We’ll see, but in the mean time is their anyone out their at UMW interested in experimenting on this with us? If so, add your twitter URL here, and let’s get this party started right.

Posted in , twitter, twitter. devwpmued, UMW Blogs, umwblogs, Wordpress, wordpress multi-user, wpmu, wpmu development, wpmued | 1 Comment