<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="text">/dev/mull</title>
  <generator uri="http://effectif.com/nesta">Nesta</generator>
  <id>tag:www.devmull.net,2009:/</id>
  <link rel="self" href="http://www.devmull.net/articles.xml"/>
  <link rel="alternate" href="http://www.devmull.net"/>
  <subtitle type="text">The mull device</subtitle>
  <author>
    <name>Steven Shingler</name>
  </author>
  <entry>
    <title>A review of Leancamp</title>
    <link type="text/html" rel="alternate" href="http://www.devmull.net/articles/leancamp-review"/>
    <id>tag:www.devmull.net,2010-05-12:/articles/leancamp-review</id>
    <content type="html">&lt;p&gt;A couple of days ago I attended an Unconfernce called &lt;a href='http://register.leanca.mp/notify/'&gt;Leancamp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My main reason for going was that David Heinemeier Hansson - the creator of RubyOnRails and co-author of Getting Real and Rework was speaking.&lt;/p&gt;

&lt;p&gt;First, some definitions: &lt;a href='http://en.wikipedia.org/wiki/Lean_manufacturing'&gt;Lean&lt;/a&gt; is a production practice that considers the expenditure of resources for any goal other than the creation of value for the end customer to be wasteful, and thus a target for elimination. It is currently trending in the world of software as a way of furthering the principles of agile development as a methodology to connect software development with business.&lt;/p&gt;

&lt;p&gt;An Unconference is a gathering of people around a theme or purpose, but without a defined schedule. The schedule develops from conversations amongst the attendees, on the day. Low fees (my ticket cost &#163;10) and a lack of sponsorship are features of an unconference, and the concept has grown out of science fiction conventions.&lt;/p&gt;

&lt;p&gt;The introductory speeches were a slightly confused jumble of the principles of Lean development, and how they apply to making profitable software in 2010.&lt;/p&gt;

&lt;p&gt;Next up was a piece by the CEO of Seedcamp, Reshma Sohoni. Key points for me were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is crucial to connect with your customers to make sure that you are building something that people want to buy, and that they want to buy it from you. Consultancy can really help your business to do this.&lt;/li&gt;

&lt;li&gt;Care must be taken to find a balance between customer-driven features and using your own expertise to develop features which the customer wouldn&amp;#8217;t have thought of, but that they love when they get to use it.&lt;/li&gt;

&lt;li&gt;The key difference between geek-preneurs &amp;#8220;playing with&amp;#8221; VC funding and actual successful businesses is finding and building something that people will pay for.&lt;/li&gt;

&lt;li&gt;Hire passion, not experience.&lt;/li&gt;

&lt;li&gt;Scale your team vertically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first proper unconference spot I went to was a session from John Williams, the author of &lt;a href='http://www.screwworkletsplay.com/'&gt;&amp;#8220;Screw work, lets play&amp;#8221;&lt;/a&gt;. He drew up a chart of the ideal roles he felt you should have in a creative team, using slightly outlandish titles such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mechanic&lt;/li&gt;

&lt;li&gt;Creator&lt;/li&gt;

&lt;li&gt;Star&lt;/li&gt;

&lt;li&gt;Supporter&lt;/li&gt;

&lt;li&gt;Deal maker&lt;/li&gt;

&lt;li&gt;Accumulator&lt;/li&gt;

&lt;li&gt;Lord&lt;/li&gt;

&lt;li&gt;Trader&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The discussion centred around how these characters need each other to create a successful product, and around the process flow between them. By asking questions such as: &amp;#8220;What aspects of your work are you most enthused about?&amp;#8221; you can work out which role you really are. We talked about playing to your strengths: there&amp;#8217;s little point in trying to be a mechanic if you just aren&amp;#8217;t good at it; but also you need generalists or polymaths if you can&amp;#8217;t afford to hire more people.&lt;/p&gt;

&lt;p&gt;One point that stuck with me was: &amp;#8220;Lords are prone to over-researching - if you have more than one Lord you move very slowly.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Moving onto the main event of the day. The &lt;a href='http://en.wikipedia.org/wiki/David_Heinemeier_Hansson'&gt;dark prince&lt;/a&gt; himself: David Heinemeier Hansson. DHH was basically there to pimp Rework, his recent book. I&amp;#8217;d estimate that a good percentage of the attendees had read the book, and that almost all attendees were fully on board with Getting Real principles. Unfortunately DHH didn&amp;#8217;t bother to find this out with a quick straw poll, but instead ranted through the cartoon world of Rework, bashing out the familiar, simplistic views in a reedy, tense tone.&lt;/p&gt;

&lt;p&gt;Particularly galling opinions were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A financial plan is nothing more than a financial wish.&lt;/li&gt;

&lt;li&gt;Plans are a waste of time - the sooner you realise that, the sooner you can forget them.&lt;/li&gt;

&lt;li&gt;Plans are worth no more than a 15 min pres, but they get much more credence than that in business.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There was also some common sense:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A plan that doesn&amp;#8217;t change your behaviour is worthless.&lt;/li&gt;

&lt;li&gt;Plans promote an illusion of agreement.&lt;/li&gt;

&lt;li&gt;Decisions are temporary.&lt;/li&gt;

&lt;li&gt;You get real feedback from real software.&lt;/li&gt;

&lt;li&gt;People think they want a ton of features, but they actually buy simple solutions to clear problems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When building Basecamp, DHH and Fried didn&amp;#8217;t want to compete with other forum providers, or CMS providers, or (shudder) Sharepoint - they only wanted to create something which is &amp;#8220;slightly better&amp;#8221; than email. Which is interesting, because I&amp;#8217;ve always thought Basecamp is &amp;#8220;slightly worse&amp;#8221; than email.&lt;/li&gt;

&lt;li&gt;Making your app modular or optional will result in the quality of the user experience degrading.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There then followed a question and answer session, via skype from San Francisco with &lt;a href='http://www.startuplessonslearned.com/'&gt;Eric Ries&lt;/a&gt;. Eric did a masterly job in engaging with DHH&amp;#8217;s confrontational style without being drawn into it, and provided some much needed balance to the assertion that all VC funded companies are bad.&lt;/p&gt;</content>
    <published>2010-05-12T10:24:00+01:00</published>
    <category term="technical-writing"/>
  </entry>
  <entry>
    <title>A review of Rework.</title>
    <link type="text/html" rel="alternate" href="http://www.devmull.net/articles/rework-review"/>
    <id>tag:www.devmull.net,2010-04-12:/articles/rework-review</id>
    <content type="html">&lt;p&gt;&lt;a href='http://37signals.com/rework'&gt;Rework&lt;/a&gt; by Jason Fried and David Heinemeier Hansson.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ISBN-10: 0307463745&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;ISBN-13: 978-0307463746&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I first read &lt;a href='http://gettingreal.37signals.com'&gt;Getting Real&lt;/a&gt; in 2006. At that time, I was working as a software contractor for a large corporate defence contractor. I was bored and frustrated - trying to find ways to introduce Rails projects into the department without anyone from &amp;#8220;IT security&amp;#8221; noticing. Before Getting Real, no-one had addressed the problems faced when delivering software in a corporate culture, and the lack of understanding around this brave new discipline. Suddenly, we had a manual for tackling the problem head on.&lt;/p&gt;

&lt;p&gt;These days I&amp;#8217;m working in a very different environment - in a Rails-focused software house of around 16 people who have all read Getting Real. We&amp;#8217;re all so into Getting Real, I&amp;#8217;m worried some colleagues will take 37Signals&amp;#8217; new book: &lt;a href='http://37signals.com/rework'&gt;Rework&lt;/a&gt; like drops of echinacea, to be be regurgitated ad nauseum in meetings over the next few months.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s if we&amp;#8217;re actually allowed to have any &lt;a href='http://gettingreal.37signals.com/ch07_Meetings_Are_Toxic.php'&gt;meetings&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://37signals.com/rework'&gt;Rework&lt;/a&gt; is largely a rehash of Getting Real, but with the focus moved away from people who write software, onto people involved in all aspects of running a business. The refocussing allows Fried and DHH to reach a far wider audience with their opinions. Their wisdom, gained by experience, of how to deliver software will be read by people who would have never considered reading Getting Real. That&amp;#8217;s pretty savvy market positioning and something that wouldn&amp;#8217;t have been achieved by a series of blog posts on their website.&lt;/p&gt;

&lt;p&gt;However, having a target reader of a business everyman has the flip side that this reader won&amp;#8217;t know, or particularly care what impact the Rails Framework has had in software development; or about the godlike status of the authors in the transitory world of Web 2.0.&lt;/p&gt;

&lt;p&gt;This means that when the authors go beyond messages on delivering software, and venture into the more subtle and delicate aspects of what makes business work, they quickly expose a naivety - probably the result of having done little in business outside 37Signals. This trait is especially noticeable in the chapters which address more &amp;#8220;human&amp;#8221; issues. They veer from blindingly obvious common sense:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A good apology accepts responsibility.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;#8230;to the most ridiculous assertions&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Culture is the by-product of consistent behaviour.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;Policies are organisational scar tissue.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those are direct quotes, but my personal favourite is this opinion snippet, paraphrased from page 208.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The only reason you&amp;#8217;d go to a dinner party is if you thought you were going to get something out of it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sorry, what?&lt;/p&gt;

&lt;p&gt;Their writing is naive because it only caters for the easy stuff, where you&amp;#8217;ve got a team of people with great skills and who get on well. Every day in Rework is a sunny day. What about handling some difficult situations? For example: an employee is making strange decisions in the workplace because they&amp;#8217;ve just lost a family member - but they haven&amp;#8217;t told anyone at work about their loss. An employee is having second thoughts about their career and is becoming disruptive for the team, but hasn&amp;#8217;t yet the self awareness to talk with the team about it.&lt;/p&gt;

&lt;p&gt;I suspect that 37Signals simply hasn&amp;#8217;t been around long enough to have had to deal with that stuff yet. As they say, they&amp;#8217;ve been around for 10 years - as if they think that&amp;#8217;s a long time.&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s another aspect to Rework: How lucky have these guys been? Is their success purely down to skill and effort, or did they just hit a remarkable piece of timing with RubyOnRails, and have marketed themselves well off the back of that? I&amp;#8217;m reminded of Paul Graham&amp;#8217;s advice on how to run a startup. All good advice, but really, I would have felt it was more genuine if he&amp;#8217;d just acknowledged he was damn lucky to get bought out.&lt;/p&gt;

&lt;p&gt;All told, I enjoyed the book, and it hardly takes up a huge portion of time to get through it. Parts of it made me uncomfortable because its provocative style made me question my approach to my work, and that&amp;#8217;s no bad thing.&lt;/p&gt;

&lt;p&gt;DHH is &lt;a href='http://leanca.mp'&gt;visiting London&lt;/a&gt; next month. I&amp;#8217;ll be interested to hear his talk.&lt;/p&gt;</content>
    <published>2010-04-12T11:44:00+01:00</published>
    <category term="technical-writing"/>
  </entry>
  <entry>
    <title>A quick post on a new theme</title>
    <link type="text/html" rel="alternate" href="http://www.devmull.net/articles/new-theme"/>
    <id>tag:www.devmull.net,2010-04-03:/articles/new-theme</id>
    <content type="html">&lt;p&gt;&lt;a href='http://effectif.com/nesta'&gt;Nesta CMS&lt;/a&gt; has recently introduced theme support.&lt;/p&gt;

&lt;p&gt;It is showing up on the &amp;#8220;themes&amp;#8221; branch, but there isn&amp;#8217;t a write up yet.&lt;/p&gt;

&lt;p&gt;I had recently spotted the penguin classics &lt;a href='http://penguinclassics.tumblr.com'&gt;tumblr theme&lt;/a&gt; by &lt;a href='http://makenosound.com'&gt;Max Wheeler&lt;/a&gt; and thought it would be cool to convert it.&lt;/p&gt;

&lt;p&gt;Definitely a &lt;a href='http://github.com/sshingler/nesta-theme-penguinclassics'&gt;WIP&lt;/a&gt; for me, but so far I&amp;#8217;m liking it.&lt;/p&gt;</content>
    <published>2010-04-03T22:30:00+01:00</published>
  </entry>
  <entry>
    <title>Thoughts on MongoHQ pricing</title>
    <link type="text/html" rel="alternate" href="http://www.devmull.net/articles/thoughts-on-mongohq-pricing"/>
    <id>tag:www.devmull.net,2010-02-27:/articles/thoughts-on-mongohq-pricing</id>
    <content type="html">&lt;p&gt;I was lucky enough to be a beta-tester for &lt;a href='https://app.mongohq.com'&gt;MongoHQ&lt;/a&gt;, the hosted &lt;a href='http://www.mongodb.org'&gt;MongoDB&lt;/a&gt; service.&lt;/p&gt;

&lt;p&gt;I am really enjoying using the service - the web interface is sweet, but it is really the performance which has been outstanding. How do they make a network based data store faster than my local copy?!?&lt;/p&gt;

&lt;p&gt;Yesterday (20100226) they came out of private beta, and launched their &lt;a href='https://app.mongohq.com/signup'&gt;pricing options&lt;/a&gt; to the world.&lt;/p&gt;

&lt;p&gt;The results, as MongoMapper author John Nunemaker &lt;a href='http://twitter.com/jnunemaker/status/9687977508'&gt;tweeted&lt;/a&gt;, were surprising.&lt;/p&gt;

&lt;p&gt;Firstly, there&amp;#8217;s no free &lt;a href='http://heroku.com'&gt;Heroku&lt;/a&gt;-like option. The cheapest option is actually more expensive than a budget virtual private server - on which you could set up MongoDb and whatever else you desire.&lt;/p&gt;

&lt;p&gt;Secondly, each price point only allows a 2Gb database out of the box. The cheapest plan stipulates $2 for every extra Gb.&lt;/p&gt;

&lt;p&gt;Document stores such as MongoDB are ideal for feed trawling and the like where there isn&amp;#8217;t a massive amount of relational structure in your data model. Lets imagine you&amp;#8217;ve got a side project which is harvesting a bunch of feeds. You&amp;#8217;ve no idea whether this is a monetisable project yet, but you&amp;#8217;d like to try it out and play with it. Such a project could easily grow to a 10Gb document store.&lt;/p&gt;

&lt;p&gt;MongoHQ want you to pay for the last 8 of those Gb. That&amp;#8217;s $41/month on the cheapest plan, and $107/month on the most expensive plan. The most expensive plan gives you more databases and more user accounts, which is obviously not much help on a single project.&lt;/p&gt;

&lt;p&gt;I expected a MongoHQ to go with a strategy which would tempt developers to try this emerging technology and move away from traditional RDBMS such as MySQL, which are offered for free in the basic Heroku plan. After all, what is to stop Heroku from offering Mongodb support themselves?&lt;/p&gt;

&lt;p&gt;MongoHQ seem to believe they are offering a premium product, especially given the fantastic performance, but from an open source data store.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m not convinced it&amp;#8217;ll work, but I&amp;#8217;ll continue to watch with interest.&lt;/p&gt;</content>
    <published>2010-02-27T14:34:00+00:00</published>
    <category term="technical-writing"/>
  </entry>
  <entry>
    <title>Using Chowder for Simple Rack-based authentication</title>
    <link type="text/html" rel="alternate" href="http://www.devmull.net/articles/rack-authentication-example"/>
    <id>tag:www.devmull.net,2009-12-01:/articles/rack-authentication-example</id>
    <content type="html">&lt;p&gt;I have been searching for some time for a simple rack based authentication system.&lt;/p&gt;

&lt;p&gt;Something just complex enough.&lt;/p&gt;

&lt;p&gt;A key requirement for me is that I&amp;#8217;d like it to work with the data storage mechanism of my choice (which this week is &lt;a href='http://www.mongodb.org'&gt;MongoDb&lt;/a&gt;/&lt;a href='http://github.com/jnunemaker/mongomapper'&gt;MongoMapper&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;I spotted a &lt;a href='http://groups.google.com/group/sinatrarb/browse_thread/thread/3cdd25a42a81df2b/ec01dd35bac50df4?lnk=gst&amp;amp;q=chowder#ec01dd35bac50df4'&gt;post&lt;/a&gt; on the sinatra mailing list which mentioned a fairly new contender for this sort of thing, called &lt;a href='http://github.com/ichverstehe/chowder'&gt;chowder&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It was really easy to get things going, although I found the parameters to &amp;#8216;use&amp;#8217; needed to be wrapped in {} - at least when using ruby 1.8.7 - I wonder if the chowder developers are on ruby 1.9 where that kind of voodoo is acceptable..?&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve also put up a branch to a fledgling sinatra app which uses Chowder, complete with some cucumber features which test sign up and log out with a MongoDb/MongoMapper document store. That&amp;#8217;s &lt;a href='http://github.com/sshingler/mesomelas/commit/792218f26c58c6d41c4d0de2bf8df8f876f6b306'&gt;here&lt;/a&gt; on the basic-chowder-features branch.&lt;/p&gt;</content>
    <published>2009-12-01T22:30:00+01:00</published>
    <category term="ruby-and-jruby"/>
  </entry>
  <entry>
    <title>Getting useful information out of git log</title>
    <link type="text/html" rel="alternate" href="http://www.devmull.net/articles/git-log"/>
    <id>tag:www.devmull.net,2009-10-28:/articles/git-log</id>
    <content type="html">&lt;p&gt;A couple of weeks ago, this snippet was hitting the software twitterati in a big way&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git log --graph --pretty=format:&amp;#39;%an: %s - %Cred%h%Creset %C(yellow)%d%Creset %Cgreen(%cr)%Creset&amp;#39; --abbrev-commit --date=relative&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It produces a very pretty tree view of the git log, piped into less.&lt;/p&gt;

&lt;p&gt;It got me wondering what you could do with git log in terms of viewing the total number of commits by each author working on a repository. A league table of commits, if you will - although that isn&amp;#8217;t a metric of competition or status in any way. :)&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s what I came up with:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git log | grep &amp;#39;Author:&amp;#39;| sort | uniq -c | sort -nr&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Here&amp;#8217;s the output of that command on the &lt;a href='http://github.com/rails/rails/'&gt;github rails project&lt;/a&gt; (abridged)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;3045 Author: David Heinemeier Hansson &amp;lt;david@loudthinking.com&amp;gt;
2647 Author: Jeremy Kemper &amp;lt;jeremy@bitsweat.net&amp;gt;
 732 Author: Joshua Peek &amp;lt;josh@joshpeek.com&amp;gt;
 519 Author: Michael Koziarski &amp;lt;michael@koziarski.com&amp;gt;
 425 Author: Rick Olson &amp;lt;technoweenie@gmail.com&amp;gt;
 346 Author: Jamis Buck &amp;lt;jamis@37signals.com&amp;gt;
 345 Author: Pratik Naik &amp;lt;pratiknaik@gmail.com&amp;gt;
 301 Author: Marcel Molina &amp;lt;marcel@vernix.org&amp;gt;
 267 Author: Jos&#233; Valim &amp;lt;jose.valim@gmail.com&amp;gt;
 231 Author: Nicholas Seckar &amp;lt;nseckar@gmail.com&amp;gt;
 181 Author: Emilio Tagua &amp;lt;miloops@gmail.com&amp;gt;
 179 Author: Yehuda Katz + Carl Lerche &amp;lt;ykatz+clerche@engineyard.com&amp;gt;
 178 Author: Yehuda Katz &amp;lt;wycats@gmail.com&amp;gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <published>2009-10-28T10:30:00+01:00</published>
  </entry>
  <entry>
    <title>Using curl -I to detect the MIME type of a URL</title>
    <link type="text/html" rel="alternate" href="http://www.devmull.net/articles/curl-mime-type"/>
    <id>tag:www.devmull.net,2009-08-01:/articles/curl-mime-type</id>
    <content type="html">&lt;p&gt;&lt;a href='http://curl.haxx.se/'&gt;curl&lt;/a&gt; is a command line tool for transferring files with URL syntax.&lt;/p&gt;

&lt;p&gt;The -I option retrieves just the header information&lt;/p&gt;

&lt;p&gt;e.g.:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ curl -I http://google.com
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Tue, 25 Aug 2009 00:24:38 GMT
Expires: Thu, 24 Sep 2009 00:24:38 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and lots of other interesting tidbits too:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl -I http://farm4.static.flickr.com/3562/3829865330_c2d6012c99.jpg
HTTP/1.1 200 OK
Date: Tue, 25 Aug 2009 00:26:12 GMT
Content-Type: image/jpeg
Connection: keep-alive
Server: Apache/2.0.52 (Red Hat)
Cache-Control: max-age=315360000
Expires: Mon, 28 Jul 2014 23:30:00 GMT
Last-Modified: Mon, 17 Aug 2009 10:10:16 GMT
Accept-Ranges: bytes
Content-Length: 124866
Age: 12
X-Cache: HIT from photocache408.flickr.ac4.yahoo.com
X-Cache-Lookup: HIT from photocache408.flickr.ac4.yahoo.com:81
Via: 1.1 photocache408.flickr.ac4.yahoo.com:81 (squid/2.7.STABLE6)&lt;/code&gt;&lt;/pre&gt;</content>
    <published>2009-08-01T14:47:00+01:00</published>
  </entry>
  <entry>
    <title>Customising the JVM memory allocation using MAVEN_OPTS</title>
    <link type="text/html" rel="alternate" href="http://www.devmull.net/articles/maven-opts"/>
    <id>tag:www.devmull.net,2009-03-05:/articles/maven-opts</id>
    <content type="html">&lt;p&gt;A while back, I kept getting&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;java.lang.OutOfMemoryError: Java heap space &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#8230;type errors, working on a large Java legacy system. There were some files in there with over 3000 lines of code! It was a bit of a death march project, to be honest.&lt;/p&gt;

&lt;p&gt;Anyway, I messed around for a little while with different attempts at setting MAVEN_OPTS to give the JVM a decent amount of memory, here&amp;#8217;s what i ended up with:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;MAVEN_OPTS=&amp;#39;-Xms256m -XX:MaxPermSize=1024m -Xmx1024m&amp;#39;&lt;/code&gt;&lt;/pre&gt;</content>
    <published>2009-03-05T10:30:00+01:00</published>
  </entry>
  <entry>
    <title>JRuby Cookbook published</title>
    <link type="text/html" rel="alternate" href="http://www.devmull.net/articles/JRuby-Cookbook"/>
    <id>tag:www.devmull.net,2008-12-15:/articles/JRuby-Cookbook</id>
    <content type="html">&lt;p&gt;I&amp;#8217;m very happy that my contribution to the &lt;a href='http://oreilly.com/catalog/9780596519650'&gt;O&amp;#8217;Reilly JRuby Cookbook&lt;/a&gt; has been accepted!&lt;/p&gt;

&lt;p&gt;Got my copy through in the post this morning from O&amp;#8217;Reilly!&lt;/p&gt;

&lt;p&gt;V. nice.&lt;/p&gt;

&lt;p&gt;It is only a little bit on making SOAP calls from Ruby (JRuby) using the Mule ESB Client library, but it is still really nice to see my name inside a book :)&lt;/p&gt;

&lt;p&gt;Excerpt &lt;a href='http://oreilly.com/catalog/9780596519803/toc.html'&gt;here&lt;/a&gt;&lt;/p&gt;</content>
    <published>2008-12-15T12:45:00+00:00</published>
    <category term="ruby-and-jruby"/>
    <category term="technical-writing"/>
  </entry>
  <entry>
    <title>Calling SOAP Services from JRuby</title>
    <link type="text/html" rel="alternate" href="http://www.devmull.net/articles/using-jruby-for-soap"/>
    <id>tag:www.devmull.net,2008-02-28:/articles/using-jruby-for-soap</id>
    <content type="html">&lt;p&gt;This blog post has been published as a chapter in the &lt;a href='http://oreilly.com/catalog/9780596519650'&gt;JRuby Cookbook&lt;/a&gt; by O&amp;#8217;Reilly.&lt;/p&gt;

&lt;p&gt;I have been working on a project which uses the &lt;a href='http://mule.mulesource.org'&gt;Mule ESB&lt;/a&gt;, and a JRubyOnRails app.&lt;/p&gt;

&lt;p&gt;Part of this means calling SOAP services from within the JRuby app.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://olabini.com/blog/'&gt;Ola Bini&lt;/a&gt; sets out a couple of approaches in his JRuby on Rails book,but I thought I would blog the success I&amp;#8217;ve had using the mule-client libraries.&lt;/p&gt;

&lt;p&gt;I am passing &amp;#8220;complex&amp;#8221; Java objects around in these SOAP services, not just primitives - always more difficult when it comes to SOAP interoperability.&lt;/p&gt;

&lt;p&gt;Here is the call:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;include_class &amp;#39;org.mule.extras.client.MuleClient&amp;#39; 
include_class &amp;#39;org.mule.impl.MuleMessage&amp;#39;
def make_soap_request(soapurl, request) 
	c = MuleClient.new 
	begin
		message = MuleMessage.new(request)   
		m = c.send(soapurl, message , nil)   
		return m.getPayload() 
	rescue Exception =&amp;gt; e   
		logger.error e 
	end
end&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The return value is the object returned by the soap call. Nice and easy.&lt;/p&gt;

&lt;p&gt;Here are the required jars: (add to /lib/java)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;activation-1.1.jarasm-2.2.3.jarasm-commons-2.2.3.jaraxis-1.3.jaraxis-jaxrpc-1.3.jaraxis-saaj-1.3.jarbackport-util-concurrent-3.0.jarcommons-beanutils-1.7.0.jarcommons-codec-1.3.jarcommons-collections-3.2.jarcommons-discovery-0.2.jarcommons-httpclient-3.0.1.jarcommons-io-1.2.jarcommons-lang-2.2.jarcommons-logging-1.0.4.jargeronimo-j2ee-connector_1.5_spec-1.0.1.jarjline-0.9.9.jarjug-2.0.0-asl.jarlog4j-1.2.14.jarmule-core-1.3.3.jarmule-module-client-1.3.3.jarmule-transport-axis-1.3.3.jarmule-transport-http-1.3.3.jarmule-transport-soap-1.3.3.jarmule-transport-tcp-1.3.3.jarwsdl4j-1.5.1.jar&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then you can use:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;include javaDir[&amp;quot;lib/java/*.jar&amp;quot;].each { |jar| require jar }&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#8230;at the top of your class, and make SOAP calls until the cows come home! :)&lt;/p&gt;

&lt;p&gt;Hope is helpful!&lt;/p&gt;</content>
    <published>2008-02-28T16:28:00+00:00</published>
    <category term="ruby-and-jruby"/>
    <category term="technical-writing"/>
  </entry>
</feed>
