<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>Planet TW - India</title>
	<link>http://blogs.thoughtworks.com/india/</link>
	<language>en</language>
	<description>Planet TW - India - http://blogs.thoughtworks.com/india/</description>

<item>
	<title>Sriram Narayan: Agile maintenance in a devops world</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-2573791314803665153</guid>
	<link>http://blog.sriramnarayan.com/2010/03/agile-maintenance-support-evolution.html</link>
	<description>&quot;What is an agile way of doing maintenance projects?&quot;, is a common question. An answer like the following is par for the course:&lt;br&gt;&lt;/br&gt;
&quot;It isn't very different from development projects. Write tests to reproduce bugs before you fix them. Treat enhancements as one or more stories. Keep the CI server running. Make sure that changes are occasionally merged from the maintenance branch into trunk. Pairing is probably not as important.&quot;&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
In the context of this post, a 'maintenance' project is one where a client outsources ongoing bug-fixes and enhancements for a live application to an IT vendor (often offshore). Conventional wisdom has it that development is investment (capex) and maintenance is cost (opex). Hence, clients look for much lower billing rates when it comes to maintenance. This results in separate contracts/teams/vendors for development and maintenance. Some clients go a step further and outsource even IT operations to a different team/vendor under a separate contract. The rationale is to stick to core 'business competency' and outsource everything else (let them vendors compete with each other for our slice of IT).&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
Depending on how critical the said application is for revenue generation, this strategy of 'divide-and-conquer-IT' can be frustrating at best and suicidal at worst. The best of the businesses that make most of their money off their websites outsource little to none of their IT. This is simply because you cannot go to market fast enough if you have to orchestrate between three teams/vendors for every new feature. Equally importantly, the feedback loop gets badly constricted at contractual boundaries. Designing formal, SLA driven protocols of communication between business, development, operations and maintenance is a recipe for bureaucracy and indifference.&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
Not everyone can afford not to outsource. It is very difficult to put a good IT team in place. A lot of outsourcing has been a reaction to uncooperative in-house IT. But the solution has gone overboard in trying to compartmentalize development, operations and maintenance. You don't want to be overly reliant on a single vendor? Fair enough, consider outsourcing product A to vendor X, B to vendor Y and C to vendor Z. This is better than outsourcing the development of A, B, C to vendor X, operations to vendor Y and maintenance to vendor Z. The latter model requires well defined, stable interfaces between different constituencies. Not suitable where business is changing every week. It is a repeat of the &lt;a href=&quot;http://dahliabock.wordpress.com/2009/08/06/why-i-think-layer-teams-are-a-bad-idea/&quot; id=&quot;uaek&quot; title=&quot;layered-team&quot;&gt;layered-team&lt;/a&gt; anti-pattern at a higher level.&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
What if we want to deliver a grand SOA? Once the team of architects have specified every service, surely it should be possible to outsource a bunch of services to different vendors and the consuming applications to yet others. Splitting up integration work is extremely risky, in my opinion. Service contracts are rarely cast in stone. On the contrary, if you like the idea of evolutionary, guerrilla SOA, you no longer plan to have stable interfaces - the service evolves in tandem with the needs of its consumers. So, try to give all integration work and important applications to your primary vendor. Better yet, don't do big bang top down integration. Evolve bottom up.&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
On the other hand, it may be that your business doesn't change that often or your application doesn't generate revenue. If so, it is useful to ask &quot;Why build? Why not buy?&quot; every once in a while. SaaS is growing fast. It is likely that someone is offering your bespoke application as a service. At the cost of some tweaks to your business process, you might end up with a better application at lower cost. The SaaS vendor in turn is likely running a full in-house IT.&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
The world has changed yet again. &lt;a href=&quot;http://www.kartar.net/2010/02/what-devops-means-to-me/&quot; id=&quot;eicj&quot; title=&quot;Devops&quot;&gt;Devops&lt;/a&gt; is &lt;a href=&quot;http://www.devopsdays.org/&quot; id=&quot;j89y&quot; title=&quot;gaining&quot;&gt;gaining&lt;/a&gt; currency. These days, a common way of testing the uptake of new features is to divert, say 5% of your traffic to a new deployment and see how it goes. A separate maintenance team is a dinosaur in an age of frequent deployment (&lt;a href=&quot;http://martinfowler.com/bliki/BlueGreenDeployment.html&quot; id=&quot;p98n&quot; title=&quot;blue-green&quot;&gt;blue-green&lt;/a&gt; or otherwise) and &lt;a href=&quot;http://continuousdelivery.com/2010/02/continuous-delivery/#more-61&quot; id=&quot;avvu&quot; title=&quot;continuous delivery&quot;&gt;continuous delivery&lt;/a&gt;.&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
Q. What is an agile way of doing maintenance projects?&lt;br&gt;&lt;/br&gt;
A. Don't do maintenance as a separate project.&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
There is one situation where a maintenance project might make sense. End-of-life support. Basically, you pay for a team to keep an old app running while a new replacement gets built. Other than that, it is all about breaking down silos.&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
Of course, you will never hear Indian IT majors singing this tune. Their recruitment and business model is based on economies of scale. 'Changing businesses' are anathema to their ossified processes. However, in response to changing realities of the marketplace, some of them have begun to sing an agile tune. Some of them even claim to have proprietary, hybrid, high-performance methodologies that &quot;synergize best of breed practices from CMMi, ISO, Six Sigma and Scrum&quot;. I'll explore a certain aspect of this 'synergy' in my next post.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-2573791314803665153?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/9SwlaqwETDw&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Tue, 16 Mar 2010 04:58:29 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Akshay Dhavle: Testing considered wasteful??</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-24663619.post-2092729474224358695</guid>
	<link>http://feedproxy.google.com/~r/agilebusinessanalysis/~3/toQ8G2ZMf5I/testing-considered-wasteful.html</link>
	<description>@silvercatalyst posted on twitter a few days back that one of the trainees in his session counted testing as waste. I retweeted with a #funny but @silvercatalyst said he actually agreed with it. So...&lt;img src=&quot;http://feeds.feedburner.com/~r/agilebusinessanalysis/~4/toQ8G2ZMf5I&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Sun, 14 Mar 2010 11:31:24 +0000</pubDate>
	<author>noreply@blogger.com (Akshay Dhavle)</author>
</item>
<item>
	<title>Sriram Narayan: Pair Programming Payoff</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-113743870613045579</guid>
	<link>http://blog.sriramnarayan.com/2010/03/pair-programming-payoff.html</link>
	<description>&lt;div style=&quot;text-align: justify;&quot;&gt;For a project that runs for, say six months or more, there should no extra development cost on account of pair programming. Period. If there is extra cost, it means pairing is not paying off for you. Pairing should pay off in the following difficult-to-measure ways:&lt;/div&gt;&lt;ol style=&quot;text-align: justify;&quot;&gt;&lt;li&gt;Lesser rework during development on account of misunderstood/ill-defined requirements. These things surface quickly when pairs talk to each other.&lt;/li&gt;
&lt;li&gt;Slight reduction in maintenance cost on account of clearer code. Because every line is now considered readable by at least two people. (more in case of pair rotation)&lt;/li&gt;
&lt;li&gt;A better detail level design results when each pair acts as a sounding board for the other. Good design reduces cost of future change.&lt;/li&gt;
&lt;li&gt;Faster/better process of bringing new team members up to speed.&lt;/li&gt;
&lt;li&gt;Lesser impact of people taking vacations.&lt;/li&gt;
&lt;li&gt;Lesser bugs in QA, UAT&lt;/li&gt;
&lt;li&gt;More hours of focused work per day - however professional someone may be it is natural for concentration to wax and wane. Pairing almost always helps here. &lt;/li&gt;
&lt;li&gt;Unlike the case of no-pairing, there is no separate code-review activity required&lt;br&gt;&lt;/br&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;How do you figure if there is extra cost? Estimate both ways. The total 'release-lifecycle effort' for the case of pairing should not exceed that of no-pairing. Individual stories may indicate greater effort but that is okay. It is very difficult to do controlled experiments to nail this down. There are some &lt;a href=&quot;http://scholar.google.com/scholar?q=pair+programming+study&amp;amp;hl=en&amp;amp;safe=off&amp;amp;esrch=BetaShortcuts&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;oi=scholart&quot; id=&quot;npxf&quot; title=&quot;studies&quot;&gt;studies&lt;/a&gt; but your mileage may vary. &lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;A word of caution when estimating for such comparisons. Remember that on all real projects, actuals mostly exceed estimates. Some of the difference is borne by the client (change control etc) and the rest by the vendor (unpaid overtime etc). You need to have a realistic idea of effort overrun for the case of no-pairing to be able to compare it with the overrun for the case of pairing.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;If pairing is resulting in net higher development cost on a long running project, then it simply means (to paraphrase Kent Beck) that the client is getting XP'd on :)&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-113743870613045579?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/lduBmsaNZ8g&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Sun, 07 Mar 2010 12:36:05 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Akshay Dhavle: Metrics</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-24663619.post-3131660677358554159</guid>
	<link>http://feedproxy.google.com/~r/agilebusinessanalysis/~3/ijQw0XSy3OA/metrics.html</link>
	<description>I have recently come out of a consulting assignment which has given me loads of time to read and think about processes, improvements and effectiveness. (People who follow me on google reader must...&lt;img src=&quot;http://feeds.feedburner.com/~r/agilebusinessanalysis/~4/ijQw0XSy3OA&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Tue, 02 Mar 2010 13:13:15 +0000</pubDate>
	<author>noreply@blogger.com (Akshay Dhavle)</author>
</item>
<item>
	<title>Sriram Narayan: Label activities, not people</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-8042753315652832283</guid>
	<link>http://blog.sriramnarayan.com/2010/02/label-activities-not-people.html</link>
	<description>Ideally, an XP team consists of all talented and experienced people. Every person is assumed to have good communication skills, technical skills, ability to analyze and synthesize, understanding of business drivers, ability to make trade-offs based on business constraints and the ability to work as part of a team. Indeed, there probably are thousands of people who qualify on all these counts scattered around the world. But IT is a pervasive beast. It touches almost every aspect of modern business. IT is also labor intensive. The demand for really good people outstrips supply by a factor of hundred if not more.  IT vendors who practice XP are therefore forced to move away from the ideal of more or less homogeneous poly-skilled teams.&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
Instead, we hire people who have a subset of the above skills and assign them to specific roles in a team. So we have roles like developer, analyst, QA, manager, UX dude/dudette etc. It is essential to recognize that this arrangement is a departure from the ideal - a compromise driven by market reality. How we look at roles depends on our model of the ideal world. If you agree with the XP ideal, then roles are labels attached to the activities on a project. e.g. performance tuning activity needs developer role, activity of scope negotiation needs manager role.&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
But all too often, we lose sight of the ideal and think of roles as labels attached to the people on a project. e.g. person A is a manager, anything she says outside her labeled area of competency should be taken with a pinch of salt, person B is a developer, anything she says outside her labeled area of competency should be taken with a pinch of salt, and so on. We forget that the labeled area of competency is merely a mutual agreement at the time of recruitment. We end up discounting the credibility of people outside their labeled domains.&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
This kind of thinking also magnifies capacity constraints in a team. Say we have 4 people with label QA and 12 people with label developer on a team. What happens when stories start piling up in QA? We are less likely to see if some developers can add temporary capacity to QA. Oh no, that would never do. Developers can't test. They are not wired to test. Mass stereotyping sets in.&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
Soon people start buying into their labels. Developers refuse to test. If you can communicate well, you are suspect as a developer. Managers shy away from writing code, or (shudder) gaining even basic user level technical competence. They go about saying &quot;I can't handle technology&quot;, as if it were a feather in their cap. We become more and more entrenched in the silos created by our labels. Truly ploy-skilled people get disheartened in the process. A person with a label of analyst may have a great aptitude for domain modeling. But her inputs may be sidelined by developers. After a while she either starts believing in her artificial limitations or she starts looking for another job where her skills are more broadly appreciated.&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
It is no good to call everyone consultant and then use a different labeling scheme when it comes to staffing projects. To the extent of their skills, people should get to play multiple roles within a single project. Oh, that complicates staffing. So? Should the tail wag the dog?&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
Organized religion came about partly as a result of our need for identity and self-worth. It is probably reassuring to say &quot;I belong to this group&quot; and then move on to thinking &quot;My group is better than the other group&quot;. We may have outgrown traditional organized religion but we seem to be falling for newer versions.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-8042753315652832283?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/0BIUEfFlJXk&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Mon, 01 Mar 2010 04:08:16 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Sriram Narayan: Fail fast</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-5577962110218818424</guid>
	<link>http://blog.sriramnarayan.com/2010/02/fail-fast.html</link>
	<description>When failure is a possibility, design to fail fast rather than slowly. Doing so reduces the cost/impact of failure. What is equally important, failing fast makes further attempts feasible. Learning from previous failures makes future attempts more likely to succeed. This principle is widely applicable in software development:&lt;br&gt;&lt;/br&gt;
&lt;ol&gt;&lt;li&gt;Methodologies that have fail fast mechanisms baked in are more likely to generate greater ROI. More on this later.&lt;br&gt;&lt;/br&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/interviews/jim-webber-qcon-london&quot; id=&quot;uc1f&quot; title=&quot;Guerilla SOA&quot;&gt;Guerilla SOA&lt;/a&gt; is arguably a fail fast take on big up-front SOA.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.martinfowler.com/ieeeSoftware/failFast.pdf&quot; id=&quot;q93d&quot; title=&quot;Fail fast in code&quot;&gt;Code&lt;/a&gt; that is written to fail fast is likely to be more reliable in production.&lt;/li&gt;
&lt;li&gt;Small, frequent check-ins are likely to cause less overall rework than big, infrequent ones.&lt;br&gt;&lt;/br&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;h4&gt;Verification: When and How?&lt;/h4&gt;But how do you decide at any given checkpoint if we have a success or failure at hand? The quality of verification is crucial. Verification by peer review, while valuable, is prone to oversight. The proof of the pudding is in the eating. The more times you get to eat the better. The analog of eating here is testing functionality. A truly iterative process of software development where functionality gets tested iteratively is likely to achieve better ROI (everything else remaining constant). &lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
&lt;div style=&quot;text-align: left;&quot; id=&quot;r59o&quot;&gt;&lt;img src=&quot;http://docs.google.com/File?id=dd7mw33f_155f29c2qcb_b&quot; style=&quot;height: 128.948px; width: 1024px;&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
Okay, so no one uses waterfall anymore. But we still have projects where big up-front analysis and design are the norm and continuous integration means weekly build. In such cases, we only have limited verification (peer reviews of requirements, design and code) till the very end. Failures (if any) are slow and horrible. &lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
Incremental agile is what almost all XP and Scrum teams follow. They run through the stories for a release doing just enough/just in time analysis, design, coding per story. The boundaries between design and code are often blurred but that is not material to this illustration. Truer verification now becomes possible at the end of every story (QA/customer testing/sign-off). However, each story still gets only attempt. Any changes (learnings?) after that go back into the backlog to be prioritized and taken up with everything else. &lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
But as &lt;a href=&quot;http://www.agileproductdesign.com/blog/dont_know_what_i_want.html&quot; id=&quot;v0vn&quot; title=&quot;Jeff Patton&quot;&gt;Jeff Patton&lt;/a&gt; points out, it is possible to view each story as a series of progressive enhancements:&lt;br&gt;&lt;/br&gt;
&lt;ol&gt;&lt;li&gt;Necessity - core functionality (e.g. user registration)&lt;/li&gt;
&lt;li&gt;Safety - validations etc. (e.g. confirm via email, add a captcha)&lt;br&gt;&lt;/br&gt;
&lt;/li&gt;
&lt;li&gt;Flexibility (e.g. support openID)&lt;/li&gt;
&lt;li&gt;Luxury (e.g. add ajaxy feedback on available userids, password strength)&lt;br&gt;&lt;/br&gt;
&lt;/li&gt;
&lt;/ol&gt;Yeah the example is a bit contrived (openID would mostly be another story even in incremental mode) but you get my drift. We can now design a release plan that allows the team to &lt;i&gt;iterate on a story&lt;/i&gt;, progressively enhancing it. The story sponsor reviews (tests) each story multiple times. Failures (if any) are faster and cheaper. The team learns better. I like this line from a Werner Vogels &lt;a href=&quot;http://queue.acm.org/detail.cfm?id=1142065&quot; id=&quot;ju8-&quot; title=&quot;interview&quot;&gt;interview&lt;/a&gt;:&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
&lt;div style=&quot;margin-left: 40px;&quot;&gt;With a new radical service, you try to go into prototype mode pretty quickly, and then you start iterating on that&lt;i&gt; until you feel that you understand your business problem.&lt;/i&gt;&lt;/div&gt;&lt;br&gt;&lt;/br&gt;
Stories in regular business applications may not qualify as radically new but very often the team is new to the application in question. &quot;You only understand it when you &lt;i&gt;do it&lt;/i&gt;&quot; is a much under-appreciated truth of all knowledge activity (if not all activity).&lt;br&gt;&lt;/br&gt;
&lt;h4&gt;Expected cost/time&lt;/h4&gt;It may be argued that for a given chunk of functionality, iterating increases overall cost/time as compared to doing it in one go. This is only true when the risk of failure is zero. For situations of non-zero risk, the expected cost/time can often be lower with an iterative approach. The table below shows this for a hypothetical but realistic risk profile where risk decreases as learning increases. Your mileage will vary depending on the risk profile of your team and functionality.&lt;br&gt;&lt;/br&gt;
&lt;br&gt;&lt;/br&gt;
&lt;div style=&quot;text-align: left;&quot; id=&quot;rg:q&quot;&gt;&lt;img src=&quot;http://docs.google.com/File?id=dd7mw33f_154cj47txdh_b&quot; style=&quot;height: 160px; width: 645px;&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;h4&gt;Failure is not an option&lt;/h4&gt;Sometimes you get to hear sponsors saying they don't care about downside risk because failure is not an option. Some of these projects run into a death march followed by a blow out followed by movement of key people. Then a new team and a new IT partner get to do it all over again.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-5577962110218818424?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/oWQud0_OrgM&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Fri, 12 Feb 2010 12:59:29 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Akshay Dhavle: Back to the Basics - 1 - The problem</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-24663619.post-1474108710849005411</guid>
	<link>http://feedproxy.google.com/~r/agilebusinessanalysis/~3/2QsOfZRoQmM/back-to-basics-1-problem.html</link>
	<description>Reading Martin's ConversationalStories renewed my confidence in this draft post from about an year ago. I just couldn't put it in the right words and gave up on it. I keep talking about deterministic...&lt;img src=&quot;http://feeds.feedburner.com/~r/agilebusinessanalysis/~4/2QsOfZRoQmM&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Fri, 05 Feb 2010 06:04:09 +0000</pubDate>
	<author>noreply@blogger.com (Akshay Dhavle)</author>
</item>
<item>
	<title>Sriram Narayan: When Agile Estimation becomes pointless</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-7254544669457470713</guid>
	<link>http://blog.sriramnarayan.com/2010/02/pointless-agile-estimation.html</link>
	<description>If a team &lt;i&gt;has to&lt;/i&gt;  deliver a certain amount of functionality by a certain date, then the  act of estimation becomes an act of commitment. The team has essentially  committed to cost, schedule, quality &lt;i&gt;and scope&lt;/i&gt;. There are no  levers left. In such a situation, velocity becomes a target rather than  just a measurement. Targeting velocity makes points based estimation a  charade. The team is better off estimating in real days in this case. It  helps the cause of commitment. Points based estimation is useful when  you agree to the following:&lt;br&gt;&lt;/br&gt;
&lt;ol&gt;&lt;li&gt;Plan the story list for a release  with only about 70% must-have functionality and the rest as negotiable.  This implies it is potentially okay to release (go into production)  with just that 70% functionality.&lt;/li&gt;
&lt;li&gt;By definition, estimates are  approximations. Software estimates are more so.&lt;/li&gt;
&lt;li&gt;It is  counterproductive to insist that your IT vendor/team deliver x points of  functionality by date y. Scope negotiation does not mean x remains x.  Yes, sometimes only the contents of x need change. At other times, x may  become x ± delta. This is not a rip-off. It doesn't make business  sense for your IT vendor to rip you off because you won't give repeat  business if you are ripped off. Without repeat business, your IT vendor  is likely to become uncompetitive because the cost of new business  development is very high.&lt;/li&gt;
&lt;/ol&gt;&quot;Embrace change&quot; is a two way  street. IT delivery team should embrace changes to requirements and  priorities. Clients should also embrace changes to scope when delivery  work proceeds at a different pace than originally expected.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-7254544669457470713?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/M0JJAlcc6NU&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Fri, 05 Feb 2010 03:24:16 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Sriram Narayan: The Tragedy of Commons based Peer Production</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-1930849276560912333</guid>
	<link>http://blog.sriramnarayan.com/2010/01/tragedy-of-commons-based-peer-pro.html</link>
	<description>In my previous &lt;a href=&quot;http://blog.sriramnarayan.com/2010/01/open-source-authors-struggle-for.html&quot; id=&quot;j1pw&quot; title=&quot;Open source authors' struggle for compensation&quot;&gt;post&lt;/a&gt;, I mentioned how authors of small but useful open source projects often struggle for compensation. Using a FOSS/commercial license is one option but it could go either way. They wouldn't really have to resort to compulsory payment if donations were forthcoming from users/organizations who commercially benefit from it. Therein lies the tragedy of 'Commons based Peer Production'. Only a tiny minority donate. This is detrimental to the growth of all forms of free digitial distribution (indy music, books, software etc). It also makes for an unhealthy society. Big leap? Bear with me.&lt;br&gt;&lt;/br&gt;
&lt;div&gt;&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div&gt;The bulk of financial transactions in G20 economies happen between:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Corporations (B2B)&lt;/li&gt;
&lt;li&gt;Corporation and citizen (retail - citizens pays corporation, wages - corporation pays citizen)&lt;/li&gt;
&lt;li&gt;Corporation and state (taxes - corporation pays state, state funded projects - state pays corporation)&lt;/li&gt;
&lt;li&gt;Citizen and state (taxes - citizen pays state, pension/welfare - state pays citizen)&lt;/li&gt;
&lt;/ol&gt;But what about transactions between citizens? When this goes towards zero, we get a unhealthy society. Centralized services, mostly helpless consumers (citizens). Donating money to the creators of 'digital stuff' that we enjoy is a great way of changing the status quo. The internet has provided a great platform for disintermediation but it will only work if we choose to participate in the process.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div&gt;We could also try to build momentum within our organizations towards this. Companies that commercially benefit (however indirectly) from free software could set aside some money annually for donations. The beneficiaries could be decided by a poll within the company. After all, this is also part of CSR. Plus it will make for good PR copy.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-1930849276560912333?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/fuPnSwHPUK4&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Fri, 29 Jan 2010 03:27:14 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Sriram Narayan: Open Source authors' struggle for compensation</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-4039452553093697105</guid>
	<link>http://blog.sriramnarayan.com/2010/01/open-source-authors-struggle-for.html</link>
	<description>&lt;span style=&quot;font-family: Georgia, 'Times New Roman', serif;&quot;&gt;I guess we all know the difference between free as in speech (freedom) and free as in lunch (gratis). All open source software confer certain freedoms of use, modification and redistribution. None of them are required to be made available to users at zero cost. Yet, I don't know of a single significant project that is open source and fully paid, i.e. no version available at zero cost. Reasons typically offered are:&lt;/span&gt;&lt;br&gt;&lt;/br&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;font-family: Georgia, 'Times New Roman', serif;&quot;&gt;&lt;br&gt;&lt;/br&gt;
&lt;/span&gt; &lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;ol style=&quot;margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;li style=&quot;margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;font-family: Georgia, 'Times New Roman', serif;&quot;&gt;It is the freemium business model - Give away the basic software and charge for enhanced functionality or support.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;font-family: Georgia, 'Times New Roman', serif;&quot;&gt;It is not enforceable - Users will simply build the software from the source code and there is no way you can get them to pay.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span style=&quot;font-family: Georgia, 'Times New Roman', serif;&quot;&gt;&lt;br&gt;&lt;/br&gt;
&lt;/span&gt; &lt;br&gt;&lt;/br&gt;
&lt;ol style=&quot;margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;/ol&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Georgia, 'Times New Roman', serif;&quot;&gt;#1 is okay for projects run by companies. It is often not feasible for projects run by individuals. This a big category of small useful pieces of software (think libaries, plugins, utilities). These people try (in vain?) to make some money via advertisements or by appealing for donations. It is a sad reality that they get no compensation from commercial software/organizations using their work. These people should relook at #2.&lt;/span&gt;&lt;br&gt;&lt;/br&gt;
&lt;span style=&quot;font-family: Georgia, 'Times New Roman', serif;&quot;&gt;&lt;br&gt;&lt;/br&gt;
&lt;/span&gt; &lt;span style=&quot;font-family: Georgia, 'Times New Roman', serif;&quot;&gt; &lt;/span&gt;&lt;br&gt;&lt;/br&gt;
&lt;span style=&quot;font-family: Georgia, 'Times New Roman', serif;&quot;&gt;I suspect payment is very enforcable against commercial enterprises. Just add a line to your EULA saying &quot;It is illegal to use this software for commercial purposes without paying for it&quot;. Most companies would pay a small fee (say $50 for a full version but without support) for a useful piece of software. Either that or their lawyers would blacklist the software. At least you wouldn't have legions of freeloaders just using the software without contributing anything (money, bug reports/fixes, documentation) back. The argument that even freeloaders help spread the word to someone who might eventually buy something is a trifle bleak. Of course, all power to you if are doing this altruistically or if you are happy with the other rewards (fun, learning, reputation).&lt;/span&gt;&lt;br&gt;&lt;/br&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;font-family: Georgia, 'Times New Roman', serif;&quot;&gt;&lt;br&gt;&lt;/br&gt;
&lt;/span&gt; &lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;font-family: Georgia, 'Times New Roman', serif;&quot;&gt;Giving software away at zero cost means you have to depend on services for income. You either offer your services as an employee (day job) or as support (adding value to what is given away). Either way, it is a model of pricing input instead of output. Scales only with people. Or you have to fall into a category where you can be adopted by a big foundation like Eclipse or Apache or Mozilla.  Good luck with that.&lt;/span&gt;&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-4039452553093697105?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/Cp6H-C1lsH0&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Mon, 25 Jan 2010 18:25:05 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Sriram Narayan: No software patents versus patent reform</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-7521173614160481974</guid>
	<link>http://blog.sriramnarayan.com/2009/11/no-software-patents-versus-patent.html</link>
	<description>&lt;div class=&quot;MsoNormal&quot;&gt;&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;We often cry ourselves hoarse trying to justify non-waterfall methods of software development saying that software is fundamentally different from manufacturing or civil construction. There is substance to this. Code is design. Compilation (build) is zero cost for all practical purposes. If we agree that compilation is the equivalent of a manufacturing assembly line or brick-laying, then the economics of software development are very different indeed. The economics of software make it particularly vulnerable to the ill-effects ot the current patent regime.&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;I used to find it surprising when highly credible &lt;a href=&quot;http://www.paulgraham.com/softwarepatents.html&quot;&gt;people&lt;/a&gt; said there was nothing fundamentally different about software patents - &quot;If you're against software patents, you're against patents in general.&quot; Until I realized that software patents aren't inherently evil - the devil, as usual, lurks in the details.&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Patents exist to balance competing objectives:&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Encourage innovation&lt;/li&gt;
&lt;li&gt;Give innovators a chance to profit from their success&lt;/li&gt;
&lt;li&gt;Improve the body of knowledge in the public domain (eventually)&lt;/li&gt;
&lt;/ol&gt;&lt;div class=&quot;MsoNormal&quot;&gt;In practice, the second objective is generally met by conferring a twenty year period of exclusive usage rights. Thus, patents are economic devices. Won't the efficacy of an economic device depend on the underlying economics of the industry it is meant for? Do all industries require twenty years to recoup investment and monetize an innovation? It certainly is ridiculous for software. Technology cycles keep getting shorter - twenty years is several generations in most industries today. A two year patent might be more reasonable for software. Of course, that still leaves jokes like the one-click-checkout patent untouched.&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;When patents were first conceived, they were meant for flesh and blood patent holders, not for mere legal persons (Corporations). Corporations gained personhood much later. However, the majority of patents today are held by corporations rather than individuals. This has lead to barely legal behaviors that end up stifling innovation in the industry as a whole.&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;What's really needed is a nimble international body that can tweak the terms of patenting for different industries. But then, international co-operation is hard to come by even for life threatening issues such as climate change. No wonder people push for elimination of software patents instead of push for a better patent regime.&lt;br&gt;&lt;/br&gt;
&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-7521173614160481974?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/8TN3YqkyfEM&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Mon, 25 Jan 2010 11:08:47 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Sidu Ponnappa Kariappa Chonira: On WWRails... finally</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3718956085911858962.post-4874488474111708370</guid>
	<link>http://blog.sidu.in/2010/01/on-wwrails-finally.html</link>
	<description>I'm not sure why I didn't do this long ago, but better late than never, what?&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://www.workingwithrails.com/recommendation/new/person/18353-sidu-ponnappa&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_ABLwpl_AaVo/S0Opntjz9KI/AAAAAAAAAKk/vj-TI9YT1Kg/s320/wwrails.jpg&quot; alt=&quot;&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 240px; height: 90px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5423364875994002594&quot;&gt;&lt;/img&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/3718956085911858962-4874488474111708370?l=blog.sidu.in&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:mtsM-81NTLw&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:cGdyc7Q-1BI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=OLO1sfGlDgQ:6rwZ0z7MIAw:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=OLO1sfGlDgQ:6rwZ0z7MIAw:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=OLO1sfGlDgQ:6rwZ0z7MIAw:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=OLO1sfGlDgQ:6rwZ0z7MIAw:gIN9vFwOqvQ&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/diningtablecoder/~4/OLO1sfGlDgQ&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Tue, 05 Jan 2010 21:15:21 +0000</pubDate>
	<author>noreply@blogger.com (Sidu)</author>
</item>
<item>
	<title>Sachin Dharmapurikar: Things to Ponder with Alfresco (Part III: WCM – Improvements)</title>
	<guid isPermaLink="false">http://thoughtworker.in/?p=93</guid>
	<link>http://thoughtworker.in/2010/01/04/things-to-ponder-with-alfresco-part-iii-wcm-improvements/</link>
	<description>&lt;p&gt;Now days using web content management systems (&lt;a href=&quot;http://en.wikipedia.org/wiki/Web_content_management_system&quot; target=&quot;_self&quot; title=&quot;Wikipedia: Web Content Management System&quot;&gt;WCM&lt;/a&gt;) is trivial. You should continuously update the website content to maintain a fresh look. It increases returning customers and popularity. Almost every major website uses a &lt;a href=&quot;http://en.wikipedia.org/wiki/Content_management_system&quot; target=&quot;_self&quot; title=&quot;Wikipedia: Content Management Systems&quot;&gt;CMS&lt;/a&gt; to achieve this. It might be an in-house developed or an off-the-shelf product. In any case, it helps organizations to separate the content authoring team from the application development cycles.  This helps in quicker content updates without being dependent on release schedules. I am going to point out certain things about WCM feature of alfresco. You can also apply the same principles to your WCM if you are using existing one, or planning to develop a new one!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Content storage format &lt;/strong&gt;- Alfresco provides a nice feature called &quot;web-forms&quot;. There are two types of forms currently available i.e. WCM forms and ECM forms. Both of them capture the input data and store it as XML. You can also choose to apply content transformation using XSL. It helps to save final output as either HTML, Text or PDF etc. Not to forget, the content is actually captured and saved as XML. In my perception one of the strengths of Alfresco is its content repository. If XML is target format, it is saved in CR as a cm:content property and it defeats the whole purpose. If CR is not aware of the structure of the content, it defeats the purpose of content model definition? It is not very different from storing the content xml as plain string in database. Frankly I don't see any benefit of using CR over database in this method.&lt;/p&gt;
&lt;p&gt;To avoid such inefficient use of alfresco, you can take some effort and write a custom form component. Use custom forms (develop forms in your application and then communicate with alfresco using API) to capture user data and store them in content repository in defined content model and schema.&lt;/p&gt;
&lt;p&gt;This will help you in -&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Content repository now understands the structure of your content. This is really important and if you have any doubts, please post that in comments. I might write about it later in my blog.&lt;/li&gt;
&lt;li&gt;You can apply your custom content transformation logic so that content can be exported in XML / HTML / custom output format. Just generate this once every time you update the content. It improves the efficiency of content management system to deliver target content.&lt;/li&gt;
&lt;li&gt; You will have a flexibility of own input format, use JSP or rails forms, its your choice!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Deployment benefits - &lt;/strong&gt; Alfresco has another great strength, Deployment Infrastructure. I think its also one of its weaknesses. Use it wisely to improve your release management. On the release date of web application usually you come across content sanity issues, or format differences. To avoid that, setup proper environments where alfresco can sync content and test it before you push it to live. This might save you a lot of frustration.&lt;/p&gt;
&lt;p&gt;Although its a great feature, there is a caveat to that. Generally all the code for web application is stored in CVS systems. Alfresco code (web scripts, web form definitions etc.) is stored in alfresco. Keeping the versions of alfresco code and web application code is nightmare. Develop some automated web script deployment tool and every time you release, wipe out all the previous webscripts and deploy new ones from the CVS. This always makes you keep updated code in the CVS and versioning becomes much robust.&lt;/p&gt;</description>
	<pubDate>Mon, 04 Jan 2010 15:18:34 +0000</pubDate>
</item>
<item>
	<title>Xiaoming Wang: 你是哪种人？</title>
	<guid isPermaLink="false">http://cid-9d882dabc5a6f6a4.users.api.live.net/Users(-7095370997143505244)/9D882DABC5A6F6A4!699</guid>
	<link>http://satanyork.spaces.live.com/Blog/cns!9D882DABC5A6F6A4!699.entry</link>
	<description>&lt;span style=&quot;color: rgb(51, 51, 51); font-family: Tahoma, Verdana, STHeiTi, simsun, sans-serif; font-size: 12px;&quot;&gt;&lt;h3 style=&quot;margin-top: 0px; margin-right: 30px; margin-bottom: 5px; margin-left: 60px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; font-weight: normal; line-height: 1.4;&quot;&gt;If a person has never quit when it is getting tough, he wouldn't have anything to regret for the rest of his life. &lt;/h3&gt;&lt;div&gt;有时候人不知道在乎些什么。生命其实很短暂，是要短期的快乐还是长期的幸福，始终是个两难的选择。你可以选择一个性格和你类似的人，也可以选择和你互补的人，哪个好谁也说不清楚。有些人喜欢不断的选择，有些人喜欢做了选择之后就不断的应变。当你得到的时候，或许不知道这是不是自己想要的；当你失去的时候也不知道这是不是自己该放弃的。工作，家庭，爱好都是如此。我们每个人是不断选择，不断放弃再不断选择的人还是选择了就从一而终的人呢？有几个人每两年换一个工作？有几个人从来没有过6个月以上的感情？有几个人每年换一个爱好？一个电影里边有上面的那段英文，我很喜欢。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/br&gt;&lt;/div&gt;&lt;div&gt;人如果可以无忧无虑的生活就好了，选择就容易了很多，可惜大部分人没有这个运气。&lt;/div&gt;&lt;/span&gt;</description>
	<pubDate>Tue, 22 Dec 2009 05:08:27 +0000</pubDate>
</item>
<item>
	<title>Sidu Ponnappa Kariappa Chonira: RubyConf India - Call for Proposals</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3718956085911858962.post-4900628086596875028</guid>
	<link>http://blog.sidu.in/2009/12/rubyconf-india-call-for-proposals.html</link>
	<description>The Call for Proposals for &lt;a href=&quot;http://rubyconfindia.org/&quot;&gt;India's first RubyConf&lt;/a&gt; in now on. For information on where and how to submit your proposal, please check &lt;a href=&quot;http://rubyconfindia.org/&quot;&gt;the website&lt;/a&gt;.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;This is a significant milestone to reach when setting up a conference for the first time. There are many people who deserve much appreciation for making this possible, not least all the enthusiastic members of India's Ruby community. A heartfelt thanks to all of you and do come and present; after all it is because of you that the community has gotten this far!&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Please do post this information to any Ruby communities that you are a member of. At this point, publicity is key, so please also blog, tweet, digg and reddit away!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/3718956085911858962-4900628086596875028?l=blog.sidu.in&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:mtsM-81NTLw&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:cGdyc7Q-1BI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=Cf2nEY9ca5o:2V3o_-vzO-g:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=Cf2nEY9ca5o:2V3o_-vzO-g:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=Cf2nEY9ca5o:2V3o_-vzO-g:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=Cf2nEY9ca5o:2V3o_-vzO-g:gIN9vFwOqvQ&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/diningtablecoder/~4/Cf2nEY9ca5o&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Mon, 21 Dec 2009 13:21:58 +0000</pubDate>
	<author>noreply@blogger.com (Sidu)</author>
</item>
<item>
	<title>Jeyageethan A: My follow up to you're listening!</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-2503466352804390526.post-3586217051162990846</guid>
	<link>http://technologiques.blogspot.com/2009/11/my-follow-up-to-youre-listening.html</link>
	<description>&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_HHrekVLvxJY/SvglCRj8gQI/AAAAAAAAAQI/E9ohzyvJ3Tc/s1600-h/xkcd+follow+up.jpg&quot;&gt;&lt;img src=&quot;http://lh6.ggpht.com/_HHrekVLvxJY/SvglCRj8gQI/AAAAAAAAAQI/E9ohzyvJ3Tc/s800/xkcd%20follow%20up.jpg&quot; style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; cursor: hand; width: 560px; height: 280px;&quot;&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;/br&gt;Checkout the original xkcd comic here : &lt;a href=&quot;http://xkcd.com/525/&quot;&gt;http://xkcd.com/525/&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/2503466352804390526-3586217051162990846?l=technologiques.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 09 Nov 2009 14:30:13 +0000</pubDate>
	<author>noreply@blogger.com (Geethan)</author>
</item>
<item>
	<title>Jeyageethan A: Update requires a valid UpdateCommand when passed DataRow collection with modified rows</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-2503466352804390526.post-5792502773681652006</guid>
	<link>http://technologiques.blogspot.com/2008/06/update-requires-valid-updatecommand.html</link>
	<description>&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;This is an error, with which i was dumbfounded for weeks. The problem is simple. I have a DataSet and it automatically generates INSERT command. So i can add rows to the DataSet and update it easily. But whenever i change values in existing rows and update it via TableAdapter, I get this exception &lt;strong&gt;&quot;Update requires a valid UpdateCommand when passed DataRow collection with modified rows&quot;&lt;/strong&gt;. I found inside the generated code that only INSERT command is generated. Whatever i try, the DataSet designer would not create an UPDATE command nor a DELETE command for this TableAdapter.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;strong&gt;Solution 1:&lt;/strong&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;You can select the TableAdapter and write your own query for the update command in the property dialog box. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;But this is not a good idea.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;strong&gt;Solution 2: (Better one)&lt;/strong&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;The problem lies within your table design. Check it out again and check whether you have created a &lt;strong&gt;primary key&lt;/strong&gt; for the table. Mostly this will be the case, as I forgot to create one. Now after creating the primary key, you can recreate the DataSets to get the corresponding UPDATE and DELETE statements.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;But if you do not want a primary key in your table, you may resort to first solution.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Cheers.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/2503466352804390526-5792502773681652006?l=technologiques.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 09 Nov 2009 08:25:57 +0000</pubDate>
	<author>noreply@blogger.com (Geethan)</author>
</item>
<item>
	<title>Jeyageethan A: ToolTip and &quot;Cannot access a disposed object&quot; exception</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-2503466352804390526.post-4367718736463656938</guid>
	<link>http://technologiques.blogspot.com/2008/06/tooltip-and-cannot-access-disposed.html</link>
	<description>&lt;div&gt;&lt;br&gt;&lt;/br&gt;The &quot;Cannot access a disposed object&quot; exception is a nightmare for .NET developers. ;) Sometimes, this exception causes the worst backslash for a development project. And looking at exception details, we will find that the call stack will point to&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&quot;at System.Windows.Forms.Control.CreateHandle()&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt; at System.Windows.Forms.Control.get_Handle()  &quot;&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Or&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&quot;at System.Windows.Forms.Form.CreateHandle()&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt; at System.Windows.Forms.Form.get_Handle()   &quot;&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Since, we do not know from where the problem stems, it becomes a trial-and-error method to find out the source of the problem. After some days of research, I found out the following facts about the problem. Here it goes.&lt;/div&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;strong&gt;Reason : &lt;/strong&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;div&gt;   This exception occurs only when we try to access any disposed object, as it says. But the problem is, we would have never written statements that explicitly access a disposed object! So the real reason would be some unseen code that accesses the disposed Form or Object. In my case, the black sheep was the ToolTip control.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;   I had used the ToolTip to show messages on different forms. But the internal architecture of the ToolTip has been coded by a novice at Microsoft i guess, and its faulty. By going through reflection i found that it uses a variable to store the current form in which it the message is being displayed. I had used the same instance of ToolTip to show messages on other forms too. When I used the ToolTip to show messages on another form after the previous form has been closed, the ToolTip tries to access the form in its private variable (the closed/disposed form)  and boom! It throws the exception!&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;   Another instance where this can happen is - Dockable Container, this happens with ToolTip when the container is changed/docked to another parent. Now since, the parent is changed, when the ToolTip tries to access the parent and it is already disposed. So the exception is thrown.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Solution:&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;   &lt;/span&gt;&lt;/span&gt;   The solution I devised was to create a new ToolTip instance for every Form that I showed on the screen. This worked around the problem and it was solved. For those, with Dockable Container problem, try to recreate the controls when they are moved or docked. This will solve the problem.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;   And microsoft is supposed to have corrected this problem in v3.5 framework. But I haven't checked it out yet.&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/2503466352804390526-4367718736463656938?l=technologiques.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 09 Nov 2009 08:24:48 +0000</pubDate>
	<author>noreply@blogger.com (Geethan)</author>
</item>
<item>
	<title>Jeyageethan A: Finding whether its Design Mode or Runtime Mode in VB.NET</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-2503466352804390526.post-8214840350527573287</guid>
	<link>http://technologiques.blogspot.com/2008/06/finding-whether-its-design-mode-or.html</link>
	<description>Sometimes, while creating controls, either by Inherited Controls or UserControls, we will be required to skip a piece of code depending upon the design time or runtime mode. This can be done easily by the following code inside a control.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;blockquote&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;If Me.Site IsNot Nothing AndAlso Me.Site.DesignMode = True Then&lt;br&gt;&lt;/br&gt;    'Designtime code here&lt;br&gt;&lt;/br&gt;Else&lt;br&gt;&lt;/br&gt;    'Runtime code here&lt;br&gt;&lt;/br&gt;End If&lt;br&gt;&lt;/br&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Using this code in a control, we can find the mode and avoid certain errors when in Design Mode. This is mostly used in overridden event methods in Inherited Controls.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/2503466352804390526-8214840350527573287?l=technologiques.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 09 Nov 2009 08:24:04 +0000</pubDate>
	<author>noreply@blogger.com (Geethan)</author>
</item>
<item>
	<title>Jeyageethan A: Welcome</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-2503466352804390526.post-3130964458709072057</guid>
	<link>http://technologiques.blogspot.com/2008/05/welcome.html</link>
	<description>First post :) Have fun!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/2503466352804390526-3130964458709072057?l=technologiques.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 09 Nov 2009 08:22:40 +0000</pubDate>
	<author>noreply@blogger.com (Geethan)</author>
</item>
<item>
	<title>Sidu Ponnappa Kariappa Chonira: RubyConf India - It's official!</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3718956085911858962.post-7258060293916700192</guid>
	<link>http://blog.sidu.in/2009/10/rubyconf-india-its-official.html</link>
	<description>Yes, it's true. RubyConf is happening in Bangalore, India early next year. Here's the link to the (currently rather brief) &lt;a href=&quot;http://rubyconfindia.org&quot;&gt;RunConf India 2010 website&lt;/a&gt;.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/3718956085911858962-7258060293916700192?l=blog.sidu.in&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:mtsM-81NTLw&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:cGdyc7Q-1BI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=NW5LI20CEGY:WlqcwsbfMiE:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=NW5LI20CEGY:WlqcwsbfMiE:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=NW5LI20CEGY:WlqcwsbfMiE:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=NW5LI20CEGY:WlqcwsbfMiE:gIN9vFwOqvQ&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/diningtablecoder/~4/NW5LI20CEGY&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Thu, 08 Oct 2009 05:55:04 +0000</pubDate>
	<author>noreply@blogger.com (Sidu)</author>
</item>
<item>
	<title>Sriram Narayan: Being explict is better than being implicit - only when everything else is constant</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-3568041088271723810</guid>
	<link>http://blog.sriramnarayan.com/2009/09/being-explict-is-better-than-being.html</link>
	<description>&lt;div style=&quot;text-align: justify;&quot;&gt;The benefits of dependency injection are:&lt;br&gt;&lt;/br&gt;&lt;/div&gt;&lt;ol style=&quot;text-align: justify;&quot;&gt;&lt;li&gt;Separating configuration of dependencies from their use.&lt;/li&gt;&lt;li&gt;Improving unit testability.&lt;/li&gt;&lt;li&gt;Making dependencies explicit.&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;As I finished explaining these points to some new hires, I followed it up with a generalisation, &quot;And in general, being explicit is better than being implicit - it reduces ambiguity and improves communication, always welcome in software development.&quot; Immediately I was struck by a few incongruities. After all, we have come to appreciate:&lt;br&gt;&lt;/br&gt;&lt;/div&gt;&lt;ol style=&quot;text-align: justify;&quot;&gt;&lt;li&gt;The absence of Java-esque checked exceptions in C#.&lt;/li&gt;&lt;li&gt;The flexibility afforded by dynamically typed languages.&lt;/li&gt;&lt;li&gt;The evolution friendliness and interoperability of loosely typed SOAP web service contracts (documents, coarse-grained interfaces, restricting ourselves to the simplest of XSD types).&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;In the above cases, being explicit comes with a stiff cost. We trade it off for flexibility. So the generalisation still holds. In general, being explicit is better than being implicit. But there is a caveat implicit in there - &quot;In general, being explicit is better than being implicit &lt;span style=&quot;font-style: italic;&quot;&gt;provided everything else remains constant.&lt;/span&gt;&quot; If there  are additional benefits to be gained from going implicit, then being explicit is questionable.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;It helps to make this caveat explicit. A case of making the generalisation practise what it preached.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-3568041088271723810?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/dNH9GR318sw&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Wed, 30 Sep 2009 02:43:37 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Sidu Ponnappa Kariappa Chonira: Faster xml deserialisation on JRuby</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3718956085911858962.post-4920140306838854130</guid>
	<link>http://blog.sidu.in/2009/09/faster-xml-deserilisation-on-jruby.html</link>
	<description>For the last day or so, I've been looking at XML deserilisation performance at work. When dealing with REST/POX, a respectable fraction of the time is spent in serilising and deserialising xml; consequently it's a fair target for performance analysis. Since I'm currently working on a multi-threaded Twitter library built using &lt;a href=&quot;http://github.com/kaiwren/wrest&quot;&gt;Wrest&lt;/a&gt;, I decided I might as well take a look at xml deserialisation performance under JRuby.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-size: 130%;&quot;&gt;The Contenders&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Wrest delegates XML deserilisation to ActiveSupport, which in turn supports one of three libraries - LibXML Ruby, Nokogiri and of course REXML. REXML is the slowest, buggiest of the three and is pure Ruby. Both LibXML and Nokogiri use the native libxml2 libraries; however LibXML is &lt;span style=&quot;font-style: italic;&quot;&gt;not&lt;/span&gt; available on JRuby whereas Nokogiri is. Nokogiri also has an as yet unreleased version that does not use the JNA based JRuby FFI implementation and is expected to be faster. Build instructions for the non FFI Nokogiri are available &lt;a href=&quot;http://planet-soc.com/node/7930&quot;&gt;here&lt;/a&gt;.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;REXML can however be enhanced by including &lt;a href=&quot;http://github.com/nicksieger/jrexml&quot;&gt;JREXML&lt;/a&gt; which uses the java xpp3 libs and claims a 10x performance improvemnt. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Thus we have four contenders:&lt;br&gt;&lt;/br&gt;&lt;ul&gt;&lt;li&gt;Vanilla REXML&lt;/li&gt;&lt;li&gt;REXML enhanced by JREXML&lt;/li&gt;&lt;li&gt;FFI Nokogiri&lt;/li&gt;&lt;li&gt;Non FFI nokogiri&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-size: 130%;&quot;&gt;The Test Environment&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;jruby -v&lt;/code&gt; reads &lt;code&gt;jruby 1.4.0dev (ruby 1.8.7p174) (2009-08-05 619cebe) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_13) [x86_64-java]&lt;/code&gt;)&lt;/li&gt;&lt;li&gt;I'm using a 2.2GHz 2008 MacBook Pro running Leopard&lt;/li&gt;&lt;li&gt;The benchmark is a simple Hash.from_xml. It's canned as a Wrest rake task. The full command is &lt;code&gt;jruby -S rake -J-server benchmark:deserialise_xml&lt;/code&gt;&lt;/li&gt;&lt;li&gt;JREXML 0.5.3 and Nokogiri 1.3.3 (the non-FFI build is also 1.3.3, revision fb7e9bb6, from the origin/java branch of tenderlove/nokogiri)&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-size: 130%;&quot;&gt;The Numbers&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-size: 115%;&quot;&gt;Vanilla REXML&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;pre&gt;Deserialising using ActiveSupport::XmlMini_REXML&lt;br&gt;&lt;/br&gt;Rehearsal -------------------------------------------------&lt;br&gt;&lt;/br&gt;Hash.from_xml  11.831000   0.000000  11.831000 ( 11.831000)&lt;br&gt;&lt;/br&gt;--------------------------------------- total: 11.831000sec&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;                    user     system      total        real&lt;br&gt;&lt;/br&gt;hash.from_xml   5.475000   0.000000   5.475000 (  5.474000)&lt;/pre&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-size: 115%;&quot;&gt;REXML + JREXML&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;pre&gt;Detected JRuby, JREXML loaded.&lt;br&gt;&lt;/br&gt;Deserialising using ActiveSupport::XmlMini_REXML&lt;br&gt;&lt;/br&gt;Rehearsal -------------------------------------------------&lt;br&gt;&lt;/br&gt;Hash.from_xml  11.323000   0.000000  11.323000 ( 11.323000)&lt;br&gt;&lt;/br&gt;--------------------------------------- total: 11.323000sec&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;                    user     system      total        real&lt;br&gt;&lt;/br&gt;Hash.from_xml   5.436000   0.000000   5.436000 (  5.436000)&lt;/pre&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-size: 115%;&quot;&gt;FFI Nokogiri&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;pre&gt;Deserialising using ActiveSupport::XmlMini_Nokogiri&lt;br&gt;&lt;/br&gt;Rehearsal -------------------------------------------------&lt;br&gt;&lt;/br&gt;Hash.from_xml   9.468000   0.000000   9.468000 (  9.468000)&lt;br&gt;&lt;/br&gt;---------------------------------------- total: 9.468000sec&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;                    user     system      total        real&lt;br&gt;&lt;/br&gt;Hash.from_xml   3.876000   0.000000   3.876000 (  3.876000)&lt;/pre&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-size: 115%;&quot;&gt;Non FFI Nokogiri&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;pre&gt;Deserialising using ActiveSupport::XmlMini_Nokogiri&lt;br&gt;&lt;/br&gt;Rehearsal -------------------------------------------------&lt;br&gt;&lt;/br&gt;Hash.from_xml   5.956000   0.000000   5.956000 (  5.956000)&lt;br&gt;&lt;/br&gt;---------------------------------------- total: 5.956000sec&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;                    user     system      total        real&lt;br&gt;&lt;/br&gt;Hash.from_xml   2.123000   0.000000   2.123000 (  2.123000)&lt;/pre&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;span style=&quot;font-size: 130%;&quot;&gt;Conclusion&lt;/span&gt;&lt;br&gt;&lt;/br&gt;As expected, REXML was slow. Surprisingly though, JREXML didn't improve those numbers very much.&lt;br&gt;&lt;/br&gt;FFI Nokogiri was faster than REXML, but the JNA seems to have taken its toll - on MRI 1.8.6 the same benchmark runs in under 2s. Non FFI Nokogiri was the real win, though, taking deserialisation performance within spitting distance of the CRuby Nokogiri.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Note that &lt;code&gt;Hash.from_xml&lt;/code&gt; does mess around a bit with the hash that the libraries produce and this might make the numbers different from directly using the xml libraries; however since this API is what I need to use with in Wrest (and Rails on JRuby, for that matter) these are the relative performance numbers I'm interested in seeing. If you're not using Rails (or Wrest, dare I say?) you may want to re-run this benchmark against the libraries directly without ActiveSupport mediating.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/3718956085911858962-4920140306838854130?l=blog.sidu.in&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:mtsM-81NTLw&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:cGdyc7Q-1BI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=eH5ZsyeQVno:thB7oYfzS4A:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=eH5ZsyeQVno:thB7oYfzS4A:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=eH5ZsyeQVno:thB7oYfzS4A:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=eH5ZsyeQVno:thB7oYfzS4A:gIN9vFwOqvQ&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/diningtablecoder/~4/eH5ZsyeQVno&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Thu, 17 Sep 2009 04:16:46 +0000</pubDate>
	<author>noreply@blogger.com (Sidu)</author>
</item>
<item>
	<title>Ketan Padegaonkar: Tell, Don’t Ask – Part 2</title>
	<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=404</guid>
	<link>http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-2.html</link>
	<description>&lt;h2&gt;Objects exposing behavior, not state&lt;/h2&gt;
&lt;h3&gt;Controlling complexity of your codebase by limiting what state your objects expose&lt;/h3&gt;
&lt;p&gt;The more objects that can see and change states on other objects, the more complex your system. Objects returning a boolean mean that someone calling that method will use an if branch, returning an integer would mean someone using if/else or switch/case. Returning objects would mean introspeting that returned object to invoke something else on it. This increases coupling between classes, makes code hard to read and test.&lt;/p&gt;
&lt;h3&gt;My class has 3 friends, I talk to my friends’ friends. My friends are difficult to mock, therefore mocking sucks…&lt;/h3&gt;
&lt;p&gt;… well, yeah!&lt;/p&gt;
&lt;p&gt;Testing procedural code is hard. Testing such code generally involves setting up “data” and asserting on state of objects. &lt;a href=&quot;http://www.c2.com/cgi/wiki?TellDontAsk&quot;&gt;Tell Don’t Ask&lt;/a&gt; code on the other hand is easier to test since you’re not testing state. Also notice how DI makes things simpler to test.&lt;/p&gt;
&lt;pre&gt;void testOwnerCanFeedDog(){
    Dog dog = new Dog();
    // have to create a mouth since owner calls dog.getMouth() to feed it
    Mouth mouth = new Mouth();
    dog.setMouth(mouth);
    PetOwner owner = new PetOwner();
    owner.setDog(dog);
    owner.feedDog(food);

    // verify that the dog gets the food (well the mouth, actually)
    assertEquals(food, mouth.getFood());
}
&lt;/pre&gt;
&lt;pre&gt;void testOwnerCanFeedDog(){
    Dog dog = mock(Dog.class);
    PetOwner owner = new PetOwner(dog);
    owner.feed(food);

    // verify that the dog gets the food
    verify(dog).feed(food);
}
&lt;/pre&gt;
&lt;p&gt;Without &lt;a href=&quot;http://martinfowler.com/articles/injection.html&quot;&gt;Dependency Injection&lt;/a&gt;, testing is quite difficult; without &lt;a href=&quot;http://www.c2.com/cgi/wiki?TellDontAsk&quot;&gt;Tell Don’t Ask&lt;/a&gt;, testing is almost always impossible. Put together, things are separated, testing is simplified.&lt;/p&gt;</description>
	<pubDate>Fri, 04 Sep 2009 07:09:51 +0000</pubDate>
</item>
<item>
	<title>Ketan Padegaonkar: Tell, Don’t Ask – Part 1</title>
	<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=371</guid>
	<link>http://ketan.padegaonkar.name/2009/09/04/tell-dont-ask-part-1.html</link>
	<description>&lt;p&gt;I spend more time reading code than writing it. I therefore like code that is readable. Rarely do I like to read code that is verbose and does too much orchestration in order to do something that is orthognal to what I’m looking for.&lt;/p&gt;
&lt;p&gt;Code is easier to read and maintain when objects are written in a &lt;a href=&quot;http://www.c2.com/cgi/wiki?TellDontAsk&quot;&gt;Tell Don’t Ask&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;“Tell, Don’t Ask” is a style of programming where anObject tells anotherObject to doSomething(), rather than asking anotherObject to getSomeValue() and then makeADecision().&lt;/p&gt;
&lt;p&gt;Code that does violates this this is more procedural than it is object oriented. In the procedural world code is written to fetch some data (or state) and then make a decision or perform some action. Procedural programming “pulls data” into the logic to get things done.&lt;/p&gt;
&lt;p&gt;In object oriented programming, we do the opposite — have objects do something for you instead of you doing it yourself. Don’t overdo this too much, someone still has to do the real work though &lt;img src=&quot;http://ketan.padegaonkar.name/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot;&gt;&lt;/img&gt; &lt;/p&gt;
&lt;p&gt;Identifying places where you may tell instead of ask:&lt;/p&gt;
&lt;pre&gt;class PetOwner{
    void feedDog(Food food){
        if(getDog().isHungry()){
            dog.getMouth().putFood(food);
        }
    }
}
&lt;/pre&gt;
&lt;p&gt;This can instead be written as:&lt;/p&gt;
&lt;pre&gt;class PetOwner{
    void feedDog(Food food){
        dog.feed(food);
    }
}

class Dog{
    void feed(Food food){
        if (iAmHungry()){
            // consume food
        }
    }
}
&lt;/pre&gt;
&lt;p&gt;Notice how the PetOwner does not know (or care to know) about the fact that the dog has a mouth.&lt;/p&gt;</description>
	<pubDate>Fri, 04 Sep 2009 02:41:39 +0000</pubDate>
</item>
<item>
	<title>Ram - Sriram Narayanan: Belenix 0.8 Alpha - with KDE 4.2.4</title>
	<guid isPermaLink="false">urn:lj:livejournal.com:atom1:dynamicproxy:61017</guid>
	<link>http://dynamicproxy.livejournal.com/61017.html</link>
	<description>Here's a snapshot of my desktop which I use at work&lt;br&gt;&lt;/br&gt;&lt;img src=&quot;http://moinakg.files.wordpress.com/2009/08/belenix_kde4.png&quot;&gt;&lt;/img&gt;.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;That's Belenix 0.8 Alpha running KDE 4.2.4 compiled with GCC 4.4. I backed up my data, installed OpenSolaris 2009.06, and then ran the install_belenix script after modifying it to point to my local Belenix mirror. Install took 20 minutes, and I now have OpenSolaris as well as Belenix 0.8 Alpha in my GRUB boot menu.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;I've taken Wine from Triskelios' builds since we need to patch GCC 4.4.1 in order to get it to compile Wine on Belenix. This is good enough to run Lotus Notes 7.0.1. I do face two errors at startup related to z:\, which I've not got around fo fixing yet.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Also, I've taken rdekstop from www.sunfreeware.com since I needed to get rdesktop running first and didn't have time to set up a GCC 4.4 based dev environment (which I now have).&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Some bugs that I've noticed so far:&lt;br&gt;&lt;/br&gt;- The KDE Lock tool doesn't let me unlock ! This is a critical bug which need some investigation.&lt;br&gt;&lt;/br&gt;- The cursor in Konsole is offset by a fre characters from the point of actual character entry.&lt;br&gt;&lt;/br&gt;- KWin sometimes thinks that the Alt key is continuously pressed. I &quot;solve&quot; this by either restarting KDE (Control Alt Backspace), or I SSH into my box and kill the startkde4 process. I've had to do this four times during the past week.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;We have core dumps for the above and are considering either investigating further, or simply moving to KDE 4.3&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Other bugs that I've noticed include:&lt;br&gt;&lt;/br&gt;- Okular doesn't support PDFs due to some issues with how poppler has been built.&lt;br&gt;&lt;/br&gt;- On a colleague's laptop, the CPU fan started to run at full speed. This is the first time that I've notived this issue.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;There may be other issues too, but I've not made time to test them yet.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;We've ofcourse had a number of bugs with the install_belenix script, each of which has been fixed.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;We welcome you to try out Belenix 0.8 Alpha and report issues. Even if you have OpenSolaris already installed, you can go ahead and install Belenix since it'll neither damage your existing data, nor format anything. The script will ask you for a user name, and will create a separate user account for you.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;wget &lt;a href=&quot;http://www.belenix.org/binfiles/install_belenix&quot;&gt;http://www.belenix.org/binfiles/install_belenix&lt;/a&gt;&lt;br&gt;&lt;/br&gt;chmod +x install_belenix&lt;br&gt;&lt;/br&gt;pfexec ./install_belenix</description>
	<pubDate>Fri, 28 Aug 2009 15:05:46 +0000</pubDate>
</item>
<item>
	<title>Ketan Padegaonkar: Code Coverage And Functional Tests</title>
	<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=390</guid>
	<link>http://ketan.padegaonkar.name/2009/08/26/code-coverage-and-functional-tests.html</link>
	<description>&lt;p&gt;I am often asked this rather perilous question:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;How do I view code coverage for my functional tests?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Short answer:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Here’s how…. However, use it only for figuring out what functionality is not covered, not as a workaround for not having enough unit and integrations.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Having to use functional tests to determine percentage of code coverage is IMO a bad smell, avoid as much as possible.&lt;/p&gt;</description>
	<pubDate>Wed, 26 Aug 2009 04:04:03 +0000</pubDate>
</item>
<item>
	<title>Sidu Ponnappa Kariappa Chonira: Wrest, REST and Ruby HTTP libraries</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3718956085911858962.post-397829642580057019</guid>
	<link>http://blog.sidu.in/2009/08/wrest-rest-and-ruby-http-libraries.html</link>
	<description>I've been using Rails' ActiveResource for over eighteen months to consume the &lt;a href=&quot;http://en.wikipedia.org/wiki/Plain_Old_XML&quot;&gt;POX&lt;/a&gt; based pseudo &lt;a href=&quot;http://en.wikipedia.org/wiki/REST&quot;&gt;REST&lt;/a&gt; that Rails applications make so easy to produce, and I'm not overwhelmed. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;ActiveResource &lt;a href=&quot;http://blog.brianguthrie.com/articles/2008/08/02/the-weirdest-code-ive-seen-recently&quot;&gt;isn't a particularly well written library&lt;/a&gt;, nor is it easy to extend, modify and use. It doesn't support certain features that I've come to consider essential for a Rails POX/REST client, like pagination. The only nice things you can say about it are that it works for the most common cases, and that it ships with Rails. But you know what hackers say about sucky tools - 'Don't get mad; roll your own'. So I did. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;I started working on &lt;a href=&quot;http://github.com/kaiwren/wrest&quot;&gt;Wrest&lt;/a&gt; a few months ago with the intention of creating a drop-in replacement for ActiveResource. The section of the Wrest &lt;a href=&quot;http://github.com/kaiwren/wrest/tree/master/README.rdoc&quot;&gt;README&lt;/a&gt; that talks about Wrest::Resource is actually a record of the features that we've discussed over the &lt;a href=&quot;http://blog.sidu.in/2006/10/eh-wassa-dining-table.html&quot;&gt;dining table&lt;/a&gt; that we &lt;span style=&quot;font-style: italic;&quot;&gt;wished&lt;/span&gt; ActiveResource had. However, as I hacked away on Wrest, I slowly came to realise that a good REST client needs to be a good &lt;span style=&quot;font-style: italic;&quot;&gt;HTTP&lt;/span&gt; client first.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;I took a look at those that were popular at the time, but they didn't really appeal to my engineering aesthetic. They heavily favoured class/static methods and seemed to be geared toward command line usage rather than as a library. So I started to implement a clean, easy to use and well encapsulated HTTP library first, resulting in Wrest::Core; it is now ready for use and is sufficiently mature that I'm comfortable writing about it and inviting people to take it for a spin. It does need a few more features, but nothing that can't be added with a few hours worth of hacking. Wrest::Resource however, is still a work in progress, but some of its building blocks are already ready for use. You can see some examples &lt;a href=&quot;http://github.com/kaiwren/wrest/tree/master/examples&quot;&gt;here&lt;/a&gt;.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Wrest is available for installation through both RubyGems and as a Rails plugin via &lt;a href=&quot;http://github.com/kaiwren/wrest&quot;&gt;Git&lt;/a&gt;.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;To get the gem, all you need to do is &lt;code&gt;(sudo) gem install wrest&lt;/code&gt;. If you want it as a Rails plugin, simply do &lt;code&gt;script/plugin install git://github.com/kaiwren/wrest.git&lt;/code&gt;.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Wrest runs on Ruby 1.8, 1.9 as well as JRuby.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Here is an example that shows how you can use the &lt;a href=&quot;http://delicious.com/help/api&quot;&gt;Delicious API&lt;/a&gt; using Wrest. If you can't see it (it's a github gist that needs js) you can see the original source &lt;a href=&quot;http://github.com/kaiwren/wrest/tree/master/examples/delicious.rb&quot;&gt;here&lt;/a&gt;. You may also be interested in the &lt;a href=&quot;http://github.com/kaiwren/wrest/tree/master/examples/twitter.rb&quot;&gt;Twitter example&lt;/a&gt;, which showcases a more complex scenario with ideas and features from Wrest::Resource.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/3718956085911858962-397829642580057019?l=blog.sidu.in&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:mtsM-81NTLw&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:cGdyc7Q-1BI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=To8DZLZVSZM:kJVmLBjklvM:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=To8DZLZVSZM:kJVmLBjklvM:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=To8DZLZVSZM:kJVmLBjklvM:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=To8DZLZVSZM:kJVmLBjklvM:gIN9vFwOqvQ&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/diningtablecoder/~4/To8DZLZVSZM&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Mon, 24 Aug 2009 16:28:18 +0000</pubDate>
	<author>noreply@blogger.com (Sidu)</author>
</item>
<item>
	<title>Sriram Narayan: SOA in India</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-4046878026821552473</guid>
	<link>http://blog.sriramnarayan.com/2009/08/soa-in-india.html</link>
	<description>businesstechnology.in run by S&amp;amp;S Media (people behind JAX conference) &lt;a href=&quot;http://businesstechnology.in//2009/08/14/Introspecting-SOA.html&quot;&gt;interviewed&lt;/a&gt; me on the state of SOA in general and in India in particular.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-4046878026821552473?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/Kav4sJKeSGc&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Fri, 21 Aug 2009 17:03:27 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Jeyageethan A: Inkscape And Hand Tool</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-2503466352804390526.post-4611367710154547732</guid>
	<link>http://technologiques.blogspot.com/2009/08/inkscape-and-hand-tool.html</link>
	<description>If you have ever wondered and wanted to use the hand tool in Inkscape, you can do so by the following techniques :&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;1. You middle click and drag your mouse for panning the document.&lt;br&gt;&lt;/br&gt;2. Or go to, File-&amp;gt;Inkscape Preferences-&amp;gt;Scrolling. Then check on the &quot;Left click pans when space is pressed&quot;. Presto! Now you can use the spacebar to pan the document, as you would normally do!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/2503466352804390526-4611367710154547732?l=technologiques.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 19 Aug 2009 06:45:45 +0000</pubDate>
	<author>noreply@blogger.com (Geethan)</author>
</item>
<item>
	<title>Ram - Sriram Narayanan: A presentation on culture</title>
	<guid isPermaLink="false">urn:lj:livejournal.com:atom1:dynamicproxy:60731</guid>
	<link>http://dynamicproxy.livejournal.com/60731.html</link>
	<description>&lt;a href=&quot;http://www.slideshare.net/reed2001/culture-1798664&quot;&gt;http://www.slideshare.net/reed2001/culture-1798664&lt;/a&gt;</description>
	<pubDate>Wed, 05 Aug 2009 12:56:55 +0000</pubDate>
</item>
<item>
	<title>Ketan Padegaonkar: GEF Support for SWTBot</title>
	<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=388</guid>
	<link>http://ketan.padegaonkar.name/2009/08/04/gef-support-for-swtbot.html</link>
	<description>&lt;p&gt;A long pending request from swtbot users has been &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=269609&quot;&gt;support for GEF&lt;/a&gt;. &lt;a href=&quot;http://code.google.com/p/swtbot4gef/&quot;&gt;The SWTBot4GEF project&lt;/a&gt; was created as a sandbox to see how feasible things were in the GEF world.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://mariot-thoughts.blogspot.com/&quot;&gt;Mariot Chauvin&lt;/a&gt; recently polished the initial contribution from &lt;a href=&quot;http://greensopinion.blogspot.com/search/label/SWTBot&quot;&gt;David Green&lt;/a&gt; and released a version 0.1 of the gef support. We’re working towards integrating this as part of swtbot and you should hear more about it once the IP process is done &lt;img src=&quot;http://ketan.padegaonkar.name/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot;&gt;&lt;/img&gt; &lt;/p&gt;</description>
	<pubDate>Tue, 04 Aug 2009 02:20:33 +0000</pubDate>
</item>
<item>
	<title>Ram - Sriram Narayanan: Let's make the web fast</title>
	<guid isPermaLink="false">urn:lj:livejournal.com:atom1:dynamicproxy:60495</guid>
	<link>http://dynamicproxy.livejournal.com/60495.html</link>
	<description>&lt;a href=&quot;http://code.google.com/speed/articles/&quot;&gt;http://code.google.com/speed/articles/&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;What many may not know, is that having great disk i/o and a good file system can help in certain situations.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;So also with an excellent network stack.</description>
	<pubDate>Mon, 03 Aug 2009 10:42:29 +0000</pubDate>
</item>
<item>
	<title>Ram - Sriram Narayanan: Three of Four JRuby core team move from Sun to EngineYard</title>
	<guid isPermaLink="false">urn:lj:livejournal.com:atom1:dynamicproxy:60163</guid>
	<link>http://dynamicproxy.livejournal.com/60163.html</link>
	<description>&lt;a href=&quot;http://www.engineyard.com/blog/2009/jrubys-future-at-engine-yard/&quot;&gt;http://www.engineyard.com/blog/2009/jrubys-future-at-engine-yard/&lt;/a&gt;</description>
	<pubDate>Sun, 02 Aug 2009 10:33:13 +0000</pubDate>
</item>
<item>
	<title>Ram - Sriram Narayanan: Non-IE browser support -&amp;gt; Important for non-IE users</title>
	<guid isPermaLink="false">urn:lj:livejournal.com:atom1:dynamicproxy:60034</guid>
	<link>http://dynamicproxy.livejournal.com/60034.html</link>
	<description>As a sysadmin who doesn't use Windows at all, I have to RDP over to a Windows server, start IE on that computer, and administer switches from there.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;There are also sites like www.cisco.com which are not Firefox friendly at all.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;I recently wrote to the marketing team at Promise (the SATA Controller company), pointing out that their website is not usable by non-IE users. They wrote back stating that the website will be revamped soon.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;At my company, the marketing team tests all functionality to ensure that mose browsers that we can think of work fine. This includes IE 6/7/8, Safari (OSX/Windows), Firefox (OSX/Windows/Belenix). We don't test with Konqueror or with Webkit yet, though I think those two should be included too.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;As a developer, I know that web standards compliance requires a bit of diligence but that this can be achieved.</description>
	<pubDate>Sat, 25 Jul 2009 13:11:41 +0000</pubDate>
</item>
<item>
	<title>Ketan Padegaonkar: SWTBot Getting Started Video Tutorials</title>
	<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=369</guid>
	<link>http://ketan.padegaonkar.name/2009/07/15/swtbot-getting-started-video-tutorials.html</link>
	<description>&lt;p&gt;Getting started with SWTBot is a unique experience for a lot of users, and myself. Unlike most other projects hosted at eclipse.org, it’s a UI testing tool written for primarily for testers to be able to write automated tests.&lt;/p&gt;
&lt;p&gt;In this regard the users of swtbot are a bit special. Most of them understand testing and the principles associated with testing but do not necessarily understand swt, threading models and the workbench and platform internals. Getting such users to use eclipse, create test plugins and write tests in java involves more than just documentation and screenshots.&lt;/p&gt;
&lt;p&gt;Mohammed recently posted two such 5 minute videos. &lt;a href=&quot;http://download.eclipse.org/technology/swtbot/docs/videos/beginners/SWTBotGettingStartedIn5Minutes/&quot;&gt;Getting started with swtbot&lt;/a&gt; in under 5 minutes, and run your &lt;a href=&quot;http://download.eclipse.org/technology/swtbot/docs/videos/beginners/SWTBotHeadlessTestingForNovices/&quot;&gt;UI tests in a headless build&lt;/a&gt; from within ant.&lt;/p&gt;
&lt;p&gt;A video is worth a thousand images &lt;img src=&quot;http://ketan.padegaonkar.name/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot;&gt;&lt;/img&gt; &lt;/p&gt;</description>
	<pubDate>Tue, 14 Jul 2009 19:21:33 +0000</pubDate>
</item>
<item>
	<title>Ketan Padegaonkar: Just upgraded my blog to a newer wordpress…</title>
	<guid isPermaLink="true">http://ketan.padegaonkar.name/2009/07/15/just-upgraded-my-blog-to-a-newer-wordpress.html</guid>
	<link>http://ketan.padegaonkar.name/2009/07/15/just-upgraded-my-blog-to-a-newer-wordpress.html</link>
	<description>&lt;p&gt;… and just wanted to see all the parts are still moving.&lt;/p&gt;</description>
	<pubDate>Tue, 14 Jul 2009 18:34:21 +0000</pubDate>
</item>
<item>
	<title>Sidu Ponnappa Kariappa Chonira: CruiseControl.rb 1.4.0 released!</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3718956085911858962.post-3903574927410490750</guid>
	<link>http://blog.sidu.in/2009/07/cruisecontrolrb-140-released.html</link>
	<description>We are happy to announce the release of &lt;a href=&quot;http://cruisecontrolrb.thoughtworks.com&quot;&gt;CruiseControl.rb&lt;/a&gt; 1.4.0. This release adds support for three distributed version control systems - Git, Mercurial and Bazaar - in addition to Subversion.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;CC.rb remains easy to install, pleasant to use and simple to hack. Since the source has now moved to a &lt;a href=&quot;http://github.com/thoughtworks/cruisecontrol.rb&quot;&gt;git repository&lt;/a&gt;, it is easier than ever to fork and contribute. We're looking forward to your pull requests!&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Downloads are available from both &lt;a href=&quot;http://rubyforge.org/frs/?group_id=2918&quot;&gt;Rubyforge&lt;/a&gt; and &lt;a href=&quot;http://github.com/thoughtworks/cruisecontrol.rb/tree/v1.4.0&quot;&gt;Github&lt;/a&gt;.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/3718956085911858962-3903574927410490750?l=blog.sidu.in&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:mtsM-81NTLw&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:cGdyc7Q-1BI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=okteJPXJC48:F77oEyYsHJ4:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=okteJPXJC48:F77oEyYsHJ4:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=okteJPXJC48:F77oEyYsHJ4:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=okteJPXJC48:F77oEyYsHJ4:gIN9vFwOqvQ&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/diningtablecoder/~4/okteJPXJC48&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Tue, 30 Jun 2009 20:28:54 +0000</pubDate>
	<author>noreply@blogger.com (Sidu)</author>
</item>
<item>
	<title>Akshay Dhavle: The Revolution</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-24663619.post-5672298956203028766</guid>
	<link>http://feedproxy.google.com/~r/agilebusinessanalysis/~3/l4dCHzMvZqU/software-development-art-or-science.html</link>
	<description>Software Development - Art OR Science?

A seemingly clichéd question. Never passed my mind all these years. But let me tell you how I got thinking about this and maybe it'll interest you a bit.

Like...&lt;img src=&quot;http://feeds.feedburner.com/~r/agilebusinessanalysis/~4/l4dCHzMvZqU&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Tue, 30 Jun 2009 13:37:48 +0000</pubDate>
	<author>noreply@blogger.com (Akshay Dhavle)</author>
</item>
<item>
	<title>Akshay Dhavle: Cumulative Flow Diagrams</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-24663619.post-64979072541674962</guid>
	<link>http://feedproxy.google.com/~r/agilebusinessanalysis/~3/ikfIFuwEj58/finger-charts.html</link>
	<description>Once you have your wall in place, it’s time to start monitoring your progress through the project. Best done on a daily basis and best done with a “Finger Chart”. Here’s an example.

A finger chart...&lt;img src=&quot;http://feeds.feedburner.com/~r/agilebusinessanalysis/~4/ikfIFuwEj58&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Mon, 22 Jun 2009 15:23:03 +0000</pubDate>
	<author>noreply@blogger.com (Akshay Dhavle)</author>
</item>
<item>
	<title>Xiaoming Wang: 开心网成功的一个原因</title>
	<guid isPermaLink="false">http://cid-9d882dabc5a6f6a4.users.api.live.net/Users(-7095370997143505244)/9D882DABC5A6F6A4!692</guid>
	<link>http://satanyork.spaces.live.com/Blog/cns!9D882DABC5A6F6A4!692.entry</link>
	<description>http://www.kaixin001.com 开心网是中国所有SNS到目前为止最成功的一个。当然其成功的原因有很多，从设计角度，其中一个原因就是“Engaging”，就是说这个产品可以很好的吸引用户并且可以比较好的持续的吸引客户使用她。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;自从有了Facebook之后，中国的软件开发者就再一次开始了可悲的模仿。一个个类似Facebook的SNS如雨后春笋一样窜出来，例如海内，校内等。但是他们都没有开心网成功。那么开心网使用了什么办法将自己于区分于其同行呢？&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;开心网成功的利用了中国人的弱点和欲望将中国用户吸引。看看以下几个例子：&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt; &lt;br&gt;&lt;/br&gt;

&lt;table border=&quot;1&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;th&gt;组件&lt;/th&gt;
&lt;th&gt;解释&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;奴隶买卖&lt;/td&gt;
&lt;td&gt;利用了中国人2000多年的封建传统的后遗症，梦想统治大众。有强烈的控制和拥有的欲望。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;争车位&lt;/td&gt;
&lt;td&gt;利用了中国人梦想拥有一部自己喜欢的车的强烈愿望；还有中国人喜欢占小便宜的特点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;买房子&lt;br&gt;&lt;/br&gt;&lt;/td&gt;
&lt;td&gt;中国人尤其是生活在大城市的“外来人口”多么渴望拥有自己的房子和自己喜欢的装修。现实中不能实现只能在虚拟中实现了&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;种菜&lt;br&gt;&lt;/br&gt;&lt;/td&gt;
&lt;td&gt;利用了中国人一间房子，一亩地，两只母鸡，一头猪的小农思想；这里再次利用了中国人爱占小便宜的爱好。很多出生在城市的孩子从来就没干过农活，当然就更不知道如何种菜，养芦花母猪，养鸡等农村常见活动了。这刚好迎合了这些孩子这种喜欢尝试的心理。&lt;/td&gt;
&lt;/tr&gt;

&lt;/tbody&gt;&lt;/table&gt; &lt;br&gt;&lt;/br&gt;当然还有很多组件也很人性化。由于其他SNS之前也使用过其类似的设计，这里就不列举了。可见这种利用中国人性弱点和欲望的设计在娱乐产品中还是成功的一个原因。&lt;br&gt;&lt;/br&gt;  &lt;br&gt;&lt;/br&gt;</description>
	<pubDate>Sat, 20 Jun 2009 22:28:15 +0000</pubDate>
</item>
<item>
	<title>Xiaoming Wang: 信任歧视Trust discrimination</title>
	<guid isPermaLink="false">http://cid-9d882dabc5a6f6a4.users.api.live.net/Users(-7095370997143505244)/9D882DABC5A6F6A4!690</guid>
	<link>http://satanyork.spaces.live.com/Blog/cns!9D882DABC5A6F6A4!690.entry</link>
	<description>June 4th或者说天安门事件一直是西方津津乐道的话题。这是我好多在英国工作的同事说中国没有人权的有力证据。我们先不来讨论事实的真相是什么。姑且听一下这些人是如何得出如此结论的。英国的媒体向来以报道事实，客观而出名。尤其是对本国的事件，由于英国人非常容易理解本国人的文化，思维方式，做事的方式，因此报道往往根据其固有逻辑有理有据。相反在其报道东方的某些新闻或者事件的时候，其西方的这种逻辑生搬硬套到中国的现实当中往往会得出非常片面甚至失实的结论。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;自从我03年开始在英国生活以来，收集了大量的来自于西方媒体的关于6.4的真是图像，图片，和一些无法判断真伪的采访报道等等。我的确看到了一些血腥的镜头，看到了肢体接触。但是我没有看到哪怕一秒的中国军队射杀无辜平民或者学生的镜头。更没有看到所谓的解放军开着坦克压过示威者的镜头。我相信西方媒体为了证明其论点会把这种镜头，哪怕只有一秒也会极力广播。很失望，西方媒体并不能拿出任何有力的证据证明6.4是一个政权镇压民主的事件。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;这个月4号，BBC播放了纪念6.4二十周年的节目，期间采访了几个在大陆生活的中国人。这些人是这个事件的“受害者”或者其家属。还是很遗憾，关于这些人对当时情况的描述根本无法让我根据常人的逻辑推论出解放军射杀学生的结论。其中一个“受害者”并不是一个学生，更不是参加示威的人，但是他说在那次事件中他失去了半条腿，他用中文陈述了一些前后自相矛盾的“事实描述”，最终他说他最生气的是，政府一直没有让他享受残疾人应该享受的特殊补贴。因此他非常痛恨政府。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;同样是观看这个节目的英国人，他们的第一印象都是“中国是一个没有民主和自由的国家”。我们先不来讨论这个论点的真实性，但从这种完全失实的论据就推断出其论点的逻辑也实在是太不靠谱了。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;同样是一件事情，一个来中国一个星期的英国人回去告诉他的朋友中国是什么样子。另外一个在中国生活了20几年的中国人告诉他的朋友中国是什么样子。很不幸的是这个朋友往往会相信这个英国人，即使其所说的是带有很多感情色彩的“事实”或者是完全没有论据的论点，他都非常容易被他的朋友相信。相反那个知道事实真相的中国人缺会被认为是一个说谎者。多么不幸。这种现象就是信任歧视。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;信任歧视有几种表象：&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;ul&gt;&lt;li&gt;人类往往更容易相信和自己关系密切的人；而歧视和自己疏远的人。&lt;/li&gt;&lt;li&gt;人类往往更容易相信和自己有着同样或者近似文化，宗教，地域背景的人；而歧视异族，异类。&lt;/li&gt;&lt;li&gt;人类往往更容易相信简单的论点或者简短的论据；而歧视复杂的论点或者有上下文的内容丰富的论据。&lt;/li&gt;&lt;li&gt;人类往往更容易相信约定俗成或者常识；而歧视冷静合理的逻辑分析。&lt;/li&gt;&lt;/ul&gt; &lt;br&gt;&lt;/br&gt;到底是什么原因让很多非常聪明的，或者是受到过良好教育的人错误了相信了不该相信的人或者事呢？原因有以下几个：&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;ul&gt;&lt;li&gt;感性大于理性：即使是再聪明的人有时候也会头脑过热，不能冷静的思考。&lt;/li&gt;&lt;li&gt;没有完整的逻辑思维的方式和常识：还是有一些人会搞出黑马非马的笑话。&lt;/li&gt;&lt;li&gt;由于涉及个人或者阶级利益而故意忽视论据的上下文。&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;/br&gt;如何才能避免信任歧视，正确冷静逻辑的判断呢？我想如果你是一个足够聪明的人，你应该已经得到答案了。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt; &lt;br&gt;&lt;/br&gt;</description>
	<pubDate>Sat, 20 Jun 2009 18:19:57 +0000</pubDate>
</item>
<item>
	<title>Ketan Padegaonkar: Eclipsetasy! Time to throw away the dope…</title>
	<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=366</guid>
	<link>http://ketan.padegaonkar.name/2009/06/19/eclipsetasy-time-to-throw-away-the-dope.html</link>
	<description>&lt;p&gt;… and move to newer dope…&lt;/p&gt;
&lt;p&gt;I just realized that I had about 58 eclipse SDKs downloaded on my hard drive and 22 instances of different versions of eclipse. That was a whooping 9GB for the sdk downloads and 6.5GB for the extracted versions. Time to move to &lt;a href=&quot;http://www.eclipse.org/galileo/&quot;&gt;newer dope&lt;/a&gt; &lt;img src=&quot;http://ketan.padegaonkar.name/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot;&gt;&lt;/img&gt; &lt;/p&gt;
&lt;p&gt;Similar was the case on the &lt;a href=&quot;http://cruise.thoughtworks.com&quot;&gt;cruise based build grid&lt;/a&gt; that tested &lt;a href=&quot;http://eclipse.org/swtbot&quot;&gt;SWTBot&lt;/a&gt; from all versions starting from eclipse 3.2 upwards to the latest RC build on all platforms — linux-gtk/linux-gtk-64/win32/macosx-carbon.&lt;/p&gt;
&lt;div style=&quot;width: 955px;&quot; id=&quot;attachment_367&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;a href=&quot;http://ketan.padegaonkar.name/files/2009/06/eclipse-installs.png&quot;&gt;&lt;img src=&quot;http://ketan.padegaonkar.name/files/2009/06/eclipse-installs.png&quot; alt=&quot;Eclipsetasy&quot; height=&quot;660&quot; class=&quot;size-full wp-image-367&quot; width=&quot;945&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;p class=&quot;wp-caption-text&quot;&gt;Eclipsetasy&lt;/p&gt;
&lt;/div&gt;</description>
	<pubDate>Fri, 19 Jun 2009 06:10:27 +0000</pubDate>
</item>
<item>
	<title>Sriram Narayan: How applications learn. What happens after they are built?</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-7429263060066744450</guid>
	<link>http://blog.sriramnarayan.com/2009/06/how-applications-learn-what-happens.html</link>
	<description>I have been reading &lt;a href=&quot;http://web.me.com/stewartbrand/SB_homepage/Home.html&quot; id=&quot;drfu&quot; title=&quot;Stewart Brand's&quot;&gt;Stewart Brand's&lt;/a&gt; much celebrated &lt;a href=&quot;http://www.amazon.com/gp/product/0140139966/sr=1-1/qid=1155084886/ref=pd_bbs_1/102-5135120-3196937?ie=UTF8&amp;amp;s=books&quot; id=&quot;t:jl&quot; title=&quot;book&quot;&gt;book&lt;/a&gt; over some time now. Took some inspiration from it for a local KM-community &lt;a href=&quot;http://sriramnarayan.com/understanding_innovation.pdf&quot; id=&quot;yhrp&quot; title=&quot;talk&quot;&gt;talk&lt;/a&gt; on innovation. In particular, I was tickled by his characterization of how ideas spread:&lt;br&gt;&lt;/br&gt;&lt;blockquote&gt;Perhaps culture is driven by just such flea-market ideas in a vast network of uncredited influence.&lt;br&gt;&lt;/br&gt;&lt;/blockquote&gt;Replace culture by 'innovation in software' and it still makes perfect sense. Our aggregated blog &lt;a href=&quot;http://blogs.thoughtworks.com/&quot; id=&quot;haf1&quot; title=&quot;page&quot;&gt;page&lt;/a&gt; is a good example of a flea-market of ideas.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Stewart argues for evolutionary design over visionary design - now where have I heard that before? It seems he once suggested to an architect that he go back to his building to see how the users were finding it. The architect said, &quot;Oh no. You never go back. It's too discouraging.&quot;  Just reinforces that we need to be on our guard when we choose technologies to build applications. Will the eventual maintainers of the application be comfortable with them? Is the app designed for change? Does the roof (read abstractions) leak?&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;It's true that construction industry (or any other industry for that matter) isn't a good analogy for software development. In particular, coding is not analogous to construction (compilation probably is). But the life of a building seems to have striking similarities with that of an application. Though buildings are expected to have much longer lives than applications, the total churn that they are subjected to is probably comparable. Buildings are subjected to form-over-function pressures of the marketplace - software apps are less so. Both suffer every now and then from architect hubris.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Wired &lt;a href=&quot;http://www.wired.com/wired/archive/2.11/streetcred.html&quot; id=&quot;e-r_&quot; title=&quot;book&quot;&gt;covered&lt;/a&gt; the book long ago. The BBC documentaries based on the book are still available.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://video.google.com/videoplay?docid=8639555925486210852&quot; id=&quot;j6ms&quot; title=&quot;Part 1: Flow&quot;&gt;Part 1: Flow&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://video.google.com/videoplay?docid=5088653796598486022&quot; id=&quot;t.j4&quot; title=&quot;Part 2: The Low Road&quot;&gt;Part 2: The Low Road&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://video.google.com/videoplay?docid=6141960341438553915&quot; id=&quot;xx_7&quot; title=&quot;Part 3: Built for change&quot;&gt;Part 3: Built for change&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://video.google.com/videoplay?docid=-8761299882173964035&quot; id=&quot;k7s0&quot; title=&quot;Part 4: Unreal estate&quot;&gt;Part 4: Unreal estate&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://video.google.com/videoplay?docid=5407846553590755822&quot; id=&quot;cz8-&quot; title=&quot;Part 5: The romance of maintenance&quot;&gt;Part 5: The romance of maintenance&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://video.google.com/videoplay?docid=2283224496826631552&quot; id=&quot;m3wj&quot; title=&quot;Part 6: Shearing Layers&quot;&gt;Part 6: Shearing Layers&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;There is also a good summary up at: &lt;a href=&quot;http://www.gyford.com/phil/writing/2004/10/24/how_buildings_le.php&quot; id=&quot;r18s&quot; title=&quot;http://www.gyford.com/phil/writing/2004/10/24/how_buildings_le.php&quot;&gt;http://www.gyford.com/phil/writing/2004/10/24/how_buildings_le.php&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-7429263060066744450?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/fCgafYBgoVc&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Wed, 17 Jun 2009 19:22:38 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Sriram Narayan: ThoughtWorks on App Engine for Java: Google I/O Enterprise track</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-5922218651581518758</guid>
	<link>http://blog.sriramnarayan.com/2009/06/thoughtworks-on-app-engine-for-java.html</link>
	<description>&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;ThoughtWorks' CTO, Rebecca Parsons and Martin Fowler &lt;a href=&quot;http://dl.google.com/io/2009/pres/w_415_thoughtworks_on_appengine_for_java_enterprise.pdf&quot; id=&quot;f97-&quot; title=&quot;presented&quot;&gt;presented&lt;/a&gt; (with usual panache) this overview of ThoughtWorks' findings on Google App Engine (and the cloud in general) at &lt;a href=&quot;http://code.google.com/events/io/sessions/ThoughtWorksAppEngineJava.html&quot; id=&quot;xdds&quot; title=&quot;Google I/O&quot;&gt;Google I/O&lt;/a&gt;. Being part of the enterprise track, their talk focussed on enterprise readiness/applicability.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;A summary for the busy technologist:&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;i&gt; Google App Engine&lt;/i&gt;&lt;br&gt;&lt;/br&gt;&lt;ol&gt;&lt;li&gt;A reasonable option for a number of applications.&lt;/li&gt;&lt;li&gt;Sets the bar in terms of low barrier to entry&lt;/li&gt;&lt;li&gt;Technical things to consider before taking the plunge:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Testing - development environment not (yet) quite the same as production.&lt;/li&gt;&lt;li&gt;Persistence - Different idioms needed than when persisting to relational databases.&lt;/li&gt;&lt;li&gt;Concurrency - The deployment sandbox is effectively single threaded. A whole bunch of Java libraries that spawn their own threads will need to be ported over before they can be used on the app engine. Moving away from shared memory concurrency is probably good anyway.&lt;br&gt;&lt;/br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;i&gt; Advice for the enterprise&lt;/i&gt;&lt;br&gt;&lt;/br&gt;&lt;ol&gt;&lt;li&gt;There is a spectrum from infrastructure (Amazon) to applications (Salesforce) with platform (app engine) being in the middle but closer to infrastructure. Domain specific play (statistical analysis cloud) is possible in the space between platform and applications. Of course, considering the venue, the speakers did not emit competing names like Amazon or Microsoft.&lt;/li&gt;&lt;li&gt;Standard potential advantages - dynamic scaling, low entry barrier (therefore low downside risk), pay as you go (op-ex over cap-ex)&lt;/li&gt;&lt;li&gt;Economies of scale (in terms of skilled people and infrastructure) mean that it is much harder to do-it-yourself (private clouds). &lt;/li&gt;&lt;li&gt;Security, privacy and IP - SLAs are ok but not nearly as good as the ability to fire your CIO when things go horribly wrong.&lt;/li&gt;&lt;li&gt;Is it really cheaper? - Unambiguous yes only if you move everything and close down your own data center.&lt;/li&gt;&lt;li&gt;Need new IT org? - probably yes - hopefully one that has better relations with the business.&lt;/li&gt;&lt;li&gt;Vendor lock-in? - probably not much worse than Oracle lock-in. &lt;/li&gt;&lt;li&gt;Other use cases - experiments, spiky one-time computational needs.&lt;/li&gt;&lt;li&gt;This is another of those things that lets you focus on core competencies.&lt;/li&gt;&lt;li&gt;Has the potential to solve the last-mile problem in agile software development - frequent and incremental deployment to production.&lt;/li&gt;&lt;/ol&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-5922218651581518758?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/yuJ4lv0hPVA&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Wed, 10 Jun 2009 13:47:43 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Ketan Padegaonkar: Eclipse Galileo DemoCamp Pune</title>
	<guid isPermaLink="true">http://ketan.padegaonkar.name/2009/06/08/eclipse-galileo-democamp-pune.html</guid>
	<link>http://ketan.padegaonkar.name/2009/06/08/eclipse-galileo-democamp-pune.html</link>
	<description>&lt;p&gt;A reminder to those following Planet Eclipse that there’s a Galileo DemoCamp in Pune on Saturday, 13th June 2009. &lt;a href=&quot;http://wiki.eclipse.org/Eclipse_DemoCamps_Galileo_2009/Pune&quot;&gt;Sign up&lt;/a&gt; on the wiki page so that the ThoughtWorks Pune office is stuffed with enough food to feed you &lt;img src=&quot;http://ketan.padegaonkar.name/wp-includes/images/smilies/icon_razz.gif&quot; alt=&quot;:P&quot; class=&quot;wp-smiley&quot;&gt;&lt;/img&gt; &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
An Eclipse DemoCamp is a congregation of Eclipse enthusiasts to meet up and demo what they are doing with Eclipse. The demos can be of research projects, Eclipse open source projects, applications based on Eclipse, commercial products using Eclipse or whatever you think might be of interest to the attendees. The only stipulation is that it must be Eclipse related.
&lt;/p&gt;&lt;/blockquote&gt;</description>
	<pubDate>Mon, 08 Jun 2009 03:07:06 +0000</pubDate>
</item>
<item>
	<title>Jeyageethan A: Gmail and &lt;eom&gt;</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-2503466352804390526.post-1415385545397389758</guid>
	<link>http://technologiques.blogspot.com/2009/06/gmail-and.html</link>
	<description>Gmail is interestingly smart. I always hated when gmail pops up the question &quot;Send this message without text in the body?&quot;. But recently I discovered that the question can be suppressed by adding the end of mail slang &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;eom&amp;gt;&lt;/span&gt; to the subject line.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;A time saver.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/2503466352804390526-1415385545397389758?l=technologiques.blogspot.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;</description>
	<pubDate>Thu, 04 Jun 2009 10:26:34 +0000</pubDate>
	<author>noreply@blogger.com (Geethan)</author>
</item>
<item>
	<title>Ketan Padegaonkar: Eclipse Updates slowing you down ?</title>
	<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=358</guid>
	<link>http://ketan.padegaonkar.name/2009/06/03/eclipse-updates-slowing-you-down.html</link>
	<description>&lt;p&gt;There’s a joke about maven downloading half the internet. Apparently p2 talks to the other half maven does not download.&lt;/p&gt;
&lt;p&gt;Earlier you’d go get a coffee every time you clicked the eclipse update manager. With the eclipse servers &lt;a href=&quot;http://dev.eclipse.org/mhonarc/lists/eclipse.org-committers/msg00766.html&quot;&gt;taking a beating&lt;/a&gt; and download speeds really going slow you better grab lunch.&lt;/p&gt;
&lt;p&gt;But wait there’s another nifty “hack”: Don’t talk to the eclipse servers.&lt;/p&gt;
&lt;p&gt;To make the p2 update manager faster (assuming you aren’t downloading from the eclipse mirror sites):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Edit your hosts file (/etc/hosts or c:\windows\system32\drivers\etc\hosts)&lt;/li&gt;
&lt;li&gt;Add a fake alias for the download server:
&lt;pre&gt;127.0.0.10 download.eclipse.org
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Open the update manager again, enjoy the amazing speeds, remember to remove the line if you indeed want to talk to the eclipse servers.&lt;/p&gt;</description>
	<pubDate>Wed, 03 Jun 2009 10:26:05 +0000</pubDate>
</item>
<item>
	<title>Sidu Ponnappa Kariappa Chonira: Dynamic languages, Twitter, kind_of? and some statistics</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-3718956085911858962.post-1163640395608610744</guid>
	<link>http://blog.sidu.in/2009/06/dynamic-languages-twitter-kindof-and.html</link>
	<description>Some time ago &lt;a href=&quot;http://feeds.sidu.in/2009/04/twitter-on-ruby-and-scala.html&quot;&gt;I'd written&lt;/a&gt; about how &lt;a href=&quot;http://www.artima.com/scalazine/articles/twitter_on_scala.html&quot;&gt;Twitter's descriptions of their own codebase&lt;/a&gt; made my hackles rise.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;I wasn't alone in this, and one discussion thread on the internal ThoughtWorks dev list later we had some hard numbers extracted from all the Ruby work we've done or are doing.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Martin's put them up on his bliki - &lt;a href=&quot;http://martinfowler.com/bliki/DynamicTypeCheck.html&quot;&gt;take a look&lt;/a&gt;. &lt;span style=&quot;font-style: italic;&quot;&gt;There&lt;/span&gt; are the numbers to back the talk - you &lt;span style=&quot;font-style: italic;&quot;&gt;don't&lt;/span&gt; need type checks all over your codebase in Ruby (or any other dynamic language), Alex Payne's opinion notwithstanding.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/3718956085911858962-1163640395608610744?l=blog.sidu.in&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:mtsM-81NTLw&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=mtsM-81NTLw&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:cGdyc7Q-1BI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=cGdyc7Q-1BI&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=bClnjV0wATQ:XytGiRd6zLk:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=bClnjV0wATQ:XytGiRd6zLk:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?d=qj6IDK7rITs&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.sidu.in/~ff/diningtablecoder?a=bClnjV0wATQ:XytGiRd6zLk:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/diningtablecoder?i=bClnjV0wATQ:XytGiRd6zLk:gIN9vFwOqvQ&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/diningtablecoder/~4/bClnjV0wATQ&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Wed, 03 Jun 2009 04:29:45 +0000</pubDate>
	<author>noreply@blogger.com (Sidu)</author>
</item>
<item>
	<title>Ketan Padegaonkar: Announcing a new release of SWTBot</title>
	<guid isPermaLink="false">http://ketan.padegaonkar.name/?p=352</guid>
	<link>http://ketan.padegaonkar.name/2009/05/29/announcing-a-new-release-of-swtbot.html</link>
	<description>&lt;p&gt;You can download the latest and greatest from the &lt;a href=&quot;http://www.eclipse.org/swtbot/downloads.php&quot;&gt;SWTBot download page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A listing of some of the new features available:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=263036&quot;&gt;Bug 263036&lt;/a&gt; – SWTBot finally has an icon that was missing since two years!&lt;br&gt;&lt;/br&gt;
&lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=269919&quot;&gt;Bug 269919&lt;/a&gt; – Added support for toggle buttons&lt;br&gt;&lt;/br&gt;
&lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=271246&quot;&gt;Bug 271246&lt;/a&gt; – Better support for handling editors. This should serve as a good start towards providing support for multipage, forms based editors&lt;br&gt;&lt;/br&gt;
&lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=271132&quot;&gt;Bug 271132&lt;/a&gt; – Using Display#post() to support sending native click events instead of fake events. This is still work in progress and not all widgets support native events yet.&lt;br&gt;&lt;/br&gt;
&lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=273624&quot;&gt;Bug 273624&lt;/a&gt; – Use native keyboard events for typing. SWTBot currently defaults to using AWT robot. SWT’s Dispay#post() is available as well — it is however buggy across platforms and swt versions. Since SWTBot uses native keyboard events, it needs to understand various &lt;a href=&quot;http://wiki.eclipse.org/SWTBot/Keyboard_Layouts&quot;&gt;Keyboard Layouts&lt;/a&gt;.&lt;br&gt;&lt;/br&gt;
&lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=267189&quot;&gt;Bug 267189&lt;/a&gt; – Support capturing screenshots of widgets.&lt;br&gt;&lt;/br&gt;
&lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=277093&quot;&gt;Bug 277093&lt;/a&gt; – Support for Link widgets.&lt;/p&gt;
&lt;p&gt;There are also a lot of minor bugs that were fixed in this release.&lt;/p&gt;</description>
	<pubDate>Fri, 29 May 2009 12:34:46 +0000</pubDate>
</item>
<item>
	<title>Ram - Sriram Narayanan: Quote -&amp;gt; &quot;ZFS is the most amazing technology I've seen in recent times&quot;</title>
	<guid isPermaLink="false">urn:lj:livejournal.com:atom1:dynamicproxy:59820</guid>
	<link>http://dynamicproxy.livejournal.com/59820.html</link>
	<description>On Friday night at work, some of us were discussing our plans for the weekend. I mentioned that I'd visit I2IT - a college in Pune - and give a presentation on OpenSolaris and ZFS to the students. Ever on the watch for a chance to showcase ZFS, I gave my colleagues a quick demo on ZFS.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;We had a look at creating a snapshot, deleting files, and then recovering files from the .zfs folder as well as by rolling back to the snapshot. I also cited some disk performance numbers (5 mins for a full SVN checkout of a particular project on my laptop, vs 30+ mins for others who use Windows on the same laptop model). I also mentioned the notion of pools, of how one can transparently add storage, etc.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;I will be showcasing ZFS sometime this week to the entire office.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;While we were leaving, my colleague remarked &quot;ZFS is the most amazing technology I've seen in recent times&quot;.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Reflecting on it a bit, I couldn't agree more !</description>
	<pubDate>Mon, 18 May 2009 04:40:03 +0000</pubDate>
</item>
<item>
	<title>Ram - Sriram Narayanan: Some links on Cloud Computing</title>
	<guid isPermaLink="false">urn:lj:livejournal.com:atom1:dynamicproxy:59537</guid>
	<link>http://dynamicproxy.livejournal.com/59537.html</link>
	<description>Here is a useful link that helps explain Cloud Computing   : &lt;a href=&quot;http://industry.bnet.com/technology/10001746/fog-is-lifting-on-cloud-computing/&quot;&gt;http://industry.bnet.com/technology/10001746/fog-is-lifting-on-cloud-computing/&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;The &lt;a href=&quot;http://www.opencloudconsortium.org/&quot;&gt;Open Cloud Consortium &lt;/a&gt; has as &lt;a href=&quot;http://www.opencloudconsortium.org/software.html&quot;&gt;list of software &lt;/a&gt; related to Cloud Computing. There may be others too. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;According to the statements on &lt;a href=&quot;http://sector.sf.net&quot;&gt;Sector &lt;/a&gt; listed at that page, &lt;a href=&quot;http://sector.sf.net&quot;&gt;Sector &lt;/a&gt; is supposed to be twice as fast as &lt;a href=&quot;http://hadoop.apache.org/core/&quot;&gt; Hadoop &lt;/a&gt;. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Though I consider myself too old to understand the medium, I'm intrigued by the effort needed to keep Facebook running. Facebook's cloud computing related software, called &lt;a href=&quot;http://developers.facebook.com/thrift/&quot;&gt; Thrift &lt;/a&gt;, is available for download too.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Matt Asay asks &lt;a href=&quot;http://news.cnet.com/8301-13505_3-10241865-16.html&quot;&gt; Cloud computing: A natural conclusion of opensource ? &lt;/a&gt;. This is an informative read, because Matt provides perspectives on how users are no longer interested in the underlying technology, but in how they access that technology, and how inter-operable the data is.</description>
	<pubDate>Sun, 17 May 2009 05:22:57 +0000</pubDate>
</item>
<item>
	<title>Ram - Sriram Narayanan: Demos, Software, and getting them to an audience.</title>
	<guid isPermaLink="false">urn:lj:livejournal.com:atom1:dynamicproxy:59263</guid>
	<link>http://dynamicproxy.livejournal.com/59263.html</link>
	<description>My roommate is excited about opensolaris. Being a .NET developer, he wished to help create a mono package for Belenix. While I walked him through an exercise on building mono from source, I realized that we had a &quot;broadband&quot; line which gives us just 20KBps. While trying to get mono to build (we've not done this yet due to a corlib.dll version mismatch with mcs), we had to wait a while for mono and for monolite to get downloaded.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Yesterday, I'd presented on Belenix and ZFS at a local college I2IT, and had fallen short on DTrace and Zones demos. My custom Belenix installation has a broken zones config, and I've not made time to learn to write DTrace scripts.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;I also learned that it is impossible for the students of I2IT to download the Belenix ISO, or any of the tools and software that one could run on. Though they have a Sun Campus Ambassador who is doing a good job, he can only distribute what he receives as part of the ambassador program. Anything more, and the students have to fend for themselves.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;All opensolaris evangelists should have a good collection of demos for various topics, familiarity with the various topics that they are going to demo, CDs/DVDs to give away, and learning material (or at least a printout of URLs that people should visit - in case you run out of CDs/DVDs).&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Expecting people to download content is unrealistic - they may not have the bandwidth, and the sheer chore of having to download something could be a deterrent. This is a reality in India, and when we evangelize, we need to have various tools ready and available on distribution media.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;It may be worth having a demo CD all by itself, in case the basic Belenix CD does not have space. An alternative to consider would be having DVDs. &lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Here are some demos that I think we should have, along with the requisite software where possible.&lt;br&gt;&lt;/br&gt;	- Entertainment, Games, Graphics tools, OpenOffice&lt;br&gt;&lt;/br&gt;	- Communication Tools (IRC, Browsers, streaming-content servers and clients, file download tools, Skype in a Linux Zone, Jabber, etc). See note below on Skype.&lt;br&gt;&lt;/br&gt;	- Web app stacks&lt;br&gt;&lt;/br&gt;	- Wine for running Windows apps, along with some free Windows apps&lt;br&gt;&lt;/br&gt;	- Development Tools&lt;br&gt;&lt;/br&gt;	- Using opensolaris tools to solve college assignments, and to understand subjects better.&lt;br&gt;&lt;/br&gt;		We could have sample code that illustrates a topic, and DTrace scripts that helps the programmer see how the code behaves on a running system. This would be a very useful demo, imo.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;A lot of the above is already available thanks to the efforts of the opensolaris community, the various blogs, and the documentation team. The next round of work would be to collate all this together, improve where necessary, and to create DVDs. There'd be a lot of testing too.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;The creators/communities of the various tools would be a good group to source demos from.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Along with all this, we should also have instructions on setting up a local mirror, a DVD of the Belenix repository which could be used as the seed for the local mirror.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Note on Skype redistribution: We're allowed to re-distribute Skype, provided we send them an email, and comply with various conditions there ( a bit of a task, but can be achieved).&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://www.skype.com/intl/en/legal/promote/distribute/&quot;&gt;http://www.skype.com/intl/en/legal/promote/distribute/&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;a href=&quot;http://www.skype.com/intl/en/legal/promote/materials/&quot;&gt;http://www.skype.com/intl/en/legal/promote/materials/&lt;/a&gt;&lt;br&gt;&lt;/br&gt;Would it be legal to setup Skype in a zone and distribute that ? We should find out.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Note on Sun Studio Redistribution:&lt;br&gt;&lt;/br&gt;We need to have an answer once and for all - Can the excellent Sun Studio Compilers be redistributed by non-Sun distros ? We've initiated conversations by have not followed up on them.</description>
	<pubDate>Sun, 17 May 2009 05:05:40 +0000</pubDate>
</item>
<item>
	<title>Ram - Sriram Narayanan: Opensolaris/ZFS session at I2IT - musings</title>
	<guid isPermaLink="false">urn:lj:livejournal.com:atom1:dynamicproxy:58994</guid>
	<link>http://dynamicproxy.livejournal.com/58994.html</link>
	<description>Amey and I presented on opensolaris at Pune yesterday. Amey has put up a report &lt;a href=&quot;http://mail.opensolaris.org/pipermail/ug-posug/2009-May/000515.html&quot;&gt;here &lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Here's my own analysic.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;What went well:&lt;br&gt;&lt;/br&gt;- Rapport with the audience&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;- ZFS demos&lt;br&gt;&lt;/br&gt;	In my experience with showcasing opensolaris, ZFS alone sometimes convinces people that opensolaris should be considered seriously.&lt;br&gt;&lt;/br&gt;To Sun's ZFS team: I hope to do you proud with even better ZFS demos !&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;What didn't go well:&lt;br&gt;&lt;/br&gt;- Some students &quot;forgot&quot; that I'd mentioned that Belenix was a first class KDE 3.5.x environment.&lt;br&gt;&lt;/br&gt;	They wanted to know at the end how Belenix compared to a KDE environment. I blame myself for such questions, since I should have established beyond doubt that Belenix has just about everything that a KDE environment has to offer.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;- I forgot to prepare and take along Belenix CDs :(&lt;br&gt;&lt;/br&gt;  I was simply flooded with work, and am anyway guilty of not managing my time well.&lt;br&gt;&lt;/br&gt;  Now that I'm used to a 10 Mbps line at work where ISOs are downloaded within an hour or so, and because I know that I2IT is a premier institution, I assumed that the students would be able to download the Belenix ISO themselves. They told me that this was not possible given that they had limited bandwidth at college and that they had to go through a committee for anything over 30 MB in size. This excludes even GParted, btw, which is over 30 MB in size.&lt;br&gt;&lt;/br&gt;  This made me realize that if I get used to having high-speed bandwith despite being an Indian staying in India, it is unrealistic to expect the IPS team to understand that the world cannot download lots of content all the time.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Future Directions:&lt;br&gt;&lt;/br&gt;- Emphasize how Belenix is a first class KDE environment.&lt;br&gt;&lt;/br&gt;	Talk to the KDE evangelizing team for ideas here.&lt;br&gt;&lt;/br&gt;	Mention how the next version of Belenix could set the gound for opensolaris being _the_ KDE platform of choice.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;- Different presentation styles for students vs working professionals.&lt;br&gt;&lt;/br&gt;	&lt;br&gt;&lt;/br&gt;- Demos, demos, demos&lt;br&gt;&lt;/br&gt;	This needs a separate blog post by itself.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;- Have CDs and the opensolaris Learning Guides ready for use.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Bottom line: Be prepared.</description>
	<pubDate>Sun, 17 May 2009 04:14:26 +0000</pubDate>
</item>
<item>
	<title>Kiran Bellubbi: Pricing and Stickiness in Consumer Behaviour online</title>
	<guid isPermaLink="false">http://bellubbi.com/wordpress/?p=101</guid>
	<link>http://feedproxy.google.com/~r/smalldoses/~3/5mhPsOmgTsY/</link>
	<description>&lt;p&gt;All merchants online know pricing is absolutely critical to their bottom line. Plain discounting of products seasonal or in general is a merchandizing skill that is learned by all merchants when they’re trying to push sales online. Given the ease with which prices can be compared from one store to another and the popularity of price comparison engines. It is imperitive for all merchants (big and small) to understand how to price their products effectively to ensure that consumers purchase and “stick”.&lt;/p&gt;
&lt;p&gt;The way you set prices doesn’t &lt;strong&gt;just influence demand it also effects consumption&lt;/strong&gt;: ie. the extent to which your users actually use your service or you products that they’ve paid for and if they come back for more.&lt;/p&gt;
&lt;p&gt;Let’s take this example: 2 friends: Jill and Jane get a membership to a local gym. Jill gets a monthly membership at 100USD/month and Jane pays a 1000 USD for the yearly membership upfront. Now, fast forward 6 months later: who is more likely to remain committed to their exercise schedules? Given the motivations of both J’s is the same, there is a higher likelihood that Jane (yearly membership) drops off her regimen first. Psychology tests have shown that Jane in an attempt to extract the most value from her higher one time payment will peak at a certain time and stop exercising as frequently at the gym. Jill on the other hand continues to use the gym and is happy with the value that she is gaining from her purchase. Jill eventually sticks on with her monthly plan for another 2 years at the same gym.&lt;/p&gt;
&lt;p&gt;The lesson learned above is that not only is it critical to price correctly so that you target the Jill’s of the world to purchase today, but, it is also critical to make these one time buyers “stick”. Whether it is a one time purchase of a chair online or a discounted golf club bought online it is important to price correctly for “that” consumer and personalize the visit to an extent that the consumer has subliminally been affected positively.&lt;/p&gt;
&lt;p&gt;The first and foremost step in this process is to “&lt;em&gt;price correctly&lt;/em&gt;“. To effect the behaviour of the user positively a simple dumb discount that treats all visitors alike is just not going to cut it. This is the precise problem we’re tackling at Runa: understanding how to enable merchants to make better discounting decisions in real time for individual consumers that visit their sites and to increase lifetime value of these customers while at the same time maximizing their profit margins.&lt;/p&gt;
&lt;p&gt;I’ll be writing about some basic techniques on how simple dumb discounting can help your bottom line and then provide some measurement of how you can further optimize this $ value by using Runa’s SaaS campaigns (I’m talking about a &lt;strong&gt;200% increase in profit&lt;/strong&gt; by using Runa in some cases :) ).&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/smalldoses/~4/5mhPsOmgTsY&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Fri, 15 May 2009 21:55:50 +0000</pubDate>
</item>
<item>
	<title>Sriram Narayan: Fallacies of Knowledge Management: Summary</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-3568957351006561608</guid>
	<link>http://blog.sriramnarayan.com/2009/05/fallacies-of-knowledge-management.html</link>
	<description>&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/claudiobranch/3325101490/&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_P8pGGPoTKzo/SgJP6wgzoQI/AAAAAAAAAHA/WeoKjqopSsw/s320/bookshelf.jpg&quot; alt=&quot;&quot; style=&quot;margin: 0pt 0pt 10px 10px; cursor: pointer; width: 320px; height: 213px;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5332912779633598722&quot;&gt;&lt;/img&gt;&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;/div&gt;This post summarizes my series on fallacies of knowledge management.&lt;br&gt;&lt;/br&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;http://blog.sriramnarayan.com/2009/03/knowledge-management-fallacies-well.html&quot;&gt;  Well begun is half done, so let's begin by collecting content&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blog.sriramnarayan.com/2009/03/knowledge-management-fallacies.html&quot;&gt;  Repositories ensure that knowledge lasts longer than employees&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blog.sriramnarayan.com/2009/03/knowledege-management-fallacies-good.html&quot;&gt;  Good organization is key&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blog.sriramnarayan.com/2009/03/knowledge-management-fallacies-access.html&quot;&gt;Access Control is Key&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blog.sriramnarayan.com/2009/04/knowledge-management-fallacies-import.html&quot;&gt;Make it easy to import and attach documents&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blog.sriramnarayan.com/2009/05/km-fallacies-put-usable-tools-in-place.html&quot; id=&quot;ntzm&quot; title=&quot;Put usable tools in place, adoption will follow&quot;&gt;Put usable tools in place, adoption will follow&lt;/a&gt;&lt;br&gt;&lt;/br&gt;&lt;/li&gt;&lt;/ol&gt;      Plug: If you think your organization could use some help on KM, feel free to &lt;a href=&quot;http://sriramnarayan.com/TWI_advisory_collateral.pdf&quot; id=&quot;s_7s&quot; title=&quot;reach out&quot;&gt;reach out&lt;/a&gt;  to us.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-3568957351006561608?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/74bKdmPa4Io&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Thu, 07 May 2009 03:15:19 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Xiaoming Wang: 中国制造</title>
	<guid isPermaLink="false">http://cid-9d882dabc5a6f6a4.users.api.live.net/Users(-7095370997143505244)/9D882DABC5A6F6A4!668</guid>
	<link>http://satanyork.spaces.live.com/Blog/cns!9D882DABC5A6F6A4!668.entry</link>
	<description>Made in China是价格便宜的代名词。很多科技含量低，低附加值的东西都是中国或者亚洲小国制造的。如果人们谈论日本制造，德国制造，美国制造或者英国制造，就不会有人和价格便宜联系起来。价廉固然重要，但是物美才是核心竞争力。LV的包包不便宜，但是还是有很多人买。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;其实用“制造”来形容一个国家的产品并不完整。制造只是将一个设计利用一种或者几种工艺制作成实际产品。“设计”才是一个国家或者民族的精髓。&lt;a href=&quot;http://www.flickr.com/photos/nmsi/sets/72157608990797758/&quot;&gt;日本制造&lt;/a&gt;给予消费者的第一印象是高科技，人性化，精妙，质量好并且价格合理；&lt;a href=&quot;http://www.jaguar.com/global/default.htm&quot; target=&quot;_blank&quot;&gt;英国制造&lt;/a&gt;则是以高贵，奢华，经久耐用，出色的工程制造为名片；&lt;a href=&quot;http://www.vw.com/&quot;&gt;德国制造&lt;/a&gt;不必多说了，自然是严谨，质量性能极高，可靠；&lt;a href=&quot;http://en.wikipedia.org/wiki/Muscle_car&quot;&gt;美国制造&lt;/a&gt;倒是比较多元化，高科技，简洁，有气势，强劲。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;每个国家的设计制造其实代表了其民族的个性，并且及其鲜明。这让我及其困惑的是中国制造的特点是什么呢？中国的民族特点是什么呢？我google了一下&quot;Chinese car design&quot;,找到了这样一个链接［&lt;a href=&quot;http://www.carkeys.co.uk/news/2008/january/17/14506.asp&quot;&gt;http://www.carkeys.co.uk/news/2008/january/17/14506.asp&lt;/a&gt;］，如果这是世界看到的中国设计，那实在是太可怕了！！！这完全是精神病院里边跑出来了几个搞了这么几个脑袋撞了大树之后出来的东东。看看刚刚上海车展的&lt;a href=&quot;http://www.cheshi.com.cn/news/images/63850/63880_8.jpg&quot; target=&quot;_blank&quot;&gt;北京制造&lt;/a&gt;，也实在看不出什么民族特点来。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;我来伦敦生活后就去了所有我感兴趣的博物馆，尤其是和设计相关的博物馆。直到有一天我看到了一个叫做龙马奔腾的玉雕被其的精巧深深的震撼了。想起在博物馆展出的大多数中国展品大多数都是以精巧和匪夷所思使其与众不同。或许这就是中国制造应该有的精髓吧。当然质量是任何制造都不可或缺的。希望不久的将来能看到中国的产品能真正代表中华民族的特点而畅销全世界。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;首先要做的事情就是“停止模仿”。你可以借鉴甚至是高价购买别人的先进技术，别人的制造和管理方法，但是完全没有必要抄袭别人的设计啊。如果你是一个有思想，有文化，有创造性的民族为什么不创造呢？很期待中国的&lt;a href=&quot;http://blogs.wsj.com/chinajournal/2009/03/17/chinese-car-designers-lots-of-talent-few-job-prospects/&quot; target=&quot;_blank&quot;&gt;70年以后出生的人&lt;/a&gt;能改变这个非常羞耻的现实。&lt;br&gt;&lt;/br&gt;</description>
	<pubDate>Mon, 04 May 2009 17:12:29 +0000</pubDate>
</item>
<item>
	<title>Sriram Narayan: KM fallacies: Put usable tools in place, adoption will follow</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-21992362.post-4519573682492371310</guid>
	<link>http://blog.sriramnarayan.com/2009/05/km-fallacies-put-usable-tools-in-place.html</link>
	<description>The effort of running a typical KM &lt;i&gt;initiative&lt;/i&gt; almost makes us want to believe that mass adoption will follow. Unfortunately, Ms.Adoption is not easily wooed. The launch of these initiatives are usually broadcast via company wide email. An increasing percentage of employees seem to be immune to such broadcasts (for good reason?). The early adopters, a smail percentage, use it for a few days and then their activity begins to dwindle. Adoption proceeds at an uneven pace and sometimes fails to reach critical mass needed for positive &lt;a href=&quot;http://en.wikipedia.org/wiki/Network_effect&quot; id=&quot;qlno&quot; title=&quot;network effects&quot;&gt;network effects&lt;/a&gt;. A year later, it's time for yet another initiative.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;There are often genuine reasons why adoption doesn't take off. For example, the applications may not be easily accessible outside the company intranet. Or the applications may be slow to access from remote offices. Maybe people are just overworked. I am begining to wonder if there is another factor at play. I have observed it on the web and I suspect similar forces are at play within the enterprise: poor citizenship. Too many of us prefer to be passive consumers of public content on the internet. We don't produce or perhaps more importantly, &lt;i&gt;curate&lt;/i&gt; existing content. Granted, there are some prolific producers of mediocre content via blogs, comments, tweets, and posts to public mailing lists or discussion groups (and a few prolific producers of really good content via the same channels) but they are more the exception than the rule.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;Some examples of poor citizenship with respect to curating content:&lt;br&gt;&lt;/br&gt;&lt;ol&gt;&lt;li&gt;Not clicking &quot;I found this review helpful/unhelpful&quot; on a website that carries reviews (e.g. Amazon) or &quot;This documentation was/was not useful to me&quot; on a website that actively solicits feedback on documentation (e.g. many of Google's help pages)&lt;/li&gt;&lt;li&gt;Not adding appropriate tags to images found on Flickr&lt;br&gt;&lt;/br&gt;  &lt;/li&gt;&lt;li&gt;Not posting answers to unanswered questions that you ask in a public forum and later figure out the answer/workaround for.&lt;/li&gt;&lt;li&gt;There are times when programmers struggle with a cryptic stacktrace at work and a web search points them to the exact cause. All because someone took the effort to blog about that issue. You often see a number of grateful comments at the bottom of such posts. Yet, when I overcome such a problem by myself, I seldom try to write a post about it.&lt;br&gt;&lt;/br&gt;  &lt;/li&gt;&lt;/ol&gt;  It's not like we don't do it because we are against &lt;a href=&quot;http://www.roughtype.com/archives/2006/12/sharecropping_t.php&quot; id=&quot;u2yr&quot; title=&quot;digital sharecropping&quot;&gt;digital sharecropping&lt;/a&gt;. It might be that trying to be a good cyber citizen leads to &lt;a href=&quot;http://sethgodin.typepad.com/seths_blog/2005/03/dont_shave_that.html&quot; id=&quot;y40e&quot; title=&quot;yak shaving&quot;&gt;yak shaving&lt;/a&gt;. I suspect that at least some it just boils down to a I-can't-be-bothered attitude. This attitude has tragic consequences for commons like public forums and wikis. Not many people seem to want to take the effort to contribute. But a system that fully relies on user generated content cannot succeed in the face of indifferent users. To some extent, cultural legacies determine our ability to effectively participate in a system that more resembles a gift economy. Incentive systems may help with adoption but they need to be &lt;a href=&quot;http://stackoverflow.com/faq#reputation&quot; id=&quot;twmz&quot; title=&quot;tailored&quot;&gt;tailored&lt;/a&gt;  to the specific dynamics of the user community. All in all, adoption is a tough nut to crack.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http://blog.sriramnarayan.com&quot;&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/tracker/21992362-4519573682492371310?l=blog.sriramnarayan.com&quot; alt=&quot;&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/XploringAround/~4/sbTGDNNKX94&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Fri, 01 May 2009 13:41:53 +0000</pubDate>
	<author>noreply@blogger.com (Sriram)</author>
</item>
<item>
	<title>Xiaoming Wang: 郎朗 伦敦行</title>
	<guid isPermaLink="false">http://cid-9d882dabc5a6f6a4.users.api.live.net/Users(-7095370997143505244)/9D882DABC5A6F6A4!661</guid>
	<link>http://satanyork.spaces.live.com/Blog/cns!9D882DABC5A6F6A4!661.entry</link>
	<description>世界上最受欢迎的classic music super star是谁？当英国的媒体大肆宣传这个只有26岁的钢琴家的时候，你可能会想郎朗为什么会如此受欢迎。4月14号到19号这一周郎朗在伦敦举行的4场音乐会和一场专访。我有幸到现场倾听了三场音乐会并且参加了LSO对他的专访。&lt;br&gt;&lt;/br&gt; &lt;br&gt;&lt;/br&gt;感染了，郎朗的音乐，郎朗的表演实在是无与伦比。往往是每段演奏结束后几秒中之后才是满场的掌声，因为大家都还都沉浸在乐曲之中。我的语言能力是无法描述其音乐的动人和精彩。这让我想起初中语文课本&lt;a href=&quot;http://zhidao.baidu.com/question/13345173.html&quot;&gt;《绝唱》（节选自《老残游记》）中一段对艺人王小玉的表演&lt;/a&gt;。英国女王和Philip亲王曾经问郎朗，你手那么快没有把钢琴弹碎啊？郎朗在弹奏黑白相间的琴键如同一双手在一个二八少女的侗体上不断的游走；悠扬的琴声好像是少女的呻吟；其中的美妙实在是无法形容。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;人人都说郎朗的双手多么“昂贵”，其实真正昂贵的是郎朗的智慧；一个26岁的男孩英语非常流利，并且很擅长用其有限的英语能力给予很多提问非常精彩的解释。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;郎朗是一个非常典型的80后，个性鲜明。当大家要求与其合影的时候，他不断的做着鬼脸；摆各种pose，多动的性格都非常有趣，完全是一个没有长大的男孩。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;郎朗的成功是一个优秀商业团队的包装。郎朗改变了人类对严肃音乐的印象。不再严肃，而是充满激情！郎朗的每场音乐会都是富有个性的表演，而不是单一的钢琴演奏。&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;span&gt;&lt;a href=&quot;https://aemh8a.bay.livefilestore.com/y1mkWyJGwU3uqIJU6AM4oUu3-2S4BNeFWAQXTSB-hcBHppYtXy2O9Y8vwPeKCkD-1L0QeXPJc59BS-BB67KXJSY7oPQp1ofxdvOkdz8-_Eu_FREngS7-7_PwtmuM-mJ8jlUpyClz9janqDxjP3PbmxPrQ/IMG_3148.JPG&quot; target=&quot;_blank&quot; rel=&quot;wlpp;url=https://aemh8a.bay.livefilestore.com/y1mkwyjgwu3uqiju6am4ouu3-2s4bnefwaqxtsb-hcbhppytxy2o9y8vwpekckd-1l0qexpjc59bs-bb67kxjsy7opqp1ofxdvokdz8-_eu_frengs7-7_pwtmum-mj8jlupyclz9janqdxjp3pbmxprq/img_3148.jpg&quot;&gt;&lt;img src=&quot;https://aemh8a.bay.livefilestore.com/y1mkWyJGwU3uqIJU6AM4oUu3-2S4BNeFWAQXTSB-hcBHppYtXy2O9Y8vwPeKCkD-1L0QeXPJc59BS-BB67KXJSY7oPQp1ofxdvOkdz8-_Eu_FREngS7-7_PwtmuM-mJ8jlUpyClz9janqDxjP3PbmxPrQ/IMG_3148.JPG&quot; alt=&quot;&quot;&gt;&lt;/img&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt; &lt;br&gt;&lt;/br&gt; &lt;br&gt;&lt;/br&gt; &lt;br&gt;&lt;/br&gt; &lt;br&gt;&lt;/br&gt;</description>
	<pubDate>Thu, 30 Apr 2009 19:27:09 +0000</pubDate>
</item>
<item>
	<title>Akshay Dhavle: Kanban</title>
	<guid isPermaLink="false">tag:blogger.com,1999:blog-24663619.post-2383565561772202497</guid>
	<link>http://feedproxy.google.com/~r/agilebusinessanalysis/~3/K-GyHK8w7Ec/kanban.html</link>
	<description>Although I am not in the thick of things right now (because I am onsite, alone, so far away from my team) I follow the very active kanbandev yahoo group. It's a great resource for thoughts and...&lt;img src=&quot;http://feeds.feedburner.com/~r/agilebusinessanalysis/~4/K-GyHK8w7Ec&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/img&gt;</description>
	<pubDate>Tue, 28 Apr 2009 20:29:53 +0000</pubDate>
	<author>noreply@blogger.com (Akshay Dhavle)</author>
</item>

</channel>
</rss>
