<?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>gnuu.org &#187; yard</title>
	<atom:link href="http://gnuu.org/tag/yard/feed/" rel="self" type="application/rss+xml" />
	<link>http://gnuu.org</link>
	<description>my word against yours, fight.</description>
	<lastBuildDate>Fri, 16 Jul 2010 22:12:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>YARD Object Oriented Diffing</title>
		<link>http://gnuu.org/2010/06/26/yard-object-oriented-diffing/</link>
		<comments>http://gnuu.org/2010/06/26/yard-object-oriented-diffing/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 23:19:52 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[object oriented]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[yard]]></category>

		<guid isPermaLink="false">http://gnuu.org/2010/06/26/yard-object-oriented-diffing/</guid>
		<description><![CDATA[Yesterday I tweeted a bunch about a new command in the upcoming YARD 0.6 release called yard diff which lets you perform object-aware diffs across two versions of a project/library/gem. I wanted to summarize exactly what&#8217;s going on and why I wrote it in a short article on the subject.]]></description>
			<content:encoded><![CDATA[<p>Yesterday I tweeted a bunch about a new command in the upcoming YARD 0.6 release called <code>yard diff</code> which lets you perform object-aware diffs across two versions of a project/library/gem. I wanted to summarize exactly what&#8217;s going on and why I wrote it in a short article on the subject.</p>
<p></p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2010/06/26/yard-object-oriented-diffing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Preview of YARD 0.6 Features</title>
		<link>http://gnuu.org/2010/06/16/preview-of-yard-0-6-features/</link>
		<comments>http://gnuu.org/2010/06/16/preview-of-yard-0-6-features/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 19:37:44 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[0.6]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[yard]]></category>

		<guid isPermaLink="false">http://gnuu.org/2010/06/16/preview-of-yard-0-6-features/</guid>
		<description><![CDATA[YARD 0.5.7 is currently in the works and is possibly a week or so from release. After that version is put out there (pending no serious issues), all &#34;yardwork&#34; will be exclusively dedicated to the 0.6 release. There are some really cool and exciting new features in 0.6, so I felt like blogging about them. [...]]]></description>
			<content:encoded><![CDATA[<p>YARD 0.5.7 is currently in the works and is possibly a week or so from release. After that version is put out there (pending no serious issues), all &quot;yardwork&quot; will be exclusively dedicated to the 0.6 release. There are some really cool and exciting new features in 0.6, so I felt like blogging about them. Let&#8217;s go:</p>
<h2>1. A Local Documentation Server</h2>
<p> <img title="yardoc.org/docs screenshot" alt="yardoc.org/docs screenshot" align="right" src="http://yardoc.org/images/yardocorg.png" width="332" height="233" />
<p>RubyGems has <tt>gem server</tt> to serve static docs of your gems. The problem here, again, is that to get these static .html files we need to force our users to generate docs when the gem installs, and this is often a painfully slow process (especially with behemoths like Rails). YARD takes a different approach to this, only parsing out the source and saving an intermediate dump file when a gem installs. This is pretty fast (~2 seconds under 1.9 for YARD&#8217;s codebase). Not only can a developer use this data to their heart&#8217;s content, but it allows YARD to generate HTML/PDF/LaTeX on demand, and that&#8217;s exactly what 0.6 is going to do.</p>
<p>The <tt>yard server</tt> command coming in 0.6 will generate HTML documentation for gems on demand from the parsed source (perhaps even parsing on demand). This means your CPU will never be used to generate static files that you never look at. If you only need to access 10% of the documentation of 1% of your gems, YARD will only generate that 0.1%. Big win.</p>
<p>Not to mention you get all the benefits a YARD template provides, including full class hierarchy, less obtrusive layouts, markdown support, and even full method/class name searching with the potential of having full-text searching in the future, since this is all running in a Webrick/Rack adapter.</p>
<p>All of this stuff is currently being ported from the existing <a href="http://yardoc.org/docs">yardoc.org/docs</a> site, so it will basically look like that. The existing code is in the <a href="http://github.com/lsegal/yard/tree/docserver">docserver</a> branch of YARD&#8217;s github and is being tracked as <a href="http://github.com/lsegal/yard/issues/issue/139">gh-139</a>.</p>
<h2>2. Method Listing by Groups</h2>
<p> <img title="Mac OSX documentation for NSString" border="0" alt="Mac OSX documentation for NSString" align="right" src="http://gnuu.org/wp-content/uploads/2010/06/image_thumb.png" width="264" height="183" />
<p>We&#8217;ve seen this in Apple&#8217;s docs, doxygen docs and a few others. The ability to organize methods in a large class by functionality rather than alphabet is often far more helpful to your users. YARD 0.6 will be introducing a <tt>@group</tt> freeform tag to identify methods under a specific organizational header which will be used in the templates. Still working on the exact syntax of this one, trying to make it as easy to use and remove as much duplication as possible. This feature is being tracked as <a href="http://github.com/lsegal/yard/issues/issue/143">gh-143</a>.</p>
<h2>3. Generate Documentation for Single File Scripts</h2>
<p>RDoc has a <tt>--one-file</tt> option that is occasionally used for small Ruby scripts. YARD has always lacked this option. Though it&#8217;s kind of simple to roll your own with templates, 0.6 will have built-in templates for generating a single HTML document. Not really sure what it&#8217;s going to look like just yet, but if you have ideas or want to help out, the feature is being tracked as <a href="http://github.com/lsegal/yard/issues/issue/115">gh-115</a>.</p>
<h2>4. New <tt>yard</tt> CLI executable</h2>
<p>YARD is growing into a tool that does much more than just parse source. This means that having a single executable is not enough, and spreading out the functionality over multiple executables is just messy. YARD currently uses the <tt>yard-graph</tt> tool to generate Graphviz dot files. In YARD 0.6, all of these tools, including the new documentation server, will all be merged into a single executable called <tt>yard</tt> with respective subcommands (doc, graph, server, etc.). The goal here is to open this up for plugins to add commands just like they do in RubyGems without resorting to new executable names. And don&#8217;t worry, the <tt>yardoc</tt> executable will probably stick around for legacy support. This feature is being tracked as <a href="http://github.com/lsegal/yard/issues/issue/140">gh-140</a>.</p>
<h2>5. Improved Template APIs</h2>
<p>If you&#8217;ve ever written or overridden a template in YARD you know that it can be hard to figure out what section to override with the <tt>sections</tt> command. YARD has a <tt>sections.place(:foo).before(:bar)</tt> idiom, but it does not help with subsections. In 0.6, the sections will be redesigned from being Array objects to a more proper tree-like structure in order to handle accessing subsections. Now instead of:</p>
<pre><code>def init
  sections.first.last.place(:foo).before(:bar)
end</code></pre>
<p>You will have the ability to do the following:</p>
<pre><code>def init
  sections.first.subsections.place(:foo).before(:bar)
  # or even:
  sections.place(:foo).before_first(:bar)
end</pre>
<p></code></p>
<p>The last method will look for any "bar" inside sections or subsections within the tree. All in all, this should make it more effective to override a template. This feature is being tracked as <a href="http://github.com/lsegal/yard/issues/issue/58">gh-58</a>.</p>
<h2>6. Documentation for DSL Handlers and Other Use Cases</h2>
<p>YARD packs in a lot of functionality, and many users have complained that they had to dig into source to find out how to do some relatively simple things like writing handlers for DSL syntaxes. Although YARD does have documentation on many things, including writing handlers in general, there are few "use-case specific" documents that describe how to do specific things with YARD. 0.6 will introduce improved documentation for some of these use cases, most importantly extending YARD for custom DSL syntaxes. It's possible this may start as a project in the Github Wiki as a set of how-to guides.</p>
<p>So there they are, the major new features coming to 0.6. Let me know if you have any suggestions about other features. And if you have time to donate to the project that would be great, see the above Github issue links and help out. Money would also be appreciated; I wrote YARD because I want to improve docs in the community, not because I want money, but I need to eat. You can donate below:</p>
<p><a href="http://www.pledgie.com/campaigns/940"><img alt="Click here to lend your support to: yard and make a donation at www.pledgie.com !" src="http://www.pledgie.com/campaigns/940.png?skin_name=chrome" border="0" /></a></p>
<p>The release plan for YARD 0.6 is: "soon". It's hard to say when it will be out, but things are certainly rolling in that direction.</p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2010/06/16/preview-of-yard-0-6-features/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visualizing Class Relationships with YARD and InfoVis</title>
		<link>http://gnuu.org/2009/12/18/visualizing-class-relationships/</link>
		<comments>http://gnuu.org/2009/12/18/visualizing-class-relationships/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 05:30:36 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[class diagram]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[visualization]]></category>
		<category><![CDATA[yard]]></category>

		<guid isPermaLink="false">http://gnuu.org/?p=361</guid>
		<description><![CDATA[Note: This post requires an HTML5 capable browser. FF3.5+, Safari, Chrome (or any WebKit browser) will do the trick. That should cover most of my readers. I love visualization toolkits, so when I found out about the JS visualization toolkit InfoVis, I had to play with it. Generally the first thing that comes to mind [...]]]></description>
			<content:encoded><![CDATA[<p class="note"><strong>Note:</strong> This post requires an HTML5 capable browser. FF3.5+, Safari, Chrome (or any WebKit browser) will do the trick. That should cover most of my readers.</p>
<p>I love visualization toolkits, so when I found out about the JS visualization toolkit <a href="http://thejit.org">InfoVis</a>, I had to play with it. Generally the first thing that comes to mind when visualizing data is class model relationships, so I figured I’d write another snippet to export data from <a href="http://yardoc.org">YARD</a> into a JS-friendly format and see how it looked. This time, I’ll spare the show-and-tell and just do the showing, since the code to export this data is fairly trivial.</p>
<p>I basically used the few examples from the site but plugged in class relationship data from Ruby libraries to get the following visualization of YARD in particular:</p>
<h2>Visualization 1: Simple Tree View</h2>
<p><iframe src="/yardviz/viz1.html" width="605" height="605" frameborder="0"></iframe></p>
<p>Pretty simple, we can also make it look a little fancier:</p>
<h2>Visualization 2: Polar Tree View</h2>
<p><iframe src="/yardviz/viz2.html" width="605" height="605" frameborder="0"></iframe></p>
<h2>Visualization 3: Coupling</h2>
<p>It then occurred to me that visualizations like these (weighted graphs in particular) would be a good way to visualize class coupling in your library. I experimented with the concept by generating a weighted graph, but it seems InfoVis&#8217; RGraph class (which they demo a weighted graph with) isn&#8217;t really that great at really visualizing the weights, also it doesn&#8217;t seem to support weighted graphs. The end result shows some interesting data, but it&#8217;s not exactly great to really view coupling.</p>
<p class="note"><strong>Note:</strong> FF doesn&#8217;t seem to like this one. Don&#8217;t be surprised if it doesn&#8217;t work.</p>
<p><iframe src="/yardviz/viz3.html" width="605" height="605" frameborder="0"></iframe></p>
<p>Those are the visualizations I played with. There&#8217;s a <a href="/yardviz">nicer version here</a> that lets you see visualizations for Ruby&#8217;s core lib and Rails in addition to YARD&#8217;s, plus it has some extra niceties like showing methods in the current highlighted class on the side (not enough space to show it on my blog). Check it out.</p>
<p>Thanks to <strong>Josh Martin</strong> for pointing out InfoVis today, by the way.</p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2009/12/18/visualizing-class-relationships/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using yri for Ruby Core Classes</title>
		<link>http://gnuu.org/2009/12/15/using-yri-for-ruby-core-classes/</link>
		<comments>http://gnuu.org/2009/12/15/using-yri-for-ruby-core-classes/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 22:55:44 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[0.5.1]]></category>
		<category><![CDATA[core]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[stdlib]]></category>
		<category><![CDATA[yard]]></category>
		<category><![CDATA[yardoc]]></category>
		<category><![CDATA[yri]]></category>

		<guid isPermaLink="false">http://gnuu.org/2009/12/15/using-yri-for-ruby-core-classes/</guid>
		<description><![CDATA[This functionality requires a couple of changes made in 0.5.1 (released today), so be sure to update yard to the latest release. You can now use yri with Ruby core classes. This is relatively old news (as of yesterday) since YARD can now parse core classes, but Ruby source is generally not available on all [...]]]></description>
			<content:encoded><![CDATA[<p class="note">This functionality requires a couple of changes made in 0.5.1 (released today), so be sure to update yard to the latest release.</p>
<p>You can now use yri with Ruby core classes. This is relatively old news (as of yesterday) since YARD can now parse core classes, but Ruby source is generally not available on all installs, so building the .yardoc database is not always an option.</p>
<p>In YARD 0.5.1 (released today), instead of downloading and parsing the Ruby source manually, you can now download a pre-built gem containing the .yardoc files for a bunch of Ruby versions (1.8.6, 1.8.7, 1.9.1). Simply use:</p>
<pre>$ gem install yard-doc-core</pre>
<p>You should now be able to use something like <tt>yri String#split</tt>. By default this will install docs for 1.9.1, but if you need docs for a specific version of Ruby, add <tt>-v VERSION</tt> to your gem install command:</p>
<pre>$ gem install yard-doc-core -v 1.8.7</pre>
<p>The stdlib package (<tt>yard-doc-stdlib</tt>) will be coming soon.</p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2009/12/15/using-yri-for-ruby-core-classes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcing The Longest YARD: 0.5.0</title>
		<link>http://gnuu.org/2009/12/14/announcing-the-longest-yard-0-5-0/</link>
		<comments>http://gnuu.org/2009/12/14/announcing-the-longest-yard-0-5-0/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 01:17:12 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[0.5.0]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby 1.9]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[yard]]></category>

		<guid isPermaLink="false">http://gnuu.org/2009/12/14/announcing-the-longest-yard-0-5-0/</guid>
		<description><![CDATA[YARD 0.5.0 (“The Longest”) was just released today. It features a bunch of new things, but some of the most awesome are: Support for documenting native Ruby C code Incremental file parsing and HTML generation Improved yri tool with support for linking gems Support for Documenting Native Ruby C Code This one was certainly a [...]]]></description>
			<content:encoded><![CDATA[<p>YARD 0.5.0 (<em>“The Longest”</em>) was just released today. It features a bunch of new things, but some of the most awesome are:</p>
<ol>
<li>Support for documenting native Ruby C code </li>
<li>Incremental file parsing and HTML generation </li>
<li>Improved yri tool with support for linking gems </li>
</ol>
<h2>Support for Documenting Native Ruby C Code</h2>
<p>This one was certainly a long time coming. YARD has always planned to support native Ruby code. This was probably the last &quot;big&quot; feature that RDoc could do and YARD could not. Now, YARD can.</p>
<p>The best part of this feature is that YARD can now parse Ruby&#8217;s core codebase and the stdlib, meaning <a href="http://yardoc.org">yardoc.org</a> can now host Ruby-core docs. And it now does: <a href="http://yardoc.org/docs/ruby-core">http://yardoc.org/docs/ruby-core</a>. The stdlib will be added soon.</p>
<h2>Incremental file parsing and HTML generation</h2>
<p>One annoying thing about documenting code with YARD for larger projects is the time it takes to generate HTML. This makes the documentation development cycle slow for previewing small documentation changes. YARD 0.5.0 introduces incremental parsing and HTML generation to parse and generate HTML for only the files that were modified since the last running of <tt>yardoc</tt>, which makes for super-fast previews. To use the incremental parsing feature, simply add <tt>-c</tt> or <tt>--use-cache</tt> and YARD will use the available .yardoc cache.</p>
<pre>$ yardoc --use-cache</pre>
<h2>Improved yri tool with support for linking gems</h2>
<p>The <tt>yri</tt> tool that bundled with YARD prior to this release only worked for the .yardoc file in the local directory. In YARD 0.5.0, <tt>yri</tt> will now perform a lookup on all installed gems on your system. To use this, you&#8217;ll first need to build the .yardoc files for your gems, and you can do this with <tt>yardoc --build-gems</tt>. After that, you can use yri as normal:</p>
<pre>$ yri JSON#load</pre>
<h2>More?</h2>
<p>You can see more new toys in the <a href="http://yardoc.org/docs/yard/file:WhatsNew.md">What’s New</a> document on <a href="http://yardoc.org">yardoc.org</a>. You can also install YARD:</p>
<pre>$ gem install yard</pre>
<p>Enjoy!</p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2009/12/14/announcing-the-longest-yard-0-5-0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Auto-Generated ER Diagrams of Popular Rails Projects</title>
		<link>http://gnuu.org/2009/11/30/auto-generated-er-diagrams-of-popular-rails-projects/</link>
		<comments>http://gnuu.org/2009/11/30/auto-generated-er-diagrams-of-popular-rails-projects/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 04:53:00 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[er diagram]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[uml]]></category>
		<category><![CDATA[yard]]></category>
		<category><![CDATA[yuml]]></category>

		<guid isPermaLink="false">http://gnuu.org/?p=335</guid>
		<description><![CDATA[I discovered yUML.me today. It’s a really awesome project and allows you to hotlink UML class, activity or use-case diagrams on any page. All of the UML data is in the URL itself, so it’s real easy to embed these images anywhere without JS or API’s. I’ve always wanted to use YARD to generate ER [...]]]></description>
			<content:encoded><![CDATA[<p>I discovered <a href="http://yuml.me">yUML.me</a> today. It’s a really awesome project and allows you to hotlink UML class, activity or use-case diagrams on any page. All of the UML data is in the URL itself, so it’s real easy to embed these images anywhere without JS or API’s. I’ve always wanted to use <a href="http://yardoc.org">YARD</a> to generate <a href="http://en.wikipedia.org/wiki/Entity-relationship_model">ER diagrams</a> programmatically, and I figured this would be a great way to test out the service.</p>
<p>Since I don’t write many Rails apps, I figured I’d select some of the most popular open source rails apps out there and generate ER diagrams for those. It turned out to be an interesting exercise in visualizing database structures of some of the projects people use day to day. </p>
<p>The projects I chose were: <a href="http://github.com/parasew/instiki">Instiki</a>, <a href="http://github.com/qrush/gemcutter">Gemcutter</a>, <a href="http://github.com/desaperados/seed">Seed</a>, <a href="http://github.com/radiant/radiant">Radiant</a>, <a href="http://github.com/emk/mephisto">Mephisto</a>, <a href="http://github.com/insoshi/insoshi">Insoshi</a> and <a href="http://github.com/railsdog/spree">Spree</a>. The results range from awesome to scary, but you can judge for yourselves.</p>
<h3>Results</h3>
<h4>Instiki</h4>
<p>Nice and simple. Maybe too simple?</p>
<p><img src="http://yuml.me/diagram/scruffy/class/[Web]++-*[Page],[Web]++-*[WikiFile],[Web]++-*[Revision],[Page]++-*[Revision],[Page]++-*[WikiReference],[Page]1--Current Revision-1[Revision]" /></p>
<h4>Gemcutter</h4>
<p>Here’s a nice one. Sufficiently complex but still easy to follow. I should point out at this point that dashed lines refer to has-many-through relationships (with the attr name as the arrow label.</p>
<p><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" src="http://yuml.me/diagram/scruffy/class/[User]++-*[Rubygem],[User]-Rubygems-.-*[Rubygem],[User]++-*[Ownership],[User]++-*[Subscription],[Version]++-*[Dependency],[Version]++-*[Download],[Rubygem]++-*[Ownership],[Rubygem]-Users-.-*[User],[Rubygem]++-*[Subscription],[Rubygem]++-*[Version],[Rubygem]1--1[Linkset],[Dependency]1--1[Rubygem]" /></p>
<h4>Seed</h4>
<p>This is probably the cleanest one. The use of STI in the models really makes this look nice.</p>
<p><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" src="http://yuml.me/diagram/scruffy/class/[Page]++-*[Article],[Page]++-*[Newsitem],[Page]++-*[Post],[Page]++-*[Component],[Page]++-*[Event],[Role]*--*[User],[Article]++-*[Image],[Article]++-*[Document],[Article]^-[Newsitem],[Password]1--1[User],[Component]1--Source-1[Page],[Component]++-*[Document],[Article]^-[Post],[Post]++-*[Comment]" /></p>
<h4>Radiant</h4>
<p>Simple, but those recursive relationships look a little messy, don’t they? I guess it would look better if the layout was done right. Note that those labels again refer to the attribute name.</p>
<p><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" src="http://yuml.me/diagram/scruffy/class/[User]1--Created By-1[User],[User]1--Updated By-1[User],[Layout]++-*[Page],[Layout]1--Created By-1[User],[Layout]1--Updated By-1[User],[Snippet]1--Created By-1[User],[Snippet]1--Updated By-1[User],[PagePart]1--1[Page],[Page]^-[EnvDumpPage],[Page]^-[FileNotFoundPage],[Page]++-Part-*[PagePart],[Page]1--Created By-1[User],[Page]1--Updated By-1[User]" width="590" height="410" /></p>
<h4>Mephisto</h4>
<p>Manageable.</p>
<p><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" src="http://yuml.me/diagram/scruffy/class/[Tag]++-*[Tagging],[Site]++-*[Section],[Site]++-*[Article],[Site]++-*[Comment],[Site]++-*[Event],[Site]++-*[CachedPage],[Site]++-*[Asset],[Site]++-*[Membership],[Site]-Users-.-*[User],[User]++-*[Article],[User]++-*[Membership],[User]++-*[Site],[Asset]++-*[AssignedAsset],[Event]1--1[User],[Content]1--1[User],[Content]1--1[Site],[Tagging]1--1[Taggable],[Section]++-*[AssignedSection],[Content]^-[Article],[Content]^-[Comment],[Comment]1--1[Article],[Comment]1--1[Event],[Article]++-*[AssignedSection],[Article]++-*[Section],[Article]++-*[Event],[Article]++-*[AssignedAsset],[Article]++-*[Asset]" width="590" height="792" /></p>
<h4>Insoshi</h4>
<p>Now we&#8217;re getting crazy. yUML is starting to fail on us.</p>
<p>Click the image to see the madness</p>
<p><a style="border: 0" href="http://yuml.me/diagram/scruffy/class/[Post]++-*[Activity],[Blog]++-Post-*[BlogPost],[Photo]++-*[Activity],[Event]++-*[EventAttendee],[Event]-People-.-*[Person],[Event]++-*[Comment],[Event]++-*[Activity],[Topic]1--1[Person],[Topic]++-Post-*[ForumPost],[Topic]++-*[Activity],[Forum]++-*[Topic],[Forum]++-*[Post],[Person]1--1[Blog],[Person]++-*[EmailVerification],[Person]++-*[Comment],[Person]++-*[Connection],[Person]++-*[Contact],[Person]++-*[Photo],[Person]-Contacts-.-*[Contact],[Person]++-*[Feed],[Person]++-*[Activity],[Person]++-*[PageView],[Person]++-*[Gallery],[Person]++-*[Event],[Person]++-*[EventAttendee],[Person]-Events-.-*[Event],[Comment]1--1[Commentable],[Comment]1--Commenter-1[Person],[Comment]1--1[Post],[Comment]++-*[Activity],[Gallery]++-*[Photo],[Gallery]++-*[Activity],[Activity]1--1[Item],[Activity]++-*[Feed],[Post]^-[BlogPost],[BlogPost]1--1[Blog],[BlogPost]++-*[Comment],[Thumbnail]1--1[Photo],[Connection]1--Contact-1[Person],[Connection]++-*[Activity],[Post]^-[ForumPost],[ForumPost]1--1[Topic],[ForumPost]1--1[Person],[Person]^-[AllPerson],[Conversation]++-*[Message],[Communication]^-[Message],[Message]1--Sender-1[Person],[Message]1--Recipient-1[Person]"><img src="http://yuml.me/diagram/scruffy/class/[Post]++-*[Activity],[Blog]++-Post-*[BlogPost],[Photo]++-*[Activity],[Event]++-*[EventAttendee],[Event]-People-.-*[Person],[Event]++-*[Comment],[Event]++-*[Activity],[Topic]1--1[Person],[Topic]++-Post-*[ForumPost],[Topic]++-*[Activity],[Forum]++-*[Topic],[Forum]++-*[Post],[Person]1--1[Blog],[Person]++-*[EmailVerification],[Person]++-*[Comment],[Person]++-*[Connection],[Person]++-*[Contact],[Person]++-*[Photo],[Person]-Contacts-.-*[Contact],[Person]++-*[Feed],[Person]++-*[Activity],[Person]++-*[PageView],[Person]++-*[Gallery],[Person]++-*[Event],[Person]++-*[EventAttendee],[Person]-Events-.-*[Event],[Comment]1--1[Commentable],[Comment]1--Commenter-1[Person],[Comment]1--1[Post],[Comment]++-*[Activity],[Gallery]++-*[Photo],[Gallery]++-*[Activity],[Activity]1--1[Item],[Activity]++-*[Feed],[Post]^-[BlogPost],[BlogPost]1--1[Blog],[BlogPost]++-*[Comment],[Thumbnail]1--1[Photo],[Connection]1--Contact-1[Person],[Connection]++-*[Activity],[Post]^-[ForumPost],[ForumPost]1--1[Topic],[ForumPost]1--1[Person],[Person]^-[AllPerson],[Conversation]++-*[Message],[Communication]^-[Message],[Message]1--Sender-1[Person],[Message]1--Recipient-1[Person]" width="590" height="616" /></a></p>
<h4>Spree</h4>
<p>This one isn&#8217;t exactly fair. I think the amount of complexity here is a little out of the scope of a single UML diagram. It&#8217;s fun to look at, though.</p>
<p>Click the image to see the madness</p>
<p><a style="border: 0" href="http://yuml.me/diagram/scruffy/class/[Zone]++-*[ZoneMember],[Zone]++-*[TaxRate],[Zone]++-*[ShippingMethod],[User]++-*[Order],[User]*--*[Role],[User]1--Ship Addres-1[Addres],[User]1--Bill Addres-1[Addres],[Asset]1--1[Viewable],[Asset]^-[Image],[Order]++-*[StateEvent],[Order]++-*[LineItem],[Order]++-*[InventoryUnit],[Order]++-*[Payment],[Order]++-*[CreditcardPayment],[Order]1--1[Checkout],[Order]1--1[BillAddres],[Order]++-*[Shipment],[Order]++-*[Adjustment],[Order]++-*[Charge],[Order]++-*[Credit],[Order]++-*[ShippingCharge],[Order]++-*[TaxCharge],[Order]++-*[CouponCredit],[Order]++-Non Zero Charge-*[Charge],[State]1--1[ZoneMember],[State]1--1[Zone],[Coupon]++-*[CouponCredit],[Variant]++-*[InventoryUnit],[Variant]++-*[LineItem],[Variant]++-*[Image],[Country]++-*[State],[Country]1--1[ZoneMember],[Country]1--1[Zone],[Address]1--1[Country],[Address]1--1[State],[Address]++-*[Checkout],[Address]++-*[Shipment],[Product]++-*[ProductOptionType],[Product]++-*[OptionType],[Product]++-*[ProductProperty],[Product]++-*[Image],[Product]1--1[TaxCategory],[Product]*--*[Taxon],[Product]1--1[ShippingCategory],[Product]1--Master-1[Variant],[Product]++-*[Variant],[Product]++-Variants Including Master-*[Variant],[Shipment]1--1[Addres],[Shipment]1--1[ShippingCharge],[Property]++-*[ProductProperty],[Property]++-*[Product],[Checkout]1--Bill Addres-1[Addres],[Checkout]1--Shipments-.-1[Shipment],[Taxonomy]++-*[Taxon],[Taxonomy]1--Root-1[Taxon],[Prototype]*--*[Property],[LineItem]1--1[Product],[Adjustment]1--1[AdjustmentSource],[Calculator]1--1[Calculable],[Preference]1--1[Owner],[Preference]1--1[Group],[Creditcard]1--1[Checkout],[Creditcard]1--1[Addres],[Creditcard]++-*[CreditcardPayment],[StateEvent]1--1[User],[OptionType]++-*[OptionValue],[OptionType]++-*[ProductOptionType],[OptionType]*--*[Prototype],[ZoneMember]1--1[Zoneable],[TaxCategory]++-*[TaxRate],[OptionValue]*--*[Variant],[ProductGroup]++-*[ProductScope],[ShippingMethod]++-*[ShippingRate],[ShippingMethod]++-*[Shipment],[ShippingCategory]++-*[ShippingRate],[Configuration]^-[AppConfiguration],[Payment]^-[CreditcardPayment],[CreditcardPayment]++-*[CreditcardTxn],[Adjustment]^-[Charge],[Adjustment]^-[Credit],[Charge]^-[TaxCharge],[Credit]^-[CouponCredit],[Charge]^-[ShippingCharge]"><img src="http://yuml.me/diagram/scruffy/class/[Zone]++-*[ZoneMember],[Zone]++-*[TaxRate],[Zone]++-*[ShippingMethod],[User]++-*[Order],[User]*--*[Role],[User]1--Ship Addres-1[Addres],[User]1--Bill Addres-1[Addres],[Asset]1--1[Viewable],[Asset]^-[Image],[Order]++-*[StateEvent],[Order]++-*[LineItem],[Order]++-*[InventoryUnit],[Order]++-*[Payment],[Order]++-*[CreditcardPayment],[Order]1--1[Checkout],[Order]1--1[BillAddres],[Order]++-*[Shipment],[Order]++-*[Adjustment],[Order]++-*[Charge],[Order]++-*[Credit],[Order]++-*[ShippingCharge],[Order]++-*[TaxCharge],[Order]++-*[CouponCredit],[Order]++-Non Zero Charge-*[Charge],[State]1--1[ZoneMember],[State]1--1[Zone],[Coupon]++-*[CouponCredit],[Variant]++-*[InventoryUnit],[Variant]++-*[LineItem],[Variant]++-*[Image],[Country]++-*[State],[Country]1--1[ZoneMember],[Country]1--1[Zone],[Address]1--1[Country],[Address]1--1[State],[Address]++-*[Checkout],[Address]++-*[Shipment],[Product]++-*[ProductOptionType],[Product]++-*[OptionType],[Product]++-*[ProductProperty],[Product]++-*[Image],[Product]1--1[TaxCategory],[Product]*--*[Taxon],[Product]1--1[ShippingCategory],[Product]1--Master-1[Variant],[Product]++-*[Variant],[Product]++-Variants Including Master-*[Variant],[Shipment]1--1[Addres],[Shipment]1--1[ShippingCharge],[Property]++-*[ProductProperty],[Property]++-*[Product],[Checkout]1--Bill Addres-1[Addres],[Checkout]1--Shipments-.-1[Shipment],[Taxonomy]++-*[Taxon],[Taxonomy]1--Root-1[Taxon],[Prototype]*--*[Property],[LineItem]1--1[Product],[Adjustment]1--1[AdjustmentSource],[Calculator]1--1[Calculable],[Preference]1--1[Owner],[Preference]1--1[Group],[Creditcard]1--1[Checkout],[Creditcard]1--1[Addres],[Creditcard]++-*[CreditcardPayment],[StateEvent]1--1[User],[OptionType]++-*[OptionValue],[OptionType]++-*[ProductOptionType],[OptionType]*--*[Prototype],[ZoneMember]1--1[Zoneable],[TaxCategory]++-*[TaxRate],[OptionValue]*--*[Variant],[ProductGroup]++-*[ProductScope],[ShippingMethod]++-*[ShippingRate],[ShippingMethod]++-*[Shipment],[ShippingCategory]++-*[ShippingRate],[Configuration]^-[AppConfiguration],[Payment]^-[CreditcardPayment],[CreditcardPayment]++-*[CreditcardTxn],[Adjustment]^-[Charge],[Adjustment]^-[Credit],[Charge]^-[TaxCharge],[Credit]^-[CouponCredit],[Charge]^-[ShippingCharge]" width="590" height="351" /></a></p>
<h3>How?</h3>
<p>All of these diagrams were generated automatically with a simple <a href="http://yardoc.org">YARD</a> handler and piped into <a href="http://yuml.me">yUML</a>. The code is on gist:</p>
<p> <script src="http://gist.github.com/246017.js"></script></p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2009/11/30/auto-generated-er-diagrams-of-popular-rails-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YARD 0.4.0 (The Whole Nine) Released Today</title>
		<link>http://gnuu.org/2009/11/15/yard-0-4-0-the-whole-nine/</link>
		<comments>http://gnuu.org/2009/11/15/yard-0-4-0-the-whole-nine/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 18:04:33 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[developer tools]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby 1.9]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[yard]]></category>

		<guid isPermaLink="false">http://gnuu.org/?p=317</guid>
		<description><![CDATA[YARD 0.4.0 (codenamed The Whole Nine) was just released today. It’s by far the biggest release since I started writing YARD in 2007. For those who don’t know, YARD is a Ruby documentation tool that surpasses the features of RDoc to bring much richer docs and extensibility to documenteurs. There’s plenty of new features to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://yardoc.org">YARD 0.4.0</a> (codenamed The Whole Nine) was just released today. It’s by far the biggest release since I started writing YARD in 2007. For those who don’t know, YARD is a Ruby documentation tool that surpasses the features of RDoc to bring much richer docs and extensibility to documenteurs. There’s plenty of new features to discuss and plenty of new toys to show off (new templates, live doc server with user comments, new APIs, plugin support), so let’s get started.</p>
<p> </p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2009/11/15/yard-0-4-0-the-whole-nine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YARD at Montreal.rb</title>
		<link>http://gnuu.org/2009/06/17/yard-at-montreal-rb/</link>
		<comments>http://gnuu.org/2009/06/17/yard-at-montreal-rb/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 06:05:30 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[Montreal.rb]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[yard]]></category>

		<guid isPermaLink="false">http://gnuu.org/2009/06/17/yard-at-montreal-rb/</guid>
		<description><![CDATA[I gave a talk today at Montreal.rb. It was great to see people interested in improving Ruby documentation. You can read the slides below (direct link).]]></description>
			<content:encoded><![CDATA[<p>I gave a talk today at <a href="http://montrealonrails.com">Montreal.rb</a>. It was great to see people interested in improving Ruby documentation. You can read the slides below (<a href="http://gnuu.org/wp-content/uploads/2009/06/yard.pdf">direct link</a>).</p>
<p></p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2009/06/17/yard-at-montreal-rb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing a New Blog (Design)</title>
		<link>http://gnuu.org/2009/06/01/introducing-a-new-blog-design/</link>
		<comments>http://gnuu.org/2009/06/01/introducing-a-new-blog-design/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 06:32:53 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[new blog]]></category>
		<category><![CDATA[yard]]></category>

		<guid isPermaLink="false">http://gnuu.org/2009/06/01/introducing-a-new-blog-design/</guid>
		<description><![CDATA[Since YARD development has been slowing down in preparation for the 0.2.3 release coming this week, I had some time to step back from writing code and start putting together docs. I was planning on writing a bunch of design &#38; architecture overviews for yard so more people can have a sufficient set of resources [...]]]></description>
			<content:encoded><![CDATA[<p>Since <a href="http://github.com/lsegal/yard">YARD</a> development has been slowing down in preparation for the 0.2.3 release coming this week, I had some time to step back from writing code and start putting together docs. I was planning on writing a bunch of design &amp; architecture overviews for yard so more people can have a sufficient set of resources to figure out how to write plugins and such. There are actually plenty of developers that have expressed interest so far, and I’m going to be spending this entire week putting out as much information as I can. As I started doing this, though, I realized I really haven’t done any web design or written any significant web related content in a <em>really</em> long time, so this weekend I decided I would take a little break from YARD to focus on some other much needed improvements.</p>
<p>I’m referring specifically to my blog, which was becoming a complete mess of ugliness and broken HTML. I decided to completely gut it, remove a bunch of useless crap and focus on making the content clean and easy to read. This is pretty much a warm-up exercise for the coming week of writing docs and putting out the new YARD site, but it’s something I should have done long ago. Hopefully this will give me some new incentive to write more (about YARD?) </p>
<h2>It’s not a “blog” anymore</h2>
<p>You may have noticed that comments are gone. Good. Comments are often useful, but to be honest, like many other “bloggers”, I’ve discovered they often don’t add much to the conversation (I rarely get comments on my blog anyway, so styling all that HTML is a waste of my time). A lot of people will say a site is “not a blog” if it does not allow a two-way conversation between the author and the reader. Fine, then I guess this is no longer a blog. My intention for writing articles is <em>not</em> to inherently start a conversation or get feedback. I write because I want to share, not because I need validation or care that you think I’m a dumbass. Don’t get me wrong, I still like when people point out errors and omissions or insert points of view, so if you notice anything send me an email or twitter me instead, we can have the discussion there. Better yet, reply with your own article. This keeps the conversation sane, civil and keeps the signal-to-noise ratio down. I’ve noticed this trend from other blogs I visit, and I’m starting to think the future of blogging will look a lot more like magazine articles than threaded conversations. Dialog is good, but it should be controlled so that it remains on topic and relevant.</p>
<p>I mentioned <a href="http://twitter.com/lsegal">Twitter</a> is a good way to reach me. I’ve actually been using it a lot for the past 6 months; a lot more than this blog. It’s no surprise that microblogging is way easier than writing long articles, so for the past few months my Twitter account has probably been a better source of blog content than my blog (I guess this is probably why people like Tumblr). Let’s be honest, I’m probably not going to start blogging much more than I already do, but I can keep up with Twitter pretty well. Because of this, I’ve incorporated my Twitter feed into my blog and it’s prominently displayed on the front page and in the sidebar on others. I didn’t just add it as a widget to fill whitespace. Instead, expect that feed to be a major source of content for this site. Though you should probably just <a href="http://twitter.com/lsegal">follow me</a>.</p>
<p>Anyway, enough about me. Hope you like the new design.</p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2009/06/01/introducing-a-new-blog-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Practical YARD Examples 0001: Generating class diagrams with YARD &amp; Graphviz</title>
		<link>http://gnuu.org/2008/02/29/generating-class-diagrams-with-yard-and-graphviz/</link>
		<comments>http://gnuu.org/2008/02/29/generating-class-diagrams-with-yard-and-graphviz/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 07:15:49 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[class diagram]]></category>
		<category><![CDATA[graphviz]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[visualization]]></category>
		<category><![CDATA[yard]]></category>

		<guid isPermaLink="false">http://gnuu.org/2008/02/29/generating-class-diagrams-with-yard-and-graphviz/</guid>
		<description><![CDATA[So, recently I was looking at refactoring the current internal structure of YARD to improve the developer API and general stability improvements and I figured I would draw out the class diagram as a first step in figuring out what needed to stay and what needed to go. Problem was, having been away from the [...]]]></description>
			<content:encoded><![CDATA[<p>So, recently I was looking at refactoring the current internal structure of YARD to improve the developer API and general stability improvements and I figured I would draw out the class diagram as a first step in figuring out what needed to stay and what needed to go. Problem was, having been away from the project for so long, I completely forgot what YARD looked like on the inside. I did not want to dig through the source; I wanted to see the project from afar to keep my design from being influenced by the current layout (in terms of implementation details). I really needed to visualize the project from a high level. </p>
<p>Using the raw data file that <tt>yardoc</tt> generates when it is run, I mocked up a quick tool called <tt>yard-graph</tt> which allowed me to visualize my project using <a title="Open source graphing tool" href="http://www.graphviz.org/">Graphviz</a>. <em>Note that this is the same functionality that I described any developer could take advantage of in <a title="YARD Alpha Release 0.1a" href="http://yard.soen.ca/yard-release-0-1a">YARD&#8217;s very first release</a></em>. Doing things like this <strong>is what YARD is all about</strong>. The results aren&#8217;t quite perfect due to both the incompleteness of the graph tool and the limitations of <em>Graphviz</em>, like how hierarchical mode is extremely strict about hierarchy and likes to make <em>extremely wide graphs</em>, but they&#8217;re highly suitable for my needs; actually, I would call them quite excellent for my needs. <em>Take a look!</em></p>
<p><a href="http://yard.soen.ca/docs/yard-0.2.1/yard-simple.pdf"><img height="255" alt="Click for the full diagram" src="http://www.gnuu.org/wp-content/uploads/2008/02/PracticalYARDExamples_171D/yardsimplecrop.png" width="350" /></a> </p>
<p>As an excercise, I also implemented the ability to show module dependencies (via <tt>include</tt>) and the public class API. This is what that looks like:</p>
<p><a href="http://yard.soen.ca/docs/yard-0.2.1/yard.pdf"><img height="178" alt="Click for the full class diagram. This one's a doozy." src="http://www.gnuu.org/wp-content/uploads/2008/02/PracticalYARDExamples_171D/yardcrop.png" width="350" /></a> </p>
<p>For those interested, this code lives in the <a title="YARD on Github: diagram banch" href="http://github.com/lsegal/yard/tree/diagram">diagram branch</a> in Github (yea, I got a free invite and decided to try it out; I forgot / have no idea who invited me&#8211; please email me so I can thank you, by the way). After a <tt>rake install</tt> of the gem, you can run (in your root project directory, or maybe <tt>lib/</tt> to ignore tests):</p>
<pre class="dark">yard-graph --dependencies --empty-mixins --full | dot -T pdf -o diagram.pdf</pre>
<p>This requires <tt>dot</tt> (part of <em>Graphviz</em>) and generates the diagrams with all the above options, module dependencies (<tt>&#45;-dependencies</tt>) and <tt>&#45;-full</tt> for the class/instance methods, constants and attributes info. The <tt>&#45;-empty-mixins</tt> flag shows empty modules as nodes instead of subgraphs (the delimiting boxes), since by default <em>Graphviz</em> ignores empty subgraphs. If you use modules as mixins and not just a way to namespace classes, you&#8217;ll want this on or you won&#8217;t see your modules.</p>
<p>I also highly suggest using a vector format for output like pdf as in the above example. Bitmap files can get <em>really big</em>. If you want proof, check out <a title="It&#39;s so BIG it doesn't even load with Adobe's PDF viewer!" href="http://yard.soen.ca/docs/actionpack-2.0.2/rails.pdf">the full class diagram of the rails source</a> I generated and imagine that as a bitmap.</p>
<p>Hopefully I can get some more practical uses of YARD up in the next coming weeks for people to see how awesome it is!</p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2008/02/29/generating-class-diagrams-with-yard-and-graphviz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
