<?xml version="1.0" encoding="UTF-8"?>
<?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: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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Blog: Raised Eyebrow Web Studio, Inc.</title>
	
	<link>http://blog.raisedeyebrow.com</link>
	<description>What's turning heads at Raised Eyebrow</description>
	<lastBuildDate>Thu, 26 Aug 2010 17:30:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/raisedeyebrow" /><feedburner:info uri="raisedeyebrow" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Someone stole our Twitter name!</title>
		<link>http://feedproxy.google.com/~r/raisedeyebrow/~3/mGSaAS-LCfA/</link>
		<comments>http://blog.raisedeyebrow.com/2010/08/someone-stole-our-twitter-name/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 16:19:46 +0000</pubDate>
		<dc:creator>Emira Mears</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.raisedeyebrow.com/?p=1012</guid>
		<description><![CDATA[One of our newer clients recently had the misfortune of discovering that their Twitter name was not available. The ideal short name for this non-profit seems to belong to someone in Somalia who posted two posts back in April of 2007 and otherwise lays dormant. A frustrating state of affairs akin to finding that your [...]]]></description>
			<content:encoded><![CDATA[<p>One of our newer clients recently had the misfortune of discovering that their Twitter name was not available. The ideal short name for this non-profit seems to belong to someone in Somalia who posted two posts back in April of 2007 and otherwise lays dormant. A frustrating state of affairs akin to finding that your preferred website domain name is already occupied.</p>
<p>When it comes to Twitter names, you can of course use variants of your organization&#8217;s name, taking on a &#8220;Canada&#8221; or simply a &#8220;CA&#8221; to the end of your Twitter handle or using some other variant of your name. The thing to be aware of there however, is that when limited to posting 140 characters a too long Twitter handle can actually get in the way, particularly when others want to retweet your post and therefore include your @TwitterName in their post. (Also note that Twitter currently restricts names to 15 characters).</p>
<p>If your organization is not yet convinced about using Twitter, you may want to make a case for grabbing your name (or a reasonable variant of it), if it&#8217;s still available. Even if you don&#8217;t get to using it for a few months, you&#8217;ll want to secure it.</p>
<h3>So what can you do?</h3>
<p>Currently Twitter&#8217;s policy is to only release names that are registered by someone else if it is a trademark violation (<a href="http://support.twitter.com/forums/26257/entries/18367" target="_blank">see here for their word on this</a>). They are talking about releasing accounts that have been inactive for at least 18 months at some point, but do not currently have a time frame in place for when they will do this. They, sadly, will not do it on an individual request basis either. (The official <a href="http://support.twitter.com/forums/26257/entries/15362" target="_blank">inactive user names policy can be found here</a>).</p>
<p><a href="http://tweetclaims.com/" target="_blank">TweetClaims</a> offers a free service that will notify you when your name of choice becomes available (or a pro service for $20/year which will actually text message you as soon as your name becomes available).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raisedeyebrow.com/2010/08/someone-stole-our-twitter-name/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.raisedeyebrow.com/2010/08/someone-stole-our-twitter-name/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=someone-stole-our-twitter-name</feedburner:origLink></item>
		<item>
		<title>How the Social Web Can Land You $100,000</title>
		<link>http://feedproxy.google.com/~r/raisedeyebrow/~3/3I6ovCL38b8/</link>
		<comments>http://blog.raisedeyebrow.com/2010/08/how-the-social-web-can-land-you-100000/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 04:08:43 +0000</pubDate>
		<dc:creator>Emira Mears</dc:creator>
				<category><![CDATA[Online Fundraising]]></category>
		<category><![CDATA[Online Strategy]]></category>
		<category><![CDATA[The Social Web]]></category>

		<guid isPermaLink="false">http://blog.raisedeyebrow.com/?p=1010</guid>
		<description><![CDATA[Ok, so that might be a bit of a misleading headline, but it&#8217;s not totally false. In fact, in about a week it just might be true. You see one of our retainer clients, Covenant House Vancouver, are making use of their award winning blog, their Facebook Page, Twitter account and their email newsletter system [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, so that might be a bit of a misleading headline, but it&#8217;s not totally false. In fact, in about a week it just might be true. You see one of our retainer clients, Covenant House Vancouver, are making use of their <a href="http://blog.raisedeyebrow.com/2010/06/what-your-nonprofit-can-learn-from-covenant-house-vancouvers-award-winning-blog/" target="_self">award winning blog</a>, their Facebook Page, Twitter account and their email newsletter system to reach out to their existing supports in a bid to win a content currently being run by Pepsi Canada to award a Canadian non-profit organization, business or idea $100,000. The prize will go to the group with the most votes, which is where Covenant House&#8217;s existing toolbox of supporter connections comes in. They&#8217;ve been, respectfully contacting their supporters through all the channels they have at their disposal to get folks to vote for them. Currently they&#8217;re in <a href="http://www.refresheverything.ca/Covenanthousevancouver" target="_blank">third place</a>. This is how the social web works.</p>
<p>Today week they produced the simple but to the point video below, that is making its rounds on the web through people&#8217;s Facebook and Twitter feeds as well, in support of the cause.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/ivEzdvTKfT8&amp;feature" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/ivEzdvTKfT8&amp;feature"></embed></object></p>
<p>Will all of this win them $100,000? Hard to say, but the great thing is they had the tools ready to go when an opportunity like this arose. Applying for this $100K was not in their communications or fundraising plan for 2010, but when the Pepsi program was launched they were well positioned to take advantage of it and activate their supporters to boost their chances.</p>
<p>So much of effective communications and capacity building work is about seizing moments that are often not of your organization&#8217;s making. Whether it&#8217;s an online contest that might boost your profile or land you some serious donation funds, a change in government policy you didn&#8217;t see coming, or any other unforeseen event that requires immediate mobilization of your supporter base. Yes, we can all be over saturated with social media and it can be hard to figure out how your organization can really make the best use of the various tools available on a day to day basis, but building up a group of meaningful supporters, and ensuring you have access to channels to communicate effectively with them, can allow an organization to really capitalize on an opportune moment when it comes knocking.</p>
<p>Will Covenant House win $100,000? We&#8217;ll find out next week, but if you want to help you can <a href="http://www.refresheverything.ca/Covenanthousevancouver" target="_blank">vote here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raisedeyebrow.com/2010/08/how-the-social-web-can-land-you-100000/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.raisedeyebrow.com/2010/08/how-the-social-web-can-land-you-100000/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-the-social-web-can-land-you-100000</feedburner:origLink></item>
		<item>
		<title>Redesigning eaves.ca: Online Branding Lessons for Solo Entrepreneurs</title>
		<link>http://feedproxy.google.com/~r/raisedeyebrow/~3/WuJ2FqLKnfk/</link>
		<comments>http://blog.raisedeyebrow.com/2010/08/redesigning-eaves-ca-online-branding-lessons-for-solo-entrepreneurs/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 15:37:05 +0000</pubDate>
		<dc:creator>Lauren Bacon</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Information Architecture]]></category>
		<category><![CDATA[Online Strategy]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.raisedeyebrow.com/?p=1005</guid>
		<description><![CDATA[I recently redesigned a website for a personal friend and although it wasn&#8217;t done under the official umbrella of Raised Eyebrow, I found that the project offered some interesting challenges I&#8217;d like to reflect upon briefly.
The friend in question is David Eaves, who has more trouble answering the question, &#8220;What do you do?&#8221; than just [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.raisedeyebrow.com/wp-content/uploads/2010/08/eaves.ca_.png"><img class="alignleft size-medium wp-image-1006" title="eaves.ca" src="http://blog.raisedeyebrow.com/wp-content/uploads/2010/08/eaves.ca_-e1281402042870-169x300.png" alt="" width="169" height="300" /></a>I recently redesigned a website for a personal friend and although it wasn&#8217;t done under the official umbrella of Raised Eyebrow, I found that the project offered some interesting challenges I&#8217;d like to reflect upon briefly.</p>
<p>The friend in question is <a href="http://eaves.ca/about/">David Eaves</a>, who has more trouble answering the question, &#8220;What do you do?&#8221; than just about anyone I know. He&#8217;s a prolific <a href="http://eaves.ca/publications/">writer</a>, <a href="http://eaves.ca/speeches/">public speaker</a> and consultant who works in three areas of interest: <a href="http://eaves.ca/tag/public-policy/">public policy</a>, <a href="http://eaves.ca/category/open-source/">open source</a>, and <a href="http://eaves.ca/category/negotiation/">negotiation</a>. I never imagined those three things could overlap in such interesting ways until I met David &amp; heard him wax poetic on subjects like <a href="http://eaves.ca/2008/09/26/wikipedia-community-management-as-its-core-competency/">open-source community management</a> (bringing negotiation skills to online communities) and <a href="http://eaves.ca/?s=government+2.0">Government 2.0</a>.</p>
<p>So there you go: You already know what David&#8217;s biggest communication challenge on his website is. It&#8217;s demonstrating what he does in a way that makes intuitive sense to people reading <a href="http://eaves.ca">his popular blog</a>. The previous iteration of his site was a pretty typical personal blog, with a long sidebar filled with links to this &amp; that, and hardly a self-promotional word to be seen. It was a great demonstration of his brilliant mind at work, but a poor sales tool. (It didn&#8217;t even have a Contact page. I&#8217;m serious.)</p>
<p>Now, David isn&#8217;t really a sales-y kind of guy (in case the lack of a Contact page wasn&#8217;t your first clue), and he didn&#8217;t want his blog to transform overnight into the website equivalent of a flashing &#8220;Buy! Buy! Buy!&#8221; sign. He simply wanted to pare down the visual clutter, and make it easier for people who might want to hire him to know how to do that.</p>
<p>I took a simple approach: I interviewed David about the kind of work he does &amp; organized it into three categories: public speaking, writing &amp; consulting. The first two merited their own pages, and the third got folded into the <a href="http://eaves.ca/about/">About</a> page (since his consulting services are a bit more amorphous &amp; his consulting clients generally come to him via word of mouth). And the rest of the menu bar was filled out with a page of <a href="http://eaves.ca/media/">media appearances</a> (since David appears frequently on television &amp; radio as a commentator on current events) and a &#8220;<a href="http://eaves.ca/what-im-reading/">What I&#8217;m Reading</a>&#8221; page that lists some of the writing that&#8217;s inspiring his free-flowing pen (or rather, keyboard). (We hooked up the latter with his <a href="http://www.librarything.com/">LibraryThing</a> and <a href="http://delicious.com/">Delicious</a> accounts so that they can be kept up to date automatically, saving him the hassle of updating the page by hand.)</p>
<p>The design process posed an interesting challenge: David really liked his old <a href="http://www.plaintxt.org/wp-content/uploads/blogtxt_01.png">minimalist, low-key blog design</a> and didn&#8217;t want too radical a change. He also didn&#8217;t want the site to look too &#8220;designed,&#8221; because he feels that part of his brand is a kind of approachable, do-it-yourself style that doesn&#8217;t jive with anything too flashy or trendy. So I had to really rein myself in and keep it quiet, monochromatic, and simple. (I love simple design, but I didn&#8217;t allow myself <em>any </em>indulgences on this one.)</p>
<p>The header is very similar to what he had before, but the menu bar was a new addition, making his &#8220;sales&#8221; pages more prominent. The sidebar got hugely simplified, to focus the visitor&#8217;s attention on what&#8217;s relevant &amp; important rather than cluttering up the space with superfluous content.</p>
<p>But where I pushed David to be bold was in two areas:</p>
<ol>
<li>The home page now features <em>a single, complete post. </em>This is rather unusual (though not unheard-of) for a blog, but it really allows the visitor to fully absorb one piece of content before moving on to the next. The previous post is highlighted in a box directly below the most recent post, to encourage further exploration of the site.</li>
<li>The pre-footer area is large &amp; prominent, and directs traffic to recent posts, popular posts, the &#8220;sales&#8221; pages and to David&#8217;s various social media accounts (Twitter, Facebook, etc. etc.).</li>
</ol>
<p>These two design decisions go hand in hand. If the home page housed five or ten posts, the pre-footer area would be virtually invisible, so it wouldn&#8217;t merit special attention. But in this case, once a reader has absorbed the content on the page they are reminded of the various options they have to read further. A lot of websites ignore the footer area, but when your site attracts voracious readers (as David&#8217;s does), it pays to reward them by allowing them to navigate the site from the bottom of the page as well as the top.</p>
<p>A lot of bloggers wear multiple hats and have little time to build stand-alone websites for each of their endeavours, and I think David&#8217;s site is a good example of a middle ground: he shares information about how to hire him without presuming that&#8217;s the goal (or desire) of every visitor, while maintaining a familiar blog interface to those who simply want to read his latest post. If a highly promotional website is outside your comfort zone, this site may hold some lessons for you. In particular, I think I managed to convince David to:</p>
<ul>
<li>Stop withholding information about your services from people who <em>want </em>to hire you.</li>
<li>Always, always, always have a <a href="http://eaves.ca/get-in-touch/">Contact</a> page.</li>
<li>Consider that bringing in a designer can be helpful even if you don&#8217;t want anything &#8220;designed.&#8221;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.raisedeyebrow.com/2010/08/redesigning-eaves-ca-online-branding-lessons-for-solo-entrepreneurs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.raisedeyebrow.com/2010/08/redesigning-eaves-ca-online-branding-lessons-for-solo-entrepreneurs/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=redesigning-eaves-ca-online-branding-lessons-for-solo-entrepreneurs</feedburner:origLink></item>
		<item>
		<title>Tackling the Drupal 7 issue queue</title>
		<link>http://feedproxy.google.com/~r/raisedeyebrow/~3/YHH8JYigBZY/</link>
		<comments>http://blog.raisedeyebrow.com/2010/08/tackling-the-drupal-7-issue-queue/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 16:01:28 +0000</pubDate>
		<dc:creator>Colin Calnan</dc:creator>
				<category><![CDATA[Code and Coding]]></category>
		<category><![CDATA[Content Management Systems]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Drupal 7]]></category>

		<guid isPermaLink="false">http://blog.raisedeyebrow.com/?p=990</guid>
		<description><![CDATA[I recently attended the Vancouver Drupal 7 Code Sprint/Workshop to try to help out with tackling some of the critical issues left on the Drupal 7 issue queue. The sprint was organized by Audrey Foo and Chris Ng and hosted by FCV at their offices in downtown Vancouver. There were of course two Drupal stars [...]]]></description>
			<content:encoded><![CDATA[<p>I recently attended the <a href="http://groups.drupal.org/node/79013">Vancouver Drupal 7 Code Sprint/Workshop</a> to try to help out with tackling <a href="http://drupal.org/project/issues/search/drupal?version[0]=156281&#038;status[0]=1&#038;status[1]=8&#038;status[2]=13&#038;status[3]=14&#038;priorities[0]=1&#038;categories[0]=bug&#038;categories[1]=task">some of the critical issues left on the Drupal 7 issue queue</a>. The sprint was organized by<a href="http://drupal.org/user/109516"> Audrey Foo</a> and <a href="http://groups.drupal.org/user/1306">Chris Ng</a> and hosted by <a href="http://www.fcv.ca">FCV</a> at their offices in downtown Vancouver. There were of course two Drupal stars in attendance, <a href="http://drupal.org/user/24967">Angie &#8216;webchick&#8217; Byron</a> and <a href="http://drupal.org/user/9446">Károly &#8216;chx&#8217; Négyesi</a>. Both of whom have probably more experience between them than all of the Drupal people I know combined.</p>
<p>The purpose of the sprint was to try to teach some folk, like me, how to create and review a patch on the issue queue, in an effort to move things along with the release of Drupal7. I helped out a little by putting together a quick Google Docs presentation on how to install <a href="http://www.drupal.org/project/drush">Drush</a>. Drush is a handy command line tool for working with Drupal. One of it&#8217;s most popular features is the ability to download and enable core and modules very quickly.</p>
<p><iframe src="https://docs.google.com/present/embed?id=d353v8w_5cdhsm3d8" frameborder="0" width="410" height="342"></iframe></p>
<p>Following that <a href="http://drupal.org/user/87442">Yi Yang</a> from FCV, with the help of Angie, walked us through the process of creating a patch and then reviewing a patch. I thought I&#8217;d post my notes from the session to help others out. I was totally confused about the process prior to Angie being a star and providing a simple list of steps to complete.</p>
<h3>CREATING A PATCH</h3>
<ol>
<li>Download most recent version of Drupal 7: <code>drush dl drupal-7.x --package-handler=cvs</code></li>
<li>hack core to fix the issue!</li>
<li>Go to your Drupal Root directory</li>
<li>Make the patch: <code>cvs diff -up modules /path/to/file (optional) > 12345.patch</code> (Compare my local version to CVS version)</li>
<li>Upload it to the <a href="http://drupal.org/project/issues/search/drupal?version[0]=156281&#038;status[0]=1&#038;status[1]=8&#038;status[2]=13&#038;status[3]=14&#038;priorities[0]=1&#038;categories[0]=bug&#038;categories[1]=task">issue queue</a></li>
<li>Reset your codebase: <code>cvs up -dPC</code></li>
<li>Goto 2</li>
</ol>
<h3>REVIEWING A PATCH</h3>
<ol>
<li>Download most recent version of Drupal 7: <code>drush dl drupal-7.x --package-handler=cvs</code></li>
<li>Optional: Download <a href="http://drupal.org/project/dreditor">dreditor greasemonkey script</a></li>
<li>Find a patch</li>
<li>Download patch to your Drupal root directory</li>
<li>Apply the patch: <code>patch -p0 < 12345.patch</code> ('offset" is ok. "fuzz" is ok. FAILED is bad)</code></li>
<li>Test, test, test!</li>
<li>Review the code!</li>
<li>Post a comment, change issue status accordingly</li>
<li>Reset your Drupal code: <code>cvs up -dPC</code></li>
<li>Goto 2</li>
</ol>
<p>Big thanks to Audrey, Chris for the space and food and to Angie and Károly for their brains :)</p>
<h3>Photos</h3>
<p><object width="400" height="300"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fteanitiki%2Fsets%2F72157624633642392%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fteanitiki%2Fsets%2F72157624633642392%2F&#038;set_id=72157624633642392&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fteanitiki%2Fsets%2F72157624633642392%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fteanitiki%2Fsets%2F72157624633642392%2F&#038;set_id=72157624633642392&#038;jump_to=" width="400" height="300"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raisedeyebrow.com/2010/08/tackling-the-drupal-7-issue-queue/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.raisedeyebrow.com/2010/08/tackling-the-drupal-7-issue-queue/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=tackling-the-drupal-7-issue-queue</feedburner:origLink></item>
		<item>
		<title>Calling all social change geeks: It’s NetSquared Camp Vancouver</title>
		<link>http://feedproxy.google.com/~r/raisedeyebrow/~3/O0E-2c93CHo/</link>
		<comments>http://blog.raisedeyebrow.com/2010/07/calling-all-social-change-geeks-its-netsquared-camp-vancouver/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 15:19:02 +0000</pubDate>
		<dc:creator>Lauren Bacon</dc:creator>
				<category><![CDATA[Nonprofit Tech]]></category>
		<category><![CDATA[Raised Eyebrow]]></category>
		<category><![CDATA[Workshops & Events]]></category>

		<guid isPermaLink="false">http://blog.raisedeyebrow.com/?p=984</guid>
		<description><![CDATA[A month from now, on Saturday, August 14, I&#8217;ll be attending Vancouver&#8217;s first NetSquared Camp, a day-long event for people who work at the intersection of social change and technology. The goal of the event is to build skills and capacity through peer learning, and invites the participation of &#8220;nonprofits, activists and social entrepreneurs [along] [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.raisedeyebrow.com/wp-content/uploads/2010/07/netsquaredcamp.gif"><img class="alignleft size-medium wp-image-987" title="NetSquared Camp logo" src="http://blog.raisedeyebrow.com/wp-content/uploads/2010/07/netsquaredcamp-300x79.gif" alt="" width="300" height="79" /></a>A month from now, on Saturday, August 14, I&#8217;ll be attending <a href="http://www.netsquared.org/blog/elijah/register-netsquared-camp-vancouver">Vancouver&#8217;s first NetSquared Camp</a>, a day-long event for people who work at the intersection of social change and technology. The goal of the event is to build skills and capacity through peer learning, and invites the participation of &#8220;nonprofits, activists and social entrepreneurs [along] with  their friends and allies in the world of technology and communications.&#8221;</p>
<p>NetSquared Camp is an <a href="http://en.wikipedia.org/wiki/Unconference">unconference</a>, and for those who aren&#8217;t familiar with that term, it&#8217;s an event where the agenda is entirely driven by the participants. So if you show up and speak up, there&#8217;s a very good chance that you&#8217;ll learn something that&#8217;s relevant to you. (You may also end up teaching others, since the participants also lead &amp; facilitate the sessions.)</p>
<p>The <a href="http://www.netsquared.org/blog/elijah/register-netsquared-camp-vancouver">list of suggested session topics</a> is both wide-ranging and highly practical, and the organizers have set up <a href="http://netsquaredcampvancouver.wikispaces.com/Session+proposals">a wiki where you can propose your own session ideas</a>.</p>
<p>Perhaps best of all, the ticket price is by donation, with the suggested donation a very affordable $20. By the look of <a href="http://netsquaredvancouver.eventbrite.com/">the RSVP list</a>, interest is high, and as with all unconferences, the event&#8217;s success will depend entirely on who shows up &#8212; so please <a href="http://netsquaredvancouver.eventbrite.com/">mark the date in your calendar</a> and spread the word.</p>
<p>Here at Raised Eyebrow we&#8217;re very passionate about sharing what we know and building capacity within the nonprofit sector, so we&#8217;re very pleased to be a sponsor of NetSquared Camp Vancouver 2010. I&#8217;m looking forward to seeing how the agenda evolves.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raisedeyebrow.com/2010/07/calling-all-social-change-geeks-its-netsquared-camp-vancouver/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.raisedeyebrow.com/2010/07/calling-all-social-change-geeks-its-netsquared-camp-vancouver/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=calling-all-social-change-geeks-its-netsquared-camp-vancouver</feedburner:origLink></item>
		<item>
		<title>Confessions of a Late-Blooming Gamer</title>
		<link>http://feedproxy.google.com/~r/raisedeyebrow/~3/b4CWpgN5Mlw/</link>
		<comments>http://blog.raisedeyebrow.com/2010/07/confessions-of-a-late-blooming-gamer/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 15:29:33 +0000</pubDate>
		<dc:creator>Lauren Bacon</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Geekery]]></category>

		<guid isPermaLink="false">http://blog.raisedeyebrow.com/?p=978</guid>
		<description><![CDATA[What Video Games Are Teaching Me About Motivation and Behaviour
I have a terrifying confession to make: Until very recently, I didn&#8217;t play video games.
That may not be particularly appalling to many of you, but for someone in my industry, that&#8217;s pretty embarrassing. Game designers are an integral part of the interactive design community, and I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<h3>What Video Games Are Teaching Me About Motivation and Behaviour</h3>
<p>I have a terrifying confession to make: Until very recently, I didn&#8217;t play video games.</p>
<p>That may not be particularly appalling to many of you, but for someone in my industry, that&#8217;s pretty embarrassing. Game designers are an integral part of the interactive design community, and I&#8217;ve always felt an affinity with them, despite not really knowing their territory. In fact, <a href="http://clicknothing.typepad.com/">one of my favourite blogs</a> is written by Clint Hocking, a former creative director at <a href="http://www.ubi.com">Ubisoft</a> (and high school friend of mine). But I have long been more than a little sheepish about publicly admitting to not having a clue about gaming, aside from what I&#8217;ve read on Clint&#8217;s blog.</p>
<p>That said, it&#8217;s always educational to be late on the uptake with a particular technology; as a web designer I feel like it can help me empathize with the people using my designs who might not spend even a fraction of the time I spend online. I&#8217;ve learned a few things from my experience that feel particularly relevant to the work we do with our clients.</p>
<p>First, I had valid reasons for not playing video games until now. I didn&#8217;t have access to a console; I didn&#8217;t feel like spending money on one until its value had been shown to me; I had seen a lot of games that didn&#8217;t appeal to my interests and sensibilities; and perhaps most fundamentally, I was so green that even working the controller was daunting to me &#8212; that is, the basics of navigation and control felt uncomfortable and clunky. All of these practical resistance points are also true for many website users; even now when those of us in the industry refer to ourselves as &#8220;veterans&#8221; and to the up-and-coming generation as &#8220;digital natives,&#8221; there are still huge swaths of people on the planet who simply don&#8217;t <em>need </em>to use the internet to get through their days &#8212; as my uncle Ken, a farmer &amp; logger in Northern Ontario, reminds me regularly. For those people, the only thing that&#8217;s going to make them interested in the technology is for it to become relevant to their lives.</p>
<p>It wasn&#8217;t until I discovered a game that I truly fell in love with (more on that in a moment) that I became invested enough to want to work through my painful awkwardness with the controller and my hesitations about the financial investment. (I haven&#8217;t touched on the time investment required, which is significant &#8212; this was another fear I had about games, and one that proved well-founded as I have found myself losing all track of time while immersed in the gaming experience.) But once I found a game I connected with, the obstacles fell away and my desire to interact with the game overcame all resistance. Us web designers are fond of parroting the maxim that &#8220;Content is king,&#8221; but we haven&#8217;t always been good at practicing what we preach &#8212; this has been a good reminder to me that what&#8217;s inside really is what counts. And just as all websites aren&#8217;t created with equal amounts of attention to content, neither are all video games.</p>
<p><img class="alignleft size-medium wp-image-979" title="Assassin's Creed II capture" src="http://blog.raisedeyebrow.com/wp-content/uploads/2010/07/assassins-creed2-431-300x208.jpg" alt="" width="300" height="208" />The game that stole my heart is <a href="http://en.wikipedia.org/wiki/Assassin%27s_Creed_II">Assassin&#8217;s Creed II</a>, an action-adventure game set in Renaissance Italy. Your character is a young assassin from a noble family who is avenging a betrayal of his family &#8212; but it&#8217;s actually far more complicated than that. You&#8217;re <em>actually</em> a modern-day guy who&#8217;s been projected back into the body of this 15th-century assassin, and you&#8217;re trying to solve a mystery involving the <a href="http://en.wikipedia.org/wiki/Knights_Templar">Knights Templar</a> that traverses centuries. In the process, you travel through the gorgeously-rendered streets of Florence, Venice, and points in between, running over rooftops, climbing church towers, dodging guards, exploring secret tombs, hiding in crowds, stealing treasure, and oh yes &#8212; hanging out with Leonardo da Vinci. There are puzzles to solve, swordfights, thieving missions, and even some economic development to manage in a small town where your uncle&#8217;s villa is located.</p>
<p>The premise itself appeals to me more than some other games, but the real genius of Assassin&#8217;s Creed II lies in its execution. Game designers clearly put an enormous amount of thought into human motivation, and there&#8217;s something in this game for just about anyone. The rewards that you earn over the course of the game are a mix of financial (good old-fashioned cash), status (your armour and weapons get progressively better &#8212; and pricier &#8212; as you progress), relational (you meet new characters &amp; gain access to allies) and intellectual (solving puzzles). It&#8217;s been interesting to observe my responses to the various types of rewards and see how they correspond with my real-life predilections. I think the real hook for me has been the mystery-solving part, because it lends an over-arching mission and urgency to the game that I have only ever felt when reading a complex and layered page-turner of a novel.</p>
<p>I honestly never imagined that a video game could make me feel so immersed, and provide such a strong emotional connection. Now that I&#8217;ve had this experience I&#8217;m far more likely to explore the rest of the gaming world and see what else is out there. But it&#8217;s also got me thinking about the factors that shift behaviour and that motivate us &#8212; which makes me further resolved to focus my summer reading on those topics. I&#8217;ve picked up <a href="http://heathbrothers.com/switch/"><em>Switch</em></a> and <a href="http://heathbrothers.com/madetostick"><em>Made to Stick</em></a> (both by Chip &amp; Dan Heath) but I welcome other suggestions.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raisedeyebrow.com/2010/07/confessions-of-a-late-blooming-gamer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.raisedeyebrow.com/2010/07/confessions-of-a-late-blooming-gamer/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=confessions-of-a-late-blooming-gamer</feedburner:origLink></item>
		<item>
		<title>What Your Nonprofit Can Learn From Covenant House Vancouver’s Award-Winning Blog</title>
		<link>http://feedproxy.google.com/~r/raisedeyebrow/~3/_1j1_v13Lnw/</link>
		<comments>http://blog.raisedeyebrow.com/2010/06/what-your-nonprofit-can-learn-from-covenant-house-vancouvers-award-winning-blog/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 22:27:39 +0000</pubDate>
		<dc:creator>Anna</dc:creator>
				<category><![CDATA[Online Strategy]]></category>
		<category><![CDATA[The Social Web]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Covenant House Vancouver]]></category>
		<category><![CDATA[The Canadian Public Relations Society]]></category>

		<guid isPermaLink="false">http://blog.raisedeyebrow.com/?p=965</guid>
		<description><![CDATA[This month, our clients at Covenant House Vancouver were recognized for their exceptional blog, On the House, receiving an award from The Canadian Public Relations Society (CPRS). Covenant House shelters and counsels street youth, and over the past 10 years they&#8217;ve helped 10,000 young people with shelter, food, clothing, counseling and other support. Their blog [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.covenanthousebc.org/blog"><img class="alignright size-full wp-image-975" title="on-the-house" src="http://blog.raisedeyebrow.com/wp-content/uploads/2010/06/on-the-house.png" alt="" width="240" height="51" /></a>This month, our clients at <a title="Covenant House Vancouver" href="http://www.covenanthousebc.org/" target="_blank">Covenant House Vancouver</a> were recognized for their exceptional blog, <em><a title="On the House" href="http://www.covenanthousebc.org/blog" target="_blank">On the House</a></em>, receiving an award from <a title="The Canadian Public Relations Society" href="http://www.cprs.ca/news/" target="_blank">The Canadian Public Relations Society (CPRS)</a>. Covenant House shelters and counsels street youth, and over the past 10 years they&#8217;ve helped 10,000 young people with shelter, food, clothing, counseling and other support. Their blog launched on August 24th, 2009, and since then they&#8217;ve contributed over 150 posts. The blog is innovative as content is often contributed by the kids that come through Covenant House, telling of their journeys, their achievements, and even showcasing their art.</p>
<p>The CPRS award is a well-deserved honour. Covenant House&#8217;s blog is a great model for nonprofits who are looking to create more compelling blog content. Here are a few of the secrets of their success, as we see them:</p>
<ol>
<li><strong>Stories, stories, stories: </strong><em>On the House</em> personalizes youth homelessness and the challenges that contribute to it.  By telling youth stories, <a title="13 Year Old John" href="http://www.covenanthousebc.org/blog/2010/04/29/chocolate-bar-can-go-long-way" target="_blank">for example the story of 13-year John</a>, <em>On the House</em> helps helps educate prospective donors and volunteers as well as building stronger community among existing constituents.</li>
<li><strong>Gratitude is infections:</strong> Covenant House posts letters they receive from donors (with permission) to their <a title="Donor Stories" href="http://www.covenanthousebc.org/blog/topics/donor-stories" target="_blank">Donor Stories</a>.  In the story <a title="Thank You" href="http://www.covenanthousebc.org/blog/2010/04/23/thank-you" target="_blank">Thank You</a>, a donor wrote to give thanks for the call they received during Covenant House&#8217;s &#8220;thank-a-thon.&#8221;  In <a title="Feel Good Friday" href="http://www.covenanthousebc.org/blog/topics/donor-stories" target="_blank">Feel Good Friday</a>, Joanne wrote to explain how much it meant to her to be able to teach her children about giving to Covenant House Vancouver.</li>
<li><strong>Self-promotion is more palatable when it&#8217;s surrounded with great content: </strong><em>On the House</em> has a few asks and some promotion mixed in, such as <a title="Christmas is Coming" href="http://www.covenanthousebc.org/blog/2009/10/15/christmas-coming" target="_blank">Christmas is Coming</a>.  Coupled with youth stories, it seems only natural that Covenant House should be asking for support to help these kids.</li>
<li><strong>Show, don&#8217;t tell:</strong> Some of the most powerful posts are contributed by the youth Covenant House Vancouver serves: <a title="Freedom" href="http://www.covenanthousebc.org/blog/2010/05/21/freedom" target="_blank">poetry</a>, <a title="Comic Strip" href="http://www.covenanthousebc.org/blog/2010/02/26/youth-comic-part-six" target="_blank">artwork,</a> and prose tell the reader more than a third-person story ever could.  For example <a title="Gratitude" href="http://www.covenanthousebc.org/blog/2010/03/01/gratitude-donated-hockey-tickets" target="_blank">Gratitude for Donated Hockey Sticks</a>, in which two youth thank you letters are reprinted.</li>
<li><strong>Share your challenges:</strong> The blog content stays interesting because there&#8217;s lots of variety. Posts, like <a title="Youth Privacy Versus Good Communication" href="http://www.covenanthousebc.org/blog/2010/04/23/youth-privacy-versus-good-communications" target="_blank">Youth Privacy Versus Good Communication</a>, explore internal challenges Covenant House staff face every day, lending a human face to the organization and breaking down barriers between the staffer who&#8217;s writing and the reader.</li>
</ol>
<p>Congratulations to Michelle Clausius and Kristy Hayter who have done an amazing job of bringing <em>On the House</em> to life. If you have minute, check out <a title="On the House" href="http://www.covenanthousebc.org/blog" target="_blank"><em>On the House</em></a>.  The posts are often funny, informative, inspiring, and/or heartbreaking.  They&#8217;re compelling and worth the read.  Kudos to Covenant House for helping to give these talented young writers a voice.  Also, thanks for the important insights on the issues of youth and homelessness.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raisedeyebrow.com/2010/06/what-your-nonprofit-can-learn-from-covenant-house-vancouvers-award-winning-blog/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.raisedeyebrow.com/2010/06/what-your-nonprofit-can-learn-from-covenant-house-vancouvers-award-winning-blog/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=what-your-nonprofit-can-learn-from-covenant-house-vancouvers-award-winning-blog</feedburner:origLink></item>
		<item>
		<title>Datadotgc.ca – A Drupal case study: Part 2</title>
		<link>http://feedproxy.google.com/~r/raisedeyebrow/~3/gBSCOX5Jdso/</link>
		<comments>http://blog.raisedeyebrow.com/2010/06/datadotgc-ca-a-drupal-case-study-part-2/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 19:23:41 +0000</pubDate>
		<dc:creator>Colin Calnan</dc:creator>
				<category><![CDATA[Code and Coding]]></category>
		<category><![CDATA[Content Management Systems]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[CKAN]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.raisedeyebrow.com/?p=880</guid>
		<description><![CDATA[This is the second part of Drupal Case Study on integrating the CKAN data repository with Drupal 6. Part 1 covered the following:

What is CKAN?
CKAN’s API
The Foundation
The Build
Theming
Homepage Chart

Caching
API calls are expensive. There&#8217;s no doubt about that. Particularly when you&#8217;re returning large amounts of data. To avoid any issues of the CKAN API being exhausted [...]]]></description>
			<content:encoded><![CDATA[<p>This is the second part of Drupal Case Study on integrating the CKAN data repository with Drupal 6. <a href="/2010/04/datadotgc-ca-a-drupal-case-study/">Part 1 covered the following</a>:</p>
<ul>
<li>What is CKAN?</li>
<li>CKAN’s API</li>
<li>The Foundation</li>
<li>The Build</li>
<li>Theming</li>
<li>Homepage Chart</li>
</ul>
<h3>Caching</h3>
<p>API calls are expensive. There&#8217;s no doubt about that. Particularly when you&#8217;re returning large amounts of data. To avoid any issues of the CKAN API being exhausted from requests and to ensure that the site remained responsive, I decided to leverage Drupals caching mechanisms and pretty much cached everything I could, within reason. <a href="http://www.datadotgc.ca">The Chart</a>, Tag Cloud, <a href="http://www.datadotgc.ca/data/tag">Tag lists</a>, <a href="http://www.datadotgc.ca/data/ministry">Ministry lists</a>, <a href="http://www.datadotgc.ca/data/all">All Packages</a> list and all individual packages are cached. The issue with caching on this site is that if a package gets updated on the CKAN instance, we need to know about that on our Drupal site immediately and then clear the appropriate caches so that the most recent data can be retrieved. </p>
<p>For caching I created a table called &#8216;cache_ckan&#8217;, that stores everything I need. To create this table I used the schema of the existing cache table and put that in my .install file in my module directory.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p880code8'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8808"><td class="code" id="p880code8"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * Implementation of hook_install().
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> ckan_install<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  drupal_install_schema<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Implementation of hook_uninstall().
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> ckan_uninstall<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  drupal_uninstall_schema<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Implementation of hook_schema().
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> ckan_schema<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$schema</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$schema</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cache_ckan'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> drupal_get_schema_unprocessed<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'system'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cache'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$schema</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Whenever this module is enabled this schema will be run and the table will be created.</p>
<h4>What is stored in the ckan_cache table?</h4>
<p>There are various items stored in the cache table.</p>
<ol>
<li>The Homepage chart data</li>
<li>Tag lists</li>
<li>Ministry lists</li>
<li>List of all datasets</li>
</ol>
<p>Let&#8217;s take the <a href="http://www.datadotgc.ca/data/all">list of all packages</a> as an example. I covered how I implemented the paging in <a href="/2010/04/datadotgc-ca-a-drupal-case-study/">my previous post</a>. As this list is paginated it&#8217;s important that every page be cached to improve the speed of the site. As the paging mechanism is already implemented it&#8217;s just a case of creating a cache table entry (<strong>ckan:all{page-number}</strong>) for each page, and then checking for it&#8217;s existence when loading the page.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p880code9'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p8809"><td class="code" id="p880code9"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache</span> <span style="color: #339933;">=</span> cache_get<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan:all'</span><span style="color: #339933;">.</span><span style="color: #000088;">$page</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cache_ckan'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// If cached data exists for this page...</span>
	<span style="color: #000088;">$results</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$cache</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$ckan</span> <span style="color: #339933;">=</span> ckan_ckan<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$start</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$items_per_page</span> <span style="color: #339933;">=</span> variable_get<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan_items_per_page'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// If we're in a page, we need to set where to start the list</span>
		<span style="color: #000088;">$start</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$page</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$items_per_page</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Set the offset to the number of records in</span>
	<span style="color: #000088;">$offset</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$start</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// Limit to the number of items per page </span>
	<span style="color: #000088;">$limit</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$items_per_page</span><span style="color: #339933;">;</span>
&nbsp;
	try <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$results</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$ckan</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">advancedSearch</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'groups'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'canadagov'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'all_fields'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'offset'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$offset</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'limit'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$limit</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// If the API call worked</span>
	watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Called CKAN API for list of all packages'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    	cache_set<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan:all'</span><span style="color: #339933;">.</span><span style="color: #000088;">$page</span><span style="color: #339933;">,</span> <span style="color: #000088;">$results</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cache_ckan'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>This method is very simple and very effective. It means the pages load lightning fast and only one page of data at a time is retrieved.</p>
<h4>How does the cache get cleared/updated</h4>
<p>Datasets/Packages change all the time on the CKAN instance, so how do you make sure that the Drupal site has the most current data. This module has two ways of managing that.</p>
<h4>1. Using <a href="http://api.drupal.org/api/function/hook_form/6">hook_form</a> to redirect to CKAN</h4>
<p>As the CKAN nodes on Drupal are created on the fly and hold very little information, there is really no need to access the EDIT form for these nodes. Whenever an admin user clicks the edit tab on the node, they are automatically redirected to the appropriate CKAN package editing screen. hook_form is called to retrieve the form that is displayed when one attempts to &#8220;create/edit&#8221; an item. For CKAN content types, the user is redirect to the CKAN instance.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p880code10'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p88010"><td class="code" id="p880code10"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * Implementation of hook_form
 *
 * Redirect the user to ca.ckan.net package edit screen on edit
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> ckan_form<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span><span style="color: #000088;">$node</span><span style="color: #339933;">,</span> <span style="color: #000088;">$form_state</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">type</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'ckan'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  	drupal_goto<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://ca.ckan.net/package/edit/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">body</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>When the CKAN form is submitted, CKAN then redirects back to the Drupal site and calls a specific URL that tells Drupal to call CKAN again to get the package information and populate the node. To clarify, the process is</p>
<ol>
<li>Redirect http://www.datadotgc.ca/node/X/edit to http://ca.ckan.net/package/edit/{name of X}</li>
<li>On save of CKAN Package, redirect to http://www.datadotgc.ca/{special_url}/{name_of_X}</li>
<li>Load the node with {name_of_X}</li>
<li>Call CKAN to get the (updated) data for Package {name_of_X}</li>
<li>Save the node with updated data</li>
</ol>
<h4>Using Cron and an Atom Feed</h4>
<p>CKAN provides an Atom feed of recent updates to the Packages. Cron checks this feed every time it runs. If the feed has changed since the last cron run, then we know there have been updates and we clear all of the caches.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p880code11'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p88011"><td class="code" id="p880code11"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * Implementation of hook_cron()
 *
 **/</span>
<span style="color: #000000; font-weight: bold;">function</span> ckan_cron<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// Get the md5sum of the current atom feed</span>
	<span style="color: #000088;">$current_feed</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/trim"><span style="color: #990000;">trim</span></a><span style="color: #009900;">&#40;</span><a href="http://www.php.net/md5_file"><span style="color: #990000;">md5_file</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://ca.ckan.net/revision/list?format=atom'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Current feed md5: '</span><span style="color: #339933;">.</span> <span style="color: #000088;">$current_feed</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// Retrieve the previously stored md5sum</span>
	<span style="color: #000088;">$previous_feed</span> <span style="color: #339933;">=</span> variable_get<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan_atom_feed_md5'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$current_feed</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Previous feed md5: '</span><span style="color: #339933;">.</span><span style="color: #000088;">$previous_feed</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// If there have been changes</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$current_feed</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$previous_feed</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'ATOM feed has updated, clearing caches and deleting nodes'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// Flush all the caches</span>
		cache_clear_all<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'*'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cache_ckan'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  	        <span style="color: #666666; font-style: italic;">// Set the previous feed md5</span>
		variable_set<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan_atom_feed_md5'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$current_feed</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h3>Tag cloud creation</h3>
<p>I borrowed some code from the <a href="http://drupal.org/project/tagadelic">Tagadelic</a> module to achieve the tag cloud</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p880code12'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p88012"><td class="code" id="p880code12"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * Build a tag cloud based on the settings provided
 *
 * @return	String	A themed list of weighted tags
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> ckan_tag_cloud<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// If there is cached data</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache</span> <span style="color: #339933;">=</span> cache_get<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan:tags'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cache_ckan'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$results</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/unserialize"><span style="color: #990000;">unserialize</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$ckan</span> <span style="color: #339933;">=</span> ckan_ckan<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$results</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$ckan</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getTagCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Called CKAN API for tag cloud'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		cache_set<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan:tags'</span><span style="color: #339933;">,</span> <a href="http://www.php.net/serialize"><span style="color: #990000;">serialize</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$results</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cache_ckan'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Let's sort them by weight first off</span>
	<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$results</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span>  <span style="color: #339933;">=</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$weight</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<a href="http://www.php.net/array_multisort"><span style="color: #990000;">array_multisort</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$weight</span><span style="color: #339933;">,</span> SORT_DESC<span style="color: #339933;">,</span> <span style="color: #000088;">$results</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Now let's get the top X number of tags</span>
	<span style="color: #000088;">$results</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array_slice"><span style="color: #990000;">array_slice</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$results</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> variable_get<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan_tagcloud_total'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">40</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Now build the tags</span>
	<span style="color: #000088;">$tags</span> <span style="color: #339933;">=</span> ckan_tag_build_weighted<span style="color: #009900;">&#40;</span><span style="color: #000088;">$results</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// Sort them</span>
	<span style="color: #000088;">$tags</span> <span style="color: #339933;">=</span> ckan_tag_sort<span style="color: #009900;">&#40;</span><span style="color: #000088;">$tags</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// Theme them</span>
	<span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> theme<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ckan_weighted_tags'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tags</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$output</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Theme function that renders the HTML for the tags
 * @ingroup themable
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> theme_ckan_weighted_tags<span style="color: #009900;">&#40;</span><span style="color: #000088;">$tags</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tags</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$tag</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$output</span> <span style="color: #339933;">.=</span> l<span style="color: #009900;">&#40;</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'data/tag/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'attributes'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'class'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;tagcloud level&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'weight'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rel'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'tag'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$output</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h3>Using the CKAN Search API for all lists</h3>
<p>Ok, so what&#8217;s this all about? CKAN has some <a href="http://knowledgeforge.net/ckan/doc/ckan/api.html">nice API calls</a> like <em>/api/rest/package/PACKAGE-REF</em> that return a list of Packages. However these return the name/id of the Package ONLY. In our case, for our listings, we wanted other data, such as the tags attached to the Package as well as a brief description.</p>
<p>The only way to get this data was to do a search API call <em>/api/search/package</em> and pass some extra parameters, in this case <em><strong>all_fields=1</strong></em> and <em><strong>department={name of Ministry}</strong></em>. </p>
<p><em><strong>all_fields=1</strong></em> tells the search to return all Package fields, not just the name/id; just as is if you called  <em>/api/rest/package/PACKAGE-REF</em>.</p>
<p><em><strong>department={name of Ministry}</strong></em> tells the search to return all packages that have a department of {name of Ministry}. <strong>The lovely folks at CKAN added this functionality for us on request</strong>.</p>
<p>What does this look like, well it&#8217;s pretty simple really. Call the <em>advancedSearch()</em> function. Pass it a few parameters and it returns you all the data you need. Here&#8217;s the function itself:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p880code13'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p88013"><td class="code" id="p880code13"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> advancedSearch<span style="color: #009900;">&#40;</span><span style="color: #000088;">$parameters</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$parameters</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$querystring</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">'='</span><span style="color: #339933;">.</span> <a href="http://www.php.net/urlencode"><span style="color: #990000;">urlencode</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$results</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">transfer</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'api/search/package?'</span><span style="color: #339933;">.</span> <span style="color: #000088;">$querystring</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$results</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">count</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> CkanException<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Search Error&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$results</span><span style="color: #339933;">;</span>	
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>And here is that function being called for the list of Ministry Packages. The offset and limit are for the paging mechanism:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p880code14'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p88014"><td class="code" id="p880code14"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Call the function</span>
<span style="color: #000088;">$results</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$ckan</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">advancedSearch</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'department'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$ministry</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'all_fields'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'offset'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$offset</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'limit'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$limit</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>There&#8217;s a lot more functionality in this module, more than I can go through in a blog post, even 5 posts. If you&#8217;re trying to integrate Drupal with a CKAN instance and are not sure where to start then please leave a comment and I&#8217;ll get back in touch.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raisedeyebrow.com/2010/06/datadotgc-ca-a-drupal-case-study-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.raisedeyebrow.com/2010/06/datadotgc-ca-a-drupal-case-study-part-2/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=datadotgc-ca-a-drupal-case-study-part-2</feedburner:origLink></item>
		<item>
		<title>Provincial Government Funding for New Technology Training Could Help Offset the Cost of a New Website?</title>
		<link>http://feedproxy.google.com/~r/raisedeyebrow/~3/9LWDCNtVlak/</link>
		<comments>http://blog.raisedeyebrow.com/2010/06/provincial-government-funding-for-new-technology-training-could-help-offset-the-cost-of-a-new-website/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 16:30:07 +0000</pubDate>
		<dc:creator>Emira Mears</dc:creator>
				<category><![CDATA[Nonprofit Tech]]></category>
		<category><![CDATA[Raised Eyebrow]]></category>

		<guid isPermaLink="false">http://blog.raisedeyebrow.com/?p=946</guid>
		<description><![CDATA[Depending on the size of your organization and whether or not you have previously applied for this program, there is a BC Government initiative which your organization may be able to use to offset some of the cost of your website (re)design and development project.
Information about the program and the one page application form are [...]]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } -->Depending on the size of your organization and whether or not you have previously applied for this program, there is a BC Government initiative which your organization may be able to use to offset some of the cost of your website (re)design and development project.</p>
<p>Information about the program and the one page application form are available on the Ministry website: <a href="http://www.aved.gov.bc.ca/workplace_training_program/welcome.htm">http://www.aved.gov.bc.ca/workplace_training_program/welcome.htm</a></p>
<p>In brief the eligibility requirements are:</p>
<ul>
<li>Business or organization 	(non-profit organizations are eligible) with less than 50 employees 	(this number would not include volunteers).</li>
<li>Been operating for more than a 	year.</li>
<li>Apply the funding to training 	which will “help improve productivity” and/or “support the 	introduction of new equipment, technology or work process”. Your 	new CMS should be eligible as a new technology which will also help 	improve productivity.</li>
<li>You must have not already applied 	for the grant.</li>
</ul>
<p>The grant offers:</p>
<ul>
<li>Up to $1,500 per employee for 	training costs</li>
<li>An organizational maximum of 	$5,000</li>
</ul>
<p>Please note that training for Owners is not eligible for the grant, however, we have been unable to ascertain whether or not Executive Directors are excluded (there is no language that says so, and the Ministry has been slow to respond).</p>
<p>The program is in place until January 31, 2011.</p>
<p>Please note, this is a one time grant so if you feel there is other training  to which you could better apply this grant, then we would advise you to not apply for the grant for your website training.</p>
<p>Of course Raised Eyebrow can not guarantee that your funding will be approved, but the training we provide to our clients as a part of a website redesign or a new development project does fit into the criteria of the program. We are in no way affiliated with this program, we simply want to make our clients aware of it as we are conscious of the limited resources that many of our clients operate under.</p>
<p><strong>More information:</strong></p>
<ul>
<li><a href="http://www.aved.gov.bc.ca/workplace_training_program/docs/application.pdf">Download 	the One Page Application Form</a> (PDF)</li>
<li><a href="http://www.aved.gov.bc.ca/workplace_training_program/docs/qa.pdf">Questions 	and Answers on the Ministry website</a> (PDF)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.raisedeyebrow.com/2010/06/provincial-government-funding-for-new-technology-training-could-help-offset-the-cost-of-a-new-website/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.raisedeyebrow.com/2010/06/provincial-government-funding-for-new-technology-training-could-help-offset-the-cost-of-a-new-website/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=provincial-government-funding-for-new-technology-training-could-help-offset-the-cost-of-a-new-website</feedburner:origLink></item>
		<item>
		<title>Vertical Response Release New Editor</title>
		<link>http://feedproxy.google.com/~r/raisedeyebrow/~3/KHv2jlyc8Ic/</link>
		<comments>http://blog.raisedeyebrow.com/2010/06/vertical-response-release-new-editor/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 16:09:24 +0000</pubDate>
		<dc:creator>Anna</dc:creator>
				<category><![CDATA[Email Marketing]]></category>
		<category><![CDATA[Online Strategy]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.raisedeyebrow.com/?p=931</guid>
		<description><![CDATA[Vertical Response, an online newsletter software, recently released an update to their editor.  WOW!  What an improvement.
The old editor, used for editing custom HTML templates was pretty picky.  It reminded me of Microsoft Word, in that you might press return once and get a huge gaping hole in your layout. Or press backspace once and [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Vertical Response" href="http://www.verticalresponse.com" target="_blank">Vertical Response</a>, an online newsletter software, recently released an update to their editor.  WOW!  What an improvement.</p>
<p>The old editor, used for editing custom HTML templates was pretty picky.  It reminded me of Microsoft Word, in that you might press return once and get a huge gaping hole in your layout. Or press backspace once and the entire design would disappear. <em>Undo</em> was a most used <em>feature</em>.  And often the remedy was to extract the source and fix things up in Dreamweaver, combing through line by line.</p>
<p>That said, I&#8217;ve always liked Vertical Response because I like the management interface, including the list manager, and after gaining enormous popularity, they are still offering their service <a title="Vertical Response" href="http://www.verticalresponse.com/non-profits/" target="_blank">FREE to nonprofits</a>, which is awesome for many of our clients.</p>
<p>So recently I logged into Vertical Response and made a copy of a campaign and got the prompt &#8220;NEW: Copy to New Canvas Editor.&#8221;  I ticked the box and this opened the newsletter in the new editor and it was a beautiful transformation.</p>
<p>My favourite improvement is the Format drop-down, which allows you to apply paragraph styles defined in the CSS by simply highlighting text and choosing a style from the drop-down.  Prior to this you would have to copy a few characters from a paragraph with the formatting you wanted, paste it in the desired location, and then edit it.  So this was a big improvement.</p>
<p>Another plus is the tick box that allows you to automatically generate a text-based version of the email.  This prevents the need to carry content changes in two versions of the email.</p>
<p>If you are still using the old editor, give the new one a try.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raisedeyebrow.com/2010/06/vertical-response-release-new-editor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.raisedeyebrow.com/2010/06/vertical-response-release-new-editor/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=vertical-response-release-new-editor</feedburner:origLink></item>
	</channel>
</rss>
