<?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>Floorplanner Tech Blog &#187; Collaboration</title>
	<atom:link href="http://techblog.floorplanner.com/category/collaboration/feed/" rel="self" type="application/rss+xml" />
	<link>http://techblog.floorplanner.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 19 Nov 2009 04:00:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Unproject with useProjectionMatrix = true</title>
		<link>http://techblog.floorplanner.com/2009/04/29/unproject-with-useprojectionmatrix-true/</link>
		<comments>http://techblog.floorplanner.com/2009/04/29/unproject-with-useprojectionmatrix-true/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 00:45:40 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Flash+ActionScript]]></category>
		<category><![CDATA[Floorplanner]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[unproject]]></category>

		<guid isPermaLink="false">http://techblog.floorplanner.com/?p=580</guid>
		<description><![CDATA[I just updated Papervision3D to allow the CameraObject3D#unproject method to work when CameraObject3D#useProjectionMatrix = true.
Papervision3D has two methods of &#8216;projecting&#8217; vectors onto the screen:

useProjectionMatrix = false, this is the default &#8216;fast&#8217; method
useProjectionMatrix = true, this is the method where projection is done by a matrix

Note that Papervision3D switches to method #2 in &#8216;ortho mode&#8217;.
So what [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2009%2F04%2F29%2Funproject-with-useprojectionmatrix-true%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2009%2F04%2F29%2Funproject-with-useprojectionmatrix-true%2F" height="61" width="51" /></a></div><p>I just updated <a href="http://blog.papervision3d.org">Papervision3D</a> to allow the CameraObject3D#unproject method to work when CameraObject3D#useProjectionMatrix = true.</p>
<p>Papervision3D has two methods of &#8216;projecting&#8217; vectors onto the screen:</p>
<ol>
<li>useProjectionMatrix = false, this is the default &#8216;fast&#8217; method</li>
<li>useProjectionMatrix = true, this is the method where projection is done by a matrix</li>
</ol>
<p>Note that Papervision3D switches to method #2 in &#8216;ortho mode&#8217;.</p>
<p>So what is the difference exactly between these two kinds of projection? First we need to define what projection is. Projection is what adds &#8216;perspective&#8217; to a scene and makes sure your scene fits to the viewport. Its the last step in the so-called &#8216;render pipeline&#8217;. </p>
<p>We can derive the &#8216;fore shortening&#8217; effect of perspective in several ways. Method #1 is simple, effective and fast. It uses the camera&#8217;s focus and zoom values. Method #2 uses a more classic way of projection : it uses a dedicated matrix. Tech buffs: very much like OpenGL&#8217;s <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml">gluPerspective</a>.</p>
<p><a href="http://blog.zupko.info/">Andy Zupko</a> has a great <a href="http://blog.zupko.info/?p=143">post</a> on unproject using method #1.</p>
<p>We will discuss unproject using method #2, which works slightly different.</p>
<p>The difference is that when #useProjectionMatrix is set to true, then CameraObject3D#unproject  returns a point in world-space, rather then a ray. Let me explain with some code:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="actionscript3" style="font-family: Monaco,monospace;"><span style="color: #009900;">// we want to use a projection matrix</span>
camera.useProjectionMatrix = <span style="color: #0033ff; font-weight: bold;">true</span>;
&nbsp;
<span style="color: #009900;">// '0' indicates we want a point on the near plane</span>
<span style="color: #6699cc; font-weight: bold;">var</span> pointOnNearPlane <span style="color: #000000; font-weight: bold;">:</span> Number3D = camera.unproject<span style="color: #000000;">&#40;</span> screenX, screenY, <span style="color: #000000; font-weight:bold;">0</span> <span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #009900;">// '1' indicates we want a point on the far plane</span>
<span style="color: #6699cc; font-weight: bold;">var</span> pointOnFarPlane <span style="color: #000000; font-weight: bold;">:</span> Number3D = camera.unproject<span style="color: #000000;">&#40;</span> screenX, screenY, <span style="color: #000000; font-weight:bold;">1</span> <span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #009900;">// Construct the ray's direction</span>
<span style="color: #6699cc; font-weight: bold;">var</span> dir <span style="color: #000000; font-weight: bold;">:</span> Number3D = Number3D.sub<span style="color: #000000;">&#40;</span> pointOnFarPlane, pointOnNearPlane <span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #009900;">// Normalize</span>
dir.<span style="color: #004993;">normalize</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #009900;">// So, now you have a ray with its origin at 'pointOnNearPlane',</span>
<span style="color: #009900;">// and direction 'dir'</span></pre></td></tr></table></div>

<p>Optimization: could save some cycles by doing (*not* in ortho mode!, see below):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="actionscript3" style="font-family: Monaco,monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> camPosition <span style="color: #000000; font-weight: bold;">:</span> Number3D = <span style="color: #0033ff; font-weight: bold;">new</span> Number3D<span style="color: #000000;">&#40;</span> camera.<span style="color: #004993;">x</span>, camera.<span style="color: #004993;">y</span>, camera.z <span style="color: #000000;">&#41;</span>;
<span style="color: #009900;">// Construct the ray's direction</span>
<span style="color: #6699cc; font-weight: bold;">var</span> dir <span style="color: #000000; font-weight: bold;">:</span> Number3D = Number3D.sub<span style="color: #000000;">&#40;</span> pointOnFarPlane, camPosition <span style="color: #000000;">&#41;</span>;
<span style="color: #009900;">// Normalize</span>
dir.<span style="color: #004993;">normalize</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #009900;">// So, now you have a ray with its origin at the camera's position</span>
<span style="color: #009900;">// and direction 'dir'</span></pre></td></tr></table></div>

<p>Why can&#8217;t we use above optimization in ortho mode?<br />
In perspective mode all &#8216;rays&#8217; originate from the camera&#8217;s position: the &#8216;view cone&#8217; has shape of a pyramid. Hence we can assume &#8216;pointOnNearPlane&#8217; to coincide with the camera&#8217;s position.<br />
In ortho mode however the &#8216;view cone&#8217; has the shape of a cube, all rays are parallel. Hence we need to unproject *two* points to construct our ray.</p>
<p>Now simply follow <a href="http://blog.zupko.info/?p=143">Andy Zupko &#8217;s post</a> to drag objects around.<br />
Or perform &#8216;picking&#8217;, or&#8230;</p>
<p>Update:<br />
Created a little demo to visualize what I&#8217;m ranting about, check it out <a href='http://techblog.floorplanner.com/wp-content/uploads/2009/04/unprojecttest1.swf'>here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2009/04/29/unproject-with-useprojectionmatrix-true/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Counter feedback</title>
		<link>http://techblog.floorplanner.com/2009/03/28/counter-feedback/</link>
		<comments>http://techblog.floorplanner.com/2009/03/28/counter-feedback/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 16:32:14 +0000</pubDate>
		<dc:creator>Willem van Bergen</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[counter]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[Floorplanner]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[quality improvement]]></category>
		<category><![CDATA[request-log-analyzer]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://techblog.floorplanner.com/?p=561</guid>
		<description><![CDATA[
This week, request-log-analyzer obtained its 100th watcher on GitHub!
Bart and I have worked hard to make r-l-a a useful product for many people in various situations. The fact that more than 100 people are following the project&#8217;s progress and that at this moment, the gem has been download almost 200 times, shows that we are [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2009%2F03%2F28%2Fcounter-feedback%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2009%2F03%2F28%2Fcounter-feedback%2F" height="61" width="51" /></a></div><p><a style="float: right" href="http://github.com/wvanbergen/request-log-analyzer/watchers"><img class="size-full wp-image-568 alignright" style="border: 1px solid black;" title="102 request-log-analyzer watchers on Github and counting!" src="http://techblog.floorplanner.com/wp-content/uploads/2009/03/picture-2.png" alt="Request-log-analyzer watchers on Github" width="161" height="26" /></a></p>
<p>This week, <a href="http://github.com/wvanbergen/requets-log-analyzer">request-log-analyzer</a> obtained <a href="http://github.com/wvanbergen/request-log-analyzer/watchers">its 100th watcher on GitHub</a>!</p>
<p>Bart and I have worked hard to make r-l-a a useful product for many people in various situations. The fact that more than 100 people are following the project&#8217;s progress and that at this moment, <a href="http://gems.rubyforge.org/stats.html">the gem has been download almost 200 times</a>, shows that we are somewhat successful in this regard. Numbers like these, in combination with the e-mail messages we have received, motivate us to keep spending time on the project and keep improving it, even if these improvements are not directly useful for our own projects. It has grown beyond <em>scratching our own itch</em>. </p>
<p>On a related note, <a href="http://www.flickr.com/photos/willemvanbergen">my Flickr photostream</a> recently welcomed its 10,000th visitor.</p>
<p style="text-align: center; "><a href="http://www.flickr.com/photos/willemvanbergen"><img class="size-full wp-image-562 aligncenter" style="border: 1px solid black;" title="10,000 visitors on my Flickr photostream!" src="http://techblog.floorplanner.com/wp-content/uploads/2009/03/picture-1.png" alt="10,000 visitors on my Flickr photostream!" width="502" height="84" /></a></p>
<p>What started as a convenient utility to backup and share <a href="http://www.flickr.com/photos/willemvanbergen/collections/72157600336728559/">my holiday photos</a> with my family and friends, now has become somewhat of a showcase of <a href="http://www.flickr.com/photos/willemvanbergen/sets/72157601618255001/">what I</a> <a href="http://www.flickr.com/photos/willemvanbergen/sets/72157594253547759/">am about</a> and <a href="http://www.flickr.com/photos/willemvanbergen/collections/72157607936471141/">what I</a> <a href="http://www.flickr.com/photos/willemvanbergen/sets/72157613466104360/">am up to</a>. I would not consider myself a &#8220;professional&#8221; photographer and I am not an active member of the Flickr community, but still I get feedback on my photographs by visitors, because their visits increase the view counters of my photos.</p>
<p>These counters have really motivated me to make more of an effort when I put photos on Flickr. I started by adding titles, descriptions and tags, so that my photos are easier to find. I also became much more critical of the pictures I upload to Flickr: new uploads have to add something significant to my collection. Analyzing why some pictures got more attention than others made me a better photographer, although there still is a lot of room for improvement. <img src='http://techblog.floorplanner.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </p>
<h3>Ignite the lazyweb, kick-start a quality improvement loop</h3>
<p>What interests me in these examples is that simple counters like watchers on GitHub or views on Flickr can be valuable feedback and can motivate people to put in effort. The end result is quality improvement: write better software, make better pictures, etc.. Even an inherently lazy person like me can get motivated to keep putting in effort and to keep improving myself, because of such a simple feedback loop! <img src='http://techblog.floorplanner.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Additionally, it creates a dependence on the website in question. I look at my Flickr stats page every day, and I am subscribed to my activity feed on GitHub to get notified when new people start watching my projects. I now<em> </em>simply have to publish tools I write on GitHub to boost its quality, immediately and in the long run. And I have to upload pictures to Flickr as it is vital for my photography learning curve.</p>
<p>I guess I finally figured out what Web 2.0 is all about! <img src='http://techblog.floorplanner.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Can we use a similar technique on Floorplanner to boost the quality of the designs our visitors make?</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2009/03/28/counter-feedback/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git vs SVN for bosses</title>
		<link>http://techblog.floorplanner.com/2008/12/09/git-vs-svn-for-bosses/</link>
		<comments>http://techblog.floorplanner.com/2008/12/09/git-vs-svn-for-bosses/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 23:56:13 +0000</pubDate>
		<dc:creator>jaap</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://techblog.floorplanner.com/?p=300</guid>
		<description><![CDATA[We switched to Git this morning. Before making this switch Gert-Jan (CTO of Floorplanner) asked me: &#8220;what is the advantage of Git over Subversion?&#8221;. I answered him and thought I&#8217;ll make a post of the answer as it can be useful for other bosses like Gert-Jan.
Since we started using Subversion, which was a couple of [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F12%2F09%2Fgit-vs-svn-for-bosses%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F12%2F09%2Fgit-vs-svn-for-bosses%2F" height="61" width="51" /></a></div><p>We switched to Git this morning. Before making this switch Gert-Jan (CTO of Floorplanner) asked me: &#8220;what is the advantage of Git over Subversion?&#8221;. I answered him and thought I&#8217;ll make a post of the answer as it can be useful for other bosses like Gert-Jan.</p>
<p>Since we started using Subversion, which was a couple of years ago, using a code versioning tool helped us a lot. We could work on Floorplanner with the whole team together without storing the &#8220;repository&#8221; on our remote FTP location (early days) or emailing changes up and forth (ancient times <img src='http://techblog.floorplanner.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ). But when working with Subversion for some time, little things started to bother, i&#8217;ll sum them up:</p>
<p>1. We needed tutorials for creating a branch in SVN every time again<br />
2. When merging the branch back, SVN didn&#8217;t know where that branch started.<br />
3. When merging the branch back, each change was recorded back as the user who did the merge.</p>
<h3>The consequences of these disadvantages.</h3>
<p>We avoided creating branches.</p>
<h3>Why is not creating branches bad practice?</h3>
<p>I&#8217;ll give you an example. Sometimes when we were working on some big feature, we didn&#8217;t create a branch (it was a lot of work), we just committed it into the trunk when it was &#8220;kinda&#8221; ready. Then a sudden exception in the software that was online occurred, we now had a problem! That bug had to be fixed NOW, but the changes we just committed into the trunk were not fully tested and couldn&#8217;t go online. You understand this was a tedious process and resulted in more downtime sometimes.</p>
<h3>But why is Git better?</h3>
<p>1. Creating branches in Git is a lot easier than doing this in SVN.<br />
2. Git keeps track where branches come from. So when creating a branch, merging back is very simple.<br />
3. It keeps commit messages intact, when merging.</p>
<h3>Conclusion</h3>
<p>The whole point, remember this post is called &#8220;Git vs SVN for bosses&#8221;, branching is a joy in Git and this results in better being able to have access to different versions of the same software at the same time, which again results in being able to fix that bug NOW.</p>
<h4>Other resources</h4>
<p><a title="Git SVN Comparison" href="http://git.or.cz/gitwiki/GitSvnComparsion">http://git.or.cz/gitwiki/GitSvnComparsion</a></p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2008/12/09/git-vs-svn-for-bosses/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Remote branches in git</title>
		<link>http://techblog.floorplanner.com/2008/09/13/remote-branches-in-git/</link>
		<comments>http://techblog.floorplanner.com/2008/09/13/remote-branches-in-git/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 13:26:11 +0000</pubDate>
		<dc:creator>Willem van Bergen</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[branches]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[merging]]></category>
		<category><![CDATA[remote]]></category>

		<guid isPermaLink="false">http://techblog.floorplanner.com/?p=165</guid>
		<description><![CDATA[I have been using git for a while now, and I believe I have the the basic workflow under control.  Committing, reverting, using local branches for major refactoring work: been there, done that!   However, I recently got some collaborators on my github-projects, I had to start working with other remote repositories and [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F09%2F13%2Fremote-branches-in-git%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F09%2F13%2Fremote-branches-in-git%2F" height="61" width="51" /></a></div><p>I have been using git for a while now, and I believe I have the the basic workflow under control.  Committing, reverting, using local branches for major refactoring work: been there, done that! <img src='http://techblog.floorplanner.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  However, I recently got some collaborators on <a href="http://github.com/wvanbergen/">my github-projects</a>, I had to start working with other remote repositories and branches. </p>
<p>I found <a href="http://blog.ericgoodwin.com/2008/4/6/pushing-and-pulling-branches-on-github">this blog post</a>, which was really helpful. I am sharing some others things that helped me in the last couple of weeks. Hopefully, this saves other people some time Googling. If you know a better ways to accomplish these tasks, please let me know!</p>
<h3> Things to remember about remote branches </h3>
<p>Because I had some troubles discovering how to properly work with remote repositories, I am sharing what I found. The most important things to remember:</p>
<ul>
<li>Your local branches are not really connected to the remote branches. It is therefore possible to mix up branches, but this is usually not what you want <img src='http://techblog.floorplanner.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>Never forget to switch to the correct local branch (using <code>git checkout <em>local-branch</em></code>.</li>
<li> The names of the local and remote do not need to match.</li>
<li> Before you can push changes from a local branch to a remote branch, all the commits of the remote branch have to be included in your local branch. This can be done using by executing <code>git pull <em>remote-name</em> <em>remote-branch</em></code> in your local branch.
</ul>
<h3> Checking out a newly created branch in a remote repository </h3>
<p><a href="https://github.com/barttenbrinke">Bart</a> is implementing Merb log parsing for <a href="https://github.com/wvanbergen/request-log-analyzer">request-log-analyzer</a>. He has put his progress in a separate branch of the github project. My local repository does not yet include this branch, but I want to check it out. Note that I am using a different name than the branch name on the github project.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family: Monaco,monospace;">$ git branch merb origin/generic_base
$ git checkout merb</pre></div></div>

<p>When the new functionality is finished, the following commands will merge the changes in the merb branch to the master branch.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family: Monaco,monospace;">  # goto my local master branch and merge the merb-branch
$ git checkout master
$ git merge merb
&nbsp;
  # push the changes to the master branch on github
$ git push origin master</pre></div></div>

<h3> Merging back a fork </h3>
<p><a href="http://github.com/gbdev">Wes Hays</a> is helping me out on the <a href="http://github.com/wvanbergen/scoped_search">scoped_search plugin</a>. He implemented <code>OR</code> in the query language in his <a href="http://github.com/gbdev/scoped_search/tree/master">own fork</a>. I wanted to merge his changes back to master branch:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family: Monaco,monospace;">  # add a reference to the remote repository
$ git remote add gbdev git://github.com/gbdev/scoped_search.git
&nbsp;
  # create a local branch for the fork to follow a remote branch
$ git branch gbdev-fork gbdev/master
$ git checkout gbdev-fork</pre></div></div>

<p>Now, my local <strong>gbdev-fork</strong> branch contains Wes&#8217;s code. Because Wes&#8217;s repository was forked from my repository, git will know that most of the history of my <code>master</code> branch and <code>gbdev-fork</code> branch is the same. </p>
<p>After some testing, I was ready to include his changes by merging the <code>gbdev-fork</code> branch into my local master branch:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family: Monaco,monospace;">  # go back to my master branch, and merge the changes
$ git checkout master
$ git merge gbdev-fork
  # push the changes to the master branch at hithub
$ git push origin master</pre></div></div>

<h3> Pushing tags to a remote repository </h3>
<p>You can create tags locally, but you probably want to send them to the remot repository as well:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family: Monaco,monospace;">  # create a local tag &quot;tagname&quot; with the given message.
$ git tag -a &quot;tagname&quot; -m &quot;message&quot; 
  # send your tags to the remote repository &quot;origin&quot;
$ git push origin --tags</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2008/09/13/remote-branches-in-git/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Using git-svn</title>
		<link>http://techblog.floorplanner.com/2008/07/11/using-git-svn/</link>
		<comments>http://techblog.floorplanner.com/2008/07/11/using-git-svn/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 14:49:06 +0000</pubDate>
		<dc:creator>Willem van Bergen</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[git-svn]]></category>
		<category><![CDATA[source code management]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://techblog.floorplanner.com/?p=91</guid>
		<description><![CDATA[I personally am a fan of the git version control system. The best part of git is its speed, and the simplicity of using local branches.
Local branches are very helpful if you are working on different features at the same time but want to keep them apart. An example: it happens all the time that [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F07%2F11%2Fusing-git-svn%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F07%2F11%2Fusing-git-svn%2F" height="61" width="51" /></a></div><p>I personally am a fan of the <em>git</em> version control system. The best part of git is its speed, and the simplicity of using local branches.</p>
<p>Local branches are very helpful if you are working on different features at the same time but want to keep them apart. An example: it happens all the time that I am working on some feature and than I have to put my current work aside to work on a high priority issue. Once this issue is solved, I need to commit the changes and usually do a deploy of the web application so that the problem is solved as soon as possible. With Subversion, I sometimes commit files that were part of the unfinished feature I was working on before I started on the high priority issue. If I am not careful and deploy those files, unfinished work will be put into production and this can go horribly wrong, like every page request returning a 500-error of our high traffic site <img src='http://techblog.floorplanner.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> .</p>
<p>Using git, I can put my current work aside easily by using <code>git stash</code>. When I am finished with the high priority issue, I can revert to my previous work with <code>git stash apply</code>. </p>
<p>Another option: branching the project (using <code>git branch <em>feature</em></code>) if the feature I am working on is invasive and than switch branches for high priority issues using <code>git checkout master</code>. I can go back to the <em>feature</em> branch with <code>git checkout <em>feature</em></code>, followed by <code>git merge master</code> to merge back the changes I just made in the master branch. Branching and merging is very fast in git and merging is not the PITA like it is in Subversion.</p>
<p>However, our main code repository will probably remain in SVN for now. Luckily for me, I can use <em>git-svn</em> locally to profit from these advantages. I found <a href="http://www.aidanf.net/blog/2007/12/10/using-git-offline-commits-subversion-repository">an informative page</a> on installing and getting started with git-svn on OSX. If you know Subversion, <a href="http://git.or.cz/course/svn.html">this page</a> is helpful to translate Subversion commandos to their git alternatives.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2008/07/11/using-git-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RAPIDoc Rails Rest Api documentation generation, well just RAPIDoc&#8230;</title>
		<link>http://techblog.floorplanner.com/2008/05/07/rapidoc-rails-rest-api-documentation-generation-well-just-rapidoc/</link>
		<comments>http://techblog.floorplanner.com/2008/05/07/rapidoc-rails-rest-api-documentation-generation-well-just-rapidoc/#comments</comments>
		<pubDate>Tue, 06 May 2008 23:02:28 +0000</pubDate>
		<dc:creator>jaap</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rapidoc]]></category>

		<guid isPermaLink="false">http://www.suite75.net/blog/dev/rapidoc-rails-rest-api-documentation-generation-well-just-rapidoc.html</guid>
		<description><![CDATA[Today I setup the first version of a RAPIDoc, a Rest API Rails Documentation Generator and we decided to open source this thing, from now on let&#8217;s call it RAPIDoc. It is a API code generator for Rails, describing your Rest resources. We we&#8217;re looking for a way to fully integrate documentation of our API [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F05%2F07%2Frapidoc-rails-rest-api-documentation-generation-well-just-rapidoc%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F05%2F07%2Frapidoc-rails-rest-api-documentation-generation-well-just-rapidoc%2F" height="61" width="51" /></a></div><p>Today I setup the first version of a RAPIDoc, a Rest API Rails Documentation Generator and we decided to open source this thing, from now on let&#8217;s call it RAPIDoc. It is a API code generator for Rails, describing your Rest resources. We we&#8217;re looking for a way to fully integrate documentation of our API into the code base, like Rdoc does. Rdoc didn&#8217;t suit our needs, cause it has got nothing to do with Rest and resource stuff, so we decided to hack something together and gave it a name: RAPIDoc.</p>
<p><strong>What does it do?</strong><br />
It generates a API controller containing documenation maked up in a special language. It parses controllers you specify, and generates a ApiController with appropriate views for it. This makes it very easy to document a Rest API. For methods you use, and according to ERB templates you specify it generates the views for you. It doesn&#8217;t parse your routes.rb, it was not needed for us, but may be a nice extension for it.</p>
<p>Well how is that RAPI doc looking? Put this in front of a Restful method.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="rake" style="font-family: Monaco,monospace;">=begin rapidoc
url:: /projects
method:: GET
access:: FREE
return:: [JSON|XML] - some project
param:: page:int - the page
param:: per_page:int - max items per page
&nbsp;
Get a list of projects. This method uses pagination. If you want to retreive project 1-10 for example:
/projects?page=1&amp;per_page=10.
=end</pre></td></tr></table></div>

<p>For each resource you specify, a view is created and it is put into the index.</p>
<p>Opensource<br />
It is available from now on on:</p>
<p><a href="http://code.google.com/p/rapidoc/">http://code.google.com/p/rapidoc/</a></p>
<p>If you find it useful and you want to change some things, become a submitter. Ow yeah, just a note: really experimental code</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2008/05/07/rapidoc-rails-rest-api-documentation-generation-well-just-rapidoc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tjoon releases Facebook Application</title>
		<link>http://techblog.floorplanner.com/2007/09/16/tjoon-releases-facebook-application-to-record-and-share-split-screen-videos-with-your-webcam/</link>
		<comments>http://techblog.floorplanner.com/2007/09/16/tjoon-releases-facebook-application-to-record-and-share-split-screen-videos-with-your-webcam/#comments</comments>
		<pubDate>Sun, 16 Sep 2007 16:46:25 +0000</pubDate>
		<dc:creator>jaap</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Off topic]]></category>
		<category><![CDATA[tjoon facebook]]></category>

		<guid isPermaLink="false">http://www.suite75.net/blog/dev/tjoon-releases-facebook-application-to-record-and-share-split-screen-videos-with-your-webcam.html</guid>
		<description><![CDATA[

As Facebook is probably the most viral socal application out there, we couldn&#8217;t stay behind. We developed for Tjoon a Facebook application, this weekend. This application is like the normal website, but with the extension that you can show your recorded videos to all of your Facebook friends and you can also see what your [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2007%2F09%2F16%2Ftjoon-releases-facebook-application-to-record-and-share-split-screen-videos-with-your-webcam%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2007%2F09%2F16%2Ftjoon-releases-facebook-application-to-record-and-share-split-screen-videos-with-your-webcam%2F" height="61" width="51" /></a></div><p><a href="http://www.facebook.com/apps/application.php?id=12238020095"><img src="http://techblog.floorplanner.com/wp-content/uploads/2007/09/tjoon-facebook.jpg" border="0" /></a>
</p>
<p>As Facebook is probably the most viral socal application out there, we couldn&#8217;t stay behind. We developed for <a href="http://www.tjoon.com">Tjoon</a> a Facebook application, this weekend. This application is like the normal website, but with the extension that you can show your recorded videos to all of your Facebook friends and you can also see what your friends recorded.</p>
<p>As you maybe know, we developed <a href="http://www.tjoon.com">Tjoon</a> as a fun project. You can create split screen videos with it. We hope you will like the new addition to Tjoon, the Facebook Tjoon. <a href="http://www.facebook.com/apps/application.php?id=12238020095">Here your can install the Tjoon application.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2007/09/16/tjoon-releases-facebook-application-to-record-and-share-split-screen-videos-with-your-webcam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Experiments with Groove</title>
		<link>http://techblog.floorplanner.com/2005/03/13/experiments-with-groove/</link>
		<comments>http://techblog.floorplanner.com/2005/03/13/experiments-with-groove/#comments</comments>
		<pubDate>Sun, 13 Mar 2005 20:31:55 +0000</pubDate>
		<dc:creator>Jeroen</dc:creator>
				<category><![CDATA[Collaboration]]></category>

		<guid isPermaLink="false">http://www.suite75.net/blog/dev/?p=37</guid>
		<description><![CDATA[Groove is an interesting platform to develop for. With 192-bit encryption, robust storage, and an architecture designed from the ground up for all types of networks, Groove does much of the heavy lifting for developers. Being a company with an inquisitive mind, Suite75 regularly works on various prototypes to explore the possibilities of the Groove [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2005%2F03%2F13%2Fexperiments-with-groove%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2005%2F03%2F13%2Fexperiments-with-groove%2F" height="61" width="51" /></a></div><p>Groove is an interesting platform to develop for. With 192-bit encryption, robust storage, and an architecture designed from the ground up for all types of networks, Groove does much of the heavy lifting for developers. Being a company with an inquisitive mind, Suite75 regularly works on various prototypes to explore the possibilities of the Groove platform. We are especcially interested the sweetspot that lies between Groove&#8217;s private collaboration model and powerful (personal) publishing tools like Weblogs and RSS. </p>
<blockquote><p><i>Blogging tools like Radio Userland and Blogger, along with emerging peer-to-peer platforms like Groove, are evolving into relatively easy-to-use frontends &#8211; back-ended with sophisticated distributed computing technologies like SOAP interfaces, RSS engines, and P-to-P messaging infrastructures</i></p>
</blockquote>
<p>Below you can find links to  some of our Groovy experiments as posted on one of Suite75&#8217;s Weblogs :</p>
<p><a href="http://www.suite75.net/blog/mt/lab/archives/000953.html">Public Groovespace Experiment</a></p>
<p><a href="http://www.suite75.net/blog/mt/Groove/archives/000629.html">The Groovelounge</a></p>
<p><a href="http://www.suite75.net/blog/mt/lab/archives/000827.html">Groove &#8211; Radio Interoptool</a></p>
<p><a href="http://www.suite75.net/blog/mt/Groove/archives/000662.html">Groove Acces Point experiments</a></p>
<p><a href="http://www.suite75.net/blog/mt/Groove/archives/000310.html">Groove HTTP Server</a></p>
<p><a href="http://radio.weblogs.com/0107414/2002/06/24.html">Web to Groove</a></p>
<p><a href="http://radio.weblogs.com/0107414/2002/06/11.html">Groovespace Publisher</a></p>
<p><a href="http://www.suite75.net/blog/mt/Groove/archives/000313.html">Groove POP &#8211; RSS &#8211; SMTP</a></p>
<p><a href="http://www.suite75.net/blog/mt/Groove/archives/000265.html">OPML Export</a></p>
<p>Suite75 developed <a href="http://www.suite75.net/blog/mt/suite75/archives/001351.html">Groovetools</a> and custom solutions for the Groove Platform from 2001 to 2005 and played an active role in the global Groove community. In april 2002 we <a href="http://www.suite75.net/blog/mt/suite75/archives/001397.html">hosted</a> the first worldwide Groove Developer Conference and our <a href="http://www.suite75.net/blog/mt/groove/">Groove Weblog</a> has been one of the best read Groove related websites around. </p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2005/03/13/experiments-with-groove/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CADviewer for Groove</title>
		<link>http://techblog.floorplanner.com/2004/04/30/cadviewer-for-groove/</link>
		<comments>http://techblog.floorplanner.com/2004/04/30/cadviewer-for-groove/#comments</comments>
		<pubDate>Fri, 30 Apr 2004 20:41:11 +0000</pubDate>
		<dc:creator>Jeroen</dc:creator>
				<category><![CDATA[CAD]]></category>
		<category><![CDATA[Collaboration]]></category>

		<guid isPermaLink="false">http://www.suite75.net/blog/dev/?p=38</guid>
		<description><![CDATA[The Suite75 CADviewer is an useful tool for all Groove users who work with CAD-files. The tool lets you review 2D CAD-drawings alone or realtime with other space members.

When &#8220;navigate together&#8221; is on, a space-member will see the same drawing as you. When a member zooms or pans the drawing, all other joined members will [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2004%2F04%2F30%2Fcadviewer-for-groove%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2004%2F04%2F30%2Fcadviewer-for-groove%2F" height="61" width="51" /></a></div><p><img height=116 src="http://www.suite75.net/blog/mt/assets/cadviewsmall.jpg" width=150 align=right border=0>The Suite75 CADviewer is an useful tool for all Groove users who work with CAD-files. The tool lets you review 2D CAD-drawings alone or realtime with other space members.</p>
<p><a name="more"></a></p>
<p>When &#8220;navigate together&#8221; is on, a space-member will see the same drawing as you. When a member zooms or pans the drawing, all other joined members will zoom/pan along in real-time. Collaborative viewing is fast because Groove stores all files locally.<br />
Existing layers can be switched on and off and Xref drawings are supported.</p>
<p>The tool works together with the Groove filestool. It scans all the filestools in that particular Groovespace for compatible visiofiles  and displays them in a treeview in the Visioviewertool. By clicking on the files in the treeview you can display the files. By clicking on the navigate together in the tool you have realtime collaborative capabilities for multiple members in the space.</p>
<p>The CADViewer is based on the Suite75 Shared Viewing Framework and offers real-time shared viewing of DWG/DXF files within a Groove Shared Space. This Framework is designed for a variety of viewers to be used within Groove. Any viewer based on this framework will have functionality like: </p>
<p>-Fast and secure standalone or realtime shared file-viewing <br />
-Auto discovery of all viewable files within a Groove Shared Space. <br />
-Save comments to a Discussion Tool <br />
-Print the current view to any printer</p>
<p>The CADViewer was a free tool for Groove 2.5 , promoting the use of Groove within a design process and showcasing the possibilities of solutions provided by Suite75 for the building industry. </p>
<p>UPDATE :The development of the CADviewer tool has stopped and the tool will NOT be updated in the future</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2004/04/30/cadviewer-for-groove/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Realtime collaborative Wiki in Groove and Flash</title>
		<link>http://techblog.floorplanner.com/2004/02/05/realtime-collaborative-wiki-in-groove-and-flash/</link>
		<comments>http://techblog.floorplanner.com/2004/02/05/realtime-collaborative-wiki-in-groove-and-flash/#comments</comments>
		<pubDate>Thu, 05 Feb 2004 20:30:18 +0000</pubDate>
		<dc:creator>Jeroen</dc:creator>
				<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Flash+ActionScript]]></category>

		<guid isPermaLink="false">http://www.suite75.net/blog/dev/?p=36</guid>
		<description><![CDATA[Tim Knip&#8217;s FlashHyki is a collaborative Wiki based on Flash and Groove.  It offers realtime decentralised collaboration without the need of a server. The Hyki doesn&#8217;t run in the GrooveClient but in a seperate application created using Flash and Flash Studio Pro. All &#8220;cards&#8221; are stored in a Groove filestool using Groove WebServices.

The term [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2004%2F02%2F05%2Frealtime-collaborative-wiki-in-groove-and-flash%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2004%2F02%2F05%2Frealtime-collaborative-wiki-in-groove-and-flash%2F" height="61" width="51" /></a></div><p>Tim Knip&#8217;s FlashHyki is a collaborative Wiki based on Flash and Groove.  It offers realtime decentralised collaboration without the need of a server. The Hyki doesn&#8217;t run in the GrooveClient but in a seperate application created using Flash and Flash Studio Pro. All &#8220;cards&#8221; are stored in a Groove filestool using Groove WebServices.</p>
<p><a name="more"></a></p>
<p>The term Hyki was introduced by <a href="http://www.ozzie.net/blog/2003/07/20.html#a101"><b>Ray Ozzie</b></a> in July 2003</p>
<blockquote><p><i>Has anyone yet attempted to create what I guess I&#8217;d refer to as a &#8220;Hyki&#8221; &#8211; that is, a character-by-character real-time collaborative (Hydra-like, Groove Text Tool-like) editor with automatic creation of real-time linked sub-documents when CamelCase words are typed, etc.  ?? </i></p>
</blockquote>
<p><a href="http://www.cabezal.com/blog/archives/000614.shtml"><b>Hugh Pyle</b></a> immediatly took on the challenge and built a great proof-of-concept which inspired <a href="http://www.suite75.net/blog/mt/tim/archives/001411.html"><b>Tim Knip</b></a> for these explorations on the possibilities of Rich Flashbased tools that can easily work within as well outside the Grooveclient. </p>
<p>Download the FlashHyki <a href="http://www.suite75.net/blog/mt/tim/assets/FlashHyki.exe"><b>here</b></a> (1.4 Mb).</p>
<p><b>DISCLAIMER:</b><br />
- The FlashHyki should never be used in a production environment (ie. where you have any Groove spaces which are important or sensitive). It may have adverse effects. There are no warranties of any kind, and there is no support. Use at your own risk.</p>
<p><b>SYSTEM REQUIREMENTS:</b><br />
- Groove 2.5 or higher<br />
- Latest Flash</p>
<p><b>How does it work?</b><br />
When you startup the FlashHyki you have to specify Account, Space and a Files Tool using the combo-boxes. On first run the HomePage and a temp-folder are created in the FilesTool you specified. Now just start typing whatever you want, the current page will be saved some seconds after you stop typing. Any words written in ‘CamelCase’ are automatically transformed into hyperlinks. After clicking such a hyperlink a new page is added to the FlashHyki and you will be redirected to this new page.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2004/02/05/realtime-collaborative-wiki-in-groove-and-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
