Server Fun

FYI, if you noticed and were wondering why my various sites have been down so much … there is a story.

I noticed lots of reboots starting this afternoon, and this evening I found that the site would only stay up for 1 minute at a time. It would reboot so much that Linode would stop trying and leave it powered off.

I filed a support ticket and then tried various rescue mode things. I fsck the disk, I did the whole chroot thing and updated all packages. The tech handling my ticket noticed the console.log was full of apache2 processes spinning up, running the VM out of memory and then kernel panicking. I configured apache2 to allow for a lower number of max processes.

When I did that, the server stayed up long enough for me to get to my home directory and do a multi-tail on every access log of every site on there. When I did, I noticed that one obscure site was getting hammered on its xmlrpc.php, to the tune of multiple hits every second from three IP addresses. This was the culprit. Three iptables DROP rules later, all this nonsense was gone.

This wasn’t the most fun evening I’ve ever had (and this shit consumed the ENTIRE evening) but it probably has a positive outcome. This Linode server has always rebooted more than I like, daily at times but is seldom up more than 2 solid weeks. That has probably always been a problem with the apache2 default configuration being more than this small VM can handle. By configuring it to have a lower max usage, that may solve the rebooting issue.

Also on:

One Million Spams

Sometime in the next 24 hours, I expect that my blog will cross an important threshold. That will be 1,000,000 spams blocked by Akismet. Thanks guys. If it took 1 second to deal with each one of those, I would have spent 11.5 days of my last decade handling them. I appreciate not having to do that.

Also on:

Back in the R.S.S.

rss-icon-truck

tl;dr – Subscribe to my shared feed of blog posts I find interesting here. Expect a mix of comic book news, digital culture and technology. You know, the same stuff as this blog and podcast.

When Google Reader shut down and many people were scrambling to migrate to another system, I didn’t. My reaction was similar to that home organization technique. I squirreled away my subscription list off somewhere, and waited until I missed it. I didn’t, not for a long time.

Eventually I came across a reference via Thomas Gideon that he is using Tiny Tiny RSS. It is a self-hosted version of a Google Reader-like RSS reader system. I was into this as 13 years ago, I used a similar style system when I first got my own hosted box.

The first complication was that I could no longer find my squirreled away subscription list. I decided that wasn’t even a big problem and I took it as an opportunity to start from complete scratch. I subscribed to a couple of things, including Thomas’ public feed from his own instance, and away I went. One thing TTRSS is very good at is feed discovery. If you find a blog post anywhere, like from someone else’s feed, and just put that post’s URL in the subscribe field it will find the right feed. It has never failed for me on any site so far. Standardized headers for that are pretty much ubiquitous now so that job is much easier than it once was.

One of the things I liked best about Google Reader is that you could star and/or share individual posts and I did both. I also subscribed to other people’s shared feeds and discovered posts and blogs to follow that way. It was a nice, virtuous cycle. TTRSS has all of that functionality, and I am publishing articles to my shared feed as well.

Another nice thing about TTRSS is that it has a pretty good Android client for reading on your phone. In fact, I prefer the phone interface to the web although I use them both depending on what I’m sitting at.

I don’t spend nearly the time reading the blogosphere as I once did, but it feels good to get back into this world. RSS and the interconnected blog world it enables is too good an ecosystem to let wither and die. Let’s prove the “RSS is dead” prognosticators wrong by

Also on:

A New SNAP Insight

Obey the POSSE
I’m still experimenting with my whole system, and I just tried a new thing with the SNAP plugin. It adds a new function under the “New” menu called “New Post to Social Networks.” If you use it, it will create a tweet/status and send it directly to all the selected networks. It won’t create a blog post, so that defeats the POSSE goals and prevents it from having a place for the activity to gather.

Still, it is an interesting option to have available. It means you can use your blog as an all purpose interface for all of your connected networks. If there is an ephemeral thing you want to push out to multiple places simultaneously and not keep a blog record of it, you can do it that way.

Also on:

This Blog Has A POSSE

Obey the POSSE

This will be a long post so I will put the TL;DR stuff right up top.

What

I am trying to reclaim my blog as the center of my online life, rather than various social media sites.

Why:

When I found out about the IndieWeb POSSE philosophy, it resonated with me. I’ve felt like this over the years, and this crystallized my thinking.

How:

I am using WordPress plugins to push my posts out to social media and Brid.gy to bring that activity back to this blog.

Background:

I first ran across the concept of POSSE (Publish Own Site, Syndicate Everywhere) in an episode of In Beta on the 5by5 podcast network. The basic idea is to set up a system where a site you own (typically a blog) is the origination point of your online activity, and from there it propagates outward to whatever social media sites you care about. This struck a chord in me, because I have watched myself following the same pattern as almost all the early 2000s era bloggers: blogging slowing or ceasing while all that activity moved to Facebook, Twitter, Google+, et al.

The concept is that by putting your site as the central primary point of activity, you retain ownership of everything. There are horror stories of people losing their Twitter or Facebook accounts and then losing years and years of their history in a flash. I have somewhat mitigated that problem by having a self-hosted version of ThinkUp running and faithfully gathering my social media information. (Interesting aside, Gina Trapani the developer of ThinkUp was the original cohost of In Beta.) This helps somewhat, but is a reactive rather than proactive solution. It doesn’t solve the fragmentation problem, and it doesn’t solve the “loss of blog mojo” problem.

Given that I like the idea of owning my whole stream, collecting it in a central canonical place with all activity pushing back to it, this whole thing seems like a natural fit for me. Of course, like all similar situations (think podcasting in fall 2004), there is not yet an off-the-shelf product to do this. It is time for a series of rickety Rube Goldberg devices! Yay, fun!

Current System:

This is the extremely early days of this concept, so everything is in flux. Also, I’m only a few days into this exploration so this is an ongoing research project. All of this is subject to change and certainly some parts of it will over time. This blog post itself should be an example of my own dog food being eaten. I’ll start with the activity flowing back to the blog, as this is trickier. The pushing out is pretty straightforward.

Note too that every bit of this is in the context of a self-hosted WordPress blog. The ins and outs will be different for other blogging tools.

Step 1: Webmentions
The first prerequisite for the whole thing was the trickiest bit for me, getting webmention support onto this WordPress blog. It requires installing the webmention and semantic-pingback plugins and then doing some configuration. Every profile you want to connect to your blog needs to have a link back to your blog in it, as the tools use this information for security. This page details how to do it. Learn from my mistakes and verify that you can receive webmentions via this test tool before you hook anything else up. I’d have gotten a lot of automatic coolness if I had.

Step 2: Backfeed
Backfeed is the idea of pulling the activity back to your own site. This page details the concepts and some tools. I opted to use Brid.gy because although it isn’t perfect it does pull back likes, favorites and things like that in addition to comments. I’ll discuss the ramifications of this decision later.

Go to Brid.gy and connect your target profiles. It can pull back your activity from Facebook, Twitter, Google+ and Instagram. This is simple and familiar if you have ever approved third-party apps for you accounts before. If you have things working correctly and have activity on posts that link to your blog posts, you will immediately see this activity hit your blog like magic. It goes without saying that if you want to see the magic, you should have some active posts that point to your blog before you hook this up. It will be a tad anti-climactic otherwise.

Once I got it working, I made a test post that I put on Twitter, Facebook and Google+ asking people to interact with it. The result is pretty phenomenal, you can see it on this post.

Step 3: Pushing out (The SE, Syndicate Everywhere part)
There are multiple options for this. The simplest and easiest option for most people would be to use the Social->Publicize function of the Jetpack plugin from WordPress.com. Many, possibly most, WordPress blogs already have this. I chose to go with the SNAP plugin (Social Network Auto-Poster). This is because I’d like the full text of my posts to push out. That doesn’t seem possible with Jetpack, which automatically truncates. SNAP is highly configurable and will allow you to write your own template for each connected social media site. It’s not perfect, I’ll discuss that later as well. If you are seeing this post on any social media sites, then it worked. What you see is what it did.

Problems:

For the backfeed functionality, the dependence on Brid.gy is a point of failure. I have taken all the external dependencies of social media sites and collected all that into one big external dependency. Because of the way the webmentions work, the details of the information are contained in a Brid.gy url. Although the comments live in my blog, they are not useful without this external service. That service is free, maintained by a single guy as a labor of love and subject to shutdown at any time. It might also get overloaded, destroyed or subject to any manner of mayhem. If any of that happens, the comments that pushed to my site will be useless.

Also, in my short experience the working of Brid.gy is not 100%. Some fraction, about 5-10% of the attempts to push webmentions just fail. I don’t know why, if I look at the web page for my account I see a failure message with no further details or way to retry. Apparently, that is just it. If it fails, the whole game is over. Again, if I had some control over this process I would be able to at least look at logs. As it is now, if the Brid.gy black box fails, I don’t get to look inside.

A problem with SNAP is that while it pushes to Facebook, Twitter and a lot of others in the free version, if you desire Google+ integration (which I do) it requires the paid plugin. Worse, you will not find out until after you try to hook it up (like I did) that the plugin in incompatible with two-step authentication which I do have on my Google account. The developer seems resistant to making it work with that, and this is an important thing for me. Jetpack works with two-factor authentication but somehow the SNAP developer claims it is impossible for him. For testing purposes I’m turning off two-step for now, but there is a hard decision in my future.

Future Work:

To make this work better, I’d love to see my dependency on Brid.gy replaced by one to my self-hosted ThinkUp install. ThinkUp is already crawling my social media streams and recording all my activity. It seems like a pretty small effort to write a plugin to push a webmention in just the same way that Brid.gy does. That way, although I have an external dependency in my blog it is to a thing I own. Since this whole IndieWeb thing is about control, that seems philosphically better and more consistent to me.

It would be preferential to find a system that could push posts to every social media system I want it propagated to, in exactly the manner and format I choose, without changing my security settings. Whether this is pushing existing vendors to change their tools (like adding templating to Jetpack or two-step support to SNAP) or creating new tools (ugh, not by me) if these existed and were easily available off the shelf then this whole thing would be more of a product and less of a kit car with a zillion pieces.

Final Thoughts:

I am pursuing this as an ongoing project. I like the ethos, and I like the result. Twelve years ago, I made a dozen small blog posts a day not unlike how people currently use Facebook or Twitter. There is no reason I can’t return to that. I like this blog being the center of everything and the social media posts being the second-class citizens, rather than the other way around. I have it set up that via IFTTT rules I can originate a post in Google+ and have it push to Twitter, Facebook or back to this blog. Ultimately though, that is rewarding bad behavior. Just because three years in, Google+ still does not provide a write API does not mean they should be the primary position in my life. I’ll take the hits to make this work, and will continue to post on this topic as I refine my system. I hope that just like early podcasting, people will take the rickety systems and build more solid ones so that eventually, there is just a button to push or a thing to install (or pay for) and the whole thing is done. May it be so, world without end. Amen.

Also on:

Third SNAP Test

To quote former coworkers, “There is no more realistic test environment than production.”

rp_egc-logo-150.jpg
Trying to get the template right. What will happen with links, bolding, italics, strikethrough, and other stuff.

This is the third paragraph. I am hoping that screwing around with this on a Friday night means I bug less people with this silliness. Yay, Friday night!

Also on:

Second SNAP Test

rp_egc-logo-150.jpg
Trying to get the template right. What will happen with links, bolding, italics, strikethrough, and other stuff.

This is the second paragraph. I am hoping that screwing around with this on a Friday night means I bug less people with this silliness. Yay, Friday night!

Also on:

Test From MacJournal

A while back, I bought a MacHeist bundle. As is common with those things, I was after a few specific programs but ended up getting a lot with them that I was ambivalent about. One of those was MacJournal, a journalling and blogging program I wasn’t previously familiar with. Years ago I used Ecto as my blogging tool and was quite happy with it until it succumbed to bit rot. I haven’t had an OS X based tool since then, and I have blogged ever less in the last few years. Most of my blog posts now originate somewhere else and get pushed here, either Auphonic or Google Plus.

Just as a test, I hooked up MacJournal to this blog. It did pull down my entire blog and seems to be working just fine. Having a nice offline editor for the blog might be a bit of a boost to do it more often.

New New Hosting

I switched hosting back over the Xmas holidays in an unplanned, haphazard fashion that involved doing it twice to two different hosts and burning up a lot of holiday time. I wasn’t dying to do it again, but I just did. If you see this post, you are looking at the new host. There might be slight wonkiness for a day or two, and please feel free to report via comment on this post if you do.

At the recommendation of Ken Kennedy I have switched to Linode. The upside is that for really cheap, I have full control of my own VM. It’s not shared hosting, I have a “box” that is entirely my own on which I have root. The downside of that is that exactly the same. This is not a good solution if “sudo apt-get install apache2” means nothing to you. It’s kind of a drag compared to the shared hosting Cpanel solutions that do everything for you, but is good for me and my Rube Goldbergian podcast publishing system.

I finally got tired of the poor response and throttling of the other system so now I’m in the long slow process of pulling every domain I have into Linode. At this point, I have some on Bluehost, some on Hostgator and this one here. After I solidify the process to set up the domains and get everything working (forwarding email is the sticky bit right now), then I will move them all one by one. I’ll also make the hard decision to shutter some domains that I created on a whim and then do little or nothing with. I’m trying to fight my hoarding tendencies in the physical world, I should do it in the digital world too.

For now, please comment if anything doesn’t work right. I predict death of a thousand paper cuts trying to get this all straightened out. I’d appreciate help in identifying those paper cuts.

By Popular Demand

I received a request to add a Facebook like button to the posts. I decided that if I was adding in a plugin, I might as well add one that did multiple services. Now every post gets a Facebook like, Google +1, a StumbleUpon and Tweet button. It was interesting to me to peruse recent posts and see how many already had counts under some of these services.

In social media, I’ve stopped using Twitter. I’ve just had enough of it. Most of my daily energy goes now to Google Plus. If you want to follow me on there, here is my profile. I quite enjoy the service. Anything that half-assed worked and had critical mass would have been enough to get me to switch off of Twitter. I’ll keep using Facebook because it’s where my family and old friends are but for serious stuff, it’s all G+ for me now. Until something comes along to change that.

My New Comment Policy and Thoughts on Funny Hats

For the first time in the eight year history of this weblog, I have an explicitly posted comment policy. At times I have really struggled with this. There have been moments when I have been overwhelmed by antagonists. A few examples leap to mind, usually when I make a post critical of someone with strong fan support and/or a forum or Twitter account from which to marshall people to swarm me. Once was when I dared criticism Ze Frank’s video podcast as not working right and not being good enough to be worth the trouble. Another was while the floodwaters were still in New Orleans and bodies were still floating down the street, and this blog became a nexus for anti-American hate speech. I ain’t hanging with that, and I ain’t being pulled by the strings of my own sense of fairness to punch myself in the face.

My struggle is always balancing a reverence for free speech with my reluctance to be the host of speech with pretty much no value other than to stick it to me. For this reason, I have always been loathe to just delete these comments outright, no matter how spiteful or douchey they were. That struggle is pretty much over. I’ve decided that I don’t have any obligation to be the publisher of anything anyone says and if I don’t like it, I will get rid of it. This usually boils down into the “life is too short” approach. When people’s only interest is to be a drive-by egg thrower, I’m not going to refuse to hose off my siding anymore.

Dealing with antagonistic comments is nothing new. Practically every newspaper in the country has comments that are useless because they let any form of vitriol and attack live in there with no efforts to police it. Think YouTube or Slashdot threads, and you’ll realize that many commenting systems break down quickly into a race to the bottom. Some time ago I listened to the Webcomics Weekly episode where Scott Kurtz had a conversation with Merlin Mann. Building and nurturing community was a lot of what they talked about and naturally comments and fora came up. They discussed the topic of disemvowelling (a technique created by science fiction fandom’s own Teresa Nielsen Hayden) and Merlin was against it. He said something I’ll paraphrase as “Moderate it or don’t; delete it or let it stand but don’t make your commentors wear a funny hat.” I heard that, and my first reaction was “I’m OK with funny hats.”

Here is a technique I thought up and am morally OK with but which I never actually put into practice on this blog, although I always reserve the right to do it someday.

  1. Create an email address that you control and can receive email at, but is unguessable. Some random string of 20 characters like a GUID or a digest or a random password any generating website can create for you. Keep this secret as it is really important.
  2. Set up a Gravatar using that address as the key. Set up the picture as something really stupid. A dude wearing a dunce cap, a picture of a donkey’s ass, anything that is a clear iconic indicator of disdain.
  3. Someone leaves a comment that is in the douchey grey area, a non-spam comment actually entered by a person that is a legitimate statement but also from someone not of good will – an ad hominem attacker, a drive-by mud flinger, anyone with an axe to grind but who has not put in enough karma and flight time to have the right to be as big a dick as they desire to be. Rather than approve or delete the comment as it stands, edit it so that the posting email address is your email from Step 1. Now approve it.
  4. Every time you read the offending comment, laugh at them like a monkey fighter.

This has two upsides – it allows the comment to be published as it stands while making it clear that it is recognized as being an offender of the social contract; and by editing the email address to something the poster does not know, they do not get automatic moderation for future comments. That’s always a weakness when you have WordPress configured as they almost all are to allow anyone with approved comments to skip moderation. Approve one borderline commentor and from then on they have the key to automatic posting. I have never done the above technique but I certainly could without feeling bad about it. If you want to come in my house and be a dick, you are subject to house rules. Now, I’ve just made the house rules explicitly posted.

The point to emphasize and be clear on is that disagreement with me does not trigger any of this. You can think I’m as wrong as you like. It’s aggression that is the key. Telling my I’m a dick or an idiot, particularly if that is your first ever interaction with me doesn’t stand. Ad hominem attacking of any of the other commentors will not stand. If you can’t express yourself without aggression, you’ll have to do it elsewhere. We’re following the rules of the Roadhouse here. “Be nice” and for bouncers (ie, me) “Be nice until you have to not be nice.”

Even Mike Doughty Has His Own Blog Reclamation Problems

I’m not the only one who feels that Twitter has eaten my blog. Musician Mike Doughty blogs recently about the book he’s writing, a memoir of his time in Soul Coughing and being an addict then being sober. Embedded in that is this paragraph:

Blogging, as an art form, isn’t as fun as micro-blogging. Writing on Twitter, I think, is a better form of communication on the web; I’m a fan of parameters as a creative tool. So my real blogging has suffered. I’m trying to get back on the horse, though; I’m trying to generate thoughts that take longer than three lines to express. It is, of course, a thankless struggle.

I’ve started shutting down HootSuite for hours at a time. All the criticisms I’ve made about microblogging still stand. The whole reason I’m involved in any of new media – blogging, podcasting, self-publishing – is that I want to own my own shit and control my own destiny. I’m one of the few holdouts in my circle by not wanting to carry around an always-on device buzzing constantly with social media status messages. I want to think slower, react slower, write at greater length and cogitate more deeply on issues.

Mobile Users, I Need a Favor

For folks who read this blog via any mobile platform – iPhone, iPod Touch, Android, any other handheld device, I need a favor. I’ve just this morning installed the Wapple Mobile plugin for WordPress. This is supposed to intelligently render the blog in the maximally usable form for the capabilities of all mobile platforms. I’m curious what your experience is. I don’t have any of these platforms except the kindle to test with so I’d like to hear input about how this works for you, what it looks like and how usable you find it compared to baseline. Thanks!

Update: I turned this plugin off after reports that individual posts were not readable. If this isn’t plug and play, I don’t have time for it, especially since I have no device to look at it with. Que sera. Thanks for looking at it for me, folks!

No Mr Bond, I Expect You To wp_die()!

After my argument with Alex King the other day where he defended his use of a “wp_die()” call from his WordPress plugin as being a completely appropriate thing for a plugin author to do, I got curious. I have 27 plugins on this blog, 12 active and 15 inactive. I deleted the two I had installed that Alex authored so they are not included in this count.

I did a grep on wp_die from my wp-content/plugins directory. I found 6 occurrences of it – 5 from Tantan Spam and 1 from WP DB Backup. Tantan spam is using it as the mechanism of comment spam fighting. When it has determined that the incoming comment has not proved to be from a legitimate commenter it uses wp_die to bail and not post the comment. WP DB Backup use it in the error handler when the type is “fatal”, which includes things like lacking permissions to write files or trying to download backups when not an admin user and such.

So, out of my 27 plugins only 2 use it at all and both of those are in specific transactions. I stand by my point that the use of wp_die for any plugin on an ordinary configuration error is wildly inappropriate. Because the routine that tried to load popularity contest’s configuration was ultimately called on every page load, this completely killed every single page of my blog. Alex continues to defend his code as standard procedure and the situation that I and others were in as “whacked out config” . It was the config his previous version of the plugin set up and ran with for over a year. I’m not really incensed about the error so much as the not caring, the blaming of us, refusing to accept that his logic was bad and his handling was worse, etc. Crowd Favorite is not currently my favorite, that’s for sure.

PS – All of this had me wondering exactly how hard it is to write WordPress plugins, so I fiddled with the Digest Post one to add admin pages and to get and write its options from the database. It’s not too difficult and is kind of fun. I emailed the author of that plugin and offered to either send him patches or take over as maintainer of it. We shall see.

Positive WordPress Plugin News

Last January, I tried an experiment over at Grand Strand Bloggers with the Digest Post plugin. I have a Yahoo Pipe that gathers together all of the RSS feeds for all of the blogs in the GSB blogroll. This plugin is supposed to take a feed and in automated fashion make a summary post of all the items in that feed. I set it up last January and it sorta kinda worked. It did actually collect the links and correctly create the post in fine fashion, it just didn’t fire off the way it was supposed to. I took the guts of it and rewrote it as an ecto plugin that I’ve been using (when I think about it) to do a semi-manual version of the same thing.

On Monday, I upgraded all my blogs to WordPress 2.8. I was shocked and pleasantly surprised when the Digest Post plugin actually fired Tuesday morning, making a big ass post. I was even more pleasantly surprised when it did it again today, and started up from the point the previous one had left off. At this point, I’m expecting a nice concise round up post every day with the previous 24 hours Grand Strand blog activity. That is just so nice that it might make me weep. Whatever in WordPress was making it fire between sporadically and never seems to have been fixed and now this is back on track. After the problems of the last few days, it’s nice to have a plugin I had written off spring to life and work better than ever.

Popularity Contest: WordPress Plugin Hall of Shame

Yesterday I had my first ever bad experience with a WordPress plugin auto-upgrade and it was really really bad. I did the auto-upgrade of the Popularity Contest plugin, first upgrade in a very long time. These upgrades have become so routine that I don’t much think twice about executing them any more. I clicked the link and BANG my blog stopped working. Completely. Totally. All pages, including the wp-admin pages, said:

Error: Popularity contest cannot be installed.

I had to move the plugin out of the directory in order to get anything to work again, then I had to clear my SuperCache as the non-functioning pages had been cached for some of them, like the all important front page.

This morning before work I took a few seconds to look at it, and I found some egregious code. The plugin has a get_settings() method which has this code (forgive the white space munging):

// If the DB tables are not in place, lets check to see if we can install
if (!count($settings)) {
// This checks to see if we need to install, then checks if we can install
// For the can install to work in MU the AKPC_MU_AUTOINSTALL variable must be set to 1
if (!$this->check_install() && $this->can_autoinstall()) {
$this->install();
}
$settings = $this->query_settings();

if (!count($settings)) {

// trigger_error('Popularity Contest Cannot Install', E_USER_WARNING);
wp_die('<b>Error:</b> Popularity contest cannot be installed.');
}
}

Now, this appears to have a couple of really bad problems. One, it is doing wp_die for a configuration problem! Seriously, WTF? I think that violates the contract between a plugin and the main WordPress process. If you have some sort of problem, die gracefully rather than just shutting down the whole blog. Second, it seems like my case will always trigger that die. The $settings array comes from:

select * from wp_ak_popularity_options;

I had the plugin previously installed so that it didn’t need to install but I was running all default options so that my wp_ak_popularity_options table was zero rows. At this point, the plugin decided that was such a bad problem that it needed to shut down all of WordPress including the wp-admin pages you would use to create those option records. Oh boy.

What I did to get back running was to comment out the wp_die line. At that point, the plugin actually installed and I was able to get to the settings page for it. I did a “Save” even though I had all default values just to get rows into that table. Now my table has 4 rows in it and presumably even if I do another automatic upgrade this one should keep working. This plugin is now on my watchlist, though. It’s burned me hard once.

I think for people having this problem just commenting out the wp_die line will get most or all of them back up and running. I’m not sure what the thinking was that went into this logic but it was a really terrible bit of thinking with really severe consequences. Not to the WordPress plugin author community: calling wp_die is really fricking serious. Don’t do it unless continuing to run will delete the blog. Otherwise handle your problems yourself.

Update: For bonus points in the version I have installed, the setup page gives you code to cut and paste into your template that doesn’t actually work. It tells you to use:

show_top_ranked_in_last_days($limit, $before, $after, $days = 45)

when in fact the actual function is:

akpc_most_popular_in_last_days()

The former is an internal one not available outside the plugin. The latter is the external API call that is available to your template.

Update 2: I’ve opted to remove the plugin as well as the WordPress Mobile Edition by the same guy. The author takes shutting down my blog too lightly, and defends this whole thing with “hey, it’s a beta so what do you expect?” I was installing via the Plugin GUI on my WP Admin page. If it was risky, I had no way of knowing that unless seeing a “b” in the version number was supposed to communicate that. Over on his plugin page, Alex King defends the use of the wp_die call as being reasonable. I don’t see that rendering the blog unusable is a reasonable way to deal with it, even if the configuration tables were missing. His code wasn’t even checking that, as it treated an empty table as the same as a not-created table. Bad juju.

Alex, thanks for your time in creating this plugin. I appreciate the use I got out of it for the time I did. However, my blog is important to me and I can’t have plugin upgrades shutting it down.

An Escrow System for WordPress Plugins

Over on Grand Strand Bloggers, I want to try out this plugin that automatically makes digest posts. That is perfect for what we want to do. However, the plugin I”m trying to use is really half-baked and appears abandoned. I’d think about adding to this with our needs at GSB if there was a way to do so.

That plugin also uses the WordPress cron functionality. I have installed on several blogs the WP-Crontrol plugin to give better access to this system. However, it seems like WP has had API drift that makes it no longer work right. I can see the cron jobs but no longer edit them or execute them like I used to be able to. I’d also be willing to work on that one too.

Is there a formal process for taking over abandoned WP plugins? Suppose I have a patch to submit and the original developer is no longer involved or completely incommunicado. Can someone from wordpress.org eventually give me access to SVN or commit patches for me? Or do I have to take their code, fork it and just work from there? It would probably be nicer to do it down the path of the original plugin, so that everyone’s automatic updaters allow them to get the newer versions. Still, anything is better than nothing.

WordPress 2.7

I upgraded this blog to WordPress 2.7 tonight. It took me literally 3 minutes, and that includes downloading the backup files. I was using the WordPress Automatic Updater plugin, but apparently this is the last time I’ll need that because the functionality has been rolled into WordPress itself. This is all to the good. It’s not like WordPress upgrades were ever that burdensome but being able to do this all with a click or three really gets rid of all the procrastination possibilities, which is really helpful when security fixes come out.

I’ve only had 20 minutes of run time with version 2.7 but so far I’m liking it.

Tan Tan Noodles Simple Spam Filter for WordPress

I’m experimenting with a new feature on the site that puts in a second level of protection on comment spam. It’s this WordPress plugin from Tan Tan Noodles (your guess is as good as mine on the name.) The thing I like best is the idea that should a legitamite comment by a real person get flagged as spam, they have a second chance to enter the captcha. Once in a very blue moon I will get a legitamite comment trapped but it is really prohibitive to go and look for comments in the Akismet trap page. Right now, I have 1600 in there from the last 14 days. Life is too short to weed through that.

If folks could do me a favor and just leave a test comment on this post, I’d appreciate it. Upgrading to WordPress 2.5 broke comments and I’d like to not do that again. Thanks!

The Downside of the Cullect Widget

A couple months ago I put the Cullect widget on this blog’s sidebar. I’ve been trying to support Garrick van Buren and Cullect, mostly because he has always been a strong supporter of most or all of my projects and I owe him some karmic debt. There is one problem with that, though. When I first put on the widget, I was in three reading lists and now I’m in two. This is the sort of thing that I hope never matters to me but it subtly eats at me. Who dropped me? Why? Is it because I’m blogging less lately or because I’m blogging about more ephemeral topics with lack of time to tackle big ones? These are bogus questions hardly worth considering but they still pop into my head. I have no intention of dropping the widget but there is a psychic cost to having it that never occurred to me until today.