<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0">
    <title>Micro ISVs and Enterprise 2.0</title>
    
    <link rel="hub" href="http://hubbub.api.typepad.com/" />
    <link rel="alternate" type="text/html" href="http://simiolus.typepad.com/aduffy/" />
    <id>tag:typepad.com,2003:weblog-1589098</id>
    <updated>2009-11-03T18:16:39+00:00</updated>
    <subtitle>A software developer and small business owner writes about running a small software company and social networking in the enterprise.</subtitle>
    <generator uri="http://www.typepad.com/">TypePad</generator>
    <link rel="self" href="http://feeds.feedburner.com/aduffy" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
        <title>Stateless</title>
        <link rel="alternate" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/11/stateless.html" />
        <link rel="replies" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/11/stateless.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00e55080fa7a88340120a64fa620970b</id>
        <published>2009-11-03T18:16:39+00:00</published>
        <updated>2009-11-03T18:16:39+00:00</updated>
        <summary>Vaclav Klaus, President of the Czech Republic, signed the Lisbon Treaty today, against his better instincts. Since Ireland was told to keep holding referenda on the treaty until it gave the right answer (as with the earlier Nice Treaty), the...</summary>
        <author>
            <name>Andrew Duffy</name>
        </author>
        
        
<content type="xhtml" xml:lang="en-GB" xml:base="http://simiolus.typepad.com/aduffy/">
<div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://www.rte.ie/news/2009/1103/eulisbon.html">Vaclav Klaus, President of the Czech Republic, signed the Lisbon Treaty today</a>, against his better instincts. Since Ireland was told to <a href="http://www.rte.ie/news/2008/1212/eulisbon.html">keep holding referenda on the treaty until it gave the right answer</a> (as with the earlier <a href="http://en.wikipedia.org/wiki/Treaty_of_Nice">Nice Treaty</a>), the Treaty will now come into effect in January 2010.</p>
<p>I am not, and will never be, an EU citizen.</p>
<p>In the past when this country was annexed and people were assigned <a href="http://www.thetrumpet.com/index.php?q=4668.2926.0.0">new duties as citizens of the annexing state</a>, revolution was the result. I don't fancy that, so I think I'll be <a href="http://www.cic.gc.ca/english/index.asp">moving to Canada</a> instead.</p></div>
</content>


    </entry>
    <entry>
        <title>This makes me happy</title>
        <link rel="alternate" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/10/this-makes-me-happy.html" />
        <link rel="replies" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/10/this-makes-me-happy.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00e55080fa7a88340120a662d47a970c</id>
        <published>2009-10-21T10:27:06+01:00</published>
        <updated>2009-10-21T10:27:06+01:00</updated>
        <summary>The finally-more-than-fantasy VASIMR ion thruster + a pebble bed reactor = feasible manned interplanetary flights within our lifetimes. Given that the VASIMR represents an order of magnitude improvement in specific impulse (rocketry's equivalent of fuel efficiency) over chemical rockets, I...</summary>
        <author>
            <name>Andrew Duffy</name>
        </author>
        
        
<content type="xhtml" xml:lang="en-GB" xml:base="http://simiolus.typepad.com/aduffy/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>The finally-more-than-fantasy <a href="http://en.wikipedia.org/wiki/Vasimr">VASIMR</a> ion thruster + a <a href="http://en.wikipedia.org/wiki/Pebble_bed_reactor">pebble bed reactor</a> = <a href="http://www.newscientist.com/article/dn17476-ion-engine-could-one-day-power-39day-trips-to-mars.html">feasible manned interplanetary flights</a> within our lifetimes.</p><p>Given that the VASIMR represents an order of magnitude improvement in specific impulse (rocketry's equivalent of fuel efficiency) over chemical rockets, I wonder if sustained acceleration at a constant 1g, and thus perfect artificial gravity, could be achieved in the next 50 years?</p></div>
</content>


    </entry>
    <entry>
        <title>Dear Mr. Lenihan,</title>
        <link rel="alternate" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/05/dear-mr-lenihan.html" />
        <link rel="replies" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/05/dear-mr-lenihan.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-66765023</id>
        <published>2009-05-14T15:16:36+01:00</published>
        <updated>2009-05-14T15:16:36+01:00</updated>
        <summary>Ireland is in a dire economic situation. The way out of this is realise that the days of large multinationals employing hundreds of thousands of unskilled Irish people to manufacture physical objects are over and that the future of this...</summary>
        <author>
            <name>Andrew Duffy</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Entrepreneurship" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Ireland" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="entrepreneurship" />
        <category scheme="http://sixapart.com/ns/types#tag" term="ireland" />
        
<content type="xhtml" xml:lang="en-GB" xml:base="http://simiolus.typepad.com/aduffy/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>Ireland is in a dire economic situation. The way out of this is realise that the days of large multinationals employing hundreds of thousands of unskilled Irish people to manufacture physical objects are over and that the future of this country is in the hands of small service businesses. With that in mind, please consider some of the following to make it easier to start and run such a company here.</p>
<ul>
<li><strong>Stop treating company directors like criminals.</strong> I am an executive director of a small company. I pay income tax and PRSI every month. My company doesn't pay PRSI for me, but in return I get <a href="http://www.welfare.ie/EN/Publications/sw124/Pages/3WhatsocialwelfarebenefitsdoesmyPRSIpaymentcover.aspx">very few social benefits</a>. Why do I not qualify for the <a href="http://www.revenue.ie/en/tax/it/credits/paye-employee-credit.html">PAYE tax credit</a>? Why do I have to fill out the full Form 11 tax return, <a href="http://www.revenue.ie/en/tax/it/forms/form11e.pdf">the simplified E version</a> of which is 16 pages long (the full version is 22 pages)?</li>
<li><strong>Make it easier to be self employed.</strong> For small companies it is much more straightforward to hire contractors than full employees. Given that a contractor suffers the same tax treatment as a director, why is it impossible to hire a <a href="http://www.irs.gov/businesses/small/article/0,,id=99921,00.html">US-style independent contractor</a> without Revenue deciding that the contractor is actually an employee? Service industry contractors have basically no qualifying expenses, so why do they need to keep accounts and fill out the aforementioned Form 11e?</li>
<li><strong>Encourage small companies to hire staff.</strong> I see you <a href="http://www.citizensinformation.ie/categories/social-welfare/social-welfare-payments/social-welfare-payments-and-work/back_to_work_allow">cancelled the back-to-work allowance</a>. How about a new scheme to replace it? A young, low-turnover company should be exempt from paying employer's PRSI for the first two years of a third-level qualified employee's contract. I'd also suggest that for a period after a contract is signed the new employee's jobseeker's benefit is paid to the company. Surely working for the real economy is better than working for a <a href="http://en.wikipedia.org/wiki/2008_F%C3%81S_expenditure_controversy">travesty like FÁS</a>?</li>
<li><strong>Fix the education system.</strong> <a href="http://www.independent.ie/education/latest-news/our-universities-could-do-better-in-world-ranking-1453676.html">There are no world-class universites in Ireland</a>. If fixing this requires introducing fees and corresponding student loans, so be it.</li>
<li><strong>Fix the company formation incentives.</strong> <a href="http://www.enterprise-ireland.com">Enterprise Ireland</a> is broken. While the international promotion opportunities it offers are of some use, the only companies it is interested in are those with overly aggressive venture capital backed business plans. The city and county enterprise boards are designed for helping plumbers and hairdressers to start companies. The <a href="http://www.revenue.ie/en/tax/it/leaflets/it15.html">Seed Capital Scheme</a> is interesting, but it is only of use to people who have had a liquidity event of some sort like a company sale or large redundancy. The three-year corporation tax exemption is nice, but how many service industry start-ups make taxable profits in their first three years?</li>
</ul></div>
</content>


    </entry>
    <entry>
        <title>The Samuel Beckett Bridge, Dublin</title>
        <link rel="alternate" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/05/the-samuel-beckett-bridge-dublin.html" />
        <link rel="replies" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/05/the-samuel-beckett-bridge-dublin.html" thr:count="1" thr:updated="2009-05-14T09:24:45+01:00" />
        <id>tag:typepad.com,2003:post-66722117</id>
        <published>2009-05-13T15:25:15+01:00</published>
        <updated>2009-05-13T15:25:15+01:00</updated>
        <summary>The new Samuel Beckett Bridge was assembled in the Netherlands and taken to Dublin by sea. However, there is another bridge in the way.</summary>
        <author>
            <name>Andrew Duffy</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Dublin" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="dublin" />
        <category scheme="http://sixapart.com/ns/types#tag" term="east link bridge" />
        <category scheme="http://sixapart.com/ns/types#tag" term="samuel beckett bridge" />
        
<content type="xhtml" xml:lang="en-GB" xml:base="http://simiolus.typepad.com/aduffy/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>The new <a href="http://www.spencerdock.ie/transport/under_way/samuel_beckett_bridge">Samuel Beckett Bridge</a> was assembled in the Netherlands and taken to Dublin by sea. However, there is another bridge in the way.</p>
<p><a href="http://simiolus.typepad.com/.a/6a00e55080fa7a883401156f8e86bf970c-popup" onclick="window.open( this.href, '_blank', 'width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0' ); return false" style="DISPLAY: inline"><img alt="DSCN0079" class="at-xid-6a00e55080fa7a883401156f8e86bf970c " src="http://simiolus.typepad.com/.a/6a00e55080fa7a883401156f8e86bf970c-500wi" /></a> </p>
<p><a href="http://simiolus.typepad.com/.a/6a00e55080fa7a8834011570846938970b-popup" onclick="window.open( this.href, '_blank', 'width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0' ); return false" style="DISPLAY: inline"><img alt="DSCN0084" class="at-xid-6a00e55080fa7a8834011570846938970b " src="http://simiolus.typepad.com/.a/6a00e55080fa7a8834011570846938970b-500wi" /></a> </p>
<p><a href="http://simiolus.typepad.com/.a/6a00e55080fa7a883401156f8e8871970c-popup" onclick="window.open( this.href, '_blank', 'width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0' ); return false" style="DISPLAY: inline"><img alt="DSCN0086" class="at-xid-6a00e55080fa7a883401156f8e8871970c " src="http://simiolus.typepad.com/.a/6a00e55080fa7a883401156f8e8871970c-500wi" /></a> </p>
<p><a href="http://simiolus.typepad.com/.a/6a00e55080fa7a8834011570846a41970b-popup" onclick="window.open( this.href, '_blank', 'width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0' ); return false" style="DISPLAY: inline"><img alt="DSCN0087" class="at-xid-6a00e55080fa7a8834011570846a41970b " src="http://simiolus.typepad.com/.a/6a00e55080fa7a8834011570846a41970b-500wi" /></a> </p>
<p><a href="http://simiolus.typepad.com/.a/6a00e55080fa7a883401156f8e8997970c-popup" onclick="window.open( this.href, '_blank', 'width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0' ); return false" style="DISPLAY: inline"><img alt="DSCN0088" class="at-xid-6a00e55080fa7a883401156f8e8997970c" src="http://simiolus.typepad.com/.a/6a00e55080fa7a883401156f8e8997970c-500wi" /></a> </p></div>
</content>


    </entry>
    <entry>
        <title>Why work for a software start-up?</title>
        <link rel="alternate" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/04/why-work-for-a-software-startup.html" />
        <link rel="replies" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/04/why-work-for-a-software-startup.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-66194681</id>
        <published>2009-04-30T10:38:06+01:00</published>
        <updated>2009-04-30T10:38:06+01:00</updated>
        <summary>A bootstrapped start-up is a great place to work. However, not everyone can start their own – you need to have enough money in the bank to live on for about a year or you'll need to do consultancy work...</summary>
        <author>
            <name>Andrew Duffy</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Business" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Entrepreneurship" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Micro ISV" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="entrepreneurship" />
        
<content type="xhtml" xml:lang="en-GB" xml:base="http://simiolus.typepad.com/aduffy/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>A bootstrapped start-up is a great place to work. However, not everyone can start their own – you need to have enough money in the bank to live on for about a year or you'll need to do consultancy work at the same time, and deal with the overhead of context-switching your brain between consultancy and your company.</p>
<p>The next best thing is to work for a start-up that you don't own. So why should you give up your job in a bank or IBM and work for a start-up you've never heard of?</p>
<ul>
<li><strong>Your job in a big company isn't that secure</strong> – the world is in recession and big companies tend to see expensive developers as an easily reducible cost centre.</li>
<li><strong>Your job may well be more secure in a start-up</strong> – a well-run start-up has much lower costs and inertia than its large competitors. The recession will help to weed out the worst managed and most bloated competitors from the market.</li>
<li><strong>You can influence decisions to a much greater degree</strong>. You get to work closely (in many early-stage cases, across a cubicle partition) from management, making it easier to pitch ideas. Start-ups are also generally more amenable to trying out new tools and languages.</li>
<li><strong><span style="text-decoration: underline;">Good</span> start-ups tend to be run by people who read</strong> <a href="http://www.amazon.co.uk/Peopleware-Productive-Projects-Tom-DeMarco/dp/0932633056/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1241083665&amp;sr=8-1">books about managing programmers</a> and they want their programmers to read books about their craft.</li>
<li><strong>You'll almost certainly get the chance to buy some of the company.</strong> The payday from owning a measurable percentage of a company that gets acquired is spectacular, and will give you the finance to start your own and give the next generation of <a href="http://www.amazon.co.uk/Peopleware-Productive-Projects-Tom-DeMarco/dp/0932633056/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1241083665&amp;sr=8-1">great programmers</a> somewhere to work.</li>
</ul></div>
</content>


    </entry>
    <entry>
        <title>5 Easy Software Usability Tips</title>
        <link rel="alternate" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/02/5-easy-software-usability-tips.html" />
        <link rel="replies" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/02/5-easy-software-usability-tips.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-63220513</id>
        <published>2009-02-23T11:38:47+00:00</published>
        <updated>2009-02-23T11:38:47+00:00</updated>
        <summary>If you sell software without using sales reps, you need to make sure that the short time between downloading a trial and making a decision to proceed or not is as rewarding as possible. Even if you have a sales...</summary>
        <author>
            <name>Andrew Duffy</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Usability" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="software development" />
        <category scheme="http://sixapart.com/ns/types#tag" term="usability" />
        
<content type="xhtml" xml:lang="en-GB" xml:base="http://simiolus.typepad.com/aduffy/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>If you sell software without using sales reps, you need to make sure that the short time between downloading a trial and making a decision to proceed or not is as rewarding as possible. Even if you have a sales force, it's very difficult to change someone's mind if they have decided your software is broken or hard to use.</p>
<ol>
<li><strong>The installer matters.</strong> The installer for your demo is the first thing the customer sees. I've seen installers that <a href="http://simiolus.typepad.com/aduffy/2009/01/why-do-people-pay-for-software.html">fail with cryptic error messages</a>. Often the user is presented with configuration options that can’t possibly be understood by anyone who isn't a developer on the team. Even worse is when the installer simply doesn't work - the software doesn't start and the user has no idea why not. <br />Working on the installer is always a drag at the end of a development cycle, but don't treat it like a punishment and don't give it to the most junior member of the team.</li>
<li><strong>Be consistent.</strong> Use the same control wherever the same input is required. Use the same terminology throughout. If your target market uses particular terms or units, ensure that you use them. Allow the user to specify how times and dates are displayed - using the system default can lead to your software providing an interface in English with dates in French.</li>
<li><strong>Don't break things in upgrades.</strong> Microsoft broke this rule with the introduction of the frustrating <a href="http://en.wikipedia.org/wiki/Ribbon_(computing)">ribbon</a> in Office 2007. If you make a major change to the software that improves usability, don't forget that your existing users already know the old UI. Provide a switch to enable the improvement and turn it on in fresh installs.</li>
<li><strong>Learn from others.</strong> The more software that uses a particular application layout or control the more it becomes understood. Keep a record of the applications you find that have interfaces you liked and let yourself be influenced by them.</li>
<li><strong>Unplug your mouse.</strong> <a href="http://www.adobe.com/macromedia/accessibility/gettingstarted/accessibility.html">More people than you might think have a disability</a>, and one of the common effects of a physical disability is difficulty using a mouse. Many other people simply <a href="http://www.gnu.org/software/emacs/">like using the keyboard</a>. Make sure the tab order of your controls makes sense (a very valuable tip for this is that setting a tab index of -1 on a HTML element removes it from the tab order entirely; use this to disable controls underneath a modal popup window in a web application), and don't create controls that can't be used without a mouse unless there is an alternative way to accomplish the same task.</li>
</ol>
<p>Finally, something not so easy - test your designs on real people. If you can, create mock-ups using pen and paper or <a href="http://www.balsamiq.com/products/mock-ups">specialised software</a> and fake the interaction by moving parts around. When you have anything that works left people loose on it without giving them any hints and watch what they do.</p></div>
</content>


    </entry>
    <entry>
        <title>Why do people pay for software...</title>
        <link rel="alternate" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/01/why-do-people-pay-for-software.html" />
        <link rel="replies" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/01/why-do-people-pay-for-software.html" thr:count="1" thr:updated="2009-01-27T13:20:15+00:00" />
        <id>tag:typepad.com,2003:post-61958466</id>
        <published>2009-01-27T09:42:31+00:00</published>
        <updated>2009-01-27T09:42:31+00:00</updated>
        <summary>... when there is so much available for free? Probably the most important reason is that companies that charge for software pay someone to ensure that it installs properly and has a manual that actually describes the version you're using....</summary>
        <author>
            <name>Andrew Duffy</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Usability" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="open office" />
        <category scheme="http://sixapart.com/ns/types#tag" term="open source" />
        <category scheme="http://sixapart.com/ns/types#tag" term="openoffice" />
        <category scheme="http://sixapart.com/ns/types#tag" term="oss" />
        <category scheme="http://sixapart.com/ns/types#tag" term="usability" />
        
<content type="xhtml" xml:lang="en-GB" xml:base="http://simiolus.typepad.com/aduffy/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>... when there is so much available for free?<br />Probably the most important reason is that companies that charge for software pay someone to ensure that it installs properly and has a manual that actually describes the version you're using.</p>
<p>I upgraded the version of <a href="http://www.gnome.org/~michael/blog/ooo-commit-stats-2008.html">troubled open-source project</a> OpenOffice on my main machine to 3.0 recently. After a lengthy process, the installer spends about ten minutes checking itself. The user is then presented with this:</p>
<p><img alt="OpenOffice 3.0 upgrade error #1" src="http://simiolus.typepad.com/.a/6a00e55080fa7a8834010536fa02d4970c-800wi" /></p>
<p>While it's inexcusable that an upgrade should require the user to shut down Explorer and the quick start utility of its own previous version, this is made worse by being impenetrable to the majority of users. Note the use of the term "process id" and the lack of any description of how to use one to shut down either of these close-button-less processes. I was unwilling to try the "Ignore" button, which is probably related to memories of what horrors invariably happened when you chose that option in <a href="http://en.wikipedia.org/wiki/Abort_Retry_Fail">pre-historic versions of MS-DOS</a>.</p>
<p>The next step was worse. After I did its bidding, the installer started its ten-minute checking procedure again. This time the message was even more obtuse:</p>
<p><img alt="OpenOffice 3.0 upgrade error #2" src="http://simiolus.typepad.com/.a/6a00e55080fa7a8834010536f0822a970b-800wi" /></p>
<p>What?</p>
<p>As one of the 1% or so of users who wouldn't give up at that point, I shut down all those "applications". They included several of the VMware services and a few other things that really shouldn't impede a word processor from installing. This time, the ten-minute check worked, but my patience was gone – converting any important documents I have in OpenOffice's format to Microsoft's .docx is now on my task list.</p></div>
</content>


    </entry>
    <entry>
        <title>Optimisation. Ouch.</title>
        <link rel="alternate" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/01/optimisation-ouch.html" />
        <link rel="replies" type="text/html" href="http://simiolus.typepad.com/aduffy/2009/01/optimisation-ouch.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-61086514</id>
        <published>2009-01-09T09:17:36+00:00</published>
        <updated>2009-01-09T09:17:36+00:00</updated>
        <summary>The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization - For experts only: Don't do it yet. Michael A. Jackson ...premature optimization is the root of all evil. Donald Knuth I'm writing software that,...</summary>
        <author>
            <name>Andrew Duffy</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Programming" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="programming" />
        <category scheme="http://sixapart.com/ns/types#tag" term="SQL" />
        
<content type="xhtml" xml:lang="en-GB" xml:base="http://simiolus.typepad.com/aduffy/">
<div xmlns="http://www.w3.org/1999/xhtml"><blockquote>
<p>The First Rule of Program Optimization: Don't do it.<br />The Second Rule of Program Optimization - For experts only: Don't do it yet.<br /><em>Michael A. Jackson</em></p></blockquote>
<blockquote>
<p>...premature optimization is the root of all evil.<br /><em>Donald Knuth</em></p></blockquote>
<p>I'm writing software that, in its barest essence, manipulates lists of files. Some of those lists are long, and sometimes they need to be sorted. Most of the properties they need to be sorted on are stored in a database. Thus, the records referring to the documents in question need to be loaded from the database.</p>
<p>I don't like databases. To paraphrase an <a href="http://regex.info/blog/2006-09-15/247">unknown person</a> - when faced with a data storage problem, the server applications programmer instinctively reaches for a database; now he has two problems. Therefore, I like to <a href="http://simiolus.typepad.com/aduffy/2008/04/how-you-should.html">wrap them up</a>, often in multiple layers - in this case the loading of document details is done through a document database interface. For some reason, when I wrote this and its SQL implementation (which itself does very little direct database access), I didn't offer a way to load multiple documents at once.</p>
<p>So, when it came to making the control that sorts a list of files work, loading details took far too long - four seconds or so for the results of a search with 14,000 hits. I needed to write that function to load multiple documents at once, so I added one that built a long <code>SQL IN</code> clause, assuming that it would be fast enough and I could do the standard trick of using a few prepared statements with various length lists of parameters in their <code>IN</code> clause later.</p>
<p>It took 14 seconds to load the same set of documents. One query was taking close to four times as long as 14,000 queries to get the same information. Worse, there was no particular reason why I hadn’t simply skipped the step of running 14,000 separate queries - it's blatantly stupid. For once, I hadn't prematurely optimised.</p>
<p>Luckily, databases offer an awkward Swiss army knife in their ability to create temporary tables and use them in joins. <a href="http://www.celko.com/">Joe Celko</a> dislikes these because they turn a set processing system into a batch processing one, and I agree. They also tend to come with a <a href="http://db.apache.org/derby/docs/10.2/ref/rrefdeclaretemptable.html">long list of caveats</a> attached. In this case, creating a table, dumping 14,000 identifiers into it using a batched insert and using it in an <code>INNER JOIN</code> to filter a query takes less than a second, so it's what gets done.</p></div>
</content>


    </entry>
    <entry>
        <title>At last – a Twitter use case I get (nearly)</title>
        <link rel="alternate" type="text/html" href="http://simiolus.typepad.com/aduffy/2008/12/at-last-a-twitter-use-case-i-get-nearly.html" />
        <link rel="replies" type="text/html" href="http://simiolus.typepad.com/aduffy/2008/12/at-last-a-twitter-use-case-i-get-nearly.html" thr:count="1" thr:updated="2008-12-04T15:59:19+00:00" />
        <id>tag:typepad.com,2003:post-59479188</id>
        <published>2008-12-04T11:27:12+00:00</published>
        <updated>2008-12-04T11:27:12+00:00</updated>
        <summary>Twitter left me cold when it was launched. I didn't get the point of a blog that isn't a blog, and agreed with The Register that it was more "Web2.0rhea". Bob Walsh and Patrick Foley talked at length about Twitter...</summary>
        <author>
            <name>Andrew Duffy</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Entrepreneurship" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Micro ISV" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Web/Tech" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="entrepreneurship" />
        <category scheme="http://sixapart.com/ns/types#tag" term="twitter" />
        
<content type="xhtml" xml:lang="en-GB" xml:base="http://simiolus.typepad.com/aduffy/">
<div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://twitter.com">Twitter</a> left me cold when it was launched. I didn't get the point of a blog that isn't a blog, and agreed with The Register that it was more "<a href="http://www.theregister.co.uk/2008/12/02/pownce_dies/">Web2.0rhea</a>".</p>
<p><a href="http://www.47hats.com/">Bob Walsh</a> and <a href="http://twitter.com/patrickfoley">Patrick Foley</a> <a href="http://startuppodcast.wordpress.com/2008/12/02/show-7-joel-spolsky-part-1/">talked at length about Twitter</a> in the most recent episode of their podcast and suggested using the feed-able <a href="http://search.twitter.com/search?q=enterprise+social+bookmarking">Twitter search tool</a> to look for people with the problem your software solves, in much the same way as one would use <a href="http://www.technorati.com/search/enterprise+social+bookmarking">Technorati</a> to look for blog posts about it.</p>
<p>However, unless my understanding of how replying to a tweet works is wrong (i.e., only my own followers will see the reply unless the original tweeter subscribes to a search for @ his own user name), I'm still not sure how to exploit it. Any suggestions?<br /></p></div>
</content>


    </entry>
    <entry>
        <title>Government money == needless complexity</title>
        <link rel="alternate" type="text/html" href="http://simiolus.typepad.com/aduffy/2008/12/government-money-needless-complexity.html" />
        <link rel="replies" type="text/html" href="http://simiolus.typepad.com/aduffy/2008/12/government-money-needless-complexity.html" thr:count="2" thr:updated="2008-12-02T21:38:41+00:00" />
        <id>tag:typepad.com,2003:post-59374768</id>
        <published>2008-12-02T18:57:07+00:00</published>
        <updated>2008-12-02T18:57:07+00:00</updated>
        <summary>Some local examples: It is apparently possible to pay for on-street parking in Dublin using a mobile phone. I say apparently, because you need to pre-register on a website (http://www.mpark.de) that is currently dead. Since a mobile phone is a...</summary>
        <author>
            <name>Andrew Duffy</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Web/Tech" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="software" />
        
<content type="xhtml" xml:lang="en-GB" xml:base="http://simiolus.typepad.com/aduffy/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>Some local examples:</p>
<ul>
<li>It is apparently possible to pay for on-street parking in Dublin using a mobile phone. I say apparently, because you need to pre-register on a website (<a href="http://www.mpark.de/">http://www.mpark.de</a>) that is currently dead. Since a mobile phone is a relatively secure micropayment device, why not print three premium-rate SMS numbers on each meter – one for one hour, one for two hours and one for three? No need for pre-registration, no need for expensive mobile operator location service licences.</li>
<li>For about five years a quango has worked on an <a href="http://www.rpa.ie/its">integrated ticketing system</a> across public transport operators and modes in Dublin with very little to show for it. The model chosen is just about the most complex possible – a prepaid card which must be tagged on and off for each journey, with the possibility of a discount for a second or subsequent journey within a short time. It is likely that there will be no provision for monthly or other passes.<br />The <a href="http://www.dublinbus.ie/">state bus operator</a> has offered a magnetic stripe ticket for a lot more than five years that allows unlimited journeys to start in the 90 minutes after it's first validated. This would be trivial to extend to other modes and operators using a statistical revenue sharing model. Indeed, some cities implement this system entirely manually – the ticket is validated by clipping the date and approximate time off its edge.</li>
<li>Several years ago there was a farcical, aborted attempt to introduce <a href="http://en.wikipedia.org/wiki/Electronic_voting_in_Ireland">electronic voting in Ireland</a>. For once, a required complication was <em>not</em> introduced - the Nedap voting terminals were ordered without printers to allow for a voter-verifiable audit trail. However, the more pressing problem was that it was decided to automate the vote tallying process as well as vote collection.<br />Ireland uses one of the most complex voting systems in the world – <a href="http://en.wikipedia.org/wiki/Single_transferable_vote">single transferable vote</a> with multiple-seat constituencies and random rather than proportional assignment of surpluses.It eventually emerged that the complex tallying software had been <a href="http://www.cev.ie/htm/report/part4_2.htm">continually upgraded during and after testing, right up to the election where it was to be first used</a>.<br />The overlooked simple solution – use electronic terminals (with printers), treat the data collected by each one as a ballot box that supports SQL and perform the tallies by hand.</li>
</ul></div>
</content>


    </entry>
 
</feed><!-- ph=1 --><!-- nhm:dynamic-ssi -->
