<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Bit Zesty Blog</title>
    <link>http://blog.bitzesty.com</link>
    <description>Ruby on Rail web development, design, social media and business</description>
    <generator>posterous.com</generator>
    <link href="http://posterous.com/api/sup_update#de65bdfb5" type="application/json" xmlns="http://www.w3.org/2005/Atom" rel="http://api.friendfeed.com/2008/03#sup"/>
    <atom:link href="http://blog.bitzesty.com/rss.xml" rel="self"/>
    <atom:link href="http://posterous.superfeedr.com" rel="hub"/>
    <item>
      <pubDate>Thu, 13 Jan 2011 11:31:00 -0800</pubDate>
      <title>We're moving offices!</title>
      <link>http://blog.bitzesty.com/moving-offices</link>
      <guid>http://blog.bitzesty.com/moving-offices</guid>
      <description>
        <![CDATA[<p>
	<p>We've just moved into a new office near Kings Cross station, towards Exmouth Market. If you're in the area, pop in for a chat.&nbsp;</p>
<p><iframe scrolling="no" marginheight="0" class="google-map" marginwidth="0" src="http://maps.google.co.uk/maps?f=q&source=s_q&hl=en&geocode=&q=65+Kings+Cross+Road+WC1X+9LW&sll=53.800651,-4.064941&sspn=14.514955,39.243164&ie=UTF8&hq=&hnear=65+King's+Cross+Rd,+London+WC1X+9LW,+United+Kingdom&ll=51.527636,-0.115314&spn=0.007449,0.019162&iwloc=A&output=embed" frameborder="0" height="400" width="500"></iframe><br />
            <a href="http://maps.google.co.uk/maps?f=q&source=s_q&hl=en&geocode=&q=65+Kings+Cross+Road+WC1X+9LW&sll=53.800651,-4.064941&sspn=14.514955,39.243164&ie=UTF8&hq=&hnear=65+King's+Cross+Rd,+London+WC1X+9LW,+United+Kingdom&ll=51.527636,-0.115314&spn=0.007449,0.019162&iwloc=A&source=embed">View Larger Map</a></p>
	
</p>

<p><a href="http://blog.bitzesty.com/moving-offices">Permalink</a> 

	| <a href="http://blog.bitzesty.com/moving-offices#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/294009/6600_579002214984_222300693_4940396_4762996_n.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/168A1IkzIgp</posterous:profileUrl>
        <posterous:firstName>Matthew</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>@matthewcford</posterous:nickName>
        <posterous:displayName>Matthew Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Fri, 15 Oct 2010 07:05:00 -0700</pubDate>
      <title>How to Create Effective Documentation for Web Applications</title>
      <link>http://blog.bitzesty.com/how-to-create-effective-documentation-for-web</link>
      <guid>http://blog.bitzesty.com/how-to-create-effective-documentation-for-web</guid>
      <description>
        <![CDATA[<p>
	<p>Most of us know that documentation is a fundamental part of any software project, but we've also learned through experience that producing too much documentation of the wrong kind can be a waste of time. The aim of rapid development is to minimize waste and achieve lean, elegant processes as well as software. &nbsp;The key to effective documentation is knowing how to record organizational memory without limiting the creative process during development or imposing excessive cost on the organization.</p>
<p>This article will explore several types of documentation and their relative effectiveness for application development throughout the project life cycle: pre-development, during development, and post-development.&nbsp;</p>
<div>
<div><strong><span style="font-size: medium;">Pre-development Documentation</span></strong></div>
<p />
</div>
<div>
<div>Pre-development documentation primarily identifies requirements and defines high-level software architecture, and may include <strong>functional specifications</strong>, <strong>user stories</strong>, or <strong>entity relationship diagrams</strong>.&nbsp;</div>
</div>
<p />
<div>
<div><strong>Functional specifications</strong> are presented as a text-only list of requirements of the software and clients usually incorporate that list into an RFQ. Often the specification include not only the functional requirements but also technical ones, which can potentially limit the effectiveness of the developers, as they are better at determining the best technical solutions for clients' needs.</div>
<p />
<div><strong>User stories</strong> are an effective tool to identify and describe the functionality needed from the user's perspective, and can be used as acceptance criteria. Developers can also use the same domain language as in user stories to develop nomenclature in the software, so taking care to name objects clearly and logically helps ensure that the code correlates with the requirements.</div>
<p />
<div><strong>Entity relationship diagrams</strong> present users and objects (entities), relationships, and attributes in graphical format. They can be particularly useful for complex projects with large development teams, and help ensure that everyone understands the relationships between the different objects before development begins.</div>
</div>
<p />
<div>
<div>While it's important to document functional requirements at a high level before moving into the development phase, excessive or overly detailed pre-development documentation can potentially restrict the project team's options for developing appropriate solutions; it may also become obsolete later in the project life cycle as new requirements, problems, and details emerge during the project. Extensive documentation is also time-consuming to maintain, so it's best to create more detailed documentation later in the project life cycle.</div>
</div>
<p />
<div>
<div><strong><span style="font-size: medium;">Documentation during Development</span></strong></div>
<div><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: 13px;"> </span></span></span>
<p />
<div>It's important during the development phase to clearly <strong>represent the high-level architecture and note any deviations from typical practice</strong> as the project progresses. Development documentation at this stage is typically automated through good programming practices rather than manually written into documents. This is can be facilitated by the use of <strong>frameworks</strong>, <strong>choice of programming language</strong>, and in the <strong>messages in your version control/code repositories</strong>.&nbsp;</div>
<div>
<p />
<div><strong>Frameworks</strong> are specific software libraries that serve as a filing system in a standard format to store code and procedures. Ruby on Rails was the first framework designed specifically to meet the needs of web application development, and is considered to be the gold standard that other frameworks are modelled upon. Each framework is designed to be used with a particular programming language &ndash; e.g., Ruby on Rails with Ruby, Django with Python and Zend with PHP.</div>
</div>
<p />
<div>
<div><strong>Programming languages</strong> have various forms of syntax requiring various levels of comments/remarks to be clearly documented and understood. Languages using syntax close to natural English clearly show the intent without the need of excessive documentation or comments. We chose to work in Ruby because it has a very clear syntax and therefore can be described as a self-documenting language (Python is another such language).</div>
</div>
<p />
<div>
<div><strong>Version control/code repositories</strong> can also be considered to be part of documentation. To make repositories useful in that way, developers should insert an explanation of what is being &ldquo;committed&rdquo; (describing how the updated source code affects the project).</div>
</div>
<p />
<div>
<div>Most of the tools mentioned above support project teams in creating effective documentation easily "as they go," requiring minimum time and effort, which also means that it is very cost effective for the client.&nbsp;</div>
</div>
<p />
<span><span style="font-size: small;"><span style="font-size: 13px;"> </span></span></span>
<div><span style="font-size: medium;"><strong>Post-development Documentation</strong></span></div>
<span style="font-size: large;"><span style="font-size: small;"><span style="font-size: 13px;"> </span></span></span>
<div>
<p />
<div>Post-development documentation is typically produced in order to support the team of developers responsible for maintaining the software or to teach end-users how to use the software.</div>
<p />
<div>Proficient use of some of the tools discussed previously can eliminate the need to pull divergent results and ideas together at the end of a project with additional documentation. However, at the very minimum it is good practise to document the <strong>procedure describing how to set up and run the application</strong>, which is good software project etiquette and will help future developers to get up and running quickly.</div>
<p />
<div>The need for extensive <strong>end-user documentation</strong> is largely disappearing as software becomes increasingly intuitive, with particular emphasis on User Experience and User Interface design. Moreover, screencasts are now preferred over traditional user manuals.</div>
</div>
<p />
<p />
<div>
<div>With the goal of remaining as lean and productive as possible while adequately documenting our work, we favor user stories for pre-development and use frameworks, intuitive programming languages, integration testing, and code repositories during the development phase. Our primary goal in producing any documentation is ease of use for the next person who maintains or builds upon the software.</div>
</div>
<p />
</div>
</div>
<p>&nbsp;</p>
	
</p>

<p><a href="http://blog.bitzesty.com/how-to-create-effective-documentation-for-web">Permalink</a> 

	| <a href="http://blog.bitzesty.com/how-to-create-effective-documentation-for-web#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/682420/Laura_Ford.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4al3LX9EeZoJ</posterous:profileUrl>
        <posterous:firstName>Laura</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>Laura</posterous:nickName>
        <posterous:displayName>Laura Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Thu, 23 Sep 2010 07:13:00 -0700</pubDate>
      <title>Best Way to Plan Your Web Application</title>
      <link>http://blog.bitzesty.com/best-way-to-plan-your-web-application</link>
      <guid>http://blog.bitzesty.com/best-way-to-plan-your-web-application</guid>
      <description>
        <![CDATA[<p>
	<p>When contacted by potential clients, we are often presented with diverse&nbsp; information including&nbsp; links to competitors' sites, prototypes, feature lists, or wireframes, while other clients may come to us with just an idea.&nbsp; However, presenting details of your vision clearly in writing will lead to a better web application. This will also enable professionals to more accurately estimate&nbsp; the time and costs necessary to implement your ideas. <p />So how can you best identify the features and functionality you need when looking to build a new web application? Let's consider the three main formats for doing this: Wireframes, Feature Lists and User Stories.</p>
<p><br /><strong><span style="font-size: medium;">Wireframes</span></strong><br />A wireframe is a visual representation of your ideas which can act as a design brief.&nbsp; Wireframes are simple guides that lay out the structure of a single web page or an entire.<p />There is software available that allows you to draw wireframes. Though wireframe software is user-friendly, allowing users to&nbsp; make changes with ease, it tends to encourage&nbsp; a lot of detail. Simple pen and paper drawings typically provide more highlevel wireframes and thus do not inhibit the thought process.&nbsp; Some good examples of pen and paper as well as digital wireframes can be found on the <a href="http://www.wireframeshowcase.com/" target="_blank">Wireframe Showcase</a>.&nbsp; <p />If at all possible, get your designer involved in wireframing, as the professional eye of a web designer will help you produce a more realistic and usable layout, allowing the developer to realise your concepts most accurately and efficiently.<p />Pros:</p>
<ul>
<li>Wireframes help the designer visualise the concept and develop an accurate idea of what needs to be designed.</li>
<li>Wireframes show the developer which features are on each page.</li>
<li>As many clients find it easier to convey ideas visually rather than verbally, you may be less likely to omit features with wireframes.</li>
</ul>
<p>Cons:</p>
<ul>
<li>If you complete the wireframe independently without teaming up with the designer, he or she may treat the wireframe as the final design rather than preliminary and may hesitate to suggest major changes (or you may be reluctant to embrace such changes), and thus be limiting designer&rsquo;s expertise and creativity.</li>
<li>Drawing up a wireframe can be time-consuming; without the aid of a designer you may spend unnecessary&nbsp; time creating a visual map which is likely to be altered by the professional later on.</li>
<li>Wireframes typically don't capture the full range of requirements and edge cases that occur in the background. Therefore the&nbsp; developers may not be aware of all your needs.</li>
</ul>
<p>The disadvantages of this method may outweigh the advantages if you choose to work without the help of a designer.<p /><strong><span style="font-size: medium;">Functionality/Feature List</span></strong><br />This method is a text-only list of the functional requirements&nbsp; for each feature of your application. Some clients find that this is the easiest way to organise their ideas. When using a feature list, it's important to remember that you don't&nbsp; need to worry about the technical aspects - it's the developer's job to determine how to implement your ideas most effectively. Your task is to effectively communicate to the developer the results you wish to see.<p />Pros:</p>
<ul>
<li>A well-considered feature list gives the developer and designer a good understanding of your requirements.</li>
<li>A textual presentation of your ideas is more likely to cover non-visible features.</li>
</ul>
<p>Cons:</p>
<ul>
<li>The most obvious disadvantage is that the feature list lacks the visual representation of the wireframe method, which may limit your ability to convey your complete vision of the application.</li>
<li>Communicating your ideas textually rather than visually may increase the risk of miscommunication. Some requirements and features could be described vaguely or unclearly, which may lead the developer to interpret your vision of how the features will perform differently than you intended.</li>
</ul>
<p>The feature list is certainly a useful tool which is best suited for high-level planning, as it lacks detail.<p /><strong><span style="font-size: medium;">User Stories</span></strong><br />User stories originated from Agile development methodologies, and in particular Scrum. The user stories method is also text-based, but differs from the&nbsp; feature list approach in that it focuses on users rather than features. Rather than detailing the items the application should feature, this method identifies who the users are and&nbsp; considers the various roles and&nbsp; requirements each user may have. Ideally real users of the application should be involved in the user story gathering exercise. For example, the creator might evaluate the needs of the users on a job site, including administrators, job applicants, their potential employers, and employment agencies.<p />The format for the user story is simple, for example:</p>
<p><strong>AS</strong> a jobseeker <br /> <strong>I WOULD LIKE TO</strong> search for jobs<br /> <strong>SO THAT I CAN</strong> find the jobs I want to apply for.</p>
<p><strong>AS</strong> a site admin<br /> <strong>I WOULD LIKE TO</strong> be able to take payment for job posting<br /> <strong>SO THAT I CAN</strong> make money.</p>
<p>It's useful to include detail, but group your ideas according to the user perspective&nbsp; and level of importance - annotate them with&nbsp; MUST (have), SHOULD (have), COULD (have), WOULD (like to have). Writing your stories on index cards will help you easily prioritize your ideas.<p />To keep this early stage simple and focused, you may want to create your user story in a workshop environment with developers, designers, and different users present (if available).<p />Pros:</p>
<ul>
<li>This method is a particularly thorough way of planning. The user story allows everyone to see the application from different perspectives, which encourages fuller consideration of the users' needs.</li>
<li>User stories allow the designers creative freedom while allowing the developers freedom to apply professional judgement in identifying the most effective solution.</li>
<li>The user story provides a complete picture, allowing the team to more accurately estimate both the time and cost to implement the application.</li>
</ul>
<p>Cons:</p>
<ul>
<li>The user story is likely to take more time to draw up than the feature list (though perhaps not as much time as detailed wireframing would take).</li>
<li>Gaining the perspectives of real (not hypothetical) users may be difficult.</li>
<li>You run the risk of providing too little detail if you try to write user stories without the guidance of a developer.</li>
</ul>
<p>User Stories can be invaluable planning tools that help developers and designers deliver useful features to users.<p /><strong><span style="font-size: medium;">Conclusion</span></strong><br />To summarize, a Feature List can be produced quickly and provides a good starting point to get a ballpark figure of time and costs involved. However, before starting the project it is strongly advisable to do a User Stories gathering exercise, followed by Wireframes prepared with a web designer.<p />If you are UK based, <a href="http://bitzesty.wufoo.com/forms/planning-a-web-application/" target="_blank">please click here</a> and fill in the form to receive pre-printed user story cards.</p>
	
</p>

<p><a href="http://blog.bitzesty.com/best-way-to-plan-your-web-application">Permalink</a> 

	| <a href="http://blog.bitzesty.com/best-way-to-plan-your-web-application#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/682420/Laura_Ford.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4al3LX9EeZoJ</posterous:profileUrl>
        <posterous:firstName>Laura</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>Laura</posterous:nickName>
        <posterous:displayName>Laura Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Thu, 20 May 2010 07:41:00 -0700</pubDate>
      <title>How We Hire Our Ruby on Rails Developers</title>
      <link>http://blog.bitzesty.com/how-we-hire-our-ruby-on-rails-developers</link>
      <guid>http://blog.bitzesty.com/how-we-hire-our-ruby-on-rails-developers</guid>
      <description>
        <![CDATA[<p>
	<p>Though the number of Ruby on Rails developers is rising, many may lack the level of experience that we require. Therefore, it is necessary to implement a strong hiring practice to identify the best candidate for a role, and ensure that new recruits are not simply apprentices but experienced developers who can contribute significantly from day one.<p />We have always taken inspiration from 37signal's working practices and recently came across Google's hiring strategy that seems to advocate what we happen to be practicing already. So in this blog I would like to give a bit of background information on hiring methods established by Google and 37signals, and then show how our recruitment process and strategies compare.<br /><strong></strong></p>
<p></p>
<p><strong>Google’s Hiring Philosopy</strong><br />Google’s <a href="http://googleresearch.blogspot.com/2006/03/hiring-lake-wobegon-strategy.html">Lake Wobegon Strategy</a> advocates hiring above the mean, arguing with proven results that sustained company success is most achievable when you only hire those who are better than the mean average of your entire team. So, by hiring a better person with every new employee you are more likely to see increased company success.<p /><strong>37signals’ Hiring Philosophy</strong><br />Jason Fried and David Heinemeier Hansson (founders of 37signals) in their latest book <a href="http://37signals.com/rework/">Rework</a>, discuss some of the principles of successful hiring, including:<p />Don't limit your search to a specific geographic location as this restricts your pool of potential candidates to a specific area. This is particularly relevant to our field, where experienced Ruby on Rails developers can seem few and far between if you are only advertising locally. By expanding your search internationally you are increasing your chances of finding the best person for the job. With the advances in technology, building an international distributed team is not only possible, but for 37signals finds it beneficial.<p />Test-drive your candidates in a real working environment. The candidate needs to be somebody who is compatible with existing employees on a personal level. Certain qualities cannot be assessed by reviewing the candidate’s resume and carrying out an interview, and require an on-the-job trial.<p /><strong>Bit Zesty’s Hiring Practices</strong><br />Google’s Lake Wobegon strategy is sound in its analytic nature, but the reality of applying a check-list approach can be a little difficult in practice. Though our hiring method is comparable to Google’s, it is one that has evolved naturally with influence from 37signals and is a more personal and workable form of assessment.<p />The crux of the matter is that we will hire someone better than ourselves. By adhering to this simple principle we not only spend less time instructing the new recruit, but we can put more trust in their initiative, which leads to a freer exchange of ideas and encourages innovation. Also, we don’t just recruit very experienced Ruby on Rails developers, we make sure that they bring other technical skills that the team does not have yet - ensuring that our skill base keeps expanding. This way, everyone keeps improving and learning.<p />We feel strongly about attracting a worldwide pool of potential candidates, so that we are not limited by location. We hire based on candidates skills rather than where they are based. This of course presents some challenges not only in day to day management but also in recruiting. The candidates go through a rigorous selection process, which includes pair-programming using screen-sharing, where we can see the approach the developer takes, the tools they use and their knowledge. We also interview them over Skype in order to establish their motivation and whether they will be able to work at a distance and become a good fit for our team.<p />While the selection process can help us to identify the best people in terms of technical skill, the successful candidate will have to be a natural fit for the company with regard to interaction with other team members and our work methods. The best way to assess this is through the on-the-job trial. We typically agree on a trial period of one month, which enables us to confidently judge if the candidate will be suitable as well as giving them a chance to see if they like working with us. It may well be that the candidate, although very skilled, may find our practice of distributed pair programming too intense.<p />In conclusion, while technical skills and experience are important, we also consider attributes such as dedication, attitude and the ability to perform well in a real working situation and as part of a successful, distributed team. And so far the issue of distance, although presenting challenges, has proven to bring far more advantages than drawbacks.</p>
	
</p>

<p><a href="http://blog.bitzesty.com/how-we-hire-our-ruby-on-rails-developers">Permalink</a> 

	| <a href="http://blog.bitzesty.com/how-we-hire-our-ruby-on-rails-developers#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/682420/Laura_Ford.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4al3LX9EeZoJ</posterous:profileUrl>
        <posterous:firstName>Laura</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>Laura</posterous:nickName>
        <posterous:displayName>Laura Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Fri, 07 May 2010 04:54:00 -0700</pubDate>
      <title>Rails 3 default cookie domain for subdomains</title>
      <link>http://blog.bitzesty.com/rails-3-default-cookie-domain-for-subdomains</link>
      <guid>http://blog.bitzesty.com/rails-3-default-cookie-domain-for-subdomains</guid>
      <description>
        <![CDATA[<p>
	<p>In Rails 3 the way you set your default cookie domain to allow your session to be shared across subdomains has changed. In Rails 2.3.5 you would add the following to your application.rb :</p>
<p><code>


config.action_dispatch.session = {:domain =&gt;".mydomain.com"}


</code></p>
<p>In Rails 3 there is now a session_store.rb initialiser, in there you can configure your default domain like so:</p>
<p><code>


Rails.application.config.session_store :cookie_store,
                                  :key =&gt; '_app_session',
                                  :domain =&gt; '.mydomain.com'


</code></p>
<p> </p>
	
</p>

<p><a href="http://blog.bitzesty.com/rails-3-default-cookie-domain-for-subdomains">Permalink</a> 

	| <a href="http://blog.bitzesty.com/rails-3-default-cookie-domain-for-subdomains#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/294009/6600_579002214984_222300693_4940396_4762996_n.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/168A1IkzIgp</posterous:profileUrl>
        <posterous:firstName>Matthew</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>@matthewcford</posterous:nickName>
        <posterous:displayName>Matthew Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Wed, 05 May 2010 03:46:00 -0700</pubDate>
      <title>Likebees Presentation at MiniBar</title>
      <link>http://blog.bitzesty.com/likebees-presentation-at-minibar</link>
      <guid>http://blog.bitzesty.com/likebees-presentation-at-minibar</guid>
      <description>
        <![CDATA[<p>
	<p>I gave a short talk at the MiniBar Finance Innovation conference last  week. <p />MiniBar is a monthly tech and business conference which  invites innovators and entrepreneurs to get together and share their  ideas. This month, the event was sponsored by PayPal X and the six guest  speakers each gave a 5-minute talk about innovation in payment systems.  I used my slot to explain how we utilized the PayPal Adaptive Payments  API when developing a group-buying application for our client, Likebees.<p />Likebees  operates by offering users the chance to buy vouchers for substantial  discounts for local services, such as restaurants or hairdressers. The  catch is that the discount only becomes activated if enough people buy  it, and this is where the pre-approval API becomes necessary. Instead of  allowing each transaction go through so that they then have to be  cancelled manually if the target number of buyers is not met, the API  ensures that buyers are only charged when the deal reaches its 'tipping  point'.<p />Anthony Hicks from PayPal cornered me for a quick interview afterwards:</p>
<p><iframe src="http://www.youtube.com/embed/1MJWVCm4tvI?wmode=transparent" allowfullscreen frameborder="0" height="417" width="500"></iframe><p />Yannick, our client  and Likebees co-founder also got caught on camera and explained the  business side of Likebees in more detail:</p>
<p><iframe src="http://www.youtube.com/embed/Lfx8RUbHKFo?wmode=transparent" allowfullscreen frameborder="0" height="417" width="500"></iframe></p>
	
</p>

<p><a href="http://blog.bitzesty.com/likebees-presentation-at-minibar">Permalink</a> 

	| <a href="http://blog.bitzesty.com/likebees-presentation-at-minibar#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/294009/6600_579002214984_222300693_4940396_4762996_n.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/168A1IkzIgp</posterous:profileUrl>
        <posterous:firstName>Matthew</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>@matthewcford</posterous:nickName>
        <posterous:displayName>Matthew Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Tue, 27 Apr 2010 05:27:00 -0700</pubDate>
      <title>Different Applications of Crowdsourcing</title>
      <link>http://blog.bitzesty.com/politics-of-crowdsourcing</link>
      <guid>http://blog.bitzesty.com/politics-of-crowdsourcing</guid>
      <description>
        <![CDATA[<p>
	<div>In the run-up to this general election in UK, there have been a few high-profile instances of political parties asking their supporters for ideas. Specifically, Labour and the Liberal Democrats invited their supporters to submit ideas for campaign posters while, last month, the Conservatives <a href="http://www.yourbudgetresponse.co.uk/">asked the public</a> for suggestions on how to respond to the Budget.</div>
<div> </div>
<div>I was delighted to see all this in the news because it is evidence of how the concept of crowdsourcing has spread since its recent online revival. What Labour and the Liberal Democrats did was essentially a design contest, where the parties posted the specification of their design needs and their supporters submitted their designs, with the winning designs appearing on billboards. </div>
<p />
<div>This is what happens in 99designs and Crowdspring, the leading design contest sites. Here, businesses post their design needs and designers enter their designs to the contest. The business can then choose their favourite and release the guaranteed fee to the successful designer.  </div>
<p />
<div>The online design contest format has become very popular in the USA, though other countries have yet to catch on fully. We have done our bit to help, as we recently built a multilingual crowdsourcing platform for Creative Contest, which intends to bring the idea to Germany.</div>
<p />
<div>We are aware that crowdsourcing receives a fair amount of criticism from some quarters and, as a <a href="http://www.bbc.co.uk/blogs/thereporters/rorycellanjones/2010/03/amateur_hour_crowdsourcing_the.html">BBC blogger pointed out</a>, its usefulness in a political context has yet to be proven. However, it can work very well in the right context. Businesses have a choice of solutions for their projects; the service providers make a profit; and talented designers who have the skills but not necessarily the experience or credentials get the chance to be paid for their work and build their portfolio.</div>
<p />
<div>Our view is that the design competition is just the beginning for online crowdsourcing and the full potential has barely been realised. As we continue to see developments in the internet and the global economy, more businesses may start to consider harnessing the power of the public and demand will increase for a wider range of crowdsourced products, from writing and music to film and photography.  </div>
<p />
<div>If you want to start a <a href="http://bitzesty.com/">crowdsourcing website or use crowdsourcing for a campaign</a>, we can build a solution for you.</div>
	
</p>

<p><a href="http://blog.bitzesty.com/politics-of-crowdsourcing">Permalink</a> 

	| <a href="http://blog.bitzesty.com/politics-of-crowdsourcing#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/682420/Laura_Ford.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4al3LX9EeZoJ</posterous:profileUrl>
        <posterous:firstName>Laura</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>Laura</posterous:nickName>
        <posterous:displayName>Laura Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Mon, 26 Apr 2010 05:23:00 -0700</pubDate>
      <title>XML to JSON API Proxy for Quick Mash-ups</title>
      <link>http://blog.bitzesty.com/xml-to-json-api-proxy-for-quick-mash-ups</link>
      <guid>http://blog.bitzesty.com/xml-to-json-api-proxy-for-quick-mash-ups</guid>
      <description>
        <![CDATA[<p>
	<p>While building our company dashboard, which was mentioned in our previous blog post on <a href="http://blog.bitzesty.com/svg-images-and-animations-on-the-web-with-rap" target="_blank">SVG with Raphael</a>, I came across a problem with the project management tool we use, Pivotal Tracker. <p /> The Pivotal Tracker API is only in XML, which means you can't do cross-domain requests and access the API via javascript. This meant that, if I wanted to extract data about the status of our user stories, I would have to do it on the server side. As everything so far had been done with javascript on the client side, I was reluctant to start making things more complicated.<p /> I contacted Pivotal, who said they might <a href="http://community.pivotaltracker.com/pivotal/topics/api_jsonp_response" target="_blank">think about adding JSON at some point</a>, but I didn't want to wait for them to sort it out. Instead, I built a quick API proxy that allows you to make a request to a XML API and get back JSON. So, now, I can do this in my javascript:<p /> <p><a href="https://gist.github.com/379214.js?file=gistfile1">https://gist.github.com/379214.js?file=gistfile1</a></p><p />It will proxy the GET request to the API and convert the XML response into JSON, via <a href="http://xml2json.heroku.com" target="_blank">http://xml2json.heroku.com</a> (supports JSONP). I've put the code on GitHub <a href="http://github.com/bitzesty/xml2jsonp" target="_blank">http://github.com/bitzesty/xml2jsonp</a> in case anyone else needs to do the same thing.</p>
	
</p>

<p><a href="http://blog.bitzesty.com/xml-to-json-api-proxy-for-quick-mash-ups">Permalink</a> 

	| <a href="http://blog.bitzesty.com/xml-to-json-api-proxy-for-quick-mash-ups#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/294009/6600_579002214984_222300693_4940396_4762996_n.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/168A1IkzIgp</posterous:profileUrl>
        <posterous:firstName>Matthew</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>@matthewcford</posterous:nickName>
        <posterous:displayName>Matthew Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Fri, 23 Apr 2010 10:09:00 -0700</pubDate>
      <title>SaaS: Opening up New Opportunities for Businesses</title>
      <link>http://blog.bitzesty.com/saas-opening-up-new-opportunities-for-busines</link>
      <guid>http://blog.bitzesty.com/saas-opening-up-new-opportunities-for-busines</guid>
      <description>
        <![CDATA[<p>
	<p>We have developed several SaaS (Software as a Service)  applications for clients in the past and are currently working on our  own SaaS project, so it feels like a good time to go into more detail  about this burgeoning area of web development.</p>
<p><strong>What  is SaaS?</strong> <br /> SaaS is where a service provider gives users access to  software - such as Google Docs or Basecamp - through their browser. The  user does not need to worry about the process of installing  software and  the provider supplies an easy-to-use interface as well as  hosting.<p />The service can be as simple as file storage, such as is  provided by Flickr or Dropbox, or providers can offer software for  entire e-commerce sites (e.g. Shopify) and CRMs (e.g. Highrise). These  SaaS applications tend to be made available for a monthly fee, so that  the provider generates income through subscriptions. Alternately, some  SaaS providers take a mark-up from the sales. <p /> <strong>Pros and Cons of SaaS<br /></strong>As an SaaS end user, the advantages are  obvious: you gain access to a high level of  functionality; you enjoy the support services of the provider; you  can access it from any operating system, as it can be reached by any  browser; and you don't have to deal with upgrading the software,  as this will happen automatically.<p />You are also spared the up-front expense of buying software. This is particularly appealing for small businesses, where the  monthly fee may be preferable to a large up-front payment.</p>
<p>SaaS in general is a good bet for start-ups and SMEs, as it offers them the chance to use software more advanced than they would  usually be able to afford, without it taking up a lot of expensive server space. Indeed, with the global recession fresh in everyone's minds and IT capital budgets still very tight, large organizations are also beginning to use SaaS and to take advantage of the subscription based model.</p>
<p>However, using SaaS  does mean that you are dependent on the provider, which in turn means that you are vulnerable if your  provider suffers from a system failure or a security breach, or even  physical damage.</p>
<p>This comes down to the trust which has to exist between the user and provider, but you can reduce the risk of losing all your data  by taking <a href="http://www.webhostingsearch.com/articles/saas-security-issues.php" title="take basic precautions">basic precautions</a> against  unauthorised access and making regular back-ups. <p /><strong>Is SaaS for you?</strong><br />The internet service provider <a href="http://www.v3.co.uk/v3/news/2255627/smes-cloud-computing-2010" title="Easynet Connect">Easynet Connect</a> claims that more  than half of small and medium enterprises will start to use The Cloud in  their businesses in 2010. This shows that businesses are becoming more trusting and open to the opportunities that  the internet has to offer. This in return is translating into an increasing uptake of SaaS by UK businesses, as reported by <a href="http://www.information-age.com/channels/business-applications/news/1250183/saas-spending-in-the-uk-set-to-boom.thtml#comments" target="_blank">Information Age</a>.</p>
<p>Whether you will be one of early adopters of SaaS depends on  the size and nature of your business: if it is new and small, you will probably appreciate the monthly fee as opposed to a large up-front payment, while if you need to access your work from many different places the flexibility of using SaaS will suit you very well.</p>
<p>On the other hand, if your company  is large and has a substantial IT budget and in-house resources, you  may prefer the autonomy of actually owning everything.</p>
<p>If you feel that using SaaS could benefit your business, there is no reason why you shouldn't try it out. The risks can be kept to a minimum with the right precautions and you don't  even have to run your entire business with SaaS. SaaS can be adopted to great effect just in a few areas of your business, so you should  definitely investigate all the possibilities before committing to  buying expensive enterprise software, especially for the non-critical areas of your business.</p>
<p> </p>
<p><a href="http://bitzesty.com/">Bit Zesty - SaaS software development with Ruby on Rails</a></p>
	
</p>

<p><a href="http://blog.bitzesty.com/saas-opening-up-new-opportunities-for-busines">Permalink</a> 

	| <a href="http://blog.bitzesty.com/saas-opening-up-new-opportunities-for-busines#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/464006/2010-03-10-151446.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5ebHqQzp57cl</posterous:profileUrl>
        <posterous:firstName>Emma</posterous:firstName>
        <posterous:lastName>Wright</posterous:lastName>
        <posterous:nickName>emma-bz</posterous:nickName>
        <posterous:displayName>Emma Wright</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Wed, 21 Apr 2010 15:56:00 -0700</pubDate>
      <title>Talk at NoSQL EU on Different NoSQL Tools we Have Used</title>
      <link>http://blog.bitzesty.com/short-talk-at-nosql-eu-on-a-different-nosql-t</link>
      <guid>http://blog.bitzesty.com/short-talk-at-nosql-eu-on-a-different-nosql-t</guid>
      <description>
        <![CDATA[<p>
	<p>I gave a talk at NoSQL EU on a few of the different types of NoSQL solutions we've used in the past, explaining why we'd chosen each one and how they had worked for us. It was a bit tough to do whilst with a cold, so apologies if I sounded nasally/tired.</p>
<p>I've uploaded the slides to SlideShare for those who couldn't make it to the talk. At the moment, it is limited to the NoSQL solutions we have used on our projects, with case studies and a comparison of the benefits and drawbacks, but hopefully I'll be able to work on it more so that it incorporates some of the other 'bigger' NoSQL players, such as Riak and Cassandra.</p>
<p><strong style="display: block; margin: 12px 0 4px;"><a href="http://www.slideshare.net/bitzesty/no-sql-eu2010" title="Notes from the field: Different NoSQL tools in Production">Notes from the field: Different NoSQL tools in Production</a></strong></p>
<div style="">
<object height="355" width="425">
<param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=nosqleu2010-100421174101-phpapp02&amp;rel=0&amp;stripped_title=no-sql-eu2010" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" /> <embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=nosqleu2010-100421174101-phpapp02&amp;rel=0&amp;stripped_title=no-sql-eu2010" type="application/x-shockwave-flash" height="355" width="425"></embed>
</object>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/bitzesty">Bit Zesty</a>.</div>
</div>
	
</p>

<p><a href="http://blog.bitzesty.com/short-talk-at-nosql-eu-on-a-different-nosql-t">Permalink</a> 

	| <a href="http://blog.bitzesty.com/short-talk-at-nosql-eu-on-a-different-nosql-t#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/294009/6600_579002214984_222300693_4940396_4762996_n.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/168A1IkzIgp</posterous:profileUrl>
        <posterous:firstName>Matthew</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>@matthewcford</posterous:nickName>
        <posterous:displayName>Matthew Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Thu, 08 Apr 2010 09:41:00 -0700</pubDate>
      <title>SVG Images and Animations on the Web with Rapha&#235;l</title>
      <link>http://blog.bitzesty.com/svg-images-and-animations-on-the-web-with-rap</link>
      <guid>http://blog.bitzesty.com/svg-images-and-animations-on-the-web-with-rap</guid>
      <description>
        <![CDATA[<p>
	<p>Last week I gave a talk at Google OSJam on <a href="http://raphaeljs.com/" title="Raphaël">Raphaël</a> (a javascript <a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics" title="SVG">SVG</a> library), the library that makes it easy to draw and animate vector graphics on a browser. <p />  SVG is one of the many methods of drawing images on the web. Some of the other technologies include Flash, <a href="http://en.wikipedia.org/wiki/Canvas_element" title="Canvas">Canvas</a> and now <a href="http://en.wikipedia.org/wiki/WebGL" title="WebGL">WebGL</a>.<p />  The reason we used Raphael in some of our projects is that we needed to bind events to the shapes we drew. For example, we had to create an interactive gantt chart that displayed a form via Ajax when you clicked on a task. This functionality in Raphael is made possible by the fact that SVG paths are DOM elements, although it does mean you don't get the performance of pixel manipulation as you would with canvas. Raphael also renders VML when on IE, so in theory your graphics should be cross-browser compatible.<p />  I gave a demo of an animated clock that I'd made a few hours beforehand with Raphael and the jquery.jclock library. The clock will eventually be apart of a <a href="http://www.panic.com/blog/2010/03/the-panic-status-board/" title="Panic inspired dashboard">Panic inspired dashboard</a> we are building to increase visibility across all of our projects.<p />  The clock itself is quite simple: I modified the jclock library to trigger a 'tick' event, which we later used to animate the SVG clock for the hand rotation. Since the talk, I have also developed an alternate style for the clock, but the original code and examples can be found here (the library is creatively called <a href="http://github.com/bitzesty/hud/blob/master/jquery.svgclock.js">jquery.svgclock.js</a>):</p>
<p><a href="http://github.com/bitzesty/hud">http://github.com/bitzesty/hud</a></p>
<p><div class='p_embed p_image_embed'>
<a href="http://getfile7.posterous.com/getfile/files.posterous.com/bitzesty/HEtvGvzTmxKDj9UHuZaJHY5ibzsa0FgMpdYlI7L3TbVZLWke4LBwts0JlMcr/svgclocks.png"><img alt="Svgclocks" height="128" src="http://getfile8.posterous.com/getfile/files.posterous.com/bitzesty/iGzD7kLDSVTGRSzXmLS5PYOVass4sYlDGxLMlgkpaQKOr45m0nj5IYhCTE53/svgclocks.png.scaled.500.jpg" width="500" /></a>
</div>
</p>
<p><br />Brought to you by <a href="http://bitzesty.com/">Bit Zesty - a 'crack' team of Ruby on Rails web developers</a></p>
	
</p>

<p><a href="http://blog.bitzesty.com/svg-images-and-animations-on-the-web-with-rap">Permalink</a> 

	| <a href="http://blog.bitzesty.com/svg-images-and-animations-on-the-web-with-rap#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/294009/6600_579002214984_222300693_4940396_4762996_n.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/168A1IkzIgp</posterous:profileUrl>
        <posterous:firstName>Matthew</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>@matthewcford</posterous:nickName>
        <posterous:displayName>Matthew Ford</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="203" width="794" url="http://getfile7.posterous.com/getfile/files.posterous.com/bitzesty/HEtvGvzTmxKDj9UHuZaJHY5ibzsa0FgMpdYlI7L3TbVZLWke4LBwts0JlMcr/svgclocks.png">
        <media:thumbnail height="128" width="500" url="http://getfile8.posterous.com/getfile/files.posterous.com/bitzesty/iGzD7kLDSVTGRSzXmLS5PYOVass4sYlDGxLMlgkpaQKOr45m0nj5IYhCTE53/svgclocks.png.scaled.500.jpg"/>
      </media:content>
    </item>
    <item>
      <pubDate>Sat, 03 Apr 2010 07:26:00 -0700</pubDate>
      <title>What is Ruby on Rails and Why Should I Use it for Web Applications?</title>
      <link>http://blog.bitzesty.com/what-is-ruby-on-rails-and-why-should-i-use-it</link>
      <guid>http://blog.bitzesty.com/what-is-ruby-on-rails-and-why-should-i-use-it</guid>
      <description>
        <![CDATA[<p>
	<div>A few potential clients have asked us why we choose to use Ruby on Rails to develop web applications instead of all the other web frameworks and languages. There are many reasons for our decision, but before I embark on a discussion of the advantages (and disadvantages) of Ruby on Rails, I should first explain what Ruby on Rails actually is.<p />
<div><span style="font-size: medium;">Ruby on Rails</span></div>
<div>Rails is a development tool which gives web developers a framework, providing structure  for all the code they write. The Rails framework helps developers to build websites and applications, because it abstracts and simplifies common repetitive tasks.<p />Rails is written in Ruby, the programming language which is also used alongside Rails. Ruby is to Rails as PHP is to Symfony and Zend, or as Python is to Django. The appeal of Ruby to developers lies in the elegance and directness of the language.<p />
<div>A key principle of Ruby on Rails development (henceforth 'Rails') is 'Convention over Configuration' (CoC). This means that the programmer only has to write new code for the areas in which their application deviates from the standard. </div>
<br />
<div>Another characteristic of Rails is the emphasis on RESTful application design. REST (Representational State Transfer) is a style of software architecture based around the client-server relationship. It encourages a logical structure within applications, which means they can easily be opened up as an API (Application Programming Interface).</div>
<br /><a href="http://blog.bitzesty.com/what-to-expect-from-an-agile-web-development" title="Agile web development">Agile web development</a> is also advocated within the Rails community. This is a particular method of structuring the development process and ensuring that effective communication occurs between the developers and the client. <p />
<div>During its short existence, Ruby on Rails has gained a large and enthusiastic following. This is largely due to the way it excels at enabling the rapid development of dynamic web applications.<p />I will now consider the main arguments for and against Rails.<p /><p />
</div>
<div><span style="font-size: medium;">Pros and Cons of Rails<strong> </strong></span></div>
<div> </div>
<div><strong>Why we prefer to use Ruby on Rails:<p /></strong></div>
<ul>
<li>The process of programming is much faster than with other frameworks and languages, partly because of the object-oriented nature of Ruby and partly because of CoC, which reduces the amount of code that needs to be written. </li>
<li>CoC also makes it easy for developers to move between different Rails projects, as each project will tend to follow the same structure and coding practices. </li>
<li style="background-color: #ffffff;">Ruby code is very readable and therefore is self-documenting. This increases productivity, as there is no need to write out separate documentation, and it is easy for other developers to pick up projects. </li>
<li>Rails was originally developed by David Heinemeier Hansson to enable him to build Basecamp with Ruby, and consequently it is suited to building large applications.</li>
<li>The CoC and DRY (Don't Repeat Yourself) maxims and Agile methodologies all aim to make the web application development process as enjoyable as possible.</li>
</ul>
<strong><br />Potential Rails problems and limitations, and our solutions:<br /></strong>
</div>
<ul>
<li>Not all website hosts can support Rails.</li>
</ul>
<br />It is true that it isn't always as easy to find a Rails host as it is a PHP host. This is primarily because Rails can be more resource intensive, a fact which deters low-end shared-hosting providers. However, this is by no means a dealbreaker, and of course Rails-friendly hosts do exist, for example, Heroku and EngineYard.<p />Alternatively, you can host your Rails application on a Virtual Private Server (VPS), as you will then have full control over the server and can allocate sufficient resources for your application. Any Rails developers can set this up for you. Examples of VPSs include Amazon EC2, Slicehost, and Linode.<p /> 
<ul>
<li>Long term survivability: it has only been around for 4 years and is not as established as Java or PHP. Will it stand the test of time?</li>
</ul>
</div>
<div>Although Rails is still relatively new, it is giving every indication of being able to grow and prosper. Now the <a href="http://merbist.com/2009/11/09/the-ruby-revolution-is-over" title="Ruby Revolution">Ruby Revolution</a> is over and the dust has settled, both Ruby and Rails have demonstrated their staying power by continuing to attract new users. The Rails community is constantly expanding and maturing, and there are now <span><span style="background-color: #ffffff;"><a href="http://www.information-age.com/channels/development-and-integration/features/1072762/the-rise-of-ruby.thtml" title="over a million Ruby developers worldwide">over a million Ruby developers worldwide</a>.</span></span><p />Furthermore, the appearance of new books on Ruby on Rails and the increasing numbers of Ruby on Rails apps in production are all evidence that Ruby on Rails is well on its way to becoming firmly established.<p /> 
<ul>
<li>Scalability in terms of the number of users (not functionality)</li>
</ul>
</div>
<div>There have been concerns that Rails applications are not as fast as Java or C, but this is really only a problem for sites which are accessed by millions of users simultaneously, but even then there are ways to work around this.  <p /> 
<ul>
<li>Conventions</li>
</ul>
<br />Rails is only effective if you follow the conventions, and this can feel restrictive to some.  When followed, the conventions facilitate greater productivity and ease of work, so at this point developers who attempt to force it to work like other frameworks will inevitably find it unsatisfactory. This is more a matter of incompatibility between the programmer and the software than of any inadequacy of the software. This is not to say that developers can't break away from the conventions, but this would mean that they wouldn't receive any of the added benefits which accompany the conventions.</div>
<div>
<br />
<div><span style="font-size: large;">In conclusion...</span></div>
<div>
<br />Our decision to use Rails is above all one of personal preference. Rails does not suit every developer or project, but we choose to use it because it works well for us and suits the dynamic web applications that we build.<p />You can read more about the benefits of Ruby on Rails in this article on <a href="http://www.information-age.com/channels/development-and-integration/features/1072762/the-rise-of-ruby.thtml" title="the rise of Ruby on Rails">the rise of Ruby</a>.<p /><a href="http://bitzesty.com/" target="_blank">Bit Zesty - Ruby on Rails Development, UK</a>
</div>
</div>
	
</p>

<p><a href="http://blog.bitzesty.com/what-is-ruby-on-rails-and-why-should-i-use-it">Permalink</a> 

	| <a href="http://blog.bitzesty.com/what-is-ruby-on-rails-and-why-should-i-use-it#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/294009/6600_579002214984_222300693_4940396_4762996_n.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/168A1IkzIgp</posterous:profileUrl>
        <posterous:firstName>Matthew</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>@matthewcford</posterous:nickName>
        <posterous:displayName>Matthew Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Wed, 31 Mar 2010 09:37:00 -0700</pubDate>
      <title>Bit Zesty's Workshop on Building and Launching Websites</title>
      <link>http://blog.bitzesty.com/bit-zestys-workshop-on-building-and-launching</link>
      <guid>http://blog.bitzesty.com/bit-zestys-workshop-on-building-and-launching</guid>
      <description>
        <![CDATA[<p>
	<p>We hosted another event at THECUBE last week, this time on the more general subject of how websites are built. <p />The workshop was structured around the main issues involved in the website-building process, with particular emphasis on budgetary considerations and the cheaper alternatives to fully custom-built websites. Around 20 people turned up, mostly from the target audience of start-ups and prospective website owners, although a few people attended purely for the section on SEO.<p />We kicked things off with a whistle-stop tour of the technical choices available at the beginning of the process, including platform choices, front-end and back-end language options, and an overview of client-server architecture. After the lunch break, we moved on to design issues and the importance of usability, before discussing SEO and what to look for when hiring developers. <p />Everyone chipped in with questions about their own websites throughout the day, and the group exercises on identifying keywords and planning website features allowed people to get more specific advice on their projects. Judging by the people I talked to during the breaks, everyone took away something useful from the workshop, whether it was a deeper understanding of the website-building process or ideas about how to improve their websites.<p />The positive feedback means that we are definitely thinking of holding more workshops in the future, so keep an eye out for updates on our website.</p>
<p>&nbsp;</p>
<p><a href="http://bitzesty.com/">Bit Zesty - Ruby on Rails web application development</a></p>
	
</p>

<p><a href="http://blog.bitzesty.com/bit-zestys-workshop-on-building-and-launching">Permalink</a> 

	| <a href="http://blog.bitzesty.com/bit-zestys-workshop-on-building-and-launching#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/464006/2010-03-10-151446.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5ebHqQzp57cl</posterous:profileUrl>
        <posterous:firstName>Emma</posterous:firstName>
        <posterous:lastName>Wright</posterous:lastName>
        <posterous:nickName>emma-bz</posterous:nickName>
        <posterous:displayName>Emma Wright</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Wed, 10 Mar 2010 07:13:00 -0800</pubDate>
      <title>Top Five SEO Tips</title>
      <link>http://blog.bitzesty.com/top-five-seo-tips</link>
      <guid>http://blog.bitzesty.com/top-five-seo-tips</guid>
      <description>
        <![CDATA[<p>
	<p>Last week, we hosted a lunchtime q&amp;a session on SEO (Search Engine Optimization) at THECUBE. SEO is a process which online businesses can use to maximise their site's visibility on search engines, and our co-workers had plenty of tips and experiences to share about it. I have summarized the main points that emerged from the session, which will hopefully give you an idea of how the process works.&nbsp; <p /></p>
<ol>
<li><strong>Identify the right keywords for your business</strong>.<br />Search engines index sites by the text they contain, so it it is important that you should identify the key terms which define your business, as well as the words which will be entered into search engines by potential customers. Once identified, these words can be used to great effect, repeated throughout the site often and prominently (see point 2) enough for the search engines to register them. In order to compete with larger, more established companies on the keyword front, it is better to decide on a more specific set of keywords and target these on your site, rather than waging a hopeless battle for general terms. You can use Google's <a href="http://www.google.com/sktool/#" title="Keyword Tool">Keyword Tool</a> to identify relevant keywords that have many searches but comparatively little competition.</li>
<li><strong>Place keywords in the titles on your website wherever possible. <br /></strong>Search engines prioritise <span><span style="background-color: #ffffff;">the text in the title tags and in your headings and sub-headings, </span></span>which are labelled as &lt;h1&gt;,&lt;h2&gt;, &lt;h3&gt;... in HTML, so you should make sure that you choose these words wisely and use keywords where appropriate. The words in the main body of the text are also taken into consideration, but less so than the headings. However, search engines can detect when websites repeat keywords endlessly out of context, so don't overdo it.</li>
<li><strong>Try to get other sites to link to your own.</strong> <br />Another factor the search engines take into account and consider important is the number of times other sites link back to your site. The more <span><span style="background-color: #ffffff;">prestigious </span></span>the site providing the link, the more <span><span style="background-color: #ffffff;">credit </span></span>your site gets from the search engine. For example, a link from a <span><span style="background-color: #ffffff;">well-established site such as <a href="http://bbc.co.uk">bbc.co.uk</a></span></span> will count for more than one from a lesser-known, newer site. The links only work in your favour if your keywords are included fully in the link, so make sure that you always include keywords in the link when linking to other pages on your own site and try to ask others who link to you to use those keywords as well - being the destination of a 'Click Here' or 'Read more' link will not help you at all. For example, instead of saying <a href="http://thecubelondon.com/"><span style="text-decoration: underline;">The Cube</span></a>, it would be more useful if the link included <a href="http://thecubelondon.com/coworking/"><span style="text-decoration: underline;">The Cube - Co-working Space in London</span></a> - not only is this more helpful for the reader, but it also improves the SEO.</li>
<li><strong>Maintain a steady flow of fresh content on your homepage</strong>. <br />Search engines value fresh and original content, so it is in your interests to keep your website regularly updated. This can be done quite easily, for example, by posting a blog on your homepage.</li>
<li><strong>Choose the right technology.</strong> <br />Finally, search engines weight sites on the speed at which the pages load up. If your homepage is full of Flash and Javascript, it will take longer to load and count against you in the rankings, so it is generally better to use HTML (and keep Javascript to a minimum) where SEO is a consideration. On a further note, search engines find it harder to reach the text in a Flash format, so it is again advisable to work in HTML and only use Flash on a limited basis.&nbsp; </li>
</ol>
<p>By bearing these points in mind when working on your site, you will be making the most of search engines' potential to help you attract new custom and increase your company's profile. <p />We have created a <a href="http://www.socrated.com/courses/103" title="short course on SEO">short course on SEO</a> for anyone who wants to learn more. <p /> <a href="http://bitzesty.com/" title="Bit Zesty Ltd is a web application development company.">Bit Zesty Ltd is a web application development company.</a></p>
	
</p>

<p><a href="http://blog.bitzesty.com/top-five-seo-tips">Permalink</a> 

	| <a href="http://blog.bitzesty.com/top-five-seo-tips#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/464006/2010-03-10-151446.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5ebHqQzp57cl</posterous:profileUrl>
        <posterous:firstName>Emma</posterous:firstName>
        <posterous:lastName>Wright</posterous:lastName>
        <posterous:nickName>emma-bz</posterous:nickName>
        <posterous:displayName>Emma Wright</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Sat, 30 Jan 2010 13:34:00 -0800</pubDate>
      <title>Document Stores vs Relational Databases for Domain Modeling</title>
      <link>http://blog.bitzesty.com/document-stores-vs-relational-databases-for-d</link>
      <guid>http://blog.bitzesty.com/document-stores-vs-relational-databases-for-d</guid>
      <description>
        <![CDATA[<p>
	<p>I am quite excited about the rising popularity of document stores, we have been using <a href="http://www.mongodb.org/display/DOCS/Home" title="MongoDB">MongoDB</a> and <a href="http://couchdb.apache.org/" title="CouchDB">CouchDB</a>&nbsp;for some time now, both for internal and client projects. Both databases are similar (although built on different technologies) as they are schema-free, scalable, <a href="http://en.wikipedia.org/wiki/Document-oriented_database" title="document-oriented databases">document-oriented</a>.</p>
<p>The concept of a document database isn't new. It was pioneered by&nbsp;<a href="http://en.wikipedia.org/wiki/MUMPS" title="MUMPS">MUMPS</a> in the 1970s for health-care and financial applications and by IBM in 1989 with the <a href="http://en.wikipedia.org/wiki/Lotus_Notes#Database" title="Lotus Notes Database.">Lotus Notes Database</a>. It's interesting to see the main concepts behind these legacy databases evolve and reemerge in new open-source projects.</p>
<div>
<div><strong>Benefits of document stores</strong><br /> The <a href="http://en.wikipedia.org/wiki/Nosql" title="NoSQL">NoSQL</a> argument is that data should not be stored only in SQL databases, but should utilize other forms of data-store when they are better suited for the domain model. <strong><em>Speed</em> </strong>and <strong><em>scalability</em></strong> are just some benefits, but I believe that the<em><strong> ability to quickly and concisely model complex domains</strong></em> is main advantage.<br /></div>
<p />
<div><span style="text-decoration: underline;">Modeling a CRM</span></div>
<div>Let's take the example of a simple&nbsp;<span style="font-family: arial, sans-serif; font-size: small;"><em style="font-style: normal;">Customer Relationship Management system</em></span>&nbsp;(CRM), to model a business card in a relational database you would have a number of tables, for

example:</div>
<div>
<ul>
<li> Contacts </li>
<li> Phone Numbers </li>
<li> Email Addresses </li>
</ul>
</div>
<div>The data in each table would have to be joined together to display all the contact details. Even in this contrived example, the data model can quickly grow in complexity as you include more types of data.</div>
<p />
<div>This is where the power of a document store shines through, all the contact's information can be stored in a single document. Document stores are schema-free so you do not have to define all the possible data types, you can just add new data to the document if needed. See below for an example contact document which models the business card as it would appear in the real world:</div>
<p />
<div><p><a href="https://gist.github.com/290682.js?file=example_document">https://gist.github.com/290682.js?file=example_document</a></p></div>
<p />
<div><strong>Possible drawbacks</strong></div>
<div><strong><span style="font-weight: normal;">As with all things there is a trade off, these databases typically lack row-level <a href="http://en.wikipedia.org/wiki/Database_transaction" title="database transaction">database transaction</a> and 'table joins' in order to achieve higher performance.&nbsp;The lack of joins is not a major issue as all the related information should be in one document. However, If you currently make heavy use of database transactions, migrating to a document store isn't a good idea. </span></strong></div>
<p />
<div><strong><span style="font-weight: normal;">With these drawacks in mind, you probably don't want to build a banking platform on-top of these databases, however for the vast majority of applications these constraints are not a problem.</span></strong></div>
</div>
<div>
<p />
<div>
<div><strong>Further Reading</strong></div>
</div>
<div>My personal preference is currently MongoDB as it has better support for dynamic queries, but there isn't much between the two. Following on from my previous post on <a href="http://blog.bitzesty.com/mongodb-with-mongomapper-and-ruby-on-rails" title="MongoDB with MongoMapper and Ruby on Rails">MongoDB with MongoMapper and Ruby on Rails</a>&nbsp;I'll ether do a series of blog posts or a screen-cast on building a simple application with MongoDB and Rails 3.&nbsp;</div>
<div>
<div>
<ul>
<li><a href="http://www.mongodb.org/display/DOCS/Production+Deployments" title="Production Deployments of MongoDB">Production Deployments of MongoDB</a> </li>
<li> <a href="http://www.businessinsider.com/how-we-use-mongodb-2009-11" title="How Businessinsider.com uses MongoDB">How Businessinsider.com uses MongoDB</a> </li>
<li> <a href="http://www.ibm.com/developerworks/opensource/library/os-couchdb/index.html" title="IBM developerWorks exploring CouchDB">IBM developerWorks: Exploring CouchDB</a> </li>
<li><a href="http://www.mongodb.org/display/DOCS/Comparing+Mongo+DB+and+Couch+DB">Comparing MongoDB and CouchDB</a> </li>
<li> <a href="http://books.couchdb.org/relax/intro/why-couchdb" title="CouchDB: The Definitive Guide - Why CouchDB">CouchDB: The Definitive Guide - Why CouchDB</a> </li>
</ul>
</div>
</div>
</div>
	
</p>

<p><a href="http://blog.bitzesty.com/document-stores-vs-relational-databases-for-d">Permalink</a> 

	| <a href="http://blog.bitzesty.com/document-stores-vs-relational-databases-for-d#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/294009/6600_579002214984_222300693_4940396_4762996_n.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/168A1IkzIgp</posterous:profileUrl>
        <posterous:firstName>Matthew</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>@matthewcford</posterous:nickName>
        <posterous:displayName>Matthew Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Wed, 20 Jan 2010 18:50:00 -0800</pubDate>
      <title>How to Get the Most Value out of Web Development</title>
      <link>http://blog.bitzesty.com/how-to-get-the-most-value-out-of-web-developm</link>
      <guid>http://blog.bitzesty.com/how-to-get-the-most-value-out-of-web-developm</guid>
      <description>
        <![CDATA[<p>
	<p>Increasingly,  clients wanting an application built on a tight budget are drawing up  extravagant feature lists which are incompatible with the amount they  are prepared to pay. This tension between the client's budget and needs  can lead to dissatisfaction with the end product or conflict with the  development team. However, it doesn't always have to end in deadlock.</p>
<p>One  way to overcome the issue is by building and releasing the application  in stages. This method suits clients with a limited cash flow and has  the additional advantage of allowing you to get user feedback quickly.  This information can then be used to help you decide which features you  need to build next. <br /><strong><br /></strong>Yet sometimes there's simply no need  to shell out for a fully bespoke system, particularly when there are  viable off-the-shelf solutions available at a fraction of the cost. But  what do you do if an off-the-shelf system doesn't quite fit your needs  and a fully bespoke one is out of budget? I see three options:</p>
<p><strong>Open  Source</strong><br />Customizing an existing open source application (if one  is available) will cost considerably less than a bespoke system, as you  only need to pay for the new features.<br /><strong><br />API Extensions /  Plug-ins / Widgets</strong><br />It is possible to build bespoke applications  which use third party APIs, a good compromise which not only saves on  development time but also provides the client with a more  feature-complete solution. For example, <a href="http://www.mailchimp.com/" target="_blank">MailChimp</a> can be  added for email marketing, <a href="http://intensedebate.com/" target="_blank">Intense Debate</a> or <a href="http://disqus.com/" target="_blank">Disqus</a> for commenting, and <a href="http://getsatisfaction.com/" target="_blank">Get Satisfaction </a>or  <a href="http://www.zendesk.com/" target="_blank">Zendesk </a>for  support and help-desk functionality.</p>
<p><strong>Application  Platforms</strong><br /> If you use an existing paid application platform, it  may sometimes be possible to extend it with existing plug-ins or develop  your own one to suit your needs. For example, <a href="http://www.shopify.com/?ref=bitzesty" target="_blank">Shopify</a> allows users to customize their e-commerce sites with a range of <a href="http://www.shopify.com/tour/appstore/" title="additional  apps">additional apps</a>, as well as giving option for developers to  build custom features.</p>
<p>People beginning online  business ventures rarely have money to spare, so there is no point in  pushing the boat out on bespoke applications when the same results can  be achieved for much less. The existence of open source applications,  plug-ins and API extensions on the internet is a gift to clients on a  tight budget, and it should be exploited accordingly.</p>
<p>&nbsp;</p>
<p><a href="http://bitzesty.com">Bit Zesty - Ruby on Rails app development London</a></p>
	
</p>

<p><a href="http://blog.bitzesty.com/how-to-get-the-most-value-out-of-web-developm">Permalink</a> 

	| <a href="http://blog.bitzesty.com/how-to-get-the-most-value-out-of-web-developm#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/294009/6600_579002214984_222300693_4940396_4762996_n.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/168A1IkzIgp</posterous:profileUrl>
        <posterous:firstName>Matthew</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>@matthewcford</posterous:nickName>
        <posterous:displayName>Matthew Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Tue, 12 Jan 2010 14:15:00 -0800</pubDate>
      <title>What are the Advantages of Scrum for the Client?</title>
      <link>http://blog.bitzesty.com/what-are-the-advantages-of-scrum-for-the-clie</link>
      <guid>http://blog.bitzesty.com/what-are-the-advantages-of-scrum-for-the-clie</guid>
      <description>
        <![CDATA[<p>
	<p>Scrum clearly provides many benefits for the developers, but what  are its advantages for the client and other stakeholders? This is a  question I faced recently in a client meeting, and to answer it I first  need to define Scrum itself. In layman terms, it is a project management  technique that is used with agile development projects. It aims to make  projects more effective by defining the roles of team members and by  providing a specific way of organising the workload over a series of  short development cycles (sprints).</p>
<p><strong>Benefits for  the client:</strong></p>
<p>Scrum's main advantage is the way it facilitates  changing customer requirements. It does this by providing a flexible  framework wherein new features can be added and re-prioritizations can  take place without negatively affecting the project flow and team's  morale.</p>
<p>Secondly, the system of sprints encourages regular  feedback, as each sprint is followed by a review. These reviews provide  opportunities for the entire team to reflect on the previous sprint and  discuss improvements for the next.</p>
<p>Thirdly, by defining roles for  team members it promotes collaboration as well as clear and open lines  of communication between the developers, the client and other  stakeholders.</p>
<p>Finally, Scrum provides a framework for work  estimation, where features are estimated in units of points: each point  represents a relative amount of effort required. This technique is  flexible enough to allow for changes in requirements as well as changes  in the development team's velocity.</p>
<p><strong><br />However, Scrum is not  suitable for all projects and has certain limitations:<br /></strong><br />It  does not work with traditional software development methodologies such  as Waterfall.</p>
<p>It cannot be fully adopted if a team is too small or  too big - an ideal team would consist of 4 to 6 developers.</p>
<p>It  cannot work effectively unless it has have full management/client  support.</p>
<p>It requires a Scrum Master who understands the Scrum  practices and is able to apply them.</p>
<p>&nbsp;</p>
<p><a href="http://bitzesty.com">Bit Zesty uses scrum and agile for Ruby on Rails application development</a></p>
	
</p>

<p><a href="http://blog.bitzesty.com/what-are-the-advantages-of-scrum-for-the-clie">Permalink</a> 

	| <a href="http://blog.bitzesty.com/what-are-the-advantages-of-scrum-for-the-clie#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/682420/Laura_Ford.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4al3LX9EeZoJ</posterous:profileUrl>
        <posterous:firstName>Laura</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>Laura</posterous:nickName>
        <posterous:displayName>Laura Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Mon, 04 Jan 2010 15:54:00 -0800</pubDate>
      <title>MongoDB with MongoMapper and Ruby on Rails </title>
      <link>http://blog.bitzesty.com/mongodb-with-mongomapper-and-ruby-on-rails</link>
      <guid>http://blog.bitzesty.com/mongodb-with-mongomapper-and-ruby-on-rails</guid>
      <description>
        <![CDATA[<p>
	<div>I'm sure we've all heard the pros &amp; cons of the NoSQL movement so these will not be covered here. I've been experimenting with a number of alternatives to RDBMS for a while such as <a href="http://couchdb.apache.org/">CouchDB</a>, <a href="http://1978th.net/tokyocabinet/">TokyoCabinet</a>, <a href="http://code.google.com/p/redis/">Redis</a> and recently <a href="http://www.mongodb.org/display/DOCS/Home">MongoDB</a>.<br />
<blockquote class="gmail_quote" style="border-left: 1px solid #cccccc; margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<p>MongoDB (from "hu<strong>mongo</strong>us") is a scalable, high-performance, open source, schema-free, document-oriented database. Written in C++, MongoDB features:</p>
<ul>
<li>Document-oriented storage (the simplicity and power of <a href="http://www.mongodb.org/display/DOCS/BSON" title="BSON" target="_blank">JSON-like</a> data schemas)</li>
<li>Dynamic <a href="http://www.mongodb.org/display/DOCS/Querying" title="Querying" target="_blank">queries</a></li>
<li>Full <a href="http://www.mongodb.org/display/DOCS/Indexes" title="Indexes" target="_blank">index</a> support, extending to inner-objects and embedded arrays</li>
<li>Query <a href="http://www.mongodb.org/display/DOCS/Database+Profiler" title="Database Profiler" target="_blank">profiling</a></li>
<li>Fast, <a href="http://blog.mongodb.org/post/248614779/fast-updates-with-mongodb-update-in-place" target="_blank">in-place updates</a></li>
<li>Efficient storage of binary data <a href="http://www.mongodb.org/display/DOCS/GridFS" title="GridFS" target="_blank">large objects</a> (e.g. photos and videos)</li>
<li><a href="http://www.mongodb.org/display/DOCS/Replication" title="Replication" target="_blank">Replication</a> and fail-over support</li>
<li><a href="http://www.mongodb.org/display/DOCS/Sharding" title="Sharding" target="_blank">Auto-sharding</a> for cloud-level scalability</li>
<li><a href="http://www.mongodb.org/display/DOCS/MapReduce" title="MapReduce" target="_blank">MapReduce</a> for complex aggregation</li>
<li><a href="http://www.mongodb.org/display/DOCS/MongoDB+Commercial+Services+Providers" title="MongoDB Commercial Services Providers" target="_blank">Commercial Support, Hosting, and Consulting</a></li>
</ul>
<p>MongoDB bridges the gap between key-value stores (which are fast and highly scalable) and traditional RDBMS (which provide structured schemas and powerful queries).</p>
</blockquote>
<div>- from the <a href="http://www.mongodb.org/" target="_blank">MongoDB</a> site.<p />The reason I've settled on MongoDB is (for me) it's been the most useful, more so than straight KV stores such as Redis and Tokyo. Technically CouchDB is very similar to MongoDB being a document store too, however MongoDB seems to 'gel better' (that's a technical term). <p /> To be able to use this MongoDB goodness in my Rails app, I'm making use of the <a href="http://github.com/jnunemaker/mongomapper" target="_blank">MongoMapper</a> gem as it's the most popular one (github forks and watchers metric). There are other ORMs which you can use with MongoDB, <a href="http://github.com/durran/mongoid" target="_blank">Mongoid</a> seems like a good alternative and the rest are documented here: <a href="http://www.mongodb.org/display/DOCS/Ruby+Language+Center" target="_blank">http://www.mongodb.org/display/DOCS/Ruby+Language+Center</a>.<p /> <span style="font-size: medium;">Installation<br /></span><br />Download and run mongod <a href="http://www.mongodb.org/display/DOCS/Downloads" target="_blank">http://www.mongodb.org/display/DOCS/Downloads</a><br /></div>
<p />
<div>Install the gems:</div>
<div><script src="https://gist.github.com/268948.js?file=install_gems"></script><br /></div>
<p />
<div>Configure your environment, and remove AR:<a href="http://gist.github.com/268948.js?file=enviroment.rb"></a></div>
<div><script src="https://gist.github.com/268948.js?file=config.enviroment.rb"></script><br /></div>
<p />
<div>Add a config file for your database:</div>
</div>
<div><script src="https://gist.github.com/268948.js?file=config.mongodb.yml"></script><br /></div>
<p />
<div>
<div>And add an initializer to setup MongoMapper and friends:</div>
<div><script src="https://gist.github.com/268948.js?file=config.initializers.mongodb.rb"></script><p /> <span style="font-size: medium;">Getting stuff done</span><p />Now I know what you might be thinking, 'oh no not another ORM all my favorite gems won't work!', that is not the case! (*in some cases)<br /></div>
<div>
<ul>
<li>Authentication - Devise <a href="http://github.com/plataformatec/devise">http://github.com/plataformatec/devise</a> (just configure the ORM option)</li>
<li>Image uploading - CarrierWave - <a href="http://github.com/jnicklas/carrierwave">http://github.com/jnicklas/carrierwave</a> with <a href="http://gist.github.com/264077">a Rails meta</a>l or Grip <a href="http://github.com/twoism/grip">http://github.com/twoism/grip</a></li>
<li>Formtastic works <a href="http://github.com/justinfrench/formtastic">http://github.com/justinfrench/formtastic</a></li>
<li>and many more - add your favorite in the comments should you know of a good one with MM support</li>
</ul>
<div><span style="font-size: medium;">Usage</span><p />These Models are stripped down but you get the idea. Let say you're using Devise, then your User model could look like this:<br /><script src="https://gist.github.com/268948.js?file=models.user.rb"></script><p /> And if that user had comments the model could look like:<br /><script src="https://gist.github.com/268948.js?file=models.comment.rb"></script><p />These are just to help kick-start your app development, for more complete examples see the open source apps and <a href="http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails">http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails</a> :<p /> <span style="font-size: large;">Open Source Ruby Applications using MongoDB (and MongoMapper)</span><p /> NewsMonger - A&nbsp;simple social news application demonstrating MongoDB and Rails<a href="http://github.com/banker/newsmonger/" target="_blank"></a></div>
<div><a href="http://github.com/banker/newsmonger/" target="_blank">http://github.com/banker/newsmonger/</a></div>
<div><br />Oupsnow - A&nbsp;bugtracker in Rails/MongoMapper<br /><a href="http://github.com/shingara/oupsnow/" target="_blank">http://github.com/shingara/oupsnow/</a><p /> </div>
<div>Watchtower - An example app built with Sinatra, Mustache and MongoDB<br /><a href="http://github.com/kneath/watchtower/" target="_blank">http://github.com/kneath/watchtower/</a><p /></div>
<div>Shapado - stackoverflow like question and answer site:&nbsp;<br /> <a href="http://gitorious.org/shapado/shapado" target="_blank">http://gitorious.org/shapado/shapado</a><p /></div>
mmmblog - a blogging engine by the same guys as Shapado (<a href="http://blog.ricodigo.com/" target="_blank">http://blog.ricodigo.com/</a>)<br /> <a href="http://gitorious.org/mmmblog" target="_blank">http://gitorious.org/mmmblog</a><p />  More at <a href="http://wiki.github.com/jnunemaker/mongomapper/projects-using-mongomapper">http://wiki.github.com/jnunemaker/mongomapper/projects-using-mongomapper</a><p /><span style="font-size: medium;">Pro Tips</span><br /> 
<ul>
<li>MongoMapper uses a fork of the validatable gem - which has some differences with AR validations</li>
<li>Denormalization is needed to reduce round-trips to the DB</li>
<li>Change how you think of your data models - this is closer to an object store</li>
<li>The finders have nifty options checkout <a href="http://wiki.github.com/jnunemaker/mongomapper/whats-new">http://wiki.github.com/jnunemaker/mongomapper/whats-new</a> (0.5.7) </li>
<li>Don't be afraid to drop down and use to the Ruby MongoDB driver directly <a href="http://www.mongodb.org/display/DOCS/Ruby+Tutorial">http://www.mongodb.org/display/DOCS/Ruby+Tutorial</a></li>
<li>Keep an eye out on the github commit feed as it's a bit of a moving target still </li>
</ul>
</div>
</div>
<div><span style="font-size: medium;">Notable Sites</span><br /> 
<ul>
<li><a href="http://blog.mongodb.org/" target="_blank">http://blog.mongodb.org/</a></li>
<li><a href="http://github.com/jnunemaker/mongomapper" target="_blank">http://github.com/jnunemaker/mongomapper</a> </li>
<li><a href="http://groups.google.com/group/mongomapper" target="_blank">http://groups.google.com/group/mongomapper</a></li>
<li><a href="http://railstips.org/" target="_blank">http://railstips.org/</a> - Author of MongoMapper</li>
<li> <a href="http://railscasts.com/episodes/194-mongodb-and-mongomapper" target="_blank">http://railscasts.com/episodes/194-mongodb-and-mongomapper</a></li>
<li><a href="http://mongohq.com/home" title="MongoHQ">http://mongohq.com/</a> - MongoDB in the cloud</li>
<li><a href="http://github.com/derailed/mongo3">Mongo3</a> - visualize your cluster</li>
<li><a href="http://nosql.mypopescu.com/tagged/mongodb">http://nosql.mypopescu.com/tagged/mongodb</a> </li>
</ul>
</div>
<p><span style="font-size: medium;">Summary</span><br />No migrations (yes!), storing arrays and hashes as attribute keys (sweet), and inplace updates (ftw). We're not going to use MongoDB to build transactional systems any time soon, but for the majority of web applications it's a perfect fit.<p /> <br /><a href="http://bitzesty.com">Bit Zesty - Ruby on Rails Development (and MongoDB) UK</a></p>
	
</p>

<p><a href="http://blog.bitzesty.com/mongodb-with-mongomapper-and-ruby-on-rails">Permalink</a> 

	| <a href="http://blog.bitzesty.com/mongodb-with-mongomapper-and-ruby-on-rails#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/294009/6600_579002214984_222300693_4940396_4762996_n.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/168A1IkzIgp</posterous:profileUrl>
        <posterous:firstName>Matthew</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>@matthewcford</posterous:nickName>
        <posterous:displayName>Matthew Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Mon, 28 Sep 2009 16:12:22 -0700</pubDate>
      <title>Encrypting Data in your Ruby on Rails Application </title>
      <link>http://blog.bitzesty.com/encrypting-data-in-your-ruby-on-rails-applica</link>
      <guid>http://blog.bitzesty.com/encrypting-data-in-your-ruby-on-rails-applica</guid>
      <description>
        <![CDATA[<p>
	Whilst searching for a gem/plug-in to help with storing encrypted notes in a Rails app, I found <a href="http://github.com/spikex/strongbox" target="_blank">strongbox</a>. It uses <span rel="/spikex/strongbox/edit/update">public key encryption</span> to encrypt and store data on a ActiveRecord attribute - Spike has a great <a href="http://stuff-things.net/2009/04/17/introducing-strongbox/" target="_blank">writeup on his blog</a>. One limitation I encountered was that it only uses one key to encrypt the data, which wasn&#39;t going to work when I have multiple users, all storing private information.<p /> <img title="491113684_ee82e217f1_m.jpg" src="http://farm1.static.flickr.com/223/491113684_ee82e217f1_m.jpg" alt="491113684_ee82e217f1_m.jpg" /><br />So I wrote a wrapper around strongbox that I am releasing called <a href="http://github.com/bitzesty/safe" target="_blank">Safe - a Rails engine for storing encrypted data</a>. Safe handles the generating of the public and private keys and uses strongbox to encrypt and decrypt the data. It&#39;s still in early stages, and it doesn&#39;t support all of the options that strongbox does, but it is on the TODO list.<p /> So let me know if you find it useful and don&#39;t forget to symlink the keys directory in your deployment scripts!<p /><br /><a href="http://bitzesty.com/" target="_blank">Bit Zesty - Ruby on Rails developers in London</a>.<br />  
	
</p>

<p><a href="http://blog.bitzesty.com/encrypting-data-in-your-ruby-on-rails-applica">Permalink</a> 

	| <a href="http://blog.bitzesty.com/encrypting-data-in-your-ruby-on-rails-applica#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/294009/6600_579002214984_222300693_4940396_4762996_n.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/168A1IkzIgp</posterous:profileUrl>
        <posterous:firstName>Matthew</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>@matthewcford</posterous:nickName>
        <posterous:displayName>Matthew Ford</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Thu, 17 Sep 2009 06:46:00 -0700</pubDate>
      <title>Better XML Parsing with Rails</title>
      <link>http://blog.bitzesty.com/better-xml-parsing-with-rails</link>
      <guid>http://blog.bitzesty.com/better-xml-parsing-with-rails</guid>
      <description>
        <![CDATA[<p>
	<div>We recently built a Ruby on Rails application that was receiving a large amount of XML. This as you can imagine was pretty CPU intensive, especially as Rails (ActiveSupport) uses REXML under the covers to parse the incoming requests. <p /> I started to wonder if it was possible to use a different XML parsing library, for an overview of some of the available libraries and benchmarks see John Nunemaker's post about <a href="http://railstips.org/2008/8/12/parsing-xml-with-ruby" target="_blank">parsing xml with ruby</a> and the rubyinside post <a href="http://www.rubyinside.com/ruby-xml-performance-benchmarks-1641.html">ruby xml performance benchmarks</a>.<p /> I've used most of these libraries at some point or another for parsing XML and I was really impressed with <a href="http://github.com/tenderlove/nokogiri">Nokogiri</a>, and I desperately wanted to use it in production for the Rails backed parsing. So I started to look at the Rails source and I noticed this commit <a href="http://github.com/rails/rails/commit/694998ee4fb8d257ba78424cab630846327a0889" target="_blank">http://github.com/rails/rails/commit/694998ee4fb8d257ba78424cab630846327a0889.<br /> </a><br />YES! All you have to do (besides installing Nokogiri on your server) is specify:<p />
</div>
<div><code>
ActiveSupport::XmlMini.backend = 'Nokogiri'
</code></div>
<div>
<br />In your production.rb environment and your done. The results speak for themselves, here is a snapshot of our CPU usage before and after, with the same load.<p /> 
</div>
<p><div class='p_embed p_image_embed'>
<img alt="Gnip-cpu" height="571" src="http://getfile5.posterous.com/getfile/files.posterous.com/bitzesty/B4dhV8SgtyDguOA5BQwA2KxtIznkXAuDyQBETSYnx2QkxFodCdtPBIcNwgwC/gnip-cpu.png" width="496" />
</div>
</p>
	
</p>

<p><a href="http://blog.bitzesty.com/better-xml-parsing-with-rails">Permalink</a> 

	| <a href="http://blog.bitzesty.com/better-xml-parsing-with-rails#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/294009/6600_579002214984_222300693_4940396_4762996_n.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/168A1IkzIgp</posterous:profileUrl>
        <posterous:firstName>Matthew</posterous:firstName>
        <posterous:lastName>Ford</posterous:lastName>
        <posterous:nickName>@matthewcford</posterous:nickName>
        <posterous:displayName>Matthew Ford</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="571" width="496" url="http://getfile5.posterous.com/getfile/files.posterous.com/bitzesty/B4dhV8SgtyDguOA5BQwA2KxtIznkXAuDyQBETSYnx2QkxFodCdtPBIcNwgwC/gnip-cpu.png">
        <media:thumbnail height="571" width="496" url="http://getfile5.posterous.com/getfile/files.posterous.com/bitzesty/B4dhV8SgtyDguOA5BQwA2KxtIznkXAuDyQBETSYnx2QkxFodCdtPBIcNwgwC/gnip-cpu.png"/>
      </media:content>
    </item>
  </channel>
</rss>
