Blosxom Plugins -- a couple of simple Perl scripts (plugins) for the Blosxom 2.0x blogger script. New features and new plugins are being added all the time, so check here often!

HyperCard Downloads -- You remember summer? You remember red pop? You remember HyperCard? Here's some utilities and externals.

iTunes AppleScripts -- Really bright people write great scripts for iTunes. I'm not one of them; I just try to make those good scripts behave a little better.

All software is offered "as-is," and all risk is yours -- read the full disclaimer.... LOL! Just a joke; to report bugs in blosxom plugins, post to the blosxom list.


Blosxom Plugins

Blosxom is a way-cool, compact blogging tool written in Perl. The whole thing comes in one small file; you simply edit a couple of pathnames in the file, save it, and drop it into your cgi-bin folder. You're blogging! To add features -- calendars, writeback, syndication, curly quotes, you name it -- just drop plugin files into Blosxom's plugins folder (d'uh).

All plugins are offered "as is," and all risks are yours; check out the full disclaimer ;-)

LOL! Just a joke; for bug reports on blosxom plugins, post a message to the blosxom list.

blox 0.99

Bother the documentation -- DOWNLOAD blox now.

The blox plugin generates "paragraph" markup tags around blocks of plain text as your entry files are processed by Blosxom. Just type plain text into your entry files, separating paragraphs by at least one blank line (really blank; no spaces, tabs, etc.). When Blosxom builds your stories, blox will add the open- and close-tags of your choice to each paragraph. Existing markup tags will be left alone.

blox also has options to insert linebreaks (e.g. <BR>) on single lines, and to use a simple, natural-idiom markup notation to add heads, rules, text styles, lists, blockquotes, images, anchors, and links to your entries with no tedious html coding.

blox also lets you use virtually any text processor and upload method for your entry files, by recognizing "lines" from either Unix-, Mac-, or Windows-based text processors (ascii 10; ascii 13; or ascii 13/10 line-ends).

• For example, consider this entry file text:

     Welcome to my entry.

     Short, isn't it?
Without block-level html tags, this entry file will render on the page as: Welcome to my entry.Short, isn't it? (Eh, not very pretty.)

• With blox, the entry renders like this:

    Welcome to my entry.

    Short, isn't it?

That's much better.

• blox's tagged output for that entry looks like this:

    Welcome to my entry.
    Short, isn't it?

Read More and DOWNLOAD

blok 0.96

Bother the documentation -- DOWNLOAD blok now.

The blok plugin intercepts the "story" subroutine and converts Mac (ascii 13) or Windows (ascii 10,13) line-ends to the "newline" (ascii 10) that Blosxom expects.

This enables you to stop thinking about the line-end format in your word processor, and whether your ftp app is set to convert your native line-ends to *nixies. (Also helpful for processing writebacks.)

You want this to load early, so be prepared to prepend "00" to the plugin's file name. See Blosxom documentation for full details on setting plugin load order.

Read More and DOWNLOAD

categoryz 0.62

Bother the documentation -- DOWNLOAD categoryz now.

The categoryz plugin generates a hierarchical "tree" of all the categories (directories) in your datadir. The tree is composed of nested unordered lists; each list item links to its category's view.

Optionally, each directory item can display the number of entries it contains. Users can specify style info for lists and list items. Category links can be set to specify a flavour, or just let blosxom use its preferred flavour.

Here's an example:

These directories... ...produce this "tree":


Read More and DOWNLOAD

crumz 0.88

Bother the documentation -- DOWNLOAD crumz now.

The crumz plugin generates a trail of links along each story's path, which you can add to your stories by calling the $crumz::crumz variable in your story flavour files (templates). For instance, an entry file located at hither/thither/anon/story.txt will produce a trail of links similar to:
    hither > thither > anon > story
in $crumz::crumz.

crumz has options to let you: generate links that are path-based, date-based, or context-sensitive to the blosxom URL; set the divider between links; add a link back to your main blog page; set the "depth" of the link trail by trimming leading or trailing path items; add the entry's filename to the end of the link trail; set whether the last item in the trail is linked or just plain text; and set the default flavours to call in the home, directory, and entry links.

Read More and DOWNLOAD

cyclz 0.98

Bother the documentation -- DOWNLOAD cyclz now.

The cyclz plugin lets users define any number of flavour-sensitive variables for use in story templates; each variable can be assigned any number of return values. The plugin will then cycle through each variable's list of values each time the story() routine runs as Blosxom builds a page.

cyclz is useful for things like producing alternating styles for entries. Samples of blog and index styling via cyclz are available on this page.

Read More and DOWNLOAD

excludez 0.5

Bother the documentation -- DOWNLOAD excludez now.

The excludez plugin lets you keep individual entries or entire directories from being displayed, on a per-flavour, per-category basis. Exclude-ing can be suspended for the find or wikieditish plugins. Migration from the orignal exclude and hide plugins is seamless; new features include standard path notation, more options for where exclude info is stored, and the ability to "comment out" path info in exclude files.

excludez is a re-work of the venerable exclude and hide plugins, with a couple more features.

Read More and DOWNLOAD

expirez 0.6

Bother the documentation -- DOWNLOAD expirez now.

The expirez plugin lets you set an "expiration date" on individual entries by adding a meta-tag in this format:
meta-expire_date: YYYY MM DD
(and so, expirez requires the meta plugin). Permalinks are not affected.

For example, this entry file:

End of the World
meta-expire::2004 07 05

The world will come to an end on July 4, 2004.
would have stopped being displayed on July 5, 2004. <g>

Read More and DOWNLOAD

hashword 0.01

Bother the documentation -- DOWNLOAD hashword now.

As a plugin, hashword displays a form to generate hashed passwords from plaintext. As a module, hashword can be called by other plugins to verify plaintext against a hashed value.

Several popular plugins that write files to your server (such as entries_cache and wikieditish) quite correctly ask for passwords before springing into action. This is A Good Thing, as it prevents accidents or pranks that may change your blog's content or presentation. The problem with these plugins, however, is that the passwords are stored as plaintext: if someone can read the file, the password is worthless.

To guard against this, the authors of such plugins advise that you keep your plugins in a directory that is not publicly accessible; makes good sense. But what if you don't know how to do that, or don't have access to such a space on your server? Then you are potentially screwed. That's where hashword comes in, by providing a method of generating and verifying encrypted passwords; a hashword-based password can be stored "out in the open" without giving away any secrets.

Read More and DOWNLOAD

nixie 0.4

Bother the documentation -- DOWNLOAD nixie now.
nixie, noun, pl. nixies.
(U.S. Slang.) a letter or other mail that is not
delivered due to an illegible or incorrect address.

When blosxom processes no stories — due to a bad link, bad typing, bad karma, etc. — nixie steps in and adds a user-specified "file not found" message to the empty page. Messages are saved in flavour files, on a per-flavour, per-category basis; a generic flavour can also be used. Works with any blosxom URL: path-based, date-based, or mixed (e.g. /pets/dogs/2005).

Optionally, nixie can generate a "real 404" which will show up in server logs; the 404 page is saved in flavour files, as above. In the absence of any flavour files, nixie provides a default 404 page.

Read More and DOWNLOAD

num_dayz 0.6

Bother the documentation -- DOWNLOAD num_dayz now.

Blosxom normally displays the most recent $num_entries posts (5 entries, 10 entries, 100 entries); num_dayz displays posts from the most recent $num_days days (3 days, 7 days, 30 days). The maximum number of posts that will be displayed is still set by $num_entries. The plugin can detect whether you're sorting by ascending or descending date.

num_dayz has two settings: $num_days sets the number of days' entries to display; the $now_mode flag sets whether $num_days is counted from the most recent entry ($now_mode=0), or is counted from right now ($now_mode=1). No matter what settings are used, num_dayz always displays at least one entry.

Read More and DOWNLOAD

onlyonedir 0.3

Bother the documentation -- DOWNLOAD onlyonedir now.

The onlyonedir plugin limits blosxom's display to only those entries which are located in the directory specified in the URL. For example, with these directories:
a browser pointed to
will display only the stories located directly in the /mammals directory; nothing from /rodents or /porcupines will be displayed. Similarly, if you call:
only entries located directly in your datadir will display; nothing from /animals, /mammals, /rodents, or /porcupines will appear.

If the specified directory contains no entry files, blosxom will produce an "empty" page (no stories). You should think about using the nixie plugin or emptymessage plugin to guard against this condition.

Read More and DOWNLOAD

permtimez 0.5

Bother the documentation -- DOWNLOAD permtimez now.

The permtimez plugin uses date information conveyed in entry file names (as in 20041231NewYearEve.txt) to provide blosxom with stable time values for sorting and dating your blog entries. At the "cost" of including a minimum of 6 digits in your entry file names, permtimez allows you to edit, re-upload, or otherwise change your entry files' modification times without changing their sort order or "posted on" dates.

If you're already using date-info in your entry file names, chances are good that you won't have to make any changes to your files—permtimez can be configured to read any one of eight different date-info formats. In fact, selecting a date-info format is all the configuration there is—select a format, drop permtimez into your plugins folder, and enjoy stable entry dates and predictable sorts.

If you're not already using date-info in your entry file names, I strongly advise that you test the permtimez plugin before making changes to your entry files. Adding date info to your entry file names may change their mtimes, which affects your entire blog; there's no undo. You should only take the step of adding date info to your entry file names after you know that permtimez will run on your server(s); download a simple compatibility test.

Read More and DOWNLOAD

sidewordz 0.4

Bother the documentation -- DOWNLOAD sidewordz now.

Using normal entry files placed in whatever directory you configure, sidewordz builds a "sideblog" available to your head or foot flavours in $sidewordz::output. Entry files are processed by blosxom plugins, just like in a normal blog — the entries are filter()-ed, sort()-ed, story()-ed, and then interpolate()-d from sidewordz.story template files.

Sideblog display is set by flavour files (templates): sidewordz.story.flavour_name templates are directory-specific, flavour-specific; sidewordz.story.all templates are directory-specific but flavour-generic; a blog-wide template can be stored in the plugin's DATA section..

All of blosxom's normal story() vars are available to your sidewordz flavour files, such as $yr, $mo, $da (all the time vars), $default_flavour, $url, $path, $fn, $title, $body, etc.

Plugins that you can't use/don't need can be skipped, through a config var; likewise, plugins "on standby" (plugin file name ends with "_") can be enabled through a config var. The number of sideblog entries is set with sidewordz' $num_entries config var. All settings are available to config plugins that run during filter() (not head().)

Read More and DOWNLOAD

truncatez 0.4

Bother the documentation -- DOWNLOAD truncatez now.

The truncatez plugin shortens stories for use in RSS feeds, summaries, teasers, etc. Users can specify a minimum and maximum length for stories; truncation occurs after $minimum characters, at the first ".", "!", "?", or closing parens that looks like it's ending a sentence; but always before $maximum. Anything that could possibly be valid markup is stripped (i.e. <a>, <Z>), while non-markup <s and >s are preserved and entitized. The plugin can be configured to run all the time, or just when certain flavours are invoked.

Read More and DOWNLOAD

wazzup 0.5

Bother the documentation -- DOWNLOAD wazzup now.

The wazzup plugin creates links to the most-recent entries added to the blog; users configure the number of new entries to list. The form of the links (lines, paragraphs, list items, etc.) and the link contents ($url, $path, $fn, $yr/$mo_num/$da, $title, etc.) can be set with a flavour file, or left for the built-in templates. The links can be displayed in either the head or foot section of the blog (or both) by calling the $wazzup::recent_entries variable.

wazzup is very CPU-friendly — it lets blosxom do all the sorting and file-reading work by running in the story() and foot() subs, and then magically makes its links available to head (or foot, or both).

Read More and DOWNLOAD



Amazingly, people still request HyperCard jobs a couple of times a year...and there's always a trickle of copper from the utilities. Cooler than Belgian beer, it used to be. At some point the name will change to "It's dead, Jim!" but until then enjoy.

Everything here is in binHex format (.hqx), which will expand to a StuffIt file (.sit) which will then expand to the real files. Because I have no intention of supporting this stuff, you should read this disclaimer.

Seriously -- there's no support for these stacks. I've thrown away my compilers and put Inside Macintosh in the closet; what you get is what there is.

Compactamundo 2.3

Bother the documentation -- DOWNLOAD Compactamundo now.

Compactamundo 2.3 is a bulk-compactor for all your HyperCard 2.x stacks (athough the stack itself requires HC 2.2 or better to run). Simply select a volume or folder, and Compactamundo will compact each stack within down to its smallest size. Progress is displayed for each stack encountered, and an optional log lets you save results to disk as a text file. The Preserve 'Last Modified' date option lets you compact stacks without changing their current Last Modified dates.

Read More and DOWNLOAD

Debundlator 1.06

Bother the documentation -- DOWNLOAD Debundlator now.

Debundlator removes the unneeded 'bundle' resources from PostScript font drivers; this can greatly reduce Finder's workload in keeping track of files, giving your Mac a snappier feel and improved stability. Simply select a folder in an Open... dialog, then watch as all the drivers in that folder (and all its folders) are debundled. Follow debundling with a clean desktop rebuild (a la TechTool), and your Mac will be happier than ever.

'Debundling' refers to removing the BNDL, FREF, icon, and 'signature' resources that are normally used to identify applications to Finder -- bundles are how Finder knows which documents and icons belong to what applications. If you've got 1,500 drivers on your disk, Finder has to work like you've got 1,500 more applications!

Read More and DOWNLOAD

Standalone Stripper 2.33

Bother the documentation -- DOWNLOAD Standalone Stripper now.

The Standalone Stripper stack 'deconverts' standalone applications created by HyperCard v2.3 and higher back into stacks by removing the "stock" standalone resources, changing the file's Type and Creator codes to 'STAK' and 'WILD', and clearing the new stack's 'hasBundle' bit.

Read More and DOWNLOAD

Zilch! 2.17

Bother the documentation -- DOWNLOAD Zilch! now.

Zilch! is a fast-paced dice game from northern Michigan. Up to nine players take turns rolling up to six dice, trying to accumulate points from rolling ones, sixes, three-of-a-kinds, or straights. As long as one or more dice are scoreable, a player can keep rolling for more points; if all dice are scoreable, the player can roll them all again. But as soon as a roll yields no scoreable dice, the player has Zilched! and no points are scored.

Read More and DOWNLOAD

More Coming...

As I get more time, I'll post more stacks. Plus, I'll be posting all of my old externals that I can dig up, including MColorMenu, the best durned popup menu external ever written. (If I can just figure out which floppy/ZIP/SCSI disks they're sitting on... ;-)

Next Up: PointConverter 1.02

Just need to dust off the documentation a bit and add another feature. Basically, you type a value in one of three boxes on the left side of the window (one each for inches, picas, and points); then press Return or Enter; and then read converted values on the right. Typing automatically goes into the last input box you used. You can select a different input box with the Tab key, or by clicking with the mouse. A calculator feature lets you perform arithmetic on mixed measurements; i.e. you can add 2.75 picas to 14 points, and subtract a half-inch.

INCHES1 3/8decimals or fractions up to 64ths are recognized.
POINTS99.0PostScript-points; 72 to the inch.
PICAS8p3.0left of the p are picas; right of the p are points.

PointConverter runs as a standalone or as a stack. it's a handy solution to the Xtension that everyone forgot to write ;-)


iTunes AppleScript

AppleScript is like a needle and thread—you wouldn't want to build a whole suit using those tools, but they're just dandy for making alterations. There are oodles of fine AppleScripts for controlling iTunes over at Doug's AppleScripts for iTunes. None of them do exactly what I want; these are ones I've tailored to suit my needs.

All scripts are offered "as is," and all risks are yours; check out the full disclaimer ;-)

LOL! Just a joke; for bug reports on these iTunes AppleScripts, post a message to the AppleScript forum over at Do not use StuffIt to unzip these archives; let Finder do it.

Add Files and Folder Art 0.8

Bother the documentation -- DOWNLOAD Add Files and Folder Art now.

The Add Files and Folder Art script is a droplet the adds files to iTunes when you drop files and/or folders onto its icon. If there is a .jpg file in a folder, that file's image will be added to any tracks in the folder that currently don't have album art. Should be a handy tool for PC-to-Mac migrators whose music files have been living in the WMP world.

Launching the droplet by double-clicking will prompt you to select one or more folders of files to add to iTunes.

Image files named "folder.jpg" are given precedence over other jpg image files in a folder.

When the iTunes "Copy files to iTunes Music folder when addding to library" preference is set, art is added to the copied tracks; the original files are left alone. (Unless, of course, the dropped files/folders are located inside the designated iTunes Music folder ;-)

Read More and DOWNLOAD

Find Incomplete Albums 0.93

Bother the documentation -- DOWNLOAD Find Incomplete Albums now.

The Find Incomplete Albums script identifies incomplete albums; their tracks can then be added to a playlist, or their Album tags can have a * (asterisk, Kleene star) appended. Only non-podcast, non-stream audio file tracks are searched for incomplete albums.

In the opening Search Limits dialog, choosing Normal searches only those tracks which have their Album and Track Count tags filled in; choosing All searches all tracks, regardless of empty tags. You can think of the Normal option as identifying all clear cases of /incomplete albums/, while the All option identifies all cases of incomplete album information.

A second dialog directs the script to add incomplete album tracks to a playlist, or to append a * to their Album tags. If the Playlist option is taken, a third dialog lets the user set the playlist's name; the default name of the incomplete albums playlist can optionally be configured in the script.

Read More and DOWNLOAD

Play This Track's Album 0.92

Bother the documentation -- DOWNLOAD Play This Track's Album now.

The Play This Track's Album script plays the entire album of the currently playing or selected track. Optionally, when playback begins the album's playlist window can be displayed, and the visualizer can be turned on, and the miniplayer can be turned on.

The script makes every effort to only gather up one set of the album's tracks, even if some tracks have multiple copies (as when an album has been ripped to a lossless format for home stereo playback and also ripped to a lossy format for earbud playback). Users can specify a preferred format (MP3, AAC, AIFF, Apple Lossless, or WAV) or iTunes' current encoder.

Unlike Doug's Selected Track's Album to Playlist script, this one is strictly for listening to albums; no effort is made to save the album playlist. But if album-playing is what you want, use this—it's about 5X faster than Doug's at building the album playlist.

Read More and DOWNLOAD

Add Comment to Playing track 0.9

Bother the documentation -- DOWNLOAD Add Comment to Playing Track now.

The Add Comment to Playing Track script opens a dialog box for adding a comment to the currently playing track.

Existing comment text is prepended to the new comment.

To add a carriage return to the comment, type "\r".

Read More and DOWNLOAD

iTunes Library Lister 0.88

Bother the documentation -- DOWNLOAD iTunes Library Lister now.

The iTunes Library Lister is now transformed into a full-blown application! iTLL uses Perl and the "iTunes Music Library.xml" file to quickly generate a listing of your iTunes library. The list can be output as tab-delimited text, as an HTML table, or as a complete HTML page. Artist, Album, and Track names are included by default; Track Artist, Genre, Kind, Track Rating, Track Time, and Year can optionally be added. Even the largest libraries can be listed in just a few seconds.

Tracks are sorted by album artist/artist, then by album, then by track number within each album. When an Artist field differs from a filled-in Album Artist field, the (track) Artist name can parenthetically appended to the album artist name. User-settable options include adding the extra fields mentioned above, and setting limits on the length of Artist, Track Artist, Album, Genre, and Track names, and setting Mac-Roman or UTF-8 encoding for output; users can also specify html head and tail template files for the "HTML page" listing. Settings are saved for easy re-use.

Read More and DOWNLOAD

iPod Music Importer 1.0

Bother the documentation -- DOWNLOAD iPod Music Importer now.

The iPod Music Importer script imports audio files—MP3, AAC (protected and "bookmarkable"), Apple Lossless, AIFF, Wav, QuickTime and Audible (.aa)—from your iPod to iTunes. Tracks, playlists, or your entire iPod music library can be imported. iPod tracks can optionally be placed in a new iTunes playlist. Playlists can optionally be moved into a new or existing iTunes playlist folder.

The script is based on Doug Adams' Import iPod Audio Files, which simply copies selected iPod tracks into iTunes. I just added a bit more front-end logic to allow playlist and Library selection, and built another loop to accommodate the new choices. Add a little improvement to duplicate file detection, et voila.

Read More and DOWNLOAD

Rewinder 0.9

Bother the documentation -- DOWNLOAD Rewinder now.

Rewinder is a hybrid of the Go to Time script for DVD Player, and Doug Adams' Replay Las Bit script for iTunes. When activated, a text input dialog prompts for a new playhead time; the dialog's default value is automatically set as the current playhead time minus a user-configured amount of "rewind time"; clicking through the dialog "rewinds" the track a set amount of time.

Entering a value sets the playhead to that time. Time values are very flexible—users can enter 00:01:30 or 1:30 or 90 to express the same amount of time. The time separator character is user-configurable; setting the time separator to "." (a period) allows complete operation from a numeric keypad ("1 . 0 8" to set a playhead time, then Enter to OK the dialog).

Read More and DOWNLOAD

Corral iTunes Dupes 1.01

Bother the documentation -- DOWNLOAD Corral iTunes Dupes 1.01 now.

Corral iTunes Dupes 1.01 is a modification of Doug Adams' Corral iTunes Dupes v1.0. When activated, the script checks iTunes for duplicate tracks, based on user-selected criteria; duplicates are then "corralled" into a playlist.

This version makes three modifications:

  1. The path to the iTunes Music Library.xml file is now automatically obtained.
  2. The perl code at the heart of the script has been tweaked to make Total Time values less precise.
  3. The "corralling" dialog now reports the number of dupes.

Read More and DOWNLOAD

More Coming...

As I get more time to use iTunes, I'll post more scripts. In the meantime, here's what I know needs doing....

Next Up: Dead File Locator

When you want to re-link "missing files" whose location you know, it can be a pain locating them all by hand. And while a script can identify tracks with "missing files," it cannot place those tracks in a playlist (because the track's file is...well, missing ;-) With a little manual help from the user, this script leaves you with a playlist of "missing file" tracks.