Archive for November, 2006

Roll your own Apache Rewrite Log

Posted on November 28, 2006 in Function by Jeff Starr

Note to self: Here is the .htaccess code for creating an Apache Rewrite log. This is definitely helpful for testing .htaccess rewrite rules, permalinks, etc. Update: as jc points out in the comments section, Apache versions 2.2 or better no longer allow RewriteLog directives in htaccess files. For these versions, it is necessary to coordinate logging through the server configuration file or via virtual host. For more information, check the source. For pre-2.2 versions of Apache, continue reading to learn how to Roll your own Apache Rewrite Log!

via http.conf

Twist one up via the Apache configuration file by placing this code at the foot of your http.conf (remember to edit the path):

# Roll your own Rewrite log
# Log details via scale of 1 to 9
# 1 = few details, 5 = enough details, 9 = too much detail
RewriteEngine On
RewriteLog "/absolute/path/to/your/wwwroot/public_html/rewrite.log"
RewriteLogLevel 5

via htaccess

Roll one tuf via your site’s root .htaccess by placing this code at the end of the file (remember to edit the path):

# Roll your own Rewrite log
# Log details via scale of 1 to 9
# 1 = few details, 5 = enough details, 9 = too much detail
RewriteEngine On
RewriteLog "/absolute/path/to/your/wwwroot/public_html/rewrite.log"
RewriteLogLevel 5

Example

Here is an example indicating the type of data logged by the RewriteLog directive:

64.246.32.000 - [07/July/2007:07:07:07 - 0700] [example.com/sid#80077333][rid#800b7a33/initial] (2) init rewrite engine with requested uri /press/wp-comments-post.php
64.246.32.000 - [07/July/2007:07:07:07 - 0700] [example.com/sid#80077333][rid#800b7a33/initial] (2) rewrite /press/wp-comments-post.php -> http://64.246.32.000/
64.246.32.000 - [07/July/2007:07:07:07 - 0700] [example.com/sid#80077333][rid#800b7a33/initial] (2) explicitly forcing redirect with http://64.246.32.000/
64.246.32.000 - [07/July/2007:07:07:07 - 0700] [example.com/sid#80077333][rid#800b7a33/initial] (1) escaping http://64.246.32.000/ for redirect
64.246.32.000 - [07/July/2007:07:07:07 - 0700] [example.com/sid#80077333][rid#800b7a33/initial] (1) redirect to http://64.246.32.000/ [REDIRECT/301]

Launch Multiple Programs with One Click

Posted on November 28, 2006 in Technology by Jeff Starr

Speed up your workflow by launching your favorite programs in one click using batch (.bat) files:

  1. Create a folder and add shortcuts to your favorite programs.
  2. Rename the shortcuts so that each consists of a single word.
  3. Create a text file and change the name to something.bat.
  4. Right-click on the .bat ("batch") file and select "Edit".
  5. Emulate the following template according to your specific programs.
rem   comments should begin with rem
rem   note: this file launches all of my favorite apps!
rem   note: replace the names below with your own..

@echo off

   start %SystemRoot%\system32\cmd.exe
   start firefox http://google.com/
   start dreamweaver
   start photoshop
   start winamp
   start notes.txt

@echo on

That’s all there is to it! Of course, there are many other neat things you can do with batch files, but we leave that for you to discover elsewhere. You may want to create additional batch files for various kinds of work. For example, you could create one batch file for web-development apps, another for graphic-design apps, and so on. All shortcuts and batch files may be placed in the same folder. Then simply customize shortcuts to your various batch files and use them to consolidate your quick launch and clean up your desktop!

Time Test

Posted on November 23, 2006 in WordPress by m0n

This post exists entirely for the sake of tweaking time functionality in Apache, PHP, SQL, and WordPress..

Immediate findings:

  • Date/time limit into the past for WordPress: December 13, 1901 @ 15:45
  • WordPress will display December 13, 1901 @ 15:45 properly for all functions except wp_get_archives
  • All dates prior to 12/13/1901 in MySQL will display as December 31, 1969 @ 19:00 in the WP Admin > Post Timestamp panel
  • SQL timestamps of 0000-00-00 00:00:00 display as 0 via $wpdb->get_col("SELECT DISTINCT YEAR
  • SQL timestamps of 0000-00-00 00:00:00 display link as the current year when permalinks are enabled
  • An SQL timestamp of 1000-00-00 00:00:00 displays link as "1000" and links to the post
  • An SQL timestamp of 1000-00-00 00:00:00 displays correctly in archive view, but incorrectly in Admin and post view
  • An SQL timestamp of 1950-00-00 00:00:00 displays as November 30, 1949 @ 00:00 in WP Admin Post Timestamp panel and elsewhere in WordPress
  • An SQL timestamp of 1950-01-01 01:01:01 displays properly in WP Admin, and elsewhere
  • 0001-01-01 01:01:01 displays as January 01, 2001 @ 01:01 in Admin, links to "1" in archives (404 error)
  • 1000-01-01 01:01:01 displays correctly in archive, as December 31, 1969 @ 15:59 in Admin and post view
  • 3000-01-01 01:01:01 displays correctly in archive, as December 31, 1969 @ 15:59 in Admin, and 404 as post view
  • 2050-01-01 01:01:01 displays correctly in archive, as December 31, 1969 @ 15:59 in Admin, and 404 as post view
  • January 19, 2038 3:14:08 AM GMT is the latest date that will appear correctly in the WP Admin
  • No posts with future date will appear in post view
  • An SQL timestamp of 1900-01-01 01:01:01 displays correctly in daily, monthly, and yearly archive views
  • An SQL timestamp of 1900-01-01 01:01:01 now displays January 18, 2038 @ 19:14 in Admin
  • My head hurts..

More to come.. (much, much later..)

Perishable Press Triple Loop for WordPress

Posted on November 22, 2006 in Function, WordPress by Jeff Starr

Two of the themes developed by Perishable Press, Apathy and Information, depend on three WordPress loops to operate as intended. For each of these themes, the three loops consist of two "side" loops and one main loop. The side loops each display posts from one specific category, while the main loop displays posts from every category not specified in the side loops.

There are many different multi-loop configurations currently available for WordPress users. Needless to say, despite a wide variety of available loop setups, implementing a customized multiple loop frequently requires a great deal of time of energy. Certain loop sets accomplish one task, but fail at another, while others refuse to provide enough flexibility in general. Indeed, after countless rounds of trial and error establishing multiple loops, we finally developed the almost-perfect triple-loop configuration.

Continue Reading

WordPress on Crack: Tips for Faster Post Publishing

Posted on November 20, 2006 in Function, WordPress by Jeff Starr

Apparently, article posting is painfully slow on 2-ish versions of WordPress. Indeed, we finally got tired of waiting several minutes every time we published, saved, or edited a post.

After a bit of research, reading through countless complaints and suggested remedies, several key methods began to emerge. And, after taking the time to implement them, we have definitely enjoyed an substantial decrease in time required to publish, save, or edit posts.

Please note that everyone’s site is configured differently. These are the tricks that helped us to speed up publishing, but they may not have the same effect for everyone. The following methods were executed for this site, which is currently running WordPress 2.0.5 on Apache.

Delete rpc.pingomatic.com
Perhaps the most commonly recommended fix for slow posting: Remove "rpc.pingomatic.com" from the Admin » Options » Writing » Update Services panel. For some reason, pingomatic is really slow these days. Try using pingoat.comhttp://pingoat.com/goat/RPC2 ], ipings.com, or any variety of others 1 instead.
Delete all cached content
Another trick that helps improve posting speed is to delete the entire contents of the WordPress cache. It is entirely safe to delete everything in the wp-content/cache directory. In case you are paranoid, make a backup copy before doing so ;)
Remove the admin post preview panel
If you never use the "post-preview" window that appears near the end of your "Write Post" panel, go ahead and remove it. Doing so will save bandwidth, load time, processing time, etc. To eliminate such superfluousness, crack open your wp-admin/post.php file and delete precisely the following region of code (located near line #83 in WP 2.0.5), which may look slightly different in previous versions of WordPress:
<div id='preview' class='wrap'>
<h2 id="preview-post"><?php _e('Post Preview (updated when post is saved)'); ?> <small class="quickjump"><a href="#write-post"><?php _e('edit &uarr;'); ?></a></small></h2>
<iframe src="<?php echo wp_specialchars(apply_filters('preview_post_link', add_query_arg('preview', 'true', get_permalink($post->ID)))); ?>" width="100%" height="600" ></iframe>
</div>

References

Block Spam by Denying Access to No-Referrer Requests

Posted on November 20, 2006 in Function, WordPress by Jeff Starr

What we have here is an excellent method for preventing a great deal of blog spam. With a few strategic lines placed in your htaccess file, you can prevent spambots from dropping spam bombs by denying access to all requests that do not originate from your domain.

How does it work? Well, when a legitimate user (i.e., not a robot, etc.) decides to leave a comment on your blog, they have (hopefully) read the article for which they wish to leave a comment, and have subsequently loaded your blog’s comment template (e.g., comments.php), which is most likely located within the same domain as the article, blog, etc. (i.e., your domain).

So, after filling out the comment form via comments.php, the user clicks the "submit" button, which then initiates the PHP file/script that actually processes the comment for the world to see. For WordPress users, the comment processing file is wp-comments-post.php.

Therefore, the HTTP referrer for all legitimate (user-initiated) comments will be your domain (or the domain in which the comments.php file is located). Automated spam robots typically target the comment-processing script directly, bypassing your comments.php form altogether. Such activity results in HTTP referrers that are not from your domain.

Thus, by blocking all requests for the comments-processing script (wp-comments-post.php) that are not sent directly from your domain (comments.php), you immediately eliminate a large portion of blog spam.

Sound good? Here is the script to add to your site’s .htaccess file:

# block comment spam by denying access to no-referrer requests
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*perishablepress.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule ^(.*)$ ^http://the-site-where-you-want-to-send-spammers.com/$ [R=301,L]

Please note that you need to edit the following lines according to your specific setup:

.wp-comments-post\.php*
This is the default comment-processing script for WordPress users. If you are not running WordPress, you will need to determine the corresponding file and enter its name here.
!.*perishablepress.com.*
Change this value to that of your own domain.
^http://the-site-where-you-want-to-send-spammers.com/$
Because spambots typically ignore redirects, this may not be accomplishing too much. But go ahead and enter the URL of your least-favorite website anyway. Another option here is to simply bounce the spambot back to where it came from by replacing the last with this: RewriteRule ^(.*)$ ^http://%{REMOTE_ADDR}/$ [R=301,L]

And that is all there is to it! Bye bye spambots!

Add RSS Feed Link Icons to WordPress Category Listings

Posted on November 20, 2006 in WordPress by Jeff Starr

This brief tutorial explains two methods for adding RSS feed link icons to category listings. Let’s say that you have a list of category links, where each link targets a specific category view. Now let’s say that, next to each category link, you would like to provide a icon that links to that particular category’s syndicated feed. So, rather than cluttering up your page with two sets of category links — one for category views and another for category feeds — consolidate links and simplify your site by providing both sets of links in a logical, streamlined format.

Method One: A Static Category/Category-Feed List via wp_list_cats

Category Links via wp_list_cats
Category Links via "wp_list_cats"
The easiest way to create a set of category/category-feed links is to use the native WordPress function, wp_list_cats. This function creates a customizable set of static category links that may be used in or out of the WordPress loop.

Category links created this way are static in that the same categories are displayed for every type of page view. Thus, if configured to display categories "A", "B", and "C", the wp_list_cats function will create links for A, B, and C for post views, page views, archive views, category views, and every other view-type for that matter.

Nonetheless, despite this limitation, wp_list_cats provides an easy way to create a category feed icon links next their respective category links. Simply add the following to the location of your choice within your WP-powered document:

<?php wp_list_cats('feed_image=http://domain.com/path/feed-icon.gif&feed=XML Feed&optioncount=1&children=0'); ?>

In this code example, we are using the following parameters:

feed_image=http://domain.com/path/feed-icon.gif
This parameter creates the feed icon link next to each category link. Change the domain, path, and file name according to your particular setup.
feed=XML Feed
This parameter produces the requisite alt & title attributes for the specified feed icon (if any), and also produces title attributes for link anchor tags.
optioncount=1
This parameter indicates whether or not the function writes the category post count next to the link. "1" = yes, please display category post counts, "2" = no, please do not display post counts.
children=0
This parameter instructs the function to include or exclude subcategories in the set of category links. "1" = yes, please show all subcategories, "2" = no, please omit any subcategories from the category list.

This function also provides several handy parameters that are not discussed here. Please see the WordPress Codex1 for complete information concerning wp_list_cats.

Method Two: A Dynamic Category/Feed List via Category LiveBookmarks

A more sophisticated, comprehensive method of providing users with category/feed links is delivered via Monzilla Media’s essential plugin, Category LiveBookmarks Plus 2. Category LiveBookmarks Plus (CLB+) automatically produces a highly customizable set of dynamic category/feed links anywhere within your WP-powered blog. Plus, in addition to creating a custom set of feed links, CLB+ also creates contextually relevant LiveBookmark autodiscovery feed links to the head element of your document (see plugin page for more details). Here are a few examples of the different format options available via CLB+:

Category Link Set via CLB+
Left-aligned feed links
Category Link Set via CLB+
Text-based feed links
Category Link Set via CLB+
Right-aligned feed links

Of course, more configurations are possible, as well as many other customizable settings that enable users to create an ideal set of dynamically changing feed links throughout your site. Simply install the plugin and change the settings within the plugin file to customize your own set of category/feed links. Further, the CLB+ plugin creates a dynamic set of category/feed links that changes according to page view-type in order to provide only relevant feeds, as referenced via the particular page contents.

Regardless of which method you use, consolidating your category links with your category feed links will reduce clutter, streamline navigation, and promote simplicity. Thanks for listening — God Bless!

Footnotes

Counterfeit Slifer Yu-Gi-Oh Card

Posted on November 19, 2006 in Graphics by Jeff Starr

Recently, my son traded three common Yu-Gi-Oh cards for the coveted Slifer god card. He was very excited, thinking he worked the deal of a lifetime. Indeed, Slifer cards sell for around $35.00 apiece, depending on the dealer. Nonetheless, trading three worthless cards for a Slifer god card seemed like a phenomenal deal..

What we discovered next nearly dropped us to the floor — the Slifer card was a counterfeit! Within moments of checking it out, Mom immediately recognized the unusual coloring, odd syntax, and heavy gloss on the card. Upon closer examination, many errors were discovered — spelling mistakes, missing graphics, and misaligned text — all pointing to one inescapable reality: an illegitimate Slifer card!

Amazed by the idea that someone would actually produce a fake Slifer card, I quickly confiscated the card and began scrutinizing the details. After studying the card, carefully comparing it to other Yu-Gi-Oh cards and several legitimate Slifer cards (via dealer sites, etc.), the extremely poor quality of the counterfeit became laughably obvious. This is sad for at least two reasons. First, it is sad that there are scumbags who steal from children. Second, it is sad that a counterfeiter would perform such an absolutely pathetic rendition of the very popular Slifer Yu-Gi-Oh god card.

Nonetheless, discovering and studying the counterfeit card provided such a thrill that we thought others might benefit from a critical online analysis. Hopefully, this article will serve as a reference for others to compare against in order to avoid the purchase or trade of other fake Yu-Gi-Oh cards. If nothing else, we hope that you will enjoy a hearty laugh upon discovering the amateur nature of this particular counterfeit.

Authentic Slifer card
Authentic Slifer Card

Counterfeit Slifer Card
Counterfeit Slifer Card

Click here for a close-up, side-by-side comparison of the authentic vs. counterfeit Slifer cards.

Summary of the obvious errors on the fake Slifer card:

  • [a] Card title is in lowercase text; "sky dragon" is not capitalized
  • [b] The text, "GOD", has replaced the original symbol and text
  • [c] Incorrect number of stars: ten stars on the real card, eleven on the fake.
  • [d] Missing serial number below the image of Slifer, on the right-hand side
  • [e] "[DIBINE .BEAST]" is misspelled, contains a period, and is typographically incorrect
  • [f] Description contains numerous errors in spelling, grammar, punctuation, and typography
  • [g] Misaligned text for "ATK" and "DEF" characters
  • [h] Missing japanese characters in the lower-left corner of the card
  • [i] Missing copyright and japanese name in lower-right corner of card
  • [j] Missing reflective authenticity decal in lower-right corner of card
  • [k] Image resolution/quality is poor — out of focus, grainy, pixelated
  • [l] Overall coloring of the card is too pale, or otherwise inaccurate
  • [m] Placement of the description text is misaligned, too low
  • [n] The card itself is overly glossy — way too much gloss

Flaws present on the back of the card

  • The brand name, "KONAMI" and registered symbol (R) missing from upper-left corner ( apparently, authentic god cards display neither brand name nor registered symbol on the back of the card. )
  • Trademark signature (TM) missing from Yu-Gi-Oh logo in lower-right corner ( apparently, authentic god cards do not display a trademark signature on the back of the card. )
  • Front of card lacks proper card gloss — surface similar to paper
  • Colorization is too pale, or otherwise inaccurate

We hope this article is helpful to someone. If you have other examples of counterfeit Yu-Gi-Oh cards, we would love to hear about them. Update: new article posted highlighting Deana’s experience with a counterfeit Slifer card she had purchased on eBay (Originally posted on: 03/05/2008).

minimalist Theme

Posted on November 14, 2006 in WordPress by Jeff Starr

The minimalist theme is crisp and clean. Featuring a three-column satellite menu-page to reduce clutter and streamline usability, the minimalist theme is designed to present site content with sophistication and elegance.

The minimalist theme is XHTML 1.1 strict, employs nearly valid CSS (ha!), and features browser-safe colors and universal fonts all delivered via concise, two-column liquid layout.

Mindfully detailed and carefully prepared, the minimalist theme provides plenty of room for customization and expansion.

This theme is offered absolutely free under open source GPL. Instructions are included along with a complete set of files and images. Relatively simple installation.

The minimalist theme has been tested with Mozilla Firefox 1 & 2, Internet Explorer 6 & 7, Netscape 7+, and Opera 8+. Note: minimalist looks best when viewed via Firefox.. ;)

minimalist Theme
Screenshot of minimalist on Firefox

Live demo of minimalist via Perishable Press »

Download minimalist [ v1.2 | ~26KB | .zip | 3817 downloads ]

Previous Versions

Preloading Images with CSS and JavaScript

Posted on November 14, 2006 in Function, Optimization by Jeff Starr

Fast-loading pages reduce errors, conserve bandwidth, and please visitors. One way to decrease loading times and enhance performance involves maximizing image display efficiency. Your mantra for achieving image efficiency should be "reuse, optimize, and preload.". While each of these methods plays an important role, this article will focus on methods for preloading images. Consult your server error logs to identify web pages that may require image help. Note: preloading images does not reduce bandwidth! It only decreases apparent load time, thereby enhancing user experience.

Preloading via the CSS Display Property

This method is a very common method for preloading images via the CSS display: none; directive. To use this method, first add the following code to your CSS rules:

<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
   img.preload { display: none; }
/*]]>*/-->
</style>

Then, add the preload class to each image tag that should be preloaded:

<img src="image1.jpg" alt="Image Caption 1" height="33" width="33" class="preload" />
<img src="image2.jpg" alt="Image Caption 2" height="33" width="33" class="preload" />
<img src="image3.jpg" alt="Image Caption 3" height="33" width="33" class="preload" />
<img src="image4.jpg" alt="Image Caption 4" height="33" width="33" class="preload" />

Include the array of preloading image elements to the bottom of the home page, just before the body tag. Placing the images at the bottom of the page requires the browser to load the entire page before preloading any of the images. Finally, simply use the same image path and name when referencing the preloaded images on subsequent pages. The browser will have cached the images and will be able to load them instantly. Remember not to use the preload class for images that are meant to be displayed.

Preloading Tuf with JavaScript

This method uses JavaScript to cache specified images as the document is loaded. Images will then be displayed immediately as they are called. The JavaScript itself degrades peacefully and has no effect on browsers that do not support JavaScript. The script is as follows. Simply replace ../path/to/image-0n.gif with the corresponding path and name of the image to be preloaded. Then, simply call the images as normal (e.g., <img src="../path/to/image-0n.gif" alt="Image Caption" />) wherever they are required.

<script>
<!--//--><![CDATA[//><!--

if (document.images) {

	img1 = new Image();
	img2 = new Image();
	img3 = new Image();

	img1.src = "../path/to/image-01.gif";
	img2.src = "../path/to/image-02.gif";
	img3.src = "../path/to/image-03.gif";

}

//--><!]]>
</script>

You can also wrap this method in a function like so:

function preloader() {
	if (document.images) {

		var img1 = new Image();
		var img2 = new Image();
		var img3 = new Image();

		img1.src = "../path/to/image-01.gif";
		img1.src = "../path/to/image-02.gif";
		img1.src = "../path/to/image-03.gif";
	}
}

Firefox CSS Magic

Posted on November 12, 2006 in Presentation by Jeff Starr

Consider this post an evolving receptacle for Firefox-specific CSS tricks.

Change the color of highlighted text

*::-moz-selection {
   background: #FF3C00; /* the background color of the highlight */
   color: #FFF; /* the color of the text within the highlight */
}

Change the opacity of an element

div#division { /* choose either attribute */
   -moz-opacity: 0.99; /* possible values: 0-1 */
   -moz-opacity: 99%; /* possible values: 0%-99% */
}

Control item selection of an element

div#division { /* choose one of the following values */
   -moz-user-select: none; /* no content within the element may be selected */
   -moz-user-select: all; /* contents may be selected only as a whole */
   -moz-user-select: text; /* [default value] only text may be selected */
   -moz-user-select: toggle; /* all contents of the element are selected */
   -moz-user-select: inhereit; /* inherits user-select value from parent element */
   -moz-user-select: element; /* elements may be selected one at a time */
   -moz-user-select: elements; /* multiple elements may be selected at the same time */
}

Round the corners of elements

div#division { /* choose one of the following values */
   -moz-border-radius: inherit; /* inherits border-radius value from parent element */
   -moz-border-radius: 7px; /* length/unit values indicate corner/border radius */
   -moz-border-radius: 70%; /* percentage values indicate relative corner radius */
}

Note that the -moz-border-radius property may be expressed as to target specific corner(s):

-moz-border-radius-topleft
-moz-border-radius-topright
-moz-border-radius-bottomleft
-moz-border-radius-bottomright

Further, the following rule consolidates these four properties into one:

-moz-border-radius: 7px 3px 7px 3px;

Add an outline to an element

div#division, h1 { /* choose one of the following values */
   -moz-outline-width: inherit; /* inherits moz-outline value from parent element */
   -moz-outline-width: medium; /* possible values: thin, medium, thick */
   -moz-outline-width: 7px; /* specifies outline width via an explicit length/unit */
}

Reverse item order in elements

div#division { /* choose one of the following values */
   -moz-box-direction: normal; /* items displayed top to bottom and left to right */
   -moz-box-direction: reverse; /* items displayed bottom to top and right to left */
}

Add a multi-colored, multi-layered border to an element

This nifty CSS property adds a border to an element that is any number of pixels in width. Each pixel-width of the border may display with a unique, user-specified color.

div#divisions { /* spcifies a border along with a uniform color for non-Moz browsers */
   border: 3px solid #333; /* if only two moz-border colors are defined, the third will be this color */
}
div#divisions { /* choose on of the following values */
   -moz-border-colors: inherit; /* inherits border-colors value from parent element */
   -moz-border-colors: none; /* [default value] no color-striping is applied */
   -moz-border-colors: red white blue; /* indicates color values from outside to inside */
   -moz-border-colors: #333 #777 #999; /* indicates color values from outside to inside */
   -moz-border-colors: ThreeDDarkShadow ThreeDShadow transparent; /* named values also apply */
}

Further, -moz-border-color property may be segregated as follows:

div#divisions { /* use any/all of the following attributes */
   -moz-border-top-colors: #333 #777 #999 #FFF;
   -moz-border-right-colors: #333 #777 #999 #FFF;
   -moz-border-bottom-colors: #000 #999 #CCC #DDD;
   -moz-border-left-colors: #000 #999 #CCC #DDD;
}

One Year Anniversary

Posted on November 8, 2006 in Perishable by Jeff Starr

Perishable Press recently celebrated its one-year anniversary! Well, okay, so nobody really celebrated anything, but we did take note as our first anniversary both came and went. Yeah, …uh, actually, no one is even quite sure of the actual anniversary date. But we do know it has been a little over one year since we began all of this time-consuming nonsense.. –Whatever!!

Perishable Press went online sometime during September of 2005. The first dozen or so posts were strictly for blog development purposes, and much development has continued since that time. Everything from upgrading WordPress (we started with 1.5), designing themes (thirteen to date), and coding plugins (four to date) has kept us very busy over the course of the past year.

We have spent more time on this website than on any other online project — ever! Granted, most of the work that went into establishing perishablepress.com as an online resource for digital design went into exploring the many different aspects of web design: PHP, SQL, JavaScript, CSS, (X)HTML, htaccess, writing, graphics, servers, browsers, usability, optimization, validation, standardization, protection, archiving, debugging, designing, tweaking, linking, posting, learning, typing, and everything else involved with a thoroughly executed and well-maintained online reference. And now, one year later, we finally have obtained a sense of completion, of accomplishment, in building something useful that will endure for at least a few years to come..

So then we shall choose this day, November 8th, as the official anniversary date for perishablepress.com. The first year has been all about opening the doors of the World Wide Web and diving into the exciting world of online virtual existence — installing and tweaking and designing and building and writing and and and! Thus, now that we are well-equipped and fully functional, perhaps the coming year will see a greater focus on improving and enhancing content, spooning inspiring news, and writing informative, useful articles. So, until this time next year..

– Here’s to the future!

Stop Bitacle from Stealing Content

Posted on November 8, 2006 in Websites, WordPress by Jeff Starr

If you have yet to encounter the content-scraping site, bitacle.org, consider yourself lucky. The scum-sucking worm-holes at bitacle.org are well-known for literally, blatantly, and piggishly stealing blog content and using it for financial gains through advertising. While I am not here to discuss the legal, philosophical, or technical ramifications of illegal bitacle behavior, I am here to provide a few critical tools that will help stop bitacle from stealing your content.

The htaccess Finger

Perhaps the most straightforward and effective method for keeping the bitacle thieves away from your site, adding the following htaccess rules to your root htaccess file will literally block bitacle’s IP address and return a 403 Forbidden message (for more information on htaccess files, see our article, Stupid htaccess Tricks, referenced below). Add this to your site’s root htaccess file:

RewriteBase /
RewriteCond %{REMOTE_ADDR} ^212\.22\.59\.251$ [OR]
RewriteCond %{HTTP_USER_AGENT} Bitacle
RewriteRule .? - [F]

The robots.txt Slap

Next up, another effective anti-bitacle method that instructs the bitacle bots to stay away from your site. This method uses a robots.txt file in your site’s root directory and literally denies bitacle agents crawl-access to all site contents. Simply add the following lines to your site’s root robots.txt file (for more information on robots.txt, see our article, Robots Notes Plus, referenced below):

User-agent: Bitacle bot/1.1
Disallow: /
User-agent: Bitacle bot
Disallow: /
User-agent: Bitacle *
Disallow: /
User-agent: Bitacle*
Disallow: /
User-agent: Bitacle
Disallow: /

Related WordPress Plugins

For more help on the anti-plagiarism front, check out Redalt’s Antileech Plugin and MaxPower’s Digital Fingerprint Plugin. These fine WordPress plugins come highly recommended and are definitely worth checking out.

Other Essential Tools

Beyond the essential preventative methods discussed above, there are many other resources and tools now available for dealing with site scrapers, content thieves, and other worthless garbage. A worthwhile website is Copyscape, which provides an excellent tool that enables users to search the web for stolen content. If you find that your content has indeed been plagiarized, read up on how to respond properly and effectively. Finally, try searching for various search terms, such as "plagiarism tools", "content scraping", "copyright protection", "syndication theft", etc. Good Luck!

Stop bitacle.org
Stop bitacle.org

References & Resources

AddMySite Plugin for WordPress

Posted on November 1, 2006 in WordPress by Jeff Starr

The AddMySite (AMS) plugin for WordPress makes it easy for your visitors to add your site to all of their favorite social-bookmarking services. With a few clicks, users may easily bookmark or add your site to any number of popular social bookmarking services, which are concisely presented via drop-down menu or as a customizable list. One file. Simple installation. Easy to use. Clean output and XHTML strict.

New! — Widgetized AMS version 0.88 now available! The new widgetized version of AddMySite makes it easier than ever to add your site and feed to 40 sites! AMS version 0.88 features 25 social-bookmarking sites to which visitors may add your site. Even better, the new version of AMS also enables visitors to add your site’s syndicated feed to 15 feed-related/aggregator sites. That’s 40 ways to expand your online empire!

Super-easy installation instructions

  1. Upload plugin to plugins directory and activate.
  2. Drag and drop the AMS widget into your sidebar.
  3. Enjoy! ;)

Demonstration

To see AddMySite (AMS) in action, look here (located near the middle of the page).

Download AddMySite (AMS)

[ version 0.88 (widgetized) | ~5KB | .zip | 2012 downloads ]

Previous versions of AMS