<?xml version="1.0" encoding="utf-8"?>

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:annotate="http://purl.org/rss/1.0/modules/annotate/"
    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
    xmlns="http://purl.org/rss/1.0/"
>

<channel rdf:about="http://akosut.com/software/">
<title>Alexei&apos;s Software</title>
<link>http://akosut.com/software/</link>
<description></description>
<dc:language>en-us</dc:language>
<dc:creator>Alexei Kosut</dc:creator>
<dc:date>2003-03-04T11:50:05-06:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=2.64" />
<admin:errorReportsTo rdf:resource="mailto:akosut@cs.stanford.edu" />

<items>
<rdf:Seq><rdf:li rdf:resource="http://akosut.com/software/ncidpop.html" />
<rdf:li rdf:resource="http://akosut.com/software/mtvalidate.html" />
<rdf:li rdf:resource="http://akosut.com/software/mtthreadedcomments.html" />
<rdf:li rdf:resource="http://akosut.com/software/mtspeling.html" />
<rdf:li rdf:resource="http://akosut.com/software/mtresolveurls.html" />
<rdf:li rdf:resource="http://akosut.com/software/mailscripts.html" />
</rdf:Seq>
</items>

</channel>

<item rdf:about="http://akosut.com/software/ncidpop.html">
<title>NCIDpop</title>
<link>http://akosut.com/software/ncidpop.html</link>

<description>
<![CDATA[<h2>Description</h2>

<div class="mainbody">
<img src="http://akosut.com/software/img/NCIDpop.jpg" class="appicon" alt="" />

<p>
NCIDpop is a network Caller ID client for Mac OS X and Windows 2000/XP
based on John L. Chmielewski&#8217;s <a
href="http://ncid.sourceforge.net/">NCID</a> package.  It is a
background application that displays pop-up Caller ID information when
information about an incoming call is received over the network.
</p>

<h3>Screen shots</h3>
<p><a href="http://akosut.com/software/img/ncidpop-macosx.jpg">NCIDpop on Mac OS X</a>
<br />
<a href="http://akosut.com/software/img/ncidpop-winxp.png">NCIDpop on Windows XP</a>
</p>

</div>

<h2 id="download">Download</h2>

<div class="mainbody">

<h3>0.9.5</h3>
<p>
<a href="http://sourceforge.net/project/showfiles.php?group_id=80586&release_id=163905">Download from SourceForge</a>
</p>

</div>

<h2>Documentation</h2>

<div class="mainbody">

<h3>Requirements</h3>
<ul>
<li><strong>Mac:</strong> Mac OS X 10.2 or later</li>
<li><strong>Windows:</strong> Windows 2000 or Windows XP</li>
<li><strong>NCID server:</strong> <a
href="http://ncid.sourceforge.net/">ncidd</a> 0.6 or later</li>
</ul>

<h3>Installation</h3>

<h4>Mac OS X</h4>
<p>Copy the <strong>NCIDpop</strong> application to your hard drive.
Double-click to launch it.  There will be no visual indication, but
you can verify that it is running by looking for &#8220;NCIDpop&#8221;
in Process Viewer.  NCIDpop will automatically quit when you log out
or shut down your Mac.</p>
<p>To launch NCIDpop automatically when you log in to Mac OS X, add it to the
Login Items panel in System Preferences.</p>
<p>To change the NCID server, hold down the command key while double-clicking <strong>NCIDpop</strong>.</p>

<h4>Windows</h4>
<p>Download <strong>ncidpop.exe</strong> to your hard drive.
Double-click to launch NCIDpop.  The NCIDpop status
icon will be installed in your task bar&#8217;s notification option.
You can quit NCIDpop by right-clicking its icon and choosing
&#8220;Remove Icon&#8221; from the context menu.
</p>
<p>To launch NCIDpop automatically when you log in to Windows, copy <code>ncidpop.exe</code>
to the Startup folder in your Start menu.</p>
<p>To change the NCID server host, choose &#8220;Set NCID Server&#8230;&#8221; from the context menu.  You will need to quit and re-launch NCIDpop for the change to take effect.</p>

<h4>Running a NCID Server</h4>

<p>Before you can use NCIDpop, you will need to be running a Network Caller ID server.  NCIDpop is designed for use with <a
href="http://ncid.sourceforge.net/">ncidd</a>.  When NCIDpop first starts, you will need to enter the hostname or IP address of the server running ncidd.  If the server is running on the local computer (currently possible only with Mac OS X), enter &#8220;localhost&#8221;.  If you make a mistake, see the directions above to change the NCIDpop server setting for your operating system.</p>

<p>If you are running ncidd on a non-default port (i.e., not 3333), enter the server name followed by a colon and the port number, e.g., <samp>callerid.domain.name:1234</samp>.</p> 

</div>

<h2>Version History</h2>

<div class="mainbody">

<h3>0.9.5 (May 5, 2003)</h3>
<ul>
<li>No longer requires patched ncidd; uses TCP to connect to a specified Network Caller ID server.</li>
<li>Added dialog to set caller ID server host.</li>
</ul>

<h3>0.9</h3>
<ul>
<li>Initial release</li>
</ul>

</div>

<h2>Known Bugs</h2>

<div class="mainbody">
<ul>
<li>The Mac OS X client provides no way to immediately hide the caller
information; it will remove itself after 30 seconds.</li>
<li>Neither client provides a way to show the caller ID log.  Use the
<a href="http://ncid.sourceforge.net/">NCID</a> TCL
client.</li>
</ul>
</div>
<p><a href="http://akosut.com/software/ncidpop.html">Continue reading&#8230;</a></p>]]>
</description>

<trackback:ping rdf:resource="http://akosut.com/log/mt-tb.cgi/83" />

<dc:subject>Mac OS X</dc:subject>
<dc:creator>Alexei Kosut</dc:creator>
<dc:date>2003-03-04T11:50:05-06:00</dc:date>
</item>
<item rdf:about="http://akosut.com/software/mtvalidate.html">
<title>MTValidate</title>
<link>http://akosut.com/software/mtvalidate.html</link>

<description>
<![CDATA[<h2>Description</h2>

<div class="mainbody">
<p>MTValidate is a <a href="http://www.movabletype.org/">Movable
Type</a> plugin based on the <a href="http://validator.w3.org/">W3C
MarkUp Validation Service</a>.  It lets you embed the results of
arbitrary of text in HTML or XHTML into the documents generated by
your weblog.</p>
</div>


<h2 id="download">Download</h2>

<div class="mainbody">
<p>Current version: <strong><a href="http://akosut.com/software/download/mtvalidate.tar.gz">0.1</a></strong></p>
</div>

<h2>Documentation</h2>

<div class="mainbody">

<h3>Requirements</h3>
<ul>
<li><a href="http://www.movabletype.org/">Movable Type</a>.  I have
only tested with version 2.51, although others may work.</li>
<li>The Perl modules and <a href="http://openjade.sourceforge.net/">OpenSP</a> programs required by the <a
href="http://validator.w3.org/source/">W3C source code</a>.</li>
<li><a href="http://validator.w3.org/sgml-lib.tar.gz">A collection of
DTDs and other files</a> to validate against (from the W3C).</li>
</ul>

<h3>Installation</h3>
<ol>
<li>Copy <code>MTValidate.pl</code> and the
<code>validator</code> directory to your Movable Type
<code>plugins</code> directory.</li>
<li>Copy <code>sgml-lib</code> into the
<code>plugins/validator</code> directory.</li>
<li>Edit <code>plugins/validator/config/validator.config</code> to
reflect your setup.</li>
</ol>

<h3>Use</h3>

<p>This plugin provides the <strong><code>MTValidate</code></strong> container tag.
The contents of this tag should be a complete HTML, XHTML, SGML or XML
document, which will be replaced with the results of the validation.
There are also several attributes you can provide.  Set their value to
<kbd>&#8220;1&#8221;</kbd> to enable, <kbd>&#8220;0&#8221;</kbd> to disable:</p>
<ul>
<li id="attr-verbose"><strong>verbose</strong><br />
Verbose output (on by default): If this is disabled, the other
options will be ignored.</li>
<li id="attr-ss"><strong>ss</strong><br />
Displays the HTML source of the document you validated and links
error messages directly to lines in this output. Makes it easy to see
what&#8217;s wrong.  The source is always shown if there is an error.</li>
<li id="attr-outline"><strong>outline</strong><br />
Will generate an outline of your document from the H1 - H6
elements. For a properly formed document, this will be a nicely nested
tree structure. The visualization of your document&#8217;s structure makes
it easier to see where you&#8217;ve skipped a heading.</li>
<li id="attr-sp"><strong>sp</strong><br />
Shows you exactly how the SGML Parser read your
document. Probably best used only by advanced users as it deals with
low-level SGML constructs.</li>
<li id="attr-noattr"><strong>noattr</strong><br />
Suppress attributes from the parse tree to make it more readable.</li>
<li id="attr-charset"><strong>charset</strong><br />
The character set of the document to be validated.  For example,
<kbd>utf-8</kbd> or <kbd>iso-8859-1</kbd>.  If not specified, the
validator will try to guess based on the HTML <code>META</code>
element or XML declaration.</li>
<li id="attr-doctype"><strong>doctype</strong><br />
The document type to apply to the document.  Normally, this is
extracted from the <code>DOCTYPE</code> declaration in the document
itself, but you
can override it using this attribute.  For example,
<code>HTML 3.2</code> or <code>XHTML 1.0 Transitional</code>
</li>
</ul>
<p>Here is an example that validates the title and body of an entry,
based on the <a
href="http://www.movabletype.org/default_templates.shtml">default
templates</a> from Movable Type 2.51:</p>
<blockquote>
<pre>
<strong>&lt;MTValidate&gt;</strong>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /&gt;
&lt;title&gt;&lt;$MTBlogName$&gt;: &lt;$MTEntryTitle$&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h3 class="title"&gt;&lt;$MTEntryTitle$&gt;&lt;/h3&gt;
&lt;$MTEntryBody$&gt;
&lt;a name="more"&gt;&lt;/a&gt;
&lt;$MTEntryMore$&gt;
&lt;/body&gt;
&lt;/html&gt;
<strong>&lt;/MTValidate&gt;</strong>
</pre>
</blockquote>
<p>For information on using Movable Type template tags like
<code>MTValidate</code> in entry previews, see the documentation for
<a href="http://akosut.com/software/mtspeling.html">MTSpeling</a>.</p>

<h3>Customizing the Validation Output</h3>
<p>The text that appears in the output of the <code>MTValidate</code>
tag is controlled by the templates in the
<code>plugins/validator/templates</code> directory.  Edit these to
change the validation output.</p>

</div>

<h2>Version History</h2>

<div class="mainbody">

<h3>Version 0.1</h3>
<ul>
<li>Initial release</li>
</ul>

</div>

<h2>Known Bugs</h2>

<div class="mainbody">
<ul>
<li><em>None</em></li>
</ul>
</div>

<p><a href="http://akosut.com/software/mtvalidate.html">Continue reading&#8230;</a></p>]]>
</description>

<trackback:ping rdf:resource="http://akosut.com/log/mt-tb.cgi/82" />

<dc:subject>Movable Type</dc:subject>
<dc:creator>Alexei Kosut</dc:creator>
<dc:date>2003-03-04T11:48:19-06:00</dc:date>
</item>
<item rdf:about="http://akosut.com/software/mtthreadedcomments.html">
<title>MTThreadedComments</title>
<link>http://akosut.com/software/mtthreadedcomments.html</link>

<description>
<![CDATA[<h2>Description</h2>

<div class="mainbody">
<p>MTThreadedComments adds
full-fledged threaded commenting features to a <a
href="http://www.movabletype.org/">Movable Type</a> weblog.  Inspired by
the comment features of <a
href="http://www.livejournal.com/">LiveJournal</a>, it adds threading
and subject lines to Movable Type comments.  This means your readers
can carry on more complex discussions, adding their own titles and
replying directly to other comments.</p>

<p><strong>Note:</strong> MTThreadedComments includes a standard
Movable Type plugin to add new tags, but it also requires modification
of the main Movable Type source code.  Do not install
MTThreadedComments unless you are comfortable modifying your Movable
Type installation.</p>

</div>

<h2 id="download">Download</h2>

<div class="mainbody">
<p>Current version: <strong>0.1.1</strong><br />
<a name="download-plugin" href="http://akosut.com/software/download/MTThreadedComments.pl">Plugin</a>
| <a name="download-patch" href="http://akosut.com/software/download/mt-262-threaded-comments.patch">Patch</a>
</p>
</div>

<h2>Installing MTThreadedComments</h2>

<div class="mainbody">

<h3>Requirements</h3>
<ul>
<li><a href="http://www.movabletype.org/">Movable Type</a>, version
2.6 or later</li>
</ul>

<h3>Installation</h3>
<ol>
<li>Copy <code>MTThreadedComments.pl</code> into your Movable
Type <code>plugins</code> directory.</li>
<li>Apply the <a href="#download-patch">patch</a> to the Movable Type
library.  If you are using a standard Unix-like shell, <code>cd</code>
to your Movable Type directory (the one that contains
<code>mt.cgi</code>, <code>lib</code>, <code>extlib</code>,
etc&#8230;) and type the following command:
<blockquote>
<kbd>patch -p0 &lt; <var>/path/to/where/you/downloaded/mt-threaded-comments.patch</var></kbd>
</blockquote>
Watch the output of the <code>patch</code> command for any errors.</li>
<li>If you are using a database to store your weblog (i.e., not DBM
files), you will need to modify your database scheme.  You will need
to add <samp>comment_subject</samp> and <samp>comment_parent_id</samp> columns to the
<samp>mt_comment</samp> table.  You might use SQL commands similar to
the following:
<blockquote><pre>
alter table mt_comment add column comment_subject text
alter table mt_comment add column comment_parent_id integer
alter table mt_comment add index comment_parent_id
</pre></blockquote>
</li>
</ol>

<h2>Documentation</h2>

<h3>Configuring your weblog</h3>

After installing MTThreadedComments, you will need to make some major
changes to your weblog templates to accomodate the new comment
features.  Below I give examples based on <a href="http://akosut.com/~akosut/log/">my
weblog</a> and the <a
href="http://www.movabletype.org/default_templates.shtml">default
Movable Type templates</a>.  If you have customized your weblog
templates significantly, make these changes carefully.

<h4>Designing your comment workflow</h4>

In the default Movable Type setup, both the <span class="tmpl">Comment
Listing Template</span> and the <span class="tmpl">Individual Entry
Archive</span> template display all the comments on an entry, and
provide a form for adding a new comment.  We will change this.  The
following steps will configure your weblog as follows:
<ul>
<li>The <span class="tmpl">Individual Entry Archive</span> will
be the only listing of your comments, and will not contain a form to
post new ones.  This would be too confusing, as you can now not only
post a comment about an entry, but reply to an existing comment.  So
the comment posting form needs to be dynamic.</li>
<li>The <span class="tmpl">Comment Listing Template</span> (shown by
the <code>mt-comments.cgi</code> script) will contain the sole form
for posting comments.  It will no longer show all comments on an
entry, but instead will show only the entry or comment that is being
responded to.</li>
<li>We will use inline comments.  If you prefer to use popup windows
for your comments (I don&#8217;t), you will need to add the appropriate
JavaScript yourself.</li>
</ul>

<h4>Altering the Individual Entry Archive template</h4>

Make the following changes to the <span class="tmpl">Individual Entry
Archive</span> template:
<ol>
<li>Remove the comment posting form (from <code>&lt;form</code> to
<code>&lt;/form&gt;</code>).  Replace it instead with a link to the
comment posting CGI script:
<blockquote class="mtml"><pre>
&lt;a href="&lt;$MTCGIPath$&gt;&lt;$MTCommentScript$&gt;?entry_id=&lt;$MTEntryID$&gt;"&gt;"Post 
a new comment&lt;/a&gt;
</pre></blockquote>
</li>
<li>
Replace the comment listing&mdash;that is, the part enclosed by
<code>&lt;MTComments&gt;</code>&mdash;with this:
<blockquote class="mtml"><pre>
&lt;MTRootComments&gt;
&lt;div class="comments-body"&gt;
&lt;$MTInclude module="Nested Comments" $&gt;
&lt;/div&gt;
&lt;/MTRootComments&gt;
</pre></blockquote>
Note that if you are using anything other than 
<code>&lt;MTComments&gt;</code> (for example, if you have any
attributes),
you will not be able to use <code>&lt;MTRootComments&gt;</code>.
Instead, continue using your current container tag to list your comments,
but use <a
href="#MTCommentUnlessParent"><code>&lt;MTCommentUnlessParent&gt;</code></a> to
restrict output to only the root comments in the entry.  If you use
<a
href="http://kalsey.com/2003/02/simplecomments/">SimpleComments</a>,
your comment listing might look like this:
<blockquote class="mtml"><pre>
&lt;MTSimpleComments&gt;

&lt;MTSimpleCommentIfComment&gt;
&lt;MTCommentUnlessParent&gt;
&lt;div class="comments-body"&gt;
&lt;$MTInclude module="Nested Comments"&gt;
&lt;/div&gt;
&lt;/MTCommentUnlessParent&gt;
&lt;/MTSimpleCommentIfComment&gt;

&lt;MTSimpleCommentIfTrackback&gt;
<em>&lt;!-- your trackback code here --&gt;</em>
&lt;/MTSimpleCommentIfTrackback&gt;
&lt;/MTSimpleComments&gt;
</pre></blockquote>
</li>
</ol>

<h4>Creating the Nested Comments template</h4>

<p>Use your weblog menu to create a new template module, named
&ldquo;<span class="tmpl">Nested
Comments</span>&rdquo;.  The contents should be as follows:</p>
<blockquote class="mtml"><pre>
&lt;MTIfCommentSubject&gt;
&lt;h3 class="title"&gt;&lt;$MTCommentSubject$&gt;&lt;/h3&gt;
&lt;/MTIfCommentSubject&gt;
&lt;$MTCommentBody$&gt;
&lt;span class="comments-post"&gt;&lt;b&gt;Posted by:&lt;/b&gt;
&lt;$MTCommentAuthorLink spam_protect="1"$&gt; on &lt;$MTCommentDate$&gt;
&lt;MTEntryIfCommentsOpen&gt;
| &lt;a href="&lt;$MTCGIPath$&gt;&lt;$MTCommentScript$&gt;?entry_id=&lt;$MTEntryID$&gt;;parent_id=&lt;$MTCommentID$&gt;"&gt;Reply to this&lt;/a&gt;
&lt;/MTEntryIfCommentsOpen&gt;
&lt;/span&gt;

&lt;MTCommentIfChildren&gt;
&lt;div class="comments-nest-box"&gt;
&lt;MTCommentChildren&gt;
&lt;div class="comments-body"&gt;
&lt;$MTInclude module="Nested Comments" $&gt;
&lt;/div&gt;
&lt;/MTCommentChildren&gt;
&lt;/div&gt;
&lt;/MTCommentIfChildren&gt;
</pre></blockquote>
This template (included by the <span class="tmpl">Individual Entry
Archive</span> for each root comment) formats and displays a comment,
and then recursively includes itself for each child comment.  This is
what allows nested comments to display correctly.

<h4>Altering the Comment Listing Template</h4>

Make the following changes to the <span class="tmpl">Comment Listing
Template</span>:
<ol>

<li>
Replace the comment listing (from <code>&lt;MTComments&gt;</code> to
<code>&lt;/MTComments&gt;</code>) with this:
<blockquote class="mtml"><pre>
&lt;MTCommentPreviewUnlessParent&gt;
&lt;div class="blogbody"&gt;
&lt;h3 class="title"&gt;&lt;$MTEntryTitle$&gt;&lt;/h3&gt;
&lt;$MTEntryBody$&gt;
&lt;$MTEntryMore$&gt;
&lt;div class="posted"&gt;&lt;p&gt;Posted by &lt;$MTEntryAuthor$&gt;
at &lt;$MTEntryDate$&gt;&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/MTCommentPreviewUnlessParent&gt;

&lt;MTCommentPreviewIfParent&gt;
&lt;MTCommentPreviewParent&gt;
&lt;div class="comments-body"&gt;
&lt;h3 class="title"&gt;&lt;$MTCommentSubject$&gt;&lt;/h3&gt;
&lt;$MTCommentBody$&gt;
&lt;span class="comments-post"&gt;Posted by
&lt;$MTCommentAuthorLink spam_protect="1"$&gt; at &lt;$MTCommentDate$&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;/MTCommentPreviewParent&gt;
&lt;/MTCommentPreviewIfParent&gt;
</pre></blockquote>
<p>This will display the context being replied to.  You may wish to
change the contents of the <code>&lt;div class="comments-head"&gt;</code> tag above the
context to reflect its new nature.</p>
</li>

<li>Add the following to the post form, above the
<code>Comments:</code> text area label:
<blockquote class="mtml"><pre>
&lt;input type="hidden" name="static" value="1" /&gt;
&lt;input type="hidden" name="parent_id" value="&lt;$MTCommentPreviewParentID$&gt;" /&gt;

&lt;label for="subject"&gt;Subject:&lt;/label&gt;

&lt;MTCommentPreviewUnlessParent&gt;
&lt;input id="subject" name="subject"
       value="Re: &lt;$MTEntryTitle encode_html="1" $&gt;" /&gt;
&lt;/MTCommentPreviewUnlessParent&gt;

&lt;MTCommentPreviewIfParent&gt;
&lt;MTCommentPreviewParent&gt;
&lt;input id="subject" name="subject"
       value="&lt;$MTCommentResponseSubject encode_html="1" $&gt;" /&gt;
&lt;/MTCommentPreviewParent&gt;
&lt;/MTCommentPreviewIfParent&gt;

&lt;br /&gt;&lt;br /&gt;
</pre></blockquote>
This adds a <code>Subject</code> entry box to the form, and
populate it with the appropriate values.  The <code>parent_id</code>
value is used for threading (to indicate where to nest the new
comment), and setting the <code>static</code> value tells Movable Type
to redirect back to the entry archive page after posting the comment,
since the <span class="tmpl">Comment Listing Template</span> is no
longer appropriate for this.
</li>

</ol>

<h4>Altering the Comment Preview Template and Comment Error
Template</h4>

Make the following changes to both the <span class="tmpl">Comment
Preview Template</span> and the <span class="tmpl">Comment Error
Template</span>:

<ol>
<li>
Add the following to the comment editing form, above the
<code>Comments:</code> text area label:
<blockquote class="mtml"><pre>
&lt;input type="hidden" name="parent_id" value="&lt;$MTCommentPreviewParentID$&gt;" /&gt;

&lt;label for="subject"&gt;Subject:&lt;/label&gt;
&lt;input id="subject" name="subject"
       value="&lt;$MTCommentPreviewSubject encode_html="1"$&gt;" /&gt;&lt;br /&gt;&lt;br /&gt;
</pre></blockquote>
</li>
</ol>

<h4>Altering the Stylesheet template</h4>

<p>In order for threaded comments to appear nested in your comment
listing, you will need to add a nested command style to tell your
browser how to display nested comments.  To display nested comments as
they appear in <a href="http://akosut.com/~akosut/log/">my weblog</a>, add this to your
<span class="tmpl">Stylesheet</span> template:</p>

<blockquote class="mtml"><pre>
	.comments-nest-box {
		padding-left:15px;
		border-left:5px solid #AAA;
	}
</pre></blockquote>

<h4>Altering the index templates</h4>

<p>Finally, you will need to alter any templates that link to your
comment script or individual entry archive.  This includes the <span
class="tmpl">Main Index</span>, <span class="tmpl">Date-Based
Archive</span> and <span class="tmpl">Category Archive</span>
templates.</p>

<p>Find the section in each template that links to the comments.  It
will probably be wrapped in a
<code>&lt;MTEntryIfAllowsComments&gt;</code> tag.  In the default
templates, it is located between the date posted and the trackback
link.  We want to replace the comment link with the following:</p>
<blockquote class="mtml"><pre>
&lt;MTEntryIfAllowComments&gt;
| &lt;a href="&lt;$MTEntryLink type="Individual"$&gt;#comments"&gt;Comments
  (&lt;$MTEntryCommentCount$&gt;)&lt;/a&gt;
&lt;MTEntryIfCommentsOpen&gt;
| &lt;a href="&lt;$MTCGIPath$&gt;&lt;$MTCommentScript$&gt;?entry_id=&lt;$MTEntryID$&gt;"&gt;Post
  a new comment&lt;/a&gt;
&lt;/MTEntryIfCommentsOpen&gt;
&lt;/MTEntryIfAllowComments&gt;
</pre></blockquote>
<p>This provides a link to the comment section of the individual entry
archive to read existing comments, and a link to the comments CGI
script to post a new one.</p>

<h3>Comment Subject Tags</h3>
<p>The following tags are available for use in displaying
information about the subject of a comment.  Except where noted, they
require that a comment be in context, e.g., within a
<code>&lt;MTComments&gt;</code> tag:</p>

<ul>
<li><span class="mttag" id="MTCommentSubject">MTCommentSubject</span><br />
The subject of this comment.  Blank if this comment has no subject.
</li>

<li><span class="mttag" id="MTIfCommentSubject">MTIfCommentSubject</span><br />
A container tag; the markup between
<code>&lt;MTIfCommentSubject&gt;</code> and
<code>&lt;/MTIfCommentSubject&gt;</code> will be displayed
if this comment has a subject.
</li>

<li><span class="mttag" id="MTUnlessCommentSubject">MTUnlessCommentSubject</span><br />
A container tag; the markup between
<code>&lt;MTUnlessCommentSubject&gt;</code> and
<code>&lt;/MTUnlessCommentSubject&gt;</code> will be displayed
if this comment does not have a subject, or if the subject is the
empty string.
</li>

<li><span class="mttag" id="MTCommentResponseSubject">MTCommentResponseSubject</span><br />
An appropriate subject for responding to this comment.  This is
normally &ldquo;<code>Re: </code>&rdquo; followed by the subject of
the current comment, unless the comment has no subject or the subject
already starts with <code>Re</code>.
</li>

<li><span class="mttag" id="MTCommentPreviewSubject">MTCommentPreviewSubject</span><br />
The subject of the comment you are previewing.  This tag can be used
only when a comment is being previewed, e.g., in the
<span class="tmpl">Comment Preview Template</span> or
the <span class="tmpl">Comment Error Template</span>.
</li>

</ul>

<h3>Comment Threading Tags</h3>

<p>The following tags are available for use in displaying information
about comment threading.  Except where noted, they require that
a comment (or comment preview, for tags with <code>Preview</code> in
the name) be in context, e.g., within a
<code>&lt;MTComments&gt;</code> tag.</p>

<p>Comments are threaded in a tree structure; the children of a
comment are those comments that are direct replies to it (replies to
replies are not children, but children of children).  Root comments
are those that are attached directly to an entry, and are not replies
to another comment.</p>

<ul>

<li><span class="mttag" id="MTRootComments">MTRootComments</span><br />
A container tag representing a list of root comments; the markup between
<code>&lt;MTRootComments&gt;</code> and
<code>&lt;/MTRootComments&gt;</code> will be displayed once for each
root comment in the entry.  The comments will be displayed in the
order they were posted.  This tag can be used in an entry context.
</li>

<li><span class="mttag" id="MTCommentChildren">MTCommentChildren</span>,
A container tag representing the list of children of this comment; the markup between
<code>&lt;MTCommentChildren&gt;</code> and
<code>&lt;/MTCommentChildren&gt;</code> will be displayed once for each comment that is
a direct child of the current comment, in the order they were posted.
</li>

<li><span class="mttag" id="MTCommentIfChildren">MTCommentIfChildren</span><br />
A container tag; the contents of this container will be displayed if
the current comment has at least one child.
</li>

<li><span class="mttag" id="MTCommentParent">MTCommentParent</span>,
<span class="mttag" id="MTCommentPreviewParent">MTCommentPreviewParent</span><br />
A container tag representing the parent of the current comment (or
comment preview). 
This allows you to use <code>&lt;$MTComment*$&gt;</code> tags to refer
to the parent comment.  After you end this context, tags return to
referring to the current comment.
</li>

<li><span class="mttag" id="MTCommentParentID">MTCommentParentID</span>,
<span class="mttag" id="MTCommentPreviewParentID">MTCommentPreviewParentID</span><br />
The numeric ID of the parent of this comment (or comment preview).  Displays <code>0</code> if the current
comment is a root comment (has no parent).
</li>

<li><span class="mttag" id="MTCommentIfParent">MTCommentIfParent</span>,
<span class="mttag" id="MTCommentPreviewIfParent">MTCommentPreviewIfParent</span><br />
A container tag; the contents of this container will be displayed if
the current comment (or comment preview) has a parent, i.e., if it is
<em>not</em> a root comment.
</li>

<li><span class="mttag" id="MTCommentUnlessParent">MTCommentUnlessParent</span>,
<span class="mttag" id="MTCommentPreviewUnlessParent">MTCommentPreviewUnlessParent</span><br />
A container tag; the contents of this container will be displayed if
the current comment (or comment preview) does not have a parent, i.e.,
if it is a root comment.
</li>

</ul>

<h3>Caveats</h3>

<ul>
<li>If you are displaying comments using templates like those above,
and you delete a comment that has replies, those replies will no
longer appear in the comment listing.</li>
<li>Subjects and threading information is not exported by the Movable
Type export functionality.  If you are using this to back up your
weblog, be aware that comment subjects and threading will not be
backed up.</li>
</ul>

</div>

<h2>Version History</h2>

<div class="mainbody">

<h3>0.1.1</h3>
<ul>
<li>Fix typo that caused MTCommentParent to return a template error.</li>
</ul>

<h3>0.1</h3>
<ul>
<li>Initial release</li>
</ul>

</div>

<h2>Known Bugs</h2>

<div class="mainbody">

<p><em>None</em></p>

<!--
<ul>
</ul>
-->

</div>

<p><a href="http://akosut.com/software/mtthreadedcomments.html">Continue reading&#8230;</a></p>]]>
</description>

<trackback:ping rdf:resource="http://akosut.com/log/mt-tb.cgi/81" />

<dc:subject>Movable Type</dc:subject>
<dc:creator>Alexei Kosut</dc:creator>
<dc:date>2003-03-04T11:47:22-06:00</dc:date>
</item>
<item rdf:about="http://akosut.com/software/mtspeling.html">
<title>MTSpeling</title>
<link>http://akosut.com/software/mtspeling.html</link>

<description>
<![CDATA[<h2>Description</h2>

<div class="mainbody">
<p>MTSpeling is a <a href="http://www.movabletype.org/">Movable
Type</a> plugin by <a href="http://akosut.com/~akosut/">Alexei Kosut</a> to add
spell-checking capabilities to a Movable Type weblog.  It adds a
global filter that allows any template tag output to be spell-checked,
and provides tags for fully-customizable suggestion output.</p>
</div>

<h2 id="download">Download</h2>

<div class="mainbody">
<p>Current version: <strong><a href="http://akosut.com/software/download/MTSpeling.pl">0.2</a></strong></p>
</div>

<h2>Installing MTSpeling</h2>

<div class="mainbody">

<h3>Requirements</h3>
<ul>
<li><a href="http://www.movabletype.org/">Movable Type</a>.  I have
only tested with version 2.51, although others may work.</li>
<li><a
href="http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html">International
Ispell</a> 3.1 or later.</li>
<li><a
href="http://search.cpan.org/perldoc?Lingua::Ispell">Lingua::Ispell</a>.
This is a Perl module to access Ispell from Perl.  It must be installed
in your site&#8217;s Perl installation or the Movable Type
<code>extlib</code> directory.</li>
</ul>

<h3>Installation</h3>
<ol>
<li>Copy <code>MTSpeling.pl</code> into your Movable
Type <code>plugins</code> directory.</li>
<li>Edit <code>MTSpeling.pl</code> if necessary with your
configuration information.  You will need to know the full path
location of the <code>ispell</code> binary on your system.</li>
</ol>

<h2>Documentation</h2>


<h3>Global tag attribute: <code>check_spelling</code></h3>

<p>Add the <kbd>check_spelling</kbd> attribute to any Movable Type
template tag to check its spelling.  Pass a value of
<kbd>&#8220;1&#8221;</kbd> to make red any term not in the dictionary (by adding
an HTML <code>font</code> tag).  For example, to display the
body of an entry with misspelled words in red, you might use:</p>
<blockquote>
<kbd>&lt;$MTEntryBody check_spelling=&#8221;1&#8221;$&gt;</kbd>
</blockquote>
<p>Use an attribute value of <kbd>&#8220;2&#8221;</kbd> to wrap misspelled words
with a <code>&lt;span class="spellingerror"&gt;</code> tag, which
allows you to customize the display with a style sheet.  To check
spelling, but leave the tag&#8217;s output unmodified use a value of
<kbd>&#8220;0&#8221;</kbd>.</p>

<p>Each tag that is spell-checked will add to the results available
using the <code>&lt;MTSpellingResults&gt;</code> tag.  Following
<code>&lt;/MTSpellingResults&gt;</code>, the results will be cleared
for future uses.</p>

<h3>Spelling Suggestion Tags</h3>
<p>The following tags are available for use in displaying the results of
spelling suggestions (see the Movable Type manual for information on
the use of template tags).  These results will include misspelled words from
each prior use of the <code>check_spelling</code> attribute.</p>
<ul>
<li><strong id="MTSpellingIfErrors">MTSpellingIfErrors</strong><br />
A container tag:  the contents of this container will be displayed
if there has been at least one spelling error.  This allows the
spelling results to be displayed only if there has been a misspelling.
</li>

<li><strong id="MTSpellingResults">MTSpellingResults</strong><br />
A container tag representing a list of spelling results, one for each
misspelled word in previous uses of the <code>check_spelling</code>
attribute.  Each of the following tags are used to display a
particular piece of information about a suggestion.
</li>

<li><strong id="MTSpellingResultTerm">MTSpellingResultTerm</strong><br />
The term that was misspelled.
</li>

<li><strong id="MTSpellingResultIfSuggestions">MTSpellingResultIfSuggestions</strong><br />
A container tag:  the contents of this container will be displayed if
the plugin has suggestions for the current misspelled term.  If the
word was not in the dictionary, but suggestions are not available, the
contents will not be displayed.
</li>

<li><strong id="MTSpellingResultUnlessSuggestions">MTSpellingResultUnlessSuggestions</strong><br />
A container tag:  the contents of this container will be displayed if
the plugin has no suggestions for the current misspelled term.  If the
word was not in the dictionary, but suggestions are not available, the
contents will be displayed.
</li>

<li><strong
id="MTSpellingResultSuggestions">MTSpellingResultSuggestions</strong><br
/>
A container tag representing a list of suggestions for the current term.
</li>

<li><strong id="MTSpellingSuggestion">MTSpellingSuggestion</strong><br />
Used inside a <code>&lt;MTSpellingResultSuggestions&gt;</code>
container, represents a suggestion for the current term.
</li>

</ul>

<h3>Example</h3>

<p>The following template HTML code will display a comment preview with
misspelled words displayed in red, followed by suggestions:</p>
<blockquote><code>
&lt;$MTCommentPreviewBody check_spelling="1"$><br />
&lt;MTSpellingIfErrors&gt;<br />
&lt;h4&gt;Spelling Suggestions&lt;/h4&gt;<br />
&lt;table&gt;<br />
&lt;MTSpellingResults&gt;<br />
&lt;tr&gt;&lt;th align="left"&gt;&lt;$MTSpellingResultTerm$&gt;&lt;/th&gt;<br />
&lt;td&gt;&lt;MTSpellingResultIfSuggestions&gt;<br />
&lt;MTSpellingResultSuggestions&gt;<br />
&lt;$MTSpellingSuggestion$&gt; <br />
&lt;/MTSpellingResultSuggestions&gt;<br />
&lt;/MTSpellingResultIfSuggestions&gt;<br />
&lt;MTSpellingResultUnlessSuggestions&gt;<br />
&lt;em&gt;No suggestions&lt;/em&gt;<br />
&lt;/MTSpellingResultUnlessSuggestions&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/MTSpellingResults&gt;<br />
&lt;/table&gt;<br />
&lt;/MTSpellingIfErrors&gt;
</code></blockquote>
<p>You might use code similar to this in the comment preview template to
provide spell-checking for comments.</p>

<h3>Spell-checking Weblog Entries</h3>

<p>You can add spell-checking to comment previews by modifying the
comment preview template, as shown above.  However, since Movable Type
does not provide access to the templates use to generate the content
management system, adding spell-checking to the entry preview requires
modifying the Movable Type software, as follows:</p>
<ol>
<li>Locate <code>CMS.pm</code> in the <code>lib/MT/App</code>
subdirectory of your Movable Type installation.</li>
<li>Find the <code>preview_entry</code> subroutine, and the location
where the <code>$preview_code</code> variable is set.  This will be line
2034 in Movable Type 2.51.</li>
<li>Replace the <code>$preview_code</code> initialization (the lines
before <code>HTML</code>) with your
new HTML, including any template tags to display spell-checking
information.</li>
<li><em>(Optional)</em> You may wish to make use of the
<kbd>&lt;$MTInclude$&gt;</kbd> tag, to place your spell-checking code
in a module that can be included from several places.  To make the
<code>&lt;$MTInclude$&gt;</code> tag work, you will first need to add
the following line of Perl code above the <code>$preview_code</code>
initialization:
<pre>    $ctx->stash('blog_id', $blog_id);</pre>
</ol>
<p>Don&#8217;t forget to make a backup copy of your Movable Type software
before making changes, as modifications could make your weblog
inaccessible!</p>

<h3>Using a personal dictionary</h3>

<p>MTSpeling provides support for a personal dictionary of words that
it will treat as spelled correctly, stored as a cookie on the user&#8217;s
web browser.  The only support in the plugin is to be able to read and
parse the <code>spelling-dict</code> cookie as a colon-seperated list
of words.  If you want to make use of this, you&#8217;ll have to write your
own code to create and add to this cookie.  In <a
href="http://rescomp.stanford.edu/~akosut/log/">my weblog</a>, I use
JavaScript to provide an &#8219;add to dict&#8220; link in the list of
spelling suggestions that adds a word to this cookie.  You could also
write a server-side script to do something similar.</p>

<p>There is no current support in the plugin for dictionaries stored
anywhere other than as a cookie in the browser.</p>

</div>

<h2>Version History</h2>

<div class="mainbody">

<h3>0.2</h3>
<ul>
<li>Initial release</li>
</ul>

</div>

<h2>Known Bugs</h2>

<div class="mainbody">
<ul>
<li>The name is an awful pun.  Years ago, I added it to
<a href="http://httpd.apache.org/docs/mod/mod_speling.html">Apache</a>,
and now I introduce it to Movable Type.  It will not be changed.</li>
</ul>
</div>


<p><a href="http://akosut.com/software/mtspeling.html">Continue reading&#8230;</a></p>]]>
</description>

<trackback:ping rdf:resource="http://akosut.com/log/mt-tb.cgi/80" />

<dc:subject>Movable Type</dc:subject>
<dc:creator>Alexei Kosut</dc:creator>
<dc:date>2003-03-04T11:45:56-06:00</dc:date>
</item>
<item rdf:about="http://akosut.com/software/mtresolveurls.html">
<title>MTResolveURLs</title>
<link>http://akosut.com/software/mtresolveurls.html</link>

<description>
<![CDATA[<h2>Description</h2>

<div class="mainbody">
<p>ResolveURLs is a <a href="http://www.movabletype.org/">Movable
Type</a> plugin by <a href="http://akosut.com/~akosut/">Alexei Kosut</a> to resolve
relative URLs in weblog entries.  It adds a new global filter
<code>resolve_urls</code> that can be used in any MT template tag.
Enabling this causes relative URLs to be resolved against your
weblog site URL, and output as absolute.
<p>This is useful, as relative URLs are convenient to type, but
unsafe, since weblog entries can be seen from a number of different
pages (e.g., from the index or from an archive page), each of which
might resolve a relative URL differently.  RSS feeds make the problem
of relative URLs even worse, since your links may end up on another
site where relative URLs will not point to your pages at all.
</p>
</div>

<h2 id="download">Download</h2>

<div class="mainbody">
<p>Current version: <strong><a href="http://akosut.com/software/download/ResolveURLs.pl">1.0.2</a></strong>
</div>

<h2>Documentation</h2>

<div class="mainbody">

<h3>Requirements</h3>
<ul>
<li><a href="http://www.movabletype.org/">Movable Type</a>.  I have
only tested with version 2.51, although others may work.
<li><a href="http://search.cpan.org/perldoc?URI">URI</a>.  I think
this is indirectly required by MT, though, so you probably already
have it installed.
</ul>

<h3>Installation</h3>
<p>To install, copy <code>ResolveURLs.pl</code> into your Movable
Type <code>plugins</code> directory.</p>

<h3>Use</h3>
<p>Add <code>resolve_urls="1"</code> to any template tag where you
want relative URLs expanded.  For example, to display the body of an
entry with URLs expanded, you might use:
<blockquote>
<kbd>&lt;$MTEntryBody resolve_urls=&#8221;1&#8221;$&gt;</kbd>
</blockquote>
<p>The filter will search for any HTML tags with <code>href</code> or
<code>src</code> attributes, and make sure the corresponding URLs are
absolute.  Relative URLs are resolved against the weblog site URL, as
configured in Movable Type.
<p>The <code>resolve_urls</code> filter can be used in any template
tag where a weblog is in context.  I use it in my weblog for all
<code>&lt;$MTEntryBody$&gt;</code> and <code>&lt;$MTEntryMore$&gt;</code>
tags, to make sure no relative URLs sneak out.</p>

</div>

<h2>Version History</h2>

<div class="mainbody">

<h3>Version 1.0.2</h3>
<ul>
<li>Does not resolve fragment-only URLs (e.g., <code>#foo</code>),
since these usually refer to anchors inside the entry itself, and are
&ldquo;safe&rdquo; for encapsulation.</li>
</ul>

<h3>Version 1.0.1</h3>
<ul>
<li>Recognizes link attribute values delimited with single or no quotation marks as
well as those with double quotation marks.
<li>Before resolving relative URLs, adds a trailing slash to the site
URL if there isn&#8217;t one already.</li>
</ul>
(Changes suggested by <a href="http://philringnalda.com">Phil Ringnalda</a>)

<h3>Version 1.0</h3>
<ul>
<li>Initial release</li>
</ul>

</div>

<h2>Known Bugs</h2>

<div class="mainbody">
<ul>
<li>Currently, the HTML &#8220;parser&#8221; is not very smart, and
it&#8217;s possible it might identify URLs that aren&#8217;t actually links that should be
expanded.
</ul>
</div>

<p><a href="http://akosut.com/software/mtresolveurls.html">Continue reading&#8230;</a></p>]]>
</description>

<trackback:ping rdf:resource="http://akosut.com/log/mt-tb.cgi/79" />

<dc:subject>Movable Type</dc:subject>
<dc:creator>Alexei Kosut</dc:creator>
<dc:date>2003-03-04T11:44:05-06:00</dc:date>
</item>
<item rdf:about="http://akosut.com/software/mailscripts.html">
<title>Mail Scripts</title>
<link>http://akosut.com/software/mailscripts.html</link>

<description>
<![CDATA[<h2>Description</h2>

<div class="mainbody">
<p>I recently started reading my email using the
<a href="http://www.apple.com/macosx/jaguar/mail.html">Mail</a>
application that comes with Mac OS X, after years of using
<a href="http://www.mutt.org/">Mutt</a>.  I 
<a
href="http://rescomp.stanford.edu/~akosut/log/archives/000048.html">discovered
right away</a> that Mail was missing a number of features I was used to
in Mutt that made it slow and cumbersome to read my mail.
I wrote these AppleScripts to add some of the missing functionality.
</p>

</div>

<h2 id="download">Scripts</h2>

<div class="mainbody">

<h3><a href="http://akosut.com/software/download/MailScripts.dmg">Download all scripts</a> (32 KB)</h3>

<h3><a name="savetomailbox"></a>Save To Mailbox</h3>
<p>Displays a dialog where you can enter the name of a mailbox to save
the currently-selected message(s) to, similar to the <kbd>S</kbd> key
in Mutt or Pine.  Defaults to suggesting a folder based on the email
address, so in many cases you can save mail to the right place with
only a few keystrokes.</p>
<p>Edit the <code>applySaveRules</code> function in the script to
define your own rules about what default mailbox to use based on the
sender and receipients.</p>

<h3><a name="gotomailbox"></a>Go To Mailbox</h3>
<p>Displays a dialog where you can type in the name of a mailbox, and
it will be displayed.  Modeled on the <kbd>C</kbd> key in Mutt.</p>

<h3><a name="opendigest"></a>Open Digest</h3>
<p>Opens the currently-selected message as its own mailbox, showing
each attachment of type <code>message/rfc822</code> as its own message.  Some
mailing lists (e.g., those at run by <a
href="http://lists.apple.com/">Apple</a>) can be configured to send
digests in this format.</p>

<h3><a name="composewithsender"></a>Compose With Sender
<br />
<a name="setsender"></a>Set Sender</h3>
<p>These scripts let you easily set the sender when composing a new or existing
message.  Displays a dialog where you can change the text that will be
used in the <code>From</code> header of the message when it is sent,
allowing you to send email with a sender of any name or address.</p>

<p>Note that Mail will not display the sender address during
composition unless you already have configured multiple accounts or
multiple addresses (use a comma in the &#8220;Email Address&#8221; account
preference).  I recommend enabling
 this option when using these scripts.</p>

</div>

<h2>Documentation</h2>

<div class="mainbody">

<h3>Requirements</h3>
<ul>
<li><a href="http://www.apple.com/macosx/jaguar/">Mac OS X 10.2</a></li>
<li>Perl module <a
href="http://search.cpan.org/search?dist=MIME-tools">MIME::Tools</a>
(only required for the <a href="#opendigest">Open Digest</a> script)</li>
</ul>

<h3>Installation</h3>
<p>Download and expand the scripts.  You can run them as
you would any other AppleScript, including:</p>
<ul>
<li>Double-click to open them in <a
href="http://www.apple.com/applescript/script_editor/">Script
Editor</a>, where you can run the scripts directly, or save them as
applications you can run as you would any other application.</li>
<li>Install <a href="http://www.apple.com/applescript/script_menu/">Script
Menu</a> and add them to your scripts folder.  You can then activate a
script from the script menu while using Mail.</li>
<li>Use a key macro program  to assign
the scripts to hotkeys in the Mail program.  For example, I have
control-<kbd>S</kbd> assigned to the <a href="#savetomailbox">Save To
Mailbox</a> script.  I use <a
href="http://www.keyboardmaestro.com/">Keyboard Maestro</a>, which
has built-in support for running AppleScripts, and lets
you to define hotkeys that are only active in specific applications
(i.e., Mail).
</li>

</ul>

<h3>Installing <a href="#opendigest">Open Digest</a></h3>

<p>The Open Digest script uses an auxiliary Perl script
<code>parsedigest</code>, which uses the <code>MIME::Parser</code>
Perl module to do the actual parsing of MIME digests.  This script
needs to be installed where the AppleScript can find it.</p>
<p>After mounting the disk image, you will find two files,
<code>Open Digest.scpt</code> and <code>parsedigest</code>.  The
former is the AppleScript; run it like any of the others.  The latter
needs to be moved to a folder named <code>bin</code> just inside
your home directory.  You will need to create this folder if it does
not already exist.
</p>

</div>

<h2>Version History</h2>

<div class="mainbody">

<h3>July 31, 2003</h3>
<ul>
<li><a href="#gotomailbox">Go To Mailbox  </a> now works with multiple and local accounts</li>
<li>Changed download to single disk image instead of five StuffIt archives</li>
</ul>

<h3>January 24, 2003</h3>
<ul>
<li><a href="#opendigest">Open Digest</a> script added.</li>
</ul>

<h3>January 17, 2003</h3>
<ul>
<li>Initial release</li>
</ul>

</div>

<h2>Known Bugs</h2>

<div class="mainbody">
<ul>
<li><a href="#savetomailbox">Save To Mailbox</a> only works with IMAP
accounts, but not with local (&#8220;On My Mac&#8221;) mailboxes.</li>
<li><a href="#opendigest">Open Digest</a> creates a mail folder on
your Mac named &#8220;Digests&#8221; and uses it to store the
mailboxes it creates.  You can delete this mailbox when it becomes too
large.</li>
</ul>
</div>]]>
</description>

<trackback:ping rdf:resource="http://akosut.com/log/mt-tb.cgi/78" />

<dc:subject>Mac OS X</dc:subject>
<dc:creator>Alexei Kosut</dc:creator>
<dc:date>2003-03-04T10:27:42-06:00</dc:date>
</item>


</rdf:RDF>

