<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>sevensoft</title>
    <link>http://blog.sevensoft.net/</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>ken brooks</description>
    <item>
      <title>InfoQ catching up with the easyb team</title>
      <description>&lt;p&gt;Craig Wickesser from &lt;a href="http://infoq.com"&gt;InfoQ&lt;/a&gt; pinged the members of the easyb dev team recently in preparation for an article about &lt;a href="http://en.wikipedia.org/wiki/Behavior_driven_development"&gt;BDD&lt;/a&gt; and bringing it to the masses.&lt;/p&gt;

&lt;p&gt;The focus of the article is on easyb. It references Rod&amp;#8217;s excellent &lt;a href="http://www.javaworld.com/javaworld/jw-09-2008/jw-09-easyb.html"&gt;JavaWorld article&lt;/a&gt; and then goes on to dive into a brief Q&amp;amp;A with the easyb team.&lt;/p&gt;

&lt;p&gt;If you want some inside information on where easyb is headed, then &lt;a href="http://www.infoq.com/news/2008/09/bdd_with_easyb"&gt;
Behavior-Driven Development for Everyone&lt;/a&gt; by Craig is hot off the presses today and is a must read.&lt;/p&gt;</description>
      <pubDate>Tue, 23 Sep 2008 04:23:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:77da032c-85dc-4e31-a79d-d435547e4e41</guid>
      <author>Ken Brooks</author>
      <link>http://blog.sevensoft.net/articles/2008/09/23/infoq-catching-up-with-the-easyb-team</link>
      <category>easyb</category>
      <category>groovy</category>
      <category>bdd</category>
    </item>
    <item>
      <title>pretty print your behavior</title>
      <description>&lt;p&gt;Our favorite BDD tool is about to get some upgrades that give you that warm fuzzy feeling inside.  Just like waking up on a cold winter day to the wonderful smell of baking cookies. Yummy!&lt;/p&gt;

&lt;p&gt;Html reports you say? Well hello Mr. Fancy Pants!&lt;/p&gt;

&lt;p&gt;&lt;a href="/files/easyb_reports_summary.png" rel="lightbox"&gt;&lt;img src="/files/tn_easyb_reports_summary.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All the goodness you&amp;#8217;ve come to love about the existing easyb reports have now come to life in living color. In order to enable them, you&amp;#8217;ll just need to configure another report in exactly the same way as other reports.&lt;/p&gt;

&lt;p&gt;via ant in your easyb task: &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;report location="target/easyb-report.html" format="html" /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;or on the command line: &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;c:&amp;gt;java org.disco.easyb.BehaviorRunner my/path/to/MyStory.groovy -html ./target/easyb_report.html
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Currently available are a Summary, Specification List, Stories List, Specification List Plain, Stories List Plain.&lt;/p&gt;

&lt;p&gt;The Summary you saw just above. It will show you an overall summary, and summaries at the specification and story level. Any failed behavior count will be highlighted in red and pending behaviors will be highlighted in a wonderfully peaceful reminder color of purple.&lt;/p&gt;

&lt;p&gt;The Stories List provides all of that that but takes it a couple of steps further. All of the elements of the stories (any scenarios, givens, whens, thens, etc.. ) will show up when the story name is clicked on and for any failures you&amp;#8217;ll get an eyeful of failure messages along with part of the relevent stacktrace.&lt;/p&gt;

&lt;p&gt;&lt;a href="/files/easyb_reports_storieslist.png" rel="lightbox"&gt;&lt;img src="/files/tn_easyb_reports_storieslist.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More of the same for Specifications list.&lt;/p&gt;

&lt;p&gt;&lt;a href="/files/easyb_reports_specificationslist.png" rel="lightbox"&gt;&lt;img src="/files/tn_easyb_reports_specificationslist.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since all we had prior to easyb 1.0 was a text only format, we got sentimental and included a stripped down, nearly text only, format here as well. Ok, so we didn&amp;#8217;t really get sentimental, we actually thought this is really where the rubber meets the road when it comes to bringing stakeholders and developers together. As part of your build you can now publish these reports and share them with those interested parties. Makes BehaviorDrivenDevelopment truly, uh, easy!&lt;/p&gt;

&lt;p&gt;&lt;a href="/files/easyb_reports_speclistplain.png" rel="lightbox"&gt;&lt;img src="/files/tn_easyb_reports_speclistplain.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="/files/easyb_reports_storylistplain.png" rel="lightbox"&gt;&lt;img src="/files/tn_easyb_reports_storylistplain.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All of this and more is waiting for you in easyb 1.0. Just like those tasty warm cookies, its still in the oven and I&amp;#8217;ll bet you can&amp;#8217;t wait to get your hands on it. &lt;/p&gt;

&lt;p&gt;Keep an eye on the following sites for more announcements about the availability of 1.0.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://easyb.org"&gt;easyb.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/easyb"&gt;easyb googlecode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <pubDate>Sun, 21 Sep 2008 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:e3f707ee-9dfa-4694-8ac8-516a26e1a4f3</guid>
      <author>Ken Brooks</author>
      <link>http://blog.sevensoft.net/articles/2008/09/21/pretty-print-your-behavior</link>
      <category>easyb</category>
      <category>groovy</category>
      <category>bdd</category>
      <category>behavior</category>
      <category>driven</category>
      <category>development</category>
      <enclosure type="image/png" length="106985" url="http://blog.sevensoft.net/files/easyb_reports_storieslist.png"/>
    </item>
    <item>
      <title>an easyb storm is brewing</title>
      <description>&lt;p&gt;The press on &lt;a href="http://easyb.org"&gt;easyb&lt;/a&gt; has really picked up in the last few weeks. I think the development world at large is about to catch onto the super fun way of BehaviorDrivenDevelopment via easyb. For those of you who haven&amp;#8217;t heard, easyb is a BDD tool for testing your code but it has a slick DSL (Domain Specific Language) that makes it ridiculously easy to specify and ensure the intentions of the code you are testing. Best of all, its written in groovy so its usable in your existing jdk5+ jvm.&lt;/p&gt;

&lt;p&gt;Here are a few posts I know about, feel free to ping me with others you know about.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-09-2008/jw-09-easyb.html"&gt;Behavior-driven development with easyb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jet.javacom.co.nz/index.php/Main_Page"&gt;Java Emerging Technologies Conference 2008 (JET 2008)&lt;/a&gt; - Easyb is one of the topics for presentation&lt;/li&gt;
&lt;li&gt;&lt;a href="http://java.dzone.com/articles/is-easyb-easy"&gt;Is easyb easy?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <pubDate>Sat, 20 Sep 2008 04:40:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:a4d0853c-ad86-4ae7-a532-18fa13ac66c5</guid>
      <author>Ken Brooks</author>
      <link>http://blog.sevensoft.net/articles/2008/09/20/an-easyb-storm-is-brewing</link>
      <category>easyb</category>
    </item>
    <item>
      <title>SSL - security by confusion</title>
      <description>&lt;p&gt;Being a developer, I have to admit that transport security is not usually something I put much thought into.
I secure the application itself (authentications, authorizations, and prevent attacks directly to the site like sql injection, xss, etc..).
However, when dealing with the external world we are faced with securing the transport when sensitive data is involved.&lt;/p&gt;

&lt;p&gt;Developers know enough to utter the phrase SSL when this becomes a concern. Seems like a common problem that needs to be solved
so I would assume that there is a very simple solution. Some place i can go to for a basic tutorial, pick up a toolkit and off I go.&lt;/p&gt;

&lt;p&gt;Not exactly.&lt;/p&gt;

&lt;p&gt;Not even remotely close. I&amp;#8217;m sure that 6 months from now it will all seem so easy and I&amp;#8217;ll find this post to be just silly.
But right now I&amp;#8217;d have to say that I was more frustrated by looking for good sources of information on SSL than just about anything I&amp;#8217;ve researched in the past 5 years.&lt;/p&gt;

&lt;p&gt;My problem is that I wanted to use 2 way SSL. My criteria for what I needed to know was relatively simple.  Find a place to define the general concepts of SSL. 
I now know some of these to be part of that domain: keystores, certificates, certificate authorities, certificate chains, self signed certs.
At the beginning of this journey I didn&amp;#8217;t even know what those were, I truly didn&amp;#8217;t know where to start. I didn&amp;#8217;t even know enough to ask what I should be asking about.&lt;/p&gt;

&lt;p&gt;Every place I turned seemed to be an outlet for people obviously far smarter than I, because invariably I ran across reams of documents about low level encryption algorithms.
Honestly, I&amp;#8217;m not compelled to be intimately familiar with all the details of cryptography or PKI, I just want to know where the durn ON button is for security.
Even my trusty old friend wikipedia let me down in this area. (http://en.wikipedia.org/wiki/Secure&lt;em&gt;Sockets&lt;/em&gt;Layer)
It almost seems as tho the industry has agreed that the way to stop hackers is in the strength of confusion, whereas I would have thought it would have been the strength of the encryption.&lt;/p&gt;

&lt;p&gt;There were 3 pages that seemed to help out in putting the puzzle together.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;http://www.faqs.org/docs/Linux-HOWTO/SSL-Certificates-HOWTO.html&lt;/li&gt;
&lt;li&gt;http://www.eclectica.ca/howto/ssl-cert-howto.php&lt;/li&gt;
&lt;li&gt;http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/keytool.html&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a future post I&amp;#8217;ll try to lay out a high level picture of the landscape (so hopefully others will not have to go thru the same expedition I did)
and I&amp;#8217;ll also be giving step by step instructions on setting up 2way ssl, using self signed certs for development testing, in a Weblogic 10 environment.&lt;/p&gt;</description>
      <pubDate>Wed, 10 Sep 2008 03:41:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:e386f7f5-17f1-4a1a-a484-551cd6fb6286</guid>
      <author>Ken Brooks</author>
      <link>http://blog.sevensoft.net/articles/2008/09/10/ssl-security-by-confusion</link>
      <category>ssl</category>
    </item>
    <item>
      <title>Executable Documentation - EasyB style</title>
      <description>&lt;p&gt;One of the challenges of maintaining and enhancing an existing system is that the documentation goes out of date probably before you even finish it the first time. Whenever someone has a question for me about how does something work I usually refer to the location of truth. That would be the code itself, which is always the most up to date source of documentation. So the closer to the source you get the better chance your documentation has of standing the test of time. &lt;/p&gt;

&lt;p&gt;Unit Tests helps in this area in that they can outline the assertions we are placing on our code. That too must stay up to date because it is also close to the code. Unfortunately unit tests are often more complex than the code they are testing and ultimately end up not being very good sources of documentation either.&lt;/p&gt;

&lt;p&gt;There has to be a way to build human (possibly even business person) consumable documentation that stays in sync with the truth.&lt;/p&gt;

&lt;p&gt;Enter EasyB.&lt;/p&gt;

&lt;p&gt;EasyB is a BDD testing framework written in groovy and java. It provides what we like to call executable documentation. This is achieved by taking TDD, all sopping wet with techy mess, and throwing it in the evolutionary dryer with a nice fabric softener. Out from the other end pops a nice fluffy testing framework that can not only provide up-to date documentation about the application every time it is built, but can even bridge the gap between business requirements and developer interpretation.&lt;/p&gt;

&lt;p&gt;It has two supported ways to write specifications. Behaviors and Stories. Its just a matter of personal taste on which you use for each component in your project. Behaviors often are shorter and good for utilities. Stories are more verbose and usually map to a series of interactions.&lt;/p&gt;

&lt;p&gt;Behaviors look like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;it "should return null for null input to trim", {
  ensure(StringUtilPartial.trim(null)) {
    isNull
  }
}

it "should return the string without whitespace at either the end", {
  StringUtilPartial.trim(" somestring ").shouldNotBe null
  StringUtilPartial.trim(" somestring ").shouldBe "somestring"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Stories look like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;scenario "appending string to empty string buffer", {
  given "an empty string buffer", {
    stringBuffer = new StringBuffer()
  }

  when "a string is appended", {
    stringBuffer.append("somestring")
  }

  then "the buffer should contain the string appended", {
    stringBuffer.toString().shouldBe "somestring"
  }
}

scenario "appending string to existing string buffer with existing data", {
  given "a string buffer with an initial value", {
    stringBuffer = new StringBuffer("abcd")
    originalStringBufferValue = stringBuffer.toString()
  }

  when "a string is appended", {
    stringBuffer.append("somestring")
  }

  then "the buffer should contain the original value plus the appended value", {
    stringBuffer.toString().shouldBe(originalStringBufferValue + "somestring")
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;What you have just witnessed is that we have tested our code and written documentation at the same time. That documentation will evolve right along with the code its testing and nobody has to be the low man on the totem pole and write documentation.&lt;/p&gt;

&lt;p&gt;All well and good, but what we wrote above still wouldn&amp;#8217;t be what a business person would consider documentation. Too much techy goobledeegook in there. Easyb has another trick up its sleeve especially when dealing with the story based specifications. When I ran the story above a report is generated and here is what the contents look like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  Story: string buffer
    scenario appending string to empty string buffer
      given an empty string buffer
      when a string is appended
      then the buffer should contain the string appended
    scenario appending string to existing string buffer with existing data
      given a string buffer with an initial value
      when a string is appended
      then the buffer should contain the original value plus the appended value
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;What?! Where did that english documentation come from? Shhh.. don&amp;#8217;t tell your developers that they wrote it.&lt;/p&gt;

&lt;p&gt;Check out easyb at &lt;a href="http://easyb.org/"&gt;easyb.org&lt;/a&gt; and join the &lt;a href="http://groups.google.com/group/easyb-users"&gt;group&lt;/a&gt; to keep up on the latest developments.
The current release of easyb is 0.6 and some of the syntax presented above (shouldBe for example) is in the trunk and not a release yet.&lt;/p&gt;</description>
      <pubDate>Mon, 04 Feb 2008 21:45:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:92f7f736-3cee-4d5d-beae-949940ad4876</guid>
      <author>Ken Brooks</author>
      <link>http://blog.sevensoft.net/articles/2008/02/04/executable-documentation-easyb-style</link>
      <category>easyb</category>
      <category>easyb</category>
      <category>groovy</category>
      <category>bdd</category>
    </item>
    <item>
      <title>Simplicity and Consistency (Part 2: Consistency)</title>
      <description>&lt;p&gt;Maintaining consistency within a shop is one of the easiest things to do and one of the best ways to save time and reduce errors. &lt;/p&gt;

&lt;p&gt;Consistency comes in many flavors.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Languages used&lt;/li&gt;
&lt;li&gt;Tools used (build systems, scm)&lt;/li&gt;
&lt;li&gt;Code standards&lt;/li&gt;
&lt;li&gt;Processes (code reviews)&lt;/li&gt;
&lt;li&gt;many more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing that wastes a tremendous amount of our time is context switching. Context switching happens when &amp;#8216;being in the zone&amp;#8217; is interrupted, forcing you to drop what you were working on and get up to speed on a totally different topic. By having consistent set of items from any or all of the above categories the context switching is reduced. &lt;/p&gt;

&lt;p&gt;Keeping your list of languges and tools to a minimum goes against what we as creative people (known as developers) thrive on. We love to learn new languages and we love to use the newest and shiniest toys available. Unfortunately, introducing new languages and tools most often serves to complicate our environment and eat up more of our precious time. Unless a plan is put into place to consolidate multiple tools or replace existing tools then what you end up with is having to support each. That costs usually outweighs the benefit.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m all for &amp;#8220;using the right tool for the job&amp;#8221;. However, it seems hard enough to find good developers for one language, much less those that know, or are willing to learn, &amp;#8216;the right tool&amp;#8217;.&lt;/p&gt;

&lt;p&gt;Of course, all of this is different for each shop. Many of the problems I mention may not affect small startups. They might only  have one application and thus only one language, one build system and one SCM. If you come from the enterprise world or a company that has been around for a long time then you probably can relate.&lt;/p&gt;

&lt;p&gt;Take a look around next time you are at work and take stock. Do you already have too many tools? Do you notice a trend of new tools being consistently added? Do you notice your productivity waning?&lt;/p&gt;</description>
      <pubDate>Sat, 26 Jan 2008 22:53:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:d7c035bb-830f-442c-bd93-b59e02205bab</guid>
      <author>Ken Brooks</author>
      <link>http://blog.sevensoft.net/articles/2008/01/26/simplicity-and-consistency-part-2-consistency</link>
      <category>productivity</category>
    </item>
    <item>
      <title>Simplicity and Consistency (Part 1: Simplicity)</title>
      <description>&lt;blockquote&gt;
    &lt;p&gt;Any intelligent fool can make things bigger, 
    more complex, and more violent. It takes a 
    touch of geniusâ€”and a lot of courageâ€”to 
    move in the opposite direction. 
    â€”Albert Einstein&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This speaks volumes. The mission statement for the group I&amp;#8217;m part of at work is &amp;#8216;Simplicity, Consistency&amp;#8217;.&lt;/p&gt;

&lt;p&gt;Simplicity is difficult. It is probably the hardest thing to achieve in development.&lt;/p&gt;

&lt;p&gt;A developer usually goes thru a maturity process in stages. See if any of this sounds familiar.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developer produces very little code. They struggle to get anything done&lt;/li&gt;
&lt;li&gt;Developer produces alot of code as they become familiar with the language of choice&lt;/li&gt;
&lt;li&gt;Developer produces alot of code but now does it fast!&lt;/li&gt;
&lt;li&gt;Developer produces the right solution in very little code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Q: Why would I want to spend time simplifying if I can rip thru the code at lightspeed?&lt;/p&gt;

&lt;p&gt;A: The code you are writing is probably going to be around alot longer than you think. That means that many people will probably have to open it up and understand it. The less lines of code you write, the less they&amp;#8217;ll have to digest and the meaning of the code is usually not obfuscated. (Now, to be fair, I&amp;#8217;m not saying that making code terse for the sake of being clever is a good thing. That is probably my biggest gripe with perlisms. They are terse at the expense of clear meaning.) The easier it is to understand, the faster you can change it and the likely hood that your changes will be successful will go up.&lt;/p&gt;

&lt;p&gt;In my years of development one thing remains quite constant. It usually never fails that when a challenge is presented, the best answer invariably turns out to be the simplest. However, its usually the hardest to arrive at. &lt;/p&gt;

&lt;p&gt;So next time someone tries to use lines of code written or some other &amp;#8216;objective&amp;#8217; way of measuring your developer and codebase maturity perhaps you should rebut that you value those that spend more time on less lines of code than less time on more lines of code. It will save you time and money in the long run.&lt;/p&gt;</description>
      <pubDate>Fri, 25 Jan 2008 00:20:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:5c45b4d1-1c24-4459-ac94-6b6a16f828db</guid>
      <author>Ken Brooks</author>
      <link>http://blog.sevensoft.net/articles/2008/01/25/simplicity-and-consistency-part-1-simplicity</link>
      <category>good</category>
      <category>development</category>
    </item>
    <item>
      <title>Launchy 2 and batch files</title>
      <description>&lt;p&gt;I feel crippled when I work on windows. The reason is that I rely on QuickSilver on my mac so much. The closest thing I&amp;#8217;ve been using (and I think I&amp;#8217;ve tried them all) is Launchy. While not living up to the lofty bar set by quicksilver, launchy has worked relatively well for me in my windows (read: work) life.&lt;/p&gt;

&lt;p&gt;Today I saw a notification that Launchy 2.0 was out and decided to upgrade.  Shame on me because I didn&amp;#8217;t do any reading about it first. Normally I wouldn&amp;#8217;t figure this to be an issue. Just download it, install it and move on. However that little miss cost me an hour or so of time.&lt;/p&gt;

&lt;p&gt;Launchy was rewritten and as a casualty of that all existing configurations (directories to be scanned, custom commands, etc..) paid the ultimate price. Gone. So just be warned that if you plan on upgrading to 2.0 you should probably jot down your configurations.&lt;/p&gt;

&lt;p&gt;Another change, which I don&amp;#8217;t want to waste the brain cycles on figuring out why, is that I used to be able to start a .bat file that we use to set environment variables and so on. That would open up and stay in the command prompt. Since the upgrade it opens the batch file, runs it and then exits the shell. Hrm&amp;#8230; not exactly what I hoping for.&lt;/p&gt;

&lt;p&gt;I created a workaround that actually provides a little more functionality than before. There is a plugin called &lt;em&gt;runny or runner&lt;/em&gt; bundled with launchy and we can leverage that. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open up launchy&lt;/li&gt;
&lt;li&gt;Right click and choose options&lt;/li&gt;
&lt;li&gt;Select the 4th tab &amp;#8216;Plugins&amp;#8217;&lt;/li&gt;
&lt;li&gt;Click on &amp;#8216;Runner&amp;#8217; in the left pane&lt;/li&gt;
&lt;li&gt;Click the + to add another command to be run&lt;/li&gt;
&lt;li&gt;give it a name (the shortcut you will refer to it as when invoking launchy)&lt;/li&gt;
&lt;li&gt;put &lt;em&gt;C:\WINNT\System32\cmd.exe&lt;/em&gt; or &lt;em&gt;C:\Windows\System32\cmd.exe&lt;/em&gt; in the program column&lt;/li&gt;
&lt;li&gt;put &lt;em&gt;/K path&lt;/em&gt;to&lt;em&gt;bat\batfile.bat $$&lt;/em&gt; in the arguments column&lt;/li&gt;
&lt;li&gt;click ok&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now when you invoke launchy you can give it the short name and hit enter, or give it the short name, hit tab and then pass additional arguments to your batch file..&lt;/p&gt;</description>
      <pubDate>Wed, 26 Dec 2007 14:16:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:e846c61d-8ab0-4d45-8ac6-260ac0013d99</guid>
      <author>Ken Brooks</author>
      <link>http://blog.sevensoft.net/articles/2007/12/26/launchy-2-and-batch-files</link>
      <category>launchy</category>
    </item>
    <item>
      <title>easyb plugable functionality</title>
      <description>&lt;p&gt;if you aren&amp;#8217;t familiar with easyb (http://easyb.org), then do yourself a favor and pay that site a visit to learn the basics of this great bdd framework for java.&lt;/p&gt;

&lt;p&gt;one of the strengths of easyb is its domain specific language that allows us to write behaviors and stories that act as executable documentation. we also have a way to allow you as a user to extend that by writing plugins.&lt;/p&gt;

&lt;p&gt;here are the steps to do so:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;implement Plugable on our plugin classes (optional)&lt;/li&gt;
&lt;li&gt;create the following file META-INF/services/org.disco.easyb.core.delegates.Plugable&lt;/li&gt;
&lt;li&gt;package it all up into a jar and make it available on the classpath&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;lets start with our class, write any java/groovy class that exposes a public method and (for readability) implement the org.disco.easyb.core.delegates.Plugable interface.&lt;/p&gt;

&lt;p&gt;now, create a file named org.disco.easyb.core.delegates.Plugable and when you package everything into the plugin jar put that file into the META-INF/services directory. the contents of the file need only be a list of classes (fully qualified) that optionally implement the Plugable interface and expose public functionality you wish to mixin to easyb.&lt;/p&gt;

&lt;p&gt;package your classes and the property file into a jar file (outside the scope of this article) and make sure that jar file is available on the classpath when easyb stories are run&lt;/p&gt;

&lt;p&gt;three steps, thats it? seem too simple! thats what easby is all about.&lt;/p&gt;

&lt;p&gt;So whats happening under the covers? when easyb encounters a method call in the story that it can&amp;#8217;t resolve it then goes thru the list of classes found in the META-INF/services/org.disco.easyb.core.delegates.Plugable file. Each class is then inspected to see if it contains a method that can handle our call. If it finds one then everything is golden and the call is made, if not then a MethodMissing exception is thrown.&lt;/p&gt;

&lt;p&gt;If you wish to see an example of this completely implemented then checkout the easyb source and look in the plug-ins dir for easyb-dbunit. This mixes in dbunit functionality into easyb.&lt;/p&gt;</description>
      <pubDate>Sun, 23 Dec 2007 20:36:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:0540401b-7895-4091-85ee-c866273134a8</guid>
      <author>Ken Brooks</author>
      <link>http://blog.sevensoft.net/articles/2007/12/23/easyb-plugable-functionality</link>
      <category>easyb</category>
    </item>
    <item>
      <title>The thrill is gone</title>
      <description>&lt;p&gt;&amp;#8230; or is it?&lt;/p&gt;

&lt;p&gt;Always seems like our industry goes in dry spells of NBT (next big thing) or something with just a general wow factor about it.&lt;/p&gt;

&lt;p&gt;I haven&amp;#8217;t really seen anything recently that tickled my fancy. That all changed this morning and my wife and little girl were packing up and about to head to Ocean City, MD. I figured I would hit maps.google.com because we were going there but was also going to take a detour to see some relatives. Normally that means I have to map two routes. One from my house to theirs, and then one from theirs to the beach. Not anymore. I mapped the route to the beach and then something possessed me to hover over the route as if I was going to drag it around to create a detour. It did!&lt;/p&gt;

&lt;p&gt;Now that is something completely wow to me, seeing that recalculate like it did on the fly and then update the directions in the left nav.&lt;/p&gt;

&lt;p&gt;Oh, and the beach is great, since I knew you all were really wondering. Blogging this from the balcony of the Lankford hotel right on the boardwalk.&lt;/p&gt;</description>
      <pubDate>Sat, 30 Jun 2007 20:11:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:469c8dae-3073-41b6-9274-75426ffee877</guid>
      <author>Ken Brooks</author>
      <link>http://blog.sevensoft.net/articles/2007/06/30/the-thrill-is-gone</link>
    </item>
  </channel>
</rss>
