<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
    <title>Grayden MacLennan&apos;s blog</title>
    <link>http://blog.case.edu/gtm4/</link>
    <description>An online journal...</description>
    <language>en-us</language>
    <pubDate>Wed, 08 Feb 2006 23:15:04 EST</pubDate>
    <lastBuildDate>Wed, 08 Feb 2006 23:15:04 EST</lastBuildDate>
    <managingEditor>grayden.maclennan@case.edu</managingEditor>
    <webMaster>grayden.maclennan@case.edu</webMaster>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Movable Type v3.121</generator>

    
    <item>
      <title>Mandel Center Website Goes Live</title>
      <link>http://blog.case.edu/gtm4/2006/02/08/mandel_center_website_goes_live</link>
      <description>Now that the Mandel Center&apos;s website is finally live, I&apos;m working on the slow process of bumping our search engine...</description>
      <guid>http://blog.case.edu/gtm4/2006/02/08/mandel_center_website_goes_live</guid>
      
        <category domain="http://blog.case.edu/gtm4/webdev/index">Webdev</category>
      
      <pubDate>Wed, 08 Feb 2006 23:15:04 EST</pubDate>
      <content:encoded><![CDATA[<p>Now that the <a href="http://www.case.edu/mandelcenter/" rel="me">Mandel Center</a>'s website is finally live, I'm working on the slow process of bumping our search engine rankings.  My feeling is that the newly reformulated semantic content will boost things nicely, but incoming links are still one of the biggest factors in boosting search engine ranks.  We already have plenty of very well placed links coming in from our various constituency organizations, but many of the links point to old or outdated URLs that have gone away, or to old versions of the correct URL.</p>

<p>I've already worked things out with Tom Sterin to have a 404 handler for the bad URLs that will return a 301 (permanent) redirect to the correct new URL for 44 selected pages.</p>

<p>The bigger problem is the ambiguity of <strong>cwru.edu</strong> versus <strong>case.edu</strong>.  Both domains are functionally identical for Joe Webuser, but Google and other search engines see <a href="http://www.cwru.edu/mandelcenter/">http://www.cwru.edu/mandelcenter</a> and <a href="http://www.case.edu/mandelcenter/">http://www.case.edu/mandelcenter</a> as two discrete competing websites with substantially similar (the same) content.  Links going to cwru.edu do not help the rank of case.edu and vice-versa.  Beyond that, from reading Google's docs it looks as though two or more domains or subdomains with substantially the same content will actually hurt the rank of all pages involved.</p>

<p>Most of our "good" incoming links go to the cwru.edu URL, so I've been contacting webmasters at a gazillion different organizations asking them to update their links to us.  This is going to take forever.  In the mean time I've come up with what is probably the most obvious answer to the problem in the short term.  At this point, EVERY link on our front page is hard-coded with the full http://www.case.edu/mandelcenter/path/ rather than using a relative path that would let users surf on whatever domain they came in on.  Now it should appear that the cwru.edu site has only one page and lots of high quality links to case.edu.  At least that's the theory.  I'll see how it pans out over the next few weeks.</p>

<p>Our baseline when searching for "nonprofit management" is slot #29 on Google and I want to see us in the top 5 to reflect our program's actual national ranking in the field.</p>]]></content:encoded>
    </item>

    <item>
      <title>Best Blonde Joke Ever</title>
      <link>http://blog.case.edu/gtm4/2006/01/06/best_blonde_joke_ever</link>
      <description>This has got to be the best blonde joke ever! :-)...</description>
      <guid>http://blog.case.edu/gtm4/2006/01/06/best_blonde_joke_ever</guid>
      
        <category domain="http://blog.case.edu/gtm4/joke/index">joke</category>
      
      <pubDate>Fri, 06 Jan 2006 16:56:17 EST</pubDate>
      <content:encoded><![CDATA[<p>This has got to be <a href="http://www.zigguratofdoom.com/?p=1146" rel="friend met colleague neighbor">the best blonde joke ever</a>!  :-)</p>]]></content:encoded>
    </item>

    <item>
      <title>Almost There!</title>
      <link>http://blog.case.edu/gtm4/2005/10/04/almost_there</link>
      <description> With the help of a few new MT plugins, I&apos;ve been able to get my department&apos;s blog almost ready...</description>
      <guid>http://blog.case.edu/gtm4/2005/10/04/almost_there</guid>
      
        <category domain="http://blog.case.edu/gtm4/movable_type/index">Movable Type</category>
      
      <pubDate>Tue, 04 Oct 2005 20:14:39 EST</pubDate>
      <content:encoded><![CDATA[<p>
With the help of a few new MT plugins, I've been able to get my department's blog almost ready to go!  The basic framework is in place and the design is roughed out.  The events calendar system works the way I expect it to and the headlines work the way I expect them to.
</p>
Still left to do:
<ul>
<li>Partial list of upcoming events on front page</li>
<li>RSS feeds for each category (plus descendants)</li>
<li>iCal files for each category (plus descendants) and similar setup for Outlook</li>
<li>5-item SSI files for each category (for sideboxes)</li>
<li>longer SSI files for each category (for main pages)</li>
</ul>]]></content:encoded>
    </item>

    <item>
      <title>The Missing Pieces</title>
      <link>http://blog.case.edu/gtm4/2005/09/30/the_missing_pieces</link>
      <description> I am getting close to being ready to roll with my department&apos;s blog. I am going to be using...</description>
      <guid>http://blog.case.edu/gtm4/2005/09/30/the_missing_pieces</guid>
      
        <category domain="http://blog.case.edu/gtm4/movable_type/index">Movable Type</category>
      
      <pubDate>Fri, 30 Sep 2005 21:20:54 EST</pubDate>
      <content:encoded><![CDATA[<p>
I am getting close to being ready to roll with my department's blog.  I am going to be using it for two purposes: announcements of news items, and tracking of upcoming events.  For this purpose, I've set up two major categories: Headlines and Events.
</p>
<p>
The templates I've built are fairly simple, but I've had to overcome a lot of obstacles to get them to where they are now.  I'm using the Case templates, and I want to have a sidebar (snav) with three or four items in it.  The first two will be the Headlines and Events links which will expand on clicking to show all of the subcategories, and their subcategories as necessary.  The remainder of the snav will be static links to other pages.
</p>

<h5>General Approach:</h5>
<p>
I am using and abusing the Category Archives feature of Movable Type for this endeavor.  The index templates only generate a single page per template, and I want to have a hierarchical structure for my posts.  Clicking into Events will show you ALL of the Events entries.  Clicking on a subcategory will show you entries from that category and its descendants.  Clicking on one of the sub-sub-categories will show you ITS entries plus those of ITS descendants (if any).  This way you can drill down to see the level of detail you want by drilling down into the directory structure.  As you go deeper you see fewer but more specific lists of entries.  Category Archives let you have this kind of nested structure by building a generic template that will recursively produce an output page for every category and its subcategories and their subcategories...  By playing with the file path variables, I can lay out a directory structure that matches the hierarchy of the nested subcategories.
</p>
<p>
In order to make the navbar behave properly (expand and collapse and highlight the current item) I've had to jump through a lot of hoops and it still doesn't work the way it should.  I even experimented with having MT build a custom stylesheet to supplement my Case Navbarfix stylesheet on the fly, and that works to some extent.
</p>
<p>
<a href="http://www.7nights.com/asterisk/archive/2004/08/mt-simple-events">The concept</a> behind a Movable Type events calendar is actually fairly easy to pull off in an index template.  You just set sort_order="ascend" and days="1", and then it will only show the current day plus all days forward of the current day.  Remember that you can define blog items that occur in the future!
</p>
<p>
At this point I've identified most of the problems I'm still facing, but I'm running into walls looking for ways to overcome them.
</p>
<h5>Problems I've run into so far:</h5>
<ol>
<li>
As mentioned above, I can't use a category named either "Announcements" or "News" and have the posts get selected properly by either MTIfIsDescendant or MTEntriesWithSubCategories in the Category Archive context.  It works fine in the index context.  Most other names work just fine without any recoding, so I've settled on "Headlines" since it's close to what I want and it works.
</li>
<li>
The the Category Archive context, MTEntriesWithSubCategories breaks when I specify days="1" and ends up displaying stuff from all over the place.  I know that this is because archives are supposed to display ALL posts, but I want to override this behavior.  If I don't specify days, then my category pages get filled up with the correct content, but they also include past events which more or less invalidates the whole idea behind an upcoming events calendar.  I can limit the list by lastn, but not by days - what's up with that?
</li>
<li>
In the Category Archive context, you can't output the MTCategoryID or run tests to determine if the current category in a list of all categories is the same as the current category of the Category Archive output file.  This ability would make building the navbar almost trivial.  Sooooo much headache averted...  There is a plugin called <a href="http://www.nonplus.net/software/mt/MTCategoryOfArchive.htm">MTCategoryOfArchive</a> that addresses this issue, but it is not currently installed on blog.case.
</li>
<li>
There is no good way to limit display of future events to a finite number (like the next 5 events).  If you specify lastn="x" then is will display that many from the END, meaning the farthest out into the future.  There are a variety of hacks and plugins that can each address this in some partial manner, but I haven't yet figured out which combination of the dozens is best.  A lot require PHP or SQL calls.
</li>
<li>
Future events seem to stick themselves at the top of the feed for planet.case.edu, so the sorting order could get weird for some clients.  I haven't dug into this issue at all yet.
</li>
</ol>
<p>
Once this is all sorted out, I will have a fearsomely awesome events calendar!  RSS feeds and calendar files for iCal and Outlook for each category, and any number of other fun bells and whistles.
</p>]]></content:encoded>
    </item>

    <item>
      <title>List of Comments?</title>
      <link>http://blog.case.edu/gtm4/2005/09/27/list_of_comments</link>
      <description>Is there a way to see a list of all the comments I&apos;ve ever made in anyone&apos;s Case blog? A...</description>
      <guid>http://blog.case.edu/gtm4/2005/09/27/list_of_comments</guid>
      
      <pubDate>Tue, 27 Sep 2005 20:23:13 EST</pubDate>
      <content:encoded><![CDATA[<p>Is there a way to see a list of all the comments I've ever made in anyone's Case blog?  A big chunk of the magic of blogs comes from the discussion after an entry is posted, and it's easy to completely lose track of where you've made your comments in other blogs.</p>

<p>I'm envisioning a link along the lines of "http://blog.case.edu/comments/gtm4" or something like that - similar to the stats function.</p>]]></content:encoded>
    </item>

    <item>
      <title>Possible Bug in MT</title>
      <link>http://blog.case.edu/gtm4/2005/09/26/possible_bug_in_mt</link>
      <description>I&apos;ve been beating my head against this for a while today. I have two main categories in a blog, one...</description>
      <guid>http://blog.case.edu/gtm4/2005/09/26/possible_bug_in_mt</guid>
      
        <category domain="http://blog.case.edu/gtm4/bugs/index">Bugs</category>
      
      <pubDate>Mon, 26 Sep 2005 20:26:09 EST</pubDate>
      <content:encoded><![CDATA[<p>I've been beating my head against this for a while today.  I have two main categories in a blog, one called <strong>Announcements</strong> and one called <strong>Events</strong>.  Each of these two categories has several subcategories and some of THEM have subcategories too.</p>

<p>I wanted to produce an SSI file that contains a navbar, but due to some unrelated markup restictions I had to run two loops in MT to produce the proper output for each of the two sections.  I did a pair of the following blocks to produce the appropriate subnavs:</p>

<pre style="padding: 10px; border:1px solid black; line-height:1em; background-color: silver; padding: 1em; overflow: auto; width: auto; width:expression(document.body.clientWidth > 400? "400px": "auto" );">
&lt;ul class="subnav"&gt;
	&lt;MTTopLevelCategories&gt;
		&lt;MTIfIsDescendant parent="Announcements"&gt;
			&lt;MTIfNonZero tag="MTCategoryCount"&gt;
				&lt;li&gt;&gt;&lt;a href="&lt;$MTCategoryArchiveLink$&gt;" title="&lt;$MTCategoryDescription$&gt;"&gt;&lt;MTCategoryLabel&gt;&lt;/a&gt;
				&lt;MTElse&gt;
					&lt;li&gt;&gt;&lt;MTCategoryLabel&gt;
				&lt;/MTElse&gt;
			&lt;/MTIfNonZero&gt;
			&lt;/li&gt;
		&lt;/MTIfIsDescendant&gt;
		&lt;MTSubCatsRecurse max_depth="3"&gt;
	&lt;/MTTopLevelCategories&gt;
&lt;/ul&gt;
</pre>

<p>The only difference between the two blocks is the parameter <strong>parent</strong> in <strong>&lt;MTIfIsDescendant&gt;</strong>.</p>

<p>For some reason, the <strong>Events</strong> block was producing the proper output with no problem whatsoever, but the block for the Announcements section was not producing anything.  I ran a gazillion diagnostics and triple checked my spelling everywhere, but this set of tags would NOT acknowledge the presence of subcategories whose parent is <strong>Announcements</strong>.  I renamed the category to <strong>foo</strong> and suddenly it worked!  This is all very bizarre because all the other tags I've used in other pages that reference <strong>Announcements</strong> work fine.  I couldn't keep the category named <strong>foo</strong>, and <strong>Announcements</strong> apparently doesn't work, so I tried <strong>News</strong>.  THAT didn't work either!  D'oh!  I tried name tweaking again by adding a &quot;t&quot; to make it <strong>Newts</strong> and suddenly it WORKED again.</p>

<p>WTF is going on here?  Are these reserved words somehow?  Why would <strong>foo</strong> and <strong>Newts</strong> work but <strong>Announcements</strong> and <strong>News</strong> wouldn't?  Why does the problem only crop up when this set of MT Tags is used?  Is the coding behind the <strong>&lt;MTIfIsDescendant&gt;</strong> flawed?</p>]]></content:encoded>
    </item>

    <item>
      <title>Cross-Server Server Side Includes (SSI) Solved?</title>
      <link>http://blog.case.edu/gtm4/2005/09/22/crossserver_server_side_includes_ssi_solved</link>
      <description> UPDATED: Case Wiki page added: [[RemoteSSI.cgi]] UPDATED: Jeremy Smith had some very nice input into the program design. I&apos;m...</description>
      <guid>http://blog.case.edu/gtm4/2005/09/22/crossserver_server_side_includes_ssi_solved</guid>
      
      <pubDate>Thu, 22 Sep 2005 03:51:59 EST</pubDate>
      <content:encoded><![CDATA[<p>
<strong>UPDATED:</strong> Case Wiki page added: <a href="http://wiki.case.edu/RemoteSSI.cgi">RemoteSSI.cgi</a>
</p>
<p>
<strong>UPDATED:</strong> <em><a href="http://blog.case.edu/jms18/">Jeremy Smith</a> had some <a href="http://blog.case.edu/jms18/2005/09/22/cross_server_ssis">very nice input</a> into the program design.  I'm playing with the idea of restricting the SERVER_PROTOCOL environment variable to "INCLUDED" to get around any issues with having to set up a list of known hosts.  This way, if you try to access the script directly or through some other HTTP method in an attempt to abuse it, it just won't work.  The only way to use it is as an SSI, so abuse could only come from people who have logged in to upload their pages.  I still haven't fully figured out Greg and Jeremy's caching idea yet, but I'm working on understanding that now.  Updated original entry below...</em>
</p>
<p>
I had a bit of inspiration today and solved the problem of dropping http://blog.case.edu content into http://www.case.edu pages.
</p>
<pre style="padding: 10px; border:1px solid black; line-height:1em; background-color: silver; padding: 1em; overflow: auto; width: auto; width:expression(document.body.clientWidth > 400? "400px": "auto" );">
#!/usr/bin/perl
use CGI qw(:standard); # provides header
use LWP::Simple; # provides getprint


###########################################################
## This work is licensed under the                       ##
## Creative Commons Attribution License.                 ##
## To view a copy of this license, visit                 ##
## http://creativecommons.org/licenses/by/2.0/           ##
## or send a letter to:                                  ##
##     Creative Commons                                  ##
##     559 Nathan Abbott Way                             ##
##     Stanford, California 94305, USA.                  ##
##                                                       ##
## Essentially this means you can do whatever            ##
## you want with the code as long as you credit          ##
## Grayden MacLennan (grayden.maclennan@case.edu)        ##
## as the original author.                               ##
##                                                       ##
## This document was last modified on September 21, 2005 ##
###########################################################


######
# remoteSSI.cgi
# by Grayden MacLennan
# grayden.maclennan@case.edu
#
# 2005-09-21
#
# This is a VERY simple program that grabs content from any
# http-accessible source and spits it out again.
#
# The original motivation behind this program was to allow
# me to do Server Side Includes (SSI) on one server while the
# included content sits on another server.  Normally, SSI only
# works within a local file system, so this program in effect
# gives a LOCAL path to a REMOTE resource.
#
#
# --Example of usage--
#
#  What you'd do for a normal local file:
#
#    &lt;!--#include virtual="/somepath/includefile.inc" --&gt;
#
#  What you'd LOVE to do but can't:
#
#    &lt;!--#include virtual="http://remote.server.com/somepath/includefile.inc" --&gt;
#
#  What you do to get around the problem:
#
#    &lt;!--#include virtual="/cgi-bin/remoteSSI.cgi?url=http://remote.server.com/somepath/includefile.inc" --&gt;
#
######

# Step 1 - print a header so the CGI won't throw an Internal Server Error 500
print header;

# Step 2 - if this is being used for SSI purposes, reprint anything it finds at the URL (bad URL generates nothing)
if ( $ENV{"SERVER_PROTOCOL"} eq "INCLUDED" ) {
	getprint( param("url") );
}
else {
	print "Hey - this isn't a proxy server!";
}
# Step 3 - There is no Step 3!
</pre>]]></content:encoded>
    </item>

    <item>
      <title>Number Theory</title>
      <link>http://blog.case.edu/gtm4/2005/08/29/number_theory</link>
      <description>I chuckled when I saw my &quot;home&quot; page on facebook: &amp;quot;You are connected to 1337 people through friends.&amp;quot; Why yes,...</description>
      <guid>http://blog.case.edu/gtm4/2005/08/29/number_theory</guid>
      
        <category domain="http://blog.case.edu/gtm4/1337/index">1337</category>
      
        <category domain="http://blog.case.edu/gtm4/coincidence/index">coincidence</category>
      
      <pubDate>Mon, 29 Aug 2005 14:33:43 EST</pubDate>
      <content:encoded><![CDATA[<p>I chuckled when I saw my "home" page on facebook:</p>

<p><strong>&quot;You are connected to <a href="#thislinkdoesntgoanywhere">1337</a> people through friends.&quot;</strong></p>

<p>Why yes, yes I am.</p>]]></content:encoded>
    </item>

    <item>
      <title>License Plates!</title>
      <link>http://blog.case.edu/gtm4/2005/08/08/license_plates</link>
      <description>In a week or so I should be getting my new license plates. I decided to finally break down and...</description>
      <guid>http://blog.case.edu/gtm4/2005/08/08/license_plates</guid>
      
        <category domain="http://blog.case.edu/gtm4/css/index">CSS</category>
      
      <pubDate>Mon, 08 Aug 2005 06:22:31 EST</pubDate>
      <content:encoded><![CDATA[<p>In a week or so I should be getting my new license plates.  I decided to finally break down and get a vanity plate...</p>

<p><span style="font-size:18px; padding:4px; border-width:1px; border-style:solid; font-family: Verdana, Arial, sans-serif;">W3C CSS</span></p>

<p>I'm just hoping they get here within the week or else I'm going to have to stop driving on my birthday until they DO arrive.  I think the wait will be worth it!</p>

<p>I wanted to get a "Share the Road" logo plate, but I couldn't have a space between the letters on a logo plate.  Maybe I'll get a sticker or something.</p>]]></content:encoded>
    </item>

    <item>
      <title>Case Wiki is Nifty!</title>
      <link>http://blog.case.edu/gtm4/2005/06/15/case_wiki_is_nifty</link>
      <description>Today I was poking around the blog.case site trying to find info for setting up a departmental blog for the...</description>
      <guid>http://blog.case.edu/gtm4/2005/06/15/case_wiki_is_nifty</guid>
      
      <pubDate>Wed, 15 Jun 2005 20:46:47 EST</pubDate>
      <content:encoded><![CDATA[<p>Today I was poking around the blog.case site trying to find info for setting up a departmental blog for the <a href="http://wiki.case.edu/Mandel_Center_for_Nonprofit_Organizations">Mandel Center for Nonprofit Organizations</a>, but instead I got a wee bit distracted and ended up crawling through the Case Wiki site for much of the late afternoon.</p>

<p>It even interacts with blog.case!  Read the <a href="http://wiki.case.edu/Grayden_MacLennan">Grayden MacLennan</a> entry!</p>]]></content:encoded>
    </item>

    <item>
      <title>First Spam</title>
      <link>http://blog.case.edu/gtm4/2005/02/04/first_spam</link>
      <description>I got my first spam comment already. Ugh....</description>
      <guid>http://blog.case.edu/gtm4/2005/02/04/first_spam</guid>
      
      <pubDate>Fri, 04 Feb 2005 15:37:42 EST</pubDate>
      <content:encoded><![CDATA[<p>I got my first spam comment already.  Ugh.</p>]]></content:encoded>
    </item>

    <item>
      <title>First post on Case&apos;s blog system</title>
      <link>http://blog.case.edu/gtm4/2005/01/11/first_post_on_cases_blog_system</link>
      <description>Well this is my first post on the Case blog system. It&apos;s based on MT, which I used to use...</description>
      <guid>http://blog.case.edu/gtm4/2005/01/11/first_post_on_cases_blog_system</guid>
      
      <pubDate>Tue, 11 Jan 2005 21:45:22 EST</pubDate>
      <content:encoded><![CDATA[<p>Well this is my first post on the Case blog system.  It's based on MT, which I used to use on the aikido page.  Not sure what I'll end up doing with this...</p>]]></content:encoded>
    </item>


</channel>
</rss>