<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>slate blog</title>
    <link>http://slateinfo.blogs.wvu.edu/blog</link>
    <description>slate blog</description>
    <language>en-us</language>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/wvu/slateinfo" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>No Wonder Rails Is Default in Mac OS X Server...</title>
      <description>&lt;p&gt;So I thought it was pretty cool Rails and Ruby were included by default in Mac &lt;span class="caps"&gt;OS X&lt;/span&gt; Server 10.5. We upgraded our Xserve last Thursday. A bit of work for me but that&amp;#8217;s only because I forgot Rails was included by default and I caused myself some headaches working against that. So today I was working with &lt;a href="http://www.apple.com/server/macosx/features/podcasts.html"&gt;Podcast Producer&lt;/a&gt; (the reason for upgrading to 10.5). Looking through some log files I thought they looked eerily familiar. Then I noticed a reference for .rxml. A look at some other logs showed mongrel_rails. Turns out Podcast Producer is a Rails app. The heavy lifting of encoding is done by Xgrid but still a cool use of Rails nonetheless. And now you know too :)&lt;/p&gt;


	&lt;p&gt;By the way, my one pet peeve with 10.5 was that getting Apache 2 to set-up proxies and rewrites is basically impossible from the &lt;span class="caps"&gt;GUI&lt;/span&gt; especially when they should know you need that stuff to deploy a Rails app. Now I understand that it wasn&amp;#8217;t necessarily Apple saying, &amp;#8220;Wow, a cool segment to serve.&amp;#8221; but rather &amp;#8220;Well, we need Rails here anyway so why not advertise it?&amp;#8221;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=FqUOU5-Ll90:UzOru75ZGU4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=FqUOU5-Ll90:UzOru75ZGU4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?i=FqUOU5-Ll90:UzOru75ZGU4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/wvu/slateinfo/~4/FqUOU5-Ll90" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 26 Feb 2008 15:47:00 EST</pubDate>
      <link>http://feedproxy.google.com/~r/wvu/slateinfo/~3/FqUOU5-Ll90/no-wonder-rails-is-default-in-mac-os-x-server</link>
      <guid isPermaLink="false">http://slateinfo.blogs.wvu.edu/blog/2008/2/26/no-wonder-rails-is-default-in-mac-os-x-server</guid>
    <feedburner:origLink>http://slateinfo.blogs.wvu.edu/blog/2008/2/26/no-wonder-rails-is-default-in-mac-os-x-server</feedburner:origLink></item>
    <item>
      <title>Good News: An Open Sourced slate Is Coming</title>
      <description>&lt;p&gt;For the last few months we&amp;#8217;ve been working with the appropriate groups at the University to work out if we can really open source slate and, if so, what license we&amp;#8217;d release it under. Yesterday we got official word that we can go forward. Yay!&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;The License: &lt;span class="caps"&gt;WVU&lt;/span&gt; Open Source License&lt;/strong&gt;&lt;br /&gt;I&amp;#8217;ve just done a &lt;a href="http://slateinfo.blogs.wvu.edu/blog/2008/2/13/the-wvu-open-source-license"&gt;post&lt;/a&gt; for this so you can &lt;a href="http://slateinfo.blogs.wvu.edu/blog/2008/2/13/the-wvu-open-source-license"&gt;review the license&lt;/a&gt; yourselves. As I note in the &lt;a href="http://slateinfo.blogs.wvu.edu/blog/2008/2/13/the-wvu-open-source-license"&gt;post&lt;/a&gt; (for those to lazy to click the link) our license is based on the &lt;a href="http://www.otm.uiuc.edu/faculty/forms/opensource.asp"&gt;Illinois Open Source License&lt;/a&gt; which seems to be a derivative of the &lt;a href="http://www.opensource.org/licenses/mit-license.php"&gt;MIT License&lt;/a&gt;. I know it seems a little odd at first but review it and you&amp;#8217;ll see it&amp;#8217;s what most Rails folks are used to.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;The Plan for Open Sourcing slate&lt;/strong&gt;&lt;br /&gt;Ok, I&amp;#8217;m being a bit of tease by not providing a date but we&amp;#8217;re in a bit of flux in the department at the moment so it&amp;#8217;s tough for me to pick a date and be positive we can deliver. Stay tuned for a more exact release announcement in that vein. Much sooner rather than later though.&lt;/p&gt;


	&lt;p&gt;The version we&amp;#8217;ll be releasing will be most likely be v0.5.1. This assumes we put the new release on our hardware first, find some bugs and fix them before releasing it into the wild. We&amp;#8217;ll do an announcement on here for a release candidate of v0.5.1 and then go wild with a marketing blitz for the final edition.&lt;/p&gt;


	&lt;p&gt;v0.5.0 is a complete rewrite of slate based on all the stuff we&amp;#8217;ve learned. The big fixes Chris has covered are making sure their are ways for folks to customize necessary parts (e.g. account authorization) and to create plugins to add their own functionality. It won&amp;#8217;t be exactly like what you&amp;#8217;ve seen in the screenshots so far.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Some Tech Details&lt;/strong&gt;&lt;br /&gt;Just in case folks want to check out some of the tech we&amp;#8217;re using in the next release of slate.&lt;ul&gt;
	&lt;li&gt;We&amp;#8217;re running a self-contained version of Rails so once you download slate you&amp;#8217;ll have the correct version within slate to run it. It&amp;#8217;s essentially Rails 2.0.2.&lt;/li&gt;
	&lt;li&gt;The plugin architecture is based on Rails 2.0&amp;#8217;s plugin locator feature&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://seattlerb.rubyforge.org/ImageScience.html"&gt;ImageScience&lt;/a&gt; for image manipulation&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; as our JavaScript library&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://rspec.info/"&gt;RSpec&lt;/a&gt; for testing&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://blog.airbladesoftware.com/2006/12/11/cssdryer-dry-up-your-css"&gt;css_dryer&lt;/a&gt; for dynamic stylesheets&lt;/li&gt;
	&lt;li&gt;attachment_fu for uploads&lt;/li&gt;
	&lt;li&gt;slightly hacked implementation of jamis buck&amp;#8217;s &lt;a href="http://weblog.jamisbuck.org/2006/10/26/monkey-patching-rails-extending-routes-2"&gt;routing tricks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;You&amp;#8217;ll be hearing a lot more from us over the next few weeks as we put in place the infrastructure to support the open sourcing, get documentation online, and actually make the big announcement. We promise not to completely disappear again :)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=Axr0Lk1CfIU:_CrRWr6GhyA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=Axr0Lk1CfIU:_CrRWr6GhyA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?i=Axr0Lk1CfIU:_CrRWr6GhyA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/wvu/slateinfo/~4/Axr0Lk1CfIU" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 13 Feb 2008 09:30:00 EST</pubDate>
      <link>http://feedproxy.google.com/~r/wvu/slateinfo/~3/Axr0Lk1CfIU/good-news-an-open-sourced-slate-is-coming</link>
      <guid isPermaLink="false">http://slateinfo.blogs.wvu.edu/blog/2008/2/13/good-news-an-open-sourced-slate-is-coming</guid>
    <feedburner:origLink>http://slateinfo.blogs.wvu.edu/blog/2008/2/13/good-news-an-open-sourced-slate-is-coming</feedburner:origLink></item>
    <item>
      <title>The WVU Open Source License</title>
      <description>&lt;p&gt;Below is the text for the license that we&amp;#8217;ll be releasing slate under. It is based on the &lt;a href="http://www.otm.uiuc.edu/faculty/forms/opensource.asp"&gt;Illinois Open Source License&lt;/a&gt; and was developed and approved by the &lt;a href="http://research.wvu.edu/"&gt;WVU Research Corp.&lt;/a&gt;. It&amp;#8217;s in the same vein as the &lt;a href="http://www.opensource.org/licenses/mit-license.php"&gt;MIT license&lt;/a&gt; that most Rails folks are used to. Feel free to ask us questions or give us feedback. I&amp;#8217;m not saying anything will change but if there&amp;#8217;s a major concern we&amp;#8217;ll get it reviewed by the &lt;span class="caps"&gt;WVU&lt;/span&gt; Research Corp.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;&lt;strong&gt;If you&amp;#8217;re a developer at &lt;span class="caps"&gt;WVU&lt;/span&gt; and you&amp;#8217;d like to use this license you need to contact the &lt;span class="caps"&gt;WVU&lt;/span&gt; Research Corp. and not just copy what you see here. They need to review your product first, give you a written letter of authorization, and you need to be in a position to supply statistics of usage.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;Not trying to scare anyone at &lt;span class="caps"&gt;WVU&lt;/span&gt; with the above. I can give you a contact if you need it.&lt;/p&gt;


&lt;blockquote&gt;&lt;br /&gt;Open Source License&lt;br /&gt;West Virginia University &lt;br /&gt;Copyright © 2008, West Virginia University Research Corporation.  All rights reserved.
	&lt;p&gt;Developed by:&lt;br /&gt;West Virginia University Web Services&lt;br /&gt;West Virginia University&lt;br /&gt;&lt;a href="http://www.wvu.edu/"&gt;http://www.wvu.edu/&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (?Software?), to deal with the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimers.&lt;/li&gt;
	&lt;li&gt;Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimers in the documentation and/or other materials provided with the distribution.&lt;/li&gt;
	&lt;li&gt;Neither the names of West Virginia University or West Virginia University Research Corporation, nor the names of its contributors may be used to endorse or promote products derived from this Software without specific prior written permission.&lt;/li&gt;
&lt;/ul&gt;

	&lt;p&gt;&lt;span class="caps"&gt;THE SOFTWARE IS PROVIDED&lt;/span&gt; ?AS IS?, &lt;span class="caps"&gt;WITHOUT WARRANTY OF ANY KIND&lt;/span&gt;, EXPRESS &lt;span class="caps"&gt;OR IMPLIED&lt;/span&gt;, INCLUDING &lt;span class="caps"&gt;BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY&lt;/span&gt;, FITNESS &lt;span class="caps"&gt;FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT&lt;/span&gt;.  &lt;span class="caps"&gt;IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM&lt;/span&gt;, DAMAGES &lt;span class="caps"&gt;OR OTHER LIABILITY&lt;/span&gt;, WHETHER &lt;span class="caps"&gt;IN AN ACTION OF CONTRACT&lt;/span&gt;, TORT &lt;span class="caps"&gt;OR OTHERWISE&lt;/span&gt;, ARISING &lt;span class="caps"&gt;FROM&lt;/span&gt;, OUT &lt;span class="caps"&gt;OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE&lt;/span&gt;.&lt;br /&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=MyMQwI93Efg:fb_3gwk4msE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=MyMQwI93Efg:fb_3gwk4msE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?i=MyMQwI93Efg:fb_3gwk4msE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/wvu/slateinfo/~4/MyMQwI93Efg" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 13 Feb 2008 09:10:00 EST</pubDate>
      <link>http://feedproxy.google.com/~r/wvu/slateinfo/~3/MyMQwI93Efg/the-wvu-open-source-license</link>
      <guid isPermaLink="false">http://slateinfo.blogs.wvu.edu/blog/2008/2/13/the-wvu-open-source-license</guid>
    <feedburner:origLink>http://slateinfo.blogs.wvu.edu/blog/2008/2/13/the-wvu-open-source-license</feedburner:origLink></item>
    <item>
      <title>Implementation idea: .do templates</title>
      <description>&lt;p&gt;It&amp;#8217;s been awhile since I&amp;#8217;ve posted, so: &amp;#8220;Hello everyone!&amp;#8221;&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m tossing around a new idea for slate, and I thought I&amp;#8217;d post it here to get some feedback.  The idea revolves around the concept of &amp;#8220;behaviors&amp;#8221; for pages in slate.  Please bear with me as this is going to be a messy post &amp;#8211; the ideas are still swirling around my head.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Current implementation&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;First, some background information:  when a request comes in, slate extracts the path and attempts to find a page matching the path.  If it can&amp;#8217;t find a match, it attempts to find a &amp;#8220;behavior&amp;#8221; matching the path.  If that succeeds, the behavior is executed (which handles rendering the page based on the path).&lt;/p&gt;


	&lt;p&gt;The idea is that you assign a page, say &lt;code&gt;blog&lt;/code&gt;, the blog behavior, and slate will now know that the page has certain routes.  That is, &lt;code&gt;/blog/2007&lt;/code&gt;, etc.&lt;/p&gt;


	&lt;p&gt;Well, that&amp;#8217;s all well and good, but there are problems with this implementation.  In short, it&amp;#8217;s messy.  It&amp;#8217;s also confusing for the user.  So, I&amp;#8217;m planning on doing away with the current implementation, opting for something a bit easier to manage.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;The .do template&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;The new idea is this: specialized theme templates, say &lt;code&gt;blog.do.rhtml&lt;/code&gt; that handle the behavior without configuration.  How will this work?  When a request comes in, slate will check to see if the path contains &lt;code&gt;.do&lt;/code&gt;.  If there&amp;#8217;s a match, it will extract that portion of the path and render the associated template.&lt;/p&gt;


	&lt;p&gt;For example, &lt;code&gt;/blog.do/1/2007&lt;/code&gt; would render &lt;code&gt;blog.do&lt;/code&gt;.  I&amp;#8217;m thinking there will also be a &lt;code&gt;blog.do.rb&lt;/code&gt; file which will act as a pseudo-controller for handling these .do templates.  Or, maybe the theme will support a &lt;code&gt;blog.do&lt;/code&gt; directory, containing custom view templates.  Obviously, the details haven&amp;#8217;t been worked out yet ;-)&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Pros and cons&lt;/strong&gt;&lt;/p&gt;


&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Pros&lt;/strong&gt;
	&lt;ul&gt;
		&lt;li&gt;Consistent URLs for behaviors (blogs will always reside at &lt;code&gt;/blog.do/:id&lt;/code&gt;)&lt;/li&gt;
		&lt;li&gt;Less configuration (no need to create a page and assign it a behavior)&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Cons&lt;/strong&gt;
	&lt;ul&gt;
		&lt;li&gt;Less end-user control of (no more /something/blog)&lt;/li&gt;
		&lt;li&gt;Slightly more ugly URLs&lt;/li&gt;
		&lt;li&gt;How to provide editable areas for behaviour-driven pages?&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

	&lt;p&gt;&lt;strong&gt;Thoughts?&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Clearly, this concept is still up in the air.  But if you can understand at all what I&amp;#8217;m going for, please feel free to post your thoughts :-)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=Q-NP_CBTGbQ:oQV5aaj07EE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=Q-NP_CBTGbQ:oQV5aaj07EE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?i=Q-NP_CBTGbQ:oQV5aaj07EE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/wvu/slateinfo/~4/Q-NP_CBTGbQ" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 03 Dec 2007 10:05:00 EST</pubDate>
      <link>http://feedproxy.google.com/~r/wvu/slateinfo/~3/Q-NP_CBTGbQ/implementation-idea-do-templates</link>
      <guid isPermaLink="false">http://slateinfo.blogs.wvu.edu/blog/2007/12/3/implementation-idea-do-templates</guid>
    <feedburner:origLink>http://slateinfo.blogs.wvu.edu/blog/2007/12/3/implementation-idea-do-templates</feedburner:origLink></item>
    <item>
      <title>Keeping slate Humming - Part 1</title>
      <description>&lt;p&gt;In the spirit of &lt;a href="http://railstips.org/2007/10/31/keeping-your-tag-cloud-running-intro"&gt;KYTCR&lt;/a&gt; article by John we&amp;#8217;re offering some tips on what we do to manage our install. I&amp;#8217;m not going to go into nearly the depth that John &lt;a href="http://railstips.org/2007/11/1/kytcr-part-i-backups"&gt;has already done&lt;/a&gt; and hopefully will continue to do. Why?&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;We don&amp;#8217;t do back-ups.&lt;/em&gt; Before you write to say we&amp;#8217;re crazy, all the stuff related to slate &lt;em&gt;is&lt;/em&gt; backed up. Just not by us so I can&amp;#8217;t tell you anything about it.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Problem analysis and resolution.&lt;/em&gt; This usually consists of some curses (if I&amp;#8217;m around), gritting of teeth, whispers of &amp;#8220;stupid users,&amp;#8221; and eventual elegant solution courtesy of Chris.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Log rotation.&lt;/em&gt; &lt;em&gt;some time goes by&lt;/em&gt; &amp;#8220;Chris, we might want to reset that production log.&amp;#8221; We did try to automate this once but it &lt;a href="http://slateinfo.blogs.wvu.edu/blog/2007/3/29/explanation-of-unexpected-outage-this-morning"&gt;blew up in our faces&lt;/a&gt;. &lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Cache.&lt;/em&gt; We&amp;#8217;re not exactly at a point where we have to be seriously worried about it.&lt;/li&gt;
&lt;/ul&gt;

	&lt;p&gt;&lt;strong&gt;The Hardware Setup&lt;/strong&gt;&lt;br /&gt;I was sort of surprised to find that slate is running on the smallest server we manage. &lt;ul&gt;
	&lt;li&gt;&lt;em&gt;The app server&lt;/em&gt; &amp;#8211; a 3.2GHz Xeon box with 1GB of &lt;span class="caps"&gt;RAM&lt;/span&gt; running Windows Server 2003. It&amp;#8217;s shared with a few low-use RoR apps and a &lt;span class="caps"&gt;PHP&lt;/span&gt; app.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;The database server&lt;/em&gt; &amp;#8211; Multi-Xeon box with 2GB of &lt;span class="caps"&gt;RAM&lt;/span&gt;. We use Microsoft &lt;span class="caps"&gt;SQL&lt;/span&gt; Server for the DB.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Our Numbers&lt;/strong&gt;&lt;br /&gt;I &lt;a href="http://slateinfo.blogs.wvu.edu/blog/2007/10/4/numbers-numbers-numbers"&gt;made a post&lt;/a&gt; on this back on Oct. 4th. In the interest of giving up-to-date numbers I&amp;#8217;ve redone them.&lt;ul&gt;
	&lt;li&gt;From Oct. 5th to Nov. 4th we served 322,505 pages.&lt;/li&gt;
	&lt;li&gt;From one install of slate we push out &lt;a href="http://trac.webtest.wvu.edu/slate.db/wiki/slatesites"&gt;approx. 71 sites&lt;/a&gt; made up of:
	&lt;ul&gt;
		&lt;li&gt;3,850 pages&lt;/li&gt;
		&lt;li&gt;5,674 resources (user uploaded images, documents, etc.)&lt;/li&gt;
		&lt;li&gt;594 blog entries&lt;/li&gt;
		&lt;li&gt;39,746 comments with the vast, vast majority being spam&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;


	&lt;p&gt;As a comparison, over the same time period the &lt;a href="http://www.wvu.edu/"&gt;WVU home page&lt;/a&gt; had 1.86 million page views. Ok, with that background covered lets get into things we do to manage our install.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;The Stack: Apache &amp;#38; Mongrel&lt;/strong&gt;&lt;br /&gt;We&amp;#8217;re using Apache 2.2 with mod_proxy_balancer to proxy requests to a cluster of five &lt;a href="http://mongrel.rubyforge.org/"&gt;Mongrel&lt;/a&gt; services to serve slate to the masses. I&amp;#8217;ve &lt;a href="http://slateinfo.blogs.wvu.edu/blog/2007/2/24/slate-is-served"&gt;written about our past experiences&lt;/a&gt; so I&amp;#8217;m not going to rehash it too much. Nothing has really changed in a year. Suffice it to say we&amp;#8217;re happy with the set-up and haven&amp;#8217;t looked at anything more exotic. I also posted an &lt;a href="http://slateinfo.blogs.wvu.edu/blog/2007/6/15/apache-s-load-balancer-manager-for-watching-mongrel-cluster"&gt;article on the balance-manager&lt;/a&gt;. I&amp;#8217;m not going to share our config but a couple of notes related to how we like to do things:&lt;ul&gt;
	&lt;li&gt; &lt;em&gt;&lt;code&gt;ProxyPass&lt;/code&gt; is better than &lt;code&gt;RewriteCond&lt;/code&gt; and &lt;code&gt;RewriteRule&lt;/code&gt; for serving static files.&lt;/em&gt; This is just my opinion. One of the great things with Rails is that it forces you into certain directories to deliver static vs. dynamic content. Why double-check?&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Need to do a redirect? Make sure you&amp;#8217;ve added it&amp;#8217;s own &lt;code&gt;ProxyPass&lt;/code&gt;.&lt;/em&gt; We require &lt;span class="caps"&gt;SSL&lt;/span&gt; for the slate account login page. So if you request the unencrypted page you get bounced to the encrypted page.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Discourage access to .svn, .erb, or .rhtml files with &lt;code&gt;DirectoryMatch&lt;/code&gt; and &lt;code&gt;FilesMatch&lt;/code&gt;.&lt;/em&gt; Since our themes are essentially public (for images and styles) and the templates are .rhtml files we&amp;#8217;ve made sure to deny access to them. Not allowing access to .svn might be overkill but oh well.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;


&lt;div class="code ruby"&gt;&lt;pre&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="constant"&gt;DirectoryMatch&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="escape"&gt;\.&lt;/span&gt;svn&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
    &lt;span class="constant"&gt;ErrorDocument&lt;/span&gt; &lt;span class="number"&gt;403&lt;/span&gt; &lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="number"&gt;404&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;html&lt;/span&gt;
    &lt;span class="constant"&gt;Order&lt;/span&gt; &lt;span class="ident"&gt;allow&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;span class="ident"&gt;deny&lt;/span&gt;
    &lt;span class="constant"&gt;Deny&lt;/span&gt; &lt;span class="ident"&gt;from&lt;/span&gt; &lt;span class="ident"&gt;all&lt;/span&gt;
    &lt;span class="constant"&gt;Satisfy&lt;/span&gt; &lt;span class="constant"&gt;All&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="regex"&gt;DirectoryMatch&amp;gt;

  &amp;lt;FilesMatch &amp;quot;&lt;span class="escape"&gt;\.&lt;/span&gt;rb&amp;quot;&amp;gt;
    Order allow,deny
    Deny from all
  &amp;lt;&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="constant"&gt;FilesMatch&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="constant"&gt;FilesMatch&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="escape"&gt;\.&lt;/span&gt;rhtml&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
    &lt;span class="constant"&gt;Order&lt;/span&gt; &lt;span class="ident"&gt;allow&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt;&lt;span class="ident"&gt;deny&lt;/span&gt;
    &lt;span class="constant"&gt;Deny&lt;/span&gt; &lt;span class="ident"&gt;from&lt;/span&gt; &lt;span class="ident"&gt;all&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="regex"&gt;FilesMatch&amp;gt;
&lt;span class="normal"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
	&lt;p&gt;&lt;strong&gt;Rubykill: How We Manage Mongrel on Windows&lt;/strong&gt;&lt;br /&gt;I&amp;#8217;ve never really taken the time to learn how to manage a Windows box properly. I&amp;#8217;ve always focused strictly on software (e.g. &lt;span class="caps"&gt;PHP&lt;/span&gt;, Apache) and not the OS itself (others manage the OS). So when it became apparent that we were picking up more traffic and Mongrel liked &lt;span class="caps"&gt;RAM&lt;/span&gt; we had to find a solution to restart Mongrels just in case. The quick, dirty, and brute force solution? Rubykill.&lt;/p&gt;


	&lt;p&gt;Rubykill is just a scheduled task that takes out a Ruby process. We run it five times a night so essentially slate is restarted once a day. The significant downside to this solution is that you&amp;#8217;ll get a proxy error for about 30 seconds before the proxy balancing kicks in. It takes about a minute for Mongrel to start back up again. In that time Apache realizes it&amp;#8217;s out of commission and works around it.&lt;/p&gt;


	&lt;p&gt;And, yes, rubykill is overkill.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Working with RedCloth&lt;/strong&gt;&lt;br /&gt;Way back when I posted an article about &lt;a href="http://slateinfo.blogs.wvu.edu/blog/2007/2/21/thoughts-on-textile"&gt;slate and RedCloth/Textile&lt;/a&gt;. If you&amp;#8217;re going to be using RedCloth for your markup and have a number of folks who will be using your system then learn from our experience. &lt;a href="http://slateinfo.blogs.wvu.edu/blog/2007/2/21/thoughts-on-textile"&gt;Read the article&lt;/a&gt; and then come back here for some more tips.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;patiently waits&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;Ok, here you go:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;Change your code markup from one @ sign to two.&lt;/em&gt; If you don&amp;#8217;t you&amp;#8217;ll run into problems with folks trying to put email addresses on one line. It gets really funky. So, Ryan, that&amp;#8217;s why you get @something@ in the comments instead of a code tag ;)&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;People like dashes.&lt;/em&gt; We&amp;#8217;ve had a number of folks submit comments to various blog articles and they&amp;#8217;ve used dashes (e.g. trying to make an em dash). To RedCloth this means a strike-through and then people get a little huffy when their post has been supposedly &amp;#8220;edited/censored.&amp;#8221; Just be careful with this. I don&amp;#8217;t think we&amp;#8217;ve put a &amp;#8220;fix&amp;#8221; in other than making sure superadmins can edit comments in the next release.&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Use the Textile Editor Helper.&lt;/em&gt; Did you think I wouldn&amp;#8217;t plug it? &lt;a href="http://slateinfo.blogs.wvu.edu/plugins/textile_editor_helper"&gt;Check it out&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

	&lt;p&gt;&lt;strong&gt;Next Article&amp;#8230;&lt;/strong&gt;&lt;br /&gt;Chris will eventually follow this article up with one related to deployment and some of the stuff he&amp;#8217;s done to future-proof slate a little. I&amp;#8217;m not sure if there&amp;#8217;s much more to really cover other than that. Let us know what you think.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=c_hBTPEfouo:emOsfDE0Rvs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=c_hBTPEfouo:emOsfDE0Rvs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?i=c_hBTPEfouo:emOsfDE0Rvs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/wvu/slateinfo/~4/c_hBTPEfouo" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 06 Nov 2007 12:51:00 EST</pubDate>
      <link>http://feedproxy.google.com/~r/wvu/slateinfo/~3/c_hBTPEfouo/the-running-of-slate</link>
      <guid isPermaLink="false">http://slateinfo.blogs.wvu.edu/blog/2007/11/6/the-running-of-slate</guid>
    <feedburner:origLink>http://slateinfo.blogs.wvu.edu/blog/2007/11/6/the-running-of-slate</feedburner:origLink></item>
    <item>
      <title>Campfire for Design &amp; Keeping Your Tag Cloud Running</title>
      <description>&lt;p&gt;I&amp;#8217;m not usually into regurgitating links but two blog posts today that really caught my eye.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.37signals.com/svn/posts/681-behind-the-scenes-at-37signals-design"&gt;Behind the scenes at 37signals: Design&lt;/a&gt;&lt;br /&gt;The post goes into some detail (and it&amp;#8217;s supposedly the first in a series) about how Campfire helps the folks at 37signals with their design work. I was struck by how similar it is to how Chris and I use &lt;span class="caps"&gt;AIM&lt;/span&gt;. Though they&amp;#8217;re passing files around and we don&amp;#8217;t really do that. I had forgotten the subversion integration. I had tried to use Pyro for a bit but it lost out to ol&amp;#8217; reliable, &lt;span class="caps"&gt;AIM&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://railstips.org/2007/10/31/keeping-your-tag-cloud-running-intro"&gt;Keeping Your Tag Cloud Running: Intro&lt;/a&gt;&lt;br /&gt;A post by John Nunemaker over at &lt;a href="http://railstips.org/"&gt;RailsTips.org&lt;/a&gt;. Looks like it&amp;#8217;s the first in a series of posts on managing a growing Rails site. Nitty gritty server stuff which looks really cool. It&amp;#8217;s inspired me to try to give a more abridged look at what we&amp;#8217;re doing. There is some stuff (e.g. back-ups) which are magically taken care of for us by the technical elves in the data center so we don&amp;#8217;t have info on it.&lt;/p&gt;


	&lt;p&gt;Considering it&amp;#8217;s Halloween should I have said &amp;#8220;ghouls and ghosts&amp;#8221; rather than &amp;#8220;elves&amp;#8221;? Happy Halloween :)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=PbcalRLuz5Q:zsS_mZavZ4w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=PbcalRLuz5Q:zsS_mZavZ4w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?i=PbcalRLuz5Q:zsS_mZavZ4w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/wvu/slateinfo/~4/PbcalRLuz5Q" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 31 Oct 2007 16:28:00 EST</pubDate>
      <link>http://feedproxy.google.com/~r/wvu/slateinfo/~3/PbcalRLuz5Q/campfire-for-design-keeping-your-tag-cloud-running2</link>
      <guid isPermaLink="false">http://slateinfo.blogs.wvu.edu/blog/2007/10/31/campfire-for-design-keeping-your-tag-cloud-running2</guid>
    <feedburner:origLink>http://slateinfo.blogs.wvu.edu/blog/2007/10/31/campfire-for-design-keeping-your-tag-cloud-running2</feedburner:origLink></item>
    <item>
      <title>Custom configuration settings made easy</title>
      <description>&lt;p&gt;I&amp;#8217;m currently working on extracting some of the business rules and options from slate into a separate configuration block.  My first stab at this involved creating a custom &lt;code&gt;ConfigurationBuilder&lt;/code&gt; class  and using &lt;code&gt;instance_eval&lt;/code&gt; to get some fancy &lt;span class="caps"&gt;DSL&lt;/span&gt; working.  But then I thought of a much simpler solution: a custom Hash class that supported method-based access to keys.  That is, &lt;code&gt;hash.some_key&lt;/code&gt; would be the same as &lt;code&gt;hash[:some_key]&lt;/code&gt;.&lt;/p&gt;


	&lt;p&gt;Turns out, this really wasn&amp;#8217;t too complicated.  The slightly tricky part was handling nesting: I wanted my configuration options to be grouped, such as &lt;code&gt;passwords.min_length&lt;/code&gt;.  All I had to do for this to work was override the &lt;code&gt;default&lt;/code&gt; method for my custom hash class.&lt;/p&gt;


	&lt;p&gt;The end result is as follows:&lt;/p&gt;


&lt;div class="code ruby"&gt;&lt;pre&gt;
&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;active_support&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Configuration&lt;/span&gt;
  &lt;span class="ident"&gt;cattr_accessor&lt;/span&gt; &lt;span class="symbol"&gt;:settings&lt;/span&gt;

  &lt;span class="comment"&gt;# creates a new configuration object if&lt;/span&gt;
  &lt;span class="comment"&gt;# necessary&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;self.settings&lt;/span&gt; &lt;span class="comment"&gt;# !&amp;gt; redefine settings&lt;/span&gt;
    &lt;span class="attribute"&gt;@@settings&lt;/span&gt; &lt;span class="punct"&gt;||=&lt;/span&gt; &lt;span class="constant"&gt;ConfigurationHash&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="comment"&gt;# returns the current configuration&lt;/span&gt;
  &lt;span class="comment"&gt;# by passing a block you can easily edit the&lt;/span&gt;
  &lt;span class="comment"&gt;# configuration values&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;self.config&lt;/span&gt;
    &lt;span class="ident"&gt;block_given?&lt;/span&gt; &lt;span class="punct"&gt;?&lt;/span&gt; &lt;span class="keyword"&gt;yield&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;self&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;settings&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="constant"&gt;self&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;settings&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="comment"&gt;# specialized hash for storing configuration settings&lt;/span&gt;
&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;ConfigurationHash&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;Hash&lt;/span&gt;
  &lt;span class="comment"&gt;# ensure that default entries always produce &lt;/span&gt;
  &lt;span class="comment"&gt;# instances of the ConfigurationHash class&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;default&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;key&lt;/span&gt;&lt;span class="punct"&gt;=&lt;/span&gt;&lt;span class="constant"&gt;nil&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="ident"&gt;include?&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;key&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;?&lt;/span&gt; &lt;span class="constant"&gt;self&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="ident"&gt;key&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="constant"&gt;self&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="ident"&gt;key&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;self&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;class&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="comment"&gt;# provides member-based access to keys&lt;/span&gt;
  &lt;span class="comment"&gt;# i.e. params.id === params[:id]&lt;/span&gt;
  &lt;span class="comment"&gt;# note: all keys are converted to symbols&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;method_missing&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="punct"&gt;*&lt;/span&gt;&lt;span class="ident"&gt;args&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="ident"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;to_s&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;ends_with?&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;=&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; 
      &lt;span class="ident"&gt;send&lt;/span&gt; &lt;span class="punct"&gt;:[]=,&lt;/span&gt; &lt;span class="ident"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;to_s&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;chomp&lt;/span&gt;&lt;span class="punct"&gt;('&lt;/span&gt;&lt;span class="string"&gt;=&lt;/span&gt;&lt;span class="punct"&gt;').&lt;/span&gt;&lt;span class="ident"&gt;to_sym&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="punct"&gt;*&lt;/span&gt;&lt;span class="ident"&gt;args&lt;/span&gt;
    &lt;span class="keyword"&gt;else&lt;/span&gt;
      &lt;span class="ident"&gt;send&lt;/span&gt;&lt;span class="punct"&gt;(:[],&lt;/span&gt; &lt;span class="ident"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;to_sym&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;    
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
	&lt;p&gt;Here&amp;#8217;s an example of how it works (say, in the &lt;code&gt;environment.rb&lt;/code&gt; file):&lt;/p&gt;


&lt;div class="code ruby"&gt;&lt;pre&gt;
&lt;span class="constant"&gt;Configuration&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;config&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;config&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
  &lt;span class="ident"&gt;config&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;passwords&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;min_length&lt;/span&gt;   &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="number"&gt;8&lt;/span&gt;
  &lt;span class="ident"&gt;config&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;passwords&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;ttl&lt;/span&gt;          &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="number"&gt;60&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="constant"&gt;Configuration&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;config&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;passwords&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;min_length&lt;/span&gt; &lt;span class="comment"&gt;# =&amp;gt; 8&lt;/span&gt;
&lt;span class="constant"&gt;Configuration&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;config&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;passwords&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;ttl&lt;/span&gt; &lt;span class="comment"&gt;# =&amp;gt; 60&lt;/span&gt;

&lt;span class="comment"&gt;# some alternate ways to access the settings&lt;/span&gt;
&lt;span class="constant"&gt;Configuration&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;config&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:passwords&lt;/span&gt;&lt;span class="punct"&gt;][&lt;/span&gt;&lt;span class="symbol"&gt;:min_length&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="comment"&gt;# =&amp;gt; 8&lt;/span&gt;
&lt;span class="constant"&gt;Configuration&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;config&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;passwords&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:ttl&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="comment"&gt;# =&amp;gt; 60&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
	&lt;p&gt;Just a note that the method chain can technically go on as long as you want:&lt;/p&gt;


&lt;div class="code ruby"&gt;&lt;pre&gt;
&lt;span class="constant"&gt;Configuration&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;config&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;passwords&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;length&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;minimum&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="number"&gt;8&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
	&lt;p&gt;This works because a new &lt;code&gt;ConfigurationHash&lt;/code&gt; is created when you access a key that doesn&amp;#8217;t exist.&lt;/p&gt;


	&lt;p&gt;There you have it &amp;#8211; custom configuration settings made easy.  &lt;strong&gt;One caveat&lt;/strong&gt;: since this is all dynamic, if you spell a key wrong or provide an incorrect path, you won&amp;#8217;t be getting the configuration setting you want.  However, the trade-off is the ability to define new options instantly.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=L9k7nGFjdXI:8Cqx345Akw8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=L9k7nGFjdXI:8Cqx345Akw8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?i=L9k7nGFjdXI:8Cqx345Akw8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/wvu/slateinfo/~4/L9k7nGFjdXI" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 29 Oct 2007 19:00:00 EST</pubDate>
      <link>http://feedproxy.google.com/~r/wvu/slateinfo/~3/L9k7nGFjdXI/custom-configuration-settings-made-easy</link>
      <guid isPermaLink="false">http://slateinfo.blogs.wvu.edu/blog/2007/10/29/custom-configuration-settings-made-easy</guid>
    <feedburner:origLink>http://slateinfo.blogs.wvu.edu/blog/2007/10/29/custom-configuration-settings-made-easy</feedburner:origLink></item>
    <item>
      <title>HOW-TO: Add a Gallery to Your Site</title>
      <description>&lt;p&gt;Wow, an article directed directly at our current users. That&amp;#8217;s a little different for us. Today I had to write up how to add an &lt;a href="http://alumni.galleries.wvu.edu/"&gt;image gallery&lt;/a&gt; to a site in slate so I figured I&amp;#8217;d share it with everyone. Speaking of &lt;span class="caps"&gt;HOW&lt;/span&gt;-TOs I desperately need to update &lt;a href="http://trac.webtest.wvu.edu/slate.db/wiki/howtos"&gt;the ones that are already out there&lt;/a&gt;. Not enough time in the day. Which is why I&amp;#8217;m writing a post ;) K, let&amp;#8217;s get to it&amp;#8230;&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Setting Up Your Gallery&lt;/strong&gt;&lt;br /&gt;A gallery, in slate terms, just happens to hold albums which are what you&amp;#8217;re really associating your images with for display.&lt;ol&gt;
	&lt;li&gt;In slate go to &amp;#8216;Files&amp;#8217;&lt;/li&gt;
	&lt;li&gt;Click on Images&lt;/li&gt;
	&lt;li&gt;Create a set under Images called Galleries. You can give it whatever you description you want but you &lt;em&gt;have&lt;/em&gt; to call the set Galleries.&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Note the ID in the &lt;span class="caps"&gt;URL&lt;/span&gt; for the Gallery set. You&amp;#8217;ll need it at a later step.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Setting Up Individual Albums&lt;/strong&gt;&lt;br /&gt;Again, an album is what actually holds the images. So keep them topical to what you&amp;#8217;ll be showing.&lt;ol&gt;
	&lt;li&gt;Click on the set called Galleries&lt;/li&gt;
	&lt;li&gt;You can create any number of sets under Galleries that correspond to the albums you want to create. So you could have Students, Event A&amp;#8230; whatever.&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Adding New Images to an Album&lt;/strong&gt;&lt;br /&gt;Refer to our article, &lt;a href="http://trac.webtest.wvu.edu/slate.db/wiki/HOWTOOrganizeFiles"&gt;HOW-TO: Organize Files in slate&lt;/a&gt;, in Trac. Specifically focus on the section &amp;#8216;To Add Files to a Set&amp;#8217;.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Adding the Gallery Listing to a Page in slate&lt;/strong&gt;&lt;br /&gt;By default, slate wants to push out a list of the albums you have in the set before it does it&amp;#8217;s auto-magical stuff with creating your nice albums with slideshow.&lt;ol&gt;
	&lt;li&gt;Navigate to the page where you want to add the album listing.&lt;/li&gt;
	&lt;li&gt;Using the ID you noted earlier, put in the snippet: &amp;#123;&amp;#123; Collection.collection_list collection_id=someid &amp;#125;&amp;#125;. You can add whatever text you need above and below.&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;


	&lt;p&gt;Voila! You&amp;#8217;ve just added an &lt;a href="http://alumni.galleries.wvu.edu/"&gt;image gallery with multiple albums to your site&lt;/a&gt;. &lt;em&gt;Note:&lt;/em&gt; Only a few sites have the appropriate styles and theme bits to show a gallery within their own look and feel. slate will show a &lt;a href="http://alumni.galleries.wvu.edu/"&gt;nice default theme&lt;/a&gt; but if you want a more integrated feel for your gallery let us know.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=svSLlJ_SPnM:ziiDK8fGiNE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=svSLlJ_SPnM:ziiDK8fGiNE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?i=svSLlJ_SPnM:ziiDK8fGiNE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/wvu/slateinfo/~4/svSLlJ_SPnM" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 29 Oct 2007 16:47:01 EST</pubDate>
      <link>http://feedproxy.google.com/~r/wvu/slateinfo/~3/svSLlJ_SPnM/how-to-add-a-gallery-to-your-site</link>
      <guid isPermaLink="false">http://slateinfo.blogs.wvu.edu/blog/2007/10/29/how-to-add-a-gallery-to-your-site</guid>
    <feedburner:origLink>http://slateinfo.blogs.wvu.edu/blog/2007/10/29/how-to-add-a-gallery-to-your-site</feedburner:origLink></item>
    <item>
      <title>JSONRequest.post Example</title>
      <description>&lt;p&gt;As I wrote in an earlier post we&amp;#8217;re looking at &lt;a href="http://www.json.org"&gt;JSON&lt;/a&gt; for one of our new features in slate. To quote the &lt;a href="http://www.json.org"&gt;official &lt;span class="caps"&gt;JSON&lt;/span&gt; site&lt;/a&gt;, &amp;#8220;JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate.&amp;#8221; So far in playing with it I&amp;#8217;d have to agree.&lt;/p&gt;


	&lt;p&gt;The one thing we&amp;#8217;re doing a little differently (I think) is that we want to pass the &lt;span class="caps"&gt;JSON&lt;/span&gt; object from the page to the server as opposed from the server to the page. We&amp;#8217;ll probably be doing the latter at some point though. Their is a proposal out there for adding &lt;a href="http://json.org/JSONRequest.html"&gt;JSONRequest&lt;/a&gt; to JavaScript proper. In lieu of it actually being there I messed around with a &lt;a href="http://www.devpro.it/JSON/files/JSON-js.html"&gt;JSON JavaScript library&lt;/a&gt; from Andrea Giammarchi. While I worked with &lt;span class="caps"&gt;PHP&lt;/span&gt; for my example (it was just faster) and the &lt;a href="http://pecl.php.net/package/json"&gt;JSON &lt;span class="caps"&gt;PECL&lt;/span&gt; package&lt;/a&gt; come Rails 2.0 to_json and from_json are &lt;a href="http://caboo.se/doc/classes/ActiveRecord/Serialization.html"&gt;both supported by default&lt;/a&gt;. Ready for an upgrade, Chris? ;)&lt;/p&gt;


	&lt;p&gt;So what did I come up with? &lt;a href="http://users.webtest.wvu.edu/dmolsen/JSONTest/"&gt;This&lt;/a&gt;. Yup, a super cool method to reverse inputted text :) The JS code isn&amp;#8217;t anything incredible:&lt;/p&gt;


&lt;div class="code js"&gt;&lt;pre&gt;
//Show the info returned from the PHP script
function showJSONInfo(sn, response, error) {
     if (response) {
          $('revText').innerHTML = &amp;quot;&amp;lt;strong&amp;gt;It worked!&amp;lt;/strong&amp;gt;&amp;lt;br /&amp;gt;Your text reversed: &amp;quot; + response.revText;
          new Effect.Highlight('revText', {startcolor:'#ffcc00', endcolor:'#ffffff'});
     }
     else {
          alert(error);
     }
}

//Format and send the data to the PHP script
function getJSONInfo() {
     var JSONInfo = {&amp;quot;normText&amp;quot;:$('normText').value};
     try {
          JSONRequest.post(&amp;quot;json.php&amp;quot;, JSONInfo, showJSONInfo);
     }
     catch(e) {
          alert(e);
     }
}
&lt;/pre&gt;&lt;/div&gt;
	&lt;p&gt;Overall the library was pretty easy to use. I had to bang my head against a few things but that&amp;#8217;s probably due to my own stupidity than anything else. A couple of things:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;While it&amp;#8217;s noted that JSONRequest.js requires the associated error .js file it actually requires &lt;span class="caps"&gt;JSON&lt;/span&gt;.js and it&amp;#8217;s associated error .js file as well. Maybe that should have been blindingly obvious to me but it wasn&amp;#8217;t.&lt;/li&gt;
	&lt;li&gt;I just dealt with the raw &lt;span class="caps"&gt;POST&lt;/span&gt; on the &lt;span class="caps"&gt;PHP&lt;/span&gt; side so, if you want to do the same, you might want to edit line 240 of JSONRequest.php to take out the var name.&lt;/li&gt;
	&lt;li&gt;Make sure you&amp;#8217;ve got the right content-type. I assume this isn&amp;#8217;t a problem in Rails. It should be application/jsonrequest&lt;/li&gt;
	&lt;li&gt;On the &lt;span class="caps"&gt;PHP&lt;/span&gt; side make sure you urldecode() that raw &lt;span class="caps"&gt;POST&lt;/span&gt; data. The decode may not be perfect so &lt;span class="caps"&gt;YMMV&lt;/span&gt;.&lt;/li&gt;
	&lt;li&gt;Also on the &lt;span class="caps"&gt;PHP&lt;/span&gt; side (which is obviously where I had most of my problems) you can use arrays to hold your &lt;span class="caps"&gt;JSON&lt;/span&gt; data if you, like me, have no clue how to use objects in &lt;span class="caps"&gt;PHP&lt;/span&gt;. So it&amp;#8217;s:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="code ruby"&gt;&lt;pre&gt;
&lt;span class="ident"&gt;json_decode&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;urldecode&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="global"&gt;$jsonData&lt;/span&gt;&lt;span class="punct"&gt;),&lt;/span&gt;&lt;span class="constant"&gt;true&lt;/span&gt;&lt;span class="punct"&gt;);&lt;/span&gt; 
&lt;/pre&gt;&lt;/div&gt;
	&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I just started looking at &lt;span class="caps"&gt;JSON&lt;/span&gt; a few days ago so if I&amp;#8217;ve rehashed things people already know or if I&amp;#8217;ve gone into left field doing this ass-backwards feel free to let me know.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=AxjolecWOz0:JYjDC63itTg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=AxjolecWOz0:JYjDC63itTg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?i=AxjolecWOz0:JYjDC63itTg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/wvu/slateinfo/~4/AxjolecWOz0" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 26 Oct 2007 16:08:00 EST</pubDate>
      <link>http://feedproxy.google.com/~r/wvu/slateinfo/~3/AxjolecWOz0/jsonrequest-post-example</link>
      <guid isPermaLink="false">http://slateinfo.blogs.wvu.edu/blog/2007/10/26/jsonrequest-post-example</guid>
    <feedburner:origLink>http://slateinfo.blogs.wvu.edu/blog/2007/10/26/jsonrequest-post-example</feedburner:origLink></item>
    <item>
      <title>Miscellaneous</title>
      <description>&lt;p&gt;Just a collection of recent thoughts:&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Feedburner Pro Now Free&lt;/strong&gt;&lt;br /&gt;If you&amp;#8217;re taking advantage of Feedburner but didn&amp;#8217;t want to shell out the cash for a Pro account it&amp;#8217;s now free. This is kind of old news but if you didn&amp;#8217;t know before, well, now you do. It&amp;#8217;s interesting to see what&amp;#8217;s clicked on.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;jQuery UI Is Pretty Cool&lt;/strong&gt;&lt;br /&gt;So we&amp;#8217;re looking to add a table builder to slate. Basically the pipes are too difficult for our users. I&amp;#8217;ve been sketching out a number of ideas. I was even working on a draft version within our current snippet framework before realizing it wouldn&amp;#8217;t work since we needed to render &lt;span class="caps"&gt;TEH&lt;/span&gt; within it. Now I&amp;#8217;ve mocked up a crazy UI but I think it&amp;#8217;ll be pretty cool. We&amp;#8217;re looking at &lt;a href="http://ui.jquery.com/"&gt;jQuery UI&lt;/a&gt; for our JS widgets. I also like the idea of using it for our new resource reorganize view. Be sure to check out the jQuery UI demos.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;JSON Is Cooler&lt;/strong&gt;&lt;br /&gt;Keeping track of the data for each table cell in table builder I thought was going to be a bit of a nightmare until Chris showed me &lt;a href="http://json.org/"&gt;JSON&lt;/a&gt;. Used it a little bit and I&amp;#8217;m really liking it. I had found a method to &lt;span class="caps"&gt;POST JSON&lt;/span&gt; data and I have to find that link again. Is that kind of thing included in Rails 2.0?&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Some Uni Home Pages&lt;/strong&gt;&lt;br /&gt;During the day a co-worker forwarded me a link to the &lt;a href="http://www.ox.ac.uk/"&gt;University of Oxford&lt;/a&gt; home page. Pretty cool, simple design. Make sure to click &amp;#8220;This is Oxford.&amp;#8221; Some more examples (and I&amp;#8217;m strictly looking at design):&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.apu.edu/"&gt;Azusa Pacific University&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.unl.edu/"&gt;University of Nebraska-Lincoln&lt;/a&gt; &lt;em&gt;really like this one&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://spanish-portuguese.berkeley.edu/"&gt;Department of Spanish and Portuguese at UC Berkely&lt;/a&gt; &lt;em&gt;just so unusual for a college/dept. page&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.humboldt.edu/"&gt;Humboldt State University&lt;/a&gt; &lt;em&gt;simple&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.seattleu.edu/"&gt;Seattle University&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://umass.edu/umhome/index.php"&gt;UMass Amherst&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.cmu.edu/index.shtml"&gt;Carnegie Mellon&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.cornell.edu/"&gt;Cornell&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.nd.edu/"&gt;University of Notre Dame&lt;/a&gt; &lt;em&gt;of course&lt;/em&gt; ;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=ciB7m3PD-b0:_V11ggcb6UY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/wvu/slateinfo?a=ciB7m3PD-b0:_V11ggcb6UY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/wvu/slateinfo?i=ciB7m3PD-b0:_V11ggcb6UY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/wvu/slateinfo/~4/ciB7m3PD-b0" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 24 Oct 2007 15:29:00 EST</pubDate>
      <link>http://feedproxy.google.com/~r/wvu/slateinfo/~3/ciB7m3PD-b0/miscellaneous</link>
      <guid isPermaLink="false">http://slateinfo.blogs.wvu.edu/blog/2007/10/24/miscellaneous</guid>
    <feedburner:origLink>http://slateinfo.blogs.wvu.edu/blog/2007/10/24/miscellaneous</feedburner:origLink></item>
  </channel>
</rss><!-- Site served by: slate v0.4.5a r1836 on port 4002 -->
