<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.alexbcoles.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-GB">
  <title>Alex Coles - Home</title>
  <id>tag:alexbcoles.com</id>
  <generator uri="http://jekyllrb.com/" version="0.5">Jekyll</generator>
  
  <link href="http://alexbcoles.com/" rel="alternate" type="text/html" />
  <updated>2012-04-09T12:19:39-07:00</updated>
  <author>
    <name>Alex Coles</name>
    <email>alex@alexbcoles.com</email>
  </author>

  
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.alexbcoles.com/alexbcoles" /><feedburner:info uri="alexbcoles" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <title>Crowd Control</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/58bDeVopPY8/crowd-control.html" />
    <updated>2012-04-02T00:00:00-07:00</updated>
    <id>http://rebase.github.com/code/2012/04/02/crowd-control</id>
    <content type="html">&lt;h2&gt;Crowd-funding meets open-source&lt;/h2&gt;

&lt;p&gt;Something makes me deeply uncomfortable about &lt;a href="http://yehudakatz.com/"&gt;Yehuda Katz&lt;/a&gt;'s (&lt;a href="https://twitter.com/#!/wycats"&gt;@wycats&lt;/a&gt;) recently announced &lt;a href="http://www.kickstarter.com/projects/1397300529/railsapp"&gt;crowd-funding effort for rails.app&lt;/a&gt;, and I have been trying to put my finger on it. To a certain extent, writing anything on the subject is a moot point. As of 2nd April, the target of $25,000 has been far exceeded. There is clearly interest (and money) in our industry for such a tool.&lt;/p&gt;

&lt;p&gt;Nevertheless, I think &lt;a href="https://twitter.com/#!/drbrain"&gt;Eric Hodel&lt;/a&gt; is conflating points in his latest blog post &lt;a href="http://blog.segment7.net/2012/03/29/on-community-funding-of-open-source"&gt;"On Community Funding of Open Source"&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Over the last week, there have been those that have expressed their dissatisfaction with the way Yehuda lead refactoring of Rails 3. There were doubts about whether he was the right person to do the job. And there have, indeed, been tweets that border on the obnoxious and insulting. If we end up resorting to personal attacks, then Eric is right to call people out on that.&lt;/p&gt;

&lt;p&gt;But, &lt;code&gt;sceptic != hater&lt;/code&gt;. I am sceptical, and as such have found myself playing &lt;em&gt;agent provocateur&lt;/em&gt;, retweeting various opposing views.&lt;/p&gt;

&lt;p&gt;So why am I uneasy?&lt;/p&gt;

&lt;p&gt;It boils down to the following three reasons:&lt;/p&gt;

&lt;h3&gt;1. No proof of concept. No sweat.&lt;/h3&gt;

&lt;p&gt;Yehuda is trying to appeal to a community of developers. We generally prefer to talk code, and not pour over Functional Requirement documents. A prototype, or proof of concept of some sort, would have been great.&lt;/p&gt;

&lt;p&gt;This takes place in the context of a community that often espouses &lt;em&gt;bootstrapping&lt;/em&gt;. The &lt;a href="http://travis-ci.org/"&gt;Travis CI&lt;/a&gt; developers sweated before asking for crowd-sourced funding. Prominent Rubyists like &lt;a href="https://twitter.com/#!/amyhoy"&gt;Amy Hoy&lt;/a&gt; champion &lt;em&gt;bootstrapping&lt;/em&gt; whole-heartedly.&lt;/p&gt;

&lt;p&gt;In the midst of this controversy, &lt;a href="http://omgbloglol.com/"&gt;Jeremy McAnally&lt;/a&gt; (&lt;a href="https://twitter.com/#!/jm"&gt;@jm&lt;/a&gt;) has already come up with &lt;a href="http://jeremymcanally.com/images/railcar.mov"&gt;railcar&lt;/a&gt;, a proof of concept that implements some parts of what Yehuda is proposing.&lt;/p&gt;

&lt;h3&gt;2. Oversight&lt;/h3&gt;

&lt;p&gt;When an open-source project comes about organically, through the sweat and initiative of its founder, there is usually no need for oversight. People will either use it, or not. A common adage of proponents of liberal licenses like the MIT (X11) is "I don't owe you fuck".&lt;/p&gt;

&lt;p&gt;When a company sponsors the project, there is oversight in the sense that the company's profit imperative will usually keep the project somewhat on track.&lt;/p&gt;

&lt;p&gt;But when a community is crowd-funding directly with a freelancer, how will this process work in practice? The scepticism does not arise from a mistrust of Yehuda. Rather, it arises from the concern about how individual developers can protect themselves against potential fall out when crowd-sourced projects go wrong.&lt;/p&gt;

&lt;p&gt;rails.app will, inevitably, result in conflicting interests stemming from differing requirements. It could be anything from &lt;em&gt;minutiae&lt;/em&gt; like the colour of the icon to the plugins bundled by default. For a foretaste of the problems that arise, you only have to look at the Rails and Bundler issue trackers. Their developers, on the other hand, can turn around and say "I don't owe you fuck". Yehuda won't be able to do this.&lt;/p&gt;

&lt;p&gt;Whose interests will be prioritised? Which funder? The one who paid the most, or the one whose idea appears to make the most sense?&lt;/p&gt;

&lt;h3&gt;3. Money. Money. Money.&lt;/h3&gt;

&lt;p&gt;This is probably the least salient of the three main points, but I will mention it regardless. Here I could also easily be accused of &lt;em&gt;jealously&lt;/em&gt; - perhaps my own fault for not monetising my own work as much as I should. But Yehuda is soliciting for work where he will be paid at a substantial rate – $275 per hour. In some parts of the world, this amount would fund an entire team.&lt;/p&gt;

&lt;h3&gt;… and a couple open questions&lt;/h3&gt;

&lt;p&gt;It is also important to consider what sort of precedent this will set for doing open-source. To what extent will this detract from funding projects that are already established? For instance, &lt;a href="http://railsinstaller.org/"&gt;Rails Installer&lt;/a&gt; is planning a Mac version. If I were the maintainer of &lt;a href="http://rubyinstaller.org/"&gt;Ruby Installer&lt;/a&gt;, I  imagine I would feel a bit resentful after ploughing hundreds of personal hours into a product (I am not the maintainer though – and knowing &lt;a href="http://blog.mmediasys.com/"&gt;Luis Lavena&lt;/a&gt; (&lt;a href="https://twitter.com/#!/jm"&gt;@luislavena&lt;/a&gt;), he is far more cool than me).&lt;/p&gt;

&lt;h3&gt;A final note&lt;/h3&gt;

&lt;p&gt;I cut my Ruby teeth on &lt;a href="http://www.merbivore.com/"&gt;Merb&lt;/a&gt;, a spectacularly well-engineered Ruby MVC Framework. I have played with &lt;a href="https://github.com/carlhuda/janus"&gt;Janus&lt;/a&gt; and &lt;a href="http://github.com/wycats/thor"&gt;Thor&lt;/a&gt;. I use &lt;a href="https://github.com/carlhuda/bundler"&gt;Bundler&lt;/a&gt; constantly. I am currently building products with Rails 3 and &lt;a href="http://emberjs.com/"&gt;ember.js&lt;/a&gt;. I am a great fan of Yehuda's work, and enormously grateful for the contribution he has made to open-source. His work has enriched the Ruby community.&lt;/p&gt;

&lt;p&gt;I also do not doubt the quality of his work. I would be happy to be half the programmer Yehuda is. For some, he may have made Rails 3 seem overly complex. For my needs at least, Yehuda made Rails 3 viable.&lt;/p&gt;

&lt;p&gt;Do I doubt we need something like rails.app? At the beginning, I was not sure if there would be demand, but I will admit, my mind has changed after participating in the discussion on Twitter.&lt;/p&gt;

&lt;p&gt;Yehuda deserves respect, and deserves to be paid a decent rate. I hope I have summed up some of the issues with the crowd-funding approach. If the community is taking on the role of investor, we must be more demanding. Yehuda is proposing a new model of funding open-source, and it is entirely right to criticise this process, in order to refine it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;As a footnote: this whole issue reminded me that the folks at Travis were due a little contribution from me. I was in the middle of an internal launch back when their crowd-funding started – read: living under a rock – and so it passed me by. I would encourage you to support an open-source project out there! Be it with cash donations or patches.&lt;/em&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/58bDeVopPY8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/code/2012/04/02/crowd-control.html</feedburner:origLink></entry>
  
  <entry>
    <title>Bundler Pain Points</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/zmGZc99Btcs/bundler-pain-points.html" />
    <updated>2012-03-20T00:00:00-07:00</updated>
    <id>http://rebase.github.com/code/2012/03/20/bundler-pain-points</id>
    <content type="html">&lt;p&gt;In so many ways, &lt;a href="http://gembundler.com/"&gt;Bundler&lt;/a&gt; is a godsend. Yet, like all gems (forgive the wordplay), it is not without a few rough edges.&lt;/p&gt;

&lt;p&gt;While at the (absolutely fantastic) &lt;a href="http://wrocloverb.com/"&gt;Wroclaw.rb&lt;/a&gt; last weekend, I finally took a moment to round up some of these issues into a &lt;a href="http://wrocloverb.alexbcoles.com/"&gt;lightning talk&lt;/a&gt;. Unfortunately, not having paced myself correctly I got cut off just before the final couple of slides. So I resolved to reformulate the content into a blog post. A further &lt;strong&gt;impetus&lt;/strong&gt; was a recent &lt;a href="https://gist.github.com/2063855"&gt;gist&lt;/a&gt; by &lt;a href="http://twitter.com/svenfuchs"&gt;Sven Fuchs&lt;/a&gt; (der &lt;a href="http://travis-ci.org/"&gt;Travis CI&lt;/a&gt;- und Ruby I18n-Meister).&lt;/p&gt;

&lt;p&gt;The aim of this article is to highlight a handful of — what I consider to be — the rough edges, and to proffer potential solutions/workarounds.&lt;/p&gt;

&lt;p&gt;Perhaps surprisingly, one thing I am not going to talk about is the issue of &lt;strong&gt;performance&lt;/strong&gt; (in other words, that &lt;strong&gt;infamous&lt;/strong&gt; &lt;code&gt;Fetching source index…&lt;/code&gt; wait). With the recent launch of Bundler 1.1 you should notice &lt;a href="http://patshaughnessy.net/2011/10/14/why-bundler-1-1-will-be-much-faster"&gt;a big speedup&lt;/a&gt;. If you have not upgraded, please do. Bundler uses &lt;a href="http://semver.org/"&gt;semantic versioning&lt;/a&gt; and this release should be fully API-compatible with Bundler 1.0.x.&lt;/p&gt;

&lt;p&gt;Here is my run down of &lt;strong&gt;the top 3 Bundler pain points&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Lack of optional groups&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lack of overridable version dependencies&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not being able to declare a dependency more than once&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;1. Lack of optional groups&lt;/h2&gt;

&lt;h3&gt;Use case&lt;/h3&gt;

&lt;p&gt;You are developing an &lt;strong&gt;application&lt;/strong&gt; (as opposed to a &lt;strong&gt;library&lt;/strong&gt;) and you want it to be usable and deployable 'out of the box.' You do not want your users to have to manually edit (or uncomment lines in) their &lt;code&gt;Gemfile&lt;/code&gt;. You will find that this problem arises nearly always with database drivers.&lt;/p&gt;

&lt;h3&gt;Workaround&lt;/h3&gt;

&lt;p&gt;The current best workaround is something along these lines:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;bundle install --without=postgres,sqlite3
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In other words, rather than specifying groups to &lt;em&gt;include&lt;/em&gt;, you have to provide a list of what you want to &lt;em&gt;exclude&lt;/em&gt;.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pg&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="n"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;postgres&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sqlite3&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="n"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sqlite3&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;mysql&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="n"&gt;groups&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;mysql&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;A better fix&lt;/h3&gt;

&lt;p&gt;There is a &lt;a href="https://github.com/carlhuda/bundler/issues/1636"&gt;proposal&lt;/a&gt; from &lt;a href="https://github.com/FooBarWidget"&gt;@FooBarWidget&lt;/a&gt; and &lt;a href="https://github.com/mislav"&gt;@mislav&lt;/a&gt;, which I find to be very pragmatic. In summary, this is what it would look like:&lt;/p&gt;

&lt;p&gt;Installing optional groups,&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;bundle install --with=postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and in the &lt;code&gt;Gemfile&lt;/code&gt;,&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="n"&gt;group&lt;/span&gt; &lt;span class="ss"&gt;:postgres&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;optional&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pg&amp;#39;&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;I would encourage you to +1 the proposal!&lt;/p&gt;

&lt;h2&gt;2. Lack of overridable version dependencies&lt;/h2&gt;

&lt;h3&gt;Use case&lt;/h3&gt;

&lt;p&gt;When a new version of Rails appears, it is frustrating to upgrade, only to discover that you cannot proceed until the plugins and libraries you depend upon are updated. In some cases, this is down to definite API incompatibilities, but in other cases, it might have been that the developer of the particular library was just too cautious in specifying the versions the library supports.&lt;/p&gt;

&lt;h3&gt;Workaround&lt;/h3&gt;

&lt;p&gt;The current, recommended workflow is to fork the particular library or plugin and specify it as a git dependency in your &lt;code&gt;Gemfile&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;A better fix&lt;/h3&gt;

&lt;p&gt;There is &lt;a href="https://github.com/carlhuda/bundler/issues/1549"&gt;an issue open for this&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thus, overriding dependencies when a particular gem &lt;code&gt;gemspec&lt;/code&gt; is out of date:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sass-rails&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;override&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;railties&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;4.0.0&amp;#39;&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Alas, this is not something the Bundler team are currently considering adding in, and as such, there is no code. The Bundler team assert that the fork and git dependency workflow works well, but for my development team, it's turned into a maintenance nightmare.&lt;/p&gt;

&lt;p&gt;My main argument is that a &lt;code&gt;gemspec&lt;/code&gt; is not core application code, but instead metadata. As such, there should be mechanism for easily overriding this metadata – and that this mechanism should not be considered to be in the same light as monkey-patching.&lt;/p&gt;

&lt;p&gt;I would also encourage you to comment on (or perhaps even +1) this issue!&lt;/p&gt;

&lt;h2&gt;3. Not being able to declare a dependency more than once&lt;/h2&gt;

&lt;h3&gt;Use case&lt;/h3&gt;

&lt;p&gt;Bundler will not currently let you declare a dependency more than once. This means you cannot have different versions or sources for a dependency, even if you scope your dependencies using groups.&lt;/p&gt;

&lt;p&gt;Not being able to declare a dependency more than once makes the following things painful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;testing against multiple versions of a resource (for example, in CI) &lt;em&gt;(problem A)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;development of componentised systems:
(perhaps working against a git repository of a dependency, or an Engine in git)
&lt;em&gt;(problem B)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;In fact, &lt;em&gt;problem B&lt;/em&gt; provided my initial motivation for investigating the whole question. At &lt;a href="http://payango.com/en"&gt;Payango&lt;/a&gt;, we are currently building a new platform for prepaid VISA cards; our previous platform was built as a monolithic Rails application, but the new platform is built on the foundations of a &lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture"&gt;Service-oriented Architecture&lt;/a&gt;. For each given product on our platform, we have multiple applications running. To share code, we are employing Rails engines and internal libraries extensively.&lt;/p&gt;

&lt;p&gt;Of course, in a perfect world — and because we aim to keep concerns separate — our layers would be perfectly tested and respect their contracts. In this perfect world, we would never need to break down, debug or change views in our upstream library or Engine. Unfortunately — despite the best efforts and good design — we do sometimes need to work on a library and the host application simultaneously.&lt;/p&gt;

&lt;h3&gt;Workaround …&lt;/h3&gt;

&lt;p&gt;The concept is &lt;strong&gt;easy&lt;/strong&gt;: the solution for both problems is to employ multiple Gemfiles.&lt;/p&gt;

&lt;h4&gt;… for problem A&lt;/h4&gt;

&lt;p&gt;Create more than one &lt;code&gt;Gemfile&lt;/code&gt;, where you want to use different versions or a specify a tighter version than that defined in the &lt;code&gt;.gemspec&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I have seen this solution used by &lt;a href="http://seancribbs.com/ripple/"&gt;Ripple&lt;/a&gt;, for example:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="c1"&gt;# Taken from:&lt;/span&gt;
&lt;span class="c1"&gt;# https://github.com/seancribbs/ripple/blob/master/Gemfile.rails31&lt;/span&gt;

&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;activemodel&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;~&amp;gt; 3.1.0&amp;#39;&lt;/span&gt;

&lt;span class="nb"&gt;instance_eval&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;expand_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;../Gemfile&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;where the &lt;code&gt;.gemspec&lt;/code&gt; may contain,&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="n"&gt;gem&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_dependency&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;activemodel&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;gt;= 3.0.0&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;lt; 3.3.0&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;such an approach is useful for automated testing, particularly &lt;a href="http://en.wikipedia.org/wiki/Continuous_integration"&gt;Continuous Integration&lt;/a&gt;. Travis CI allows you to specify multiple Gemfiles in your &lt;code&gt;.travis.yml&lt;/code&gt;,&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="yaml"&gt;&lt;span class="l-Scalar-Plain"&gt;gemfile&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt;
  &lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;Gemfile.rails30&lt;/span&gt;
  &lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;Gemfile.rails31&lt;/span&gt;
  &lt;span class="p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;Gemfile.rails32&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;h4&gt;… for problem B&lt;/h4&gt;

&lt;p&gt;The solution lies in the environment variable &lt;code&gt;BUNDLE_GEMFILE&lt;/code&gt;. First create a copy of your &lt;code&gt;Gemfile&lt;/code&gt; as &lt;code&gt;Gemfile.local&lt;/code&gt; and specify your path dependencies in your &lt;code&gt;Gemfile.local&lt;/code&gt;, keeping your git or gem dependencies in your original &lt;code&gt;Gemfile&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When it comes to working with the host application or library, just make sure &lt;code&gt;BUNDLE_GEMFILE&lt;/code&gt; is set:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;BUNDLE_GEMFILE=Gemfile.local bundle install
BUNDLE_GEMFILE=Gemfile.local rake spec
BUNDLE_GEMFILE=Gemfile.local rails server
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;of course you can wrap this into a shell function,&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;local_gemfile_on
local_gemfile_off
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(See the &lt;a href="https://gist.github.com/2126969"&gt;gist&lt;/a&gt; for example functions you can add to your &lt;code&gt;.bash_profile&lt;/code&gt;. You might also consider adding your current &lt;code&gt;BUNDLE_GEMFILE&lt;/code&gt; to &lt;code&gt;PS1&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;Keeping more than one &lt;code&gt;Gemfile&lt;/code&gt; is, of course, a big pain. So, use Rake to keep the copy in sync:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ss"&gt;:local_gemfile&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;gemfile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Gemfile&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;gemfile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gsub!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/git: [&amp;quot;&amp;#39;]git@github\.com:payango\/([\w-]+)\.git[&amp;quot;&amp;#39;]/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;path: \&amp;#39;../\1\&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Gemfile.local&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gemfile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;See the &lt;a href="https://gist.github.com/2016633"&gt;gist&lt;/a&gt; for the full tasks.&lt;/p&gt;

&lt;p&gt;Two points to bear in mind when using this technique with Rails:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This will not handle code reloading: just because you do not have to &lt;code&gt;bundle update&lt;/code&gt; each time you want to pull in the latest version of your library/Engine, it does not mean you will see all changes straight away. I have not yet worked out a solution for reloading Engines code on change.&lt;/li&gt;
&lt;li&gt;If you are building on top of an older point release of Rails 3.x, you may need to update your &lt;code&gt;config/boot.rb&lt;/code&gt; file. Because, older generated boot files overwrote the &lt;code&gt;BUNDLE_GEMFILE&lt;/code&gt; environment variable, make sure your file looks &lt;a href="https://github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/app/templates/config/boot.rb"&gt;like this&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;A better fix&lt;/h3&gt;

&lt;p&gt;A better fix is on its way. Just as I was finishing this article, the following &lt;a href="https://github.com/carlhuda/bundler/pull/1779"&gt;pull request&lt;/a&gt; from &lt;a href="http://github.com/josevalim"&gt;@josevalim&lt;/a&gt; was merged. I have yet to dig through the code, and it will take some time until the feature is released, but what is there already looks promising.&lt;/p&gt;

&lt;h2&gt;As a conclusion&lt;/h2&gt;

&lt;p&gt;Let us get this clear (and to end on a positive note):&lt;/p&gt;

&lt;p&gt;The Ruby world before Bundler was a much more painful place. Manually installing Gems — with the ensuing Gem activation conflicts — was not fun. The Rails 2 way of dependency management, &lt;code&gt;config.gem&lt;/code&gt; was buggy, at best.&lt;/p&gt;

&lt;p&gt;Bundler has collectively spared us thousands of hours, and I hope to see it improved further.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What are your pain points?&lt;/em&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/zmGZc99Btcs" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/code/2012/03/20/bundler-pain-points.html</feedburner:origLink></entry>
  
  <entry>
    <title>Project Update: MarkdownJ</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/YYe9Pwis_54/project-update-markdownj.html" />
    <updated>2009-11-25T00:00:00-08:00</updated>
    <id>http://rebase.github.com/code/2009/11/25/project-update-markdownj</id>
    <content type="html">&lt;p&gt;The &lt;a href="http://dingus.markdownj.org/"&gt;Web Dingus for MarkdownJ is back&lt;/a&gt; and
deployed to &lt;a href="http://code.google.com/appengine/"&gt;Google App Engine&lt;/a&gt;. This is the
first "application" I've deployed to GAE (I use inverted commas, as it is a pretty
trivial application). The experience was relatively straightforward, although one
issue I did encounter was that GAE's customised version of &lt;a href="http://www.mortbay.org/jetty/"&gt;Jetty&lt;/a&gt; does
not handle &lt;code&gt;&amp;lt;jsp-file&amp;gt;&lt;/code&gt;-type servlets correctly (see issue &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=1365&amp;amp;q=jsp&amp;amp;colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log%20Component"&gt;1365&lt;/a&gt;).
A simple workaround was to rename the jsp file I wanted to map as a servlet to
&lt;code&gt;index.jsp&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;My next step will be improving documentation and publishing the API docs
somewhere. The MarkdownJ site is currently hosted on &lt;a href="http://pages.github.com/"&gt;GitHub pages&lt;/a&gt;.
I'm using Maven as build/project tool and have played a little with the
possibility of publishing the generated docs to the &lt;code&gt;gh-pages&lt;/code&gt; branch - it is
possible (see &lt;a href="http://github.com/judofyr/grancher/tree/gh-pages"&gt;Grancher&lt;/a&gt; for a Ruby tool that does this), but I don't
find it particularly elegant.&lt;/p&gt;

&lt;p&gt;Planned for early in the new year is a new MarkdownJ parser. Currently MarkdownJ
relies on regular expressions, which doesn't provide for easy maintenance. Most
importantly though, regular expressions don't really &lt;em&gt;understand&lt;/em&gt; the Markdown
code and don't provide for an intermediate representation of a Markdown
document. An internal representation would make possible such things as multiple
output formats (not just HTML, but also PDF and ODF) and pluggable converters to
other markup languages. "Eclipse Mylyn WikiText", formerly known as
&lt;a href="http://www.eclipse.org/mylyn"&gt;TextileJ&lt;/a&gt; (eclipse.org must be hiring marketing managers from
Redmond) provides this type of functionality for the Textile markup language.&lt;/p&gt;

&lt;p&gt;Finally, since I'm mostly working in the Ruby language these days, I'd also like
to see better support for JRuby. A thin wrapper Ruby-like API would be pretty
easy to accomplish. It's particularly needed as the fast Markdown libraries for
Ruby, &lt;a href="http://www.deveiate.org/projects/BlueCloth"&gt;BlueCloth&lt;/a&gt; and &lt;a href="http://github.com/rtomayko/rdiscount"&gt;RDiscount&lt;/a&gt;, both rely on C native
extensions, something JRuby does not support.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/YYe9Pwis_54" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/code/2009/11/25/project-update-markdownj.html</feedburner:origLink></entry>
  
  <entry>
    <title>Getting Started with DataMapper on JRuby</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/EoFBBOxHmuw/getting-started-with-datamapper-merb-on-jruby.html" />
    <updated>2009-11-18T00:00:00-08:00</updated>
    <id>http://rebase.github.com/code/2009/11/18/getting-started-with-datamapper-merb-on-jruby</id>
    <content type="html">&lt;p&gt;Underneath DataMapper (at least if you haven't bitten the &lt;a href="http://en.wikipedia.org/wiki/NoSQL"&gt;NoSQL&lt;/a&gt; bullet
just yet) lies DataObjects. DataObjects is an attempt to rewrite existing Ruby
database drivers to conform to one, standard interface. If you're a recent
arrival from the world of PHP or .Net, then the DO API will not look too
disimilar to either PDO or ADO.net.&lt;/p&gt;

&lt;p&gt;Late this spring, tucked away in the DataObjects' Release Notes for version
0.9.12, was mention of support for JRuby. Unfortunately the support that
featured in 0.9.12 was incomplete at best. We needed a little longer to get
things working well, but over the summer we made significant progress in
supporting a &lt;a href="http://github.com/datamapper/do/blob/next/README.markdown"&gt;large number of&lt;/a&gt; databases on the JRuby platform.&lt;/p&gt;

&lt;p&gt;For a long while, I had a Gist up on Github illustrating the steps needed to get
up and running with DataMapper on JRuby. I promised to follow up with a more
detailed tutorial, but it's taken some time to get it published. In part, this
has been down to the fact that going through the process of writing a tutorial
has helped me uncover a plethora of bugs and inconsistencies, and I wanted to
take the time to deal with them before hitting the metaphorical "publish"
button. In any case, I hope this will be the first of many future Ruby postings.&lt;/p&gt;

&lt;p&gt;For the purposes of this tutorial, I am using &lt;a href="http://merbivore.com/"&gt;Merb&lt;/a&gt; as the MVC Framework,
but you should also be able to use Rails, Camping, or Sinatra.&lt;/p&gt;

&lt;p&gt;Many thanks to &lt;a href="http://twitter.com/dkubb"&gt;Dan Kubb (dkubb)&lt;/a&gt; for looking over
this post and to &lt;a href="http://twitter.com/GeorgeAdamson"&gt;George Adamson&lt;/a&gt; for actually
having the patience to test out these steps (on Windows, of all platforms!)&lt;/p&gt;

&lt;h2&gt;Preflight&lt;/h2&gt;

&lt;h3&gt;Install Java and the JDK&lt;/h3&gt;

&lt;p&gt;If you are running a recent version of Mac OS X, you should already have both
the Java Runtime Environment and Java Development Kit (JDK). Apple supplies
their own set of Java tools (although the &lt;a href="http://landonf.bikemonkey.org/static/soylatte/"&gt;Soylatte&lt;/a&gt; implementation is
available if you want Java 6 on Tiger and Leopard 32-bit machines).&lt;/p&gt;

&lt;p&gt;On Windows or a Linux distribution, you will likely already have the Java
Runtime Environment, but unless you've been doing Java development, you may be
without the JDK. The JDK is available from &lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;Sun's Java downloads page&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Install JRuby&lt;/h3&gt;

&lt;p&gt;We generally test against the latest stable version of JRuby. I've also tested
against v1.2.0, but I'd recommend being on 1.3.1 or 1.4.0. Installing JRuby
is as simple as downloading and decompressing the distributed &lt;code&gt;.zip&lt;/code&gt;/&lt;code&gt;.tar.gz&lt;/code&gt;
file (or running the new &lt;code&gt;.exe&lt;/code&gt; installer, if you're on Windows).&lt;/p&gt;

&lt;p&gt;Verbose installation instructions for JRuby are now available on the
&lt;a href="http://wiki.github.com/datamapper/do/jruby"&gt;Data Objects' wiki&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Configure your Path&lt;/h3&gt;

&lt;p&gt;Firstly, make sure JRuby is in your PATH. Typing &lt;code&gt;jruby --version&lt;/code&gt; should give
print out the version:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ jruby --version
jruby 1.4.0RC2 (ruby 1.8.7 patchlevel 174) (2009-10-21 7e77f32) (Java HotSpot(TM) Client VM 1.6.0_15) [i386-java]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Because these instructions rely on installation from source, we'll also be
compiling extensions that are written in Java. Hence make sure the JDK (and the
Java compiler, &lt;code&gt;javac&lt;/code&gt;) are in your PATH:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;c:\Users\alexbcoles&amp;gt;javac -version
javac 1.6.0_16
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;On Windows for example, this would mean adding &lt;code&gt;C:\Program Files\Java\jdk1.6.0_16\bin&lt;/code&gt;
to PATH. Again, more verbose instructions can be found in the &lt;a href="http://wiki.github.com/datamapper/do/jruby"&gt;wiki&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Install DataMapper + Merb&lt;/h2&gt;

&lt;p&gt;A major requirement in developing DataObjects'/DataMapper's JDBC support was
parity in the installation procedure. Installing on JRuby should be just as easy
as for MRI / 1.9.&lt;/p&gt;

&lt;p&gt;The good news is that if you want the latest published gems, you should be able
to install them as follows:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S gem install do_sqlite3 dm-core dm-more merb
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That's it! Unlike with ActiveRecord, you don't have to specify a separate JDBC
variant.&lt;/p&gt;

&lt;p&gt;However, for the purpose of these instructions and because our JRuby support is
still developing at a rapid pace (for instance, our SQL Server support is only
available in our Git repository), we'll cover installing the &lt;em&gt;edge&lt;/em&gt; version of
DataObjects / DataMapper.&lt;/p&gt;

&lt;h3&gt;Install Pre-Requisites&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Under Windows Vista/7, if you've used the JRuby installer and have
your system gems directory in &lt;code&gt;C:\Program Files\&lt;/code&gt; then you may have to run
&lt;code&gt;cmd.exe&lt;/code&gt; with Administrator privileges (&lt;strong&gt;Start&lt;/strong&gt; -&gt; type &lt;code&gt;cmd.exe&lt;/code&gt;, right
click, &lt;strong&gt;Run as Administrator&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: On *NIX platforms, you may need to prefix commands with sudo,
depending on where you installed &lt;code&gt;jruby&lt;/code&gt; (unless, of course, you're using
&lt;a href="http://rvm.beginrescueend.com/"&gt;rvm&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Install Addressable and an implementation of JSON:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S gem install json_pure addressable
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Install Jeweler (DataMapper and Merb projects are currently in the process of
migrating their Rakefiles to use Jeweler):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S gem install jeweler
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Install Extlib&lt;/h3&gt;

&lt;p&gt;Change to the directory where you keep your Code. (So &lt;code&gt;~/Dev&lt;/code&gt;, &lt;code&gt;c:\code&lt;/code&gt;,
&lt;code&gt;c:\Documents and Settings\harry\Code&lt;/code&gt;, etc.)&lt;/p&gt;

&lt;p&gt;We start by installing &lt;a href="http://github.com/datamapper/extlib/"&gt;Extlib&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git clone git://github.com/datamapper/extlib.git
cd extlib
jruby -S rake install
cd ..
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If the &lt;code&gt;rake install&lt;/code&gt; task fails under Windows, try again in two steps:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S rake package
jruby -S gem install pkg\extlib-0.9.14.gem
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Extlib is a collection of extensions to core Ruby classes and is currently used
by both the DataMapper and Merb projects. However, it'll go away in future
versions as we start to take advantage of the new, modular ActiveSupport in
Rails 3.0.&lt;/p&gt;

&lt;h3&gt;Install DataObjects&lt;/h3&gt;

&lt;p&gt;Then proceed to install DataObjects:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git clone git://github.com/datamapper/do.git
cd do

cd data_objects
jruby -S rake install
cd ..
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Next, decide on the driver for the database vendor you wish to use. If you're
installing from source, there will be three components to install:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;do_jdbc&lt;/code&gt;: DataObjects' JDBC support library. This is a Java library,
packaged as a Jar, and then wrapped up as a RubyGem.&lt;/li&gt;
&lt;li&gt;the JDBC driver: the database vendor's driver using the JDBC API. Also a Java
Jar, and in most cases, available wrapped up as RubyGems.&lt;/li&gt;
&lt;li&gt;the actual DataObjects' driver: written in Java and relies on the above two
libraries at runtime. Compiled against &lt;code&gt;do_jdbc&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;To install &lt;code&gt;do_jdbc&lt;/code&gt; (the DataObjects' JDBC support library):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd do_jdbc
jruby -S rake compile
jruby -S rake install
cd ..
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To install the JDBC driver for the DataObjects driver, if you're using one of
&lt;em&gt;mysql&lt;/em&gt;, &lt;em&gt;postgres&lt;/em&gt;, &lt;em&gt;sqlite3&lt;/em&gt; then we rely on ActiveRecord-JDBC to package the
JDBC jar files as Gems for us. Installation should be a matter of:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S gem install jdbc-[DBNAME]
jdbc-derby
jdbc-h2
jdbc-hsqldb
jdbc-mysql
jdbc-postgres
jdbc-sqlite3
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you're on &lt;em&gt;Oracle&lt;/em&gt;, then you need to place the Oracle JDBC driver &lt;code&gt;ojdbc14.jar&lt;/code&gt;
in your Java load path. Read &lt;a href="http://blog.rayapps.com/2009/07/21/initial-version-of-datamapper-oracle-adapter/"&gt;Raimond's blog article&lt;/a&gt; for more
instructions.&lt;/p&gt;

&lt;p&gt;If you're on &lt;em&gt;SQL Server&lt;/em&gt;, the ActiveRecord-JDBC has not yet packaged the jTDS
JDBC driver as a RubyGem. However, we have this available in the DataObjects
repository (you may need hoe first &lt;code&gt;jruby -S gem install hoe&lt;/code&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd jdbc_drivers/sqlserver
jruby -S rake install
cd ../..
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Unless you've got your own project or have your mind set on a specific vendor's
relational database, then follow this tutorial all the way through and install
SQLite3 support (it means you won't have to do any configuration later!):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S gem install jdbc-sqlite3
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then you can proceed to install the DataObjects' driver:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd do_[DBNAME]
jruby -S rake compile
jruby -S rake install
cd ../..
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Install DataMapper&lt;/h3&gt;

&lt;p&gt;Installing DataMapper's core and more gems should then be very straight-forward:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git clone git://github.com/datamapper/dm-core.git
cd dm-core
jruby -S rake install
cd ..

git clone git://github.com/datamapper/dm-more.git
cd dm-more
jruby -S rake install
cd ..
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Install Merb&lt;/h3&gt;

&lt;p&gt;The Merb maintainers just came out with a release (1.0.15) that should be
compatible with DataMapper 0.10.x series. You should be able to install the gems
as follows:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo jruby -S gem install merb-core merb-more
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Create a Merb Project&lt;/h2&gt;

&lt;p&gt;Change to the project directory of your choice and use the &lt;code&gt;merb-gen&lt;/code&gt; generator
to create a "jump-start" Merb application. DataMapper is the default ORM for
this generator type.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd ~/Projects
jruby -S merb-gen app myapp
cd myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Before you run the application, make sure the dependency versions in
&lt;code&gt;config/dependencies.rb&lt;/code&gt; correspond with the "edge" versions you just installed.&lt;/p&gt;

&lt;p&gt;Open config/dependencies.rb in your favourite text editor.&lt;/p&gt;

&lt;p&gt;If the dependencies are out-of-date, then bump them appropriately:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="n"&gt;merb_gems_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;1.0.15&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;dm_gems_version&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;~&amp;gt; 0.10&amp;quot;&lt;/span&gt;
&lt;span class="n"&gt;do_gems_version&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;~&amp;gt; 0.10&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The next major version of Merb, 1.1, will completely replace the
dependency handling mechanism described here with &lt;a href="http://yehudakatz.com/"&gt;Yehuda Katz's (wycats)&lt;/a&gt;
&lt;a href="http://github.com/wycats/bundler"&gt;Bundler&lt;/a&gt;. It's technically possible to use the Bundler with Merb 1.0.x
series, but for concision, I won't elaborate on doing that here.&lt;/p&gt;

&lt;h2&gt;Run Merb&lt;/h2&gt;

&lt;p&gt;Before adding in any customisations of your own, check you're able to run the
application.&lt;/p&gt;

&lt;p&gt;Merb is built on Rack, and Rack needs a webserver. Webrick is a part of the Ruby
standard library, so we could use that:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S merb -a webrick
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(the &lt;code&gt;-a&lt;/code&gt; flag specifies an adapter)&lt;/p&gt;

&lt;p&gt;I encountered problems shutting down Webrick though, and had to kill it.
Additionally, you'll probably want to use the server you'll end up deploying to,
so let's try with Mongrel instead:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S gem install mongrel
jruby -S merb -V
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(this time with &lt;code&gt;-V&lt;/code&gt; to give us some verbose output)&lt;/p&gt;

&lt;p&gt;I am personally a big fan of &lt;a href="http://jruby.org/getting-started"&gt;GlassFish&lt;/a&gt; for Java/JVM deployments.
You can use something like Warbler to create a WAR file for deployment, but if
you're coming from the Ruby world, the following is much simpler:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S gem install glassfish
glassfish
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Add a Model&lt;/h2&gt;

&lt;p&gt;Here I start to get lazy. Bereft of ideas, and starting to think about needing
to cook, I decided to create a simple Recipe tracker. While introducing some of
the cooler (and defining) DataMapper features will have to wait until a future
article, this simple child-parent model should be immediately familiar to anyone
who's done basic web development.&lt;/p&gt;

&lt;p&gt;Create a file &lt;code&gt;ingredient.rb&lt;/code&gt; in &lt;code&gt;app/models&lt;/code&gt; with the following contents:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Ingredient&lt;/span&gt;
  &lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;DataMapper&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Resource&lt;/span&gt;

  &lt;span class="n"&gt;property&lt;/span&gt; &lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="no"&gt;Serial&lt;/span&gt;
  &lt;span class="n"&gt;property&lt;/span&gt; &lt;span class="ss"&gt;:name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;         &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:length&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:nullable&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;

  &lt;span class="n"&gt;belongs_to&lt;/span&gt; &lt;span class="ss"&gt;:recipe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:nullable&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;

&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;and a file &lt;code&gt;recipe.rb&lt;/code&gt; in &lt;code&gt;app/models&lt;/code&gt; with the following contents:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Recipe&lt;/span&gt;
  &lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;DataMapper&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Resource&lt;/span&gt;

  &lt;span class="n"&gt;property&lt;/span&gt; &lt;span class="ss"&gt;:id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="no"&gt;Serial&lt;/span&gt;
  &lt;span class="n"&gt;property&lt;/span&gt; &lt;span class="ss"&gt;:title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:length&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:nullable&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
  &lt;span class="n"&gt;property&lt;/span&gt; &lt;span class="ss"&gt;:instructions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;Text&lt;/span&gt;
  &lt;span class="n"&gt;property&lt;/span&gt; &lt;span class="ss"&gt;:cooking_mins&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Integer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:min&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:max&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;

  &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:ingredients&lt;/span&gt;

&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;If you chose SQLite3 as the relational database you wanted to use earlier, then
you don't need to change any database configuration. If you chose another
database, then open &lt;code&gt;config/database.yml&lt;/code&gt; and change appropriately. For
PostgreSQL, or Microsoft SQL Server configurations might look like the
following:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="yaml"&gt;&lt;span class="c1"&gt;# PostgreSQL&lt;/span&gt;
&lt;span class="l-Scalar-Plain"&gt;development&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="nl"&gt;&amp;amp;defaults&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;adapter&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;postgres&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;database&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;sample_development&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;username&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;postgres&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;password&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;host&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;localhost&lt;/span&gt;

&lt;span class="c1"&gt;# Microsoft SQL Server&lt;/span&gt;
&lt;span class="l-Scalar-Plain"&gt;development&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="nl"&gt;&amp;amp;defaults&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;adapter&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;sqlserver&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;database&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;sample_development;instance=SQLEXPRESS;&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;username&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;mswin&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;password&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;doze&lt;/span&gt;
  &lt;span class="l-Scalar-Plain"&gt;host&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;sqlserver.localnet&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Automigrate the database:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S rake db:automigrate
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And run the application with &lt;em&gt;one&lt;/em&gt; of the following commands:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S merb
glassfish
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Add a UI&lt;/h2&gt;

&lt;p&gt;Here I'm sorry to say we're going to cheat (yet again!). We're not actually
going to spend any time building a UI, but instead we'll rely on &lt;code&gt;merb-admin&lt;/code&gt;, a
project that automatically generates an admin front-end similar to &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;,
the Python web application framework.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S gem install builder
jruby -S gem install merb-admin -s http://gemcutter.org
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In your app, add the following dependency to config/dependencies.rb:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="n"&gt;dependency&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;merb-admin&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;0.6.6&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Add the following route to config/router.rb (just after &lt;code&gt;:merb_auth_slice_password&lt;/code&gt;):&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="ruby"&gt;&lt;span class="n"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:merb_auth_slice_password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:name_prefix&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:path_prefix&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:merb_admin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:path_prefix&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;admin&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Then, run the following rake task:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S rake slices:merb-admin:install
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Fire up your application, with &lt;em&gt;one&lt;/em&gt; of the following commands:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jruby -S merb
glassfish
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Visit http://localhost:4000/admin, or if you're running with glassfish,
http://localhost:3000/admin.&lt;/p&gt;

&lt;p&gt;You should have now have an application with a (very) simple interface for
adding recipes and ingredients.&lt;/p&gt;

&lt;div class="thumbnail"&gt;&lt;a href="http://skitch.com/alexcoles/nebyi/new-recipe-merbadmin"&gt;&lt;img src="http://img.skitch.com/20091118-nu1ewthus4nu1ncrbkcyau6jsb.preview.jpg" alt="New recipe | MerbAdmin" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: Lucida Grande, Trebuchet, sans-serif, Helvetica, Arial; font-size: 10px; color: #808080"&gt;Uploaded with &lt;a href="http://plasq.com/"&gt;plasq&lt;/a&gt;'s &lt;a href="http://skitch.com"&gt;Skitch&lt;/a&gt;!&lt;/span&gt;&lt;/div&gt;


&lt;p&gt;You can find the &lt;a href="http://github.com/myabc/recipes-sample-app"&gt;source code for this application on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That's it for now! Please leave a comment and let me know what (if anything) was
useful, so that I can focus my efforts for future articles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE 1 Dec 2009&lt;/strong&gt;: Grammar, spelling fixes. Added note on Jeweler.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/EoFBBOxHmuw" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/code/2009/11/18/getting-started-with-datamapper-merb-on-jruby.html</feedburner:origLink></entry>
  
  <entry>
    <title>The Hazards of Google Image Search</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/AAUSr8nanl4/the-hazards-of-google-image-search.html" />
    <updated>2008-08-14T00:00:00-07:00</updated>
    <id>http://rebase.github.com/me/2008/08/14/the-hazards-of-google-image-search</id>
    <content type="html">&lt;p&gt;&lt;a href="http://news.bbc.co.uk/2/hi/uk_news/england/west_midlands/7560392.stm"&gt;http://news.bbc.co.uk/2/hi/uk_news/england/west_midlands/7560392.stm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Birmingham + skyline.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/AAUSr8nanl4" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/08/14/the-hazards-of-google-image-search.html</feedburner:origLink></entry>
  
  <entry>
    <title>The Hazards of Online Translation</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/6XWKWTIs71o/the-hazards-of-online-translation.html" />
    <updated>2008-08-05T00:00:00-07:00</updated>
    <id>http://rebase.github.com/me/2008/08/05/the-hazards-of-online-translation</id>
    <content type="html">&lt;p&gt;&lt;a href="http://adweek.blogs.com/adfreak/2008/07/then-well-grab.html"&gt;http://adweek.blogs.com/adfreak/2008/07/then-well-grab.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have always been rather skeptical about online translation tools. This is a great illustration of what can go wrong for those who don't have any understanding at all of the target language.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/6XWKWTIs71o" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/08/05/the-hazards-of-online-translation.html</feedburner:origLink></entry>
  
  <entry>
    <title>A really simple way to integrate your Trac with GitHub</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/7atNF3OL5DQ/a-really-simple-way-to-integrate-your-trac-with-github.html" />
    <updated>2008-05-15T00:00:00-07:00</updated>
    <id>http://rebase.github.com/code/2008/05/15/a-really-simple-way-to-integrate-your-trac-with-github</id>
    <content type="html">&lt;p&gt;Thanks to GitHub's API, there are definite possibilities for &lt;a href="http://github.com/myabc/github-trac/tree/master"&gt;integrating Trac with GitHub&lt;/a&gt;. However, for right now the simplest way is to just provide a link. Thanks to customizable navigation introduced in Trac 0.11, this should now be really simple.&lt;/p&gt;

&lt;p&gt;If you're using the web Administration screen, click through to &lt;em&gt;Manage Plugins&lt;/em&gt; and from there, ensure trac.versioncontrol.web_ui.* modules are deselected, with the exception of the &lt;strong&gt;BrowserModule&lt;/strong&gt; ( trac.versioncontrol.web_ui.browser). You can also enable/disable the appropriate plugins by editing your trac.ini file.&lt;/p&gt;

&lt;p&gt;Then you'll need to remap the browser module link to GitHub. This time, this must be done by directly editing your trac.ini file. Open trac.ini in your favourite Editor and add the following section, if it does not already exist:&lt;/p&gt;

&lt;pre&gt;
[mainnav]
&lt;/pre&gt;


&lt;p&gt;and then the following line, changing the URL to match that of your GitHub project:&lt;/p&gt;

&lt;pre&gt;
browser.href = http://github.com/myabc/github-trac/tree/master
&lt;/pre&gt;


&lt;p&gt;And that should be it!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/7atNF3OL5DQ" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/code/2008/05/15/a-really-simple-way-to-integrate-your-trac-with-github.html</feedburner:origLink></entry>
  
  <entry>
    <title>The best Hillary impression I have seen</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/y277vGZRWuU/hillary-in-rehearsal.html" />
    <updated>2008-05-14T00:00:00-07:00</updated>
    <id>http://rebase.github.com/me/2008/05/14/hillary-in-rehearsal</id>
    <content type="html">&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/aRbBJi0jfdU&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/aRbBJi0jfdU&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;p&gt;The best Hillary impression I have seen.
Someone at Saturday Night Live needs to employ this woman.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/y277vGZRWuU" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/05/14/hillary-in-rehearsal.html</feedburner:origLink></entry>
  
  <entry>
    <title>Joining the bandwagon</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/PvVi3iTHsgA/joining-the-bandwagon.html" />
    <updated>2008-05-13T00:00:00-07:00</updated>
    <id>http://rebase.github.com/code/2008/05/13/joining-the-bandwagon</id>
    <content type="html">&lt;pre&gt;history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head&lt;/pre&gt;


&lt;pre&gt;
140 git
103 ls
73 cd
55 mate
26 sake
26 mv
23 rake
8 autotest
5 gem
4 sudo
&lt;/pre&gt;

&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/PvVi3iTHsgA" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/code/2008/05/13/joining-the-bandwagon.html</feedburner:origLink></entry>
  
  <entry>
    <title>A prime explanation of subprime</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/DmRnaWYyRX8/a-prime-explanation-of-subprime.html" />
    <updated>2008-05-04T00:00:00-07:00</updated>
    <id>http://rebase.github.com/me/2008/05/04/a-prime-explanation-of-subprime</id>
    <content type="html">&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: Video no longer available.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/DmRnaWYyRX8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/05/04/a-prime-explanation-of-subprime.html</feedburner:origLink></entry>
  
  <entry>
    <title>State of Flux</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/rSDT71lYhxI/state-of-flux.html" />
    <updated>2008-03-31T00:00:00-07:00</updated>
    <id>http://rebase.github.com/code/2008/03/31/state-of-flux</id>
    <content type="html">&lt;p&gt;This site is in a state of flux while I work on various design improvements.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/rSDT71lYhxI" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/code/2008/03/31/state-of-flux.html</feedburner:origLink></entry>
  
  <entry>
    <title>TheAtlantic.com | Andrew Sullivan</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/LriPZPL1_EI/theatlantic-com-andrew-sullivan.html" />
    <updated>2008-02-18T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2008/02/18/theatlantic-com-andrew-sullivan</id>
    <content type="html">&lt;p&gt;&lt;a href="http://andrewsullivan.theatlantic.com/"&gt;http://andrewsullivan.theatlantic.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Good source of commentary, with snippets and links on the Presidential Primaries. An Obama supporter.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/LriPZPL1_EI" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/02/18/theatlantic-com-andrew-sullivan.html</feedburner:origLink></entry>
  
  <entry>
    <title>moche</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/gY3s3VnJubg/moche.html" />
    <updated>2008-02-18T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2008/02/18/moche</id>
    <content type="html">&lt;p&gt;Yes, this site is rather ugly at the moment. That should change soon.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/gY3s3VnJubg" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/02/18/moche.html</feedburner:origLink></entry>
  
  <entry>
    <title>Keyword: Evil</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/Rsus6SSjnH4/keyword-evil.html" />
    <updated>2008-02-18T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2008/02/18/keyword-evil</id>
    <content type="html">&lt;p&gt;&lt;a href="http://harpers.org/media/slideshow/annot/2008-03/index.html"&gt;http://harpers.org/media/slideshow/annot/2008-03/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is an great feature in this month's Harper's Magazine on Google's Data Centre plans for a small community on the banks of the Columbia River in Oregon. I think its really easy to see technology as something invisible: after all, thats why Google searches, Gmail and YouTube are so popular.&lt;/p&gt;

&lt;p&gt;But this technology is not really invisible. It needs power. The brain power is more apparent: Google is actively expanding and a huge number of "star engineers" have joined its ranks. The less apparent, oft-neglected power is electricity.&lt;/p&gt;

&lt;p&gt;While it may be out-of-sight (and off-site) for most of us, its dangerous for us to let this important fact slip out-of-mind. The immense power that Google affords us relies on huge amounts of processing power, and in turn, huge amounts of electricity. The article is quite right to point out that Google has now become a heavy industry of the 21st century.&lt;/p&gt;

&lt;p&gt;While I don't know whether its more efficient, in terms of power consumption, for individuals, small business and communities to do things themselves (such as running email servers, etc.), or for everything to be consolidated into Google's huge farms of servers, I do know that it is important not to not consider the efficiency and environmental record of this new heavy industry.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/Rsus6SSjnH4" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/02/18/keyword-evil.html</feedburner:origLink></entry>
  
  <entry>
    <title>Just words?</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/mf5E-1_IFkk/just-words.html" />
    <updated>2008-02-18T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2008/02/18/just-words</id>
    <content type="html">&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/7ffwY74XbS4&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/7ffwY74XbS4&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/mf5E-1_IFkk" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/02/18/just-words.html</feedburner:origLink></entry>
  
  <entry>
    <title>Colours</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/eN1gfiNsNxQ/colours.html" />
    <updated>2008-02-18T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2008/02/18/colours</id>
    <content type="html">&lt;p&gt;This blog is currently undergoing transformation. Change colours.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/eN1gfiNsNxQ" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/02/18/colours.html</feedburner:origLink></entry>
  
  <entry>
    <title>Changes behind the scenes</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/JVjXGFI9c8A/changes-behind-the-scenes.html" />
    <updated>2008-02-18T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2008/02/18/changes-behind-the-scenes</id>
    <content type="html">&lt;p&gt;I do realise I spend more time blogging about blogging, than actually blogging.&lt;/p&gt;

&lt;p&gt;I spent a couple hours moving away from &lt;a href="http://wordpress.org/"&gt;WordPress&lt;/a&gt;,
which was the blogging software this site has used since its inception a couple
years ago. I moved to &lt;a href="http://chyrp.net/"&gt;Chyrp&lt;/a&gt;, a new lightweight blogging
engine written in PHP. Admittedly, some of this is the thrill of the new. I do
like to be current. And some of this was procrastination from other tasks at
hand.&lt;/p&gt;

&lt;p&gt;I had become frustrated with WordPress. That's not to say its not very powerful,
nor that I wouldn't still recommend it to clients in certain instances. But for
me, it doesn't work. Sitting down and using the supplied administrative
application as a writing tool has never worked for me. It doesn't "mesh" with my
brain (for want of a better word). As a solution, I've tried various external
clients (&lt;a href="/me/2006/01/21/quick-test-message.html"&gt;ecto&lt;/a&gt;,
&lt;a href="/me/2005/12/29/using-flock.html"&gt;Flock&lt;/a&gt;), but they have never really worked for
me either.&lt;/p&gt;

&lt;p&gt;Much the same as that bête noire of writers out there, Microsoft Word. If
there could be a prescription for drawing a blank, de-voiding the mind of all
ideas and creativity, then opening a Microsoft Word window would have to be it.&lt;/p&gt;

&lt;p&gt;Writing tools are important. I am not a "writer" by any stretch of the
imagination, but I do want to get back into the action of writing (see also
&lt;a href="/me/2008/01/25/new-year-new-start-and-finish.html"&gt;this post&lt;/a&gt;)-- perhaps in
pursuit of some generalised catharsis.&lt;/p&gt;

&lt;p&gt;For me, the fewer distractions the better. The next best thing to a piece of
paper (or even better, a Clairefontaine notebook), is a simple text editor (such
as &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt; using with a fixed-width typeface.&lt;/p&gt;

&lt;p&gt;Don't get me wrong. I don't necessarily long the days of typewritten documents,
or everything in Courrier New. But the WYSIWYG (what-you-see-is-what-you-get) of
Word, other word-processors, and even that pseudo-wordprocessor toolbar that you
get in GMail these days, does distract.&lt;/p&gt;

&lt;p&gt;I loved Desktop Publishing. I love using Illustrator. I am fascinated by good
design. However, I would never begin to start composing anything of any
considerable length directly into those programs. In all but a few cases
(perhaps composing visual poetry, which alas, I have never tried), it would be
an immense distraction. My mind starts to think in terms of bold, italic, size
and kerning. My mind loses its focus on the words themselves.&lt;/p&gt;

&lt;p&gt;So back to blogging. So far (admittedly its only been a handful of posts), Chyrp
seems to work better for me. Chyrp follows the "tumblelog" way of doing things,
which for the uninitiated (as I was, about 3 hours ago), is a short form style
of blogging, with plenty of links, video and stuff like that. Great for the
easily distracted, like me. Although, with any luck, there will be some longer
prose here too.&lt;/p&gt;

&lt;p&gt;I set it up to work with
&lt;a href="http://daringfireball.net/projects/markdown"&gt;Markdown&lt;/a&gt;, a formatting syntax
that is pretty easy and isn't verbose like adding HTML itself. If a particular
word really warrants being &lt;strong&gt;emboldened&lt;/strong&gt; or &lt;em&gt;italicised&lt;/em&gt; then I can do so. If I
really want.&lt;/p&gt;

&lt;p&gt;The slogan of WordPress is "code is poetry". I am not sure what genre of poetry
they are writing, but to me, reading there lines of code is like reading
&lt;a href="http://en.wikipedia.org/wiki/Dada"&gt;Dadist poetry&lt;/a&gt;. There are a mixture of coding styles
(object-oriented, procedural) and lots of hacks to get account for the fact that
PHP, the language its written in, can be rough around the edges (I'd be happy to
justify that, if any one really cares). On the outside, it looks elegant, but
navigating its innards is difficult. There are a tonne of plugins and themes
available for download, but many of those I've tried, I have found to be poorly
designed. In some sense, it suffers from its own success, in that popularity has
brought a tonne of developers who want to use the software. But there is no
quality control, and as a writing tool, it hasn't worked out.&lt;/p&gt;

&lt;p&gt;Some of my problems were also design related. Chyrp should be easier for me to
customise, so look out for some design changes over the next few days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Chyrp has, by no means, been a panacea. In fact, I've taken several
months just to fix what needs fixing. A new version is out, and I hope that some
of the problems I was experiencing have finally been rectified.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/JVjXGFI9c8A" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/02/18/changes-behind-the-scenes.html</feedburner:origLink></entry>
  
  <entry>
    <title>Americans Away from Home</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/XBvISkgq404/americans-away-from-home.html" />
    <updated>2008-02-18T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2008/02/18/americans-away-from-home</id>
    <content type="html">&lt;p&gt;&lt;a href="http://www.americans-away-from-home.com/"&gt;http://www.americans-away-from-home.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A website written by an American expat following the course of the U.S. Presidential Primaries.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/XBvISkgq404" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/02/18/americans-away-from-home.html</feedburner:origLink></entry>
  
  <entry>
    <title>Battle of the Bands</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/LlnrXJvLuNU/battle-of-the-bands.html" />
    <updated>2008-02-15T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2008/02/15/battle-of-the-bands</id>
    <content type="html">&lt;p&gt;Do we have a winner?&lt;/p&gt;

&lt;p&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5FvyGydc8no&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/5FvyGydc8no&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/LlnrXJvLuNU" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/02/15/battle-of-the-bands.html</feedburner:origLink></entry>
  
  <entry>
    <title>Life on Mars</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/1DL2DGpL0HQ/life-on-mars.html" />
    <updated>2008-02-14T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2008/02/14/life-on-mars</id>
    <content type="html">&lt;p&gt;I am using &amp;lt;a href="http://www.red-sweater.com/marsedit/"&amp;gt;MarsEdit&amp;lt;/a&amp;gt;. Perhaps this will make it easier for me to publish when I feel that sudden writing impulse.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/1DL2DGpL0HQ" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/02/14/life-on-mars.html</feedburner:origLink></entry>
  
  <entry>
    <title>Bienvenue et Welcome</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/u2SO1pxrZ7U/bienvenue-et-welcome.html" />
    <updated>2008-02-14T00:00:00-08:00</updated>
    <id>http://rebase.github.com/code/2008/02/14/bienvenue-et-welcome</id>
    <content type="html">&lt;p&gt;Welcome to my new Portfolio site - mon book en ligne. I have been meaning to get this site up for quite some time, but I resolved to get something up, so here it is. I'll be working on it bit-by-bit, but there have been a few false starts.&lt;/p&gt;

&lt;p&gt;An original version of this message appeared on a WordPress-powered blog a few weeks ago, but I have since moved over the the &lt;a href="http://roller.apache.org/"&gt;Apache Roller&lt;/a&gt; weblog software. I'll explain why I did sometime soon.&lt;/p&gt;

&lt;p&gt;This is not the extent of this site. There is an awesome Ruby-on-Rails-powered application that I'll be launching soon to show off the work I've done over the last few years (at least that which isn't under NDA), but for now please enjoy this blog. I'll use the blog space to detail some of the projects I'm working on (including some open-source projects), as well as to share various bits of information I've learned (or gleaned) that have helped me to get up and running developing websites and applications.&lt;/p&gt;

&lt;p&gt;Of course, I could have mixed this all in with my &lt;del&gt;personal blog&lt;/del&gt;
(update: content now merged back into alexbcoles.com). Perhaps I'm being a
little self-indulgent by having two blogs (neither of which are updated quite as
often as they should be), but I believe the audiences are different. The innards
of PHP, Java or Ruby configuration don't (and shouldn't) interest everyone.&lt;/p&gt;

&lt;p&gt;Here it is. Thanks for reading.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/u2SO1pxrZ7U" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/code/2008/02/14/bienvenue-et-welcome.html</feedburner:origLink></entry>
  
  <entry>
    <title>Interlude</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/ofs9iyqM_FI/interlude.html" />
    <updated>2008-02-03T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2008/02/03/interlude</id>
    <content type="html">&lt;p&gt;&lt;object width="425" height="373"&gt;&lt;param name="movie" value="http://www.youtube.com/v/2fZHou18Cdk&amp;rel=1&amp;border=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/2fZHou18Cdk&amp;rel=1&amp;border=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="373"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/ofs9iyqM_FI" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/02/03/interlude.html</feedburner:origLink></entry>
  
  <entry>
    <title>New Year, New Start and Finish</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/TaOeiAvtRb0/new-year-new-start-and-finish.html" />
    <updated>2008-01-25T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2008/01/25/new-year-new-start-and-finish</id>
    <content type="html">&lt;p&gt;I have a constant stream of ideas, but I do have to admit to finding it hard to finish things. My lack of content on this blog is rather indicative of some of the difficulties, not with picking up the (metaphorical) pen, but with laying it to rest, adding a full stop, and closing the paragraph.&lt;/p&gt;

&lt;p&gt;While I've liked the idea of having a blog, its not something I have really put to use. A blog, it seems, is something is pretty much expected for those making their living in the technology industry. In my case though I am told that this blog is bordering on 'pitiful' for its lack of content (the words, nonetheless, of one of my closest friends). Instead it has become more of a 'metablog' with me blogging on blogging, and offering my excuses for not writing more often.&lt;/p&gt;

&lt;p&gt;Up until a few weeks ago my WordPress 'Draft' folder was littered with the remnants of half-finished writings that had been created over the last 2 years or so, but never finished. In a fit of desire for some closure, I went through and deleted the entirety of these half-baked works... (Parenthetically, somehow my observations on the student politics, dirty student politics, and minor scandal, no longer seem relevant to me.)&lt;/p&gt;

&lt;p&gt;I am still suffering from the same condition that I first encountered in my early teens. I start the first paragraph with such zeal and optimism. Ideas pouring over. Then my ambitions get the better of me, and the work becomes unsustainable. I remember my creative writing in secondary school would show this. Beginning. Middle. No End. I was once so flippant as to add 'to be continued' on an end of term essay, which managed to earn me not only a letter mark far down the Greek alphabet, but an equally flippant response from my teacher. Well, this year I must be better.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/TaOeiAvtRb0" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2008/01/25/new-year-new-start-and-finish.html</feedburner:origLink></entry>
  
  <entry>
    <title>Update 2</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/yWQFQwJE8oU/update-2.html" />
    <updated>2007-10-29T00:00:00-07:00</updated>
    <id>http://rebase.github.com/me/2007/10/29/update-2</id>
    <content type="html">&lt;p&gt;I am in Paris, France. More soon.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/yWQFQwJE8oU" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2007/10/29/update-2.html</feedburner:origLink></entry>
  
  <entry>
    <title>Additional Blog</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/wpAr1Kw4SyA/additional-blog.html" />
    <updated>2007-10-29T00:00:00-07:00</updated>
    <id>http://rebase.github.com/me/2007/10/29/additional-blog</id>
    <content type="html">&lt;p&gt;I have set up a separate site and blog for work-related interests. Find it at
&lt;del&gt;alexcolesportfolio.com/blog&lt;/del&gt; (update: content now merged back into
alexbcoles.com).&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/wpAr1Kw4SyA" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2007/10/29/additional-blog.html</feedburner:origLink></entry>
  
  <entry>
    <title>Update</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/jyLUV-QYPlk/update.html" />
    <updated>2007-03-10T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2007/03/10/update</id>
    <content type="html">&lt;p&gt;Once in a very occasional while a visitor stumbles across this excuse-for-a-blog. And when they do, they feel inclined to chastise me for lack of content. So, I thought I'd let any occassional visitors know what I am up to.&lt;/p&gt;

&lt;p&gt;After completing university last year, I came over to the US for the summer. After completing most of a couple freelance jobs, I stopped in New York. I hadn't planned to stay, but somehow I ended up doing so... after several weeks of trying half-heartedly to look for work, then a couple weeks of serious "I'm broke I better get a job" looking, three jobs came along at once. I took a job with a technology startup company, which I thought would be the most interesting - and most challenging.&lt;/p&gt;

&lt;p&gt;I've now been in New York coming up to six months, and in my current job for 3½ months. There are plenty of things I miss about being in London, but its great to have the challenge of being in a new place.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/jyLUV-QYPlk" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2007/03/10/update.html</feedburner:origLink></entry>
  
  <entry>
    <title>Blog back up and running...</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/qf8HpB0raN0/blog-back-up-and-running.html" />
    <updated>2007-01-18T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2007/01/18/blog-back-up-and-running</id>
    <content type="html">&lt;p&gt;Somehow I managed to delete the blog, and its postings. But it is up again, once more. I lost my last posting, but it wasn't anything prolific (unlike most of what I have to say ;) )&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/qf8HpB0raN0" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2007/01/18/blog-back-up-and-running.html</feedburner:origLink></entry>
  
  <entry>
    <title>There is stuff to come...</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/Y_jtw9s_Obg/there-is-stuff-to-come.html" />
    <updated>2006-03-27T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2006/03/27/there-is-stuff-to-come</id>
    <content type="html">&lt;p&gt;This site is being worked on!&lt;/p&gt;

&lt;p&gt;My project over the holidays is to get my Portfolio online. I looked around on the web and there isn't any software out there to handle creating a portfolio, so I'm working on creating something from scratch.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/Y_jtw9s_Obg" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2006/03/27/there-is-stuff-to-come.html</feedburner:origLink></entry>
  
  <entry>
    <title>Writing</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/CauMyEWexM0/writing.html" />
    <updated>2006-03-13T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2006/03/13/writing</id>
    <content type="html">&lt;p&gt;I received a friendly reminder to update my blog the other day.&lt;/p&gt;

&lt;p&gt;I still haven't got the hang of it. It's partly because I don't really think I lead an eventful enough life to talk about it in great detail, and it's partly that I am not sure a blog deserves a great deal of my time. I could (and may still) start commenting on issues of "current importance", but that would be very time consuming.&lt;/p&gt;

&lt;p&gt;I am in the midst of writing essays. I have 8 or 9 essays to write in the next 6 weeks, and then that will be it. Unless I prevaricate and do a Master's, never again will I have to write an essay.&lt;/p&gt;

&lt;p&gt;But I digress.. I have the same problem with writing essays as I do with writing blogs. The first few postings (which were really for test purposes) were an exception. I seek perfection. I don't want to output more dross, prosaic banalities. If I'm going to have a blog I feel I should write something gripping.&lt;/p&gt;

&lt;p&gt;In the window in which I am typing there are five draft articles listed. They're all unfinished, because I don't yet think they're suitable for general consumption.&lt;/p&gt;

&lt;p&gt;On my desk there are three draft essays. They're also also unfinished, because I don't yet think they offer any originality of thought.&lt;/p&gt;

&lt;p&gt;I would say it was Writer's Block, but then my levels of pretension would soar. I am, most likely, not a Writer.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/CauMyEWexM0" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2006/03/13/writing.html</feedburner:origLink></entry>
  
  <entry>
    <title>Quick test message</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/Qnw8tobDXVU/quick-test-message.html" />
    <updated>2006-01-21T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2006/01/21/quick-test-message</id>
    <content type="html">&lt;p&gt;Quick test message to test &lt;a href="http://ecto.kung-foo.tv/"&gt;ecto&lt;/a&gt;, the new blog editing software I am trying out.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/Qnw8tobDXVU" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2006/01/21/quick-test-message.html</feedburner:origLink></entry>
  
  <entry>
    <title>Invites for Windows Live Messenger</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/68tnBP40KAs/invites-for-windows-live-messenger.html" />
    <updated>2006-01-21T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2006/01/21/invites-for-windows-live-messenger</id>
    <content type="html">&lt;p&gt;Microsoft have rebranded the next version of MSN Messenger as Windows Live Messenger. Information is at &lt;a href="http://ideas.live.com/programpage.aspx?versionId=0eccd94b-eb48-497c-8e60-c6313f7ebb73"&gt;Windows Live Ideas&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Much like with the birth of &lt;a href="http://gmail.google.com/"&gt;Google's GMail&lt;/a&gt;, download is currently by invitation only. I have a few invitations to spare, so if you're interested, leave a message on this blog.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/68tnBP40KAs" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2006/01/21/invites-for-windows-live-messenger.html</feedburner:origLink></entry>
  
  <entry>
    <title>Using Flock</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/b1M81aCELXg/using-flock.html" />
    <updated>2005-12-29T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2005/12/29/using-flock</id>
    <content type="html">&lt;p&gt;For the first two posts on this blog I used the WordPress editor through my browser. Despite following certain Internet trends closely, I am not at all au fait with blogging. I did remember though that there were some external editors available. Trying them out might encourage me to blog more often.&lt;/p&gt;

&lt;p&gt;A couple months ago I downloaded &lt;a href="http://www.flock.com"&gt;Flock&lt;/a&gt;. I had read a couple &lt;a href="http://news.bbc.co.uk/1/hi/technology/4406204.stm"&gt;articles&lt;/a&gt; about it, and I wanted to see what all the hype was about. My first impression was that I liked the look and feel a lot, but because I didn't feel any need for the 'value added' features (which is the raison d'être of this browser) I haven't opened it since my first install.&lt;/p&gt;

&lt;p&gt;After doing a search to look for external blog editors, I recalled that Flock has an editing feature. Its this editing feature that I am using at the moment to write this blog entry. I don't really know what a blog editor &lt;em&gt;should&lt;/em&gt; look like though, so I'd welcome some recommendations from the four or five of you that currently read my blog! It doesn't have a spell checker (although that doesn't necessarily bother me that much). Forgive the 'woolly' terms, but it does feel 'snappy' and 'comfortable' as a writing tool. That's more than I can say about the second most used application on my Mac desktop (Word)!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/b1M81aCELXg" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2005/12/29/using-flock.html</feedburner:origLink></entry>
  
  <entry>
    <title>Where in the World?</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/JQxgfKzmIIw/where-in-the-world.html" />
    <updated>2005-12-08T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2005/12/08/where-in-the-world</id>
    <content type="html">&lt;p&gt;I'm always on the look out for ways to waste time online. KLM make up for their mediocre in-flight service by providing a wonderful public service that plots where you've been in the world. Use to boast to your friends how well travelled you are!&lt;/p&gt;

&lt;p&gt;I suppose this also helps me prioritise where I want to go next. For various reasons I spend most of my time between London and the States, but I really want to spend more time in S. America. Brazil and Argentina have to be top of my list. I wish I had the money, but even more, I wish I had the time!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: The map link is broken, and thus, removed.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/JQxgfKzmIIw" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2005/12/08/where-in-the-world.html</feedburner:origLink></entry>
  
  <entry>
    <title>First Posting</title>
    <link href="http://feeds.alexbcoles.com/~r/alexbcoles/~3/Kd5p2OY2FDw/first-posting.html" />
    <updated>2005-12-08T00:00:00-08:00</updated>
    <id>http://rebase.github.com/me/2005/12/08/first-posting</id>
    <content type="html">&lt;p&gt;After various failed attempts at blogging (including two when I was a Sabbatical Officer at UCL Union), I'll now try again. I am not sure I'll say too much about myself, as I don't really think I'm that interesting! But I'll link to things that are interesting when I find them. Blogging is another great distraction in life... something that'll lead me down the road to a third-class degree.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/alexbcoles/~4/Kd5p2OY2FDw" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://alexbcoles.com/me/2005/12/08/first-posting.html</feedburner:origLink></entry>
  

</feed>

