<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>RocketFoo</title>
	<atom:link href="http://www.rocketfoo.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rocketfoo.com</link>
	<description>an occasionally useful assembly of words written by a person named Jonas.</description>
	<lastBuildDate>Tue, 12 Jul 2011 20:49:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>All work and no play makes email a something something</title>
		<link>http://www.rocketfoo.com/2011/07/12/all-work-and-no-play-makes-email-a-something-something/</link>
		<comments>http://www.rocketfoo.com/2011/07/12/all-work-and-no-play-makes-email-a-something-something/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 20:43:17 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.rocketfoo.com/?p=771</guid>
		<description><![CDATA[I used to send detailed, quality emails. Then I started having a lot of work to do. Then I had a baby. 2006: Hi Bob, Many thanks for your comment. We&#039;re actively working on a solution and hope to have it released within the next week. Please contact me if you have any further comments [...]]]></description>
			<content:encoded><![CDATA[<p>I used to send detailed, quality emails. Then I started having a lot of work to do. Then I had a baby.</p>
<p style="clear:left;margin-top:15px;">2006:</p>
<p><pre><code>
Hi Bob,

Many thanks for your comment. We&#039;re actively working on a 
solution and hope to have it released within the next week. 
Please contact me if you have any further comments or concerns.

Best Regards,
Jonas
</code></pre></p>
<p>2008:<br />
<pre><code>
Hi Bob,

Thanks for the info, we&#039;re working on it, and should have a fix out soon.

Best,
Jonas
</code></pre></p>
<p>2009:<br />
<pre><code>
Thanks Bob fix is pending -
Jonas
</code></pre></p>
<p>2010:<br />
<pre><code>
ok working on it thx
</code></pre></p>
<p>2011:<br />
<pre><code>
ok
</code></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rocketfoo.com/2011/07/12/all-work-and-no-play-makes-email-a-something-something/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Building a site with Symphony CMS, Part 3</title>
		<link>http://www.rocketfoo.com/2011/04/06/building-a-site-with-symphony-cms-part-3/</link>
		<comments>http://www.rocketfoo.com/2011/04/06/building-a-site-with-symphony-cms-part-3/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 02:42:25 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Symphony CMS]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rocketfoo.com/?p=497</guid>
		<description><![CDATA[Hello budding Symphonists, and welcome to the long-delayed part 3 of our tutorial series! In the last episode, we did some relatively mundane work prepping the structure of our portfolio website. Part 3&#8242;s where we crank up the fun and dive into Pages, Data Sources, XML, XSLT, and maybe some other wicked sweet acronyms. Our [...]]]></description>
			<content:encoded><![CDATA[<p>Hello budding Symphonists, and welcome to the long-delayed part 3 of our tutorial series! In the <a href="http://www.rocketfoo.com/2010/07/31/building-a-site-with-symphony-cms-part-2/">last episode</a>, we did some relatively mundane work prepping the structure of our portfolio website. Part 3&#8242;s where we crank up the fun and dive into Pages, Data Sources, XML, XSLT, and maybe some other wicked sweet acronyms. Our goal is to end up with a site that looks like this:</p>
<p><img src="http://www.rocketfoo.com/wp-content/uploads/2010/09/symdemo-600x514.jpg" alt="" title="symdemo" width="600" height="514" class="alignnone size-medium wp-image-617" /></p>
<p>Before I move on to the action, just wanted to mention that several versions of Symphony have been released since I (long ago) began this series. As of this writing, the current version is 2.2. It&#8217;s fantastic, <a href="http://symphony-cms.com/download/releases/version/2.2/">go get it</a>.</p>
<h3>Getting Started with Pages and Templates</h3>
<p>OK, let&#8217;s begin by getting our rough template in place. If you&#8217;ll recall, back in <a href="http://www.rocketfoo.com/2010/07/10/building-a-site-with-symphony-cms-part1/">part 1</a>, we preloaded an XSLT Utility called <em>html5.xsl</em> (in case you forgot, it&#8217;s <a href="http://symphony-cms.com/download/xslt-utilities/?query=html5">here</a>.) This is a great master template that gives us a standard HTML5 layout marked up in XSLT and ready for use in Symphony.</p>
<p>So how do you use this thing? Take a look at our Symphony pages by going to Blueprints &gt; Pages.</p>
<div id="attachment_591" class="wp-caption alignnone" style="width: 610px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/09/Screen-shot-2010-08-25-at-11.25.28-PM-600x242.png" alt="" title="P-P-P-Pages" width="600" height="242" class="size-medium wp-image-591" /><p class="wp-caption-text">P-P-P-Pages</p></div>
<p>As you can see, we already have several pages, .xsl templates, and corresponding URLs in our new site. These came with the default workspace. To be clear, pages in Symphony are not really &#8220;pages&#8221; in the traditional sense. Says the <a href="http://symphony-cms.com/learn/concepts/view/pages/">documentation</a>, &#8220;pages are not simply containers for static content and there is not a one-to-one relationship between a page and the content accessible via that page. A single Symphony page can power an entire browsing interface.&#8221;</p>
<p>Not surprisingly, pages are the bread and butter of your site, tying together your content, templates, and user interface elements. (Don&#8217;t worry, this will make more sense in a minute.)</p>
<p>Anyway, each page has its own .xsl template file. This allows you to customize how that page&#8217;s content is displayed in a browser. Take a look at our home page template by selecting the <em>home.xsl</em> link.</p>
<div id="attachment_593" class="wp-caption alignnone" style="width: 610px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/09/Screen-shot-2010-08-25-at-11.35.00-PM-600x286.png" alt="Home is where the XSLT is" title="Home is where the XSLT is" width="600" height="286" class="size-medium wp-image-593" /><p class="wp-caption-text">Home is where the XSLT is</p></div>
<p>Not much to it, eh? Almost all of this page&#8217;s layout and content is arranged and formatted by other XSLT utilities that are imported to this template; the relevant imported utilities are highlighted in blue in the right column. In that list, click on master.xsl.</p>
<div id="attachment_595" class="wp-caption alignnone" style="width: 610px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/09/Screen-shot-2010-09-10-at-10.08.21-PM-600x563.png" alt="The Template Master" title="The Template Master" width="600" height="563" class="size-medium wp-image-595" /><p class="wp-caption-text">The Template Master</p></div>
<p>Aha! This is the primary site design template, which can be imported into all of our main pages. This template provides the standard elements of a site design: header, nav, etc. (But to our horror, this master.xsl is old-school XHTML, which was excellent about one year ago but is suddenly the laughingstock of fashionable web designers.)</p>
<p>Let&#8217;s hang on to this master.xsl for now, and switch our home page to our preferred template, html5.xsl. Go back to the home.xsl template and change this line:</p>
<p><del><code>&lt;xsl:import href=&quot;../utilities/master.xsl&quot;/&gt;</code></del><br />
<code>&lt;xsl:import href=&quot;../utilities/html5.xsl&quot;/&gt;</code></p>
<p>Let&#8217;s also get rid of some bits we don&#8217;t need. We&#8217;re not going to use the Notes or Comments functions from the default installation, so remove these lines:<br />
<pre><code>
&lt;xsl:import href=&quot;../utilities/get-notes.xsl&quot;/&gt;
&lt;xsl:import href=&quot;../utilities/get-comments.xsl&quot;/&gt;
&lt;xsl:apply-templates select=&quot;notes&quot;/&gt;
</code></pre></p>
<p>Save your changes. For our last bit of work in this area, click on the html5.xsl utility and peruse its code. Let&#8217;s start over with styling by modifying our stylesheet name:</p>
<p><code>&lt;link rel=&quot;stylesheet&quot; media=&quot;screen&quot; href=&quot;{$workspace}/css/styles.css&quot; /&gt;</code></p>
<p>change <em>styles.css</em> to &#8220;demostyles.css.&#8221; This file doesn&#8217;t exist yet, so we will initially have no CSS styles applied to our site.</p>
<p>OK, save the changes. Now to see what we&#8217;ve done:</p>
<div id="attachment_522" class="wp-caption alignnone" style="width: 546px"><br />
<img class="alignnone size-medium wp-image-522" title="1996 called and wants it website back." src="http://www.rocketfoo.com/wp-content/uploads/2010/08/Screen-shot-2010-08-26-at-10.21.26-PM-536x600.png" alt="" width="536" height="600" /><p class="wp-caption-text">1996 called and wants it website back.</p></div>
<p>Hmm, ugly. But we&#8217;re not done yet. Our next matter of business is to make sure all the content we want is available on the home page.</p>
<h3>Data Sources</h3>
<p>In Symphony, <em>Data Sources</em> are a method to select content from sections and make it available in pages. Remember, we defined several sections — Projects, Categories, Images, and Tweets — but only a fraction of this content is currently visible on our home page. Let&#8217;s fix that. Go to Blueprints &gt; Components, and have a look at the Data Sources list.</p>
<div id="attachment_538" class="wp-caption alignnone" style="width: 548px"><br />
<img class="alignnone size-full wp-image-538" title="A Fountain of Data" src="http://www.rocketfoo.com/wp-content/uploads/2010/08/Screen-shot-2010-08-26-at-11.05.47-PM.png" alt="" width="362" height="313" /><br />
<p class="wp-caption-text">A Fountain of Data</p></div>
<p>As usual, there are some pre-made Data Sources here, and we can reuse most of them. Since there is no Data Source for our Tweets, let&#8217;s make one. Select <em>Create New</em>.</p>
<div id="attachment_540" class="wp-caption alignnone" style="width: 610px"><img class="alignnone size-medium wp-image-540" title="Creating a Data Source For Some Homestyle Tweetin's" src="http://www.rocketfoo.com/wp-content/uploads/2010/08/Screen-shot-2010-08-26-at-11.15.47-PM-459x600.png" alt="Creating a Data Source For Some Homestyle Tweetin's" width="459" height="600" /><p class="wp-caption-text">Creating a Data Source For Some Homestyle Tweetin's</p></div>
<p>this can look a little intimidating at first, but it&#8217;s actually not so bad. Start out by naming this Data Source &#8220;Tweets&#8221; and select the <em>Tweets</em> section from the Source menu.</p>
<p>The next step to consider is whether you want to <strong>Filter</strong> your Tweets by some criteria. For now we&#8217;ll leave this alone, but one example I use on my site is to hide any @-replies to specific people, using this filter: <code>not-regexp:^@</code>. <em>Note: not-regexp is new in Symphony 2.2.</em></p>
<p>Next, we&#8217;ll have to decide how we want to <strong>Sort and Limit</strong> our Tweets. I would like them to be in descending date order (newest at the top) and I don&#8217;t want to see more than three Tweets on the home page. So, change <strong>Sort By</strong> to <em>Date</em> and change &#8220;Show a maximum of 20 results per page&#8221; to <em>3</em>.</p>
<p>In the <strong>Included Elements</strong> select list, choose <em>permalink</em>, <em>tweet</em>, and <em>date</em>. These are the pieces of a Tweet that will be available to your page.</p>
<p>We&#8217;re done for now — select <em>Create Data Source</em>.</p>
<p>Wait, we&#8217;re not done! We need to instruct our home page that this new Data Source is available. Go back to Blueprints &gt; Pages, and click on the <em>Home</em> link in the <strong>Title</strong> column. This brings up the Page Settings screen for the home page.</p>
<div id="attachment_548" class="wp-caption alignnone" style="width: 610px"><br />
<img class="alignnone size-medium wp-image-548" title="Setting Page Settings" src="http://www.rocketfoo.com/wp-content/uploads/2010/08/Screen-shot-2010-08-26-at-11.46.51-PM-600x407.png" alt="" width="600" height="407" /><p class="wp-caption-text">Setting Page Settings</p></div>
<p>Command or Control -click on the <strong>Tweets</strong> Data Source to make sure it&#8217;s selected, and then <em>Save Changes</em>. Now let&#8217;s have another look at our home page.</p>
<div id="attachment_522" class="wp-caption alignnone" style="width: 546px"><br />
<img class="alignnone size-medium wp-image-522" title="Tweet?" src="http://www.rocketfoo.com/wp-content/uploads/2010/08/Screen-shot-2010-08-26-at-10.21.26-PM-536x600.png" alt="" width="536" height="600" /><p class="wp-caption-text">Tweet?</p></div>
<p>As you can see, our Tweets are all here. What&#8217;s that? They&#8217;re not? Here&#8217;s why: the home page now has access to our Tweets data, but we haven&#8217;t added any Tweet formatting to our front-end templates yet. Don&#8217;t believe me? Click the <em>Debug</em> link or append <code>?debug=xml</code> to the end of the URL, and begin to understand the glory that is Symphony.</p>
<div id="attachment_551" class="wp-caption alignnone" style="width: 610px"><img class="size-medium wp-image-551" title="Oh, the sweet sweet glory." src="http://www.rocketfoo.com/wp-content/uploads/2010/08/Screen-shot-2010-08-30-at-9.58.00-PM-600x351.png" alt="" width="600" height="351" /><p class="wp-caption-text">Oh, the sweet sweet Tweet glory.</p></div>
<p>Now you&#8217;re seeing the output of all the Data Sources enabled for this page, rendered as XML. We&#8217;re free to use XSLT to transform this into whatever format we want (in this case it&#8217;s HTML, but it doesn&#8217;t have to be.) So let&#8217;s do that. There are many ways to approach this, so I&#8217;ll give you one example, but you can try other variations too.</p>
<h2>A Spot of XSLT</h2>
<p>Go to Blueprints &gt; Components and in the Utilities section, select <em>Create New.</em> We&#8217;re going to name this utility <em>get-tweets.xsl.</em> Paste in the following code:<br />
<pre><code>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;xsl:stylesheet version=&quot;1.0&quot;
&nbsp;&nbsp;xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:import href=&quot;../utilities/talinkahashifyer.xsl&quot;/&gt;

&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:template name=&quot;get-tweets&quot; match=&quot;tweets&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ul&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:apply-templates select=&quot;entry&quot;/&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ul&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:template&gt;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:template match=&quot;tweets/entry&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:call-template name=&quot;linkahashify&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:with-param name=&quot;tweet&quot; select=&quot;tweet&quot; /&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:call-template&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/li&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;
</code></pre></p>
<p>(I&#8217;ll step through this briefly, but be sure to check out the <a href="http://symphony-cms.com/discuss/thread/26348/">metric ton</a> of information about XSLT out there.)</p>
<p>Our Tweets XML looks like this:</p>
<p><pre><code>
&nbsp;&nbsp;&nbsp;&nbsp;&lt;tweets&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;section id=&quot;7&quot; handle=&quot;tweets&quot;&gt;Tweets&lt;/section&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;entry id=&quot;19&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;permalink handle=&quot;19927170746&quot;&gt;19927170746&lt;/permalink&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tweet&gt;Trusty 6-year-old WRT54G router died in a fit of buzzy, maniacal rage. Suggestions for a new model? (N, preferably.)&lt;/tweet&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;date time=&quot;12:41&quot; weekday=&quot;5&quot;&gt;2010-07-30&lt;/date&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/entry&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;entry id=&quot;20&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;permalink handle=&quot;19876287923&quot;&gt;19876287923&lt;/permalink&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tweet&gt;Do you like to write? Are you crazy about #symphonycms? Or just crazy? Join me on the Documentation Working Group! http://bit.ly/bhVE6z&lt;/tweet&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;date time=&quot;21:41&quot; weekday=&quot;4&quot;&gt;2010-07-29&lt;/date&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/entry&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;entry id=&quot;21&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;permalink handle=&quot;19843470091&quot;&gt;19843470091&lt;/permalink&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tweet&gt;@nicksergeant given how long it took to get HTML5 and CSS3 off the ground, maybe it will happen by the time we retire :)&lt;/tweet&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;date time=&quot;12:46&quot; weekday=&quot;4&quot;&gt;2010-07-29&lt;/date&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/entry&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tweets&gt;
</code></pre></p>
<p>So here&#8217;s how the XSLT works:</p>
<p><code>&lt;xsl:import href=&quot;../utilities/talinkahashifyer.xsl&quot;/&gt;</code><br />
Imports the &#8220;talinkahashifyer&#8221; utility we downloaded from the Symphony site — this auto-formats the body of our tweets so things like links and @replies work.</p>
<p><pre><code>
&lt;xsl:template name=&quot;get-tweets&quot; match=&quot;tweets&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;ul&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:apply-templates select=&quot;entry&quot;/&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ul&gt;
&lt;/xsl:template&gt;
</code></pre></p>
<p>This selects the <code>&lt;tweets&gt;</code> parent element from our XML, and applies any relevant templates for the <code>&lt;entry&gt;</code> child elements. The output is contained in an unordered list (ul) tag.</p>
<p><pre><code>
&lt;xsl:template match=&quot;tweets/entry&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:call-template name=&quot;linkahashify&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:with-param name=&quot;tweet&quot; select=&quot;tweet&quot; /&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:call-template&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/li&gt;
&lt;/xsl:template&gt;
</code></pre></p>
<p>This matches all <code>&lt;entry&gt;</code> elements contained in the <code>&lt;tweets&gt;</code> element, and formats them by calling the linkahashify template (the actual tweet content is sent as a parameter to that template.) This output will be contained in a list (li) element.</p>
<p>For our example, the end result will be an unordered list of three tweets, organized in descending date order, and formatted appropriately:</p>
<p><img src="http://www.rocketfoo.com/wp-content/uploads/2010/09/tweets.png" alt="" title="tweets" width="492" height="147" class="alignnone size-full wp-image-607" /></p>
<p>This solution is admittedly somewhat abstract, but it&#8217;s good to familiarize yourself with <a href="http://www.w3schools.com/xsl/xsl_apply_templates.asp"><code>&lt;xsl:apply-templates&gt;</code></a> and <a href="http://www.w3schools.com/xsl/el_call-template.asp"><code>&lt;xsl:call-template&gt;</code></a>, as they are used heavily. Here&#8217;s a more straightforward way to do this with <code>&lt;xsl:for-each&gt;</code>, which might be more obvious for XSLT newbies who are familiar with other template languages:</p>
<p><pre><code>
&lt;xsl:template match=&quot;tweets&quot;&gt;
 &lt;ul&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:for-each select=&quot;entry&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:call-template name=&quot;linkahashify&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:with-param name=&quot;tweet&quot; select=&quot;tweet&quot; /&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:call-template&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/li&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:for-each&gt;
&lt;/ul&gt;
&lt;/xsl:template&gt;
</code></pre></p>
<p>Now that we have the <em>get-tweets.xsl</em> utility set up, let&#8217;s adjust our home page template to use it. Go to Blueprints > Pages and click on the home.xsl link.</p>
<p>We need to do two things: import <em>get-tweets.xsl</em>, and apply the tweets template to the content for this page. The complete home.xsl is below.</p>
<p><pre><code>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;

&lt;xsl:import href=&quot;../utilities/html5.xsl&quot;/&gt;
&lt;xsl:import href=&quot;../utilities/get-article.xsl&quot;/&gt;
&lt;xsl:import href=&quot;../utilities/get-tweets.xsl&quot;/&gt;

&lt;xsl:template match=&quot;data&quot;&gt;
&nbsp;&nbsp;&lt;xsl:apply-templates select=&quot;homepage-articles/entry&quot;/&gt;
&nbsp;&nbsp;&lt;xsl:apply-templates select=&quot;tweets&quot;/&gt;
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
</code></pre></p>
<p>Woo, now let&#8217;s check the page one more time.<br />
<div id="attachment_589" class="wp-caption alignnone" style="width: 610px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/09/Screen-shot-2010-09-10-at-10.00.57-PM-600x581.png" alt="" title="Tweets are go" width="600" height="581" class="size-medium wp-image-589" /><p class="wp-caption-text">Tweets are go</p></div></p>
<p>For our last content trick, we need to display some thumbnail images for each project. Before we do that, let&#8217;s clean up and tweak our setup a bit.</p>
<p>First, go to the Articles page and rename it <em>Projects.</em> We want this page to be available to the navigation, so remove the <em>hidden</em> page type.</p>
<div id="attachment_632" class="wp-caption alignnone" style="width: 610px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/09/Screen-shot-2010-09-19-at-2.27.26-PM-600x395.png" alt="" title="Projectifying" width="600" height="395" class="size-medium wp-image-632" /><p class="wp-caption-text">Projectifying</p></div>
<p>Next, delete Comments, Notes, and Drafts stuff from the Blueprints > Components and Blueprints > Sections areas.</p>
<div id="attachment_623" class="wp-caption alignnone" style="width: 567px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/09/Screen-shot-2010-09-19-at-2.40.13-PM.png" alt="" title="Clean as a whistle" width="557" height="352" class="size-full wp-image-623" /><p class="wp-caption-text">Clean as a whistle</p></div>
<p>For my last bit of cleanup, I&#8217;m going to replace all instances of the word &#8216;article&#8217; with the word &#8216;project&#8217; in the remaining XSLT page templates, utilities, and data sources. This is mostly for looks, you could skip this. Note that there are several ways to go about this sort of thing, you can either edit the files via the Symphony interface (slower) or operate on them as files in <code>$site-root/workspace</code> (faster).</p>
<h2>Dealing with Images</h2>
<p>Now that things are tidy, let&#8217;s work on getting images on the home page. There are three items that need to be tweaked: the Project Images data source, and some XSLT utilities.</p>
<p>We only want to display thumbnails on the home page and projects page, so in the Project Images data source, add a <strong>Filter</strong> based on the Image Type, and set it to <em>Thumbnail</em>.</p>
<div id="attachment_633" class="wp-caption alignnone" style="width: 610px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/09/Screen-shot-2010-09-19-at-10.21.41-PM-600x326.png" alt="" title="Bring out your thumbnails" width="600" height="326" class="size-medium wp-image-633" /><p class="wp-caption-text">Bring out your thumbnails</p></div>
<p>Next, we&#8217;ll make some minor changes to the <em>get-images.xsl</em> template. We&#8217;re mainly removing the default JIT resizing code, because our thumbnails are already the size we want. Full template code here:</p>
<p><pre><code>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;

&lt;xsl:template name=&quot;get-images&quot;&gt;
&nbsp;&nbsp;&lt;xsl:param name=&quot;entry-id&quot;/&gt;
&nbsp;&nbsp;&lt;xsl:if test=&quot;/data/project-images/entry[project/item/@id = $entry-id]&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:apply-templates select=&quot;/data/project-images/entry[project/item/@id = $entry-id]&quot;/&gt;
&nbsp;&nbsp;&lt;/xsl:if&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match=&quot;project-images/entry&quot;&gt;
&nbsp;&nbsp;&lt;a href=&quot;{$workspace}/uploads/{image/filename}&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:if test=&quot;position() mod 3 = 0&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name=&quot;class&quot;&gt;last-column&lt;/xsl:attribute&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:if&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;img title=&quot;{description}&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:attribute name=&quot;src&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:value-of select=&quot;$root&quot;/&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:text&gt;/workspace/uploads/&lt;/xsl:text&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:value-of select=&quot;image/filename&quot;/&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:attribute&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/img&gt;
&nbsp;&nbsp;&lt;/a&gt;
&lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;
</code></pre></p>
<p>Finally, we&#8217;ll update the <code>homepage-projects/entry</code> portion of the <em>get-project.xsl</em> template. This is just a matter of simplifying what came with the default workspace.</p>
<p><pre><code>
&lt;xsl:template match=&quot;homepage-projects/entry&quot;&gt;
&nbsp;&nbsp;&lt;div class=&quot;entry&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:call-template name=&quot;get-images&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:with-param name=&quot;entry-id&quot; select=&quot;@id&quot;/&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:call-template&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;p class=&quot;imgcaption&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a href=&quot;{$root}/projects/{title/@handle}/&quot;&gt;&lt;xsl:value-of select=&quot;title&quot;/&gt;&lt;/a&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:if test=&quot;$is-logged-in = &#039;true&#039;&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:text&gt; &amp;#8212; &lt;/xsl:text&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a class=&quot;edit&quot; href=&quot;{$root}/symphony/publish/{../section/@handle}/edit/{@id}/&quot;&gt;Edit&lt;/a&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:if&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/p&gt;
&nbsp;&nbsp;&lt;/div&gt;
&lt;/xsl:template&gt;
</code></pre></p>
<p>this code simply wraps each thumbnail in a <code>&lt;div&gt;</code>, with its title displayed as a caption below in a <code>&lt;p&gt;</code> and a handy <em>Edit</em> link if you&#8217;re logged into Symphony as an editor.</p>
<p>Phew, that was a lot of work, but our home page is finally where we want it:</p>
<div id="attachment_644" class="wp-caption alignnone" style="width: 617px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/09/portfolio-homepage-blank-607x1024.png" alt="" title="Portfolio home page in the raw" width="607" height="1024" class="size-large wp-image-644" /><p class="wp-caption-text">Portfolio home page in the raw</p></div>
<p>We&#8217;re close to the finish line now! I&#8217;m going to end this series with a short Part 4, in which I&#8217;ll add the About and Projects pages, and some styles to pretty everything up. You will also be able to download the sample site as an ensemble. </p>
<p>P.S. I won&#8217;t take so long for the Part 4, I promise <img src='http://www.rocketfoo.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rocketfoo.com/2011/04/06/building-a-site-with-symphony-cms-part-3/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>This Ephemeral Year</title>
		<link>http://www.rocketfoo.com/2011/02/07/this-ephemeral-year/</link>
		<comments>http://www.rocketfoo.com/2011/02/07/this-ephemeral-year/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 14:50:07 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Charts]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rocketfoo.com/?p=697</guid>
		<description><![CDATA[The Project See it live. And don&#8217;t use IE. I haven&#8217;t tested it and I&#8217;m not going to! The Story In 2010, I rebuilt my website. As usual, I overloaded this project with far too many technology changes, forcing me to learn tons of new stuff before I could do any real work. I also [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rocketfoo.com/wp-content/uploads/2011/02/Screen-shot-2011-02-06-at-11.35.57-PM-600x338.png" alt="" title="this ephemeral year - snapshot" width="600" height="338" class="aligncenter size-medium wp-image-739" /></p>
<h2>The Project</h2>
<p><a href="http://jonasdowney.com/ephemera/2010">See it live.</a> And don&#8217;t use IE. I haven&#8217;t tested it and I&#8217;m not going to!</p>
<h2>The Story</h2>
<p>In 2010, I rebuilt my website. As usual, I overloaded this project with far too many technology changes, forcing me to learn tons of new stuff before I could do any real work. I also fell into the <a href="http://sixrevisions.com/web_design/how-to-design-for-your-worst-client-you/">worst client</a> trap of being perpetually unsatisfied with any design I produced. Nevertheless, I trudged on, and finally decided it was decent enough to launch in March.</p>
<p>One of the new features was the <a href="http://jonasdowney.com/ephemera/">Ephemera</a> section, which was rushed out the door at the last minute, but turned out to be the best addition to the site. The idea was to start tracking little memorable bits of my life — items that would otherwise be lost in time. I have a terrible memory, and I&#8217;m finding that my once-reliable Internet footprints are getting more and more fragmented across many different services. Back in the good old days (i.e. 2 years ago), you could just read your email archives and remember everything that happened.</p>
<p>The Ephemera page does two things. First, it provides simple statistics about my various web activities. Second, it displays a record of my actual, physical life, which means that I&#8217;m required keep a fairly minimal daily log of what happens. I had zero confidence that I could maintain even the most rudimentary task on a daily basis, so I kept it dead simple: a one-line text annotation, and a quantitative (0-10) ranking of the day in four categories: Mood, Workload, Sunlight, and Sleep.</p>
<p>So, what did I learn?</p>
<ol>
<li>Merely logging into a website, choosing four numbers, and writing a one-line sentence <em>every day</em> is incredibly hard to keep up. <a href="http://feltron.com/">Feltron</a> has the right idea by &#8220;outsourcing&#8221; the data collection.</li>
<li>If you miss a day, or a week, you won&#8217;t remember what the hell happened yesterday — let alone last Tuesday.</li>
<li>Life is filled with countless meaningless interactions and uninteresting chores. Some days memorable things happen, and other days you eat pancakes and clean up cat barf.</li>
<li>It&#8217;s hard to be quantitative about your life. As an example, should my daily <em>Sleep</em> entry be an exact representation of the number of hours I slept, or should it be qualitative relative to how tired I really feel? It&#8217;s a judgment call.</li>
<li><a href="http://jonasdowney.com/ephemera/2010#trends">Trends</a> confirm that moderation is good. Big surprise, mood plummets as workload nears maximum!</li>
</ol>
<h2>How it works</h2>
<p>I&#8217;ve been dreaming about doing native/live data visualization on the web for years. The technology is finally coming around; there are <a href="http://vis.stanford.edu/protovis/docs/">numerous</a> <a href="http://processingjs.org/">libraries</a> and <a href="http://code.google.com/apis/chart/">tools</a> <a href="http://g.raphaeljs.com/">available</a> that do in-browser charting, using either SVG or the <code>&lt;canvas&gt;</code> element to render the charts. I tried almost all of these and settled on <a href="http://www.highcharts.com/">Highcharts</a> for this project, as it was the fastest way to get some decent output.</p>
<p>The data is stored in <a href="http://symphony-cms.com/">Symphony</a> and is sent either directly to the browser and rendered by a Highcharts script, or it&#8217;s output as JSON and then retrieved via a jQuery AJAX call, which is then passed to Highcharts. The <em>Frequently Noted</em> chart is custom designed using <code>&lt;div&gt;</code> elements with large CSS3 border-radius values. I do quite a bit of tinkering with the data and almost all of this happens in Symphony&#8217;s XSLT layer, and I used several <a href="http://www.exslt.org/">EXSLT</a> functions to do string tokenization, math, and other mundane stuff.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rocketfoo.com/2011/02/07/this-ephemeral-year/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Boxee Box first impressions</title>
		<link>http://www.rocketfoo.com/2010/11/13/boxee-box-first-impressions/</link>
		<comments>http://www.rocketfoo.com/2010/11/13/boxee-box-first-impressions/#comments</comments>
		<pubDate>Sat, 13 Nov 2010 20:42:09 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rocketfoo.com/?p=679</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rocketfoo.com/wp-content/uploads/2010/11/boxee_logo.png" alt="" title="boxee_logo" width="89" height="79" size-full wp-image-680" /><br />
I&#8217;ve been looking forward to the Boxee Box for quite a while, for three reasons:</p>
<ol>
<li>The <a href="http://www.boxee.tv/buy">hardware</a></li>
<li>The <a href="http://blog.boxee.tv/2010/01/05/by-the-pricking-of-my-thumbs-something-awesome-this-way-comes/">remote</a></li>
<li>Trying to get rid of cable</li>
</ol>
<p>Having tried <a href="http://www.mythtv.org/">numerous</a> Internet/TV <a href="http://www.plexapp.com/">solutions</a> <a href="http://xbmc.org/theuni/2010/05/27/farewell-xbox/">already</a>, I have tempered expectations for this thing. Mainly, I want something little and quiet, with a decent interface that my wife can use, and which will stream photos and music. I have a TON of music, but very few movies on my local network, so the music piece is a big deal for me. I also occasionally want to watch videos from the web. I don&#8217;t realistically expect to replace cable at this point, but I&#8217;d like to be surprised. </p>
<h2>Hardware</h2>
<p>The packaging was impressive, not unlike an Apple unboxing experience. The Boxee Box itself is decent quality, mostly what you&#8217;d expect if you&#8217;ve been following the press about this thing at all. It&#8217;s black plastic, with a glowing frog face on the front. (My daughter is rather bothered by the glowing frog.) It has numerous audio out options (HDMI, optical, and composite stereo) but for video out, HDMI is all you get. It supports WiFi and Ethernet — I hooked it up wired-style to my Gigabit ethernet in the house. There are also USB ports and an SD reader but I have no intention of using these.</p>
<p>The box is basically silent, which is great. All my previous web+TV devices have sounded like vacuums as soon as you turn on some HD video.</p>
<p>Performance is good, but not mind-blowing. Streaming is indeed beautiful — I&#8217;m streaming music and navigating libraries simultaneously without any problems. I was underwhelmed with video playback from NBC.com, but I haven&#8217;t tested this out too much yet.</p>
<h2>Initial Config</h2>
<p>After plugging it in, it immediately picked up my local network and performed an update, requiring a reboot. After that it was smooth sailing — it auto-detected all the Samba shares on my local network (I mainly use an Ubuntu server) and I could easily hook up my music and photos folders with barely any effort.</p>
<h2>Remote</h2>
<p>This was the biggest sell for me, the full-blown QWERTY keyboard remote with a sane interface on the other side. I do like it, but my main gripe is that the keyboard isn&#8217;t integrated as much as I&#8217;d like in the Boxee software. For example, when I&#8217;m browsing the hundreds of artists in my music library, I&#8217;d like to type &#8220;R&#8221; and jump to the artists that begin with &#8220;R.&#8221; No dice — typing just brings up the search box. And the search box doesn&#8217;t appear to search my local music and photo libraries, either, just video content. Boxee is clearly pushing the video aspect.</p>
<p>Otherwise the remote is a pleasant experience, it does what it should and works at distances without line of sight.</p>
<h2>Software</h2>
<p>I&#8217;ve already run Boxee on a Mac mini, so I knew what I was in for. Basically, you get Boxee. Try it out first if you&#8217;re interested in buying this. I have a laundry list of gripes with the software, but mainly I think it has a ton of currently unrealized potential.</p>
<p>Here&#8217;s my biggest problems right now:</p>
<ol>
<li>Missing apps: no Netflix or Hulu Plus, Vudu&#8217;s not working yet, and no Last.fm app. The former three are happening eventually; I&#8217;m paying the early adopter tax in this regard. The apps that are here (like Flickr) are OK but not likely to be used much.</li>
<li>Photos and Music were surreptitiously buried into the &#8220;Files&#8221; section in the <a href="http://blog.boxee.tv/2010/11/10/boxee-box-starts-shipping-new-boxee-version-netflix-and-hulu-plus-too/">new interface</a>. This blows.</li>
<li>As many have said, the new post-beta interface is a step backwards. Fonts are worse, the home screen is less useful, and the overall feel just isn&#8217;t as nice. It&#8217;s fine, but not what it looked like it was going to be.</li>
</ol>
<p>All that said, I see a ton of promise, and I think it&#8217;s going to be great in a couple of months after they get some apps and updates out the door. For now, it&#8217;s a somewhat pricey media streamer with a handful of options for Internet video.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rocketfoo.com/2010/11/13/boxee-box-first-impressions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why can’t I be honest with real people?</title>
		<link>http://www.rocketfoo.com/2010/11/10/why-can%e2%80%99t-i-be-honest-with-real-people/</link>
		<comments>http://www.rocketfoo.com/2010/11/10/why-can%e2%80%99t-i-be-honest-with-real-people/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 09:53:43 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rocketfoo.com/?p=659</guid>
		<description><![CDATA[Yesterday I wrote a tweet questioning why I feel free to express myself on Twitter in the digital company of a bunch of strangers, yet I feel comparatively guarded and closed off on Facebook, which connects me to the majority of the people I actually know in real life. I received some interesting responses, but [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I wrote a tweet questioning why I feel free to express myself on Twitter in the digital company of a bunch of strangers, yet I feel comparatively guarded and closed off on Facebook, which connects me to the majority of the people I actually know in real life.</p>
<p>I received some interesting responses, but <a href="http://twitter.com/kellycree">Kelly&#8217;s</a> hit me:<br />
<img src="http://www.rocketfoo.com/wp-content/uploads/2010/11/Screen-shot-2010-11-10-at-10.17.31-PM.png" alt="" title="Screen shot 2010-11-10 at 10.17.31 PM" width="613" height="274" class="alignnone size-full wp-image-669" /></p>
<p>Is this right? Am I afraid to be honest with my friends and family? Perhaps, but there is more to it.</p>
<p>Facebook is great at connecting you with people you meet. Maybe this isn&#8217;t true for everyone, but in my case my Facebook friends are predominantly based on geography and genetics &#8211; friends and family acquired during the regular course of living my life. They are almost all people I have met in person.</p>
<p>Twitter, on the other hand, is not particularly locative, and it&#8217;s self-curating. You can align yourself with like-minded people, and operate under the assumption that if others don&#8217;t like what you&#8217;re putting out there, they will simply unfollow. No hard feelings.</p>
<p>In this way, Twitter is all about producing and consuming good content; Facebook connects you with your real world, which consists of some good content, and some baggage.</p>
<p>That baggage is what destroys my ability to be honest. Do I want my Christian friends on Facebook, whose kids play with my kid, to see me talk about being an atheist? Should I profess my progressive agenda within cyber-earshot of a hypothetical conservative neighbor? Is that going to do any good to our relationships? It seems I&#8217;m not alone in being <a href="http://www.zephoria.org/thoughts/archives/2010/11/08/risk-reduction-strategies-on-facebook.html">paranoid about this sort of thing.</a></p>
<p>Maybe this does boil down to my fear of judgment and its consequences. And it&#8217;s entirely likely that I&#8217;m being dramatic and oversensitive. But at the end of the day, when my house is on fire, it&#8217;s not going to be a random Australian web designer who will help — it&#8217;s the neighbor. When this sort of reality is at stake, self-editing can be self-preservation.</p>
<p>So, when it comes to honesty and openness, apparently I either have to man up or shut up. Let&#8217;s hear your vote in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rocketfoo.com/2010/11/10/why-can%e2%80%99t-i-be-honest-with-real-people/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Building a site with Symphony CMS, Part 2</title>
		<link>http://www.rocketfoo.com/2010/07/31/building-a-site-with-symphony-cms-part-2/</link>
		<comments>http://www.rocketfoo.com/2010/07/31/building-a-site-with-symphony-cms-part-2/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 00:44:50 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Symphony CMS]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rocketfoo.com/?p=356</guid>
		<description><![CDATA[Greetings! In our last episode we completed a Symphony CMS installation and loaded some nice bits of additional functionality with Extensions and XSLT Utilities. Finally, it&#8217;s time to get our hands dirty and build something. The demo site I&#8217;m building will be visible at symdemo.rocketfoo.com. Before we begin, please note that since our last post, [...]]]></description>
			<content:encoded><![CDATA[<p>Greetings! In our <a href="http://www.rocketfoo.com/2010/07/10/building-a-site-with-symphony-cms-part1/">last episode</a> we completed a Symphony CMS installation and loaded some nice bits of additional functionality with Extensions and XSLT Utilities. Finally, it&#8217;s time to get our hands dirty and build something. The demo site I&#8217;m building will be visible at <a href="http://symdemo.rocketfoo.com/">symdemo.rocketfoo.com</a>.</p>
<p><em>Before we begin, please note that since our last post, Symphony has been updated to version 2.1.0. You may want to <a href="http://github.com/symphonycms/symphony-2">update your installation</a>.</em></p>
<p>As you&#8217;ll recall, we&#8217;re going to make a portfolio site that has:</p>
<ol>
<li>An overview page containing a thumbnail list of all projects organized by categories.</li>
<li>A project detail page with a big image, headline, and blurb about the project.</li>
<li>Support for storing any number of thumbnails and images per project. </li>
</ol>
<p>OK then, let&#8217;s get started. In the interest of being lazy, we&#8217;re going to reuse the structure of Symphony&#8217;s default workspace, which is set up as a blog, but works remarkably well for portfolio projects. </p>
<p>Symphony organizes content into <strong>Sections</strong>. You define the fields that make up a Section, using field types such as <em>Text Input</em>, <em>Date</em>, and <em>Checkbox</em>. You can also link fields to other Sections. It&#8217;s powerful and awesome. </p>
<p>Once you have a Section defined, you will create <strong>Entries</strong> (i.e., blog posts, portfolio projects, or any other repetitive content such as pictures of kitties.)</p>
<p>Let&#8217;s take a look at Sections by logging into the Symphony administration panel and selecting Blueprints > Sections.</p>
<div id="attachment_357" class="wp-caption alignnone" style="width: 708px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym_sections.png" alt="" title="sym_sections" width="698" height="394" class="size-full wp-image-357" /><p class="wp-caption-text">Symphony's Really Excellent Default Sections™</p></div>
<p>As you can see, there are several pre-made Sections here. The ones we care about are <em>Articles</em>, <em>Categories</em>, and <em>Images</em>. You can opt to use <em>Comments</em>, too, but I&#8217;m excluding that for now.</p>
<p>Click on the Articles link.</p>
<div id="attachment_363" class="wp-caption alignnone" style="width: 744px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-sections-articles.jpg" alt="" title="sym-sections-articles" width="734" height="1569" class="size-full wp-image-363" /><p class="wp-caption-text">Fields in the <del>Articles</del> Projects Section</p></div>
<p>There are five fields in the Articles section: <em>Title, Body, Date, Categories,</em> and <em>Publish</em>. Conveniently, these are the essentials for our portfolio (except for Images — more on that in a minute.)  </p>
<p>There are lots of options in the Section editor, but we can mostly ignore them at the moment — full details are in the Symphony <a href="http://symphony-cms.com/learn/concepts/view/sections/">Concepts Guide.</a> Note that you can drag and drop a field to reorder it, and you can add fields at the bottom of the page (click on the Text Input menu to see the field types, and <em>Add item</em> to add it.)</p>
<p>There is only one change we need to make in the Articles section: rename the whole section to <em>Projects</em>. Do this and Save.</p>
<p>Now go to Blueprints > Sections and select <em>Images</em>.</p>
<p><em>Images</em> is linked to <em>Projects</em> using a Select Box Link field. This allows us to upload as many images as we want and have them associated to a project in our portfolio. (Database geeks or people with lots of kids might call this a &#8220;one-to-many&#8221; relationship.) </p>
<p>This link field was originally named &#8220;Article&#8221; but we want to rename it &#8220;Project&#8221;:</p>
<div id="attachment_364" class="wp-caption alignnone" style="width: 329px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/Screen-shot-2010-07-19-at-10.19.46-PM.png" alt="" title="sym-images-link" width="319" height="246" class="size-full wp-image-364" /><p class="wp-caption-text">Renaming the Select Box Link field</p></div>
<p>With that done, let&#8217;s add one more field, called <em>Type</em>. This will be a Select Box field with two options, <em>Thumbnail</em> and <em>Primary</em>, allowing us to designate which images should be used for different purposes. </p>
<p><em>Note: Symphony has an extension called <a href="http://symphony-cms.com/learn/concepts/view/jit-image-manipulation/">Just In Time (JIT) Image Manipulation</a> which can transform (crop or resize) images on the fly; you may prefer this for your thumbnail purposes. Personally, I&#8217;m a control freak and enjoy doing my cropping and resizing offline.</em></p>
<p>To add the field, choose <em>Select Box</em> in the Field Type menu at the bottom of the page, and click Add Item. Enter <em>Type</em> in the Label field and put the two options in the Static Options box (separated with a comma.)</p>
<div id="attachment_443" class="wp-caption alignnone" style="width: 381px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-img-type.png" alt="" title="sym-img-type" width="371" height="258" class="size-full wp-image-443" /><p class="wp-caption-text">Typin' in Image Types</p></div>
<p>While we&#8217;re here, if you think you&#8217;ll be uploading a ton of images, you might want to &#8220;unhide&#8221; this section by unchecking this box at the top of the page:</p>
<div id="attachment_366" class="wp-caption alignnone" style="width: 268px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/Screen-shot-2010-07-19-at-10.26.06-PM.png" alt="" title="sym-hide-section" width="258" height="42" class="size-full wp-image-366" /><p class="wp-caption-text">Show yourself, Images!</p></div>
<p>now you will be able to directly select the Images section in the Content menu. Save your changes.</p>
<p>With the section setup done, let&#8217;s look at our actual content. First, let&#8217;s define some categories for our portfolio projects. Go to Content > Categories.</p>
<div id="attachment_384" class="wp-caption alignnone" style="width: 648px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-cats.png" alt="" title="sym-cats" width="638" height="196" class="size-full wp-image-384" /><p class="wp-caption-text">Removing the default Category entries</p></div>
<p>Hey, who put those generic Categories here? Oh right, the developers of this fine demo workspace. Despite their quality work, we don&#8217;t need the sample entries, so click on each one and choose With Selected > Delete. Apply the change.</p>
<p>Let&#8217;s make some actually useful categories. Using the <strong>Create New</strong> button, create categories called <em>Web</em>, <em>Print</em>, and <em>Miscellaneous</em>.</p>
<div id="attachment_385" class="wp-caption alignnone" style="width: 676px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-cats2.png" alt="" title="sym-cats2" width="666" height="207" class="size-full wp-image-385" /><p class="wp-caption-text">Categorically Accurate</p></div>
<p>Looking good! Time to create some projects. Go to Content > Projects, and once again delete the sample items in this section, then create some dummy projects (or if you have real ones, go for it.) Be sure to add at least one project in each category.</p>
<div id="attachment_398" class="wp-caption alignnone" style="width: 638px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-project.png" alt="" title="sym-project" width="628" height="494" class="size-full wp-image-398" /><p class="wp-caption-text">The Best Web Site Ever</p></div>
<p>When you&#8217;re done, go back to the main Projects view to take a look at your work.</p>
<div id="attachment_399" class="wp-caption alignnone" style="width: 622px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-projects-entries.png" alt="" title="sym-projects-entries" width="612" height="204" class="size-full wp-image-399" /><p class="wp-caption-text">Our sample portfolio. Don't expect any job offers yet.</p></div>
<p>Now we need to add some images to these projects. There are two ways to do this: either click on the &#8220;0 →&#8221; for a Project, or go to Content > Images.</p>
<div id="attachment_447" class="wp-caption alignnone" style="width: 612px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-img-create.png" alt="" title="sym-img-create" width="602" height="237" class="size-full wp-image-447" /><p class="wp-caption-text">Gone Image Uploadin'</p></div>
<p>Click <em>Create New</em> and fill out the fields appropriately, uploading two images (Primary and Thumbnail) for each project:</p>
<div id="attachment_448" class="wp-caption alignnone" style="width: 589px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-img-create2.png" alt="" title="sym-img-create2" width="579" height="369" class="size-full wp-image-448" /><p class="wp-caption-text">The Best Fantastic Head Ever</p></div>
<p>When you&#8217;re done, you can view all the Image entries.</p>
<div id="attachment_449" class="wp-caption alignnone" style="width: 592px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-img-entries.png" alt="" title="sym-img-entries" width="582" height="381" class="size-full wp-image-449" /><p class="wp-caption-text">A fleet of images</p></div>
<p>Woot. Now that we have some extremely high quality content loaded, it&#8217;s time to wreck this joint. For our last trick, we&#8217;re going to import some data from Twitter. Get ready, you&#8217;re going to have your first taste of <a href="http://en.wikipedia.org/wiki/XPath">XPath</a>!</p>
<p>First, we need to make a new section to hold our imported Tweets. I&#8217;m not going to run through this in detail, just make sure your new Tweets section matches the settings below. I like to put my imported stuff in its own Navigation Group, called &#8220;Data&#8221; &#8211; this adds a new dropdown menu in the admin interface.</p>
<div id="attachment_456" class="wp-caption alignnone" style="width: 743px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-tweets-section.png" alt="" title="sym-tweets-section" width="733" height="826" class="size-full wp-image-456" /><p class="wp-caption-text">Gotta Make The Tweets</p></div>
<p>Next, we&#8217;ll make an XML Importer. This does all the painful work of mapping XML from a Twitter feed to the fields in the Tweets section we just created. Once the two are hooked up, Symphony will grab Twitter&#8217;s XML and put its content into your section. Each tweet becomes an Entry in Symphony, just like our projects, categories, and images.</p>
<p>To add the importer, go to Blueprints > XML Importer.</p>
<div id="attachment_458" class="wp-caption alignnone" style="width: 507px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-xml-importers.png" alt="" title="sym-xml-importers" width="497" height="240" class="size-full wp-image-458" /><p class="wp-caption-text">Bask at Your Future of XML Wizardry</p></div>
<p>Click <em>Create New</em>. Start by naming this importer &#8220;Tweets.&#8221;</p>
<div id="attachment_462" class="wp-caption alignnone" style="width: 674px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-xml-importer-name.png" alt="" title="sym-xml-importer-name" width="664" height="79" class="size-full wp-image-462" /><p class="wp-caption-text">Naming the Importer</p></div>
<p>Twitter provides a bunch of different kinds of feeds via their <a href="http://dev.twitter.com/">API</a>. I&#8217;ve had good success using the XML output from a URL in this format:</p>
<p><a href="http://twitter.com/statuses/user_timeline.xml?user_id=16454301&#038;count=150">http://twitter.com/statuses/user_timeline.xml?user_id=16454301&#038;count=150</a></p>
<p>You will need to swap in your own Twitter <code>user_id</code> but otherwise you can just use this as-is. Paste this URL into the <strong>URL</strong> field. </p>
<div id="attachment_463" class="wp-caption alignnone" style="width: 672px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-xml-importer-source.png" alt="" title="sym-xml-importer-source" width="662" height="305" class="size-full wp-image-463" /><p class="wp-caption-text">The faucet from which your Tweets will flow</p></div>
<p>To finish this step, check &#8220;Automatically discover namespaces.&#8221; In the <em>Included Elements</em> field, enter <code>statuses/status</code>. This is a small XPath expression that selects only the <code>status</code> elements from the Twitter XML feed.</p>
<p>Last, we have to tell Symphony where each piece of data from a Tweet should go. In the <em>Destination</em> area, select <strong>Tweets</strong> from the Section field. Then add each of the three fields that make up a Tweet (<em>Permalink</em>, <em>Tweet</em>, and <em>Date</em>.) Make sure the settings match the screenshot below (don&#8217;t forget to set Permalink to &#8220;Is unique.&#8221;)</p>
<div id="attachment_472" class="wp-caption alignnone" style="width: 672px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-xml-importer-destination.png" alt="" title="sym-xml-importer-destination" width="662" height="676" class="size-full wp-image-472" /><p class="wp-caption-text">Tweet Fields</p></div>
<p>each XPath Expression selects a specific element from the Twitter XML feed and uses the <code>text()</code> function to obtain that element&#8217;s content.</p>
<p>OK, we&#8217;re done! Click <strong>Create XML Importer</strong>. Once it&#8217;s created, go back to Blueprints > XML Importers, and click on our new Importer.</p>
<div id="attachment_476" class="wp-caption alignnone" style="width: 868px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-xml-import1.png" alt="" title="sym-xml-import1" width="858" height="145" class="size-full wp-image-476" /><p class="wp-caption-text">Getting Ready for a Tweet Flood</p></div>
<p>Choose: With Selected > Run > Apply. You should see something like this:</p>
<div id="attachment_477" class="wp-caption alignnone" style="width: 510px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-tweets.png" alt="" title="sym-tweets" width="500" height="64" class="size-full wp-image-477" /><p class="wp-caption-text">Woo! It worked.</p></div>
<p>Now if you proceed to the Data > Tweets section, you will see a swath of Tweets.</p>
<div id="attachment_479" class="wp-caption alignnone" style="width: 863px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-tweets-2.png" alt="" title="sym-tweets-2" width="853" height="463" class="size-full wp-image-479" /><p class="wp-caption-text">Indeed, a swath.</p></div>
<p>Excellent! After all this work, we have content loaded in our custom sections, and some imported Tweets. Let&#8217;s take a look at the site now.</p>
<div id="attachment_487" class="wp-caption alignnone" style="width: 610px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/symdemo-frontend.png" alt="" title="symdemo-frontend" width="600" height="785" class="size-full wp-image-487" /><p class="wp-caption-text">Demo-tastic</p></div>
<p>Still looks like a blog. Don&#8217;t worry! In the next episode, we&#8217;ll configure an HTML template for the site and instruct Symphony to display our content exactly as we want, using <a href="http://symphony-cms.com/learn/concepts/view/data-sources/">Data Sources</a> and some XSLT mojo. We&#8217;ll also get our About page and contact form in order.</p>
<p>Anything else you&#8217;d like to see? Leave a comment and ye shall receive.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rocketfoo.com/2010/07/31/building-a-site-with-symphony-cms-part-2/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>In Defense of Crappy Tools</title>
		<link>http://www.rocketfoo.com/2010/07/26/in-defense-of-crappy-tools/</link>
		<comments>http://www.rocketfoo.com/2010/07/26/in-defense-of-crappy-tools/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 03:05:16 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rocketfoo.com/?p=416</guid>
		<description><![CDATA[Jason Santa Maria wrote a well-reasoned piece in which he laments the state of web design authoring tools. In a nut: current tools are inadequate, originally built for print design or outmoded metaphors, and each does only one or two things we really need. They are, essentially, obstacles that slow down our work and require [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/multiple-plough.jpg" alt="" title="multiple-plough" width="550" height="244" class="alignnone size-full wp-image-417" /></p>
<p>Jason Santa Maria wrote <a href="http://jasonsantamaria.com/articles/a-real-web-design-application/">a well-reasoned piece</a> in which he laments the state of web design authoring tools. In a nut: current tools are inadequate, originally built for print design or outmoded metaphors, and each does only one or two things we really need. They are, essentially, obstacles that slow down our work and require us to spend silly amounts of money on multiple apps that, even together, don&#8217;t meet our requirements.</p>
<p>He&#8217;s right, and you don&#8217;t have to talk to many web folk to find this out.</p>
<p>By contrast, developers have seen some improvements to parts of their workflow in recent years. <a href="http://panic.com/coda/">Coda</a>, <a href="http://macrabbit.com/espresso/">Espresso</a>, and <a href="http://www.aptana.com/">Aptana Studio</a> all solve problems elegantly. They take a decent stab at fixing the annoying things about programming for the web, and on the whole, they do OK.</p>
<p>So what&#8217;s the problem with building a design app for the web?</p>
<p>Plainly, it&#8217;s extremely difficult, and no company with decent resources has really tried to do it (yet). But I argue that more than that, the modern web is a true Frankenstein that outwits those who might attempt to create new design tools for it. Let&#8217;s be honest — the web itself is fundamentally crap. It&#8217;s a hacked together heap of mostly incompatible parts that miraculously work decently part of the time. No wonder we don&#8217;t have good tools to build it.</p>
<p>To be sure, things are converging. Browsers are more robust, capable, and compatible than ever. Standards are getting better. People are bullying Flash. If ever there was a time to build such a beast, it&#8217;s now.</p>
<p>Still, perhaps it&#8217;s my own personal masochism, but I actually <em>enjoy</em> using crappy tools to build the web. Doing so requires some ingenuity and awareness of different pieces of the puzzle; it adds to the challenge and toughens us up. Maybe this should be coined the <a href="http://www.pbs.org/woodwrightsshop/">Roy Underhill</a> principle.</p>
<p>If a new tool was released, I&#8217;d try it, and probably use it. But just as <a href="http://apple.com/ipad">people don&#8217;t build computers anymore</a>, such a tool will signal the very beginning of the time when people don&#8217;t really need to build the web anymore.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rocketfoo.com/2010/07/26/in-defense-of-crappy-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a site with Symphony CMS, Part 1</title>
		<link>http://www.rocketfoo.com/2010/07/10/building-a-site-with-symphony-cms-part1/</link>
		<comments>http://www.rocketfoo.com/2010/07/10/building-a-site-with-symphony-cms-part1/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 19:41:49 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Symphony CMS]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rocketfoo.com/?p=265</guid>
		<description><![CDATA[As promised, I&#8217;m going to take you on a walkthrough of building a new site with Symphony CMS. I&#8217;ll be referring to my new personal site to demonstrate some functional examples. If you&#8217;re not sure why you should use Symphony, have a look at my previous post and then check out the Symphony beginner&#8217;s guide. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rocketfoo.com/2010/05/23/you-should-use-symphony-cms-right-now/">As promised</a>, I&#8217;m going to take you on a walkthrough of building a new site with <a href="http://symphony-cms.com">Symphony CMS</a>. I&#8217;ll be referring to my <a href="http://jonasdowney.com">new personal site</a> to demonstrate some functional examples. If you&#8217;re not sure why you should use Symphony, <a href="http://www.rocketfoo.com/2010/05/23/you-should-use-symphony-cms-right-now/">have a look at my previous post</a> and then check out the <a href="http://symphony-cms.com/learn/">Symphony beginner&#8217;s guide</a>.</p>
<p><em>Disclaimer: anyone who makes websites can tell you that there are usually several ways to accomplish a task. More than likely, I have not done things the best way. Some of my motivation in posting this is to possibly get some corrections from <a href="http://twitter.com/czheng">people</a> <a href="http://nick-dunn.co.uk">smarter</a> <a href=http://chaoticpattern.com/">than</a> I.</em></p>
<p><strong>Step 1: Figure Out What You&#8217;re Building</strong><br />
Obvious, innit? Well, not really. It takes more than a little forethought to decide what your site is going to be, but I&#8217;m going to assume you&#8217;ve already worked some of this out. (Pro Tip: if your site is a hipster blog, just use <a href="http://tumblr.com">Tumblr</a>.)<br />
<div id="attachment_342" class="wp-caption alignnone" style="width: 471px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/buildings.jpg" alt="" title="buildings" width="461" height="499" class="size-full wp-image-342" /><p class="wp-caption-text">You can't build these things with Symphony. Sorry.</p></div></p>
<p>For the purposes of this post, let&#8217;s say you want to make a portfolio website that meets the following criteria:</p>
<ol>
<li>HTML5, because <a href="http://zeldman.com">Zeldman</a> told you to.</li>
<li>A basic &#8220;about me&#8221; page with some static content.</li>
<li>A simple contact form.</li>
<li>A portfolio overview page with categorization of projects, a detail view of each project, and support for one or more images and thumbnails associated with each project. You can see <a href="http://jonasdowney.com/projects">mine</a> for an example of how this might work.</a></li>
<li>Content imported from external sources (we&#8217;ll use Twitter and Flickr) and then displayed in some meaningful fashion.</li>
</ol>
<p><strong>Step 2: Figure Out Where to Build It</strong><br />
This is rather self-explanatory, but it bears repeating that you will need a web host (either locally or via an external provider) that supports Symphony&#8217;s server requirements, which are helpfully located in the footer of <a href="http://symphony-cms.com/#requirements">symphony-cms.com</a>. </p>
<div id="attachment_348" class="wp-caption alignnone" style="width: 471px"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/macse.jpg" alt="" title="macse" width="461" height="478" class="size-full wp-image-348" /><p class="wp-caption-text">Not the best choice for hosting Symphony, but it runs Mouse Stampede like a champ.</p></div>
<p>I will add that for the purposes of building a Symphony site, it&#8217;s invaluable to be able to perform occasional Unix-style command-line tasks (perhaps via SSH) and run <a href="http://git-scm.com/">Git</a>. For content importing, you also need to access <a href="http://en.wikipedia.org/wiki/Cron">cron</a> on the server. Personally, I use shared hosting at <a href="http://webfaction.com">Webfaction</a> and find it delightful for both development and production sites. </p>
<p><strong>Step 3: Install Symphony and <del datetime="2010-06-28T17:31:49+00:00">Get</del> Git Familiar</strong></strong><br />
The Symphony <a href="http://symphony-cms.com/learn/tutorials/view/install-symphony/">Installation Tutorial</a> has detailed instructions, but it&#8217;s better to use the <a href="http://symphony-cms.com/learn/tutorials/view/install-symphony/3/#pagehead">Git instructions at the bottom of the page</a> instead of the .zip package installation. Using Git greatly simplifies the process of upgrading extensions, which happens fairly often. </p>
<p>Since I&#8217;m a bleeding-edge kind of fella, I suggest switching to the latest development version, which is 2.0.8 RC3 as of this writing. To do so, clone the repository and then do:</p>
<p><code>git checkout 2.0.8RC3</code></p>
<p>Then go ahead and install the default workspace, as it provides some nice starter material that will save us some time.</p>
<p><code>git clone git://github.com/symphony/workspace.git</code></p>
<p>If you need any help with Git, <a href="http://symphony-cms.com/discuss/thread/42149/">this forum thread</a> is all you need to know.</p>
<p><strong>Step 4: Say Hello to Your Little Friend</strong><br />
With unpleasantries out of the way, let&#8217;s get going. I&#8217;m going to assume you&#8217;ve worked out Steps 2-3 and installed a core Symphony installation and the default workspace. You now have something that looks like this:</p>
<p><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/Screen-shot-2010-07-09-at-3.28.24-PM.jpg" alt="" title="Screen-shot-2010-07-09-at-3.28.24-PM" width="461" height="558" class="alignnone size-full wp-image-300" /></p>
<p>Good news! This default workspace already has an About page, which itself contains a working example of a contact form. </p>
<p><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-about.jpg" alt="" title="sym-about" width="461" height="554" class="alignnone size-full wp-image-305" /></p>
<p>It&#8217;s also set up as a standard blog, with entries, categories, and archives. We can easily repurpose and extend this structure for projects in our portfolio, instead of blog posts.</p>
<p>At this point, take a moment to familiarize yourself with Symphony&#8217;s administrative interface by visiting http://yoursite.com/symphony. By default, it looks like this:</p>
<p><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-backend.jpg" alt="" title="sym-backend" width="461" height="319" class="alignnone size-full wp-image-310" /></p>
<p>There are three main areas in the navigation. <em>Content</em> is where things like portfolio projects and blog entries will live. <em>Blueprints</em> is the gateway to the building blocks of your site — Pages, Components, and Sections (more on this later.) <em>System</em> allows you to configure various parts of your installation. I&#8217;m not going to rewrite the book on this stuff, so be sure to review the <a href="http://symphony-cms.com/learn/concepts/">Concepts Guide</a>.</p>
<p><strong>Step 5: Pimp Your Symp</strong></p>
<p>The default installation is all well and good, but it&#8217;s rather sparse. Let&#8217;s grab some extensions and utilities that will make things a little nicer for us going forward.</p>
<p>First, extensions. To make them easier to keep up to date, we&#8217;ll do this Git-style using the <code>git submodule add</code> command. Here&#8217;s a short list to get us started, but there are <a href="http://symphony-cms.com/download/extensions/">182 of them</a>, so use what you need! <em>Note: as always, run these Git commands in your site&#8217;s root folder.</em></p>
<p><strong>XML Importer</strong> (grab external data)<br />
<code>git submodule add git://github.com/rowan-lewis/xmlimporter.git extensions/xmlimporter</code></p>
<p><strong>Codemirror</strong> (XSL syntax highlighting)<br />
<code>git submodule add git://github.com/oleae/codemirror extensions/codemirror.git </code></p>
<p><strong>CacheLite</strong> (frontend caching)<br />
<code>git submodule add git://github.com/makenosound/cachelite.git extensions/cachelite</code></p>
<p><strong>Configuration Settings</strong> (edit Symphony config from the web)<br />
<code>git submodule add git://github.com/bauhouse/configuration.git extensions/configuration</code></p>
<p><strong>Order Entries</strong> (drag and drop content ordering)<br />
<code>git submodule add git://github.com/nickdunn/order_entries.git extensions/order_entries</code></p>
<p><strong>Date and Time</strong> (custom field)<br />
<code>git submodule add git://github.com/nilshoerrmann/datetime.git extensions/datetime</code></p>
<p>Now let&#8217;s enable them by going to System > Extensions. Click on the new ones and choose (With Selected) > Enable > Apply.</p>
<p><img src="http://www.rocketfoo.com/wp-content/uploads/2010/07/sym-ext.jpg" alt="" title="sym-ext" width="461" height="455" class="alignnone size-full wp-image-331" /></p>
<p>If you need to update extensions in the future, you can just run <code>git submodule update</code> on the Symphony root folder, and you&#8217;re done. Woot!</p>
<p>Now, on to Utilities. These are little (or big) snippets of XSLT that will help us accomplish some tasks. You can add these to Symphony by copying the source code, then visiting Blueprints > Utilities > Create New. You can name each utility whatever you want, but for this tutorial, I&#8217;ll be using the names in italics.</p>
<p><a href="http://symphony-cms.com/download/xslt-utilities/view/46256/"><strong>HTML5 Outpu</strong>t</a><br />
<em>html5.xsl</em></p>
<p><a href="http://symphony-cms.com/download/xslt-utilities/view/35067/"><strong>Multilevel Navigation</strong></a> (handle sub-pages in a nav bar)<br />
<em>multilevel-navigation.xsl</em></p>
<p><a href="http://symphony-cms.com/download/xslt-utilities/view/22122/<br />
"><strong>Twita@talinkahashifyer</strong></a> (linkify Twitter content)<br />
<em>talinkahashifyer.xsl</em></p>
<p>OK, that will do for now! At this point, we&#8217;ve added a bit of spice to our installation and we now have the bits in place to actually get to work.</p>
<p>That means it&#8217;s surely time to have some coffee and goof off for a while.</p>
<p>In part 2 of this series, I&#8217;ll explain how data works in Symphony, and we&#8217;ll get our content structure in place. We&#8217;ll also import some stuff from Twitter. In part 3, we&#8217;ll take a simple site design and convert it into Symphony pages. Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rocketfoo.com/2010/07/10/building-a-site-with-symphony-cms-part1/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>21st Century Inspiration</title>
		<link>http://www.rocketfoo.com/2010/06/27/21st-century-inspiration/</link>
		<comments>http://www.rocketfoo.com/2010/06/27/21st-century-inspiration/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 03:29:20 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rocketfoo.com/?p=221</guid>
		<description><![CDATA[I&#8217;ve been thinking about creative method and inspiration recently, mainly because I&#8217;m finally tackling a big project, but also due to my recent induction into Dribbble. To be clear, I think Dribbble is wonderful, for many of the same reasons Twitter is wonderful; it provides a wee goon such as myself an opportunity to share [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rocketfoo.com/2010/06/27/21st-century-inspiration/21st_c-insp/" rel="attachment wp-att-226"><img src="http://www.rocketfoo.com/wp-content/uploads/2010/06/21st_c-insp.jpg" alt="" title="21st_c-insp" width="400" height="300" class="aligncenter size-full wp-image-226" /></a></p>
<p>I&#8217;ve been thinking about creative method and inspiration recently, mainly because I&#8217;m finally tackling a <a href="http://reinform.us">big project</a>, but also due to my recent induction into <a href="http://dribbble.com/players/jonas">Dribbble</a>.</p>
<p>To be clear, I think Dribbble is wonderful, for many of the same reasons Twitter is wonderful; it provides a wee goon such as myself an opportunity to share ideas and interact with people I would never have met, or heard of, for that matter.</p>
<p>My problem, in short, is that the Internet is completely overloaded with inspiration, between social networking, Zootool, Flickr sets, the Top 500 Lists of Top 500 Design Awesomes, countless CSS galleries, etc.  Mindy Wagner explains this well in an <a href="http://www.viget.com/inspire/overcoming-inspiration-overload/">inspiration overload lament</a>.</p>
<p>Not only is it impossible to keep up, but these sites tend to emphasize glitz and trends over substance (with some exceptions.) For example, my site was featured on some CSS galleries, then its menu was hacked apart for another gallery as a navigation example. &#8220;Hey, that button is a circle! Please RT!&#8221;</p>
<p>Compounding this, looking at pretty designs and then fiddling with Photoshop or Firebug is fun. Creating and loading content? Building a theme? Debugging IE?  No way, let&#8217;s goof around with drop shadows and the Add Noise filter. On the downside, this fiddling goes on for about 3 years until one discovers an untapped mine of self-discipline.</p>
<p>So what&#8217;s a goon to do? Ignoring the New Awesomeness can be dangerous, in the same way pigeonholing your technical skills can reduce your marketability. Nevertheless, I&#8217;m going to try what The Denver Egotist <a href="http://www.thedenveregotist.com/editorial/2010/june/22/stop-thinking-your-mac">suggests</a> and <em>turn off the Mac,</em> drafting everything out in advance on paper. Though, having already replaced all paper with trackpads and iPhones, I&#8217;ll have to make a run to an office supply store.</p>
<p>Worst of all? True inspiration comes from your life, not a screen — but it&#8217;s pretty hard to get away from screens. I used to believe <a href="http://jonasdowney.com/workspace/uploads/new_understanding_jd.pdf">computers were the answer, not the problem.</a> Now I&#8217;m not so sure.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rocketfoo.com/2010/06/27/21st-century-inspiration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You should use Symphony CMS, right now.</title>
		<link>http://www.rocketfoo.com/2010/05/23/you-should-use-symphony-cms-right-now/</link>
		<comments>http://www.rocketfoo.com/2010/05/23/you-should-use-symphony-cms-right-now/#comments</comments>
		<pubDate>Sun, 23 May 2010 20:34:56 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Data]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rocketfoo.com/?p=192</guid>
		<description><![CDATA[I&#8217;m a web content management junkie. Over the years I&#8217;ve used Textpattern, ExpressionEngine, Drupal, and WordPress, but none have fit my fancy as much as my recent love, Symphony. Symphony is a beautifully minimal PHP+MySQL-based CMS that uses XML as its backbone. More on that in a minute. More than any of the other systems [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.rocketfoo.com/wp-content/uploads/2010/04/Picture-1.png" alt="" title="Picture 1" width="250" height="78" class="aligncenter size-full wp-image-193" /></p>
<p>I&#8217;m a web content management junkie. Over the years I&#8217;ve used Textpattern, ExpressionEngine, Drupal, and WordPress, but none have fit my fancy as much as my recent love, <a href="http://symphony-cms.com">Symphony</a>.</p>
<p>Symphony is a beautifully minimal PHP+MySQL-based CMS that uses XML as its backbone. More on that in a minute.</p>
<p>More than any of the other systems I mentioned, possibly excepting Drupal, Symphony&#8217;s learning curve is rather steep. For starters, Symphony&#8217;s developers treat the system like a blank notebook — after installation, almost nothing is preconfigured at all. (They offer bespoke &#8220;Ensembles,&#8221; which are basically sample sites you can install as a starting point.) You can build a WordPress blog in roughly 12 seconds, but making a Symphony site takes a substantial amount of forethought. </p>
<p>Compounding the problem is that the administrative nomenclature is somewhat obscure — what&#8217;s a Data Source? An Event? A Utility? How do these relate to Pages and Sections? Fortunately, the documentation is improving, and the developers are set to make some valuable interface/conceptual improvements in the upcoming version 2.1.</p>
<p>Furthermore, there&#8217;s that whole templating/theming issue. Symphony uses XSLT to transform its self-generated XML into standard HTML that gets displayed by the browser. This is a significant difference from the template tags approach (ExpressionEngine, Textpattern) or the direct-PHP hooks approach (Drupal, WordPress) that you might be used to. XSLT is highly powerful but it&#8217;s not particularly commonplace. The XSLT requirement may continue to relegate Symphony to niche status since people may be averse to learning it, but this is a bummer, because it&#8217;s more standardized (it&#8217;s a W3C spec) than any of the other system-specific approaches, and it&#8217;s great once you learn it.</p>
<p>You might be thinking, OK, this sounds hard, why would I use Symphony? The answer is that, unlike any other CMS I have tried, it lives and breathes the native tongue of the semantic web: XML. Increasingly, my online life is divided into many buckets: Twitter, Flickr, Delicious, and so on. I don&#8217;t own my content anymore. </p>
<p>Symphony takes any XML feed you&#8217;ve got: RSS, Atom, SOAP, custom API output, whatever — and treats it like a first class citizen. Need to grab your most recent tweets? An RSS feed from your blog? You can do it almost instantaneously using a Dynamic XML data source. The functionality is built right in. This data gets munged together with your site&#8217;s standard content into one glorious stream of XML, ready to be transformed into a new-fangled website the kids are talking about.</p>
<p>If that&#8217;s not enough, you can use the new XML Importer extension and a simple cron job to import your XML feeds as permanent, native Symphony content. This allows you to archive and store your content — such as all of your tweets — and <em>regain control of your stuff.</em> This functionality is pure gold for Lifestreamers, who would be remiss to overlook Symphony as an option to drive their sites.</p>
<p>To be sure, it&#8217;s not all a walk in the park. An initial site setup will take you a while. You might have to download stuff from Github. You have to learn XSLT. You will need to try some bleeding-edge software. And yes, there are ways to accomplish these tasks in other systems. But none is as conceptually elegant as Symphony. (For example, importing generic XML feeds from different sources in WordPress is still remarkably ugly, requiring several plugins and some custom code.)</p>
<p>Symphony&#8217;s community is small and extraordinarily helpful, so you will get help when you need it. <strong>If you have a lot of data and you want it back, give Symphony a try.</strong></p>
<p>I&#8217;m planning to follow this post with an overview of how I built <a href="http://jonasdowney.com">my new site</a> with Symphony. Stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rocketfoo.com/2010/05/23/you-should-use-symphony-cms-right-now/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
