<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Alex's Adventures on the Infobahn - development</title><link href="https://www.bennee.com/~alex/" rel="alternate"></link><link href="https://www.bennee.com/~alex/blog/tag/development/feed" rel="self"></link><id>https://www.bennee.com/~alex/</id><updated>2023-10-22T12:22:00+01:00</updated><subtitle>the wanderings of a supposed digital native</subtitle><entry><title>Comparing Forge-Based and Email-Based Workflow for Open Source Projects</title><link href="https://www.bennee.com/~alex/blog/2023/10/22/comparing-forge-based-and-email-based-workflow-for-open-source-projects/" rel="alternate"></link><published>2023-10-22T12:22:00+01:00</published><updated>2023-10-22T12:22:00+01:00</updated><author><name>chatgpt</name></author><id>tag:www.bennee.com,2023-10-22:/~alex/blog/2023/10/22/comparing-forge-based-and-email-based-workflow-for-open-source-projects/</id><summary type="html">&lt;p&gt;Comparing Forge-Based and Email-Based Workflow for Open Source Projects&lt;/p&gt;</summary><content type="html">&lt;p&gt;In the open source technology universe, how teams coordinate,
collaborate and contribute is determined by the workflow they opt for.
At a high level, workflows can fall into one of two camps: Forge-based
or Email-based workflows. Forge-based workflows gained popularity with
platforms such as GitHub and GitLab, while Email-based workflows have
been a stalwart mechanism for open source software development with
mailing list platforms like GNU Mailman and SourceHut.&lt;/p&gt;
&lt;p&gt;In this post, we will look at the benefits and drawbacks of the
various approaches, hopefully lending insight to what will work best
for your project.&lt;/p&gt;
&lt;h2&gt;Forge-Based Workflow&lt;/h2&gt;
&lt;p&gt;Forge-based workflows have revolutionised open source software
development. Various advantages have made it an accessible choice for
many, including:&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;1. User-Friendly&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Forge-based platforms such as GitHub or GitLab feature a friendly GUI
and offer excellent documentation, making it super easy for beginners
to contribute to open source projects without needing an in-depth
understanding of git and email tools.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;2. Centralised and Organised&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;These platforms provide central repositories that make project
management streamlined. Access controls, issue tracking, continuous
integration, and other tools all exist in one place.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;3. Collaborative Environment&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The pull-request model common to forge platforms encourages
collaborative code review, making it an excellent tool for open-source
projects where code quality is a priority.&lt;/p&gt;
&lt;p&gt;However, there's a flip side to this coin:&lt;/p&gt;
&lt;h4&gt;Cons: Risk of Vendor Lock-in&lt;/h4&gt;
&lt;p&gt;Choosing a specific forge platform means accepting their choices of
features, tools, standard practices, and policies which subtly enforce
vendor lock-in. For most open source projects this also means relying
on the forge supporting projects with cost free access to features and
CI time.&lt;/p&gt;
&lt;h2&gt;Email-Based Workflow&lt;/h2&gt;
&lt;p&gt;Despite being considered 'old school', email-based workflows still
have merit in today's software development world. They offer:&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;1. Decentralized and Flexible&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;In sharp contrast to forge-based workflows, email workflows are
inherently decentralized. This approach offers more flexibility for
contributors and maintainers alike, as they are not bound to tools
offered by a single platform.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;2. Line-by-Line Review and Inline Feedback&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Email-based workflows stand out when it comes to the review process.
The nature of emails allows for contributors and reviewers to break
down commits line-by-line. This allows for more granular attention to
detail, leading to clearer communication about specific code changes.
Additionally, the threading mechanism of emails allows for inline
commentary during reviews, making it easier for contributors to
respond and iterate on feedback. This approach can encourage deeper
understanding and discussion around code changes, leading to
well-reviewed and robust code contributions.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;3. Enhances git Understanding&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Contributors working with email-based workflows generally have a
better understanding of git because it requires more hands-on actions
when sharing code.&lt;/p&gt;
&lt;p&gt;However, they too have potential drawbacks.&lt;/p&gt;
&lt;h4&gt;Cons: Less Beginner-Friendly&lt;/h4&gt;
&lt;p&gt;Email-based workflows requires a steeper learning curve and are less
friendly for collaborative code reviewing, making it challenging for
new contributors to a project.&lt;/p&gt;
&lt;h1&gt;Adapting Open Source Projects: Email to Forge Workflow Transitions&lt;/h1&gt;
&lt;p&gt;Transitioning from an email-based workflow to a forge-based one should
be a meticulously planned process that respects the existing
community's culture and comfort. It's pivotal to keep this move as an
evolution rather than an abrupt change.&lt;/p&gt;
&lt;p&gt;Initial steps in such transitions can include moving non-code elements
to the forge platform. Functions such as issue tracking,
documentation, and discussions could be the first set of activities
transferred to the forge platform. This strategy allows the
contributors to become proficient with the platform’s tools and
interfaces while keeping the code contributions intact on email lists.&lt;/p&gt;
&lt;p&gt;Your project might encompass several sub-systems, and it could be
worth considering this while transitioning. Instead of transforming
the entire project at once, one could start by moving individual
sub-systems to the new workflow. This incremental, phased approach can
prevent chaos and reduce the chances of any significant disruption in
the project's flow.&lt;/p&gt;
&lt;p&gt;Following the sub-system shifts, the project should then introduce
acceptance of pull requests or merge requests created by maintainers.
These PRs should still contain code that underwent email list reviews
in the previous workflow, ensuring the robustness of code quality.&lt;/p&gt;
&lt;p&gt;The final stage of the transition is welcoming all contributors to
submit merge requests through the forge platform. The key is to ensure
that contributors understand the reasons behind the shift towards a
complete merge request approach. They should be given clear guidelines
about how and why to use merge requests, making them comfortable with
the transition, and empowering them to take full advantage of the
tool's capabilities.&lt;/p&gt;
&lt;p&gt;In transition, it's necessary to alleviate concerns, clarify intents,
and provide resources to learn and help the contributors adjust to the
new workflow. Both email and forge-based workflows hold their place
and value in open-source. So, when transiting, the project needs and
the contributor adaptability should be the cornerstone of your
strategy. No two projects are the same, and neither are their paths in
adopting new workflow models.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Fuller disclosure: as
&lt;a href="https://chaos.social/@epilys/111280150345667417" title="comment spotting the chatgpt origins"&gt;@epilys&lt;/a&gt; noticed this post was generated via
chatgpt. I may have spent more time fiddling with my pelican settings
to make sure the author slug was properly shown than I did iterating
with GPT4 on the article. It has had some light copy-editing since to
clean up some copy and paste errors between iterations and some of the
more artificial phrasing it used)&lt;/em&gt;&lt;/p&gt;</content><category term="geek"></category><category term="email"></category><category term="workflow"></category><category term="git"></category><category term="gitlab"></category><category term="github"></category><category term="floss"></category><category term="development"></category><category term="chatgpt"></category></entry><entry><title>Almost there</title><link href="https://www.bennee.com/~alex/blog/2010/11/19/almost-there/" rel="alternate"></link><published>2010-11-19T22:48:00+00:00</published><updated>2010-11-19T22:48:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2010-11-19:/~alex/blog/2010/11/19/almost-there/</id><summary type="html">&lt;p&gt;I thought I might just mention the current state of the development for &lt;a class="reference external" href="https://github.com/stsquad/emacs_chrome"&gt;Edit with Emacs&lt;/a&gt;. A number of useful contributions have come in but I want to be able the &amp;quot;incremental edit&amp;quot; feature in the elisp edit server. I had a go but got stuck (marvel at &lt;a class="reference external" href="https://github.com/stsquad/emacs_chrome/commits/iterative_edit_expr/"&gt;hack in …&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;I thought I might just mention the current state of the development for &lt;a class="reference external" href="https://github.com/stsquad/emacs_chrome"&gt;Edit with Emacs&lt;/a&gt;. A number of useful contributions have come in but I want to be able the &amp;quot;incremental edit&amp;quot; feature in the elisp edit server. I had a go but got stuck (marvel at &lt;a class="reference external" href="https://github.com/stsquad/emacs_chrome/commits/iterative_edit_expr/"&gt;hack in progress&lt;/a&gt;). So if anyone fancies having a go be my guest ;-)&lt;/p&gt;
&lt;p&gt;The rest is as follows:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Ryszard Szopa (1):
      Allow the server to send correct Unicode to Chrome.

gfxmonk (4):
      trigger a DOM change() event when textarea content has changed
      clarify that the shortcut key is Enter, not &amp;quot;E&amp;quot;
      only re-request edit when &amp;quot;x-open&amp;quot; header is &amp;quot;true&amp;quot;, not merely present
      Made indentation consistent across all source files
&lt;/pre&gt;
</content><category term="geek"></category><category term="development"></category><category term="edit with emacs"></category><category term="emacs"></category><category term="help"></category></entry><entry><title>Edit with Emacs v1.8</title><link href="https://www.bennee.com/~alex/blog/2010/08/19/edit-with-emacs-v1-8/" rel="alternate"></link><published>2010-08-19T11:10:00+01:00</published><updated>2010-08-19T11:10:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2010-08-19:/~alex/blog/2010/08/19/edit-with-emacs-v1-8/</id><summary type="html">&lt;p&gt;After a relatively quiet period a number of patches have flowed my way so I thought it was worth pushing out a new version. Perhaps the most &amp;quot;important&amp;quot; feature is the edit box flashing and fading from yellow after being updated (like &lt;a class="reference external" href="http://trac.gerf.org/itsalltext"&gt;It's All Text&lt;/a&gt;). It wasn't that hard to …&lt;/p&gt;</summary><content type="html">&lt;p&gt;After a relatively quiet period a number of patches have flowed my way so I thought it was worth pushing out a new version. Perhaps the most &amp;quot;important&amp;quot; feature is the edit box flashing and fading from yellow after being updated (like &lt;a class="reference external" href="http://trac.gerf.org/itsalltext"&gt;It's All Text&lt;/a&gt;). It wasn't that hard to do given &lt;a class="reference external" href="http://jquery.com/"&gt;jQuery&lt;/a&gt; and the &lt;a class="reference external" href="http://plugins.jquery.com/project/color"&gt;colour animation plugin&lt;/a&gt; do all the heavy lifting.&lt;/p&gt;
&lt;p&gt;We've added a new hook to the edit-server for pre-edit customisation. If anyone has some nice examples of using the various hooks it would great if you could add examples at the &lt;a class="reference external" href="http://www.emacswiki.org/emacs/Edit_with_Emacs"&gt;emacs wiki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As ever the extension can be found at the &lt;a class="reference external" href="https://chrome.google.com/extensions/detail/ljobjlafonikaiipfkggjbhkghgicgoh"&gt;Chrome Extensions site&lt;/a&gt;. Development versions are hosted at &lt;a class="reference external" href="http://github.com/stsquad/emacs_chrome"&gt;github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Full Change Log&lt;/p&gt;
&lt;p&gt;v1.8&lt;/p&gt;
&lt;p&gt;Extension&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;* Added option to enable/disable visual edit boxes&lt;/div&gt;
&lt;div class="line"&gt;* Improved feedback as editable elements come in and out of focus&lt;/div&gt;
&lt;div class="line"&gt;* Updated text box will now fade from yellow after an update&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;edit-server.el&lt;/p&gt;
&lt;p&gt;* Added edit-server-start-hook for additional customisation when edit starts&lt;/p&gt;
</content><category term="geek"></category><category term="chrome"></category><category term="chromium"></category><category term="development"></category><category term="elisp"></category><category term="emacs"></category><category term="extension"></category><category term="javascript"></category></entry><entry><title>Thoughts on Java</title><link href="https://www.bennee.com/~alex/blog/2010/02/12/thoughts-on-java/" rel="alternate"></link><published>2010-02-12T11:18:00+00:00</published><updated>2010-02-12T11:18:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2010-02-12:/~alex/blog/2010/02/12/thoughts-on-java/</id><summary type="html">&lt;p&gt;I've been spending the last week hacking around in Java. One of the components of the product I develop is the open source &lt;a class="reference external" href="http://www.opennms.org/wiki/Main_Page"&gt;OpenNMS&lt;/a&gt;. As I've mentioned before it's been lightly modified by myself to blend in better with our code mainly in the JSP department for it's web interface …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I've been spending the last week hacking around in Java. One of the components of the product I develop is the open source &lt;a class="reference external" href="http://www.opennms.org/wiki/Main_Page"&gt;OpenNMS&lt;/a&gt;. As I've mentioned before it's been lightly modified by myself to blend in better with our code mainly in the JSP department for it's web interface. Last week I discovered I needed to make a slightly deeper change to the code to export some more data to it's scripting interface.&lt;/p&gt;
&lt;p&gt;While I was exploring the code base and scratching my head at some of the exceptions being thrown I thought I'd have yet another go at making my Java development environment a little more integrated than binding the build script to &amp;quot;C-c c&amp;quot;.&lt;/p&gt;
&lt;p&gt;So far I have a couple of observations about Java code. The first is that it never seems to do very much. As you navigate the code base you tend to find a lot of simple skeleton classes, usually working as simple adaptors between one framework and the next. Thanks to Java's strong support for &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Generic_programming"&gt;generics&lt;/a&gt; and &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Interface_(Java)"&gt;interfaces&lt;/a&gt; you often find yourself looking at a class wondering what else it might do. None of this is helped by Java's standard/deep/directory/naming/strategy/of/doom. My usual tools of a decent programmers editor and grep start to show their limitations. Java is a language that is designed to be serviced by a full &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Integrated_development_environment"&gt;IDE&lt;/a&gt; to help you make sense of the whole system.&lt;/p&gt;
&lt;p&gt;Having previously tried and failed to get &lt;a class="reference external" href="http://jdee.sourceforge.net/"&gt;JDEE&lt;/a&gt; working I thought I would capitulate and try &lt;a class="reference external" href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;. I blithely thought that given the fact it's the standard Java developers tool with a long development history it would Just Work (tm). I was to be sorely disappointed.&lt;/p&gt;
&lt;p&gt;I tried several different versions on both my home Gentoo machine as well as various PPA based versions on my work Ubuntu setup. A lot of times it failed to start up due to some Mozilla dependency issues and when I did finally get it started I couldn't get any of the plugins to install. The entire Eclipse stack is designed around the concept of plugins and it seems every Java framework comes with it's own additional plugin for Eclipse. Without the plugins I wasn't able to get a working build or any sort of source level debugging. Eventually I had to concede defeat and bin the IDE approach and return to some tedious grep work and piece together the structure of the software by hand so I could finally crank out what in the end was a &lt;a class="reference external" href="http://marc.info/?l=opennms-devel&amp;amp;m=126582776211008&amp;amp;w=2"&gt;fairly simple patch&lt;/a&gt;. I doubt I shall return to Eclipse.&lt;/p&gt;
&lt;p&gt;I did have a brief tinker with JDEE which at least installed better from it's SVN repo (needing a one line patch). However the documentation is a little sparse on how to import an existing large project into it's view of the world. Annoyingly potentially useful links like the FAQ referenced on the &lt;a class="reference external" href="http://jdee.sourceforge.net/"&gt;main site&lt;/a&gt; lead to &lt;a class="reference external" href="http://sunsite.auc.dk/fom/jde/cache/1.html"&gt;dead ends&lt;/a&gt;. I never got to the point of seeing if I had a working Java &lt;a class="reference external" href="http://www.emacswiki.org/emacs/GrandUnifiedDebugger"&gt;GUD&lt;/a&gt; integration. I hope to revisit JDEE in the future when I'm a little less pressed for time at work. It's hard to work up the enthusiasm for plumbing in support for a language you never intend to use for fun in your own time.&lt;/p&gt;
</content><category term="geek"></category><category term="development"></category><category term="eclipse"></category><category term="emacs"></category><category term="java"></category><category term="jdee"></category><category term="opennms"></category></entry><entry><title>Finding Open Source Android applications</title><link href="https://www.bennee.com/~alex/blog/2009/10/21/finding-open-source-android-applications/" rel="alternate"></link><published>2009-10-21T19:00:00+01:00</published><updated>2009-10-21T19:00:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-10-21:/~alex/blog/2009/10/21/finding-open-source-android-applications/</id><summary type="html">&lt;p&gt;I love my HTC Hero and growing number of applications that are available for it. However the marketplace really doesn't make clear the difference between free (as in beer) and free (as in freedom). For all sorts of reasons I'd like to be sure the code running on my new …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I love my HTC Hero and growing number of applications that are available for it. However the marketplace really doesn't make clear the difference between free (as in beer) and free (as in freedom). For all sorts of reasons I'd like to be sure the code running on my new favourite device is Open Source. I've been scratching my head about the best way to find a decent applications and had been throwing all sorts of queries at Google and generally getting lost in a sea of links. A lot were irrelevant as proprietary apps get mentioned on news sites with Open Source sections.&lt;/p&gt;
&lt;p&gt;Then I had a slight brainwave (you wondered what the burning smell was?). Seeing as the most important thing is having available source code I skipped the main Google index and used their excellent &lt;a class="reference external" href="http://www.google.com/codesearch?q=AndroidManifest.xml&amp;amp;hl=en&amp;amp;btnG=Search+Code"&gt;code search&lt;/a&gt;. As every Android application contains an XML file called &amp;quot;AndroidManifest.xml&amp;quot; every thing else is &lt;a class="reference external" href="http://www.google.com/codesearch?hl=en&amp;amp;lr=&amp;amp;q=AndroidManifest.xml+twitter&amp;amp;sbtn=Search"&gt;a process of refinement&lt;/a&gt;.&lt;/p&gt;
</content><category term="geek"></category><category term="android"></category><category term="development"></category><category term="htc hero"></category></entry><entry><title>Migrating to Wordpress?</title><link href="https://www.bennee.com/~alex/blog/2009/09/21/1298/" rel="alternate"></link><published>2009-09-21T17:39:00+01:00</published><updated>2009-09-21T17:39:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-09-21:/~alex/blog/2009/09/21/1298/</id><summary type="html">&lt;p&gt;Live Journal have been more than a little crap the last week or so. As many may know I actually host my blog on my own website but most people comment on the syndicated feed on Live Journal. I'm thinking of migrating my blog to the slightly more feature complete …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Live Journal have been more than a little crap the last week or so. As many may know I actually host my blog on my own website but most people comment on the syndicated feed on Live Journal. I'm thinking of migrating my blog to the slightly more feature complete &lt;a class="reference external" href="http://wordpress.org/"&gt;Wordpress&lt;/a&gt; and enabling comments on my own site (useful for posts that come in via &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Planet_(software)"&gt;Planet's&lt;/a&gt;). The question that leads on from that is if I should maintain the RSS feed for the benefit of Live Journal?&lt;/p&gt;
&lt;p&gt;Are the people reading just following their Friends Page or actually following RSS feeds of their friends? Would people still want to comment on LJ or would they be happy commenting directly on the web-site? I'm fairly certain I could get Wordpress working with LJ's OpenID so you wouldn't need *another* login.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>The hinterland...</title><link href="https://www.bennee.com/~alex/blog/2009/09/12/1293/" rel="alternate"></link><published>2009-09-12T11:28:00+01:00</published><updated>2009-09-12T11:28:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-09-12:/~alex/blog/2009/09/12/1293/</id><summary type="html">&lt;p&gt;..that is waiting for the broadband to turn-up. The first night in the house was nice although lacking in curtains so woke up early this morning. We have a mostly functional kitchen although no fridge yet. Fliss is building furniture upstairs. There are still a fair number of boxes to …&lt;/p&gt;</summary><content type="html">&lt;p&gt;..that is waiting for the broadband to turn-up. The first night in the house was nice although lacking in curtains so woke up early this morning. We have a mostly functional kitchen although no fridge yet. Fliss is building furniture upstairs. There are still a fair number of boxes to go, including in what is designated as the library.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Scripts from Scratch</title><link href="https://www.bennee.com/~alex/blog/2009/09/04/scripts-from-scratch/" rel="alternate"></link><published>2009-09-04T16:18:00+01:00</published><updated>2009-09-04T16:18:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-09-04:/~alex/blog/2009/09/04/scripts-from-scratch/</id><summary type="html">&lt;p&gt;I wrote my first &lt;a class="reference external" href="http://github.com/stsquad/dbgsym/tree/master"&gt;from scratch python script&lt;/a&gt;* today. It's not the first time I've touched the language having submitted a number of patches to &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Python_(programming_language)"&gt;python&lt;/a&gt; based programs as well as spell &lt;a class="reference external" href="http://github.com/stsquad/same-diff-colour-test/tree/four_colours"&gt;fairly hefty tweaking&lt;/a&gt; existing code. But this was one of those tasks I would have usually picked up …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I wrote my first &lt;a class="reference external" href="http://github.com/stsquad/dbgsym/tree/master"&gt;from scratch python script&lt;/a&gt;* today. It's not the first time I've touched the language having submitted a number of patches to &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Python_(programming_language)"&gt;python&lt;/a&gt; based programs as well as spell &lt;a class="reference external" href="http://github.com/stsquad/same-diff-colour-test/tree/four_colours"&gt;fairly hefty tweaking&lt;/a&gt; existing code. But this was one of those tasks I would have usually picked up &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Perl"&gt;perl&lt;/a&gt; to do. I've never been a big fan of perl as although it's fairly easy to knock stuff up it also encourages all sorts of bad habits in the lazy programmer**. This leads to all sorts of sub-optimal interactions later on when you come back to the code later on. Python code is by virtue much cleaner, as Chris put it: &amp;quot;you can go back and edit the code again later without getting a headache&amp;quot;. Next time I need a script from scratch I think I shall reach into the python toolbox again.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;* Not quite true, I did a GUI prototype last year. It wasn't really a script though.&lt;/div&gt;
&lt;div class="line"&gt;** What? All the best programmers are lazy, it's a positive trait&lt;/div&gt;
&lt;/div&gt;
</content><category term="geek"></category><category term="development"></category></entry><entry><title>Microsoft vs Google, who will win?</title><link href="https://www.bennee.com/~alex/blog/2009/07/08/1262/" rel="alternate"></link><published>2009-07-08T10:03:00+01:00</published><updated>2009-07-08T10:03:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-07-08:/~alex/blog/2009/07/08/1262/</id><summary type="html">&lt;p&gt;There was a slightly hyperbolic &lt;a class="reference external" href="http://news.bbc.co.uk/1/hi/technology/8139711.stm"&gt;BBC article&lt;/a&gt; describing Google's &lt;a class="reference external" href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html"&gt;Chrome OS&lt;/a&gt; announcement. Apart from the obvious significance of the two largest tech behemoths going head to head the BBC did wonder if it would spell the end of the push for Linux on the netbook platform. Of course they didn't …&lt;/p&gt;</summary><content type="html">&lt;p&gt;There was a slightly hyperbolic &lt;a class="reference external" href="http://news.bbc.co.uk/1/hi/technology/8139711.stm"&gt;BBC article&lt;/a&gt; describing Google's &lt;a class="reference external" href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html"&gt;Chrome OS&lt;/a&gt; announcement. Apart from the obvious significance of the two largest tech behemoths going head to head the BBC did wonder if it would spell the end of the push for Linux on the netbook platform. Of course they didn't actually read the blog post which describes the new Chrome OS architecture being essentially Linux* running a new windowing system designed to support the Chrome browser.&lt;/p&gt;
&lt;p&gt;Google's use of Linux as a base shouldn't be surprising. For starters their entire server farm (or is that the &amp;quot;Google Platform&amp;quot;) relies on Linux. They used Linux as the basis for their &lt;a class="reference external" href="http://www.android.com/"&gt;Android Mobile Phone OS&lt;/a&gt;. They employ a large number of prominent kernel hackers in the company. Google is very much a Linux company and mighty as they are I think they appreciate that re-writing a kernel is a little like re-inventing the wheel. There are areas that Linux is still a little immature in. It has yet to develop the definitive power management strategy that modern mobile hardware really needs. However Google's involvement can only accelerate work in these directions.&lt;/p&gt;
&lt;p&gt;There are some other things worth noting. The push for &amp;quot;Browser as the platform&amp;quot; and &amp;quot;The Cloud&amp;quot; is going to ask some serious questions of the Free Software movement. When you have the freedom to run entirely free (as in libre) software on you hardware it will mean nothing if all your data and applications are proprietary services in the network. There needs to be some serious thought given to the compatibility of Software as a Service with the ideals of computing freedom.&lt;/p&gt;
&lt;p&gt;*When I refer to Linux I of course refer to the &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Kernel_(computing)"&gt;kernel&lt;/a&gt;&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Cryptographic Hashes</title><link href="https://www.bennee.com/~alex/blog/2009/06/26/1255/" rel="alternate"></link><published>2009-06-26T09:12:00+01:00</published><updated>2009-06-26T09:12:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-06-26:/~alex/blog/2009/06/26/1255/</id><content type="html">&lt;p&gt;If your new to cryptographic hashes or simply want an intro that isn't overly heavy detailed maths then I can recommend &lt;a class="reference external" href="http://valerieaurora.org/monkey.html"&gt;The Code Monkey's Guide&lt;/a&gt; by kernel hacker Valerie Aurora.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>GStreamer and stdin</title><link href="https://www.bennee.com/~alex/blog/2009/06/16/1250/" rel="alternate"></link><published>2009-06-16T14:25:00+01:00</published><updated>2009-06-16T14:25:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-06-16:/~alex/blog/2009/06/16/1250/</id><summary type="html">&lt;p&gt;&lt;a class="reference external" href="http://en.wikipedia.org/wiki/GStreamer"&gt;GStreamer&lt;/a&gt; is the media framework used by the Gnome Desktop. For the most part it's working is hidden from users as media players setup up the processing pipelines required. However sometimes you just want to play something from the command line and that's where a lot of head scratching can …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a class="reference external" href="http://en.wikipedia.org/wiki/GStreamer"&gt;GStreamer&lt;/a&gt; is the media framework used by the Gnome Desktop. For the most part it's working is hidden from users as media players setup up the processing pipelines required. However sometimes you just want to play something from the command line and that's where a lot of head scratching can be involved as you try and work out the correct incantation. Thankfully the developers have tried to make command line invocations simple. The &amp;quot;playbin&amp;quot; option mostly does the right thing:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
gst-launch playbin uri=file:///home/alex/broken.ogg
&lt;/pre&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class="line"&gt;However while I was indulging a little nostalgia and playing with &lt;a class="reference external" href="http://sc68.atari.org/project.html"&gt;sc68&lt;/a&gt; I found myself wanting to use that other *nix convention of &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Pipeline_(Unix)"&gt;pipes&lt;/a&gt;. The sc68 player doesn't actually deal with playback but provides a raw audio stream that can be &amp;quot;piped&amp;quot; to an audio output. Unfortunately searching for &amp;quot;gstreamer pipes&amp;quot; on Google brings up a lot of overly technical discussions about GStreamer's multimedia processing pipeline which while undoubtedly powerful and flexible (and modelled after Unix pipes) doesn't actually help me with my problem. After some playing about with gst-inspect and &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Grep"&gt;grep&lt;/a&gt; I finally found something that looked promising, the &amp;quot;fdsrc&amp;quot; element. The &lt;em&gt;fd&lt;/em&gt; refers to a &amp;quot;file descriptor&amp;quot; and it's relevance to pipes would probably be missed by someone not familiar with *nix terminology. Eventually I arrived at my solution:&lt;/div&gt;
&lt;/div&gt;
&lt;pre class="literal-block"&gt;
./sc68/sc68 music/Jochen\ Hippel\ \(Mad\ Max\)/Atari\ ST/Cuddly\ Demo.sc68 | gst-launch-0.10 fdsrc ! audioparse ! audioconvert ! audioresample ! alsasink
&lt;/pre&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class="line"&gt;Of course the real aim of exercise was to replace my current ring tone with something a bit more retro. Here another utility comes in, the &lt;a class="reference external" href="http://en.wikipedia.org/wiki/LAME"&gt;LAME&lt;/a&gt; mp3 encoder. This follows the &amp;quot;standard&amp;quot; convention of using &lt;em&gt;-&lt;/em&gt; in place of file names to indicate input (or output) should from &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Standard_streams"&gt;standard input&lt;/a&gt; (or of course to standard output). The command line was easily guessed:&lt;/div&gt;
&lt;/div&gt;
&lt;pre class="literal-block"&gt;
./sc68/sc68 music/Jochen\ Hippel\ \(Mad\ Max\)/Atari\ ST/Cuddly\ Demo.sc68 | lame -r - cuddly.mp3
Track      : 0/6
Title      : Cuddly Demo
Author     : Jochen Hippel (Mad Max)
Composer   : Jochen Hippel (Mad Max)
Replay     : built-in
Hardware   : Yamaha-2149
Start time : 0:00
Duration   : 06 13:07
Track      : 1/6
Title      : Color Shock
Author     : Jochen Hippel (Mad Max)
Composer   : Jochen Hippel (Mad Max)
Replay     : mcoder
Hardware   : Yamaha-2149
Start time : 0:00
Duration   : 01 03:12
Assuming raw pcm input file
LAME 3.98.2 64bits (http://www.mp3dev.org/)
Using polyphase lowpass filter, transition band: 16538 Hz - 17071 Hz
Encoding  to cuddly.mp3
Encoding as 44.1 kHz j-stereo MPEG-1 Layer III (11x) 128 kbps qval=3
&lt;/pre&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class="line"&gt;And bingo, one very retro ring tone for my phone :-)&lt;/div&gt;
&lt;/div&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Distributed VCS</title><link href="https://www.bennee.com/~alex/blog/2009/06/09/distributed-vcs/" rel="alternate"></link><published>2009-06-09T10:17:00+01:00</published><updated>2009-06-09T10:17:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-06-09:/~alex/blog/2009/06/09/distributed-vcs/</id><summary type="html">&lt;p&gt;I've mentioned distributed version control systems a few times. It was interesting note the advice that &lt;a class="reference external" href="http://savannah.nongnu.org/forum/forum.php?forum_id=5828"&gt;Savannah is giving&lt;/a&gt; about recovering from a recent disk crash. Both Git andMercurial based projects can restore from local repositories as they contain all the revision history within them. The centralised version control systems …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I've mentioned distributed version control systems a few times. It was interesting note the advice that &lt;a class="reference external" href="http://savannah.nongnu.org/forum/forum.php?forum_id=5828"&gt;Savannah is giving&lt;/a&gt; about recovering from a recent disk crash. Both Git andMercurial based projects can restore from local repositories as they contain all the revision history within them. The centralised version control systems are relying explicit backups being made. History has proved that getting &lt;a class="reference external" href="http://it.slashdot.org/article.pl?sid=09/05/15/0138204"&gt;backups done right&lt;/a&gt; is harder &lt;a class="reference external" href="http://en.gentoo-wiki.com/wiki/Gentoo_Linux_Wiki:Backups"&gt;than it looks&lt;/a&gt;. If your running an open source project there is a lot to be said for having ever developer mirror you code for you. To slightly misquote Linus*: &lt;em&gt;&amp;quot;Only wimps use backup: _real_ men just upload their important stuff and let the rest of the world mirror it&amp;quot;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;* The &lt;a class="reference external" href="http://groups.google.com/group/linux.dev.kernel/msg/76ae734d543e396d?pli=1"&gt;original quote&lt;/a&gt; mentions tape and ftp which dates it a bit.&lt;/p&gt;
</content><category term="geek"></category><category term="development"></category><category term="git"></category><category term="linkedin"></category><category term="vcs"></category></entry><entry><title>Professional Development</title><link href="https://www.bennee.com/~alex/blog/2009/05/07/professional-development/" rel="alternate"></link><published>2009-05-07T18:25:00+01:00</published><updated>2009-05-07T18:25:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-05-07:/~alex/blog/2009/05/07/professional-development/</id><summary type="html">&lt;p&gt;I went to a embedded conference today (re: sales pitch). It's been awhile since I've been exposed to salesperson snake oil but I thought it would be useful to see what the state of the art in the embedded world was like. All in all it was a useful event …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I went to a embedded conference today (re: sales pitch). It's been awhile since I've been exposed to salesperson snake oil but I thought it would be useful to see what the state of the art in the embedded world was like. All in all it was a useful event and I did learn a few things.&lt;/p&gt;
&lt;p&gt;First of all the first thing that struck me was &lt;a class="reference external" href="http://www.windriver.com/"&gt;WindRiver&lt;/a&gt; conversion to Linux. Their attitude was a welcome improvement on my last professional involvement with them which was very different. The company still has propensity to binary blobs as I watched their spiel for the &lt;a class="reference external" href="http://linuxdevices.com/news/NS1983455946.html"&gt;Tilcon GUI&lt;/a&gt; environment. I wasn't sure exactly what it did better than existing toolkits like &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Qtopia"&gt;QTopia&lt;/a&gt; or &lt;a class="reference external" href="http://en.wikipedia.org/wiki/GTK%2B"&gt;GTK&lt;/a&gt;, especially as the back-end on Linux was X11!&lt;/p&gt;
&lt;p&gt;I spoke to the &lt;a class="reference external" href="http://www.mvista.com/"&gt;MontaVista&lt;/a&gt; guys about their offering and got a few pointers to my holly grail of a decent embedded build system. I'm going to have a play with &lt;a class="reference external" href="http://bitbake.berlios.de/manual/"&gt;BitBake&lt;/a&gt; and have a go at getting &lt;a class="reference external" href="http://www.gentoo.org/proj/en/base/embedded/handbook/"&gt;Gentoo Embedded&lt;/a&gt; building. Maybe a custom distro for my netbook?&lt;/p&gt;
&lt;p&gt;Hardware has moved on a little. Pretty much everyone is using JTAG for ICEs now, most with more advanced tools like integrated Logic Analysers and CPU Trace support. The talk from the &lt;a class="reference external" href="http://www.lauterbach.co.uk/frames.html?ukindex.html"&gt;Lauterbach&lt;/a&gt; guy was good. I was particularly impressed in their coverage tool which can integrate power measurement with code coverage to indicate mJ per line of code. Next time I'm responsible for deciding on development hardware I'll certainly get some of their kit for trail. My only real disappointment is none of the JTAG debugger boards have really worked on decent GDB integration. If GDB is supported it's usually by a hacked up forked version of an old build. A number of the sales drones expressed surprise that I would want to use a clunky command line instead of their pretty GUIs. I will use their GUI tools if I'm doing fancy timing analyses or coverage work, but sometime you just want to connect to the host see where it is and get a back-trace, command line GDB is by far the most useful debugging tool for well over half the problems I ever have to look at.&lt;/p&gt;
</content><category term="geek"></category><category term="development"></category><category term="embedded"></category><category term="gdb"></category></entry><entry><title>Weekends of the past and future</title><link href="https://www.bennee.com/~alex/blog/2009/04/20/1230/" rel="alternate"></link><published>2009-04-20T11:02:00+01:00</published><updated>2009-04-20T11:02:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-04-20:/~alex/blog/2009/04/20/1230/</id><summary type="html">&lt;p&gt;We finally seem to be have returned fully to the UK time zone. This week sees a return to normal service.&lt;/p&gt;
&lt;p&gt;We had Fliss' sister visiting for the weekend as she prepares to head of to sunnier (and more dangerous) climes for her MSc project. This coincided with my Mum's …&lt;/p&gt;</summary><content type="html">&lt;p&gt;We finally seem to be have returned fully to the UK time zone. This week sees a return to normal service.&lt;/p&gt;
&lt;p&gt;We had Fliss' sister visiting for the weekend as she prepares to head of to sunnier (and more dangerous) climes for her MSc project. This coincided with my Mum's brother and wife visiting from Canada. As a result we celebrated with an extended family meal at local restaurant &lt;a class="reference external" href="http://www.restaurant-guide.com/sycamore-house-restaurant.htm"&gt;Sycamore House&lt;/a&gt;. Saturday came and went in a blizzard of news papers and &lt;a class="reference external" href="http://www.imdb.com/title/tt0067959/"&gt;some film&lt;/a&gt; I succeeded in passing out in front of. The tiredness of jet lag seems to hit me very quickly and suddenly making it very difficult to stay awake.&lt;/p&gt;
&lt;p&gt;Sunday involved to Sudbury for breakfast and dropping Steph back at the family home. We took advantage of the lovey sunshine to tackle to the garden. I'd tackled the 5 weeks of unrestricted growth earlier in the week with a general hack attack, however it still wasn't neat. Fliss gave the lawn a second mowing and also cleared up and trimmed all the borders. I was directed to attend to one of the flower beds and give it a general weeding. We have a plethora of seeds for various vegetables which we shall attempt to propagate over the next few days. The garden now looks a lot neater and ready for the summer season of BBQ's and gatherings. Even at this early stage of spring the patio area is still proving to be a lovely sun trap. Despite the days hard labour we made it through Sunday's &lt;a class="reference external" href="http://www.imdb.com/title/tt0499448/"&gt;film&lt;/a&gt; even though it was over 2 hours long. I did fall asleep pretty quickly though!&lt;/p&gt;
&lt;p&gt;We were planning to visit Manchester next weekend however there is a confluence of sisters and mothers which makes staying down south the more sensible option. We would like come up to Manchester soon and celebrate our engagement amongst our northern friends. It may be worth combining with some other event going on up there so I'm open to suggestions (as well as offers of crash space!). We're thinking sometime in May/June. Ideas?&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>TED TALKS: Electric Cars</title><link href="https://www.bennee.com/~alex/blog/2009/04/18/1229/" rel="alternate"></link><published>2009-04-18T17:30:00+01:00</published><updated>2009-04-18T17:30:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-04-18:/~alex/blog/2009/04/18/1229/</id><content type="html">&lt;p&gt;I have to say &lt;a class="reference external" href="http://video.ted.com/talks/podcast/ShaiAgassi_2009.mp4"&gt;this guy&lt;/a&gt; certainly has the vision thing. I share his thesis that green tech is going to be growth opportunity in the next few years. I just wonder how much software it's going to need.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Giving up on Xorg</title><link href="https://www.bennee.com/~alex/blog/2009/03/02/giving-up-on-xorg/" rel="alternate"></link><published>2009-03-02T12:32:00+00:00</published><updated>2009-03-02T12:32:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-03-02:/~alex/blog/2009/03/02/giving-up-on-xorg/</id><summary type="html">&lt;p&gt;You may &lt;a class="reference external" href="http://www.bennee.com/~alex/news.php?wl_mode=more&amp;amp;wl_eid=1209"&gt;recall&lt;/a&gt; the adventures of playing with the bleeding edge of Xorg. Well I've given up, I just don't have enough time for tinkering with my main machines display. I managed to get a locally built Xserver after a fashion but I keep hitting &lt;a class="reference external" href="http://article.gmane.org/gmane.comp.freedesktop.xorg/37185"&gt;various&lt;/a&gt; &lt;a class="reference external" href="http://thread.gmane.org/gmane.comp.freedesktop.xorg/37355"&gt;brick walls&lt;/a&gt;. I've basically …&lt;/p&gt;</summary><content type="html">&lt;p&gt;You may &lt;a class="reference external" href="http://www.bennee.com/~alex/news.php?wl_mode=more&amp;amp;wl_eid=1209"&gt;recall&lt;/a&gt; the adventures of playing with the bleeding edge of Xorg. Well I've given up, I just don't have enough time for tinkering with my main machines display. I managed to get a locally built Xserver after a fashion but I keep hitting &lt;a class="reference external" href="http://article.gmane.org/gmane.comp.freedesktop.xorg/37185"&gt;various&lt;/a&gt; &lt;a class="reference external" href="http://thread.gmane.org/gmane.comp.freedesktop.xorg/37355"&gt;brick walls&lt;/a&gt;. I've basically committed myself to trying out the latest driver releases in my working distro xorg setup as and when they are released and tracking and offering feedback on a few bugs.&lt;/p&gt;
&lt;p&gt;It's a shame really as accessibility to new developers is a key feature of any successful open source project. While &lt;a class="reference external" href="http://en.wikipedia.org/wiki/X.Org_Server"&gt;Xorg&lt;/a&gt; has come a long way and are making pro-active efforts at improving their code-base and interaction with upstream projects it's still hard to jump in and try. This is of course complicated by the type of project X is. It touches the kernel, the 3D subsystem and the windowing subsystem and is by it's very nature a complex beast. Hopefully things will improve over time and next time I have a desire for compiz bling things will have improved a few more incremental steps. In the meantime it's back to having grouped tabs on my browser and using Gnome's workspace setup.&lt;/p&gt;
</content><category term="geek"></category><category term="development"></category><category term="xorg"></category></entry><entry><title>Apropos my last post</title><link href="https://www.bennee.com/~alex/blog/2009/02/11/1200/" rel="alternate"></link><published>2009-02-11T23:05:00+00:00</published><updated>2009-02-11T23:05:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-02-11:/~alex/blog/2009/02/11/1200/</id><summary type="html">&lt;p&gt;The future is &lt;a class="reference external" href="http://news.bbc.co.uk/1/hi/technology/7883479.stm"&gt;here&lt;/a&gt;. While I have reservations about wide scale surveillance and &lt;a class="reference external" href="http://news.bbc.co.uk/1/hi/uk/7819230.stm"&gt;recording every e-mail I send&lt;/a&gt; it seems very sensible to equip the Persons in Blue with personal video recorders. Especially if it reduces the amount of paperwork the Police have to fill in when the could be …&lt;/p&gt;</summary><content type="html">&lt;p&gt;The future is &lt;a class="reference external" href="http://news.bbc.co.uk/1/hi/technology/7883479.stm"&gt;here&lt;/a&gt;. While I have reservations about wide scale surveillance and &lt;a class="reference external" href="http://news.bbc.co.uk/1/hi/uk/7819230.stm"&gt;recording every e-mail I send&lt;/a&gt; it seems very sensible to equip the Persons in Blue with personal video recorders. Especially if it reduces the amount of paperwork the Police have to fill in when the could be out on the streets.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Some thoughts on that compiz bling</title><link href="https://www.bennee.com/~alex/blog/2009/02/09/1198/" rel="alternate"></link><published>2009-02-09T12:03:00+00:00</published><updated>2009-02-09T12:03:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-02-09:/~alex/blog/2009/02/09/1198/</id><summary type="html">&lt;p&gt;I spent some time pimping my Samsung NC-10 netbook over the weekend. I had been having problems with Firefox slowing down and becoming sluggish and unresponsive. A little digging around later and I unearthed the culprit as being the closed source Flash plugin. Although well behaved Flash applications like the …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I spent some time pimping my Samsung NC-10 netbook over the weekend. I had been having problems with Firefox slowing down and becoming sluggish and unresponsive. A little digging around later and I unearthed the culprit as being the closed source Flash plugin. Although well behaved Flash applications like the YouTube and iPlayer viewers don't seem to cause a problem a lot of other flash instances where being created with general browsing. A quick installation of &lt;a class="reference external" href="https://addons.mozilla.org/en-US/firefox/addon/433"&gt;Flashblock&lt;/a&gt; improved the situation massively. I now only have Flash starting up and running when I want it to play video.&lt;/p&gt;
&lt;p&gt;One of the main deficiencies of the NC-10 is it's rather puny touch-pad and rocker style click buttons. I knew this was an issue when I bought the machine but as I'm mainly keyboard driven didn't think it was a major problem. However it was causing me trouble when selecting windows, especially as I usually keep them maximised. However the NC-10 does have a simple Intel 3D graphics chipset with fully open source drivers so I spent some time tweaking &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Compiz"&gt;Compiz&lt;/a&gt; for my setup.&lt;/p&gt;
&lt;p&gt;As can be &lt;a class="reference external" href="http://www.youtube.com/watch?v=CXKrmWRAW4A"&gt;seen&lt;/a&gt; Compiz is responsible for the flashy rotating 3D cubes and general &amp;quot;bling&amp;quot; on the Linux desktop these days. While I had it on my old work machine it was a pretty demo but somewhat marred by the binary nVidia drivers which would periodically freeze my machine. However with careful tweaking it makes my netbook a lot more usable. I can now use key chords (super+[DWAE]) to bring up the desktop, windows on work view, windows of app (i.e. all Firefox windows) and a full &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Expos%C3%A9_(Mac_OS_X)"&gt;Expose&lt;/a&gt; type view. The touch pad is now relegated to pointing at a window (no click required) to bring it into focus.&lt;/p&gt;
&lt;p&gt;As a result of the way Compiz works every application can always draw to a &amp;quot;display&amp;quot;. This means you get, relatively cheap computationally, thumbnails of the actual window contents for these summary displays. So instead of heavily using tabs on my netbook which take up valuable screen real estate I now open fresh windows for every page. Super+A then easily brings me thumbnail views of all my current browser views to switch to a new window.&lt;/p&gt;
&lt;p&gt;There remains a debate as to whether enabling Compiz on a Netbook increases or decreases battery life. Without actually measuring the consumption in-line it remains to be seen. It could be that by using the otherwise powered graphics chip to move graphics around you save the main CPU from having to run faster to manually copy stuff around into the frame-buffer. Unfortunately I don't really have a objective way to measure it right now.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>A few days of purgatory</title><link href="https://www.bennee.com/~alex/blog/2009/01/22/1191/" rel="alternate"></link><published>2009-01-22T11:40:00+00:00</published><updated>2009-01-22T11:40:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-01-22:/~alex/blog/2009/01/22/1191/</id><summary type="html">&lt;p&gt;I spent most of yesterday (and will spend today) operating in the Windows world. Every time I do this it reminds me of how much I hate it. Having to use IE certainly reminds me that Firefox is a much much better browser. I also miss having a comfortable editor …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I spent most of yesterday (and will spend today) operating in the Windows world. Every time I do this it reminds me of how much I hate it. Having to use IE certainly reminds me that Firefox is a much much better browser. I also miss having a comfortable editor or a powerful shell although I do note the DOS prompt has finally caught up with TAB completion for file paths. It still has nothing on a decent *nix command shell though.&lt;/p&gt;
&lt;p&gt;The reason I'm putting myself through this is I'm tweaking a psychology experiment for Fliss' mum. The experiment itself is written in Python and commendably uses an Open Source framework called &lt;a class="reference external" href="http://www.visionegg.org/"&gt;Vision Egg&lt;/a&gt; to generate and display the images. Unfortunately the experiment needs to run on some special &lt;a class="reference external" href="http://www.crsltd.com/catalog/visage/overview.html"&gt;graphics hardware&lt;/a&gt; which doesn't seem to have Python support (odd considering previous generations of hardware do seem to). The system however does supply examples in MATLAB, C++ Builder and a variety of .NET variants. So the choice was either to figure out how to drive the hardware from Python or convert the experiment to MATLAB (the only other tool the department has).&lt;/p&gt;
&lt;p&gt;Fortunately Python's built in &lt;a class="reference external" href="http://docs.python.org/library/ctypes.html"&gt;ctypes&lt;/a&gt; library makes interfacing to arbitrary libraries really easy. Once I'd dug out the C headers and loaded the DLL everything else was pretty mechanical. Today I just need to figure out the most expeditious way to thunk VisionEgg to VISAGE.&lt;/p&gt;
&lt;p&gt;Python is fast becoming a favourite programming language of mine. I would probably still reach for &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Perl"&gt;Perl&lt;/a&gt; if the script involved much text grokking having invested so much time in learning it's regexp implementation. However for prototyping or extending a program through plugins Python makes much more sense. It seems remarkably consistent in it's behaviour and has yet to pull something unexpected on me. The interactivity of the shell/interpreter makes exploring approaches a lot easier than the multiple edit/save/run cycles of Perl.&lt;/p&gt;
&lt;p&gt;I still miss having a decent editor though :-(&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Codec Fixing</title><link href="https://www.bennee.com/~alex/blog/2009/01/02/codec-fixing/" rel="alternate"></link><published>2009-01-02T14:33:00+00:00</published><updated>2009-01-02T14:33:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2009-01-02:/~alex/blog/2009/01/02/codec-fixing/</id><summary type="html">&lt;p&gt;Rockbox happily made it through the New Years Eve gathering without frustrating anyone with its occasional rough edges. However I am having problems with .m4a files (unlocked iTunes files) causing Rockbox to &lt;a class="reference external" href="http://www.rockbox.org/tracker/task/9745"&gt;throw a strop&lt;/a&gt;. Unfortunately debugging is made harder by the inability to attach the very much copyrighted tracks …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Rockbox happily made it through the New Years Eve gathering without frustrating anyone with its occasional rough edges. However I am having problems with .m4a files (unlocked iTunes files) causing Rockbox to &lt;a class="reference external" href="http://www.rockbox.org/tracker/task/9745"&gt;throw a strop&lt;/a&gt;. Unfortunately debugging is made harder by the inability to attach the very much copyrighted tracks to the bug report. I don't know how much love the m4a playback routines have seen. I assume most right thinking developers mainly run Oggs and Mp3's which of course work without any problems.&lt;/p&gt;
&lt;p&gt;My hunt for un-encumbered test media continues.&lt;/p&gt;
</content><category term="geek"></category><category term="development"></category><category term="rockbox"></category></entry><entry><title>Wikipedia and the IWF</title><link href="https://www.bennee.com/~alex/blog/2008/12/10/1171/" rel="alternate"></link><published>2008-12-10T15:36:00+00:00</published><updated>2008-12-10T15:36:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-12-10:/~alex/blog/2008/12/10/1171/</id><summary type="html">&lt;p&gt;It seems the IWF have &lt;a class="reference external" href="http://news.bbc.co.uk/1/hi/technology/7774102.stm"&gt;backed down&lt;/a&gt; in their attempt to censor Wikipedia. One of the reasons they cite is the unintended consequence more people having seen the questionable image since they &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Internet_Watch_Foundation_and_Wikipedia"&gt;pointed it out&lt;/a&gt;. This is sometimes referred to as the &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Streisand_effect"&gt;Streisand effect&lt;/a&gt; after &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Barbra_Streisand"&gt;Barbra Streisand&lt;/a&gt;'s attempt to …&lt;/p&gt;</summary><content type="html">&lt;p&gt;It seems the IWF have &lt;a class="reference external" href="http://news.bbc.co.uk/1/hi/technology/7774102.stm"&gt;backed down&lt;/a&gt; in their attempt to censor Wikipedia. One of the reasons they cite is the unintended consequence more people having seen the questionable image since they &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Internet_Watch_Foundation_and_Wikipedia"&gt;pointed it out&lt;/a&gt;. This is sometimes referred to as the &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Streisand_effect"&gt;Streisand effect&lt;/a&gt; after &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Barbra_Streisand"&gt;Barbra Streisand&lt;/a&gt;'s attempt to censor the internet.&lt;/p&gt;
&lt;p&gt;There are a number of issues raised by the whole affair including questions about censoring stuff on the belief it may be against the law. However I'd like to concentrate on the technical issues involved.&lt;/p&gt;
&lt;p&gt;The &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Cleanfeed_(content_blocking_system)"&gt;Cleanfeed&lt;/a&gt; system is actually fairly well thought out. For starters they only filter URLs rather than whole &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Domain_name"&gt;domains&lt;/a&gt;. This means an offending page can be filtered out without knocking out a whole site. I'm sure people can imagine the outcry blocking the whole of Wikipedia would have caused.&lt;/p&gt;
&lt;p&gt;They way the filtering is handled is by passing your web-request through a &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Transparent_proxy#Transparent_and_non-transparent_proxy_server"&gt;transparent proxy&lt;/a&gt;. Obviously if everybody had their web surfing routed through this one proxy everyone would suffer from slower surfing. For this reason Cleanfeed utilises a two stage process where only requests to sites in the IWF blacklist are forwarded to the proxy. Unfortunately for UK Wikipedia users this meant that all requests to the site went through the proxy. From Wikipedia's point of view this meant the entire UK population where making requests from a single IP address. As an IP address is the unique identifier of a device connected to the internet Wikipedia use it as a way of blocking sustained vandalism. The side effect being that all anonymous edits of Wikipedia where blocked once some-one had committed some vandalism through the proxy. Another unintended consequence of the IWF filter.&lt;/p&gt;
&lt;p&gt;There are a number of lessons that can be drawn by the whole episode. However this case is should be held up as a example to those people that think technical solutions to filtering the internet are &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Internet_censorship_in_Australia#Policy_of_compulsory_internet_filtering"&gt;workable&lt;/a&gt;. Unintended consequences indeed.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Batteries Included</title><link href="https://www.bennee.com/~alex/blog/2008/11/14/1155/" rel="alternate"></link><published>2008-11-14T14:29:00+00:00</published><updated>2008-11-14T14:29:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-11-14:/~alex/blog/2008/11/14/1155/</id><summary type="html">&lt;p&gt;I posted my first &lt;a class="reference external" href="http://www.rockbox.org/mail/archive/rockbox-dev-archive-2008-11/0075.shtml"&gt;simple patch&lt;/a&gt; for &lt;a class="reference external" href="http://www.rockbox.org"&gt;Rockbox&lt;/a&gt; to their mailing lists yesterday. It's a pretty simple one but I'm a big believer in trying to make the build system as flexible as possible. Also as I'm thinking of various experiments on my one and only iPod it would be …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I posted my first &lt;a class="reference external" href="http://www.rockbox.org/mail/archive/rockbox-dev-archive-2008-11/0075.shtml"&gt;simple patch&lt;/a&gt; for &lt;a class="reference external" href="http://www.rockbox.org"&gt;Rockbox&lt;/a&gt; to their mailing lists yesterday. It's a pretty simple one but I'm a big believer in trying to make the build system as flexible as possible. Also as I'm thinking of various experiments on my one and only iPod it would be nice not to nuke the stable software.&lt;/p&gt;
&lt;p&gt;I've been a little concerned that my iPod has dud batteries. There have been a number of times it hasn't woken up to key presses until given some USB juice. However I'm currently running the battery benchmark tool and it's been happily playing away since I left the house this morning. It could be that spending a lot of the time playing with the setup the last few days is draining the batteries faster as the back-light is on. The other option is the boot firmware is getting itself into a funny state going through various USB connections (connecting to USB switches over to Apple's &amp;quot;Disk Mode&amp;quot; firmware on the flash).&lt;/p&gt;
&lt;p&gt;There is a lot to like about Rockbox, not least the ability to play my music collection. However I think the area I'm going to focus on is it's handling of playlists. It's currently a little clunky and &lt;a class="reference external" href="http://www.rockbox.org/mail/archive/rockbox-dev-archive-2008-11/0060.shtml"&gt;seems to have bugs&lt;/a&gt; in adding stuff to existing playlists. One nice thing about the setup though is they &lt;a class="reference external" href="http://www.rockbox.org/twiki/bin/view/Main/UiSimulator"&gt;have a simulator&lt;/a&gt; which will run on your desktop. This means I can be a lot faster in tweaking the logic and testing things out. It even plays the music through SDL so you don't have to work in silence ;-)&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>No Follow</title><link href="https://www.bennee.com/~alex/blog/2008/11/11/1152/" rel="alternate"></link><published>2008-11-11T12:26:00+00:00</published><updated>2008-11-11T12:26:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-11-11:/~alex/blog/2008/11/11/1152/</id><summary type="html">&lt;p&gt;I don't really want to mention SPAM blogs in-case I give them Google Juice. However &lt;a class="reference external" href="http://amdvsintel.nits.in/"&gt;this one is interesting&lt;/a&gt; just for the phrasing of the language. For example (from &lt;a class="reference external" href="http://amdvsintel.nits.in/uncategorized/quicktransitr-cross-platform-virtualization-performance-boosted.html"&gt;here&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;â€œTransitive congratulates AMD on its incoming promulgation of the newborn Quad-Core AMD Opteron (TM) processor,â€? said Ian Robinson …&lt;/em&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;I don't really want to mention SPAM blogs in-case I give them Google Juice. However &lt;a class="reference external" href="http://amdvsintel.nits.in/"&gt;this one is interesting&lt;/a&gt; just for the phrasing of the language. For example (from &lt;a class="reference external" href="http://amdvsintel.nits.in/uncategorized/quicktransitr-cross-platform-virtualization-performance-boosted.html"&gt;here&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;â€œTransitive congratulates AMD on its incoming promulgation of the newborn Quad-Core AMD Opteron (TM) processor,â€? said Ian Robinson, evilness chair of marketing for Transitive. â€œBy deploying solutions virtualization papers much as the award-winning QuickTransit for Solaris/SPARC-to-Linux/x86-64 or QuickTransit for Solaris/SPARC-to-Solaris/x86-64 on systems armored with these stylish procreation of AMD processors, customers crapper change senior servers with x86 stylish profession patch all avoiding the costs and delays of porting their applications. â€?&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I suspect there is some sort of automatic translate and back going on here with a press releases, the source of most spam blogs posting.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Spot the bug</title><link href="https://www.bennee.com/~alex/blog/2008/10/30/1141/" rel="alternate"></link><published>2008-10-30T17:21:00+00:00</published><updated>2008-10-30T17:21:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-10-30:/~alex/blog/2008/10/30/1141/</id><summary type="html">&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Another example from a long line of bugs that had me scratching my head for a while:&lt;/div&gt;
&lt;/div&gt;
&lt;pre class="literal-block"&gt;
if (sscanf(dirname, &amp;quot;%8x&amp;quot;, &amp;amp;scanf_id)==1)
{
// We can  extract the ID right now
su = alloc_vsSu((uint32_t) strtoul(dirname, NULL, 16));
g_assert(su-&amp;gt;config-&amp;gt;id.idAsUint32==scanf_id);
}
else if (g_strcmp0(&amp;quot;default&amp;quot;, dirname)==0)
{
// The …&lt;/pre&gt;</summary><content type="html">&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Another example from a long line of bugs that had me scratching my head for a while:&lt;/div&gt;
&lt;/div&gt;
&lt;pre class="literal-block"&gt;
if (sscanf(dirname, &amp;quot;%8x&amp;quot;, &amp;amp;scanf_id)==1)
{
// We can  extract the ID right now
su = alloc_vsSu((uint32_t) strtoul(dirname, NULL, 16));
g_assert(su-&amp;gt;config-&amp;gt;id.idAsUint32==scanf_id);
}
else if (g_strcmp0(&amp;quot;default&amp;quot;, dirname)==0)
{
// The  &amp;quot;default&amp;quot; has an id of 0
su = alloc_vsSu(0);
}
&lt;/pre&gt;
&lt;p&gt;Can you tell what it was yet?&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Athesit Activism</title><link href="https://www.bennee.com/~alex/blog/2008/10/21/1137/" rel="alternate"></link><published>2008-10-21T22:44:00+01:00</published><updated>2008-10-21T22:44:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-10-21:/~alex/blog/2008/10/21/1137/</id><summary type="html">&lt;p&gt;It's interesting looking at the &lt;a class="reference external" href="http://justgiving.wordpress.com/2008/10/21/atheist-bus-campaign/"&gt;graph of donations&lt;/a&gt; for the Atheist Bus Ads. For something that kicked off it's &lt;a class="reference external" href="http://www.justgiving.com/atheistbus"&gt;fund raising effort&lt;/a&gt; today for a now modest looking Â£5,500 it seems to have caught the zeitgeist. Perhaps it's because their is a silent majority* that feels left out …&lt;/p&gt;</summary><content type="html">&lt;p&gt;It's interesting looking at the &lt;a class="reference external" href="http://justgiving.wordpress.com/2008/10/21/atheist-bus-campaign/"&gt;graph of donations&lt;/a&gt; for the Atheist Bus Ads. For something that kicked off it's &lt;a class="reference external" href="http://www.justgiving.com/atheistbus"&gt;fund raising effort&lt;/a&gt; today for a now modest looking Â£5,500 it seems to have caught the zeitgeist. Perhaps it's because their is a silent majority* that feels left out of the regular debates about religion that the take up is so high?&lt;/p&gt;
&lt;p&gt;I wouldn't describe the campaign as militant atheism just another ad in a sea of adverts competing for peoples attention. The &amp;quot;probably&amp;quot; language is mainly there to skirt around the ASA guidelines** which would prevent the flat out assertion (although curiously other groups can make such assertions). However the use of &amp;quot;probably&amp;quot; does make the advert softer and less prone to sounding like preachy hectoring which would kind of defeat the point.&lt;/p&gt;
&lt;p&gt;I'm fairly fluffy and certainly wouldn't want to prevent anyone from practising their sincerely held beliefs. It's hard to predict what this campaign will achieve than pointing out there is a chunk of the population that don't subscribe to any religious viewpoint. Certainly there are &lt;a class="reference external" href="http://www.secularism.org.uk/"&gt;other organisations&lt;/a&gt; devoted to the more weighty issues of campaigning for removing religion from it's protected and privileged status in public life.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;* based on no facts whatsoever. The ONS &lt;a class="reference external" href="http://www.statistics.gov.uk/CCI/nugget.asp?ID=984&amp;amp;Pos=6&amp;amp;ColRank=1&amp;amp;Rank=176"&gt;states we are 70-80% Christian&lt;/a&gt; but I don't know how much of that is due to the default effect.&lt;/div&gt;
&lt;div class="line"&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; ** From the &lt;a class="reference external" href="http://www.atheistcampaign.org/probably/"&gt;campaign blog&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Yacky Yacc</title><link href="https://www.bennee.com/~alex/blog/2008/10/20/1135/" rel="alternate"></link><published>2008-10-20T16:19:00+01:00</published><updated>2008-10-20T16:19:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-10-20:/~alex/blog/2008/10/20/1135/</id><summary type="html">&lt;p&gt;I'd hopped I would get by without having to learn the mysteries of &lt;a class="reference external" href="http://en.wikipedia.org/wiki/GNU_bison"&gt;Bison&lt;/a&gt; and how to build parsers. Unfortunately &lt;a class="reference external" href="http://cgit.freedesktop.org/~keithp/parsecvs/"&gt;parsecvs&lt;/a&gt; uses it to grok the CVS files. Someone has added some new binary files into the CVS tree and it's causing parsecvs to go into a death spiral of …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I'd hopped I would get by without having to learn the mysteries of &lt;a class="reference external" href="http://en.wikipedia.org/wiki/GNU_bison"&gt;Bison&lt;/a&gt; and how to build parsers. Unfortunately &lt;a class="reference external" href="http://cgit.freedesktop.org/~keithp/parsecvs/"&gt;parsecvs&lt;/a&gt; uses it to grok the CVS files. Someone has added some new binary files into the CVS tree and it's causing parsecvs to go into a death spiral of memory allocation. The backtrace shows yyparse() and yylex() in the call chain so I suppose I'd better learn how this is meant to work before I break it.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Snakes!</title><link href="https://www.bennee.com/~alex/blog/2008/10/06/1125/" rel="alternate"></link><published>2008-10-06T19:24:00+01:00</published><updated>2008-10-06T19:24:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-10-06:/~alex/blog/2008/10/06/1125/</id><summary type="html">&lt;p&gt;I've been doing some prototyping recently in &lt;a class="reference external" href="http://www.python.org"&gt;Python&lt;/a&gt; as an experiment. The idea being I can mock up a simple app with GUI with minimal effort and of course learning new languages is fun. A big driver is that it's not perl. An awful lot of perl is implicit based …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I've been doing some prototyping recently in &lt;a class="reference external" href="http://www.python.org"&gt;Python&lt;/a&gt; as an experiment. The idea being I can mock up a simple app with GUI with minimal effort and of course learning new languages is fun. A big driver is that it's not perl. An awful lot of perl is implicit based on context and a lot of the syntactic sugar you end up sprinkling about to make things explicit can make your code look as though it's been vomited on. I didn't fancy trying to cope with that in a moderately complex perl script.&lt;/p&gt;
&lt;p&gt;So far I'm pretty happy with how quickly I've picked up Python. The principle of least surprise seems to be holding when using new things. The only problem I have is how to break an arbitrarily sized list into an arbitrary number of arguments for a varargs style function call. I suspect the solution will be beautiful in it's simplicity but I suspect I need to read up more on Python's concept of sequences. Of course this is simple in perl as all function calls basically just pass an array of &lt;em&gt;stuff&lt;/em&gt;.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Meters</title><link href="https://www.bennee.com/~alex/blog/2008/08/06/1089/" rel="alternate"></link><published>2008-08-06T13:32:00+01:00</published><updated>2008-08-06T13:32:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-08-06:/~alex/blog/2008/08/06/1089/</id><summary type="html">&lt;p&gt;I've been playing with &lt;a class="reference external" href="http://www.emacswiki.org/cgi-bin/wiki/EmacsClient"&gt;emacsclient&lt;/a&gt; in an effort to make things like editing blog entries faster by re-using existing emacs sessions. It's almost doing what I want it to do but there doesn't seem to be a way of checking if there is already a server running withing emacs itself …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I've been playing with &lt;a class="reference external" href="http://www.emacswiki.org/cgi-bin/wiki/EmacsClient"&gt;emacsclient&lt;/a&gt; in an effort to make things like editing blog entries faster by re-using existing emacs sessions. It's almost doing what I want it to do but there doesn't seem to be a way of checking if there is already a server running withing emacs itself. I'm not touching tty support yet as the many hacks do indeed look quite hacky, especially with screen involved.&lt;/p&gt;
&lt;p&gt;We had a water meter installed this morning which in theory should mean lower water bills. We do like the occasional bath but apparently you can have about 15 baths for ï¿½2.40 so we shouldn't be maxing out too soon. Gardening is a worry but really we should get a water butt and collect rain water for that. However I doubt we will bother while renting here.&lt;/p&gt;
&lt;p&gt;Spent last night watching another chunk of the very funny &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Suburban_Shootout"&gt;Suburban Shootout&lt;/a&gt; last night. I'm giving the season 2 DVD some thought. Tonight we do the Dark Knight.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Folk Festival</title><link href="https://www.bennee.com/~alex/blog/2008/08/02/1087/" rel="alternate"></link><published>2008-08-02T11:34:00+01:00</published><updated>2008-08-02T11:34:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-08-02:/~alex/blog/2008/08/02/1087/</id><summary type="html">&lt;p&gt;Yesterday was the first full day of the &lt;a class="reference external" href="http://www.cambridgefolkfestival.co.uk/"&gt;Cambridge Folk Festival&lt;/a&gt;. There was a slight delay to getting there as Mufi and TJ had been held up by one of those rare M6 accidents. However once they arrived we took the very environmentally friendly bus to the site.&lt;/p&gt;
&lt;p&gt;It's a …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Yesterday was the first full day of the &lt;a class="reference external" href="http://www.cambridgefolkfestival.co.uk/"&gt;Cambridge Folk Festival&lt;/a&gt;. There was a slight delay to getting there as Mufi and TJ had been held up by one of those rare M6 accidents. However once they arrived we took the very environmentally friendly bus to the site.&lt;/p&gt;
&lt;p&gt;It's a very gentle festival which is nice because it means the loos are OK, there is a selection of real-ales at the not overly crowded bar and a great selection of food. We spent most of the day in front of the main stage and met some interesting people who where next to our &amp;quot;patch&amp;quot;.&lt;/p&gt;
&lt;p&gt;Last nights bands included &lt;a class="reference external" href="http://www.last.fm/music/The%20%20Waifs"&gt;The Waifs&lt;/a&gt; (lovely bluesy aussie band), &lt;a class="reference external" href="http://www.last.fm/music/Peatbog+Faeries"&gt;The Peatbog Faries&lt;/a&gt; (high energy celtic dance), &lt;a class="reference external" href="http://www.last.fm/music/Billy+Bragg"&gt;Bill Bragg&lt;/a&gt; (political protest songs of a slightly leftish hue ;-), and the final band was festival stalwarts &lt;a class="reference external" href="http://www.last.fm/music/Levellers"&gt;The Levellers&lt;/a&gt; (sing-a-long folk rock from my youth).&lt;/p&gt;
&lt;p&gt;We shall see what today brings :-)&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>screenrc</title><link href="https://www.bennee.com/~alex/blog/2008/07/23/1078/" rel="alternate"></link><published>2008-07-23T18:04:00+01:00</published><updated>2008-07-23T18:04:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-07-23:/~alex/blog/2008/07/23/1078/</id><summary type="html">&lt;p&gt;I've been using &lt;a class="reference external" href="http://en.wikipedia.org/wiki/GNU_Screen"&gt;screen&lt;/a&gt; more and more out of habit recently. I used to use a lot of tabs in Gnome Terminal on each project I'm working on. Now I run one terminal per project with a screen session for all the sub-sections. It seemed a good time to revisit …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I've been using &lt;a class="reference external" href="http://en.wikipedia.org/wiki/GNU_Screen"&gt;screen&lt;/a&gt; more and more out of habit recently. I used to use a lot of tabs in Gnome Terminal on each project I'm working on. Now I run one terminal per project with a screen session for all the sub-sections. It seemed a good time to revisit my &lt;em&gt;.screenrc&lt;/em&gt; which looks something like:&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;# Ensure we run a fresh login shell&amp;nbsp; shell &lt;span class="pre"&gt;-${SHELL}&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # I want more scrollback&amp;nbsp; defscrollback 2048&amp;nbsp;&amp;nbsp;&amp;nbsp; # Set the caption to show:&amp;nbsp; #&amp;nbsp;&amp;nbsp; current window&amp;nbsp; #&amp;nbsp;&amp;nbsp; other windows&amp;nbsp; #&amp;nbsp;&amp;nbsp; date/time&amp;nbsp;&amp;nbsp;&amp;nbsp; caption always &lt;span class="pre"&gt;&amp;quot;%{+b&lt;/span&gt; &lt;span class="pre"&gt;Rk}&amp;#64;%H%{kk}&lt;/span&gt; %{Yk} %n %t &lt;span class="pre"&gt;%{-b&lt;/span&gt; &lt;span class="pre"&gt;-s}%{kk}&lt;/span&gt; &lt;span class="pre"&gt;%{wb}%W&lt;/span&gt; &lt;span class="pre"&gt;%=%{kk}&lt;/span&gt; %{wB} %c %D %d %M &amp;quot;&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;The only missing bit is getting the session name in there somehow. I've tried various experiments with the backtick command and echoing $STY but I expect it's not available to the context the script runs in.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Context, Attributes and JSP</title><link href="https://www.bennee.com/~alex/blog/2008/07/10/context-attributes-and-jsp/" rel="alternate"></link><published>2008-07-10T20:02:00+01:00</published><updated>2008-07-10T20:02:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-07-10:/~alex/blog/2008/07/10/context-attributes-and-jsp/</id><summary type="html">&lt;p&gt;One thing that is rapidly becoming clear is a lot of different concepts get mixed together when you start playing with JSP. On the face of it it's a simple model, your JSP code get built into a Java class (of type servlet) which is a combination on normal Java …&lt;/p&gt;</summary><content type="html">&lt;p&gt;One thing that is rapidly becoming clear is a lot of different concepts get mixed together when you start playing with JSP. On the face of it it's a simple model, your JSP code get built into a Java class (of type servlet) which is a combination on normal Java code and JSP mark up which gets converted into Java when the page is loaded. At any point in your HTML you can escape back into Java code, do calculations, execute loops, generally compute things. However that approach can get very messy because you end up spreading logic all through your presentational HTML. This is why using an &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Model-view-controller"&gt;MVC&lt;/a&gt; pattern is so encouraged. Put all your logic and complex code at the top of the file and then display page expanding the odd attribute here and there.&lt;/p&gt;
&lt;p&gt;However I don't think I've fully grasped whats going on behind the scenes. It doesn't help with &lt;a class="reference external" href="http://jetty.mortbay.com/jetty-6/"&gt;Jetty&lt;/a&gt; I can't find where the intermediate Java source code is generated. Trying to understand whats going on when I'm not familiar with the cryptic backtraces has been frustrating to say the least.&lt;/p&gt;
&lt;p&gt;Now I'm a little confused as to what exactly happens with the ${var} notation in terms of the java code generated. My earlier &lt;a class="reference external" href="http://www.bennee.com/~alex/news.php?wl_mode=more&amp;amp;wl_eid=1070"&gt;code&lt;/a&gt; has mutated to a list with a custom class. Hence I have had to generate the following:&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;&amp;lt;c:forEach &lt;span class="pre"&gt;var=&amp;quot;entry&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;items=&amp;quot;${model.jvmMemInfo}&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;varStatus=&amp;quot;status&amp;quot;&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // This is complex, I'm not sure how you can use ${} syntax on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // arbitrary objects to expose the values, hence this bit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // of inline java. I'm open to elucidation on how you would do so&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NameValuePair data = (NameValuePair) &lt;span class="pre"&gt;pageContext.getAttribute(&amp;quot;entry&amp;quot;);&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%= data.name %&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%= data.value %&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/c:forEach&amp;gt;&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;However there are &lt;a class="reference external" href="http://www.google.com/codesearch?hl=en&amp;amp;q=show:TrTtpLmB-cE:ZBsQHHkeTcM:TrTtpLmB-cE&amp;amp;sa=N&amp;amp;ct=rd&amp;amp;cs_p=http://dddjedi.googlecode.com/svn&amp;amp;cs_f=trunk/buyingbook/web/list.jsp&amp;amp;start=1"&gt;examples on the net&lt;/a&gt; showing arbitrary classes exposing their contents with this simple ${data.name} type syntax. I just couldn't get it to work. My NameValuePair class isn't much different from their &lt;a class="reference external" href="http://www.google.com/codesearch?hl=en&amp;amp;q=BookOrderData+show:D4EVt5aRC54:b7tWwGGm4c8:D4EVt5aRC54&amp;amp;sa=N&amp;amp;cd=1&amp;amp;ct=rc&amp;amp;cs_p=http://dddjedi.googlecode.com/svn&amp;amp;cs_f=trunk/buyingbook/test/model/BookOrderData.java"&gt;one&lt;/a&gt;. I suspect this would be a lot easier to work out if I could see the generated applet.&lt;/p&gt;
&lt;p&gt;Any Java web monkeys got experience with Jetty or can tell me what piece of obviousness I have missed?&lt;/p&gt;
</content><category term="geek"></category><category term="development"></category><category term="java"></category><category term="jsp"></category></entry><entry><title>JSP tags</title><link href="https://www.bennee.com/~alex/blog/2008/07/08/jsp-tags/" rel="alternate"></link><published>2008-07-08T14:56:00+01:00</published><updated>2008-07-08T14:56:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-07-08:/~alex/blog/2008/07/08/jsp-tags/</id><summary type="html">&lt;p&gt;Arrggh. I've just wasted the best part of half a day scratching my head as to why I was unable to iterate through a Java HashMap in a JSP page:&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;&amp;lt;c:forEach &lt;span class="pre"&gt;var=&amp;quot;entry&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;items=&amp;quot;${model.jvmInfo}&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;varStatus=&amp;quot;status&amp;quot;&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${entry.key}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${entry.value}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/c …&lt;/tt&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Arrggh. I've just wasted the best part of half a day scratching my head as to why I was unable to iterate through a Java HashMap in a JSP page:&lt;/p&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;&amp;lt;c:forEach &lt;span class="pre"&gt;var=&amp;quot;entry&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;items=&amp;quot;${model.jvmInfo}&amp;quot;&lt;/span&gt; &lt;span class="pre"&gt;varStatus=&amp;quot;status&amp;quot;&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${entry.key}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${entry.value}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/c:forEach&amp;gt;&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;It would of been immediately clear had I looked at the resulting HTML the page was echoing. Note to self, always check you have explicitly included the &lt;a class="reference external" href="http://en.wikipedia.org/wiki/JavaServer_Pages_Standard_Tag_Library"&gt;taglib&lt;/a&gt; you are planning to use.&lt;/p&gt;
</content><category term="geek"></category><category term="development"></category><category term="java"></category><category term="jsp"></category></entry><entry><title>rms on the BBC</title><link href="https://www.bennee.com/~alex/blog/2008/07/03/1060/" rel="alternate"></link><published>2008-07-03T14:37:00+01:00</published><updated>2008-07-03T14:37:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-07-03:/~alex/blog/2008/07/03/1060/</id><content type="html">&lt;p&gt;I see &lt;em&gt;rms&lt;/em&gt; has a piece published on the BBC. You can read it &lt;a class="reference external" href="http://news.bbc.co.uk/1/hi/technology/7487060.stm"&gt;here&lt;/a&gt;.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>End of LUG Radio</title><link href="https://www.bennee.com/~alex/blog/2008/07/01/1057/" rel="alternate"></link><published>2008-07-01T11:08:00+01:00</published><updated>2008-07-01T11:08:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-07-01:/~alex/blog/2008/07/01/1057/</id><summary type="html">&lt;p&gt;Well it seems the chaps at LUGRadio are &lt;a class="reference external" href="http://forums.lugradio.org/viewtopic.php?f=1&amp;amp;t=4216"&gt;calling it a day&lt;/a&gt;. I only discovered the podcast last year and although it's quite long and full of swearing I generally found it very entertaining. The irreverent style blended quite well with the occasional deep technical geekery and random wittering. Time …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Well it seems the chaps at LUGRadio are &lt;a class="reference external" href="http://forums.lugradio.org/viewtopic.php?f=1&amp;amp;t=4216"&gt;calling it a day&lt;/a&gt;. I only discovered the podcast last year and although it's quite long and full of swearing I generally found it very entertaining. The irreverent style blended quite well with the occasional deep technical geekery and random wittering. Time to look for more podcasts for my extended cycles into work.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Linksys Hackery</title><link href="https://www.bennee.com/~alex/blog/2008/04/04/998/" rel="alternate"></link><published>2008-04-04T13:43:00+01:00</published><updated>2008-04-04T13:43:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-04-04:/~alex/blog/2008/04/04/998/</id><summary type="html">&lt;p&gt;Now the decorating and carpet laying is complete Fliss has her brand new office. Unfortunately due to my lack of desire to run cables under the floor boards and past the bathroom she's missing the needed network connection.&lt;/p&gt;
&lt;p&gt;Luckily Will had furnished me with a spare &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Linksys_WRT54G_series"&gt;WRT54G&lt;/a&gt; so I proceeded …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Now the decorating and carpet laying is complete Fliss has her brand new office. Unfortunately due to my lack of desire to run cables under the floor boards and past the bathroom she's missing the needed network connection.&lt;/p&gt;
&lt;p&gt;Luckily Will had furnished me with a spare &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Linksys_WRT54G_series"&gt;WRT54G&lt;/a&gt; so I proceeded to look into building a wireless bridge with it. It's not quite like the wireless bridges I've been building the last 4 days at work though, for starters it doesn't quite supply the same bandwidth :-)&lt;/p&gt;
&lt;p&gt;It seems the land of 3rd party firmware for the WRTG has become pretty &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Wrt54g#Third-party_firmware_projects"&gt;fragmented&lt;/a&gt; with a number of projects, some of which seem to have questionable adherence to the GPL. As I value my freedom I tried to find a project which had the most open development policy and offered the greatest flexibility. In the end I plumped for the &lt;a class="reference external" href="http://www.freewrt.org/trac/"&gt;FreeWRT&lt;/a&gt; project, which itself is a fork of the bigger &lt;a class="reference external" href="http://openwrt.org/"&gt;OpenWRT&lt;/a&gt; project. Both seem pretty capable but the FreeWRT project does supply a rather nice web based &lt;a class="reference external" href="http://wib.freewrt.org/config/step0"&gt;image&lt;/a&gt; builder which clinched it.&lt;/p&gt;
&lt;p&gt;The re-flash of the hardware went without a hitch and after a little faffing about with routing default IP addresses I had ssh only access to a minimalist router setup. It didn't take long (and a brief grep for &amp;quot;bridging&amp;quot; in the manual) to get a working &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Wireless_Distribution_System"&gt;WDS&lt;/a&gt; setup. Maybe one day I will get around to fixing up my main router with some pimped up firmware.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>cvsps and the diet pill revolution</title><link href="https://www.bennee.com/~alex/blog/2008/03/27/995/" rel="alternate"></link><published>2008-03-27T11:12:00+00:00</published><updated>2008-03-27T11:12:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-03-27:/~alex/blog/2008/03/27/995/</id><summary type="html">&lt;p&gt;One thing I've been doing at work is an experiment to convert the source code repository from CVS to something a &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Git_(software)"&gt;little newer&lt;/a&gt;. This has been more than a little challenging.&lt;/p&gt;
&lt;p&gt;The main problem is the tool &lt;a class="reference external" href="http://www.cobite.com/cvsps/"&gt;cvsps&lt;/a&gt; is quite hungry for memory, especially on the rather large repository I'm …&lt;/p&gt;</summary><content type="html">&lt;p&gt;One thing I've been doing at work is an experiment to convert the source code repository from CVS to something a &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Git_(software)"&gt;little newer&lt;/a&gt;. This has been more than a little challenging.&lt;/p&gt;
&lt;p&gt;The main problem is the tool &lt;a class="reference external" href="http://www.cobite.com/cvsps/"&gt;cvsps&lt;/a&gt; is quite hungry for memory, especially on the rather large repository I'm trying to convert. It very rapidly allocates around 2.5 Gigabytes of heap memory (way more than physical RAM) to parse the revision history of CVS and build up all the change-sets. I set it off yesterday and shut down everything I could on the machine to give it as large a resident set size as I could. However parsing randomly allocated data in the heap is probably as close to a pathological use case for the virtual memory subsystem as you could get. As I logged of the machine last night I could see it doing about 1% real work while the rest of the time it was waiting on IO (I assume swap activity) and idling. Luckily by this morning it had got over that hump (although some of the git-repack calls are pretty memory hungry themselves). If I have to do the conversion again I'm going to invest some time into putting cvsps on a memory diet.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Location</title><link href="https://www.bennee.com/~alex/blog/2008/03/21/991/" rel="alternate"></link><published>2008-03-21T12:18:00+00:00</published><updated>2008-03-21T12:18:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-03-21:/~alex/blog/2008/03/21/991/</id><summary type="html">&lt;p&gt;I'm not sure what did it but I upgraded the firmware on my phone last week and this week I noticed the &amp;quot;My Location&amp;quot; option now works on Google Maps while running on the phone. I haven't been able to find a Changelog for the firmware version (Dave/Sheila/Jo …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I'm not sure what did it but I upgraded the firmware on my phone last week and this week I noticed the &amp;quot;My Location&amp;quot; option now works on Google Maps while running on the phone. I haven't been able to find a Changelog for the firmware version (Dave/Sheila/Jo?) but I'm guessing it was a fix to the info about current base-station exported to the J2ME environment. Either way it's a cool feature, now I just press 0 and the map centers on where I (more or less) am.&lt;/p&gt;
&lt;p&gt;Fliss' dad has arrived from the land of Oz this morning. At some point we shall start our heading towards the wilds of Birmingham for Maelstrom.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Exchange the root of All Evil</title><link href="https://www.bennee.com/~alex/blog/2008/03/18/987/" rel="alternate"></link><published>2008-03-18T17:26:00+00:00</published><updated>2008-03-18T17:26:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-03-18:/~alex/blog/2008/03/18/987/</id><summary type="html">&lt;p&gt;It seems &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Microsoft_Exchange_Server"&gt;MS Exchange&lt;/a&gt; really is as bad as I've heard. Thankfully Evolution can talk to the in-coming/out-going mail bits of Exchange. It also happily slurps up invites and adds them to it's own calender view (which I assume I can publish somewhere that Google Calender could slurp). However …&lt;/p&gt;</summary><content type="html">&lt;p&gt;It seems &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Microsoft_Exchange_Server"&gt;MS Exchange&lt;/a&gt; really is as bad as I've heard. Thankfully Evolution can talk to the in-coming/out-going mail bits of Exchange. It also happily slurps up invites and adds them to it's own calender view (which I assume I can publish somewhere that Google Calender could slurp). However when it sends the reply back to Exchange it gets cryptic messages about quotas which make no sense to the IT guy. *sigh* so much for interoperability.&lt;/p&gt;
&lt;p&gt;I've been playing with a few &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Unified_Modeling_Language"&gt;UML&lt;/a&gt; tools to capture this products Use Cases. I'm not looking for anything very flash (certainly not going down the full code generation root) however it would be nice to have something a little swisher than a hand-drawn document. So far I've played with &lt;a class="reference external" href="http://uml.sourceforge.net/index.php"&gt;Umbrello&lt;/a&gt; and &lt;a class="reference external" href="http://gaphor.devjavu.com/"&gt;Gaphor&lt;/a&gt;. Both seem reasonable although the Gaphor package is a little broken, it may be easier to run from the bleeding edge. I gave up on &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Dia_%28software%29"&gt;Dia&lt;/a&gt; as it's UML support was more in the form of a widget palette. Anyone care to recommend any other FLOSS UML tools?&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Day One</title><link href="https://www.bennee.com/~alex/blog/2008/03/17/986/" rel="alternate"></link><published>2008-03-17T22:09:00+00:00</published><updated>2008-03-17T22:09:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-03-17:/~alex/blog/2008/03/17/986/</id><summary type="html">&lt;p&gt;Today has been a busy first day. The journey in was surprisingly easy, so much so I beat my new boss into the office. A brief chat with H.R. was quickly followed diving straight into the technical details of the system and where the product I'll be responsible for …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Today has been a busy first day. The journey in was surprisingly easy, so much so I beat my new boss into the office. A brief chat with H.R. was quickly followed diving straight into the technical details of the system and where the product I'll be responsible for is heading. The first few days are always a little overwhelming, especially when initial timescales for delivery are quoted in 3 months. Luckily it was made clear the product development will be an iterative one. I still need to get some planning and analysis in place though as it would be silly to start writing code without some agreement from other stakeholders. I've got some initial coding to do with an existing product as a way to get familiar with the existing code-base although luckily it's divorced from the bundled system build so I was able to wack it into git so I can avoid the horrors of CVS. Hopefully by the end of the week my head will have stopped spinning quite so much and the mountain will seem a little shorter, if only by a few feet :-)&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Maintaining the semblance of normaility</title><link href="https://www.bennee.com/~alex/blog/2008/02/28/979/" rel="alternate"></link><published>2008-02-28T17:42:00+00:00</published><updated>2008-02-28T17:42:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-02-28:/~alex/blog/2008/02/28/979/</id><content type="html">&lt;p&gt;I've updated the picture on my &lt;a class="reference external" href="http://www.bennee.com/~alex/"&gt;homepage&lt;/a&gt; to make it a little more contemporary. Credit's for the image go to &lt;a class="reference external" href="http://www.chrisfleming.org/"&gt;Chris Flemming&lt;/a&gt; who took it during the recent &lt;a class="reference external" href="http://www.bennee.com/~alex/news.php?wl_mode=more&amp;amp;wl_eid=978"&gt;weekend in Scotland&lt;/a&gt;. It turns out to be possible to get good pictures of me :-)&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>More Lisp</title><link href="https://www.bennee.com/~alex/blog/2008/02/12/970/" rel="alternate"></link><published>2008-02-12T20:32:00+00:00</published><updated>2008-02-12T20:32:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-02-12:/~alex/blog/2008/02/12/970/</id><summary type="html">&lt;p&gt;I continue to gain confidence with (Emacs) Lisp. I used to have a hacked up (my-find) function that worked reasonably well but was a bit flaky and capable of missing stuff in other languages. It turns out it's faster to ask &lt;strong&gt;git&lt;/strong&gt; a lot of these questions if your working …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I continue to gain confidence with (Emacs) Lisp. I used to have a hacked up (my-find) function that worked reasonably well but was a bit flaky and capable of missing stuff in other languages. It turns out it's faster to ask &lt;strong&gt;git&lt;/strong&gt; a lot of these questions if your working in a source controlled environment. A quick hack later and &lt;em&gt;f5&lt;/em&gt; magically does that if it sees a .git directory when I start up. I feel I can justify mentioning the language on my CV :-)&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Rhythmbox Shuffle</title><link href="https://www.bennee.com/~alex/blog/2008/01/30/960/" rel="alternate"></link><published>2008-01-30T12:41:00+00:00</published><updated>2008-01-30T12:41:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2008-01-30:/~alex/blog/2008/01/30/960/</id><summary type="html">&lt;p&gt;It seems I'm not the only one unconvinced by Rhythmbox's shuffle mode. No sooner I mention it on the local IRC than one of my colleges points at some work he &lt;a class="reference external" href="http://mail.gnome.org/archives/rhythmbox-devel/2007-December/msg00146.html"&gt;did over Christmas&lt;/a&gt;. While I've not got time to start running around patching my work box with a suitable …&lt;/p&gt;</summary><content type="html">&lt;p&gt;It seems I'm not the only one unconvinced by Rhythmbox's shuffle mode. No sooner I mention it on the local IRC than one of my colleges points at some work he &lt;a class="reference external" href="http://mail.gnome.org/archives/rhythmbox-devel/2007-December/msg00146.html"&gt;did over Christmas&lt;/a&gt;. While I've not got time to start running around patching my work box with a suitable new version I am now using the &amp;quot;hidden feature&amp;quot; of clicking Shuffle and Repeat which turns on the true random mode rather than the list based mode which is somehow flawed. According to Dave he's looked at the shuffle code which looks right and should ensure every song is played only once before it is regenerated. However the last few days I've been having repeating songs within 4 or so hours and my library is somewhere in the region of 8000 songs. It's been posited the list is either wrong or being regenerated too often. I'll add it to the list of things to look at should I ever have time.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>More commentary than code</title><link href="https://www.bennee.com/~alex/blog/2007/10/29/932/" rel="alternate"></link><published>2007-10-29T17:23:00+00:00</published><updated>2007-10-29T17:23:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2007-10-29:/~alex/blog/2007/10/29/932/</id><content type="html">&lt;p&gt;Yet another &lt;a class="reference external" href="http://git.kernel.org/?p=git/git.git;a=commitdiff;h=fd0b9594d0c2bb50469bfc1481ea4395b7a76548"&gt;small nugget&lt;/a&gt; of code has gone into a public source tree. When I get a chance I'll have to fix up the one that &lt;a class="reference external" href="http://thread.gmane.org/gmane.comp.version-control.git/55901/focus=55913"&gt;didn't make it&lt;/a&gt;.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Trashing the OS of "Developers"</title><link href="https://www.bennee.com/~alex/blog/2007/09/11/915/" rel="alternate"></link><published>2007-09-11T19:41:00+01:00</published><updated>2007-09-11T19:41:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2007-09-11:/~alex/blog/2007/09/11/915/</id><summary type="html">&lt;p&gt;Sun would really like &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Solaris_%28operating_system%29"&gt;Solaris&lt;/a&gt; to re-capture the hearts of developers since loosing so many to &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Linux"&gt;Linux&lt;/a&gt;. They are certainly making strides in the right direction with their Open Source strategy. However sometimes the creakiness of the code does show up.&lt;/p&gt;
&lt;p&gt;I've spent the best part of the day trying …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Sun would really like &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Solaris_%28operating_system%29"&gt;Solaris&lt;/a&gt; to re-capture the hearts of developers since loosing so many to &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Linux"&gt;Linux&lt;/a&gt;. They are certainly making strides in the right direction with their Open Source strategy. However sometimes the creakiness of the code does show up.&lt;/p&gt;
&lt;p&gt;I've spent the best part of the day trying to get the &lt;a class="reference external" href="http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/stat/mpstat/mpstat.c"&gt;mpstat&lt;/a&gt; command to build and still haven't gotten any closer. One of the reasons is you can't quite build things out of the box. Although &lt;a class="reference external" href="http://en.wikipedia.org/wiki/GNU_Compiler_Collection"&gt;gcc&lt;/a&gt; has been shipping in &lt;em&gt;/usr/sfw&lt;/em&gt; for a while you can't just go and start building tools with it. You need a 40 lines of environment variables set up as well as additional &lt;a class="reference external" href="http://opensolaris.org/os/community/on/devref_toc/devref_2/"&gt;packages&lt;/a&gt; installed. Even then the compiler wrapper script can throw up weird and wonderful errors that looks like it really didn't believe you wanted to build with gcc (and not with Sun Studio).&lt;/p&gt;
&lt;p&gt;It's rare in the Linux world that I've not been able to build a random user space command with &lt;em&gt;./configure; make&lt;/em&gt;. It's true that you usually have to specify the installation of gcc when you install a distribution however it's never more than an apt-get/emerge/yum away. Linux is still my favourite development environment.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Network or Playback?</title><link href="https://www.bennee.com/~alex/blog/2007/08/28/911/" rel="alternate"></link><published>2007-08-28T23:26:00+01:00</published><updated>2007-08-28T23:26:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2007-08-28:/~alex/blog/2007/08/28/911/</id><summary type="html">&lt;p&gt;I saw an interesting piece &lt;a class="reference external" href="http://blog.rlove.org/2007/08/those-dang-dpcs-clogging-mmcss.html"&gt;discussing&lt;/a&gt; Microsoft's woes with their band-aid fix for playing multi-media while on a &lt;a class="reference external" href="http://it.slashdot.org/article.pl?sid=07/08/21/1441240"&gt;loaded network&lt;/a&gt;. From the description of the scheduling work around it does seem like a school boy error, you just can't fix performance issues by tweaking priorities.&lt;/p&gt;
&lt;p&gt;Although Linux is still meant …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I saw an interesting piece &lt;a class="reference external" href="http://blog.rlove.org/2007/08/those-dang-dpcs-clogging-mmcss.html"&gt;discussing&lt;/a&gt; Microsoft's woes with their band-aid fix for playing multi-media while on a &lt;a class="reference external" href="http://it.slashdot.org/article.pl?sid=07/08/21/1441240"&gt;loaded network&lt;/a&gt;. From the description of the scheduling work around it does seem like a school boy error, you just can't fix performance issues by tweaking priorities.&lt;/p&gt;
&lt;p&gt;Although Linux is still meant to be trying to fix interactivity issues it's been a long time since I've noticed any conflict between my media players and other tasks such compiling. About the only performance issue I still come across is &amp;quot;morning swap syndrome&amp;quot; when a lot of overnight activity on your machine can lead to it taking a while to &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Virtual_memory"&gt;swap&lt;/a&gt; your open apps back into main memory.&lt;/p&gt;
&lt;p&gt;Of course it's not all totally green on this side of the OS fence. Of the two wireless interfaces on my laptop the old Lucent Gold Card does utilise a rather high amount of processor time when doing large copies. It doesn't interfere with the desktop performance but it is a little disappointing. Looking at /proc/interrupts I can see it would certainly benefit from being able to support a pure poll mode although I suspect the main bottle neck is just the copying of data across the PCMCIA/PCI bridge. It is not yet enough of a bug factor to make me dig into the code though.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>LSB, chkconfig and the frustration of multiple distro support</title><link href="https://www.bennee.com/~alex/blog/2007/06/06/876/" rel="alternate"></link><published>2007-06-06T18:17:00+01:00</published><updated>2007-06-06T18:17:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2007-06-06:/~alex/blog/2007/06/06/876/</id><summary type="html">&lt;p&gt;I've had a frustrating time with getting some of our init scripts working on both &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux"&gt;RHEL4&lt;/a&gt; and &lt;a class="reference external" href="http://en.wikipedia.org/wiki/SUSE_Linux_Enterprise_Server"&gt;SLES10&lt;/a&gt;. The issues have mostly been to RHEL4's less than stellar &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Linux_Standard_Base"&gt;LSB&lt;/a&gt; implementation. Despite having a compatibility header for &lt;em&gt;chkconfig&lt;/em&gt; it still sees the LSB stuff and promptly fails to resolve any of …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I've had a frustrating time with getting some of our init scripts working on both &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux"&gt;RHEL4&lt;/a&gt; and &lt;a class="reference external" href="http://en.wikipedia.org/wiki/SUSE_Linux_Enterprise_Server"&gt;SLES10&lt;/a&gt;. The issues have mostly been to RHEL4's less than stellar &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Linux_Standard_Base"&gt;LSB&lt;/a&gt; implementation. Despite having a compatibility header for &lt;em&gt;chkconfig&lt;/em&gt; it still sees the LSB stuff and promptly fails to resolve any of the dependencies. As we are a 3rd party application we can't exactly tell our customers to install a newer version of &lt;em&gt;chkconfig&lt;/em&gt; which works (which the &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Fedora_core"&gt;Fedora Core 6&lt;/a&gt; one does). It's also a logistic PITA if we start generating separate RPMs for both distros. In the end I took advantage of having the source code for &lt;em&gt;chkconfig&lt;/em&gt; and sprinkling fprintf statements in it until I figured out what it was doing. I managed to craft an appropriate header that works properly on SLES and works (by virtue of understanding the bug in &lt;em&gt;chkconfig&lt;/em&gt;) on RHEL. I far prefer actual application coding.....&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>In the News</title><link href="https://www.bennee.com/~alex/blog/2007/05/08/864/" rel="alternate"></link><published>2007-05-08T11:32:00+01:00</published><updated>2007-05-08T11:32:00+01:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2007-05-08:/~alex/blog/2007/05/08/864/</id><summary type="html">&lt;p&gt;The project I'm currently working on has had it's first &lt;a class="reference external" href="http://www.marketwire.com/mw/release_html_b1?release_id=249380"&gt;Press Release&lt;/a&gt;. There is even a competition being held for people that want to Beta test it when it comes out - although I'm guessing there is a friends and family clause somewhere in there.&lt;/p&gt;
&lt;p&gt;I for one welcome our new …&lt;/p&gt;</summary><content type="html">&lt;p&gt;The project I'm currently working on has had it's first &lt;a class="reference external" href="http://www.marketwire.com/mw/release_html_b1?release_id=249380"&gt;Press Release&lt;/a&gt;. There is even a competition being held for people that want to Beta test it when it comes out - although I'm guessing there is a friends and family clause somewhere in there.&lt;/p&gt;
&lt;p&gt;I for one welcome our new Solaris overlords ;-)&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry><entry><title>Recreational Coding</title><link href="https://www.bennee.com/~alex/blog/2007/02/13/825/" rel="alternate"></link><published>2007-02-13T18:59:00+00:00</published><updated>2007-02-13T18:59:00+00:00</updated><author><name>alex</name></author><id>tag:www.bennee.com,2007-02-13:/~alex/blog/2007/02/13/825/</id><summary type="html">&lt;p&gt;I had an itch to scratch yesterday for which I engaged in a little recreational programming. I'm toying with making this a full project because it seems to be a niche not currently filled by any FLOSS.&lt;/p&gt;
&lt;p&gt;What I need/want is an intelligent configurable auto-sync daemon for my desktop …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I had an itch to scratch yesterday for which I engaged in a little recreational programming. I'm toying with making this a full project because it seems to be a niche not currently filled by any FLOSS.&lt;/p&gt;
&lt;p&gt;What I need/want is an intelligent configurable auto-sync daemon for my desktop. I'm thinking a little above your current &amp;quot;plug your iPod in and iTunes auto syncs functionality&amp;quot;. Features I would be aiming for would be:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Multi-device. A one stop shop where I can configure what happens when I plug in my pen-drive, my music player, my external USB hard-drive.&lt;/li&gt;
&lt;li&gt;Recognise new hardware devices and offer to manage syncing to them. e.g. &amp;quot;I've just seen you plug in a 512Mb USB Pen, would you like to set-up any auto sync stuff? Yes, Later, Never&amp;quot;&lt;/li&gt;
&lt;li&gt;Backup functions: normal rsync or call a script for extra flexibility&lt;/li&gt;
&lt;li&gt;Sync music. The current solutions are sub-optimal as they involve too much manual poking and don't consider small devices well. Features like:&lt;ul&gt;
&lt;li&gt;Where device storage &amp;lt; collection size allow smart selection, remove old tracks/albums to make space for new tracks for example.&lt;/li&gt;
&lt;li&gt;Track twiddling. Examples: Chain tracks on dance albums together into one long file to avoid skipping, transcode Ogg's into Mp3's for broken players.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Intelligent podcast support. Example: Only keep the latest of any program on the device.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anyone want to suggest any other usage cases?&lt;/p&gt;
&lt;p&gt;Luckily I don't think it will be too hard to prototype something up. Gnome already deals with the ickyness of auto-mounting devices. &lt;a class="reference external" href="http://www.freedesktop.org/wiki/Software/dbus"&gt;dbus&lt;/a&gt; provides a neat mechanism to watch for these hotplug events. I can probably hack stuff like file tagging into Nautilus using it's &lt;a class="reference external" href="http://g-scripts.sourceforge.net/"&gt;script interface&lt;/a&gt;. I had a quick play with &lt;a class="reference external" href="http://www.python.org/"&gt;Python&lt;/a&gt; last night and I think it has all the bindings I need. I think it's a small enough project to learn a new language while not being performance critical enough to need a hardcore C implementation.&lt;/p&gt;
</content><category term="misc"></category><category term="development"></category></entry></feed>