<?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>Mark O&#039;Sullivan &#187; Garden</title>
	<atom:link href="http://markosullivan.ca/category/garden/feed/" rel="self" type="application/rss+xml" />
	<link>http://markosullivan.ca</link>
	<description>Currently Programming Jerry-Lee-Lewis-Style</description>
	<lastBuildDate>Thu, 28 Jul 2011 13:13:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>How to Handle a Pull Request from GitHub</title>
		<link>http://markosullivan.ca/how-to-handle-a-pull-request-from-github/</link>
		<comments>http://markosullivan.ca/how-to-handle-a-pull-request-from-github/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 19:25:14 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Garden]]></category>
		<category><![CDATA[help]]></category>

		<guid isPermaLink="false">http://markosullivan.ca/?p=716</guid>
		<description><![CDATA[We decided to pick up Git for the Vanilla &#038; Garden projects after discussions we had with people from many other companies while we were in TechStars this past summer. Git is still a bit of an enigma to me, and I&#8217;ve been receiving pull requests from people for a while, and I&#8217;ve failed to [...]]]></description>
			<content:encoded><![CDATA[<p><center><img src="http://markosullivan.ca/wp-content/uploads/2009/11/pull-requests.png" alt="pull-requests" title="pull-requests" width="401" height="254" class="alignnone size-full wp-image-719" /></center></p>
<p>We decided to pick up Git for the Vanilla &#038; Garden projects after discussions we had with people from many other companies while we were in TechStars this past summer. Git is still a bit of an enigma to me, and I&#8217;ve been receiving pull requests from people for a while, and I&#8217;ve failed to successfully get their changes into my code &#8211; instead opting to just manually apply their changes with my own IDE. That is, of course, a total waste of my time and contrary to the entire purpose of us adopting Git. So, today I finally sat down and dug my way through to figure out <strong>how to handle a pull request</strong>.</p>
<p>After a few hours of frustration, it finally makes sense. Here&#8217;s the long and short of it: Define the user&#8217;s remote repo, get a local copy of their work, go into the branch you want to pull their changes into, and cherry pick their commit into your branch. </p>
<p>Here are the actual commands I used to accomplish this for a number of different pull requests today:</p>
<p><strong>Step 1. Do you already have their repo set up as a remote branch on your dev machine? Check with:</strong></p>
<pre>git remote -v</pre>
<p>If not, add the remote branch and fetch the latest changes with:</p>
<pre>git remote add -f &lt;username> git://github.com/&lt;username>/Garden.git</pre>
<p>Note: &#8220;Garden&#8221; is the name of our project on github. Obviously, you would need to substitute that for your project name.</p>
<p><strong>2. Do you already have a local copy of their repo? Check with:</strong></p>
<pre>git branch -a</pre>
<p>If not, create it and check it out with:</p>
<pre>git checkout -b &lt;username>/master</pre>
<p>If you do already have a local copy of their repo, fetch the latest changes:</p>
<pre>git fetch &lt;username></pre>
<p><strong>3. Get their changes into your personal working branch:</strong></p>
<pre>git checkout master
git cherry-pick &lt;hash of user's specific changes that they requested you to pull></pre>
<p>That&#8217;s it. I can&#8217;t believe it took me so long to figure that out!</p>
]]></content:encoded>
			<wfw:commentRss>http://markosullivan.ca/how-to-handle-a-pull-request-from-github/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>The Road</title>
		<link>http://markosullivan.ca/the-road/</link>
		<comments>http://markosullivan.ca/the-road/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 16:01:43 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Garden]]></category>
		<category><![CDATA[Lussumo]]></category>
		<category><![CDATA[Vanilla 2]]></category>

		<guid isPermaLink="false">http://markosullivan.ca/?p=604</guid>
		<description><![CDATA[It is long overdue that I post an update to the Garden &#038; Vanilla 2 development. First: if you find that I&#8217;ve not been posting on my blog, you can take it as a good sign meaning that I&#8217;m busy doing other things. Myself and a great friend of mine (Todd Burry) have been working [...]]]></description>
			<content:encoded><![CDATA[<p><center><img src="http://markosullivan.ca/wp-content/uploads/2009/06/vanilla-2.gif" alt="Vanilla 2" title="Vanilla 2" width="500" height="234" class="alignnone size-full wp-image-605" /></center></p>
<p>It is long overdue that I post an update to the Garden &#038; Vanilla 2 development. First: if you find that I&#8217;ve not been posting on my blog, you can take it as a good sign meaning that I&#8217;m busy doing other things. </p>
<p>Myself and a great friend of mine (Todd Burry) have been working full-time on the project for the last four weeks.</p>
<p>Next week we will be moving our <a href="http://issues.gardenframework.com">current issue tracker</a> over to GitHub and simultaneously releasing the Garden and Vanilla 2 code there. The code is still under heavy development and is absolutely not ready for production use. However, it <em>does</em> work and we need your help getting it finished. </p>
<p>Although Vanilla 1 is an open source project, I have always been the bottleneck that keeps it from really taking off. I refuse to let this happen with Garden and Vanilla 2. So, we will be doing our best to allow everyone in the 10,000-strong Lussumo community to help us out this time around, and the release of the code on GitHub is just the first of many steps in this direction.</p>
<p>Following the GitHub move, I will be contacting the authors of the most popular plugins for Vanilla 1 and helping them to get their plugins ported to Vanilla 2 so they can be fully functional and compatible for the Vanilla 2 release. If, for some reason, the authors are uninterested in porting their plugins to Vanilla 2, I will be making announcements here to find anyone out there who is interested in picking up where the previous authors left off, so keep your eyes peeled. If you have a new plugin idea that you want implemented for Vanilla 2 and you want a hand with getting Garden, Vanilla 2, and understanding how things are done: feel free to contact me here on this blog, via twitter @navvywavvy, or directly via email at mark [at] lussumodotcom.</p>
<p>The future starts here!</p>
]]></content:encoded>
			<wfw:commentRss>http://markosullivan.ca/the-road/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>And Or Alternatives</title>
		<link>http://markosullivan.ca/and-or-alternatives/</link>
		<comments>http://markosullivan.ca/and-or-alternatives/#comments</comments>
		<pubDate>Sun, 17 May 2009 02:50:32 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Garden]]></category>
		<category><![CDATA[Lussumo]]></category>

		<guid isPermaLink="false">http://markosullivan.ca/?p=589</guid>
		<description><![CDATA[I&#8217;m in the process of adding some methods to the database object to help in writing chained queries for Garden. One of the annoying problems I&#8217;ve run into is that the words &#8220;or&#8221; and &#8220;and&#8221; are reserved and won&#8217;t work as method names. So, for example, imagine I wanted to write the following chained query: [...]]]></description>
			<content:encoded><![CDATA[<p><center><img src="http://markosullivan.ca/wp-content/uploads/2009/05/applestooranges.gif" alt="Apples and Oranges" title="Apples and Oranges" width="400" height="295" class="alignnone size-full wp-image-593" /></center></p>
<p>I&#8217;m in the process of adding some methods to the database object to help in writing chained queries for Garden. One of the annoying problems I&#8217;ve run into is that the words &#8220;or&#8221; and &#8220;and&#8221; are reserved and won&#8217;t work as method names. So, for example, imagine I wanted to write the following chained query:</p>
<pre>$Database
     ->Select('FieldName')
     ->From('TableName')
     ->Where('FieldName', 'value')
     -><strong>Or</strong>()
     ->Where('FieldName', 'othervalue')
     -><strong>And</strong>()
     ->Where('FieldName', 'Yet Another Value')
     ->Get();</pre>
<p>I realize that this query really doesn&#8217;t make much sense, but that&#8217;s beside the point. The &#8220;or&#8221; and the &#8220;and&#8221; methods can&#8217;t exist in PHP, so what should I use instead?</p>
<p>I&#8217;ve played with things like <strong>AndOp</strong> and <strong>OrOp</strong>, implying that they are operators. I&#8217;ve tried going for shorter versions like <strong>Nd</strong> and <strong>R</strong>, but those are just stupid and don&#8217;t make much sense. I&#8217;ve also considered having <strong>OrWhere</strong> and <strong>AndWhere</strong> methods, but that would mean adding a whole bunch of methods like that (think: OrWhere, AndWhere, OrLike, AndLike, OrWhereIn, AndWhereIn, etc).</p>
<p>I&#8217;m looking for community input here. What would you prefer to type?</p>
]]></content:encoded>
			<wfw:commentRss>http://markosullivan.ca/and-or-alternatives/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Rebranding</title>
		<link>http://markosullivan.ca/rebranding/</link>
		<comments>http://markosullivan.ca/rebranding/#comments</comments>
		<pubDate>Tue, 05 May 2009 23:17:35 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Garden]]></category>
		<category><![CDATA[Lussumo]]></category>
		<category><![CDATA[Vanilla 2]]></category>

		<guid isPermaLink="false">http://markosullivan.ca/?p=576</guid>
		<description><![CDATA[In recent weeks I&#8217;ve been working closely with Jon Contino of Onetwentysix to overhaul the branding of Lussumo products. Recently we settled on the new logos for Vanilla, Conversations, and Garden. Thanks Jon! Update Jon posted a walk-through of how all of these logos came to life. Check it out!]]></description>
			<content:encoded><![CDATA[<p>In recent weeks I&#8217;ve been working closely with Jon Contino of <a href="http://www.onetwentysix.com/">Onetwentysix</a> to overhaul the branding of Lussumo products. Recently we settled on the new logos for Vanilla, Conversations, and Garden. Thanks Jon!</p>
<p><center><img src="http://markosullivan.ca/wp-content/uploads/2009/05/rebranding1.png" alt="Vanilla, Conversations, Garden" title="Vanilla, Conversations, Garden" width="480" height="77" class="alignnone size-full wp-image-581" /></center></p>
<p><strong>Update</strong><br />
Jon posted a walk-through of how all of these logos came to life. <a href="http://joncontino.com/fresh/branding-lussumo/">Check it out!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://markosullivan.ca/rebranding/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Vanilla 2 Public Beta</title>
		<link>http://markosullivan.ca/vanilla-2-public-beta/</link>
		<comments>http://markosullivan.ca/vanilla-2-public-beta/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 15:10:22 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Garden]]></category>
		<category><![CDATA[Vanilla 2]]></category>

		<guid isPermaLink="false">http://markosullivan.ca/?p=564</guid>
		<description><![CDATA[The Vanilla 2 Public Beta is online now. Please read this entire post before clicking away, as it contains important information about questions you will surely have after getting there. Development Status I wasn&#8217;t sure if I should call this an alpha or a beta. There are a number of core features that are not [...]]]></description>
			<content:encoded><![CDATA[<p><center><img src="http://markosullivan.ca/ups/vanilla-2b.png" alt="Vanilla 2 Public Beta" /></center></p>
<p>The Vanilla 2 Public Beta is online now. Please read this entire post before clicking away, as it contains important information about questions you will surely have after getting there.</p>
<h2>Development Status</h2>
<p>I wasn&#8217;t sure if I should call this an alpha or a beta. There are a number of core features that are not yet in the version of Vanilla you are about to see. The most glaringly obvious of these is a search page. In the end I chose beta simply because it rolled off the tongue. Regardless, rest assured that the application is not yet feature-complete.</p>
<h2>Feature Suggestions</h2>
<p>I know that many of you will have feature suggestions after playing with the application. Please use the Vanilla category at the <a href="http://lussumo.com/community">community forum</a> as a place for your suggestions. Also, please remember (a) that the application is not yet feature-complete, and (b) to be nice when making suggestions, and (c) if your suggestion is not implemented, Vanilla 2 is a pluggable system (and more easily pluggable that Vanilla 1 was), so your feature ideas can easily come <strong>after</strong> Vanilla 2 is finalized.</p>
<h2>Whispers &#038; Data Loss</h2>
<p>There are no whispers in Vanilla 2. Instead there are &#8220;conversations&#8221;. The installation you are about to see is a copy of the community forum from about 3pm on April 3rd, 2009. All of your whispers from that database have been transformed into conversations. Also note that as bugs are encountered and fixed, it may be necessary for us to roll the database back to the April 3rd date. So, don&#8217;t be surprised if your discussions, comments, replies, conversations, messages, status updates, profile changes, etc get wiped out.</p>
<h2>Reporting Bugs</h2>
<p>We&#8217;ve set up a trac issue tracker at <a href="http://issues.gardenframework.com">issues.gardenframework.com</a>. If you discover a bug, please register there and then <em>search for it <strong>before</strong> submitting it</em>. </p>
<h2>Not For Download</h2>
<p>This is a public beta. You do not get to download and install Vanilla 2. You just get to use our installation.</p>
<p>Without any further ado, I give you <a href="http://vanilla2.com">Vanilla 2</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://markosullivan.ca/vanilla-2-public-beta/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>CSS Help</title>
		<link>http://markosullivan.ca/css-help/</link>
		<comments>http://markosullivan.ca/css-help/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 16:10:16 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[Garden]]></category>
		<category><![CDATA[help]]></category>

		<guid isPermaLink="false">http://markosullivan.ca/blog/?p=551</guid>
		<description><![CDATA[It&#8217;s that time, once again, when I can&#8217;t figure out how to do something with CSS and I need your help. I&#8217;ve created a full description of the problem and examples of solutions I&#8217;ve tried. The long and short of it is that I have a control that writes messages to the screen. I am [...]]]></description>
			<content:encoded><![CDATA[<p><center><img src="http://markosullivan.ca/blog/wp-content/uploads/2009/04/detergent.jpg" alt="cascade" title="cascade" width="320" height="273" class="alignnone size-full wp-image-553" /></center></p>
<p>It&#8217;s that time, once again, when I can&#8217;t figure out how to do something with CSS and I need your help. I&#8217;ve created a <a href="http://markosullivan.ca/ups/exercise.html">full description of the problem and examples of solutions I&#8217;ve tried</a>.</p>
<p>The long and short of it is that I have a control that writes messages to the screen. I am currently using an unordered list to render these messages, but I want to format them at the top &#038; center of the screen. I want each message to be on it&#8217;s own line, and I want all of the messages to be encapsulated by a solid rectangular background. I want the solid rectangular background to be only as wide as it needs to be in order to encapsulate the widest message.</p>
<p>I&#8217;ve been able to accomplish this with a table, but that&#8217;s just semantically wrong.</p>
<p>Please <a href="http://markosullivan.ca/ups/exercise.html">check out the examples</a> and let me know how you would solve this problem.</p>
<h2>Update</h2>
<p>Evdawg posted a solution that works cross-browser! I&#8217;ve <a href="http://markosullivan.ca/ups/exercise.html">updated the examples with his working version</a>.</p>
<h2>Update 2</h2>
<p>Inky posted another kickass center-float solution that also works cross-browser. I&#8217;ve added <a href="http://markosullivan.ca/ups/exercise.html">that one to the examples</a> as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://markosullivan.ca/css-help/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>My Trip to Boulder</title>
		<link>http://markosullivan.ca/my-trip-to-boulder/</link>
		<comments>http://markosullivan.ca/my-trip-to-boulder/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 03:31:20 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Garden]]></category>
		<category><![CDATA[TechStars]]></category>

		<guid isPermaLink="false">http://markosullivan.ca/blog/?p=522</guid>
		<description><![CDATA[Today I spent the day at TechStars for &#8220;TechStars for a Day&#8221;. It was a very overwhelming day and I met a lot of interesting people. I came out of the day with a number of realizations about things that I&#8217;ve been doing &#8220;wrong&#8221;, and improvements that I need to make in my approach. 1. [...]]]></description>
			<content:encoded><![CDATA[<p><center><img src="http://markosullivan.ca/blog/wp-content/uploads/2009/03/ducks-300x195.jpg" alt="ducks" title="ducks" width="300" height="195" class="alignnone size-medium wp-image-523" /></center></p>
<p>Today I spent the day at <a href="http://www.techstars.org">TechStars</a> for &#8220;TechStars for a Day&#8221;. It was a very overwhelming day and I met a lot of interesting people. I came out of the day with a number of realizations about things that I&#8217;ve been doing &#8220;wrong&#8221;, and improvements that I need to make in my approach.</p>
<p><strong>1. Private Beta == Bad</strong><br />
This notion that I&#8217;ve had of letting just the core community members in to test a closed beta of Garden &#038; Vanilla 2 is simply a bad idea. After all, why limit the user-base when I know that *all* of you have fantastic ideas? So, the first beta that goes online will be open to anyone to register and use. I want everyone to get a taste ASAP.</p>
<p><strong>2. Delivering on Promises</strong><br />
I&#8217;ve been explaining the softare for literally months without giving any of you any real immediate interaction. I need to pick up the pace and get something out there for you guys to play with SOON.  I don&#8217;t have a specific date for you, but my hope is that we&#8217;re talking about weeks, not months.</p>
<p><strong>3. Listening to You</strong><br />
Obviously I have my ideas of what I would like to see the software do. But ultimately it will be you, the users, who judge the software as something you will want to use &#8211; or not. So, after you&#8217;ve had a chance to use it, I will be paying a lot of attention to your feedback. What do you like? What don&#8217;t you like? What is missing? What have I overlooked? etc.</p>
<p><strong>4. Open the Source</strong><br />
I still believe that it is important to have a real focus on where the software is going. But I think I&#8217;ve been confusing that need with &#8220;letting go of control&#8221;. The way that changes were implemented with Vanilla 1 were far too constricted. I&#8217;ve been speaking in private chat with a bunch of the Vanilla 1 developers about this, and while I won&#8217;t be allowing *everyone* to commit changes to the core, I will be accepting bugfixes and change suggestions from the community and allowing other Vanilla 1 developers to review and decide on which ones should be a part of the core. Some Vanilla 1 developers are already looking into ways we can facilitate this process, and I&#8217;ll be relinquishing a lot of control to them right away.</p>
<p>With all of these things in mind, my primary goal for the software in the immediate future is to get a beta online right away. I&#8217;m trusting that everyone is aware that the design isn&#8217;t going to be as polished as the final product <strong>will</strong> be. My focus will be on completing core features and not focusing so much on design. Design can be polished later.</p>
<p>The bottom line comes down to a quote I heard today: Getting all of your ducks in a row is important, but it is more important that you <strong>do something with the ducks</strong>. That is now the focus.</p>
]]></content:encoded>
			<wfw:commentRss>http://markosullivan.ca/my-trip-to-boulder/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Garden Update</title>
		<link>http://markosullivan.ca/garden-update/</link>
		<comments>http://markosullivan.ca/garden-update/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 15:31:46 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Garden]]></category>

		<guid isPermaLink="false">http://markosullivan.ca/blog/?p=519</guid>
		<description><![CDATA[I&#8217;ve received a couple of designs back from friends &#038; colleagues, and everything is looking really great. I&#8217;ve set aside some time in the coming days to try to hammer some of this out. I&#8217;ve also had a number of people contact me via email about helping out with various things like code commenting (thank [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve received a couple of designs back from friends &#038; colleagues, and everything is looking really great. I&#8217;ve set aside some time in the coming days to try to hammer some of this out. I&#8217;ve also had a number of people contact me via email about helping out with various things like code commenting (thank goodness).</p>
<p>On another note, feel free to <a href="http://twitter.com/navvywavvy">follow me on twitter</a> if you want to stay on top of all things Lussumo. I don&#8217;t *always* stay on topic (I might post what some people have called &#8220;zen food tweets&#8221;), but I don&#8217;t spam, and anything new that comes up with the software will be posted there first.</p>
<p>Thanks to everyone for all of their help &#038; advice!</p>
]]></content:encoded>
			<wfw:commentRss>http://markosullivan.ca/garden-update/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Garden &amp; Vanilla 2 Status</title>
		<link>http://markosullivan.ca/garden-vanilla-2-status/</link>
		<comments>http://markosullivan.ca/garden-vanilla-2-status/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 18:40:06 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Garden]]></category>

		<guid isPermaLink="false">http://markosullivan.ca/blog/?p=503</guid>
		<description><![CDATA[Development on Garden &#038; Vanilla 2 has come to a halt. A contract opportunity has come up, and I am in no financial position to decline. So, where does that leave us? TODO There are a lot of little things left to do as far as programming goes. Lots of debugging, a bit of commenting, [...]]]></description>
			<content:encoded><![CDATA[<p>Development on Garden &#038; Vanilla 2 has come to a halt. A contract opportunity has come up, and I am in no financial position to decline. So, where does that leave us?</p>
<h2>TODO</h2>
<p>There are a lot of little things left to do as far as programming goes. Lots of debugging, a bit of commenting, and most of the design. I am going to leave most of the debugging to when the beta goes online and all of you have a chance to play with it. The commenting is really what I&#8217;m focusing on right now, as I am writing a parser to go through all of the code and pull out comments &#8211; it will serve as the primary documentation of the objects in the framework. The design has been handed off to two close friends who have a lot of experience in that area. I am waiting to hear back from them, but they both have jobs and lives as well, and can only do so much so fast. I have no idea when they will deliver anything to me. It could be hours, it could be weeks.</p>
<h2>A Successful Launch</h2>
<p>Above all else, I need to make sure that Vanilla 2 gets the launch it deserves. A big part of ensuring it&#8217;s success is setting realistic expectations for myself. I&#8217;ve come to fully understand that I can&#8217;t do this job all by myself (furthermore, I don&#8217;t <em>want</em> to do it by myself). I&#8217;ve been reaching out to various people in the community for help in different areas. A big thank you to everyone for their enthusiasm and assistance! </p>
<h2>Things to Come</h2>
<p>A few months ago, when I really came to terms with the need for help, I started reaching out to everyone in the community around me both in my home city, and in various communities on the internet. I got a lot of advice from people in all lines of business, and eventually I was connected with David Cohen at <a href="http://www.techstars.org">TechStars</a>. Techstars is a company that specializes in getting startup businesses off the ground by giving chosen businesses an instant network of mentors and contacts in the tech industry. </p>
<p>Since our initial contact, I&#8217;ve spoken with a number of people from Techstars, including some who have been through program in previous years, and I&#8217;ve applied to be in the 2009 program. I&#8217;ve since been invited to go down to Boulder, CO where they are based for a meet-and-greet called &#8220;TechStars for a Day&#8221;, which takes place on March 3rd. I&#8217;ve accepted, and I am looking forward to meeting everyone involved and getting a good grasp of what the program might actually be like. </p>
<h2>Partnership</h2>
<p>I&#8217;ve known for a long time that having a partner would have sped up every aspect of getting Vanilla 2 off the ground. When I first started reaching out to the community for help and advice a number of months ago, I found that almost everyone I spoke to (investors, business owners, everyone at techstars, etc) went a step further to say that having a business partner (or partners) isn&#8217;t just a nice-to-have, but really is a must-have if you want to be successful. There is simply too much work for one person to do all by him/herself, and your chances for success increase immeasurably with partners. </p>
<p>When I began to think seriously about what I would look for in a business partner, there were three criteria that were absolutely necessary: commitment, knowledge, and trust. The first two: commitment to the project, and knowledge (either in programming, finance, or marketing) are pretty easy to find. I can look at any of the big names (I&#8217;m not going to name names) from the Lussumo community and they fall into that category. But the third requirement, trust, is a lot harder to find. Trust can only be gained over time interacting with someone. This really limited me down to friends and colleagues that I know and/or work with in-real-life. The list was short, so I started contacting those people to see if they had any interest in joining me for this journey.</p>
<p>At the time of this writing, one of my oldest friends and work colleagues is weighing out his options, but it looks like he is going to come on board and help me get this thing off the ground. He is a programmer (he actually used to be my boss when I first started programming many many years ago), and will bring a great deal of  knowledge to the table in many areas beyond just the code. That being said, I am still open to considering other people from other skill sets (finance &#038; marketing, preferrably) who might be interested in speaking about the road ahead for getting Garden &#038; Vanilla 2 off the ground and into the world of making money. So, consider this an open call to anyone interested to drop me an email and see where it takes us (mark at lussumo dot com).</p>
<h2>Next</h2>
<p>The coming weeks will be hectic as I forge ahead with new work contracts, head out to Boulder to meet everyone at TechStars, and frantically try to get the remaining work done on the framework and Vanilla 2 in whatever spare time is left over. I was hoping that there would be a beta online already for people to play with, but it just doesn&#8217;t seem to be in the cards yet. All I can say is that I&#8217;m doing the best I can with the limited amount of time that I&#8217;ve got, and I&#8217;m sure the same goes for all of those people out there who are jumping in and helping with various other parts of the launch (you know who you are).</p>
<p>Keep your syndication compilers pointed at this blog and I&#8217;ll post anything new as it comes to me!</p>
]]></content:encoded>
			<wfw:commentRss>http://markosullivan.ca/garden-vanilla-2-status/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Garden Preview XV: Modules</title>
		<link>http://markosullivan.ca/garden-preview-xv-modules/</link>
		<comments>http://markosullivan.ca/garden-preview-xv-modules/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 19:27:17 +0000</pubDate>
		<dc:creator>Mark</dc:creator>
				<category><![CDATA[Garden]]></category>

		<guid isPermaLink="false">http://markosullivan.ca/blog/?p=479</guid>
		<description><![CDATA[Garden Preview Part I: Overview Garden Preview Part II: Filesystem Garden Preview Part III: Anatomy of a Request Garden Preview Part IV: Views Garden Preview Part V: Data Garden Preview Part VI: Models &#038; Forms Garden Preview Part VII: Ajax Garden Preview Part VIII: Plugins Garden Preview Part IX: Roles &#038; Permissions Garden Preview Part [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://markosullivan.ca/blog/?p=231">Garden Preview Part I: Overview</a><br />
<a href="http://markosullivan.ca/blog/?p=251">Garden Preview Part II: Filesystem</a><br />
<a href="http://markosullivan.ca/blog/?p=275">Garden Preview Part III: Anatomy of a Request</a><br />
<a href="http://markosullivan.ca/blog/?p=291">Garden Preview Part IV: Views</a><br />
<a href="http://markosullivan.ca/blog/?p=310">Garden Preview Part V: Data</a><br />
<a href="http://markosullivan.ca/blog/?p=326">Garden Preview Part VI: Models &#038; Forms</a><br />
<a href="http://markosullivan.ca/blog/?p=347">Garden Preview Part VII: Ajax</a><br />
<a href="http://markosullivan.ca/blog/?p=360">Garden Preview Part VIII: Plugins</a><br />
<a href="http://markosullivan.ca/blog/?p=373">Garden Preview Part IX: Roles &#038; Permissions</a><br />
<a href="http://markosullivan.ca/blog/?p=397">Garden Preview Part X: User Registration</a><br />
<a href="http://markosullivan.ca/blog/?p=419">Garden Preview Part XI: Structure</a><br />
<a href="http://markosullivan.ca/blog/?p=428">Garden Preview Part XII: Internationalization &#038; Localization</a><br />
<a href="http://markosullivan.ca/blog/?p=443">Garden Preview Parth XIII: Syndication</a><br />
<a href="http://markosullivan.ca/blog/?p=463">Garden Preview Parth XIV: Errors &#038; Debugging</a></p>
<p>Views are used to define the main content of a page (ie. a list of discussions, a user profile, etc), but what about all of the other supplementary elements on a page? How does Garden handle adding buttons, menus, and all of the sundry elements that make any page complete? <strong>Modules</strong>.</p>
<p>Modules are extremely simple classes that have one purpose: return a string. That string can really be anything you want, but typically it will be a string of xhtml that is to be added to any of the asset containers defined in the master view. </p>
<p>Garden comes with a number of predefined modules, such as:</p>
<p><strong>HeadModule</strong>: Allows the addition of tags to the head of the document, like link (css) tags, script tags, meta tags, etc.<br />
<strong>MenuModule</strong>: Used to build a hierarchical menu that can then be manipulated to do a number of different tasks. For example, it is used for the main menu of Garden that includes hover-driven dropdown items, and it also is used for the main settings page as a sidebar menu.<br />
<strong>EditInPlaceModule</strong>: Can be added to any page in the sidebars, header, or footer and allows administrators to put anything they want into that page by editing the content block in-place.</p>
<p>Vanilla comes with a bunch of different modules as well, like:</p>
<p><strong>BookmarkModule</strong>: contains a sidebar-sized list of discussions that the user has bookmarked.<br />
<strong>CategoriesModule</strong>: contains a sidebar-sized list of categories, with the currently-viewed category highlighted.</p>
<p>There are actually a lot more modules than that, but I don&#8217;t want to give too much away about the new functionality in Vanilla.</p>
<h2>How Modules Work</h2>
<p>As previously stated, modules really only have one purpose, and that is to return a string which can then be added to an asset container and placed in the page. All modules are extended from the base Module class, which is an implementation of the IModule interface. The interface is quite simple:</p>
<pre>interface IModule {

   /// &lt;summary>
   /// Class constructor, requires the object that is constructing the module.
   /// &lt;/summary>
   /// &lt;param name="Sender" type="object">
   /// The controller that is building the module.
   /// &lt;/summary>
   public function __construct($Sender);

   /// &lt;summary>
   /// Returns the name of the asset where this component should be rendered.
   /// &lt;/summary>
   public function AssetTarget();

   /// &lt;summary>
   /// Returns the xhtml for this module as a fully parsed and rendered string.
   /// &lt;/summary>
   public function FetchView();

   /// &lt;summary>
   /// Returns the location of the view for this module in the filesystem.
   /// &lt;/summary>
   /// &lt;param name="View" type="string" required="false" default="The name of the module">
   /// The name of the view to search for. If not provided, the name of the module (minus "module") will be used.
   /// &lt;/summary>
   /// &lt;param name="ApplicationFolder" type="string" required="false" default="The application folder of the controller that built this module">
   /// The application folder that the view should be found within. If not provided, the application folder of the controller that constructed this module will be used.
   /// &lt;/summary>
   public function FetchViewLocation($View = '', $ApplicationFolder = '');

   /// &lt;summary>
   /// Returns the name of the module.
   /// &lt;/summary>
   public function Name();

   /// &lt;summary>
   /// Returns the module as a string to be rendered to the screen.
   /// &lt;/summary>
   public function ToString();
}</pre>
<p>Modules can be added to the page in a number of different ways, but the easiest way is to use the base controller class&#8217; AddModule method. Modules do not even need to be instantiated before being added with this method. If the name of a module is provided, the method will handle creating an instance of the module class and calling it&#8217;s <code>ToString()</code> method in order to get the module&#8217;s xhtml and add it to the appropriate asset container (as defined by IModule::AssetTarget()). The <code>Controller::AddModule()</code> method also gives you some extra control by allowing you to override the default asset target of the module. That method is defined as:</p>
<pre>/// &lt;summary>
/// Adds the specified module to the specified asset target. If no asset
/// target is defined, it will use the asset target defined by the module's
/// AssetTarget method.
/// &lt;/summary>
/// &lt;param name="Modules" type="mixed">
/// An instance of a module or the name of a module to add to the page.
/// &lt;/param>
public function AddModule($Module, $AssetTarget = '') {}</pre>
<p>Some modules might be as simple as returning a static string of xhtml (like a &#8220;New Discussion&#8221; button for the sidebar in Vanilla, for example), and others might need a lot more information or have a number of different methods which allow developers to manipulate them before returning their xhtml (like the MenuModule, which allows you to add different menu options based on a myriad of criteria, like permissions, session state, etc). So, in some cases you may want to instantiate a module and then fire an event so plugin authors can manipulate it before rendering, and in other cases you may just want to call the controller&#8217;s AddModule method with the module name as a parameter.</p>
<p>Any module you create can do anything you want, and you can add as many different properties and methods to it as you like to suit your purposes. As long as it is extended from the Module class and contains the methods defined in the IModule interface, it will function properly.</p>
<h2>Theme-ing Modules</h2>
<p>Of course it may be necessary for theme authors to edit the xhtml of a module. Depending on the complexity of the xhtml returned by their module, module authors have the choice of creating a view and placing it in their application&#8217;s view folder (in a &#8220;modules&#8221; directory), or not using a view file at all, and just returning the xhtml directly from the ToString method of their module. For example, here is the list of modules and their related views in Vanilla 2 (I&#8217;ve blurred the names of some modules in order to keep some of the new features in Vanilla 2 secret):</p>
<p><center><img src="http://markosullivan.ca/blog/wp-content/uploads/2009/02/modules1.gif" alt="modules" title="modules" width="256" height="510" class="alignnone size-full wp-image-483" /></center></p>
<p>In the above image, the two short-blurred modules do not have associated views, but all of the other modules do.</p>
<h2>Organizing Modules</h2>
<p>Okay, so we&#8217;ve now got a way to add just about anything, anywhere, on any screen we want. How can we organize those modules on the page? For example, if I&#8217;m adding a bunch of different modules to the sidebar of the discussion page in Vanilla, how can I make sure that, for example, the &#8220;Start a New Discussion&#8221; button is at the top of that sidebar? Obviously, I could make sure that I add that module to the page *first* when I am coding the application, but what if you don&#8217;t want that button to be at the top of the sidebar in <em>*your*</em> installation?</p>
<p>I&#8217;ve created a modules.php file in the conf folder that handles organizing the order that modules appear in their various asset containers on specific pages. It is a simple associative array that appears as:</p>
<pre>$Modules['ModuleSortContainerName']['AssetContainerName'] = 'ModuleName';</pre>
<p>Every Controller class has a &#8220;ModuleSortContainer&#8221; property. This property allows a controller (or collection of controllers) to represent the same &#8220;container&#8221; for modules. For example, the main settings page for Garden allows you to see all of the various configuration options that are available: Application management, role management, user management, etc. Vanilla also has it&#8217;s own settings pages which appear in the sidebar menu on the garden settings pages (and vice versa). To the end user, it appears as though they are always in a &#8220;Settings&#8221; area whether they are looking at one of the garden settings pages (/garden/settings/applications, for example) or one of the vanilla settings pages (/vanilla/settings/categories, for example). So, both Garden&#8217;s settings controller and Vanilla&#8217;s settings controller use the same ModuleSortContainer name.</p>
<p>The AssetContainerName is really just the name of the asset that the module has been added to.</p>
<p>So, for example, if I want to sort the modules that appear in the panel of the discussions page in Vanilla, here is how they would appear in my conf/modules.php file:</p>
<pre>// Discussions Panel Order
$Modules['Discussions']['Panel'][] = 'NewDiscussionModule';
$Modules['Discussions']['Panel'][] = 'CategoriesModule';
$Modules['Discussions']['Panel'][] = 'BookmarkedModule';
$Modules['Discussions']['Panel'][] = 'ThisModuleDoesntExist';</pre>
<p>So, in order for this code to work, I would have had to define my DiscussionController&#8217;s ModuleSortContainer property as: &#8220;Discussions&#8221;. I did this in my DiscussionController&#8217;s class constructor.</p>
<p>With this code in place, it doesn&#8217;t matter what order the modules were actually added to the page programmatically. Furthermore, it doesn&#8217;t matter if the list contains a module that doesn&#8217;t exist (like the &#8220;ThisModuleDoesntExist&#8221; item in the list). If a module doesn&#8217;t exist, it will simply be ignored. So, this can be handy for making sure that modules which were added via plugins can be ordered regardless of whether the plugin is enabled or not.</p>
<h2>Conclusion</h2>
<p>My goal is to eventually have a page in the Garden settings area where you can drag &#038; drop your modules to order them on the various pages they appear. I don&#8217;t think I will get that far for launch, but you never know. It will definitely come later if it doesn&#8217;t make it into the launch code. </p>
<p>Furthermore, I&#8217;d like it to go so far as allowing administrators to grab modules from a toolbox and drag/drop them to different pages so they can do things like: add an editinplace module to the header of a page and throw a banner ad in there, or add a &#8220;WhosOnline&#8221; module to their main homepage, etc.</p>
<p>One final note: I briefly considered calling them &#8220;controls&#8221;, but I didn&#8217;t want people to confuse them with controls from Vanilla 1, as they are different beasts entirely. In the end, &#8220;module&#8221; was the first word that came to mind.</p>
]]></content:encoded>
			<wfw:commentRss>http://markosullivan.ca/garden-preview-xv-modules/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

