<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Squarespace Site Server v5.11.81 (http://www.squarespace.com/) on Mon, 13 Feb 2012 04:30:40 GMT--><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rss="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:cc="http://web.resource.org/cc/"><rss:channel rdf:about="http://vermorel.com/journal/"><rss:title>Joannes Vermorel's blog</rss:title><rss:link>http://vermorel.com/journal/</rss:link><rss:description>Cloud computing, machine learning and startups</rss:description><dc:language>en-US</dc:language><dc:date>2012-02-13T04:30:40Z</dc:date><admin:generatorAgent rdf:resource="http://www.squarespace.com/">Squarespace Site Server v5.11.81 (http://www.squarespace.com/)</admin:generatorAgent><rss:items><rdf:Seq><rdf:li rdf:resource="http://vermorel.com/journal/2012/1/23/goodbye-subversion-you-served-me-well.html"/><rdf:li rdf:resource="http://vermorel.com/journal/2012/1/11/mathjax-at-last-a-decent-way-to-post-maths-on-the-web.html"/><rdf:li rdf:resource="http://vermorel.com/journal/2011/12/20/instant-transfer-with-bitcoin-but-without-3rd-parties.html"/><rdf:li rdf:resource="http://vermorel.com/journal/2011/11/23/lokadcloud-vs-lokadcqrs-tiny-insights-about-the-future.html"/><rdf:li rdf:resource="http://vermorel.com/journal/2011/10/14/oddities-of-machine-learning-software-code.html"/><rdf:li rdf:resource="http://vermorel.com/journal/2011/8/3/bitcoin-thoughts-on-a-nascent-currency-system.html"/><rdf:li rdf:resource="http://vermorel.com/journal/2011/7/4/why-your-company-should-have-a-single-email-address-guest-po.html"/><rdf:li rdf:resource="http://vermorel.com/journal/2011/6/29/squarespace-and-blog-spam-filtering-epic-fail.html"/><rdf:li rdf:resource="http://vermorel.com/journal/2011/6/22/3-features-to-make-azure-developers-say-wow.html"/><rdf:li rdf:resource="http://vermorel.com/journal/2011/6/8/3-low-competition-niches-in-retail-software-guest-post.html"/></rdf:Seq></rss:items></rss:channel><rss:item rdf:about="http://vermorel.com/journal/2012/1/23/goodbye-subversion-you-served-me-well.html"><rss:title>Goodbye Subversion, you served me well</rss:title><rss:link>http://vermorel.com/journal/2012/1/23/goodbye-subversion-you-served-me-well.html</rss:link><dc:creator>Joannes Vermorel</dc:creator><dc:date>2012-01-23T14:43:39Z</dc:date><dc:subject>Software Business svn</dc:subject><content:encoded><![CDATA[<p>I had been a <strong>long time Subversion</strong> user even before I started my company. Since 2006, the data analytics core of Lokad had been managed over SVN which proved to be a very robust piece of software (combined with TortoiseSVN).</p>
<p>We had a few hiccups where the easiest way forward was to delete the local version and check-out again, but otherwise, our <a href="http://hosted-projects.com/">SVN hoster</a>&nbsp;has been <strong>operating flawlessly over 5 years</strong>, which is a <em>long time</em>&nbsp;as far software technology goes.</p>
<p>After more than <strong>13,000 commits over SVN</strong>, we have finally migrated the forecasting core, the 2nd most complex software part, right after <a href="http://abdullin.com/cqrs">accounting and billing</a> :-) toward Git.</p>
<p>Internally, after <strong>hesitating a lot between Mercurial and Git</strong>, we finally opted for Git primarily because of&nbsp;GitHub&nbsp;where we now host our <a href="https://github.com/lokad">open source projects</a>.&nbsp;</p>
<p>There is a bit of nostalgia looking at good old tools depart. I am wondering whether Git will last for the next half-decade, or it will be supplanted by something that will make it look pale in comparison.&nbsp;</p>
<p>My personal take for the next 5 years:&nbsp;<strong>Git will stay but the technology battle will displace itself toward the collaborative tools</strong> that operate over Git (or Hg).</p>]]></content:encoded></rss:item><rss:item rdf:about="http://vermorel.com/journal/2012/1/11/mathjax-at-last-a-decent-way-to-post-maths-on-the-web.html"><rss:title>MathJax, at last a decent way to post maths on the web</rss:title><rss:link>http://vermorel.com/journal/2012/1/11/mathjax-at-last-a-decent-way-to-post-maths-on-the-web.html</rss:link><dc:creator>Joannes Vermorel</dc:creator><dc:date>2012-01-11T09:53:39Z</dc:date><dc:subject>Algorithms Website Usability mathml</dc:subject><content:encoded><![CDATA[<p><script type="text/x-mathjax-config">
  MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
</script> <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script></p>
<p>For a long time, <strong>posting something as simple as a square root on the web has been a major pain</strong>. Despite&nbsp;<a href="http://www.w3.org/Math/">MathML</a>&nbsp;having been around for years,&nbsp;Firefox is still the only browser (that I know of) to <a href="http://www.w3.org/Math/XSL/csmall2.xml">render MathML</a> correctly.</p>
<p>$$p=\Phi\left(\sqrt{2\ln\left(\frac{1}{\sqrt{2\pi}}\frac{M}{H}\right)}\right)$$</p>
<p>Recently, I did stumble upon <a href="http://www.mathjax.org/">MathJax</a>, an <strong>outstanding JavaScript rendering engine for mathematics</strong> that works for all major recent browsers. The syntax is derived from the one of LaTeX, and the output is either MathML (if you have Firefox) or plain HTML/CSS otherwise.</p>
<p>Thanks to MathJax, I have been able to post a long delayed analysis about <a href="http://www.lokad.com/service-level-definition-and-formula.ashx">optimal service levels</a>&nbsp;(that the illustrating formula here above) and <a href="http://www.lokad.com/economic-order-quantity-eoq-definition-and-formula.ashx">economic order quantity</a>. Kudos to the MathJax team!</p>]]></content:encoded></rss:item><rss:item rdf:about="http://vermorel.com/journal/2011/12/20/instant-transfer-with-bitcoin-but-without-3rd-parties.html"><rss:title>Instant transfer with Bitcoin but without 3rd parties</rss:title><rss:link>http://vermorel.com/journal/2011/12/20/instant-transfer-with-bitcoin-but-without-3rd-parties.html</rss:link><dc:creator>Joannes Vermorel</dc:creator><dc:date>2011-12-20T15:01:35Z</dc:date><dc:subject>Algorithms Software Business bitcoin</dc:subject><content:encoded><![CDATA[<p>Bitcoin is a crypto-currency (check out my previous post for some more <a href="http://vermorel.com/journal/2011/8/3/bitcoin-thoughts-on-a-nascent-currency-system.html">introductory thoughts</a>) that provides many desirable properties such as decentralization, very low transaction fee, digital-native, ... However enabling<strong>&nbsp;instant payment</strong>&nbsp;has not been a <em>forte</em>&nbsp;of Bitcoin so far. It's very noticeable that people did even <a href="https://www.bitinstant.com/">raise funds</a> to address this problem with a trusted 3rd party setup.</p>
<blockquote>
<p>In this post, I will try to describe <strong>a convention that would offer instant (1) secure (2) decentralized (3) transactions with Bitcoin (4)</strong>.</p>
</blockquote>
<p>Let's start by clarifying the scope of this claim:</p>
<ol>
<li><strong>Instant</strong>. There is no such thing as <em>real-time</em>&nbsp;on the Internet, if only because of speed of light. Here, I am considering as <em>instant</em>&nbsp;anything <em>below 10 seconds</em>, which would be sufficient for the vast majority of the mundane use of a currency such as shopping.</li>
<li><strong>Secure</strong>. With Bitcoin, a transaction can be propagated in the network within seconds, yet, the transaction only becomes <em>secured</em>&nbsp;- aka with no further possibility of double spending - once the transaction has been included into the blockchain (6 blocks inclusion being the default of the Bitcoin client). Obviously, this requirement<em> somewhat conflicts with the previous one</em>, because 6 blocks represents about 1h on average (10min per block being the target speed of Bitcoin).</li>
<li><strong>Decentralized</strong>. The solution to reconciliate 1 and 2 should not rely on a trusted 3rd party. I hold no grudge against BitInstant, but if a solution exists to do the same thing without middlemen, then I believe it will only make Bitcoin stronger.</li>
<li><strong>Bitcoin</strong>. The solution should preserve the Bitcoin protocol as it exists today, requiring no upgrade of the community, <em>except for those who would like to leverage instant payments</em>. It's a <em>convention</em>&nbsp;in the usage of Bitcoin that I am referring to: it fits into the existing protocol spec. Those who don't want to follow this convention can safely ignore the whole thing.</li>
</ol>
<p><em>Disclaimer: I am neither a cryptograph nor a security expert, merely an enthusiast Bitcoin user.</em></p>
<p>The core idea of my proposal is to introduce a twist in the notion of <em>security</em>: <strong>instead of a strict prevention of double spending, let's make double-spending more expensive that the expected benefit.&nbsp;</strong>Indeed, if double-spending becomes possible but only a steep cost (cost being expressed in Bitcoin too) then there is no incentive to actually make any <strong>widespread</strong> use of the double-spending trick for instant payments. With this twist, we accept the <em>possibility</em>&nbsp;of double spending, but only because it's highly innefficient for the attacker. It will not prevent a&nbsp;<em>crazy</em>&nbsp;attacker to do some damage, but from a global perspective, the overal damage <em>through this twist&nbsp;</em>should stay insignificant (because there are so many <a href="http://www.forbes.com/sites/andygreenberg/2010/09/13/chinese-botnet-sells-point-and-click-cyberattacks/">better ways</a> to wreak havoc anyway if you're willing to spend money on the case).</p>
<p>For the convention that reconcilitate 1, 2, 3 and 4, I use two ingredients:</p>
<ul>
<li>A Bitcoin address that is <em>provably expensive</em>: the setup cost of the address is X BTC.&nbsp;</li>
<li>A mechanism to check that garantees that no double-spending attack to place for the address in the past (blockchain-wise).</li>
</ul>
<p>Usual Bitcoin addresses are&nbsp;<em>quasi-free</em>&nbsp;(the CPU cost to generate a new address is negligible), but it's not difficult to produce a Bitcoin address that comes with a <em>provable</em>&nbsp;cost. The easiest way is go for <em>monetary destruction</em> with a transaction that targets <em>/null</em>.&nbsp;Yet, destroying coins is not entirely satisfying.&nbsp;</p>
<p>Thus, in order to <em>prove</em>&nbsp;the value of the address AX,&nbsp;I propose to have <strong>a transaction, originating from a single address 1A only (only 1 input) that <em>by convention</em>&nbsp;redistribute its value to the <em>coinbase</em>&nbsp;address (*) of&nbsp;10 consecutive blocks</strong>&nbsp;that are less than 1 month old (at the time of the proof).</p>
<p><em>(*) It's the address of the first transaction of the block used by the miner himself to capture its reward.</em></p>
<p>Indeed, we cannot rely on transaction fee alone to <em>prove</em>&nbsp;the cost of address, because a miner could decide to create a ficticious high-fee transaction in a block - fictictious in the sense that the fee would cost nothing to the miner, who would immediately recover the fee through the ownership of the block.</p>
<p>Yet, by targeting 10 <em>consecutive</em>&nbsp;blocks, we prevent any miner to <em>fully</em> self-reward itself with the transaction. Indeed, blocks are assigned based on a lottery where the odds are proportional to the processing power injected in the process. A "smart" miner would be able to target one (**) of his block, lower the cost by 10% which does not compromise the pattern (the cost remains very real).</p>
<p><em>(**) Some super-heavy mining pool, like deepbit, could push the leverage further; but having a single mining operator representing more than 1/2 of the total hashing power of Bitcoin is&nbsp;a big problem for Bitcoin anyway; so I am assuming here that no operator has more than a fraction of the total computing power available</em>.</p>
<p>Then, the <em>1 month old</em>&nbsp;restriction is just there to <strong>increase the odds that the coins do not get lost</strong>. Indeed, since the owner of the targeted addresses do not <em>expect</em>&nbsp;further funds to be pushed on those addresses they may not even monitor them once they have been <em>emptied</em>. Yet, with the 1 month delay, the lucky reward will not stay unnoticed.</p>
<p>Another argument in favor of rewarding the <em>coinbase</em>&nbsp;addresses is that it <strong>increases the incentive on mining efforts</strong>, hence strenghtening Bitcoin as a whole.</p>
<p>Based on the convention established here above, we have now a way to prove that a Bitcoin address did cost at least X BTC to her owner. Yet, we still need a way to be sure that no double-spending attack has already been done.</p>
<p>Here, the intuition is the following: you cannot prevent double-spending with instant payment (aka without block validation), but you can <strong>expose <em>afterward&nbsp;</em>the double-spending attack </strong>which will destroy the trust invested in the <em>provably</em><em>&nbsp;expensive</em> address.</p>
<p>Let Alice be the honest merchant who offer instant Bitcoin payment; let Bob be the bad guy who trying a double-spending attack on Alice.</p>
<p>At the moment of the transaction, Bob gives to Alice the content of the transaction Tx1 that has 1B as input (the address of Bob, proved being expensive) and 1A as output (the address of Alice). Yet, at the very same time, Bob is issuing another transaction Tx2 that empties the address 1B. As a result, after a while, Alice realizes that Tx1 has been rejected.</p>
<p>It's now time for Alice to <em>retaliate</em>&nbsp;by exposing Bob. In order to do that, Alice produces a small dummy transaction to herself where the <strong>transaction Tx1 in recursively embedded as data</strong>&nbsp;though a convention based on <a href="https://en.bitcoin.it/wiki/Script">OP_DROP</a>. (***) Once the transaction Tx1 is exposed, the community of merchants, who like Alice, accept instant transaction withness that 1B cannot be trusted any more because the cumulative effect of the transaction Tx2 going out of 1B and of the <em>exposed</em>&nbsp;transaction Tx1 (which never made its way to the block chain) leads to a negative coin amount on 1B.</p>
<p><em>(***) For the sake of concision I am leaving out the tiny specifics of how exactly should this recursive transaction embedding be implemented. Anyway, based on my understanding of Script, it's perfectly possible to recursively embark a transaction (treated as data) into another transaction.</em></p>
<blockquote>
<p>At this point, we have a system where Bob, the bad guy cannot hurt Alice the merchant (recipient) without getting some retaliation. Yet, what if Alice is a bad merchant and Bob the honest client? Could Alice hurt Bob just for the sake of breaking the community trust into his <em>provably expensive</em>&nbsp;address 1B?</p>
</blockquote>
<p>We need one final touch to the convention <strong>to protect Bob the sender from a false accusation of Alice</strong>. In order to achieve that Bob should make sure each emitted transaction Tx1 from 1B, his <em>provably expensive</em>&nbsp;address, is broadcasted to the network, and not just given to Alice. By doing this, Bob ensures that Tx1 will make its way to the blockchain and prevents Alice to report 1B as dishonest (to be safe Bob is better off putting some transaction fee in Tx1 that guarantees a speedy chain inclusion).</p>
<h3>Implementating the convention</h3>
<p>As far I can tell, the proposal does not involve any breaking change. Ideally, the convention would make its way to the Bitcoin client (or a dedicated fork) to support 3 extra features:</p>
<ul>
<li>Spending BTC to increase the trust level on a particular Bitcoin address.</li>
<li>Performing instant transactions channelled through the "expensive" Bitcoin address.</li>
<li>Reporting the "cost" of the address for the incoming transactions.&nbsp;</li>
</ul>
<p>Then, there is many small details that would need to be polished such as the delay for the community to decide whether trust is lost on an address after being reported. Also, the convention as a whole can also probably be polished further.</p>
<h3>Anonymous payments</h3>
<p>This convention would be one step further is making Bitcoin less anonymous that it is today. Considering the scope of application of instant payments, it does not seem (to me) too much of a problem. If you really want to stay anonymous, then, entering a retail store isn't top notch anyway. Alternatively, for eCommerce, the 1h payment delay is mostly a non-issue (except maybe for pizza delivery).</p>
<h3>In real life</h3>
<p>Instant payments are needed for small purchases: you typically don't need to transfer <strong>both a big amount AND to do it instantly</strong>, it's either or. To accept (or not) whether an instant payment of X BTC made from a proved Y BTC address should go through instantly should be left to the merchant itself.</p>
<p>With a 10 BTC proof, it would reasonable to accept instant payment up to 10 BTC (maybe a bit less assuming a self-serving miner scenario). Coordinating triple-spending (or more)&nbsp;<em>in real life</em>&nbsp;seems complicated (but not impossible) but I seriously doubt people would actually bother for such a complex scheme except to demonstrate its feasability. Indeed, the stakes would be very limited anyway, as anything large would go the usual route of non-instant payments.&nbsp;</p>
<p>Then, looking at <strong>recurring customers payment with the same address</strong> would be also a way to gradually increase the confidence cap (from the merchant viewpoint) for instant payments even without asking the client to increase its proof.</p>
<p>Compared to a rough <strong>2% middleman fee</strong> (based on pricing of BitInstant), I feel that the <em>provably expensive</em> address would be amortized in less than 1 year considering weekly purchase. Not a deal breaker, but still an option probably worth having a look at considering the positive side-effect on the mining side.</p>]]></content:encoded></rss:item><rss:item rdf:about="http://vermorel.com/journal/2011/11/23/lokadcloud-vs-lokadcqrs-tiny-insights-about-the-future.html"><rss:title>Lokad.Cloud vs Lokad.CQRS, tiny insights about the future</rss:title><rss:link>http://vermorel.com/journal/2011/11/23/lokadcloud-vs-lokadcqrs-tiny-insights-about-the-future.html</rss:link><dc:creator>Joannes Vermorel</dc:creator><dc:date>2011-11-23T22:11:38Z</dc:date><dc:subject>.NET Cloud Computing Lokad Lokad Lokad.CQRS Lokad.Cloud</dc:subject><content:encoded><![CDATA[<p>Among the (small) community interested by the software practices of Lokad to develop entreprise software over Windows Azure, <a href="http://lokad.github.com/lokad-cloud/">Lokad.Cloud</a> vs <a href="http://lokad.github.com/lokad-cqrs/">Lokad.CQRS</a> comes as a&nbsp;<a href="https://groups.google.com/forum/#!topic/lokad/LCLUoM2KY78">recurring question</a>.</p>
<p><em>It's a good question, and to be entirely honest, the case is not 100% solved even at Lokad</em>.&nbsp;</p>
<p>One of the core difficulty to address this question is that Lokad.Cloud and Lokad.CQRS come:</p>
<ul>
<li>from different <strong>backgrounds</strong>:     
<ul>
<li>Lokad.Cloud orginates from the hard-core data analytics back-end.</li>
<li>Lokad.CQRS originates from our<em>&nbsp;</em>behavioral apps.</li>
</ul>
</li>
<li>with different <strong>intents</strong>:     
<ul>
<li>Lokad.Cloud wants to simplify hard-core distributed algorithmics.</li>
<li>Lokad.CQRS wants to provide flexibililty, auditability, extensibility (*).</li>
</ul>
</li>
<li>and different <strong>philosophies</strong>:     
<ul>
<li>Lokad.Cloud is a sticky framework, it defines pretty much how your app is architected.</li>
<li>Lokad.CQRS is more a <a href="http://abdullin.com/journal/2011/6/18/lokadcqrs-framework-that-is-designed-for-farewells.html">NoFramework</a>, precisely designed to minimally impact the app.</li>
</ul>
</li>
</ul>
<p><em>(*) without compromising scalability, however scalability is not the primary purpose.</em></p>
<p>Then, historically, <strong>Lokad.Cloud has been developed first</strong>&nbsp;(which is a mixed blessing), and, as we have been moving forward, we have started to <strong>partition into standalone sub-projects</strong>:</p>
<ul>
<li><a href="https://github.com/Lokad/lokad-cloud-storage">Lokad.Cloud.Storage</a>, the O/C mapper (object to cloud), dedicated to the interactions with the Azure Storage.</li>
<li><a href="https://github.com/Lokad/lokad-cloud-apphost">Lokad.Cloud.AppHost</a>, an AppDomain isolation layer to enable dynamic assembly loading within Azure Worker roles (aka reboot a VM with new assemblies in 5s instead of 5min). (**)</li>
<li><a href="https://github.com/Lokad/lokad-cloud-provisioning">Lokad.Cloud.Provisioning</a>, a toolkit for the Windows Azure Management API.</li>
</ul>
<p><em>(**) Lokad.Cloud does not leverage Lokad.Cloud.AppHost yet, it still relyies on a very similar component (which was developed first, and, as such, is not as properly decoupled than AppHost)</em></p>
<p>Those sub-projects end-up combined into <em>Lokad.Cloud</em>&nbsp;but they can be used independently. Both <em>Lokad.Cloud.AppHost</em> and <em>Lokad.Cloud.Provisioning</em> are <strong>fully compatible with Lokad.CQRS</strong>.</p>
<p>The case of <em>Lokad.Cloud.Storage</em> is a bit more complicated because Lokad.CQRS because <strong>Lokad.CQRS already has its own <a href="https://github.com/Lokad/lokad-cqrs/tree/next/Framework/Lokad.Cqrs.Azure">Azure Storage layer</a></strong>&nbsp;which focuses on CQRS-style storage abstractions. In particular, Lokad.CQRS emphasizes <em>interoperable storage abstractions</em>&nbsp;where the local file storage can be used in place of the cloud storage.</p>
<h3>The Future</h3>
<p>As far I can speak for Lokad.CQRS (see the <a href="http://abdullin.com/cqrs">projet boss</a>), the project will keep evolving focusing on <strong>enterprise software&nbsp;practices</strong>, aka not so much what the framework delivers, but rather how it's intended to structure the app. Then, Lokad.CQRS might be completed by:</p>
<ul>
<li>tools at some point such as a&nbsp;<em>maintenance console</em>.</li>
<li>refined storage abstractions (probably <em>event-centric</em> ones).</li>
</ul>
<p>In constrast, Lokad.Cloud will continue its <strong>partitioning process</strong> to become decoupled and more flexible. In particular,</p>
<ul>
<li>the cloud runtime</li>
<li>the service execution strategy</li>
</ul>
<p>are still very heavily coupled to other concepts within the execution framework, and likely candidates for sub-projects of their own.</p>
<h3>Combining Lokad.Cloud and Lokad.CQRS?</h3>
<p>I would not advise to combine Lokad.Cloud (execution framework) with Lokad.CQRS <em>within the same app</em>. At Lokad, we don't have any project that adopts this pattern, and the resulting architcture seems fuzzy.</p>
<p>However, if we consider the sub-projects of Lokad.Cloud, then the combination&nbsp;<em>Lokad.CQRS + Lokad.Cloud.AppHost + Lokad.Cloud.Provisioning </em>does make a lot of sense.</p>
<p>Then, it's possible to adopt a SOA architecture where some <a href="http://vermorel.com/journal/2011/10/14/oddities-of-machine-learning-software-code.html">heavy-duty functional logic</a>&nbsp;gets isolated, behind an API, into the Lokad.Cloud execution framework, while the bulk of the app adopt CQRS patterns through Lokad.CQRS. This pattern has been adopted to some extent at Lokad.</p>]]></content:encoded></rss:item><rss:item rdf:about="http://vermorel.com/journal/2011/10/14/oddities-of-machine-learning-software-code.html"><rss:title>Oddities of machine learning software code</rss:title><rss:link>http://vermorel.com/journal/2011/10/14/oddities-of-machine-learning-software-code.html</rss:link><dc:creator>Joannes Vermorel</dc:creator><dc:date>2011-10-14T13:24:05Z</dc:date><dc:subject>Algorithms Lokad Software Engineering datamining</dc:subject><content:encoded><![CDATA[<p><span class="full-image-float-left ssNonEditable"><span><img src="http://vermorel.com/storage/melting-wall-clock.jpg?__SQUARESPACE_CACHEVERSION=1318597564826" alt="" /></span></span>Developping machine learning software is <em>special</em>. I did already describe a bit <a href="http://blog.lokad.com/journal/2009/5/9/machine-learning-company-whats-so-special.html">how it feels to be in a machine learning company</a>, but let's be a bit more specific concerning the code itself.</p>
<p>One of most <em>shocking</em>&nbsp;aspect of machine learning code is that it tends to be <strong>full of super-short cryptic 1-letter or 2-letter variable names</strong>. This goes completely against the general naming conventions which emphasis <a href="http://msdn.microsoft.com/en-us/library/ms229045.aspx">readability over brievity</a>. Yet, over the years, I have found that those compact names where best <em>for mathematical / statistical / numerical algorithms</em>.</p>
<p>Indeed,</p>
<ul>
<li>Logic is typically overly <em>intricate</em>, with tons of nested loops and seemingly random stopping conditions. Hence, even if the variables were perfectly readable, the logic would remain show-stopper for any fast-reading attempt.</li>
<li>Variables typically hold <em>intermediate computational results</em>, which cannot be associated with 2 or 3 English words without being extremely ambiguous at best. It's not <em>a = OnButtonClick</em>&nbsp;but rather <em>a = InterpolatedDetrendedDeseasonalizedQuantile90PercentsOfPromotionEffects</em>.</li>
</ul>
<p>As a result, extreme variable name brievity makes the code much more compact which in turns makes it easier to understand the logic. It forces the coder digging into the code to<strong> learn by heart&nbsp;the semantic of the variables</strong>&nbsp;(because names are cryptic), but this effort is only marginal compared to the amount of effort to grasp the logic itself anyway.</p>
<p>Then, <strong><a href="http://en.wikipedia.org/wiki/Magic_number_(programming)">magic numbers</a> are all over the place</strong>, frequently inlined with the rest of the code. Again, for non-machine-learning, magic numbers are a big NO-NO, and a cardinal rule of sane software design consist of <em>clear speration between data and logic</em>. Yet, in statistical algorithms, those seemingly random numerical values are the result of the incremental tuning that is necessary to obtain the desired performance and accuracy.</p>
<ul>
<li>There is no benefit in isolating the <em>magic number</em>, because it is used only once.</li>
<li>The actual numerical value is typically more insightful than the variable name. It helps the developer to get a <em>sense</em>&nbsp;of the behavior of the algorithm.</li>
</ul>
<p>Then, it remains a good practice to add a lot of <strong>inline comments</strong> to justify the purpose of the magic numbers, and how they have been optimized.</p>
<p><strong>If your code is super fast, you're probably getting it wrong</strong>. For most machine learning problems, it's better to try to take advantage of the outrageously large amount of processing power available nowadays to improve results. I am not saying that super fast code is bad in itself, but if your code is super fast, then it means that you've got room to go for more complex methods that would consume more resources in exchange for better, more accurate, results.</p>
<p><a href="http://en.wikipedia.org/wiki/Unit_testing">Unit tests</a> are both very handy to validate small block pure-mathematical operations, and yet,&nbsp;<strong>quasi-useless</strong>&nbsp;for the bulk of the machine learning logic. Indeed, when it comes to statistical accuracy, there is no black &amp; white, but only in <em>shades of gray</em>. As long performance is acceptable, the overall accuracy is the only metric that matter. In particular, it happens, from time to time, that a <em>bug</em>&nbsp;- aka a piece of code that does not reflect the original&nbsp;<em>intent</em>&nbsp;of the developer - turns out to behave well over the data. On average, <em>bugs</em> tend to degrade accuracy, but sometime, it just stumbles upon an interesting (and counter-intuitive) behavior.</p>
<p>Finally, <strong>Object-Oriented Programming is still around, but seldom used</strong>:&nbsp;<a href="http://www.nicollet.net/2011/10/functional-programming/">Functional Programming</a> is king. This pattern reflects the fact that the machine learning problem itself, either <a href="http://en.wikipedia.org/wiki/Classifier_(mathematics)">classification</a> or <a href="http://en.wikipedia.org/wiki/Regression_analysis">regression</a> is nothing but trying to build a big complex function to tackle real-world data.</p>]]></content:encoded></rss:item><rss:item rdf:about="http://vermorel.com/journal/2011/8/3/bitcoin-thoughts-on-a-nascent-currency-system.html"><rss:title>Bitcoin, thoughts on a nascent currency system</rss:title><rss:link>http://vermorel.com/journal/2011/8/3/bitcoin-thoughts-on-a-nascent-currency-system.html</rss:link><dc:creator>Joannes Vermorel</dc:creator><dc:date>2011-08-03T20:41:07Z</dc:date><dc:subject>Software Business bitcoin</dc:subject><content:encoded><![CDATA[<p><span class="full-image-float-right ssNonEditable"><span><img src="http://vermorel.com/storage/bitcoin250x248.png?__SQUARESPACE_CACHEVERSION=1312390833656" alt="" /></span></span><a href="http://bitcoin.org/">Bitcoin</a> is a fascinating concept, in short, it's a <strong>crypto-currency backed by nothing other than raw processing power and geeky enthusiasm</strong>. For those who've never heard of it, you can have a look at the introduction provided by the <a href="https://en.bitcoin.it/wiki/Introduction">Bitcoin community itself</a> or by <a href="http://www.economist.com/blogs/babbage/2011/06/virtual-currency">The Economist</a>.</p>
<p>This currency seems to trigger a much <a href="http://falkvinge.net/2011/05/29/why-im-putting-all-my-savings-into-bitcoin/">positive reactions</a>&nbsp;than <a href="http://tav.espians.com/why-bitcoin-will-fail-as-a-currency.html">skeptical ones</a>.&nbsp;My personal stance is very inclined <em>in favor</em> of Bitcoin, and I have invested a conservative amount of Euros in exchange of Bitcoins. Granted, nothing that would too troublesome even considering a 100% loss of value for those Bitcoins.</p>
<p>A lot have been said already about Bitcoin, so I will not go through the routine discussion of pros and cons, but merely make some observations.</p>
<h3>Bitcoin vs Credit Cards and Classical Banking, the long term value</h3>
<p>A good deal of interest in Bitcoin is strictly speculative: people go for Bitcoin thinking they have a good chance of <em>cashing out</em>. Yet, when it comes to evaluate the value of venture of any kind, I am a strong believer of the <a href="http://www.guykawasaki.com/">Guy Kawasaki credo</a>: <strong>does it make sense?</strong> Is the world a better place with Bitcoin than without? Indeed, making a speculative profit is not enough, <strong>Bitcoin has to improve the world in some tangible ways</strong>.</p>
<p>Here I believe that Bitcoin addresses a very deep problem: <strong>how to pay or receive money without involving either an expensive physical process</strong> (meeting and exchanging gold, goods, ...) <strong>or an expensive middleman</strong> (your bank, your credit card operator, PayPal, ...).</p>
<p>To a web entrepreneur, the current banking system looks like a 19th century legacy setup:</p>
<ul>
<li>About 4% (1) of my money gets consumed through system friction.</li>
<li>It takes days (2)&nbsp;to complete anything that does not go through credit cards.&nbsp;</li>
</ul>
<p>(1) Indeed, there are many costs that pills up (rough estimates):</p>
<ul>
<li>0.5%, fees of the consumer bank account (explicit or not),&nbsp;</li>
<li>1%, fees of the credit card owned by the consumer,&nbsp;</li>
<li>2%, merchant fees for any online payment,&nbsp;</li>
<li>0.5%, fees of the merchant for its own bank account.</li>
</ul>
<p>(2) International wire transfers with a bank routing in the middle where a 7 to 10 days delay is pretty much the standard.</p>
<p>And yet, in my experience <strong>there is not so much to be done about this friction</strong>, at least not if you're just <em>Joe the Plumber </em>or a small business. Marginally lowering those costs through negotiations with the bank is possible if you have leverage (that is to say money)&nbsp;<em>and</em>&nbsp;a lot of patience; but some there is so much one can do because both sides (payer and receiver)&nbsp;are paying fees anyway.</p>
<p><strong>The </strong><strong>long-term promise of Bitcoin is to bring down this 4% friction to 0.1% or less</strong>,<strong> and to reduce payment latency from days to minutes</strong>, possibly seconds with a healthy competitive ecosystem of trusted 3rd parties. Indeed, Bitcoin is not natively designed for low latency transactions, but Bitcoin can be complemented by low latency services (backed by Bitcoin) if the need arises.</p>
<p><strong>Anecdotal evidence</strong>: When I purchased Bitcoins on MtGox a few days ago, the sole wire transfer from France to UK cost me about 4% (EUR to <span class="caps">GPB </span>conversion included), plus the transfer took 8 days, because the receiving bank in the UK had a multi-day downtime of one of their system.</p>
<h3>Weaknesses of Bitcoin</h3>
<p>When it comes to assessing the weaknesses of Bitcoin, most people discuss the possibility of breaking the underlying cryptography, or swarming the network with some overwhelming computing power. Yet, Bitcoin has been designed to be <em>natively</em>&nbsp;resilient against this sort of attacks, and very capable people are working hard to make Bitcoin even more resilient. Hence, I am not too worried here: the Bitcoin community is now big enough to make those sort of attacks really complicated.</p>
<p><strong>Anecdotal evidence</strong>: I have tried to mine about 0.01 <span class="caps">BTC </span>through Deepbit.net and on my <span class="caps">GPU </span>enabled laptop it was taking about 30h. Naturally, I gave up before the end of the experiment, as it was pointless to waste further electricity. Bitcoin mining has reached the state of being vastly unprofitable for everyone but the experts, which is good. It means Bitcoin had reached the point of diminishing returns where printing money (aka mining) is only very marginally profitable.</p>
<p>The <strong>most critical threat for Bitcoin is something simpler and stronger: a potential fade of interest</strong>, which may vastly hinder the tooling ecosystem to mature. Fade of interest would not annihilate Bitcoin, but it would make it stagnant. Then, in the innovation trade, being stagnant is the closest thing to being dead.</p>
<p><strong>For the short term</strong> (next few months), my No1 concern is that a tiny few individuals such as the enigmatic <a href="https://en.bitcoin.it/wiki/Satoshi_Nakamoto">Satoshi Nakamoto</a> may possess +100k <span class="caps">BTC </span>(or&nbsp;<a href="http://forum.bitcoin.org/index.php?topic=6825.0">this guy with 370k <span class="caps">BTC</span></a>). And no, the problem is not that the system is <a href="http://forum.bitcoin.org/index.php?topic=24346.0">unfair</a> - being unfair does not hinder economical success,&nbsp;<a href="http://blog.asmartbear.com/unfair-advantages.html">quite the opposite</a> actually. The problem is that each one of those individuals has the power to disrupt the emerging usage of Bitcoin. As a matter of fact, the first Bitcoin market crash was not the result of a weakness within the protocol, but the result of a not-fully-secured wallet within a <a href="https://mtgox.com/press_release_20110630.html">trading system</a>. A lot of early adopters are moving around with thousands of <span class="caps">BTC, </span>and <strong>each one of those, willingly or not, may disrupt the Bitcoin trading by simply getting their wallet stolen</strong>. A similar analysis goes for all the emerging companies supporting the Bitcoin economy that are really lacking the expertise needed to operate properly (ex: the now infamous MyBitcoin.com downtime fiasco). Those bumps are not for the faint hearted, and are likely to slow down the Bitcoin adoption. As time goes, this sort of problem will fade through survival of the fittest, but a couple of Bitcoin crashes should be expected.</p>
<p><strong>For the mid-term</strong> (6 months ahead to 2 years), the most difficult operation will be to <strong>transition the Bitcoin community from <em>mining stage</em> to <em>trading stage</em></strong>, then repeat the process again <strong>from <em>trading stage</em> to <em>end-user stage</em></strong>&nbsp;(see below, for the detail of the phases) - and do those transitions <em>without</em>&nbsp;loosing commitment and enthusiasm of the people who contribute the most to the Bitcoin community. Basically, as long there are smart people enthusiastic about Bitcoin, Bitcoin will keep growing; but the <em>attention sharing economy</em>&nbsp;is a harsh mistress, and the community interest might jump to the next revolutionary idea just as well. See the <a href="http://stage.vambenepe.com/archives/755">law of conservation of hype</a>&nbsp;as a practical illustration.&nbsp;Bitcoin has successfully attracted a horde of miners. Now this horde needs to involve into the next stage, as mining earnings are marginalized.</p>
<p><strong>For the long term</strong> (2 years), assuming Bitcoin interest has not faded already, <strong>direct Government interventions</strong> - for whatever reasons (*) - may <strong>kill the community</strong>. Outlawing Bitcoin would be hard to enforce to its fullest extent, at least if Internet still exists, but flagship companies supporting Bitcoin are easy targets. It would also be easy to spot any company publicly accepting Bitcoin as payment method. Again, the problem is not Bitcoin annihilation - which seems a remote possibility - but rather Bitcoin undergoing a fade of interest if its community has to go underground.</p>
<p>(*) Until 1996, all encryption methods were banned in France, classified a <em>warfare materials</em>.  As a result, encryption usage was close to inexistent despite obvious benefits.</p>
<h3>Assessing a global value for Bitcoin</h3>
<p>Many people looking at Bitcoin make the na&iuml;ve assumption that <em>BTC mined X <span class="caps">USD </span>per <span class="caps">BTC</span></em>&nbsp;gives any reasonable assumption of the overall market value of Bitcoin. This approach is misleading. First, we don't know for sure how many <span class="caps">BTC </span>have been lost already. Super early users were not really treating <span class="caps">BTC </span>as a <em>real</em> currency, and it took more than 2 years for Bitcoin to take off. I suspect that many early casual miners have not properly preserved their wallet. This could account for 1M or 2M <span class="caps">BTC </span>being lost already (warning: this number is vastly unverifiable).</p>
<p><span class="full-image-float-left ssNonEditable"><span><img src="http://upload.wikimedia.org/wikipedia/en/5/5b/Making_Money_Paul_Kidby.jpg?__SQUARESPACE_CACHEVERSION=1312403895238" alt="" /></span></span>Second, those who've read <a href="http://en.wikipedia.org/wiki/Making_Money">Making Money</a>&nbsp; - which I strongly recommend - know that the real long-term backing of any currency is the people behind it, possibly as unwilling taxpayers (but I am digressing). Granted, Bitcoin has no magical Golems backing the protocol, but they have about the next best thing: <strong>a enthusiastic, dispersed and growing community of geeks</strong> working hard to make of Bitcoin a success.</p>
<p>It's not uncommon to see startups with technically sound technologies valued at roughly $1M / employee (just an order of magnitude, <span class="caps">YMMV</span>) for no other reason than tapping into a pool of recognized talents, even if the IP asset itself isn't that valuable.&nbsp;A quick tour on the Bitcoin forums indicates that there are more than <a href="http://forum.bitcoin.org/index.php?action=mlist;sort=posts;start=730">700 people</a> with more than 100 posts on the forum. Granted, all of those are not working full time on making of Bitcoin a success, and all of those people are not <em>talents </em>ether, but considering that this forum does not reflect the entire community either, it gives a rough order of magnitude of the number of people significantly involved.</p>
<p>Then, with companies such as <a href="http://techcrunch.com/2011/07/18/ruxum-wall-street-level-security-comes-to-bitcoin-with-new-exchange/">Ruxum entering the Bitcoin arena</a>, that's <strong>very strong expertise, not mentioning fundraising potential, that is converging to Bitcoin</strong>. I expect those sort of companies to bring the Bitcoin ecosystem to its next stage of maturity.</p>
<h3>Maturity stages of Bitcoin</h3>
<p>Bitcoin is fundamentally a <em>protocol</em>. Its usefulness, and ultimately its economical value, is extremely dependant from the <strong>tooling ecosystem</strong>&nbsp;made available to the community to <em>operate</em>&nbsp;a Bitcoin powered economy. Telling the future of Bitcoin can only be wild guesses at best, but I will try to describe some development stages that represent significant milestones for the Bitcoin ecosystem.</p>
<h4>Bitcoin v0.0 - Mining tools (<em>done</em>)</h4>
<p>By design, the first milestone for Bitcoin was to develop a strong mining community. Indeed, the larger the mining community, the stronger the <span class="caps">P2P </span>protocol against external aggressions. I believe that Bitcoin has reached a point where brute-force attacks are unlikely to succeed, even if <a href="http://www.f-secure.com/weblog/archives/00002207.html">botnets are put to the task</a>. As Bitcoin mining operations have now become extremely greedy in term of computing power (which is a good thing), the mining phase is basically over: no need to worry about mining Bitcoin anymore, mining is taken care of.</p>
<h4>Bitcoin v1.0 - Trading tools (<em>in progress</em>)</h4>
<p>For the years to come, Bitcoin will have to <em>closely</em>&nbsp;operate alongside fiat currencies. Hence, the need for trading platforms that let people convert <span class="caps">BTC </span>into fiat currencies (and vice-versa) will be an ongoing need. The current Bitcoin community is still relying too much on MtGox; the later still being a relatively early stage bunch of scripts. Serious contenders, such a Ruxum, are entering the market, but it will take more companies to consolidate the Bitcoin trading market. Also, classical credit card operators (Visa, MasterCard) are very reluctant in letting anyone operate a bridge from Bitcoin to their system (which is a very reasonable <a href="http://en.wikipedia.org/wiki/Oligopoly">oligopol</a> behavior). Making the purchase of Bitcoins as easy as purchasing a book on Amazon will be the major milestone for the Bitcoin community v1.0.</p>
<h4>Bitcoin v2.0 - End-user tools</h4>
<p>Securing Bitcoins is still <em>complicated</em>&nbsp;and <em>geeky</em>. In short, if your computer is hacked, then Bitcoins sitting on your computer are at risk. For the time being, make sure to setup <a href="https://en.bitcoin.it/wiki/How_to_set_up_a_secure_offline_savings_wallet">an offline wallet</a>. This aspect is a big hindrance for a widespread adoption of Bitcoin. Services such as <a href="http://bitbills.com/">Bitbills.com</a>, that let people <em>print</em>&nbsp;their Bitcoins, is the <em>first generation of user friendly setups</em>, at least as far long-term Bitcoin preservation is concerned. Yet, Bitcoin needs a lot more than that. On the software side, it needs bare-naked OS distributions designed for the sole purpose of securely running the Bitcoin client (with PCs under $250, having a dedicated machine is not that much a problem). Then, on the hardware side, the IT ecosystem is still lacking an&nbsp;<a href="http://superuser.com/questions/306045/how-to-store-small-amounts-of-data-in-the-most-durable-way">extremely durable storage</a>. As low tech as it sounds, printing Bitcoins (aka the Bitbills approach) is still only serious multi-decade persistence method available.  Letting the masses operate Bitcoins as easily as they operate their mobile phones is the v2.0 milestone.</p>
<h4>Bitcoin v3.0 - Merchant tools</h4>
<p>If Bitcoin gets adopted by a sufficiently large amount of people, then it will start getting the interest of retail folks. There are already a few eCommerce out there supporting Bitcoin, but it's still very niche. The design of Bitcoin offers unprecedented opportunities to support&nbsp;<a href="http://en.wikipedia.org/wiki/Micropayment">micropayments</a> that were simply not tractable with classical systems. Indeed, anything below $20 is considered as a micropayment by Visa, and there is no widespread electronic solution out there for payments below $1. In comparison, Bitcoin would easily scale down to $0.01 payments (or rather the equivalent amount in <span class="caps">BTC</span>) with only a marginal friction. Yet, in order to grab those opportunities, it will take some serious Bitcoin-powered merchant systems, as complete automation is required. Offering to any (non-geek) merchant all the tools he/she needs to receive and process Bitcoin payments is the v3.0 milestone.</p>
<h4>Bitcoin v4.0 - Enterprise tools</h4>
<p>No matter the success of Bitcoin, large companies will probably be among the latest entrants in the Bitcoin economy. In order to make Bitcoin useable in corporate environments, it will require a <em>lot</em> of support from the software industry. For example, there is nothing yet in the Bitcoin software ecosystem that would enable an enterprise to grant rights to people to operate within spending quota, possibly requesting multiple approvals if a spending goes over a certain threshold. Naturally, the same Bitcoin system would also need to be seamlessly integrated into the primary accounting system in order not to drive nut both accountants and auditors. Getting Bitcoin corporate-proof is the v4.0 milestone.</p>
<h3>So what next?</h3>
<p>Bitcoin is still in the middle of <em>trading stage </em>but,&nbsp;for those who are inclined in giving Bitcoin a chance to establish a very low-friction currency system, the most simple contribution is not to purchase Bitcoins, but simply to start accepting Bitcoin, which is exactly what <a href="http://blog.lokad.com/journal/2011/8/3/bitcoins-accepted-10-off-for-btc-payments.html">my company, Lokad.com, started doing</a>.</p>]]></content:encoded></rss:item><rss:item rdf:about="http://vermorel.com/journal/2011/7/4/why-your-company-should-have-a-single-email-address-guest-po.html"><rss:title>Why your company should have a single email address (guest post)</rss:title><rss:link>http://vermorel.com/journal/2011/7/4/why-your-company-should-have-a-single-email-address-guest-po.html</rss:link><dc:creator>Joannes Vermorel</dc:creator><dc:date>2011-07-04T20:50:38Z</dc:date><dc:subject>Guest Posts Social best practices Software Business</dc:subject><content:encoded><![CDATA[<p>My second (ever) guest post has been published today by Jason Cohen, founder at <a href="http://wpengine.com/">WP Engine</a>:&nbsp;<a href="http://blog.asmartbear.com/one-email.html">Why your company should have a single email address</a>. This discussion is mostly based on our experience at <a href="http://www.lokad.com/">Lokad</a>, I will address of concerns expressed in both the comments on the original post and on the <a href="http://news.ycombinator.com/item?id=2726548">Hacker News discussion</a>.</p>
<p><strong>This is not an email problem, but a CRM problem</strong>. <em>Very true</em>. The secret ingredient to make <em>single email</em>&nbsp;work is, I believe, a CRM such as&nbsp;<a href="http://www.relenta.com/">Relenta</a> (or their next best alternative). Yet, most CRMs completely miss the point and ignore that email plays a central part in B2B nowadays. If sales people are expected to manually <em>feed</em>&nbsp;the CRM, then as I far I have been able to observe, the amount of data <em>actually</em>&nbsp;entered into the CRM is a small fraction <em>at best</em> of all the information that travels through emails.</p>
<p><strong>Non-issue if sales properly update support and vice-versa</strong>. As I was pointing out in the original post already, the world is full of <em>greyish</em> situations. Boundaries within sales / support / billing ... are far from being <em>airtight</em>. The problem with early partitioning is that it vastly hinders your company to even realize how much overlapping there is between those subjects. Don't under estimate the pain you're inflicting your prospects and clients by letting <em>them</em>&nbsp;to decipher which is the <em>right</em>&nbsp;address for their question.</p>
<p><strong>Triage becomes the bottleneck, it won't scale</strong>. If the setup is properly done, then <em>everybody</em>&nbsp;is responsible for the triage whenever there is nothing more urgent to do. Hence, you don't end-up with iddle folks just waiting for the <em>triage</em>&nbsp;team to do its job; if they are iddle, they give a hand to triage. One of the most direct consequence of <em>triage</em>&nbsp;is that precisely it <em>reduces</em> email processing bottlenecks, and <em>let you scale</em> efficiently with a growing staff.</p>
<p><strong>We are not comfortable passing sensitive information that way</strong>. Email is - by design - an extremely insecure medium. Not because of the technology, but because of the social practices that surround it. Your company can either ignore or embrace this fact. Then again, they are exceptions. As I was also pointing out, at Lokad, we kept our personal mailboxes. If a discussion with a competitor has to take place about a potential acquisition of the company, then yes, it will <em>not</em>&nbsp;go through the shared setup. But how many of such emails do you get? The fraction is simply negligible.</p>]]></content:encoded></rss:item><rss:item rdf:about="http://vermorel.com/journal/2011/6/29/squarespace-and-blog-spam-filtering-epic-fail.html"><rss:title>Squarespace and blog spam filtering: epic fail</rss:title><rss:link>http://vermorel.com/journal/2011/6/29/squarespace-and-blog-spam-filtering-epic-fail.html</rss:link><dc:creator>Joannes Vermorel</dc:creator><dc:date>2011-06-29T12:27:58Z</dc:date><dc:subject>Software Business Software Engineering Website Usability spam</dc:subject><content:encoded><![CDATA[<p><span class="full-image-float-left ssNonEditable"><span><img src="http://vermorel.com/storage/zombies.jpg?__SQUARESPACE_CACHEVERSION=1309349609235" alt="" /></span></span><br />Yesterday for the 10th time or so, I have been <strong>sending a ticket to Squarespace -&nbsp;</strong>the company hosting this very blog - support to <strong>improve their abysmal spam filter</strong> (inexistent actually)&nbsp;for blog comments. This is rather frustrating esperience to delete about 10 spam comments on a daily basis just because Squarespace can't manage to do things right in this area. Worse, people have been <a href="http://blog.asmartbear.com/switch-to-wordpress.html">quitting Squarespace for years</a> for this very reason - spam comment being the No1 reason quoted for the change.</p>
<p>The issue is even more infuriating when you consider that:</p>
<ul>
<li>It is <strong>common knowledge</strong> that, when designing software for the web you have to <a href="http://www.codinghorror.com/blog/2008/05/designing-for-evil.html">design for evil</a>. Even if 99.9% of the worldwide population is perfectly harmless, the remaining 0.1% can be an extreme painful, and serious measures should taken in this area. Squarespace despite all the good stuff they keep delivering (such as their dedicated iPad app) seems to be simply blind to this issue.</li>
<li>Squarespace raised <a href="http://techcrunch.com/2010/07/13/squarespace-raises-38-5-million-from-accel-index-ventures/">$38.5M from Accel, Index Ventures</a>. How is it possible that the VC company that has also <a href="http://www.accel.com/news/news_one_up.php?news_id=1">funded Facebook</a> is not able to <strong>provide a hint of feedback to the management</strong> of Squarespace concerning a burning issue that is likely to endanger their own investment.</li>
</ul>
<p>The feedback from the Squarespace support has always two properties:</p>
<ul>
<li><strong>Extremely fast</strong>, my tickets are addressed within minutes.</li>
<li><strong>Extremely useless</strong>, canned answers constantly suggest trivial but vastly unsatisfying solutions.</li>
</ul>
<p><em>In a way, this is not very different from the blog spam content I am trying to get rid of. Hence, I am wondering support replies would actually be reported as spam by a decent spam filter; but I digress.</em></p>
<p>When it comes to customer support KPI, speed of answer isn't everything. What really matter is to make sure that <strong>every problem gets addressed at <a href="http://www.joelonsoftware.com/items/2008/01/22.html">multiple levels</a></strong>. Solving the immediate problem is only the tip of the iceberg, you have to go for the root cause. In the present case, suggesting to&nbsp;<strong>disable comments is not an acceptable solution</strong>.</p>
<p>Also, the support staff has been claiming for several years that<strong> Squarespace is investing a lot of efforts in fixing the spam problem</strong>. The worst part is that <em>it might actually be true</em>.</p>
<p>Indeed, spam filtering is a <strong>machine learning problem</strong>. The fundamental issue with machine learning problems is that <a href="http://blog.lokad.com/journal/2009/5/9/machine-learning-company-whats-so-special.html">unless your company is 100% dedicated to the problem, it can't be solved</a>. Period. (*)</p>
<p>As far spam filtering <a href="http://akismet.com/">Aksimet</a> has been around for years. Last time I checked their technology, it was downright excellent; and their pricing is so agressive it's a non issue (about $0.001 per comment for the enterprise package).&nbsp;<strong>Squarespace does not even have the excuse that no good dedicated tech is readily available</strong>.&nbsp;</p>
<p>At this point, the only reasonable explanations for this situation is either <strong>carelessness or ego</strong>, the later being more likely. Since dealing with support is useless, <strong>let's see if I get some non-zombie feedback from Squarespace</strong>&nbsp;here.</p>
<p>(*) For large companies, very compartimented branches work too, a good example being the&nbsp;<a href="http://en.wikipedia.org/wiki/Kinect">Kinect</a> software by Microsoft.</p>]]></content:encoded></rss:item><rss:item rdf:about="http://vermorel.com/journal/2011/6/22/3-features-to-make-azure-developers-say-wow.html"><rss:title>3 features to make Azure developers say "wow"</rss:title><rss:link>http://vermorel.com/journal/2011/6/22/3-features-to-make-azure-developers-say-wow.html</rss:link><dc:creator>Joannes Vermorel</dc:creator><dc:date>2011-06-22T21:53:42Z</dc:date><dc:subject>Cloud Computing azure cloudcomputing</dc:subject><content:encoded><![CDATA[<p><strong><span class="full-image-float-left ssNonEditable"><span><img src="http://vermorel.com/storage/monster-truck.jpg?__SQUARESPACE_CACHEVERSION=1308777961238" alt="" /></span><span class="thumbnail-caption" style="width: 347px;">Wheels that big aren't technically required.</span></span>The power of the "wow" effect seems frequently under-estimated by analytical minds</strong>. Nearly a decade ago, I remember a time when <a href="http://www.zdnet.com/news/get-ready-for-color-screen-cell-phones/123848">analysts where predicting</a> that <em>the adoption color screens on mobile phones would take a while to take off as color was serving no practical purposes</em>.</p>
<p>Indeed, color screens arrived several years <em>before</em> the widespread bundling of cameras within cell phones. Then, at present day, there are still close to zero mobile phone features that actually <em>require</em>&nbsp;a color screen to work in smooth condition.</p>
<p>Yet, I also remember that the first reaction of practically every single person holding a phone with color screen for the first time was simply:&nbsp;<strong>wow, I wan't one too</strong>; and <strong>within 18 months or so, the world had upgraded from grayscale screens to color screens, nearly without any practical use</strong>&nbsp;for color justifying the upgrade (at the time, mobile games were inexistent too).</p>
<p><em>Windows Azure is a tremendous public cloud</em>, probably one of the finest product released by Microsoft, but frequently I feel Azure is underserved by a <strong>few items that trigger something close to an anti-wow effect in the mind of the developer</strong>&nbsp;discovering the platform.&nbsp;In those situations, I believe Windows Azure is failing at winning the<em>&nbsp;heart</em>&nbsp;of the developer,<em> </em>fostering adoption out of sheer enthusiam.</p>
<h3>No instant VM kick-off</h3>
<p>With Azure, you can compile your .NET cloud app as an Azure package - weighting only a few MB - and <em>drap &amp; drop</em> the package as a <em>live</em>&nbsp;app on the cloud. Indeed, on Azure, you don't deploy a bulky OS image, you deploy an <em>app</em>, which is about 100x smaller than a typical OS.</p>
<p>Yet, when booting your cloud app takes <em>a minima</em>&nbsp;<strong>7 mins</strong>&nbsp;(according to my own unreliable measurements) to Windows Azure Fabric, even if your app require no more than a single VM to start with.</p>
<p>Here, I believe Windows Azure is missing a big opportunity to impress developers <strong>by bringing their app live <em>within seconds</em></strong>. After all - assuming that a VM is ready on standby somewhere in the cloud - starting an average .NET app does not take more than a few seconds anyway.</p>
<p>Granted, there are <strong>no business case that absolutely&nbsp;<em>require</em>&nbsp;instant app kick-off</strong>, and yet, I am pretty sure that if Azure was capable of that, every single 101 Windows Azure session would <em>start</em>&nbsp;by demoing a cloud deployment. Currently, the 7 mins delay is simply killing any attempt at public demonstration of a Windows Azure deployement. Do you really want to keep your audience waiting for 7 mins? No way.</p>
<p><em>Worse, I typically avoid demoing Azure to fellow developers out of fear of looking stupid facing waiting for 7 mins until my "Hello World" app gets deployed...</em></p>
<h3>Queues limited to 500 message / sec</h3>
<p>One of the most enthusiastic aspect of the cloud is scalability:&nbsp;<strong>your app will not need a complete rewrite every time usage increases from a 10x factor</strong>. Granted, most apps ever written will never need to scale for the lack of market adoption. From a rational viewpoint, scalability is irrelevant for about 99% of the apps.</p>
<p>Yet, nearly <strong>every single developer putting an app in the cloud dreams of being the next Twitter</strong>, and thinks (or rather dreams) about the vast scalability challenges that lie ahead.</p>
<p>The Queue Storage offers a tremendous abstraction to scale out cloud apps, sharing the workload over an arbitrarily large amount of machines. Yet, when looking at the fine print, the hope of the developer is crushed when discovering that the <strong>supposedly vastly scalable cloud queues can </strong><strong>only process 500 messages per second</strong>, which is about 1/10th of what <a href="http://en.wikipedia.org/wiki/Microsoft_Message_Queuing">MSMQ</a> was offering out of the box on server in 1997!</p>
<p>Yes, queues can be <a href="http://partitioncloudqueue.codeplex.com/">partitioned</a>&nbsp;to spread the worload. Yes, most apps will never reach 500 msg / sec. Yet, as far, I can observe looking at community questions raised by adopters of&nbsp;<a href="http://code.google.com/p/lokad-cloud/">Lokad.Cloud</a> and <a href="http://code.google.com/p/lokad-cqrs/">Lokad.CQRS</a>&nbsp;(open source libraries targeting Windows Azure), <strong>queue throughput is a concern raised by nearly very single developer</strong>&nbsp;tackling Windows Azure. This limitation is killing enthusiam.</p>
<p>Again, Windows Azure is missing a cheap opportunity to impress the community. I would suggest to <strong>shoot for no less than 1 million messages / second</strong>. For the record, Sun was already achieving&nbsp;<a href="http://solacesystems.com/news/ipc-sub-400-nanosecond-latency/">3 millions message / sec</a> one&nbsp;on a <em>single</em>&nbsp;quasi-regular server 1 year ago with insane latency constraints. So 1 million is clearly not beyond the reach of the cloud.</p>
<h3>Instant cloud metrics visualization</h3>
<p>One frequent worry about on-demand pricing is: <strong>what if my cloud consumption get out of control?</strong>&nbsp;In the <a href="http://www.lokad.com/">Lokad</a> experience, cloud computing consumption is <em>very</em>&nbsp;predictable and thus, a <em>non-issue</em> in practice. Nevertheless, the fear remains, and is probably&nbsp;dragging down adoption rates as well.</p>
<p>W<strong>hat does it take to transform this "circumstance" into marketing weapon?</strong> Not that much. It takes a cloud dashboard that reports <em>live</em> your cloud consumption, key metrics being:</p>
<ul>
<li>VM hours consumed for the last day / week / month.</li>
<li>GB stored on average for the last day / week / month.</li>
<li>GB transferred In and Out ...</li>
<li>...</li>
</ul>
<p>As it stands, Windows Azure offers a <strong>bulky Silverlight console that takes about 20s to load</strong> on broadband network connection<em>. </em><a href="http://www.codinghorror.com/blog/2011/06/performance-is-a-feature.html">Performance is a feature</a>:&nbsp;<em>not having</em> a lightweight dashboard page is a costly mistake. Just think of developers at <a href="http://www.buildwindows.com/">BUILD</a> discussing their respective Windows Azure consumption over their WP7 phones. With the current setup, it <em>cannot</em>&nbsp;happen.</p>
<p><em>Those 3 features can be dismissed as anecdotal and irrational, and yet I believe that capturing (relatively) cheap "wow" effect would give a tremendous boost to the Windows Azure adoption rate.</em></p>]]></content:encoded></rss:item><rss:item rdf:about="http://vermorel.com/journal/2011/6/8/3-low-competition-niches-in-retail-software-guest-post.html"><rss:title>3 Low-Competition Niches In Retail Software (guest post)</rss:title><rss:link>http://vermorel.com/journal/2011/6/8/3-low-competition-niches-in-retail-software-guest-post.html</rss:link><dc:creator>Joannes Vermorel</dc:creator><dc:date>2011-06-08T18:46:05Z</dc:date><dc:subject>Guest Posts business retail startups</dc:subject><content:encoded><![CDATA[<p>My first guest post (ever)&nbsp;<strong><a title="Permanent link to 3 Low-Competition Niches In Retail&nbsp;Software" rel="bookmark" href="http://successfulsoftware.net/2011/06/08/3-low-competition-niches-in-retail-software/">3 Low-Competition Niches In Retail&nbsp;Software</a>&nbsp;</strong>has been published by Andy Brice on his blog&nbsp;<a href="http://successfulsoftware.net">Successful Software</a>. Special thanks to Andy and his wife for the tremendous polish, they have brought to my initial draft.</p>]]></content:encoded></rss:item></rdf:RDF>
