<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Ruby Red Bricks - Home</title>
  <id>tag:rubyredbricks.com,2010:mephisto/</id>
  <generator version="0.8.0" uri="http://mephistoblog.com">Mephisto Drax</generator>
  <link href="http://rubyredbricks.com/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://rubyredbricks.com/" rel="alternate" type="text/html"/>
  <updated>2010-01-04T20:32:54Z</updated>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2010-01-03:95</id>
    <published>2010-01-03T17:02:00Z</published>
    <updated>2010-01-04T20:32:54Z</updated>
    <category term="lego"/>
    <category term="power-miners"/>
    <link href="http://rubyredbricks.com/2010/1/3/the-moral-ambiguity-of-power-miners" rel="alternate" type="text/html"/>
    <title>The Moral Ambiguity of Power Miners </title>
<content type="html">
            &lt;div&gt;
&lt;div&gt;&lt;a href=&quot;http://lego.wikia.com/wiki/File:Power_Miners.jpg&quot; title=&quot;The Power Miners work their way through the underground.&quot; class=&quot;image&quot;&gt;

&lt;/a&gt;&lt;br /&gt;
Image sourced from &lt;a href=&quot;http://lego.wikia.com/wiki/LEGO_Wiki&quot;&gt;Brickipedia&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
The Power Miners sets pit Power Miners against Rock Monsters in a race to collect Power Crystals, a source of food for the Rock Monsters. The Rock Monsters consumption of the crystals has the side-effect of creating catastrophic earthquakes on the surface, hence the Power Miners drive to collect all the crystals before the monsters cause more city-leveling destruction.
&lt;/p&gt;
&lt;p&gt;It's hard to see who the bad guys are here. Both &quot;sides&quot; are working under their own agenda - trying to survive the world they live in and only brought into conflict because of a limited resource (&lt;em&gt;i.e.&lt;/em&gt; the crystals) that both groups want to control. &lt;/p&gt;
&lt;p&gt;
It's interesting to note that the Power Crystals have no direct value to the miners - they are only valuable through restricting the monsters access to this food source. It doesn't appear that any other avenues have been explored for reducing the damage caused by the Rock Monsters, though arguably the opportunities for negotiation are limited by the Monsters' apparent thuggish stupidity - plus a Lego set where Miners and Monsters sit down to hammer out an agreement over Power Crystal access-rights would have little appeal to series' key demographic.  
&lt;/p&gt;
The problem of which group is in the &quot;right&quot; is problematic on several levels. First off, the Miners are clearly the invaders - entering the domain of the Monsters with the intent of limiting their food supply. Deliberately starving the Monsters raises an awful moral dilemma, trading the lives of the Monsters against the lives of humans unfortunately affected by the Monsters eating habits. If we give no agency to the Monsters then it's no worse an issue than having to deal with aggressive animals - humans simply would not have survived if they tolerated human-killing creatures, and the decision to limit the Monsters' diet (and population) is no different than humans protecting themselves against sharks or lions. 
&lt;/p&gt;
&lt;p&gt;
But clearly the Monsters &lt;strong&gt;do&lt;/strong&gt; have some form of agency. They have characteristics that could be defined as human, and they - or at least the Firox - engage in guerrilla-like tactics than indicate a high level of intelligence. This brings into question how aware the Monsters are of the damage they are causing, and potentially how deliberately the earthquakes targeted human cities. Without knowing the true motivations of the Monsters the issue of finding an equilibrium between Monsters and Miners is complex at best.
&lt;/p&gt;
&lt;p&gt;
Similar themes are explored in the &lt;a href=&quot;http://lego.wikia.com/wiki/Mars_mission&quot;&gt;Mars Mission&lt;/a&gt; sets, where Astronauts and Aliens vie for control over crystals needed by both parties to power their vehicles and other equipment. In these sets the behaviour of humans is more easily characterised as suspect, with the Astronaut capturing and imprisoning Aliens. Yet the very inscrutability of the Aliens, coupled with their willingness to attack human mining outposts, obscures the question of whether the Astronauts' response to the the conflict with the Aliens over crystals is valid self-protection against a hostile foe or one of anthropocentric militancy.
&lt;/p&gt;
&lt;p&gt;
I asked my five-year old who he thought the baddies were in Power Miners. Without hesitation he said &quot;the Monsters&quot;. When asked why he seemed a little more troubled, thinking it over for a while before he responded with &quot;because the Miners know something about the Crystals&quot;. Completely in keeping with the back-story, yet at no point did he address the long-term effects of the Power Miners activities on the Monster population. Typical five-year old.
&lt;p&gt;
One of the new Power Miners sets for 2010 - the &lt;a href=&quot;http://lego.wikia.com/wiki/8191_Lavatraz&quot;&gt;&quot;Lavatraz&quot;&lt;/a&gt; set - will see the Miners attempt to capture a Lava Monster is a water-cooled trap. If they are successful, and their efforts aren't foiled by a subsequent &quot;Escape from Lavatraz&quot;, then perhaps we will see some genuine opportunities for dialogue created - albeit between captive and guard. And if hot-heads on both sides are cooled - both figuratively and literally - then maybe concrete solutions to the rivalry between Monsters and Miners can be found and a real, lasting peace can be created.
&lt;/p&gt;
&lt;p&gt;
We live in hope...
&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-12-06:88</id>
    <published>2009-12-06T00:28:00Z</published>
    <updated>2009-12-11T12:30:27Z</updated>
    <category term="writing"/>
    <link href="http://rubyredbricks.com/2009/12/6/elizabeth-gilbert-on-genius" rel="alternate" type="text/html"/>
    <title>Elizabeth Gilbert on Genius</title>
<content type="html">
            &lt;p&gt;I&#8217;ve never heard of Elizabeth Gilbert before.. but through a happy series of links, including &lt;a href=&quot;http://www.olganunes.com&quot;&gt;Olga Nunes blog&lt;/a&gt; (someone else I&#8217;d never heard of before, but find myself so incredibly moved by) I came across this from the last &lt;span class=&quot;caps&quot;&gt;TED&lt;/span&gt; talks:&lt;/p&gt;


 

	&lt;p&gt;This notion of creativity coming from without, as a &#8220;genius&#8221; that visits us when we work, isn&#8217;t completely irreconcilable to a  humanist like myself.&lt;/p&gt;


	&lt;p&gt;Whether it&#8217;s writing, making music or even crafting code; we are all standing on the shoulders of giants. And it doesn&#8217;t matter if we call the well-spring of our creativity God, our cultural heritage or the people we connect to, it feels natural and rational to acknowledge an external source &#8211; a &#8220;genius&#8221; living in the walls of our lives.&lt;/p&gt;


	&lt;p&gt;I&#8217;m not religious in any sense &#8211; I&#8217;m firmly convinced that I just don&#8217;t know &#8211; but I can accept that I don&#8217;t own the ideas and forces that inform my creative life. The transformation of these forces into something new may be peculiar to me, but the source is elsewhere.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-12-02:86</id>
    <published>2009-12-02T11:17:00Z</published>
    <updated>2009-12-11T12:32:21Z</updated>
    <category term="cmis"/>
    <category term="seamus"/>
    <link href="http://rubyredbricks.com/2009/12/2/seamus-vision" rel="alternate" type="text/html"/>
    <title>Seamus - a little bit of vision</title>
<content type="html">
            &lt;p&gt;The objective of the Seamus project is to build a requirements management system in Ruby. Seamus takes a document-centric approach to requirements &#8211; treating requirements as &#8220;content&#8221; to be managed within an Enterprise Content Management (ECM) system.&lt;/p&gt;


	&lt;p&gt;There are a couple of reasons for doing this and for doing it this way. Firstly I want to improve my Ruby skills &#8211; in my day job I work mostly in Rails and want to go a bit deeper into Ruby than website development typically requires. Building an &lt;span class=&quot;caps&quot;&gt;ECM&lt;/span&gt; isn&#8217;t a trivial exercise &#8211; I&#8217;m not even confident I can do it, at least not on my own. Going through the process of building this system is going to teach me more about Ruby than I&#8217;m used to &#8211; as well as give me a chance to flex those architecture and design muscles that have atrophied over the past few years.&lt;/p&gt;


	&lt;p&gt;Secondly I want to build a requirements management tool that is useful to a broad set of stake holders. Most tools or systems I&#8217;ve seen for managing requirements tend to support the needs of one group of users over another &#8211; e.g. satisfy a business&#8217;s legal needs but fall short of guiding the day-to-day efforts of developers, or vice versa. The &lt;span class=&quot;caps&quot;&gt;ECM&lt;/span&gt; will provide multiple representations of the same underlying content &#8211; allowing the same set of requirements to be used by different groups of people working on the same project.&lt;/p&gt;


	&lt;p&gt;There&#8217;s a third ancillary reason: to learn more about the process of requirements management. And a fourth &#8220;nice to have&#8221; &#8211; that building a specific-purpose &lt;span class=&quot;caps&quot;&gt;ECM&lt;/span&gt; will lead to a system that can be repurposed for the management of other types of content. Neither of these are driving reasons for the project, but will be kept in mind as we go.&lt;/p&gt;


	&lt;p&gt;I&#8217;m in a bit of quandary over how to jump-start the project. In an earlier post I said I wasn&#8217;t going to start until I had a full set of requirements. I&#8217;m being guided by Karl Wiegers excellent &lt;a href=&quot;http://www.processimpact.com/pubs.shtml#moreabout&quot;&gt;More About Software Requirements&lt;/a&gt;, in which Karl suggests defining a baseline set of requirements and then engaging in a iterative process for further refining the needs of the project (he&#8217;s clearly not adverse to agile methodologies). Given I already have part of the problem domain laid out for me &#8211; in the structure of the &lt;span class=&quot;caps&quot;&gt;CMIS&lt;/span&gt; data model &#8211; I&#8217;m inclined to lay down a very brief set of requirements and then use the model to explore how these requirements can be mapped into the &lt;span class=&quot;caps&quot;&gt;ECM&lt;/span&gt; domain.&lt;/p&gt;


	&lt;p&gt;I plan on documenting what I do as much as possible, so I have a record of what mistakes I make &#8211; both in terms of technical choices and also the actual approach. I have to say, as a developer I&#8217;m just keen to start cutting some code.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-12-02:85</id>
    <published>2009-12-02T10:56:00Z</published>
    <updated>2009-12-02T10:56:23Z</updated>
    <category term="rails-as-cms"/>
    <category term="seamus"/>
    <link href="http://rubyredbricks.com/2009/12/2/exit-rails-as-cms-enter-seamus" rel="alternate" type="text/html"/>
    <title>Exit Rails-as-CMS, enter "Seamus"</title>
<content type="html">
            &lt;h1&gt;Adios Rails-as-CMS&lt;/h1&gt;


	&lt;p&gt;The vast majority of traffic that comes to this website is generated by interest in the Rails-as-CMS post made over a year ago. While the attention is appreciated, it feels like this particular meme has run its course &#8211; at least for me.&lt;/p&gt;


	&lt;p&gt;Gaspard Bucher&#8217;s post &lt;a href=&quot;http://zenadmin.org/en/blog/post609.html&quot;&gt;Is Rails a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;?&lt;/a&gt; puts paid to the Rails-as-CMS argument for most &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; implementations. I don&#8217;t buy his argument completely &#8211; for instance, you lose as much if not more flexibility by adopting the constraints of Gaspard&#8217;s Xena, Radiant or any of the other Rails-based CMSs out there. But I get where he is coming from &#8211; in general you are probably going to be better off embracing an existing package and extending it to meet your own needs.&lt;/p&gt;


	&lt;p&gt;The Rails-as-CMS idea still holds some interest for me &#8211; and probably for a few other Rubyists &#8211; because it allows for experimenting outside of the general case. My own need for a suitable vehicle for publishing some of my writing online is very different to what most people are looking for in a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;. I accept that, and I&#8217;ve probably going a bit further by dropping Rails altogether for &lt;a href=&quot;http://thispurpleworld.com&quot;&gt;This Purple World&lt;/a&gt; and moving to Sintra. The results at the moment are pretty uninspiring, but once I get a moment to clean it up and post a more recent version on Github you can probably expect to see a new &#8220;Sinatra-as-CMS&#8221; argument start to brew. :)&lt;/p&gt;


	&lt;h1&gt;Hola Seamus&lt;/h1&gt;


	&lt;p&gt;With Rails-as-CMS out of the way &#8211; or at least on hold &#8211; I&#8217;d like to focus my energies back on a project I began a long time ago. Seamus started out as an implementation of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Content_Management_Interoperability_Services&quot;&gt;Content Mangement Interoperability Services&lt;/a&gt; (CMIS) specification. &lt;span class=&quot;caps&quot;&gt;CMIS&lt;/span&gt; is about as far away from &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; as you can possibly imagine, despite the common &#8220;C for content&#8221; in their respective acronyms. &lt;span class=&quot;caps&quot;&gt;CMIS&lt;/span&gt; belongs to the world of &lt;strong&gt;Enterprise&lt;/strong&gt; Content Management systems &#8211; an evolution of the document- and record-management systems of yore. There are plenty of players in this market, from &lt;span class=&quot;caps&quot;&gt;IBM&lt;/span&gt; and Microsoft with their proprietary offerings across to open source providers like Nuxeo and Alfresco. Most of the big players &#8211; including Nuxeo and Alfresco &#8211; have signed up to support &lt;span class=&quot;caps&quot;&gt;CMIS&lt;/span&gt; in their products.&lt;/p&gt;


	&lt;p&gt;With the original incarnation of Seamus I managed to get a very basic implementation of &lt;span class=&quot;caps&quot;&gt;CMIS&lt;/span&gt; version 0.5 going but was stymied by (a) spending way too much time trying to get my head around the way &lt;span class=&quot;caps&quot;&gt;CMIS&lt;/span&gt; uses the Atom Publishing Protocol and &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; and (b) having nothing real to wrap the system around.&lt;/p&gt;


	&lt;p&gt;I&#8217;m avoiding the hitting the same problems with Atom PP this time around by effectively ignoring the &lt;span class=&quot;caps&quot;&gt;CMIS&lt;/span&gt; service model &#8211; instead using its domain model as inspiration and assuming that exposing the the system via a Atom/REST or &lt;span class=&quot;caps&quot;&gt;SOAP&lt;/span&gt; interface should be relatively trivial, providing I stay close to the specification&#8217;s domain model.&lt;/p&gt;


	&lt;p&gt;The new implementation of Seamus will attempt to stay &#8220;real&#8221; by concentrating on a single problem domain &#8211; specifically the area of requirements management. Requirements are documents like any other &#8211; they have workflows associated with them, need to be maintained, versioned, distributed and so forth in a controlled manner. I&#8217;m imagining bootstrapping Seamus by using it to maintain its own requirements, thereby proving the system and creating a useful document set at the same time. And if Seamus can be used to satisfactorily manage requirements it may very well be extended to handle other types of documents.&lt;/p&gt;


	&lt;p&gt;I won&#8217;t be writing a single line of code until I have a clear baseline set of requirements ready. I know &#8211; a very &#8220;enterprisey&#8221; approach, but one I hope will pay off. I don&#8217;t have any high hopes for Seamus, other than what I expect to learn along the way. But it&#8217;s going to be an interesting journey, I hope.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-10-20:80</id>
    <published>2009-10-20T11:06:00Z</published>
    <updated>2009-10-20T11:31:20Z</updated>
    <link href="http://rubyredbricks.com/2009/10/20/back" rel="alternate" type="text/html"/>
    <title>Back</title>
<content type="html">
            &lt;p&gt;It&#8217;s been about six weeks, but a few things have got me keen on this blog again:&lt;/p&gt;


	&lt;p&gt;- People actually reading it.&lt;/p&gt;


	&lt;p&gt;Not many, but in the weeks I&#8217;ve been quiet there&#8217;s been 879 visits, 75% of which are new visits.&lt;/p&gt;


	&lt;p&gt;- People linking to it.&lt;/p&gt;


	&lt;p&gt;I was googling &#8220;rails cms&#8221; on a work-related search and was kinda surprised to see rubyredbricks.com come up on the first page.&lt;/p&gt;


	&lt;p&gt;- People saying nice things about it.&lt;/p&gt;


	&lt;p&gt;Well.. just that they&#8217;d noticed that it was gone. Nothing major &#8211; just the odd comment here and there.&lt;/p&gt;


	&lt;p&gt;Added together enough to make me go &#8216;aww.. sniff..&#8217;&lt;/p&gt;


	&lt;p&gt;There&#8217;s some ideas I want to pursue &#8211; so let&#8217;s have a look at them here. I&#8217;m a bit excited about stuff at the moment, so time to get into it&#8230;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-09-01:66</id>
    <published>2009-09-01T12:18:00Z</published>
    <updated>2009-09-01T12:39:42Z</updated>
    <category term="goodbye"/>
    <link href="http://rubyredbricks.com/2009/9/1/goodbye-ruby-red-brick-road" rel="alternate" type="text/html"/>
    <title>Goodbye Ruby Red Brick Road</title>
<content type="html">
            &lt;p&gt;Hi folks&lt;/p&gt;


	&lt;p&gt;In a move that may be known in years to come as &#8220;&lt;a href=&quot;http://en.wikipedia.org/wiki/Why_the_lucky_stiff&quot;&gt;pulling a _why&lt;/a&gt;&#8221;, I&#8217;ve decided to cut back my online presence.. including this blog. The reasons are manifold, but chiefly:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;I want to concentrate on a handful of projects,&lt;/li&gt;
		&lt;li&gt;there&#8217;s a distinct lack of interest (both mine and the general community) in both this blog and my projects,&lt;/li&gt;
		&lt;li&gt;it&#8217;s unfair to foist half-baked ideas on the world, only to abandon them when something shiny and new comes along.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Essentially I just feel a need to put my energies into those projects that I have a chance of actually completing &#8211; or at least bringing out into public reasonably well formed. There&#8217;s no sadness in this &#8211; more a welcome sense of relief in acknowledging that I&#8217;ve very limited resources available and I&#8217;d better make the most of them.&lt;/p&gt;


	&lt;p&gt;My github projects will be mothballed tonight. Various other bits and pieces will be tidied up over the next few days. To people who&#8217;ve contributed to the blog, either through comments or suggesting ideas: thanks, you&#8217;ve been truly grouse. And to people who&#8217;ve just read the odd article, thank you too. It&#8217;s been nice to see references to some of my stuff put up on other more well read (and more deserving to be read) blogs. This blog will stay so people&#8217;s links don&#8217;t die, but I don&#8217;t think I&#8217;ll be updating it for a while &#8211; if ever. But hey, it&#8217;s been an interesting experience.&lt;/p&gt;


	&lt;p&gt;Adios amigos&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-06-26:40</id>
    <published>2009-06-26T14:34:00Z</published>
    <updated>2009-06-27T22:57:08Z</updated>
    <category term="agile"/>
    <category term="ending-the-madness"/>
    <category term="requirements"/>
    <link href="http://rubyredbricks.com/2009/6/26/requirements-are-transient-artifacts" rel="alternate" type="text/html"/>
    <title>Requirements are transient artifacts</title>
<content type="html">
            &lt;p&gt;Today in our end-of-week get together the team discussed treating requirements with a little less care than we currently do. Probably like a lot of places out there, we diligently enter our requirements into a tracking system (currently Mingle), schedule them for work, implement and test and then finally &#8211; if everything goes well &#8211; close them as part of a release..&lt;/p&gt;


	&lt;p&gt;..and then never look at them again.&lt;/p&gt;


	&lt;p&gt;Over time a lot of cruft gets built up &#8211; old requirements that may / may not be still relevant.. huge amounts of data that is pretty difficult to search through.. a big inventory of past work that could be considered &#8211; in the lean sense of the word &#8211; as waste, &lt;em&gt;i.e.&lt;/em&gt; it provides little or no ongoing value.&lt;/p&gt;


	&lt;p&gt;The outcome of the meeting today was to allow requirements to go through their normal life-cycle, reach a final stage of user acceptance &#8211; and then be thrown away. We&#8217;re even considering going back to using just plain 3&#8221;x5&#8221; cards for recording requirements and then tearing them up once the work has been successfully completed from the clients&#8217; perspective.&lt;/p&gt;


	&lt;p&gt;The argument for doing this is that the code and the application itself is the best documentation of an application&#8217;s functionality &#8211; any documentation should be derived from it and not from some abstract or alternative representation. This requires some discipline: when I say &#8220;code&#8221; I include test code. Specifically I mean using &lt;a href=&quot;http://en.wikipedia.org/wiki/Behavior_Driven_Development&quot;&gt;Behaviour Driven Development&lt;/a&gt; (BDD) and capturing the specification of an application in a form that is comprehendible by both developers and end-users alike.&lt;/p&gt;


	&lt;p&gt;Because we&#8217;re a Rails shop and use both &lt;a href=&quot;http://rspec.info/&quot;&gt;RSpec&lt;/a&gt; and &lt;a href=&quot;http://cukes.info/&quot;&gt;Cucumber&lt;/a&gt; we can translate requirements into executable specifications, &lt;em&gt;e.g.&lt;/em&gt;:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;Given that I am I new user
When I register a new account and enter my details
Then I will be emailed a welcome message advising how to activate my account&lt;/code&gt;&lt;/pre&gt;


	&lt;pre&gt;&lt;code&gt;describe User
  it &quot;MUST have a password longer than 6 characters&quot; 
  it &quot;MUST have a unique login id&quot;&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;Once these are entered into the codebase, test code is written (and passes!) these become the canonical specifications for the application, the ultimate statement of what the application actual does and what constraints exist. Often during the course of development we&#8217;ll come across new requirements &#8211; or clarify existing ones. The neat thing about most &lt;span class=&quot;caps&quot;&gt;BDD&lt;/span&gt; tools is they generally allow you to print out a text-only version &#8211; a document that can be cheaply and frequently presented to the customer detailing the actual and proposed features of the system to confirm that development is on the right course, with the right understanding of what the customer wants.&lt;/p&gt;


	&lt;p&gt;Naturally there are other ways of recording requirements that can&#8217;t be covered by &lt;span class=&quot;caps&quot;&gt;BDD&lt;/span&gt;. One important artifact we use all the time is the &lt;a href=&quot;http://en.wikipedia.org/wiki/Website_wireframe&quot;&gt;Wireframe&lt;/a&gt; &#8211; but again this is a temporary artifact. Once the app has been implemented the best definition of its look and feel is the application itself.&lt;/p&gt;


	&lt;p&gt;Some customers will require more permanent requirement artifacts. That&#8217;s fine, we can do that to satisfy contracts &#8211; but it will probably be the exception to the rule. We may need to create additional artifacts in different situations. Again fine, but let&#8217;s start with a simple model first and see what we need to do to complicate things.&lt;/p&gt;


	&lt;p&gt;OK, I&#8217;m tired.. and it&#8217;s been a long week. But I think that makes sense. Yeah?&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-06-18:37</id>
    <published>2009-06-18T13:35:00Z</published>
    <updated>2009-06-18T13:36:44Z</updated>
    <category term="rails-as-cms"/>
    <category term="writing"/>
    <link href="http://rubyredbricks.com/2009/6/18/this-purple-world" rel="alternate" type="text/html"/>
    <title>This Purple World</title>
<content type="html">
            &lt;p&gt;Hey folks&lt;/p&gt;


	&lt;p&gt;Another proto-novel is now online. I&#8217;ve been loathe to put this one up for a couple of reasons. When I read the first few pages of this out at a writer&#8217;s group meeting years ago you could have heard a pin drop. Eventually a little old lady piped up with &#8220;it made me feel sick&#8221;. At the coffee break she later said &#8220;I guess you were trying to make me feel sick, so I guess it works as a piece of writing&#8221; &#8211; which I think was terribly nice of her to say.&lt;/p&gt;


	&lt;p&gt;I&#8217;m not convinced that it &lt;em&gt;does&lt;/em&gt; work, but it&#8217;s out there now and we&#8217;ll see how it progresses. I didn&#8217;t want it to be the first piece I put up because I didn&#8217;t want the content to distract from what I&#8217;m trying to achieve in terms of using Rails as a content management system.&lt;/p&gt;


	&lt;p&gt;Keeping in with the idea that Rails &lt;strong&gt;is&lt;/strong&gt; a language for expressing web sites, I&#8217;ve had to extend the language with a helper. I got sick of typing &lt;code&gt;&amp;lt;%= link_to 'next page', :action =&amp;gt; 'next_page' %&amp;gt;&lt;/code&gt; &#8211; indeed as I said I would &#8211; so I built a simple helper to remove the repetition. So now each page ends with a &lt;code&gt;&amp;lt;%= link_to_page 'next_page' %&amp;gt;&lt;/code&gt;. The convention is that text is the same as the action, with underscores replaced with spaces. I&#8217;ll be in trouble if the text varies from this, but it hasn&#8217;t so far and I can always fall back to the old &lt;code&gt;link_to&lt;/code&gt; approach.&lt;/p&gt;


	&lt;p&gt;As with &lt;a href=&quot;http://guidetotimetravel.com&quot;&gt;The Young Person&#8217;s Guide To Time Travel&lt;/a&gt;, the code is up on &lt;a href=&quot;http://github.com/ferrisoxide/this_purple_world/tree&quot;&gt;github&lt;/a&gt;. The website for the writing can be found here:&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://thispurpleworld.com&quot;&gt;http://thispurpleworld.com&lt;/a&gt;:&lt;/p&gt;


	&lt;p&gt;And before you say it, yes I am a sick puppy.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-06-17:36</id>
    <published>2009-06-17T11:04:00Z</published>
    <updated>2009-06-17T11:34:20Z</updated>
    <category term="rails-as-cms"/>
    <category term="young-persons-guide-to-time-travel"/>
    <link href="http://rubyredbricks.com/2009/6/17/young-person-s-guide-page-2" rel="alternate" type="text/html"/>
    <title>Young Person's Guide: Page 2</title>
<content type="html">
            &lt;p&gt;OK, time for that tricky second page.. the bane of all pretentious writerly types out there in the blagosphere (hello brothers and sisters).&lt;/p&gt;


	&lt;p&gt;I had a bit of fun trimming all the superfluous verbiage from the original &#8211; I&#8217;m sure there&#8217;s a simpler way of saying that. There&#8217;s the implicit irony of using the &#8220;Hemingway&#8221; layout &#8211; I&#8217;m keen to slim this so-called novel down as much as possible, let it travel light and fast. As it happens I&#8217;ve been reading &lt;a href=&quot;http://en.wikipedia.org/wiki/The_Old_Man_and_the_Sea&quot;&gt;&#8216;The Old Man and the Sea&#8217;&lt;/a&gt;. Terse? Ernest was a C coder!&lt;/p&gt;


	&lt;p&gt;Joking aside, I do actually want you to read this story and enjoy it &#8211; I&#8217;d like it to be a &#8216;page turner&#8217;, as much as an online novel can be. An interesting convention I&#8217;ve played with before is to use the last few words on a page as the link to the next. It&#8217;s the closest approximation to a page turning experience I can think of.. when you come to the end of the page the last phrase is the trigger for going to the next page.. the loading time the little mental breath you take when you turn the page..&lt;/p&gt;


	&lt;p&gt;The implementation is deadly simple:&lt;/p&gt;


&lt;code&gt;
He hadn't read a complete book in years, but was still interested in &amp;lt;%= link_to 'opening lines', :action=&amp;gt; 'opening_lines' %&amp;gt;.
&lt;/code&gt;

	&lt;p&gt;&lt;br /&gt;
I&#8217;m using a &lt;code&gt;link_to&lt;/code&gt; but it may get converted into a helper method later. This style of navigation may become unwieldy past a few pages, but we&#8217;re not there yet. As you may have noticed, I&#8217;m deferring all the hard stuff until I actually know I need to worry about it.&lt;/p&gt;


	&lt;p&gt;OK, we&#8217;re a few hundred miles away from making a general purpose &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;. But the spec has changed.&lt;/p&gt;


	&lt;p&gt;Have a look, tell me if it works for you:&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://guidetotimetravel.com&quot;&gt;http://guidetotimetravel.com&lt;/a&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-06-16:35</id>
    <published>2009-06-16T13:47:00Z</published>
    <updated>2009-06-16T13:49:42Z</updated>
    <category term="novel"/>
    <category term="rails-as-cms"/>
    <link href="http://rubyredbricks.com/2009/6/16/rails-as-cms-the-young-person-s-guide" rel="alternate" type="text/html"/>
    <title>Rails as CMS: The Young Person's Guide</title>
<content type="html">
            &lt;p&gt;Hi reader&lt;/p&gt;


	&lt;p&gt;Well, seeing as most of the traffic to this site seems to be from people looking for ideas on how to use Rails as a &lt;span class=&quot;caps&quot;&gt;CMS I&lt;/span&gt;&#8217;ve got this basic pointer:&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://www.browsercms.org/&quot;&gt;http://www.browsercms.org/&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;It&#8217;s pretty sexy. I&#8217;m in no way affiliated with the project &#8211; and that&#8217;s probably a good thing. If you want to get a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; up and running quickly and be able to administer it with a minimum of fuss, this could very well be the thing for you.&lt;/p&gt;


	&lt;p&gt;On the other hand, if you&#8217;re still keen to see how far we can take this concept that Rails is effectively a language for describing a web site then my little project may be of interest. Fair warning.. it&#8217;s a bit odd, and might get suspended at any point if work or other pressures come to bear. With that in mind, let me introduce you to:&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;The Young Person&#8217;s Guide To Time Travel&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Back in my uni days I started writing a novel. I don&#8217;t think that&#8217;s particularly unusual &#8211; many of us started writing a novel in uni. Some of us, like my old mate &lt;a href=&quot;http://www.pennirusson.com/&quot;&gt;Penni Russon&lt;/a&gt; actually went on and got a novel &lt;em&gt;published&lt;/em&gt;, but I chose to take a more traditional path and squash any idea of a successful career in writing under the rest of the pile of unrealised dreams and ambitions.&lt;/p&gt;


	&lt;p&gt;A while ago I blew the dust off a few old CD-ROMs and had a good look at my old writing. None of it was going to set the world on fire, but there was the odd spark &#8211; so I decided to give it another crack. Getting published is less of an issue as just getting something out there, so publishing online is an option. Since talking to &lt;a href=&quot;http://craphound.com/&quot;&gt;Corey Doctorow&lt;/a&gt; at the Melbourne Writer&#8217;s Festival a few years back I&#8217;ve been interested in how the &lt;a href=&quot;http://creativecommons.org/&quot;&gt;Creative Commons&lt;/a&gt; model provides a mechanism for writers to get their content out there without screwing their audience. I also want to live in a world where there&#8217;s a more direct dialogue between content creators and consumers. Apologies for (a) the implicit lefto-pinko-free-as-in-freedom sentiment and (b) name-dropping. For what it&#8217;s worth, I thought Corey was a decent guy.. though like many Canadians he has a funny-shaped head.&lt;/p&gt;


	&lt;p&gt;OK, enough of the back-story. Here are my basic requirements for a content management system:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;I don&#8217;t have time to learn a new tool.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Drupal, Radiant, &lt;em&gt;etc&lt;/em&gt; may be great but it&#8217;s another &#8220;language&#8221; I have to grok. I understand and enjoy the conventions of Rails &#8211; that&#8217;s all I want to have to know. When it comes time to customise I don&#8217;t want to have to work around a different set of conventions or code.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;I don&#8217;t have time .. period.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;I work full-time, have a family and a million other things in my life.  The &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; needs to get out of my way and let me write. Anything clunky or complex is useless.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;The &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; must support my tool set.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;The novel will get written in small increments, in a very &#8216;agile&#8217; sense (release early, refactoring, &lt;em&gt;etc&lt;/em&gt;). It&#8217;s very similar to how I might write code. I expect to be able to use text editors on my laptop, use version control systems, preview work locally, test it.. just like I would with an application. In my head, the novel is just a different kind of application.&lt;/p&gt;


	&lt;p&gt;Some of this was covered in the original &lt;a href=&quot;http://rubyredbricks.com/2009/2/24/ruby-on-rails-based-cms&quot;&gt;&#8216;Ruby on Rails based &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;&#8217; post&lt;/a&gt; from way back. I&#8217;ll be revisiting the points from that article as we go, though not right now. My immediate aim is just to get something up and running as quickly as possible &#8211; and the simplest thing I can possibly do is to create a new Rails app, create a controller for serving up pages and drop the opening page in.&lt;/p&gt;


	&lt;p&gt;You can see the code here:&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://github.com/ferrisoxide/guide_to_time_travel/tree/master&quot;&gt;http://github.com/ferrisoxide/guide_to_time_travel/tree/master&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;There&#8217;s plenty to do &#8211; I&#8217;ve been incredibly lazy and not bothered to secure or structure the code at all. That can come later. The objective was to get something live as quickly as possible. I nicked the &lt;a href=&quot;http://warpspire.com/hemingway/&quot;&gt;Hemingway&lt;/a&gt; layout from &lt;a href=&quot;http://warpspire.com/&quot;&gt;Warpsire&lt;/a&gt;, though I&#8217;ll need to get it looking a bit neater. Getting the actual site up and running simply a matter of shelling in an running &lt;code&gt;git clone&lt;/code&gt;. From go to whoa took maybe all of an hour, spread over a few days, with the first page available here:&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://guidetotimetravel.com/&quot;&gt;http://guidetotimetravel.com/&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;One gotcha &#8211; Dreamhost&#8217;s Passenger setup doesn&#8217;t seem to use your local gems, so if you are wanting to use Rails 2.3.2 you need to install it into your local gem repo and run &lt;code&gt;rake rails:freeze:gems&lt;/code&gt;. It&#8217;s quite odd, as &lt;code&gt;rails -v&lt;/code&gt; will return the 2.3.2 version number if it&#8217;s installed but I&#8217;m guessing Passenger looks at the version of Rails in the official Dreamhost repo (v 2.2.2 at the time of writing). Makes sense.&lt;/p&gt;


	&lt;p&gt;All good. Now we come to the difficult part for all aspiring part-time novelists: the tricky second page. But that&#8217;s a whole new blog post. &#8216;Til next time&#8230;&lt;/p&gt;


	&lt;p&gt;Cheers
Tom&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-06-15:34</id>
    <published>2009-06-15T12:25:00Z</published>
    <updated>2009-06-15T12:30:23Z</updated>
    <category term="process control"/>
    <category term="rest"/>
    <link href="http://rubyredbricks.com/2009/6/15/rest-pca" rel="alternate" type="text/html"/>
    <title>REST-PCA</title>
<content type="html">
            &lt;p&gt;Now for something completely different, a few weekends ago I whacked out a proposal for a simple process control architecture based on &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt;&#8230; as you do. You can read about it here:&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://www.rest-pca.org&quot;&gt;http://www.rest-pca.org&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;I&#8217;m not really sure what I&#8217;m planning with this &#8211; it&#8217;s more an ongoing conversation with an old mate from my process control days. Nah.. big fat lie.. I really want to build a &lt;span class=&quot;caps&quot;&gt;SCADA&lt;/span&gt; system to run something like this:&lt;/p&gt;




	&lt;p&gt;More than a weekend project &#8211; but what a sweet, sweet dream to have.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-05-28:28</id>
    <published>2009-05-28T23:01:00Z</published>
    <updated>2009-05-28T23:17:54Z</updated>
    <category term="jobs"/>
    <category term="katalyst"/>
    <category term="rails"/>
    <link href="http://rubyredbricks.com/2009/5/28/looking-for-rails-developers-in-adelaide" rel="alternate" type="text/html"/>
    <title>Looking for Rails developers in Adelaide</title>
<content type="html">
            &lt;p&gt;If you&#8217;re in Adelaide (South Australia) and have experience in Rails, Katalyst are currently looking for developers.  We&#8217;re a small team, specializing in custom web development and interactive media. You can get a bit of an idea of what we do from the &lt;a href=&quot;http://katalyst.com.au&quot;&gt;Katalyst website&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;If you&#8217;re interested, send a CV to jobs@katalyst.com.au.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-05-07:26</id>
    <published>2009-05-07T11:41:00Z</published>
    <updated>2009-05-07T11:42:21Z</updated>
    <category term="bored"/>
    <category term="fun-n-games"/>
    <link href="http://rubyredbricks.com/2009/5/7/reality-hacking-lifts" rel="alternate" type="text/html"/>
    <title>Reality Hacking: Lifts</title>
<content type="html">
            &lt;p&gt;We have some very old, heritage listed lifts at work. Some days they function, many days they don&#8217;t. When the lifts break down the maintenance guy leaves a note on the door &#8211; usually annotated within hours by some bored or frustrated tenant or visitor to the building.&lt;/p&gt;


	&lt;p&gt;&lt;/p&gt;


	&lt;p&gt;As amusing as &#8220;fuck me&#8221; might be, I really felt like a bit of reality tweaking was in order. Small things amuse small minds.. and I have a tiny, peanut-sized mind. Plus it&#8217;s my last week in the building, so I may as well have some fun:&lt;/p&gt;


	&lt;p&gt;&lt;/p&gt;


	&lt;p&gt;Anything to make other people&#8217;s lives a little bit weirder&#8230;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-04-27:25</id>
    <published>2009-04-27T14:11:00Z</published>
    <updated>2009-09-02T13:22:16Z</updated>
    <category term="electronics"/>
    <category term="lego"/>
    <link href="http://rubyredbricks.com/2009/4/27/simple-traffic-light" rel="alternate" type="text/html"/>
    <title>Simple Lego Traffic Light - Prototype</title>
<content type="html">
            &lt;h1&gt;Initial Prototype&lt;/h1&gt;


	&lt;p&gt;The kids were after a traffic light set up for an intersection on a Lego road. My first idea was to stick some LEDs into a suitable brick. The &lt;a href=&quot;http://www.bricklink.com/catalogItemPic.asp?P=4595&quot;&gt;4595 brick&lt;/a&gt; seemed a reasonable candidate &#8211; it looks a bit like a traffic light, even though it only has two holes on each face. I thought of building a basic red/green traffic light, but couldn&#8217;t figure how to could control the light effectively &#8211; there&#8217;s not much room at the bottom of the 4595 to fit four wires and keep the lot from shorting. Then there&#8217;s the issue of switching the current from one &lt;span class=&quot;caps&quot;&gt;LED&lt;/span&gt; to another as the signal changes. Tricky.&lt;/p&gt;


	&lt;p&gt;Then I had a wee brain storm: only one &lt;span class=&quot;caps&quot;&gt;LED&lt;/span&gt; needs to be on at a time &#8211; all I needed to do was to wire the LEDs together so the cathode of one was connected to the anode of the other and &lt;em&gt;vice versa&lt;/em&gt;. Because LEDs only allow current to flow in one direction, when the current runs one way only one &lt;span class=&quot;caps&quot;&gt;LED&lt;/span&gt; will light up. Reverse the current and the other &lt;span class=&quot;caps&quot;&gt;LED&lt;/span&gt; lights up. So simple I felt dumb after working it out.&lt;/p&gt;


	&lt;p&gt;&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;The basic components:&lt;/strong&gt; a 4595 brick, a small red &lt;span class=&quot;caps&quot;&gt;LED&lt;/span&gt;, a small green &lt;span class=&quot;caps&quot;&gt;LED&lt;/span&gt; and some heat shrink to isolate the wires from each other.&lt;/p&gt;


	&lt;p&gt;&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Testing:&lt;/strong&gt; Setting up the LEDs with the anodes around the right way. The wires are bent prior to pushing into the brick (and so I&#8217;ll remember which way around they go).&lt;/p&gt;


	&lt;p&gt;&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Red means stop:&lt;/strong&gt; Current is applied to both LEDs, but only the red one can light up.&lt;/p&gt;


	&lt;p&gt;&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Green means go:&lt;/strong&gt; Reverse the direction of the current and the green light comes on, the red light turns off.&lt;/p&gt;


	&lt;p&gt;The pictures didn&#8217;t turn out too well as I took these on a crappy old camera. Time to buy a new one &#8211; though cameras get dropped so often in this house they may as well be consumable items.&lt;/p&gt;


	&lt;p&gt;Getting the wires into place was a pain. The red &lt;span class=&quot;caps&quot;&gt;LED&lt;/span&gt; went in OK but the green was awkward as the wires are quite stiff and it&#8217;s hard to bend and pull them through without threatening to fracture the &lt;span class=&quot;caps&quot;&gt;LED&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;I didn&#8217;t bother trying to make sure the anode/cathode pairs of each &lt;span class=&quot;caps&quot;&gt;LED&lt;/span&gt; were connecting properly. The green &lt;span class=&quot;caps&quot;&gt;LED&lt;/span&gt; was forced in over the top of the red so its two wires were pushed down on the red &lt;span class=&quot;caps&quot;&gt;LED&lt;/span&gt;&#8217;s wires, ensuring contact.&lt;/p&gt;


	&lt;p&gt;There&#8217;s a small peg inside the 4595 that keeps the wires apart inside the brick. As they come through the hole in the bottom there a danger that the two sets of wires may touch each other so I pushed a small piece of heat shrink up through the hole over just one pair of the wires.&lt;/p&gt;


	&lt;h1&gt;Next Steps&lt;/h1&gt;


	&lt;p&gt;The prototype seems to work OK, so the next steps are to clean up the design. I didn&#8217;t really use the heat shrink properly, nor made sure everything was well connected, so I&#8217;d look towards improving that.&lt;/p&gt;


	&lt;p&gt;If I do this again I&#8217;d cut the wires right back and solder the LEDs together. I&#8217;d solder a flexible pair of coated wires to each side of the LEDs and pull them through the bottom of the brick. I&#8217;d probably use an &lt;span class=&quot;caps&quot;&gt;RCX&lt;/span&gt; to control the direction of the current. You&#8217;d only need one set of wires to control a complete traffic intersection: if you hooked a set of four traffic signals &#8211; one for each direction at a cross road &#8211; all you&#8217;d need to do is run the current one way to turn one flow of traffic &#8216;green&#8217;, reverse the current the turn on the green lights for the other flow. Providing it can supply enough voltage, one &lt;span class=&quot;caps&quot;&gt;RCX&lt;/span&gt; should be able to control up to three sets of intersections.&lt;/p&gt;


	&lt;p&gt;I can see how this could be used for other things. You could easily make a flashing railway crossing signal by wiring two red LEDs in the same way and swapping the direction of the current back and forth. More fun to be had.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://rubyredbricks.com/">
    <author>
      <name>ferrisoxide</name>
    </author>
    <id>tag:rubyredbricks.com,2009-04-20:23</id>
    <published>2009-04-20T00:01:00Z</published>
    <updated>2009-04-20T00:02:22Z</updated>
    <link href="http://rubyredbricks.com/2009/4/20/j-g-ballard-is-dead" rel="alternate" type="text/html"/>
    <title>J.G. Ballard is Dead</title>
<content type="html">
            &lt;p&gt;Man, I&#8217;m devastated: &lt;a href=&quot;http://news.bbc.co.uk/2/hi/entertainment/8007331.stm&quot;&gt;J.G. Ballard dead at 78&lt;/a&gt;. I&#8217;ve been reading a collection of his short stories lately, and been struck by the originality of his voice &#8211; a deep, gut-wrenching deconstruction of modernity. Along with Woolfe and Conrad, one of my all-time favourite authors.&lt;/p&gt;


	&lt;p&gt;He&#8217;ll be missed by many, I am sure.&lt;/p&gt;
          </content>  </entry>
</feed>
