<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;A0AARXszcSp7ImA9WhRaE0Q.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494</id><updated>2012-02-16T05:42:24.589-08:00</updated><category term="UNIX" /><category term="Activate" /><category term="Vista" /><category term="Information on Newborn Child" /><category term="IOpenRowset" /><category term="DNS" /><category term="SQL" /><category term="Technology" /><category term="Cache" /><category term="Hidden" /><category term="Concurrency Visualizer" /><category term="Deployment" /><category term="TPL" /><category term="Parallel Programming" /><category term="Remote Desktop" /><category term="IP Virtualization" /><category term="1985" /><category term="Apple" /><category term="Interview" /><category term="Finance" /><category term="HTTP" /><category term="IPhone" /><category term="SQL Server 2008 SP1 Source" /><category term="Windows Mobile 7" /><category term="Web Browsing" /><category term="Speed of Internet" /><category term="SQL Server 2008 Source" /><category term="IPhone App" /><category term="ARPANET" /><category term="General" /><category term="Chrome" /><category term="IPOD" /><category term="2010 Panchamgam" /><category term="Heart Disease" /><category term="te" /><category term="Ganesh Chaturthi" /><category term="MultiTouch" /><category term="Windows 2008 R2" /><category term="Startup Program" /><category term="History" /><category term="Parallel Computing" /><category term="Virtualization" /><category term="Bootable USB" /><category term="SlipStreamed" /><category term="Health" /><category term="Microsft" /><category term="IRowsetFastLoad" /><category term="Telugu Horoscope" /><category term="Windows 7" /><category term="LINQ" /><category term="Mobile" /><category term="Resume" /><category term="1987" /><category term="Horoscope" /><category term="Boot Windows 7 from USB" /><category term="Gesture" /><category term="Boot from USB" /><category term="Faster" /><category term=".Net 4" /><category term="Packet Scheduler" /><category term="Take OwnerShip" /><category term="CV" /><category term="CTCP" /><category term="Raasi Phalalu" /><category term="Google" /><category term="XCode" /><category term="CreateAccessor" /><category term="Setup" /><category term="Careers" /><category term="Merge SP1 to SQL Server 2008. Customize SQL Server 2008 Installation" /><category term="Protocol. Web" /><category term="Featured" /><category term="LAPTOP" /><category term="Astrology" /><category term="WM_TOUCH" /><category term="Spped" /><category term="COBOL" /><category term="Agile" /><category term="Administrator" /><category term="SPDY" /><category term="STEVE JOBS" /><category term="SQL Server 2008 SP1" /><category term="Tamil festivals" /><category term="MonoTouch" /><category term="Windows Mobile 6.5" /><category term="VB.Net" /><category term="Telugu festivals" /><category term="Compund TCP. TCP" /><category term="Telugu Samethalu" /><category term="Tablet" /><category term="Agile Development" /><title>Way2Solve</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.way2solve.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.way2solve.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>40</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/way2solve/iaFl" /><feedburner:info uri="way2solve/iafl" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CEQNRnc8cCp7ImA9WhdWEUk.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-7645019750835856860</id><published>2011-09-04T06:19:00.001-07:00</published><updated>2011-09-04T06:19:57.978-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-04T06:19:57.978-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Agile Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Source Control for Agile Development</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FRU5SIryFtkZmZPhtWLqFxIZSTI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FRU5SIryFtkZmZPhtWLqFxIZSTI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FRU5SIryFtkZmZPhtWLqFxIZSTI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FRU5SIryFtkZmZPhtWLqFxIZSTI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This paper describes an example of how to handle version control in an agile environment with multiple teams. I'm going to assume that you are familiar with the basic elements of Scrum and XP and task boards. I didn't invent this scheme - it is based on the "mainline model" or "stable trunk pattern". See the references section for more info.  &lt;p&gt;I wrote this paper because I keep bumping into teams that really need something like this. Most teams seem to like the model quite a lot once they understand it. This is also the scheme that we migrated to at the company described in "Scrum and XP from the Trenches". It really helped us develop and release software in a more agile manner. By describing the model in an easy-to-read fashion maybe I won't have to explain it as often over a whiteboard :o)  &lt;p&gt;Note that this is only one pattern among many, not a silver bullet. If you do choose to use this pattern you will probably need to adapt it to match your particular context.  &lt;p&gt;&lt;b&gt;Goals&lt;/b&gt;  &lt;p&gt;In an agile environment with multiple teams &lt;b&gt;the version control model needs to achieve the following goals:&lt;/b&gt;  &lt;ul&gt; &lt;li&gt;&lt;b&gt;Fail fast&lt;/b&gt;  &lt;ul&gt; &lt;li&gt;Code conflicts and integration problems should be discovered as soon as possible.  &lt;li&gt;Better to fix small problems often than to fix large problems seldom.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;b&gt;Always releasable&lt;/b&gt;  &lt;ul&gt; &lt;li&gt;Even after a really bad sprint there should be at least something that is releasable.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;b&gt;Simple&lt;/b&gt;  &lt;ul&gt; &lt;li&gt;All team members will be using this scheme every day, so the rules and routines must be clear and simple.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;b&gt;Single page summary (for wall mounting)&lt;/b&gt;  &lt;p&gt;&lt;i&gt;If this picture is confusing to you, don’t worry, just read the paper.&lt;/i&gt;&lt;i&gt;&lt;br&gt;&lt;/i&gt;&lt;i&gt;If this picture is obvious to you, don’t bother reading the paper.&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_VUth5k5296M/Sgs2AI7uZ1I/AAAAAAAAAB4/C9H1X_Fncro/s1600-h/clip_image001[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQA1m19yx2EHGM1K&amp;amp;url=http%3A%2F%2Flh6.ggpht.com%2F_VUth5k5296M%2FSgs2Aw-vsVI%2FAAAAAAAAACA%2F7m8Dwa_Oi7k%2Fclip_image001_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;&lt;br&gt;&lt;a href="http://lh6.ggpht.com/_VUth5k5296M/Sgs2B4zPtGI/AAAAAAAAACE/BFK8BvsP1kw/s1600-h/clip_image002[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQAspvDoVh-zSpsR&amp;amp;url=http%3A%2F%2Flh3.ggpht.com%2F_VUth5k5296M%2FSgs2CYF-bWI%2FAAAAAAAAACI%2FKLycY_WOflk%2Fclip_image002_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;&lt;br&gt;&lt;i&gt;This summary is also available as a &lt;a href="http://www.infoq.com/resource/articles/agile-version-control/en/resources/Agile-version-control-with-multiple-teams_Cheatsheet.pdf;jsessionid=CAF2AA9252A0EE53F28B0AF275472F45"&gt;downloadable pdf&lt;/a&gt;&lt;/i&gt;  &lt;p&gt;&lt;b&gt;The version control pattern&lt;/b&gt;&lt;b&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;Branch owner &amp;amp; policy&lt;/b&gt;  &lt;p&gt;Here's a simple rule.  &lt;p&gt;&lt;b&gt;&lt;i&gt;Rule&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: Each branch (even the trunk) has an owner and a policy.&lt;/i&gt;  &lt;p&gt;Otherwise we get a mess. The policy describes rules for what kind of stuff is allowed to be checked into this branch. The owner is the person responsible for defining and following up the policy.  &lt;p&gt;&lt;b&gt;The "done" concept&lt;/b&gt;  &lt;p&gt;When is a user story "done"? More specifically, when your team moves one particular user story into the "done" column on their taskboard, what does that actually mean?  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_VUth5k5296M/Sgs2C4Lr8-I/AAAAAAAAACM/I0EJBzzWLYY/s1600-h/clip_image003[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQBbG__X25j22ghD&amp;amp;url=http%3A%2F%2Flh3.ggpht.com%2F_VUth5k5296M%2FSgs2DrA1XEI%2FAAAAAAAAACQ%2FQExfepeegB4%2Fclip_image003_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;I'll assume the following.  &lt;p&gt;&lt;b&gt;&lt;i&gt;Assumption&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: Definition of Done = "releasable".&lt;/i&gt;  &lt;p&gt;So when a team member says that a story is Done and moves the story card into the Done column, a customer could run into the room at that moment and say "Great! Let's go live now!", and nobody in the team will say "no, but wait".  &lt;p&gt;You can use whatever definition of Done you like. But remember - if the definition is anything less than "releasable" you need to consider: what is not included in Done? And who will do that other stuff? When? And what happens if something goes wrong after Done?  &lt;p&gt;&lt;b&gt;The Done branch&lt;/b&gt;  &lt;p&gt;When a story is Done, it needs a home. With my definition of Done ("releasable") that means there must be some branch in the system that you could release from in order to get that story into production. That's the Done branch.  &lt;p&gt;Any branch could be the Done branch. I'm going to use the trunk as the Done branch (a good starting point). Sometimes this is called the "mainline".  &lt;p&gt;&lt;b&gt;&lt;i&gt;Assumption&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: Trunk is the Done branch.&lt;/i&gt;  &lt;p&gt;&lt;b&gt;Trunk policy:&lt;/b&gt;  &lt;ul&gt; &lt;li&gt;Can release at any time  &lt;li&gt;Want to release ASAP&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;"Can release at any time" means just that. At any moment, the product owner can decide that we should make a new production release directly from the tip of the trunk.  &lt;p&gt;Here's an example.  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_VUth5k5296M/Sgs2EGJZ2aI/AAAAAAAAACU/cw7bpTViK-s/s1600-h/clip_image004[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQDGQmav_OpftS7d&amp;amp;url=http%3A%2F%2Flh4.ggpht.com%2F_VUth5k5296M%2FSgs2EnICE-I%2FAAAAAAAAACY%2FMNoVJPPWbgQ%2Fclip_image004_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;The blue line represents the trunk. Each green ball represents one checkin. So 5 things were checked in during this sprint. We could release from the trunk at any time, although we will typically do it at the end of each sprint. If half the team gets sick near the end of the sprint and they don't have time to finish story #5, we could still make a release. And, of course, we could choose &lt;i&gt;not&lt;/i&gt; to make a release and instead wait another sprint to get story #5 in.  &lt;p&gt;"Want to release ASAP" means that we shouldn't check in a story unless we &lt;i&gt;want&lt;/i&gt; it to go live (or at least &lt;i&gt;wouldn't mind&lt;/i&gt; if it goes live). If story #3 above is something that I don't want to release, I've essentially killed the branch. Since the branch is no longer releasable, I've violated the branch policy.  &lt;p&gt;&lt;b&gt;&lt;i&gt;Rule&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: Don't combine different release cycles on a single branch&lt;/i&gt;  &lt;p&gt;&lt;b&gt;When do we create additional branches?&lt;/b&gt;  &lt;p&gt;As seldom as possible. Here's a good rule of thumb.  &lt;p&gt;&lt;b&gt;&lt;i&gt;Recommendation&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: Only create a new branch when you have something you want to check in, and there is no existing branch that you can use without violating its branch policy.&lt;/i&gt;  &lt;p&gt;&lt;b&gt;Work branches&lt;/b&gt;  &lt;p&gt;OK, so let's say we have our nice and clean trunk, releasable at any moment.  &lt;p&gt;Wait a sec. Releasable means &lt;i&gt;integration tested&lt;/i&gt;. And that means we need to &lt;i&gt;run integration tests&lt;/i&gt;. So we need to run integration tests&lt;i&gt;before&lt;/i&gt; checking in to the trunk.  &lt;p&gt;So where do I check in code that I &lt;i&gt;believe&lt;/i&gt; is done, but need to verify before checking in to the trunk? Of course, I could test it locally on my machine, and then check it directly into trunk. But that's a bit scary, I'm sure you've all run into the "hey but it works on my machine" issue.  &lt;p&gt;Another issue is "OK, I'm finished coding for today, I'm going home now. Where do I check in my code? It's not tested yet, so I can't check in to the trunk. I want to check it in somewhere so that other team members can continue working on it" (agile team = collective code ownership right?)  &lt;p&gt;There we go. We have stuff we'd like to check in, and there's no place we can check in without violating a branch policy. That's a valid reason to create a new branch.  &lt;p&gt;Let's call this a &lt;i&gt;work&lt;/i&gt; branch, shared by all members of the team. Some people call it a development branch.  &lt;p&gt;Team A work branch policy:  &lt;ul&gt; &lt;li&gt;Code compiles &amp;amp; builds, all unit tests pass.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_VUth5k5296M/Sgs2FXrwc2I/AAAAAAAAACc/8rDy_uu8ci0/s1600-h/clip_image005[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQCYD8A_zCR3zgow&amp;amp;url=http%3A%2F%2Flh3.ggpht.com%2F_VUth5k5296M%2FSgs2F9PkRiI%2FAAAAAAAAACg%2FvlynRFTd3Mg%2Fclip_image005_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;Great, so now we have two branches! One stable branch (the trunk) and one slightly less stable branch (the team branch). The team branch is red to highlight that it is less stable, i.e. the stuff on that branch passes the unit tests but it might not be integration tested and might not be stable enough for release. OK, so the now team has a place to check in work in progress!  &lt;p&gt;Hmmmm. What about synchronizing the branches then? Read on.  &lt;p&gt;&lt;b&gt;Publishing from work to trunk&lt;/b&gt;  &lt;p&gt;At some point (hopefully) a story will get Done. More specifically, at some point the work branch will get to a point where it is &lt;i&gt;releasable&lt;/i&gt;. At that point we can (and should) publish to the trunk, i.e. take all new code on the work branch and copy over to the trunk. After that the trunk and the work branch are identical.  &lt;p&gt;We can call this "publishing" since we have been doing some work and are now ready to "publish" it back to the trunk for release. Just a helpful metaphor.  &lt;p&gt;Here's an example. Let's say we've implemented two stories: Register and Deposit. They are Done, i.e. unit tested, integration tested, and releasable. We have started working on Withdraw, but it is not Done yet. The taskboard would look something like this:  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_VUth5k5296M/Sgs2GVLJ4mI/AAAAAAAAACk/75VJbx9PDIQ/s1600-h/clip_image006[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQA0fYLBhkxwEiZ5&amp;amp;url=http%3A%2F%2Flh3.ggpht.com%2F_VUth5k5296M%2FSgs2G_-s__I%2FAAAAAAAAACo%2FlXicwWjyYpM%2Fclip_image006_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;Each yellow stickynote on the board represents a task, i.e. one piece of work needed to complete the story. For example edit class X, update the build script, etc. Each task typically represents about 1 man-day of work, each story typically represents about 3 - 8 man-days of work.  &lt;p&gt;The branch history would look something like this:  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_VUth5k5296M/Sgs2HaDrg6I/AAAAAAAAACs/tLO1cupPSdI/s1600-h/clip_image007[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQA32enTQMhzHjL_&amp;amp;url=http%3A%2F%2Flh3.ggpht.com%2F_VUth5k5296M%2FSgs2H_S8TvI%2FAAAAAAAAACw%2FLfOk7GkN28A%2Fclip_image007_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;So first our team implements Register. Checkin to the work branch, run the integration tests, fix some problems, checkin again, run the tests again, works! Register is Done! Publish it to the trunk.  &lt;p&gt;Next implement Deposit. Only one checkin was needed. Integration tests pass, so we release to trunk again.  &lt;p&gt;Now the team is in the middle of implementing Withdraw. They have done two checkins so far, but aren't done.  &lt;p&gt;Note that "release to trunk" doesn't mean that we are copying the code for one specific story to trunk. It means we are copying everything from work to trunk, i.e. doing a complete synchronization.  &lt;p&gt;So two interesting questions arise:  &lt;ol&gt; &lt;li&gt;What if our team implements multiple stories in parallell?  &lt;li&gt;What if other teams are publishing to the trunk as well?&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Let's do one at a time.  &lt;p&gt;&lt;b&gt;What if our team implements multiple stories in parallell?&lt;/b&gt;  &lt;p&gt;If the team implements one story at a time, publishing to trunk is trivial. As soon as a story is implemented and tested on the work branch we copy everything from work to trunk. Done.  &lt;p&gt;But wait. What if we are doing multiple stories simultaneously within the team? What if Register is done and Deposit is in progress?  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_VUth5k5296M/Sgs2IhVhgTI/AAAAAAAAAC0/-7SLxvqwNFE/s1600-h/clip_image008[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQCM0KTbyyBbcul4&amp;amp;url=http%3A%2F%2Flh3.ggpht.com%2F_VUth5k5296M%2FSgs2JTbiGhI%2FAAAAAAAAAC4%2Ff1dWN7iswKI%2Fclip_image008_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;If we synchronize to trunk at this point, we will be including the partially complete Deposit story, which isn't releasable! Violation of trunk policy!.  &lt;p&gt;Of course, we could wait for Deposit to complete.  &lt;p&gt;(waiting...)  &lt;p&gt;OK Deposit is complete now! Great! Wait a sec... now somebody has started working on Withdraw! Ack! Same problem!  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_VUth5k5296M/Sgs2JyXBgQI/AAAAAAAAAC8/VT5zqCEtYpk/s1600-h/clip_image009[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQDknMjQKG-w4WrD&amp;amp;url=http%3A%2F%2Flh5.ggpht.com%2F_VUth5k5296M%2FSgs2KhAnhiI%2FAAAAAAAAADA%2FmVl3q0OzP3A%2Fclip_image009_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;If one of the Deposit tests fail it will be hard to know if that is due to the Deposit code or the partially complete Withdraw code that is checked in to the same branch.  &lt;p&gt;Waiting doesn't help. We are rolling a snowball, saving up for a big bang release at some hypothetical point in the future when all stories are complete (if that ever happens).  &lt;p&gt;This is an extremely common problem. So what do we do?  &lt;p&gt;Here are some strategies:  &lt;ul&gt; &lt;li&gt;Don't do so much parallell development. Try to focus the team on one story at a time.  &lt;li&gt;If someone is going to start work on Deposit before Register is complete, wait to check in the Deposit code until Register is complete. Or maybe even check in Deposit on a separate temporary branch if you enjoy juggling branches.  &lt;li&gt;If someone is going to start work on Deposit before Register is complete, start with the safe and invisible bits, code changes that aren't going to affect the releasability of the branch. For example if Deposit requires some new code and some modification of existing code, implement the new code now (new methods, new classes, new tests, etc) but not the modifications. If Deposit needs new GUI elements then make them invisible for now. Once Register is complete and released to the trunk we can start implementing the rest of Deposit.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Here's a convenient rule set:  &lt;ul&gt; &lt;li&gt;Anyone working on the top priority story is King.  &lt;li&gt;Everyone else on the team is a Servant.  &lt;li&gt;You want to be King. Try to find ways to help out with the top priority story.  &lt;li&gt;Whenever a King needs help, Servants immediately offer their services.  &lt;li&gt;A Servant may not disrupt a King.  &lt;li&gt;A Servant may never check in unreleasable code on the work branch. A King may check in whatever he pleases (as long as he doesn't violate a branch policy of course).  &lt;li&gt;As soon as the top priority story is Done, anyone working on the next story is now King.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;You might even get a few crowns for the team :o)  &lt;p&gt;On the whole, many teams seem to over-rate the benefits of implementing many stories concurrently. It gives a nice feeling of speed but can be an illusion since it pushes the risky and time consuming bits to the end - merging and integrating and testing.  &lt;p&gt;That's why Scrum teams are supposed to be small (&amp;lt; 9 people) - so that they can collaborate closely and focus their efforts. If everyone does their own story concurrently there probably isn't much collaboration going on. Sure you can have people looking ahead, preparing the next story and doing some of the implementation. But at any given moment the bulk of the team's efforts should be focused on the top priority story.  &lt;p&gt;Multiple teams are a different story. Multiple teams are created when you specifically want to implement multiple stories in parallell. We'll look at that in a moment. First I want to talk a bit about regression testing and diverging code within the team.  &lt;p&gt;&lt;b&gt;Done includes regression testing!&lt;/b&gt;  &lt;p&gt;When a story is Done we move it to the Done column and copy from work to trunk. The trunk must always be releasable. This has an important implication.  &lt;p&gt;&lt;b&gt;&lt;i&gt;Rule&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: Whoever touches the trunk is responsible for ensuring that the whole trunk stays releasable - including all previous functionality!&lt;/i&gt;  &lt;p&gt;This rule means, in effect, that testing story A also includes running all relevant regression tests for previously implemented stories. It is not enough that story A works if that code has broken previous stories.  &lt;p&gt;Wait a sec. Isn't that unreasonable? Running all regression tests every time a story is complete?&lt;br&gt;Well, first of all I didn't say all regressions tests. I said all relevant regression tests. Remember that we had a nice clean releasable trunk as a basis, and now we are just adding one story! That is a fairly small incremental change. If our regression tests are automated we could run them all. But if there are manual regression tests we will have to be selective.&lt;br&gt;It all boils down to a risk vs cost tradeoff. For each manual regression test we should evaluate the cost of the test (i.e. how much work it is to do the test) vs the likelihood that any important defects will be discovered. And of course weigh in the cost of automating that test :o)  &lt;p&gt;&lt;b&gt;Diverging code (merging conflicts)&lt;/b&gt;  &lt;p&gt;What if I'm happily writing code that calls the Widget class. What I don't know is that my team member Jim removed the Widget class one hour ago, in conjunction with a refactoring. So now we have&lt;i&gt;diverging code&lt;/i&gt;. I want to discover this &lt;i&gt;as soon as possible&lt;/i&gt;, before wasting time writing even more code that calls the Widget class.  &lt;p&gt;&lt;b&gt;&lt;i&gt;Rule&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: Synchronize your code with the work branch continuously (= as often as possible)&lt;/i&gt;  &lt;p&gt;Synchronize in this case means both directions. Merge down the latest from the work branch, and check in your code. The first part can be called "catching up" (= I want to find out what other people have checked in). The second part can be called "publishing" (= I want my changes to be made available to the rest of the team).  &lt;p&gt;Once per hour or so is a good habit, basically whenever you move from one task to another and aren't in the middle of a flow. This is not just about "I want to find out ASAP when someone else writes code that conflicts with mine", it's also about "I want the other guys to find ASAP if I write code that conflicts with theirs". Just remember to not break the policy of the work branch (unit tests pass and whatnot).  &lt;p&gt;This rule may sound rather obvious but bear with me. I want to make this crystal clear since we will be reusing this mindset further down when dealing with multiple teams.  &lt;p&gt;&lt;b&gt;Multiple teams - what if other teams are publishing to the trunk as well?&lt;/b&gt;  &lt;p&gt;Let's say we have team A and team B. They are cross functional feature teams working on a flight booking system. Team A is focusing on the booking process, team B is focusing on the backoffice stuff.  &lt;p&gt;Let's say they are going to start a sprint now, with two user stories per team (usually there will be more stories than that in a sprint).  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_VUth5k5296M/Sgs2LeQY8bI/AAAAAAAAADE/MJr_YbzuYFQ/s1600-h/clip_image010[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQCXu-QLmIu3j1Uv&amp;amp;url=http%3A%2F%2Flh6.ggpht.com%2F_VUth5k5296M%2FSgs2L14HmPI%2FAAAAAAAAADI%2FMON1-aS3JPw%2Fclip_image010_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;Each team has their own work branch, since they each need somewhere to test their code before publishing to the trunk.  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_VUth5k5296M/Sgs2MRnqj6I/AAAAAAAAADM/1KCN1pDILBU/s1600-h/clip_image011[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQAqFnyuyNTR1gab&amp;amp;url=http%3A%2F%2Flh3.ggpht.com%2F_VUth5k5296M%2FSgs2MzJ0VKI%2FAAAAAAAAADQ%2F1w9l83rv6n8%2Fclip_image011_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;Now we have an interesting problem. Let's say I'm in team A and we have our work branch. Changes might be made in the trunk, without being made in my work branch first! Why? Well because there's another team out there, and they will publish to the trunk whenever they finish a story!  &lt;p&gt;So at any given moment, there may be new code on the trunk that I don't know about. And that code might (god forbid) conflict with my code! Maybe someone in team B renamed the Widget class that I call from my code and... uh... wait a sec. Didn't we just talk about this?  &lt;p&gt;Yep, that's right. It's the same problem. And same solution. But on a slightly different scale.  &lt;p&gt;&lt;b&gt;&lt;i&gt;Rule&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: Merge from trunk to your work branch every day&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_VUth5k5296M/Sgs2NsYC55I/AAAAAAAAADU/NO_Up-sZiaI/s1600-h/clip_image012[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQD19myrHvk1P17h&amp;amp;url=http%3A%2F%2Flh5.ggpht.com%2F_VUth5k5296M%2FSgs2OklHSXI%2FAAAAAAAAADY%2FF8ITIsXvnqY%2Fclip_image012_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;Every day when I get to work, someone in my team is responsible for merging the latest version from trunk to our team work branch (= "catching up" with changes made to the trunk).  &lt;p&gt;If my team (team A) discovers a code conflict we resolve it immediately - that's top priority! If we need help from team B (or whoever wrote the code that conflicts with ours) go fetch them and work together to sort it out. The important thing is that my team is responsible for getting the problem sorted out, and that we need to sort it out on our own work branch (not on the trunk).  &lt;p&gt;&lt;b&gt;&lt;i&gt;Rule&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: Resolve conflicts on the branch that is least stable&lt;/i&gt;  &lt;p&gt;Of course, merging from trunk is a waste of time if people don't publish to the trunk on a regular basis. Any divergence between team A and team B is invisible until someone publishes to the trunk. So here's the next rule:  &lt;p&gt;&lt;b&gt;&lt;i&gt;Rule&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: Merge from your work branch to the trunk on a regular basis, for example whenever a story is done. Don't wait until the end of the sprint!&lt;/i&gt;  &lt;p&gt;Note an interesting side effect here:  &lt;p&gt;&lt;b&gt;&lt;i&gt;Side effect:&lt;/i&gt;&lt;/b&gt;&lt;i&gt; Whoever checks in first wins!&lt;/i&gt;  &lt;p&gt;If two teams are writing code that conflicts with each other, the last team to check in has to resolve the conflict. That's a nice side effect, since it encourages teams to check in early :o)  &lt;p&gt;Here's an example of a whole sprint.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_VUth5k5296M/Sgs2PFSg48I/AAAAAAAAADc/ET6w28Qe73Y/s1600-h/clip_image013[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQAmb40iikV0esxr&amp;amp;url=http%3A%2F%2Flh5.ggpht.com%2F_VUth5k5296M%2FSgs2PxCeEtI%2FAAAAAAAAADg%2FeGcm4vkaxGg%2Fclip_image013_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;We are doing a 6 day sprint with two teams. Team A is planning to implement Book and Cancel. Team B is planning to implement Invoice and Blacklist. Let's look at what happened.  &lt;p&gt;&amp;lt;table cellspacing=0 cellpadding=0 border=1&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;  &lt;p&gt;&lt;b&gt;Day&lt;/b&gt;  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;  &lt;p&gt;&lt;b&gt;Team A perspective&lt;/b&gt;  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;  &lt;p&gt;&lt;b&gt;Team B perspective&lt;/b&gt;  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;  &lt;p&gt;&lt;b&gt;Trunk perspective&lt;/b&gt;  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;  &lt;p&gt;1  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Merge from trunk. Nothing new. Working on Book, checking in on our work branch.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Merge from trunk. Nothing new. Working on Invoice, checking in on our work branch.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Nothing happened today.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;  &lt;p&gt;2  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Merged from trunk. Nothing new. Finished implementing Book. Integration-tested it. Done! Copy to trunk. Start working on Cancel.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Same as yesterday.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Book is now done!  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;  &lt;p&gt;3  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Merge from trunk. Nothing new. Still working on Cancel.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Merge from trunk. Aha! There have been changes! Book has been added! Merge with our code in Team B branch, resolve any conflicts. Then keep working on Invoice.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Nothing happened today.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;  &lt;p&gt;4  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Same as yesterday.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Merged from trunk. Nothing new. Finished Invoice. Integration test it (including Book!), copy to trunk. Start working on Blacklist.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Invoice is now done!.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;  &lt;p&gt;5  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Merge from trunk. Aha! There have been changes! Invoice code has been added! Merge with our code in Team A branch, resolve any conflicts. Then keep working on Cancel.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Merged from trunk. Nothing new. Still working on Blacklist.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Nothing happened today.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;  &lt;p&gt;6  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Merged from trunk. Nothing new. Finished Cancel, copy to trunk.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Same as yesterday.  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;td valign=top&amp;gt;  &lt;p&gt;Cancel is now done!  &lt;p&gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;  &lt;p&gt;Sprint is done! All stories except Blacklist got done. But that's OK, we can still release! This is because we merged &amp;amp; integrated incrementally. If we wait until the end of the sprint to do this, any diverging code will be discovered at precisely the wrong moment - when we have the least time to fix it.  &lt;p&gt;&lt;b&gt;Release branches&lt;/b&gt;  &lt;p&gt;Let's say we've finished sprint 1 and released version 1.0.0 of the system. Now, while we're in the middle of sprint 2, a serious defect is reported on the released version! Oh no! What do we do?  &lt;p&gt;The simplest way is to simply fix it on the trunk and release a version 1.1.0. This means any new stories implemented so far during sprint 2 will be included in the new release. Theoretically this should be fine since the trunk is the Done branch and the definition of Done is "releasable". So whatever is on the trunk at any moment should be something that we want to release.  &lt;p&gt;However there may be reasons not to want to release new stories right now. For example:  &lt;ul&gt; &lt;li&gt;The fact that there is a serious defect essentially means that the trunk was broken at the time of the release. That in turn means that the sprint 2 stories are built on top of a broken foundation. We might want to fix the foundation itself without having to deal with the new stories as well.  &lt;li&gt;Maybe the stakeholders don't want new features to be released in mid-sprint.  &lt;li&gt;Maybe it takes a while to make a new release from the trunk, with new features and all, so we want a simple "hotfix" mechanism to get bugfixes out the door faster.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;So how do we do it?  &lt;ol&gt; &lt;li&gt;Create a &lt;i&gt;release branch&lt;/i&gt; called release 1.0, based on the trunk at the time it was released.  &lt;li&gt;Patch the defect on the release branch.  &lt;li&gt;Merge from release branch to trunk immediately after releasing (so the patch is included in future releases).&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_VUth5k5296M/Sgs2Qk4sDMI/AAAAAAAAADk/m4w5Sf_SUg4/s1600-h/clip_image014[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQDXQyg1AcaUG5Ly&amp;amp;url=http%3A%2F%2Flh5.ggpht.com%2F_VUth5k5296M%2FSgs2RO3lUvI%2FAAAAAAAAADo%2FOuK7IRta6g0%2Fclip_image014_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;Note that we don't have to create the release 1.0 branch when we do release 1.0.0. We can wait until the defect comes up. So we don't need to create a branch until there is something that actually needs to be done on that branch.  &lt;p&gt;&lt;b&gt;The big picture&lt;/b&gt;  &lt;p&gt;OK, now I've gone through a fairly detailed example of how to put this pattern to use. Now let's back out a bit and look at the big picture.  &lt;p&gt;In the mainline model, a branch is called a codeline (in fact, branch is considered to be an implementation of a codeline). Sometimes these are called streams.  &lt;p&gt;A codeline's parent (i.e. the codeline that it originated from) is called its baseline. Mainline is the codeline that has no baseline.  &lt;p&gt;So in our examples above we could conclude that:  &lt;ul&gt; &lt;li&gt;The trunk is our mainline. It has no parent right?  &lt;li&gt;All other codelines (release 1.0, team A work, team B work) have the trunk as baseline.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Here's a more complex example:  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_VUth5k5296M/Sgs2R2sqf6I/AAAAAAAAADs/juMOKOTX-Qw/s1600-h/clip_image015[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQCR_zhoPUiWYXZC&amp;amp;url=http%3A%2F%2Flh3.ggpht.com%2F_VUth5k5296M%2FSgs2SuWlpnI%2FAAAAAAAAADw%2FYlEOrH9xTcw%2Fclip_image015_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;This picture tells us that:  &lt;ul&gt; &lt;li&gt;The project X codeline was spawned from the mainline. The project is now complete, so the branch is closed.  &lt;li&gt;Team A has an active work branch that was spawned from the mainline.  &lt;li&gt;Team A also has an ongoing spike that was spawned from the work branch.  &lt;li&gt;The release 2.3 branch is closed, since 2.3 is no longer in production and won't be maintained.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Each codeline has a relative &lt;i&gt;firmness level&lt;/i&gt; with respect to its baseline, i.e. each codeline is either &lt;i&gt;more firm&lt;/i&gt; or &lt;i&gt;less firm&lt;/i&gt; (softer) than its baseline.  &lt;ul&gt; &lt;li&gt;A &lt;i&gt;firm&lt;/i&gt; codeline is stable, thoroughly tested, changes seldom, and is close to release.  &lt;li&gt;A &lt;i&gt;soft&lt;/i&gt; codeline is unstable, barely tested, changes often, and is far from release.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;When drawing codelines, firm codelines branch upwards and soft codelines branch downwards. So looking at the picture above, we can conclude that:  &lt;ul&gt; &lt;li&gt;Release 2.3 is firmer than mainline.  &lt;li&gt;Team A work is softer than mainline.  &lt;li&gt;Team A spike is softer than team A work.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The drawing format used above is useful for showing branch histories, but it can get a bit messy when there are lots of branches. Here's a cleaner format, showing only the currently existing codelines and where they spawned from.  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_VUth5k5296M/Sgs2TFH1vCI/AAAAAAAAAD0/UgopkvU7WoE/s1600-h/clip_image016[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQB1mQAH7FEOIwwF&amp;amp;url=http%3A%2F%2Flh5.ggpht.com%2F_VUth5k5296M%2FSgs2TvsD5tI%2FAAAAAAAAAD4%2FF36noeU3Nbc%2Fclip_image016_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;I suggest drawing a picture of your branches in this format and putting up on the wall in the team room! Really helpful to look at when discussing integration issues.  &lt;p&gt;An important rule is that all change flows along the lines! So no code should be merged directly from team A work to team B work, this will cause all kinds of confusion. Instead, changes in team A work should flow to the mainline and then down to team B work.  &lt;p&gt;Everything &lt;i&gt;above&lt;/i&gt; the mainline is a called a &lt;i&gt;release codeline&lt;/i&gt;, which means a codeline that is firmer than the mainline.  &lt;p&gt;Everything &lt;i&gt;below&lt;/i&gt; the mainline is called a &lt;i&gt;development codeline&lt;/i&gt; (or &lt;i&gt;work&lt;/i&gt;), which means a codeline that is softer than the mainline.  &lt;p&gt;&lt;b&gt;&lt;i&gt;Golden rule of collaboration&lt;/i&gt;&lt;/b&gt;&lt;i&gt;:&lt;br&gt;- Always accept stabilizing changes&lt;br&gt;- Never impose destabilizing changes&lt;/i&gt;  &lt;p&gt;So what does this mean in terms of the different types of codelines?  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_VUth5k5296M/Sgs2UbbPRtI/AAAAAAAAAD8/PPMwwGkwr8E/s1600-h/clip_image017[3].gif"&gt;&lt;img src="https://s-external.ak.fbcdn.net/safe_image.php?d=AQBE8XcW_H0kzCfq&amp;amp;url=http%3A%2F%2Flh3.ggpht.com%2F_VUth5k5296M%2FSgs2U9_0MlI%2FAAAAAAAAAEA%2F_9DCuN0JqcM%2Fclip_image017_thumb.gif%3Fimgmax%3D800"&gt;&lt;/a&gt;  &lt;p&gt;The picture above is just a colorful way of saying that:  &lt;ul&gt; &lt;li&gt;Whenever a change is made on a release codeline, the change should immediately be merged down to its baseline, all the way down to the mainline.  &lt;ul&gt; &lt;li&gt;&lt;i&gt;Example:&lt;/i&gt;&lt;i&gt; &lt;/i&gt;A bug is fixed on R2.4.2. That should immediately be merged down to R2.4, and merged from there down to mainline.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;A release codeline should never receive changes from its baseline.  &lt;ul&gt; &lt;li&gt;&lt;i&gt;Example:&lt;/i&gt;&lt;i&gt; &lt;/i&gt;New code is checked in to the mainline. This should not propagated up to R2.3 and R2.4.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Change flows continuously from baselines to development codelines.  &lt;ul&gt; &lt;li&gt;&lt;i&gt;Example:&lt;/i&gt;&lt;i&gt; &lt;/i&gt;Any change to the mainline should quickly flow on down to Team A and Team B, and from Team A on down to A spike.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Change flows from a development codeline to its baseline only at stable points.  &lt;ul&gt; &lt;li&gt;&lt;i&gt;Example:&lt;/i&gt;&lt;i&gt; &lt;/i&gt;Team B merges to mainline only when a story is complete and tested.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Whenever changes have been made to a codeline and its baseline, some kind of merge might be needed. Since code merging is a potentially error prone operation we want to do it on the softer of the two codelines. Once the merge is complete and verified, we can copy the merged code back to the firmer codeline.  &lt;p&gt;Using our convention of drawing firm codelines higher up than soft codelines, we could derive a simple rule:  &lt;p&gt;&lt;b&gt;&lt;i&gt;Rule&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: Merge down, copy up&lt;/i&gt;  &lt;p&gt;&lt;b&gt;Example&lt;/b&gt;: Team A notices that the mainline has been updated. They merge the changes down to their development branch and fix any conflicts. As soon as Team A development branch reaches a stable point they copy back up to the mainline. They do of course have to check that nothing else has been changed on the mainline in the meantime.  &lt;p&gt;&lt;b&gt;Variations to the model&lt;/b&gt;  &lt;p&gt;The chapter "The version control pattern" describes an example of how to implement the mainline model.  &lt;p&gt;The chapter "The big picture" describes the mainline model in more general terms.  &lt;p&gt;In this chapter I'm going to mention some typical variations on how to implement this pattern.  &lt;p&gt;&lt;b&gt;Definition of Done doesn't have to be "releasable"&lt;/b&gt;  &lt;p&gt;Just settle on any definition of Done, and make sure there is a branch to accomodate stories that are Done according to that definition. Be careful about leaving important things out of Done, though. If integration testing is not included in Done, when will you integration test?  &lt;p&gt;&lt;b&gt;Trunk doesn't have to be mainline&lt;/b&gt;  &lt;p&gt;You need a mainline for this pattern to work. It doesn't necessarily have to be the trunk though (although the trunk would be a pretty natural choice in most cases).  &lt;p&gt;&lt;b&gt;Teams don't have to have their own branches&lt;/b&gt;  &lt;p&gt;You can certainly have multiple teams sharing the same branch, or even working directly off the mainline. As long as you obey the policy of the branch.  &lt;p&gt;Often teams like to have their own branches to avoid having partially complete stories causing interference between teams.  &lt;p&gt;&lt;b&gt;You don't need to create a new release branch each time&lt;/b&gt;  &lt;p&gt;You might decide to use the same release branch instead of creating a new one after each sprint. That release branch could be called "currently in production" or something like that. Certainly a useful model if you never have more than one version in production at a time.  &lt;p&gt;&lt;b&gt;You don't need to release after each sprint&lt;/b&gt;  &lt;p&gt;You can release after each story. Or after every third sprint. Choose your pace.  &lt;p&gt;&lt;b&gt;You don't have to run regression tests for each story&lt;/b&gt;  &lt;p&gt;If regression testing or integration is truly a pain in your environment you may decide to save it to the end of the sprint, so you can batch up a few stories and test/integrate them together. That is your risk to take. If regression testing &amp;amp; integration is included in your definition of done, that simply means you risk getting 0 stories Done if you run into problems with this at the end of the sprint.  &lt;p&gt;&lt;b&gt;FAQ&lt;/b&gt;  &lt;p&gt;&lt;b&gt;Where does continuous integration (CI) fit into this?&lt;/b&gt;  &lt;p&gt;Which branches should your CI server work on? This is really context dependent, but here is a good starting point.  &lt;p&gt;Assuming that your policy for trunk is "Done &amp;amp; releasable", and your policy for each work branch is "unit tests pass":  &lt;ul&gt; &lt;li&gt;For each work branch, CI server automatically and continuously checks that it builds and passes all unit tests.  &lt;ul&gt; &lt;li&gt;Issues a red alert if anything fails. Triggers the smoke machine.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;For each work branch, CI server automatically and regularly (if not continuously) runs integration tests and regression tests.  &lt;ul&gt; &lt;li&gt;Displays a discrete warning if anything fails, since this is not part of the branch policy.  &lt;li&gt;This test is triggered manually whenever someone is considering to publish code from work to trunk, as a way to check that the story is Done.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;For the trunk, the CI server automatically and continuously runs integration tests and regression tests.  &lt;ul&gt; &lt;li&gt;Issues a red alert if anything fails. Triggers the smoke machine, the siren, the USB rocket launcher, and calls in the national guard.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;b&gt;What's the best tool for this version control model?&lt;/b&gt;  &lt;p&gt;Not sure. I know it works well with Perforce, I think it works with subversion, but I'm not too sure about CVS. Any input is welcome.  &lt;p&gt;Remember one important thing though - the cost of switching tools is usually quite low compared to the cost of not being able to collaborate effectively! So figure out how you want to work, then find the right tool to support that.  &lt;p&gt;&lt;b&gt;What about checkins that aren't related to a user story?&lt;/b&gt;  &lt;p&gt;Not all code changes have to be related to a user story, I just did that in all my examples for clarity. The same model applies no matter what type of code you are checking in (or documents for that matter).  &lt;p&gt;&lt;b&gt;Merging is a pain, so I want to do it as seldom as possible!&lt;/b&gt;  &lt;p&gt;Congratudolences, you have mergophobia - the irrational fear of merging code! Merging is a pain because you do it as seldom as possible. The more often you merge, the less painful it is :o)&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.infoq.com/articles/agile-version-control"&gt;http://www.infoq.com/articles/agile-version-control&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-7645019750835856860?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/wadIGy18juY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/7645019750835856860?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/7645019750835856860?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/wadIGy18juY/source-control-for-agile-development.html" title="Source Control for Agile Development" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2011/09/source-control-for-agile-development.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUNRnY9cSp7ImA9WhdWEEs.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-1496212851347884760</id><published>2011-09-03T09:04:00.001-07:00</published><updated>2011-09-03T09:11:37.869-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-03T09:11:37.869-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Telugu festivals" /><category scheme="http://www.blogger.com/atom/ns#" term="te" /><category scheme="http://www.blogger.com/atom/ns#" term="Ganesh Chaturthi" /><title>Ganesh Chaturthi Pooja Procedure</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Izelbdl-OqEE2AyexuRMuwcvVb4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Izelbdl-OqEE2AyexuRMuwcvVb4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Izelbdl-OqEE2AyexuRMuwcvVb4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Izelbdl-OqEE2AyexuRMuwcvVb4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;How to do Ganesh Chaturthi Puja or tell us about Ganesh Chaturthi Pooja procedure?&lt;img style="margin: 0px 0px 10px; display: inline; float: left" align="left" src="http://www.holidayindiaonline.com/Image/Ganesh-Chaturthi-Inn-Mumbai.jpg" width="115" height="136"&gt; For any puja or vrata, the main objectives are neatness and dedication. If you have these two factors, then Vinayakas blessings will be surely with you. &lt;/p&gt; &lt;p&gt;Here it is the detail pooja procedure or steps involving in Ganesh puja on Vinayaka Chavithi festival.Perform ritual bath in the early morning and wear new or fresh clothes and be ready to do Ganapati puja. &lt;/p&gt; &lt;ol&gt; &lt;li&gt;Prepare Ganesh mandap or pandal with coconut or banana leaves, mango leaves and with flower garlands to install Ganesha idol. It is always recommended to buy or prepare eco-friendly or clay Ganesh idol. Adorn Ganesh idol with flower garlands and chandan (sandalwood) paste.  &lt;li&gt;A Kalash or the pot filled with sanctified water and rice to be installed before invoking Lord Ganesha idol. The rice or water filled Kalash is also called Purna Kumbha. Kalasha Sthapana is performed before invoking Ganesh.  &lt;li&gt;After Kalasha Sthapana, Ganesh idol is invoked chanting Avahan mantras or just chanting ‘Om Ganeshaya namaha or other simple Ganesh stotras.  &lt;li&gt;Chant Ashtottara Shatanamavali or 108 names of Lord Ganesha. Siddhi Vinayaka Vratha katha is recited after chanting several simple Ganesh mantras.  &lt;li&gt;Light the lamp and offer Aarti to Lord Ganesh reciting Aarti mantras.  &lt;li&gt;Offer special recipes – modak, undralla payasam, kudumulu and the recipes made of several leaves and fruits. Offer coconut and light diya or deepam and incense sticks (agarbattis).  &lt;li&gt;Generally during Ganesh puja on Ganesh Chavithi, devotees place books, pens and other education or office material at Ganesh idol or Ganpati pandal and take them after Ganesh idol os moved. Usually, at homes, Ganesh idol is moved on the day after Ganesh Chaturthi.  &lt;li&gt;The above puja procedure is followed for several days till Ganesh nimajjan. But some people perform simple Ganesh puja on the rest of the days during Ganesh Navaratri celebrations.  &lt;li&gt;Some devoted families or orthodox houses perform Ekavimsathi Patra Puja or Ganesh Puja with 21 types of leaves is performed during Ganesh Chaturthi festival. This Patra Puja signifies the eco-friendly nature in celebrating Hindu festivals especially Ganesh Chaturthi festival.&lt;/li&gt;&lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-1496212851347884760?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/qfqnMUNhHqE" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/1496212851347884760?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/1496212851347884760?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/qfqnMUNhHqE/how-to-do-ganesh-chaturthi-puja-ganesh.html" title="Ganesh Chaturthi Pooja Procedure" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2011/09/how-to-do-ganesh-chaturthi-puja-ganesh.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMBQHw5fSp7ImA9WhdQE0U.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-3768818926087955233</id><published>2011-08-14T22:50:00.001-07:00</published><updated>2011-08-14T22:50:51.225-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-14T22:50:51.225-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Heart Disease" /><title>Heart disease in women</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tOe-OVm9UsACz6aJmw8UwX-vxZ0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tOe-OVm9UsACz6aJmw8UwX-vxZ0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tOe-OVm9UsACz6aJmw8UwX-vxZ0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tOe-OVm9UsACz6aJmw8UwX-vxZ0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;&lt;font style="font-weight: bold" color="#ffc000"&gt;Understand symptoms and risk factors&lt;/font&gt;&lt;/h3&gt; &lt;p&gt;&lt;font style="font-weight: bold"&gt;All women face the threat of heart disease. But becoming aware of symptoms and risks unique to women, as well as eating a heart-healthy diet and exercising, can help protect you.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Although heart disease is often thought of as a problem for men, more women than men die of heart disease each year. One challenge is that the heart disease symptoms in women can be different from symptoms in men. Fortunately, women can take steps to understand their unique symptoms of heart disease and to begin to reduce their risk of heart disease.&lt;/p&gt; &lt;h4&gt;&lt;img style="display: inline; float: left" align="left" src="http://topnews.in/health/files/heart-disease_1.jpg"&gt;&lt;font style="font-weight: bold"&gt;Heart attack symptoms for women&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;The most common heart attack symptom in women is some type of pain, pressure or discomfort in the chest. But it's not always severe or even the most prominent symptom, particularly in women. Women are more likely than men to have heart attack symptoms unrelated to chest pain, such as:  &lt;ul&gt; &lt;li&gt;Neck, shoulder, upper back or abdominal discomfort  &lt;li&gt;Shortness of breath  &lt;li&gt;Nausea or vomiting  &lt;li&gt;Sweating  &lt;li&gt;Lightheadedness or dizziness  &lt;li&gt;Unusual fatigue&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;These symptoms are more subtle than the obvious crushing chest pain often associated with heart attacks. This may be because women tend to have blockages not only in their main arteries, but also in the smaller arteries that supply blood to the heart — a condition called small vessel heart disease or microvascular disease.  &lt;p&gt;Many women tend to show up in emergency rooms after much heart damage has already occurred because their symptoms are not those typically associated with a heart attack. If you experience these symptoms or think you're having a heart attack, call for emergency medical help immediately. Don't drive yourself to the emergency room unless you have no other options.  &lt;h4&gt;&lt;font style="font-weight: bold"&gt;Heart disease risk factors for women&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;Although the traditional risk factors for coronary artery disease — such as high cholesterol, high blood pressure and obesity — affect women and men, other factors may play a bigger role in the development of heart disease in women. For example:  &lt;ul&gt; &lt;li&gt;Metabolic syndrome — a combination of fat around your abdomen, high blood pressure, high blood sugar and high triglycerides — has a greater impact on women than on men.  &lt;li&gt;Mental stress and depression affect women's hearts more than men's. Depression makes it difficult to maintain a healthy lifestyle and follow recommended treatment, so talk to your doctor if you're having symptoms of depression.  &lt;li&gt;Smoking is a greater risk factor for heart disease in women than in men.  &lt;li&gt;Low levels of estrogen after menopause pose a significant risk factor for developing cardiovascular disease in the smaller blood vessels (small vessel heart disease).&lt;/li&gt;&lt;/ul&gt; &lt;h4&gt;Is heart disease something only older women should worry about?&lt;/h4&gt; &lt;p&gt;No. Women under the age of 65 who have a family history of heart disease should pay particularly close attention to the heart disease risk factors. Women of all ages should take heart disease seriously.  &lt;h4&gt;&lt;font style="font-weight: bold"&gt;What can women do to reduce their risk of heart disease?&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;There are several lifestyle changes you can make to reduce your risk of heart disease:  &lt;ul&gt; &lt;li&gt;Exercise 30 to 60 minutes a day on most days of the week.  &lt;li&gt;Maintain a healthy weight.  &lt;li&gt;Quit or don't start smoking.  &lt;li&gt;Eat a diet that's low in saturated fat, cholesterol and salt.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;You'll also need to take prescribed medications appropriately, such as blood pressure medications, blood thinners and aspirin. And you'll need to better manage other conditions that are risk factors for heart disease, such as high blood pressure, high cholesterol and diabetes. Some women at high risk of heart disease may also benefit from the use of supplements, such as omega-3 fatty acids.  &lt;h4&gt;&lt;font style="font-weight: bold"&gt;Exercise to reduce the risk of heart disease in women&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;In general, you should do moderate exercise, such as walking at a brisk pace, for 30 to 60 minutes most days of the week. If you can't get all of your exercise completed in one session, it's fine to break up your physical activity into several 10- to 15-minute sessions. You'll still get the same heart-health benefits.  &lt;p&gt;There are other small changes you can make to increase your physical activity throughout the day. You can take the stairs instead of the elevator, walk or ride your bicycle to do errands, or try some sit-ups or push-ups while watching television.  &lt;h4&gt;&lt;font style="font-weight: bold"&gt;What's a healthy weight?&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;What's considered a healthy weight varies from person to person, but having a normal body mass index (BMI) is helpful. This calculation helps you see if you have a healthy or unhealthy percentage of body fat. A BMI of 25 or higher can be associated with an increased risk of heart disease. Losing just 10 to 15 pounds can help by lowering your blood pressure and reducing your risk of diabetes — both of which increase your risk of heart disease.  &lt;h4&gt;&lt;font style="font-weight: bold"&gt;Is the treatment for heart disease in women different than in men?&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;In some women, plaques build up as an evenly spread layer along artery walls, which isn't treatable using procedures such as angioplasty and stenting designed to flatten the bulky, irregular plaques in some men's arteries. For some women, drug treatment — rather than angioplasty or stenting — may be a better option.  &lt;p&gt;Certain heart medications, such as clot-busting drugs (thrombolytics) tend to be more effective in women than in men. Aspirin therapy benefits both men and women, but there's also a difference between men and women in the effects of aspirin therapy. In women, aspirin therapy seems to reduce the risk of stroke more than in men, while in men it reduces the risk of heart attack more than it reduces stroke.  &lt;h4&gt;&lt;font style="font-weight: bold"&gt;Taking aspirin to prevent heart disease in women&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;Guidelines from the American Heart Association urge women to be more aggressive about cutting their heart disease and stroke risks. A daily aspirin can have a number of benefits for women, such as preventing heart attacks and strokes and reducing heart disease risk.  &lt;p&gt;The guidelines recommend that women consider taking aspirin — which means have a discussion with your doctor about the risks and benefits of taking aspirin based on your own individual stroke and heart attack risk. Don't start taking aspirin for heart disease prevention on your own. The higher your risk of heart attack or stroke, the more that risk is reduced by taking aspirin, but the higher your risk is of bleeding.    &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-3768818926087955233?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/SXbYNqhUtwI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/3768818926087955233?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/3768818926087955233?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/SXbYNqhUtwI/heart-disease-in-women.html" title="Heart disease in women" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2011/08/heart-disease-in-women.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MFQnk5eyp7ImA9WhdQE04.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-1313981474153412174</id><published>2011-08-14T08:23:00.001-07:00</published><updated>2011-08-14T08:23:33.723-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-14T08:23:33.723-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Information on Newborn Child" /><title>Information on Newborn Child</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MXgFbhefT6irCvHM6m2IKY5xH0s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MXgFbhefT6irCvHM6m2IKY5xH0s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MXgFbhefT6irCvHM6m2IKY5xH0s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MXgFbhefT6irCvHM6m2IKY5xH0s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul&gt; &lt;p&gt;&lt;strong&gt;Changes in your Body...&lt;/strong&gt; &lt;li&gt; &lt;p&gt;Getting accustomed to new surroundings: After spending 9 months curled up in your womb; your little one will take time to get settled in her /his new surroundings. In this time the baby will love being cuddled and held close.&lt;br&gt;There are a few things that you should know to help you understand your baby better.&lt;img style="margin: 0px 0px 10px; display: inline; float: left" align="left" src="http://www.clipartreview.com/_images_300/A_surgeons_assistant_cradling_a_newborn_child_in_her_arms_101008-206536-273009.jpg"&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Limbs Look Short&lt;/strong&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;Breast feeding is extremely important for both you and your baby. Breast milk provides all the nutrition your baby needs and also provides your baby with antibodies that protect him/her from infections. This is very important for your baby as their immune systems are not fully developed. &lt;ol&gt; &lt;li&gt;Do you have nipples?  &lt;li&gt;Problems with breast feeding?&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;p&gt;&lt;strong&gt;The Excercises&lt;/strong&gt; &lt;li&gt; &lt;p&gt;The process of recovering from your pregnancy will take time. You must understand that you have been through an incredible experience over the past 9 months and you will take some time to return to how you were, before your pregnancy. &lt;ol&gt; &lt;li&gt;Changes in your body.  &lt;li&gt;Exercises to help you.  &lt;li&gt;Concerned about your weight?&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;p&gt;&lt;strong&gt;Post Partum Depression (Post Delivery Depression)&lt;/strong&gt; &lt;li&gt; &lt;p&gt;If you are feeling a little bit low in spite of having your little bundle of joy in your arms don't be alarmed. You might take some time to bond with your baby. This is quite common. You have just been through so much. The whole process is so exhausting that only those who have gone through it can actually understand it. Don't burden yourself with unnecessary guilt if you feel a little low and be positive.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-1313981474153412174?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/A-QuJOW7HXc" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/1313981474153412174?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/1313981474153412174?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/A-QuJOW7HXc/information-on-newborn-child.html" title="Information on Newborn Child" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2011/08/information-on-newborn-child.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcBRHs6eip7ImA9WhdQE08.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-5035474707846522895</id><published>2011-08-12T22:35:00.001-07:00</published><updated>2011-08-14T06:04:15.512-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-14T06:04:15.512-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Finance" /><title>TCS, Infosys, MindTree, HCL and other Indian IT companies to suffer as angry America wants its jobs back</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XESBGqzCqUkII_WJFdAuzTZ5Kj0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XESBGqzCqUkII_WJFdAuzTZ5Kj0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XESBGqzCqUkII_WJFdAuzTZ5Kj0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XESBGqzCqUkII_WJFdAuzTZ5Kj0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;BANGALORE&lt;/strong&gt;: Some American corporations are retaining a small, but highly-prized slice of software jobs at home, mindful of the record unemployment levels and the anger among locals who see work being shipped overseas.&lt;br /&gt;
&lt;br /&gt;
For Indian software providers such as TCS, Infosys and HCL, such a development - it is not expected to become a mainstream trend - could chip away a fraction of new jobs that could have been offshored to them. In an interview with Bloomberg on Monday, Charlene Begley, chief information technology officer of GE, said his company was rethinking the strategy of outsourcing more than half of its IT work.&lt;br /&gt;
&lt;br /&gt;
Already, GE has announced plans to add 15,000 jobs in the US over three years, 1,100 of which will be at the Detroit IT centre. Walmart has also decided to drive the development and design of its ecommerce platform from a new centre in Brisbane, California.&lt;img align="left" alt="Capitol" src="http://economictimes.indiatimes.com/thumb.cms?msid=9546766&amp;amp;width=300&amp;amp;resizemode=4" style="display: inline; float: left;" /&gt;&lt;br /&gt;
&lt;strong&gt;WALMART PUTS OFF BANGALORE CENTRE&lt;br /&gt;
&lt;/strong&gt;Walmart will not open its own captive technology centre in Bangalore, a person familiar with the retailer's decision said last week. In the latest job posting on its website, Walmart has advertised nearly 150 new technology jobs in Bentonville, Arkansas. "Some of this, let's say at least a quarter of these, could have easily been managed out of a captive centre Walmart was evaluating to open in India," the person said.&lt;br /&gt;
At least a dozen executives at US-based firms and local American authorities said more companies would shift highend technology jobs as they are under pressure from their local constituencies to create jobs. "Companies like GE are under social pressure to demonstrate they care by creating local jobs. They have been practising economic sense for years and reaped enough profits," said a senior executive at one of the top US tech firms. He requested anonymity because his company counts GE among its top customers.&lt;br /&gt;
&lt;br /&gt;
In January, GE Chairman &amp;amp; CEO Jeffrey R Immelt was named the head of US President Barack Obama's panel on jobs and competitiveness, which also includes the leaders of America's biggest firms, including Xerox and Intel.&lt;br /&gt;
&lt;br /&gt;
"There is pressure to create jobs in the marketplace, as well as demands on technology to create revenue impact in the front office. Both these trends actually play to create jobs in onsite locations - the former as a good corporate citizen, and the latter in recognition of the new levels and roles that IT has to play in these days of mobility, social networks and advanced analytics," said Vineet Nayar, CEO of &lt;a href="http://economictimes.indiatimes.com/hcl-technologies/stocks/companyid-4291.cms"&gt;HCL Technologies&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
He declined comment on GE's outsourcing strategy but said customers are increasingly asking vendors to play a role. "For instance, if you were to look at what has been happening in HCL, the cosourcing deals we do with customers have already brought 9,000 employees who were with customers into HCL ranks," Nayar added.&lt;br /&gt;
&lt;br /&gt;
Co-sourcing involves the transfer of a client's workforce to the payroll of the vendor, a switch which ensures job security to local workers who would then become part of multi-year outsourcing contracts. Experts say creation of more local jobs in the US is not likely to have any material impact on India's $60-billion outsourcing sector.&lt;br /&gt;
"The costs of switching out of outsourcing relationships are too high for most, but I think you can expect to see more companies finding ways to create jobs in the US," said Esteban Herrera, COO of US-based HfS Research, which advises customers on outsourcing.&lt;br /&gt;
&lt;br /&gt;
"But it is likely GE will be sending less high-end work to India based on this strategy; meaning growth, and especially growth in complex processes and services, will likely decrease or stop altogether." While GE has been outsourcing to India for over three decades, Walmart started its offshoring pilot with Infosys only last year.&lt;br /&gt;
GE currently outsources nearly $1 billion of software development and backoffice projects to Indian companies such as TCS, &lt;a href="http://economictimes.indiatimes.com/wipro/stocks/companyid-12799.cms"&gt;Wipro&lt;/a&gt;, Genpact, Patni Computer and &lt;a href="http://economictimes.indiatimes.com/mindtree/stocks/companyid-15673.cms"&gt;MindTree&lt;/a&gt;. TCS is GE's largest Indian IT vendor, accounting for about $200 million of business a year. Genpact, originally a GE back-office captive, currently gets almost 40%, or around $450 million, of its revenues from the company.&lt;br /&gt;
&lt;br /&gt;
"As a percentage, the jobs moving back are very small. For example, if 500 out of 60,000 jobs move back it is a drop in the ocean. The kinds of jobs that are moving back are select, niche jobs such as design. Politics is a factor, but it is not the only factor why this is happening," said Phaneesh Murthy, CEO of iGate, which counts GE among its top customers.&lt;br /&gt;
&lt;br /&gt;
With inputs by N Shivapriya &lt;br /&gt;
Courtesy:&amp;nbsp; Economic Times&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-5035474707846522895?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/63kGuM5KDXk" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/5035474707846522895?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/5035474707846522895?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/63kGuM5KDXk/tcs-infosys-mindtree-hcl-and-other.html" title="TCS, Infosys, MindTree, HCL and other Indian IT companies to suffer as angry America wants its jobs back" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2011/08/tcs-infosys-mindtree-hcl-and-other.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcNQX8ycSp7ImA9WhdQE08.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-5983417270384489171</id><published>2011-04-18T20:13:00.001-07:00</published><updated>2011-08-14T06:04:50.199-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-14T06:04:50.199-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Finance" /><title>Income Tax department to review all realty deals to unearth black money</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/w_qX5yfURX9K1kwxKQhuJ46keho/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w_qX5yfURX9K1kwxKQhuJ46keho/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/w_qX5yfURX9K1kwxKQhuJ46keho/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w_qX5yfURX9K1kwxKQhuJ46keho/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;
The income tax department plans to review realty deals following allegations of rampant use of black money in many transactions. "We will take appropriate action wherever we find involvement of black money in such transactions," said Sudhir Chandra , chairman, Central Board of Direct Taxes . &lt;br /&gt;
&lt;img align="left" alt="5.jpg" border="0" src="http://economictimes.indiatimes.com/thumb.cms?msid=8023281&amp;amp;width=300&amp;amp;resizemode=4" style="display: inline; float: left;" title="5.jpg" width="300" /&gt;&lt;br /&gt;
Chandra said the department would begin scrutiny of property deals in the national capital region and follow it up in other metros. &lt;br /&gt;
&lt;br /&gt;
The value of most real estate transactions in the national capital are suppressed to save on stamp duty, capital gains tax and wealth tax and are believed to have black money component as high as 65%, said another income tax official. &lt;br /&gt;
&lt;br /&gt;
The black money component continues to remain high despite most states now fixing circle rates, or minimum rate at which a property can be registered, for various localities. &lt;br /&gt;
&lt;br /&gt;
The income tax department receives data on all property registrations worth more than 30 lakh as a part of its special data capturing mechanism from property registrars. &lt;br /&gt;
&lt;br /&gt;
In a separate proposal, the government is also considering making it mandatory for registrars to report all property transactions under the anti-money laundering law. Any property transaction used to launder illicitly earned money will, after an amendment in the Prevention of Money Laundering Act, attract harsher punishment. &lt;br /&gt;
&lt;br /&gt;
The department is expected to rely heavily on technology and information on taxpayers it receives from various sources under 360 degree profiling. &lt;br /&gt;
&lt;br /&gt;
Realty sector has been on the income tax department's radar for a while and tops the list of sectors most searched. &lt;br /&gt;
&lt;br /&gt;
"The department has received many complaints of the involvement of black money in the sale and purchase of land and houses," the official said. &lt;br /&gt;
&lt;br /&gt;
Recently, a well-known Mumbai developer admitted to undisclosed income of 200 crore. In a separate case, 100 crore was recovered from a Surat-based real estate company . &lt;br /&gt;
In 2009-10 and 2010-11, the I-T Department unearthed unaccounted income of over 30,000 crore in its search and seizure operations. &lt;br /&gt;
&lt;br /&gt;
Chandra said while the number of searches had come down but the amount of undisclosed wealth had increased as the department was making effective use of technology. "Use of technology and data as part of 360 degree profiling system has improved the quality of searches," Chandra said. &lt;br /&gt;
&lt;br /&gt;
Source: EconomicTimes&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-5983417270384489171?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/ZrbcY44rBOk" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/5983417270384489171?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/5983417270384489171?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/ZrbcY44rBOk/income-tax-department-to-review-all.html" title="Income Tax department to review all realty deals to unearth black money" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2011/04/income-tax-department-to-review-all.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYERHs5eyp7ImA9WhdQE08.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-2745868157037398147</id><published>2011-04-18T11:05:00.001-07:00</published><updated>2011-08-14T06:05:05.523-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-14T06:05:05.523-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Health" /><title>How to Prevent Heart Disease</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PpInWxVzLVb5_ksqWIXQLL13zbg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PpInWxVzLVb5_ksqWIXQLL13zbg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PpInWxVzLVb5_ksqWIXQLL13zbg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PpInWxVzLVb5_ksqWIXQLL13zbg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;strong&gt;H&lt;/strong&gt;eart disease is one of the leading causes of death in both men and women around the world. While many people fret about cancer or Alzheimer, hundreds of thousands of men and women around the world die of heart disease before they get to the age when Alzheimer becomes a problem. Living in today’s world, one cannot help but hear stories of high &lt;strong&gt;blood pressure, heart attacks and other such problems&lt;/strong&gt;related to the &lt;strong&gt;cardio-vascular system.&lt;/strong&gt; However, these stories are so common that we no longer take them as seriously as we should and end up suffering from the diseases that we ignored.  &lt;br /&gt;
&lt;strong&gt;Smoking is bad for you&lt;/strong&gt;; everybody knows that. Actually, smoking is high on the list of lifestyle choice that you should avoid if you value your health and, ultimately, your life. Among other bad things, smoking is the leading cause for high blood pressure and its consequences: strokes, heart attacks, heart failure, damage to the eyes and kidney failure. If you think that smoking helps ease stress, then try and avoid things that stress you. We all have to make ends meet, but deliberately adding a health risk to your problems is not the answer. &lt;br /&gt;
&lt;strong&gt;Drinking is yet another way of getting yourself in heart troubles.&lt;/strong&gt; And I don’t mean the romantic kind of heart troubles, although drinking has done this for some people. I mean the kind of heart troubles that get you a resting place six feet under ahead of the time. The excess consumption of alcohol raises blood pressure and brings the same unpleasant consequences described above. And we’re not talking liver damage yet. A glass of wine once in a while is not a bad idea. A couple of glasses of gin or whiskey each day are a really bad idea. Not recommended. &lt;br /&gt;
And the third thing that you can do for yourself in order to stay healthy and avoid a while bunch of trips to the hospital is to follow a healthy diet and to exercise a couple of days every week. A healthy diet does not mean that you have to give up all the foods that you love, but simply to eat in moderation and to replace fast food and snacks with &lt;strong&gt;fruit and vegetables.&lt;/strong&gt; There are healthy alternatives to nearly everything. And exercising doesn’t necessarily mean pumping iron at the gym. Walking or thirty minutes of aerobic exercises every other day can make a huge difference later on. &lt;br /&gt;
It really doesn’t take that much to lead a healthy life and get rid of bad lifestyle choices, especially since you’re doing this for your own good. Think again before lighting another cigarette, drinking another glass of alcohol or reaching out for a bag of snacks. We are living in a culture that makes instant gratification very easy, but having to spend years worrying about your &lt;strong&gt;blood pressure&lt;/strong&gt; later on is simply not worth it. &lt;br /&gt;
By:&amp;nbsp; Antony Joseph M&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-2745868157037398147?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/GKFePLoZ1t0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/2745868157037398147?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/2745868157037398147?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/GKFePLoZ1t0/how-to-prevent-heart-disease.html" title="How to Prevent Heart Disease" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2011/04/how-to-prevent-heart-disease.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4EQHk4eyp7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-3277364864606903433</id><published>2011-04-15T21:08:00.000-07:00</published><updated>2011-04-15T21:08:21.733-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:08:21.733-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Telugu festivals" /><category scheme="http://www.blogger.com/atom/ns#" term="Tamil festivals" /><category scheme="http://www.blogger.com/atom/ns#" term="1985" /><category scheme="http://www.blogger.com/atom/ns#" term="Astrology" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="2010 Panchamgam" /><category scheme="http://www.blogger.com/atom/ns#" term="1987" /><title>Telugu festivals and Tamil festivals</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nP7JR63T3OYbDOOGbb9ziMMVOY0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nP7JR63T3OYbDOOGbb9ziMMVOY0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nP7JR63T3OYbDOOGbb9ziMMVOY0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nP7JR63T3OYbDOOGbb9ziMMVOY0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;
Telugu festivals and Tamil festivals for the years 1985 and 1987;&lt;br /&gt;
&lt;br /&gt;
Vaikunta Ekadesi: 03-01-1985, Thursday; 10-01-1987, Saturday.     &lt;br /&gt;
Bhogi: 13-01-1985, Sunday; 13-01-1987, Tuesday.    &lt;br /&gt;
Pongal: 14-01-1985, Monday; 14-01-1987, Wednesday    &lt;br /&gt;
Maattu Pongal: 15-01-1985, Tuesday; 15-01-1987, Thursday.    &lt;br /&gt;
Thai Amavasai: 20-01-1985, Sunday; 29-01-1987, Thursday.    &lt;br /&gt;
Vasanth Panjami: 26-01-1985, Saturday; 03-02-1087, Tuesday     &lt;br /&gt;
Ratha Saptami: 28-01-1985, Monday; 05-02-1987, Thursday    &lt;br /&gt;
Thai Poosam: 04-02-1985, Monday; 16-01-1987, Friday.    &lt;br /&gt;
Maha Shiva Rathri: 17-02-1985, Sunday; 26-02-1987, Thursday.    &lt;br /&gt;
Maasi Magam 06-03-1985, Wednesday; 13-03-1987, Friday.    &lt;br /&gt;
Holi Festival: 06-03-1985, Wednesday; 14-03-1987, Saturday.    &lt;br /&gt;
Kaaradayan Nonbu: 14-03-1985, Thursday; 14-03-1987, Saturday.    &lt;br /&gt;
Telugu New Year: 22-03-1985, Friday; 30-03-1987, Monday.    &lt;br /&gt;
Sri Rama Navami: 30-03-1985, Saturday; 07-04-1987, Tuesday.    &lt;br /&gt;
Panguni Uthiram: 04-04-1985, Thursday; 12-04-1987, Sunday.    &lt;br /&gt;
Tamil New Year: 13-04-1985, Saturday; 14-04-1987, Tuesday.    &lt;br /&gt;
Akshaya Tritiya: 23-04-1985, Tuesday; 01-05-1987, Friday.    &lt;br /&gt;
Agni Nakshatram Begins: 04-05-1985, Saturday; 04-05-1987, Monday.    &lt;br /&gt;
Madurai Chithirai Festival / Chithra Pournami: 04-05-1985, Saturday; 13-05-1987, Wednesday.    &lt;br /&gt;
Agni Nakshatram ends: 28-05-1985, Tuesday; 28-05-1987, Thursday.    &lt;br /&gt;
Vaikasi Visakam: 01-06-1985, Saturday; 09-06-1987, Tuesday.    &lt;br /&gt;
Aadi Amavasai: 17-07-1985, Wednesday; 25-07-1987, Saturday.    &lt;br /&gt;
Aadi Pooram: 21-07-1985, Sunday; 29-07-1987, Wednesday.    &lt;br /&gt;
Garuda Panchami: 20-08-1985, Tuesday; 30-07-1987, Thursday.    &lt;br /&gt;
Aadi Perukku: 02-08-1985, Friday; 03-08-1987, Monday.    &lt;br /&gt;
Onam Festival: 28-08-1985, Wednesday; 05-09-1987, Saturday.    &lt;br /&gt;
Varalakshmi Vratham: 30-08-1985, Friday; 07-08-1987, Friday.    &lt;br /&gt;
Yajur Upakarma: 30-08-1985, Friday; 09-08-1987, Sunday.    &lt;br /&gt;
Gayathri Japam: 31-08-1985, Saturday; 10-08-1987, Monday.    &lt;br /&gt;
Maha Sankata Hara Chaturti: 02-09-1985, Monday; 12-08-1987, Wednesday.    &lt;br /&gt;
Krishna Janmastami: 07-09-1985, Saturday; 16-08-1987, Sunday.    &lt;br /&gt;
Ganesh Chaturti / Vinayaka Chaturti: 17-09-1985, Tuesday; 28-08-1987, Friday.    &lt;br /&gt;
Mahalaya Amavasai: 13-10-1985, Sunday; 22-09-1987, Tuesday.    &lt;br /&gt;
Navarathri Begins: 15-10-1985, Tuesday; 24-09-1987, Thursday.    &lt;br /&gt;
Saraswati Pooja / Ayutha Pooja: 22-10-1985, Tuesday; 01-10-1987, Thursday.    &lt;br /&gt;
Vijaya Dasami: 23-10-1985, Wednesday; 02-10-1987, Friday.    &lt;br /&gt;
Diwali / Deepavali: 11-11-1985, Monday; 21-10-1987, Wednesday.    &lt;br /&gt;
Skanda Shashti: 17-11-1985, Sunday; 28- 10-1987, Wednesday.    &lt;br /&gt;
Thiruvannamalai Deepam: 26-11-1985, Tuesday; 04-12-1987, Friday (Malai and Vaikanasa).    &lt;br /&gt;
Karthigai Deepam: 27-11-1985, Wednesday (Vaikanasa and Panjaratra) ); 05-12-1987, Saturday (Panjaratra)    &lt;br /&gt;
Vaikunta Ekadesi: 23-12-1985, Monday; 10-01-1987, Saturday; 31-12-1987, Thursday.     &lt;br /&gt;
Arudra Dharshan: 27-12-1985, Friday; (17-12-1986, Wednesday; 04-01-1988, Monday).    &lt;br /&gt;
Reference:    &lt;br /&gt;
Panjangams for 1985 and 1987.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-3277364864606903433?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/RBL3LeqBtJ8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/3277364864606903433?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/3277364864606903433?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/RBL3LeqBtJ8/telugu-festivals-and-tamil-festivals.html" title="Telugu festivals and Tamil festivals" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/02/telugu-festivals-and-tamil-festivals.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAFQX0yfyp7ImA9WhZRGEU.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-2060883996810902269</id><published>2011-04-02T08:18:00.000-07:00</published><updated>2011-04-15T08:18:30.397-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T08:18:30.397-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Telugu Horoscope" /><category scheme="http://www.blogger.com/atom/ns#" term="Raasi Phalalu" /><category scheme="http://www.blogger.com/atom/ns#" term="Horoscope" /><title>2011-2012 Raasi Phalalu – Mesham</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IoHAWxP-VpnRfqqThto-BIsc_MQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IoHAWxP-VpnRfqqThto-BIsc_MQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IoHAWxP-VpnRfqqThto-BIsc_MQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IoHAWxP-VpnRfqqThto-BIsc_MQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://telugu.greatandhra.com/raasi/2011_ugadi/images/shreekhara_tit.gif"&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img style="margin: 0px 0px 10px" src="http://telugu.greatandhra.com/raasi/2011_ugadi/images/mesham_tit.gif" width="300" height="50"&gt; &lt;img style="margin: 0px 0px 10px" src="http://telugu.greatandhra.com/raasi/2011_ugadi/images/mesam_ugadi_01.gif"&gt; &lt;img style="margin: 0px 0px 10px" src="http://telugu.greatandhra.com/raasi/2011_ugadi/images/mesam_ugadi_02.gif"&gt;&lt;img src="http://telugu.greatandhra.com/raasi/2011_ugadi/images/mesam_ugadi_04.gif"&gt;&lt;img src="http://telugu.greatandhra.com/raasi/2011_ugadi/images/mesam_ugadi_05.gif"&gt; &lt;img src="http://telugu.greatandhra.com/raasi/2011_ugadi/images/mesam_ugadi_03.gif"&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-2060883996810902269?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/9QQUdg_8kJo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/2060883996810902269?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/2060883996810902269?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/9QQUdg_8kJo/2011-2012-raasi-phalalu-mesham.html" title="2011-2012 Raasi Phalalu – Mesham" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2011/04/2011-2012-raasi-phalalu-mesham.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQHw6eSp7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-5180206518963052253</id><published>2010-10-31T02:54:00.000-07:00</published><updated>2011-04-15T21:10:31.211-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.211-07:00</app:edited><title>Auto Draft</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OEm3YkG5b1WtkzV7XOZmRqAJx14/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OEm3YkG5b1WtkzV7XOZmRqAJx14/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OEm3YkG5b1WtkzV7XOZmRqAJx14/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OEm3YkG5b1WtkzV7XOZmRqAJx14/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-5180206518963052253?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/pw6AHiSvZxc" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/5180206518963052253?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/5180206518963052253?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/pw6AHiSvZxc/auto-draft.html" title="Auto Draft" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/10/auto-draft.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUERH44fyp7ImA9WhdQE08.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-4725310840361937756</id><published>2010-04-16T05:08:00.000-07:00</published><updated>2011-08-14T06:06:45.037-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-14T06:06:45.037-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Telugu Samethalu" /><title>Telugu Samethalu Starting with ‘A’</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2bQl_X5dM4CxJrVTuVHT2YPe9rs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2bQl_X5dM4CxJrVTuVHT2YPe9rs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2bQl_X5dM4CxJrVTuVHT2YPe9rs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2bQl_X5dM4CxJrVTuVHT2YPe9rs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Aa thaanu mukkae !!! &lt;br /&gt;
Aada pilla, siggu billa paluvuri&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lo kanipincha raadhu. &lt;br /&gt;
Aadaboina theerthamu yedurainatlu. &lt;br /&gt;
Aadadaani vayasu magavaani sampaadana &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;adagoddannattu. &lt;br /&gt;
Aadadi saadhinchalenidi ledu, mukhyanga mogudini. &lt;br /&gt;
Aadaleka maddela vodu annatlu. &lt;br /&gt;
Aadi lonae hamsa paadhu. &lt;br /&gt;
Aadi tappa raadhu, paliki bonka raadhu. &lt;br /&gt;
Aakaasaaniki hadde ledhu. &lt;br /&gt;
Aakali ruchi yerugadui, Niddura sukham yerugadu,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Valapu siggu yerugadu. &lt;br /&gt;
Aakali vaesthe rokali mingamannaadta. &lt;br /&gt;
Aaku yegiri mullu meeda padda, mullu vachi aaku meeda padinaa chirigedi aakae. &lt;br /&gt;
Aalasyam amrutham visham. &lt;br /&gt;
Aalu laedhu, choolu laedhu, koduku paeru somalingam. &lt;br /&gt;
Aarae dheepaaniki velugu yekkuva. &lt;br /&gt;
Aarogyamae mahaabhaagyamu. &lt;br /&gt;
Aasa laavu, peeka sannam (Contributed by Varma). &lt;br /&gt;
Aasthi mooredu aasa baaredu. &lt;br /&gt;
Aathraagaaniki buddhi mattamu. &lt;br /&gt;
Aavalinthaku anna unnadu kaani, thummuku thammudu laedanta.&amp;nbsp; &lt;br /&gt;
Aavalisthe pegulu lekka pettinatlu.. &lt;br /&gt;
Aavu chaenu maestae, dooda gattu maesthundaa? &lt;br /&gt;
Aavu gattuna mesthe dooda polaana mestundaa? &lt;br /&gt;
Aayane vunte mangali enduku ? (in olden days, women had to shave their heads if their husband dies, so "if he is alive, why need a barber") &lt;br /&gt;
Aayane vunte tella cheera enduku ? (contributed by Giri Babu, Srikakulam) &lt;br /&gt;
Abaddhamu aadina athikinatlu undali. &lt;br /&gt;
Abyaasamu koosu vidya. &lt;br /&gt;
Acchigaadi pellilo bucchigaadi ki oka Janjhapu pogu. &lt;br /&gt;
Adadhi anukunte Gadapaku teleekunda Dhantuthundhi &lt;br /&gt;
Adadhi anukunte gadapaku teleekunda dhatuthundhi &lt;br /&gt;
Adagandey ammaina annam pettadanta. &lt;br /&gt;
Adaganidhae ammainaa pettadhu. &lt;br /&gt;
Adakatteralo poka chekka laga (Rama Dayakar Reddy, Kadapa) &lt;br /&gt;
Adavari matalaku arthale verule. &lt;br /&gt;
Adavari notlo avaginja dhagadhu &lt;br /&gt;
Adavi kaachina vennelalaa (Like light in the jungle - useless). &lt;br /&gt;
Adavilo pelliki Jantuvulae purohitulu. &lt;br /&gt;
Addaalu naadu biddalu kaani, gaddalu naadu kaadhu. &lt;br /&gt;
Addham abaddham cheppadhu. &lt;br /&gt;
Addham eppudu abadham aadadhu, elantivadinainaa andamga chupisthundi. (Contributed by Rama Rao Vemulakonda) &lt;br /&gt;
Adigae vaadiki cheppaevaadu lokuva. &lt;br /&gt;
Adigo puli ante idigo thoka antaaru. &lt;br /&gt;
Adukkuney vaadiki cheppulu kuttukuney vaadu. &lt;br /&gt;
Adukkunnamma ku 60 kooralata, vandukunna ammaku okate koorata. &lt;br /&gt;
Adusu tokkanela kaalu kadaganela. &lt;br /&gt;
Ae endaku aa godugu. &lt;br /&gt;
Aemi laeni yedaarilo aamudamu chettae mahaa vrukshamu. &lt;br /&gt;
Agadthalo padda pilliki adae vaikuntamu. &lt;br /&gt;
Agniki aajyam posinatlu. &lt;br /&gt;
Agniki vaayuvu thodainatlu.&amp;nbsp; &lt;br /&gt;
Aishwaryamu vastae artha raathri godugu pattamanaevaadu. &lt;br /&gt;
Akka pelli kukka chaavuki vachindi. &lt;br /&gt;
Akulu naakkunae vaadi daggara mootulu naakkunae vaadata. &lt;br /&gt;
Amaayakuniki akshintalu isthae aavalaki velli notlo vesukunnadata. &lt;br /&gt;
Ambali naaketodiki meesaalettetodu okadu.… &lt;br /&gt;
Ambham lo kumbham laa. &lt;br /&gt;
Amma kadupu chustundi, pellam jebu chustundi. &lt;br /&gt;
Amma petta pettadu .... Adukkutinanivvadu (Contributed by : Aruna) &lt;br /&gt;
Ammabothe adivi konabothe korivi laaga undi (Cherukuru Srinivas, Nellore) &lt;br /&gt;
Andani draaksha pallu pullana (Contributed by Vijay Phanidhar, Jammalamadugu) &lt;br /&gt;
Andham annam pettadu. &lt;br /&gt;
Andhani mraanipandlaku arrulu chaachuta. &lt;br /&gt;
Andhuni mundu andaalela ? (Why expose beauty before a blind man ?) &lt;br /&gt;
Andithe siga andhaka pothe kaallu. &lt;br /&gt;
Angatlo annee unnaa, alludi notlu seni unnatlu. &lt;br /&gt;
Anna daanam kante vidya daanam goppadi &lt;br /&gt;
Annam parabrahma swaroopam. &lt;br /&gt;
Annapraasana nadae avakaya patchadi. &lt;br /&gt;
Annapu choravae gaani aksharapu chorava laedhu.&amp;nbsp; &lt;br /&gt;
Annee vunna vistharaaku anigimanigi undhata..yemi leni vistaraaku egiregiri paddadata… &lt;br /&gt;
Anni daanamulalo vidya daanam goppadi &lt;br /&gt;
Anni telisinamma amavasya nadu chasthe emi teliyanamma ekadasi nadu chacchindi. &lt;br /&gt;
Anni vunna alluni notlo shani vundi annatlu. &lt;br /&gt;
Anthata baave kaani vanga thota kaada kaadhu. &lt;br /&gt;
Antya nishtooram kanna aadhi nishtooram maelu. &lt;br /&gt;
Anumaanam penubhootam. &lt;br /&gt;
Appichchuvadu vaidyudu antaru. &lt;br /&gt;
Appu chaesi pappu koodu. &lt;br /&gt;
Ardharaatri maddeladaruvu. &lt;br /&gt;
Asale ledante pesarapappu vandamannaadata okadu. &lt;br /&gt;
Asalu baabu kanna...guddi baabu melu annattu… &lt;br /&gt;
Asalu kante vaddi ante preeti ata… &lt;br /&gt;
Asaluke esaru pettinatlu. &lt;br /&gt;
Asamarthudiki avakasamivvanela ?(Why give a chance to inefficient person ?) &lt;br /&gt;
Asapothu brahmadu lecipothoo pappu adigaaduta. &lt;br /&gt;
Athi rahasyam batta bayalu.&amp;nbsp; &lt;br /&gt;
Attha leni kodaluttamuraalu, kodalu leni atta gunavanturaalu. &lt;br /&gt;
Attha meeda kopam dutta meeda choopinatlu &lt;br /&gt;
Attha sommu alludu daanam. &lt;br /&gt;
Avaginjanta abaddham mundu airavatamanta nijam kooda nilabadadu (Dr Talluri Sreedhar) &lt;br /&gt;
Ayina vaariki aritaakullo......kaani vaariki kanchaalallo. &lt;br /&gt;
Ayithe aadivaaramu, kaakunte somavaaramu. &lt;br /&gt;
Ayya vachhae varaku amaavaasya aaguthundha ? &lt;br /&gt;
Ayyagaari (brahmin) pillalatho aadunkuuna debbale, aadakunnaa debbale.(K Dasaradha Rami Reddy, Bangalore) &lt;br /&gt;
Ayyaki leka adukku tintuntae, koduku vachi kodi palaav adigaadata. &lt;br /&gt;
Ayyavaarini cheyyabothae kothi ayyinattlu.   &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-4725310840361937756?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/8Ub73W0sNn0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/4725310840361937756?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/4725310840361937756?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/8Ub73W0sNn0/telugu-samethalu-starting-with.html" title="Telugu Samethalu Starting with ‘A’" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2011/04/telugu-samethalu-starting-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYAQX0-fSp7ImA9WhZRGEU.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-1141385886851417103</id><published>2010-04-03T11:14:00.000-07:00</published><updated>2011-04-15T09:49:00.355-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T09:49:00.355-07:00</app:edited><title /><content type="html">&lt;p&gt; This preview ebook contains six chapters in three parts (153 pages total): &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Part I&amp;#160;&amp;#160; Getting Started&lt;/strong&gt; &lt;/p&gt;    &lt;p&gt;Chapter 1&amp;#160;&amp;#160; Phone Hardware + Your Software &lt;/p&gt;    &lt;p&gt;Chapter 2&amp;#160;&amp;#160; Hello, Windows Phone &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Part II&amp;#160;&amp;#160; Silverlight&lt;/strong&gt; &lt;/p&gt;    &lt;p&gt;Chapter 3&amp;#160;&amp;#160; Code and XAML &lt;/p&gt;    &lt;p&gt;Chapter 4&amp;#160;&amp;#160; Presentation and Layout &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Part III&amp;#160;&amp;#160; XNA&lt;/strong&gt; &lt;/p&gt;    &lt;p&gt;Chapter 5&amp;#160;&amp;#160; Principles of Movement &lt;/p&gt;    &lt;p&gt;Chapter 6&amp;#160;&amp;#160; Textures and Sprites&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Here’s a quick excerpt from the ebook: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Chapter 1        &lt;br /&gt;Phone Hardware + Your Software&lt;/strong&gt; &lt;/p&gt;    &lt;p&gt;Sometimes it becomes apparent that previous approaches to a problem haven’t quite worked the way you anticipated. Perhaps you just need to clear away the smoky residue of the past, take a deep breath, and try again with a new attitude and fresh ideas. In golf, it’s known as a “mulligan”; in schoolyard sports, it’s called a “do-over”; and in the computer industry, we say it’s a “reboot.” &lt;/p&gt;    &lt;p&gt;A reboot is what Microsoft has initiated with its new approach to the mobile phone market. On February 15, 2010, at the Mobile World Congress in Barcelona, Microsoft CEO Steve Ballmer unveiled the Microsoft Windows Phone 7 Series and promised a product introduction in time for year-end holiday shopping. With its clean look, striking fonts, and new organizational paradigms, Windows Phone 7 Series not only represents a break with the Windows Mobile past but also differentiates itself from other smartphones currently in the market. &lt;/p&gt;    &lt;p&gt;For programmers, the news from Barcelona was certainly intriguing but hardly illuminating. Exactly how do we write programs for this new Windows Phone 7 Series? Developers detected a few hints but no real facts. The really important stuff wouldn’t be disclosed until mid-March at MIX 2010 in Las Vegas. &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Silverlight or XNA?&lt;/strong&gt; &lt;/p&gt;    &lt;p&gt;Intelligent speculation about the application platform for the Windows Phone 7 Series has gravitated around two possibilities: Silverlight and XNA. &lt;/p&gt;    &lt;p&gt;Since about 2008, programmers have been impatiently awaiting the arrival of a mobile version of Silverlight. Silverlight, a spinoff of the client-based Windows Presentation Foundation (WPF), has already given Web programmers unprecedented power to develop sophisticated user interfaces with a mix of traditional controls, high-quality text, vector graphics, media, animation, and data binding that run on multiple platforms and browsers. Many programmers thought Silverlight would be an excellent platform for writing applications and utilities for smartphones. &lt;/p&gt;    &lt;p&gt;XNA—the three letters stand for something like “XNA is Not an Acronym”—is Microsoft’s game platform supporting both 2D sprite-based and 3D graphics with a traditional game-loop architecture. Although XNA is mostly associated with writing games for the Xbox 360 console, developers can also target the PC itself, as well as Microsoft’s classy audio player, the Zune. The 2009 release of the Zune HD particularly seemed to suggest a mobile future built around the device’s revamped graphics and multitouch navigation. For many Zune HD users, the most disappointing feature of the device was its inability to make phone calls!      &lt;br /&gt;Either Silverlight or XNA would make good sense as the application platform for the Windows Phone 7 Series, but the decision from Microsoft is: &lt;/p&gt;    &lt;p&gt;Both! &lt;/p&gt;    &lt;p&gt;The Windows Phone 7 Series supports programs written for either Silverlight or XNA. And this we call “an embarrassment of riches.”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You can download the ebook in &lt;a href="http://download.microsoft.com/download/E/3/5/E359FC51-1CF5-47F1-9BF3-74AB09D3339B/ProgWinPhonePreview.xps"&gt;XPS format here&lt;/a&gt;. Here it is &lt;a href="http://download.microsoft.com/download/7/C/8/7C820C6F-C205-4ECF-B9F3-1505DD13F9BF/ProgWinPhonePreview.pdf"&gt;in PDF format&lt;/a&gt;. And the zipped &lt;a href="http://download.microsoft.com/download/1/D/B/1DB49641-3956-41F1-BAFA-A021673C709E/CodeSamples_DRAFTPreview_ProgrammingWindowsPhone7Series.zip"&gt;code samples for this draft preview are here&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Charles is at MIX; say hello and ask him about programming for the Windows Phone. And enjoy, everybody! &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/microsoft_press/WindowsLiveWriter/FreeebookProgrammingWindowsPhone7SeriesD_8BDC/WinPhone_v3%20(2)_2.jpg"&gt;&lt;img title="WinPhone_v3 (2)" border="0" alt="WinPhone_v3 (2)" src="http://blogs.msdn.com/blogfiles/microsoft_press/WindowsLiveWriter/FreeebookProgrammingWindowsPhone7SeriesD_8BDC/WinPhone_v3%20(2)_thumb.jpg" width="325" height="402" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;[tweetmeme only_single="false"]&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-1141385886851417103?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/1141385886851417103?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/1141385886851417103?v=2" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author></entry><entry gd:etag="W/&quot;DUcHQHw6eyp7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-3535139904932544483</id><published>2010-03-04T06:31:00.001-08:00</published><updated>2011-04-15T21:10:31.213-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.213-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Startup Program" /><title>Use the Shift Key to Temporarily Disable Startup Applications for
Troubleshooting</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tarcmHyH074RvKmhLPM26aKaVmM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tarcmHyH074RvKmhLPM26aKaVmM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tarcmHyH074RvKmhLPM26aKaVmM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tarcmHyH074RvKmhLPM26aKaVmM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Problems with applications that run at startup can cause logon delays or even prevent you from completing Windows startup in normal mode. One way you can simplify your configuration is to disable startup applications&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;By holding down the Shift key during the logon process, you can prevent the operating system from running startup programs or shortcuts in the following folders: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;%SystemDrive%\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup &lt;/li&gt;    &lt;li&gt;%SystemDrive%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup&lt;/li&gt; &lt;/ul&gt; To disable the applications or shortcuts in the preceding folders, you must hold down the Shift key until the desktop icons appear. Holding down the Shift key is a better alternative than temporarily deleting or moving programs and shortcuts, because this procedure affects only the current user session.   &lt;br /&gt;To use the Shift key to disable applications and shortcuts in startup folders, log off the computer and then log on again. Immediately press and hold down the Shift key. Continue to hold down the Shift key until the desktop icons appear. If you can log on successfully, you have isolated the cause of the problem to your startup applications. Next, you should use the System Configuration utility to temporarily disable applications one by one until you identify the cause of the problem. With the cause of the problem identified, you can fix the applica¬tion or permanently remove it from your startup programs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-3535139904932544483?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/L3EQjv6e8Dc" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/3535139904932544483?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/3535139904932544483?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/L3EQjv6e8Dc/use-shift-key-to-temporarily-disable_04.html" title="Use the Shift Key to Temporarily Disable Startup Applications for&#xA;Troubleshooting" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/03/use-shift-key-to-temporarily-disable_04.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQHw6fip7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-2032778846798508736</id><published>2010-03-04T06:31:00.000-08:00</published><updated>2011-04-15T21:10:31.216-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.216-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Startup Program" /><title>Use the Shift Key to Temporarily Disable Startup Applications for
Troubleshooting</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x-NJUAchdam8DDTjeUTeqs6GWoE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x-NJUAchdam8DDTjeUTeqs6GWoE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x-NJUAchdam8DDTjeUTeqs6GWoE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x-NJUAchdam8DDTjeUTeqs6GWoE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Problems with applications that run at startup can cause logon delays or even prevent you from completing Windows startup in normal mode. One way you can simplify your configuration is to disable startup applications&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;By holding down the Shift key during the logon process, you can prevent the operating system from running startup programs or shortcuts in the following folders: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;%SystemDrive%\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup &lt;/li&gt;    &lt;li&gt;%SystemDrive%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup&lt;/li&gt; &lt;/ul&gt; To disable the applications or shortcuts in the preceding folders, you must hold down the Shift key until the desktop icons appear. Holding down the Shift key is a better alternative than temporarily deleting or moving programs and shortcuts, because this procedure affects only the current user session.   &lt;br /&gt;To use the Shift key to disable applications and shortcuts in startup folders, log off the computer and then log on again. Immediately press and hold down the Shift key. Continue to hold down the Shift key until the desktop icons appear. If you can log on successfully, you have isolated the cause of the problem to your startup applications. Next, you should use the System Configuration utility to temporarily disable applications one by one until you identify the cause of the problem. With the cause of the problem identified, you can fix the applica¬tion or permanently remove it from your startup programs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-2032778846798508736?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/dJsZJHH4Nl0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/2032778846798508736?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/2032778846798508736?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/dJsZJHH4Nl0/use-shift-key-to-temporarily-disable.html" title="Use the Shift Key to Temporarily Disable Startup Applications for&#xA;Troubleshooting" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/03/use-shift-key-to-temporarily-disable.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQHw5eip7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-7962275047089649353</id><published>2010-03-03T08:58:00.001-08:00</published><updated>2011-04-15T21:10:31.222-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.222-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><category scheme="http://www.blogger.com/atom/ns#" term="Take OwnerShip" /><title>Add Take Ownership Option To Explorer Right Click Context Menu In
Windows Vista Or In Windows 7</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/i67gjM0BQUyXJAzmGTfejlH04g8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i67gjM0BQUyXJAzmGTfejlH04g8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/i67gjM0BQUyXJAzmGTfejlH04g8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i67gjM0BQUyXJAzmGTfejlH04g8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.tomstricks.com/how-to-add-take-ownership-option-to-explorer-right-click-context-menu-in-windows-vista-or-in-windows-7/takeownership/"&gt;&lt;img title="takeownership" alt="takeownership" src="http://www.tomstricks.com/wp-content/uploads/2009/03/takeownership.jpg" /&gt;&lt;/a&gt;If you hold down Shift key while right clicking on any file in Windows Vista or Windows 7 explorer, you can see few more options in the context menu.You can easily add one more option to the file context menu called “&lt;strong&gt;Take Ownership&lt;/strong&gt;” option which will be very useful to take ownership of any file.As many of you know, we need to &lt;strong&gt;take the ownership of system file in Windows Vista or in Windows 7&lt;/strong&gt; that you want to alter by any means. You need to have the ownership to do even simple operations like Renaming and Replacing of files and folders in Windows Vista or in Windows 7.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;To enable “Take Ownership” option in file context menu in Windows Vista or in Windows 7:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Open the Notepad editor from Windows Vista/Windows 7 start menu and copy the code given below: &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Windows Registry Editor Version 5.00&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[HKEY_CLASSES_ROOT\*\shell\runas]     &lt;br /&gt;@=”Take Ownership”      &lt;br /&gt;“Extended”=”&amp;quot;      &lt;br /&gt;“NoWorkingDirectory”=”&amp;quot;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[HKEY_CLASSES_ROOT\*\shell\runas\command]     &lt;br /&gt;@=”cmd.exe /c takeown /f \”%1\” &amp;amp;&amp;amp; icacls \”%1\” /grant administrators:F”      &lt;br /&gt;“IsolatedCommand”=”cmd.exe /c takeown /f \”%1\” &amp;amp;&amp;amp; icacls \”%1\” /grant administrators:F”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[HKEY_CLASSES_ROOT\Directory\shell\runas]     &lt;br /&gt;@=”Take Ownership”      &lt;br /&gt;“Extended”=”&amp;quot;      &lt;br /&gt;“NoWorkingDirectory”=”&amp;quot;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[HKEY_CLASSES_ROOT\Directory\shell\runas\command]     &lt;br /&gt;@=”cmd.exe /c takeown /f \”%1\” /r /d y &amp;amp;&amp;amp; icacls \”%1\” /grant administrators:F /t”      &lt;br /&gt;“IsolatedCommand”=”cmd.exe /c takeown /f \”%1\” /r /d y &amp;amp;&amp;amp; icacls \”%1\” /grant administrators:F /t”&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Save the above code in notepad as ‘&lt;strong&gt;TakeOwnerShip.reg&lt;/strong&gt;‘ to the computer. &lt;/li&gt;    &lt;li&gt;Browse the saved file and then right click to the file and from the opening context menu select merge. &lt;/li&gt;    &lt;li&gt;Continue through the &lt;strong&gt;UAC(User Account Control)&lt;/strong&gt; prompt and confirm that you wish to perform the action. &lt;/li&gt;    &lt;li&gt;After merging the entries to the Windows Vista/Windows 7 registry, reboot your system. &lt;/li&gt;    &lt;li&gt;When you hold shift and right-click on a file or folder you will have the option of changing the ownership. &lt;/li&gt;    &lt;li&gt;Please note that before the ownership will be changed, you must grant access(UAC Prompt), click Continue. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In order to verify that the “&lt;strong&gt;Take Ownership&lt;/strong&gt;” option is successfully added to Windows Vista/Windows 7 explorer context menu, you can right-click on a file or folder, choose Properties and then choose Details and you will see the “Owner” section changed to COMPUTERNAME\USERNAME.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-7962275047089649353?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/h6GPdwn-HlU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/7962275047089649353?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/7962275047089649353?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/h6GPdwn-HlU/add-take-ownership-option-to-explorer_03.html" title="Add Take Ownership Option To Explorer Right Click Context Menu In&#xA;Windows Vista Or In Windows 7" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/03/add-take-ownership-option-to-explorer_03.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQHw5fCp7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-8987194106225676507</id><published>2010-03-03T08:58:00.000-08:00</published><updated>2011-04-15T21:10:31.224-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.224-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><category scheme="http://www.blogger.com/atom/ns#" term="Take OwnerShip" /><title>Add Take Ownership Option To Explorer Right Click Context Menu In
Windows Vista Or In Windows 7</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yTXlvMLY6c79FctHiZDa0qLUvF0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yTXlvMLY6c79FctHiZDa0qLUvF0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yTXlvMLY6c79FctHiZDa0qLUvF0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yTXlvMLY6c79FctHiZDa0qLUvF0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.tomstricks.com/how-to-add-take-ownership-option-to-explorer-right-click-context-menu-in-windows-vista-or-in-windows-7/takeownership/"&gt;&lt;img title="takeownership" alt="takeownership" src="http://www.tomstricks.com/wp-content/uploads/2009/03/takeownership.jpg" /&gt;&lt;/a&gt;If you hold down Shift key while right clicking on any file in Windows Vista or Windows 7 explorer, you can see few more options in the context menu.You can easily add one more option to the file context menu called “&lt;strong&gt;Take Ownership&lt;/strong&gt;” option which will be very useful to take ownership of any file.As many of you know, we need to &lt;strong&gt;take the ownership of system file in Windows Vista or in Windows 7&lt;/strong&gt; that you want to alter by any means. You need to have the ownership to do even simple operations like Renaming and Replacing of files and folders in Windows Vista or in Windows 7.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;To enable “Take Ownership” option in file context menu in Windows Vista or in Windows 7:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Open the Notepad editor from Windows Vista/Windows 7 start menu and copy the code given below: &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Windows Registry Editor Version 5.00&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[HKEY_CLASSES_ROOT\*\shell\runas]     &lt;br /&gt;@=”Take Ownership”      &lt;br /&gt;“Extended”=”&amp;quot;      &lt;br /&gt;“NoWorkingDirectory”=”&amp;quot;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[HKEY_CLASSES_ROOT\*\shell\runas\command]     &lt;br /&gt;@=”cmd.exe /c takeown /f \”%1\” &amp;amp;&amp;amp; icacls \”%1\” /grant administrators:F”      &lt;br /&gt;“IsolatedCommand”=”cmd.exe /c takeown /f \”%1\” &amp;amp;&amp;amp; icacls \”%1\” /grant administrators:F”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[HKEY_CLASSES_ROOT\Directory\shell\runas]     &lt;br /&gt;@=”Take Ownership”      &lt;br /&gt;“Extended”=”&amp;quot;      &lt;br /&gt;“NoWorkingDirectory”=”&amp;quot;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[HKEY_CLASSES_ROOT\Directory\shell\runas\command]     &lt;br /&gt;@=”cmd.exe /c takeown /f \”%1\” /r /d y &amp;amp;&amp;amp; icacls \”%1\” /grant administrators:F /t”      &lt;br /&gt;“IsolatedCommand”=”cmd.exe /c takeown /f \”%1\” /r /d y &amp;amp;&amp;amp; icacls \”%1\” /grant administrators:F /t”&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Save the above code in notepad as ‘&lt;strong&gt;TakeOwnerShip.reg&lt;/strong&gt;‘ to the computer. &lt;/li&gt;    &lt;li&gt;Browse the saved file and then right click to the file and from the opening context menu select merge. &lt;/li&gt;    &lt;li&gt;Continue through the &lt;strong&gt;UAC(User Account Control)&lt;/strong&gt; prompt and confirm that you wish to perform the action. &lt;/li&gt;    &lt;li&gt;After merging the entries to the Windows Vista/Windows 7 registry, reboot your system. &lt;/li&gt;    &lt;li&gt;When you hold shift and right-click on a file or folder you will have the option of changing the ownership. &lt;/li&gt;    &lt;li&gt;Please note that before the ownership will be changed, you must grant access(UAC Prompt), click Continue. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In order to verify that the “&lt;strong&gt;Take Ownership&lt;/strong&gt;” option is successfully added to Windows Vista/Windows 7 explorer context menu, you can right-click on a file or folder, choose Properties and then choose Details and you will see the “Owner” section changed to COMPUTERNAME\USERNAME.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-8987194106225676507?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/lGNvat5MnAo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/8987194106225676507?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/8987194106225676507?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/lGNvat5MnAo/add-take-ownership-option-to-explorer.html" title="Add Take Ownership Option To Explorer Right Click Context Menu In&#xA;Windows Vista Or In Windows 7" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/03/add-take-ownership-option-to-explorer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQHw5fip7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-5630373391014124199</id><published>2010-03-03T08:57:00.000-08:00</published><updated>2011-04-15T21:10:31.226-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.226-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Hidden" /><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><category scheme="http://www.blogger.com/atom/ns#" term="Administrator" /><category scheme="http://www.blogger.com/atom/ns#" term="Activate" /><title>Activate Hidden Windows 7 Administrator Account</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lJFN2Ync9db_mkPG82nQge5ymzc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lJFN2Ync9db_mkPG82nQge5ymzc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lJFN2Ync9db_mkPG82nQge5ymzc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lJFN2Ync9db_mkPG82nQge5ymzc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Similar to former operating system Windows Vista, Microsoft’s new OS Windows 7 also has a built-in administrator account which is created when it is installed and it is disabled by default.Whenever you want to perform tasks under the administrator account with no UAC (user account control) in Windows 7, you need to enable the administrator account.You can go through this grand Administrator account to solve a problem or blocking rights, or simply activate it and keep it in reserve in case. You can&lt;strong&gt; enable the hidden administrator account in Windows 7&lt;/strong&gt; by any of the following three methods:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Method 1:Using Command Prompt&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Open an elevated Command prompt in Windows 7&amp;#160; by&amp;#160; right click on the command prompt and select “Run as Administrator”.After that you only need to enter the simple command below to activate it.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;net user administrator /active:yes&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You can also specify your password for this particular account by using the following command&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;net user administrator password&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;where you can replace “password” with your own password. You can see the account immediately after you logoff your Windows 7. In order to deactivate it, you can use the command below&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;net user administrator /active:no&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This will effectively turn off the administrator account in Windows 7.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Method 2:Using Local Security Policy&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Another way of activating the administrator account in Windows 7 is via Local Security Policy.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Type &lt;strong&gt;secpol.msc&lt;/strong&gt; in the search bar and hit enter. &lt;/li&gt;    &lt;li&gt;After the Local Security Policy pops up, navigate to Local Policies-&amp;gt; Security Options &lt;/li&gt;    &lt;li&gt;You can see an entry that reads Accounts: Administrator account. &lt;/li&gt;    &lt;li&gt;Double click the entry to enable it. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Method 3:Using Computer Management Policy&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Another way of activating the administrator account in Windows 7 is via Computer Management Policy.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Type &lt;strong&gt;compmgmt.msc&lt;/strong&gt; in the search bar and hit enter. &lt;/li&gt;    &lt;li&gt;After the Computer Management window pops up, navigate to Local Users and Groups -&amp;gt; Users. &lt;/li&gt;    &lt;li&gt;In right-side pane double-click on “Administrator” account. It’ll open its Properties. &lt;/li&gt;    &lt;li&gt;Deselect “Account is disabled” option and Apply it. &lt;/li&gt; &lt;/ul&gt; Source:TomsTricks&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-5630373391014124199?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/w03UyuClook" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/5630373391014124199?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/5630373391014124199?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/w03UyuClook/activate-hidden-windows-7-administrator.html" title="Activate Hidden Windows 7 Administrator Account" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/03/activate-hidden-windows-7-administrator.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQHw5cCp7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-2244259992955338360</id><published>2010-03-03T08:55:00.000-08:00</published><updated>2011-04-15T21:10:31.228-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.228-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><category scheme="http://www.blogger.com/atom/ns#" term="CTCP" /><category scheme="http://www.blogger.com/atom/ns#" term="Compund TCP. TCP" /><title>Enable CTCP(Compound TCP) And ECN (Explicit Congestion Notification) In
Windows Vista</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RtPgyeObSfQ7gb6aKFrxJOK04PU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RtPgyeObSfQ7gb6aKFrxJOK04PU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RtPgyeObSfQ7gb6aKFrxJOK04PU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RtPgyeObSfQ7gb6aKFrxJOK04PU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;One significant addition to&lt;strong&gt; Windows Vista’s TCP/IP stack is CTCP or Compound TCP&lt;/strong&gt;.CTCP(Compound TCP) is a technology that came out of the Microsoft Research group as a way to deal with connections that have a large bandwidth-delay product. This is because traditional TCP is inherently a conservative and well behaved system based on reliability and sharing as the most important properties.A good example of large bandwidth-delay type of connection would be s&lt;strong&gt;atellite internet or wireless technology like EVDO or WiMax&lt;/strong&gt;.This “secret” advanced networking feature disabled by default in Windows Vista. You need to have Auto-Tuning enabled for this to work.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ECN (Explicit Congestion Notification)&lt;/strong&gt; is a mechanism that provides routers with an alternate method of communicating network congestion. It is aimed to decrease retransmissions. In essence, &lt;strong&gt;ECN (Explicit Congestion Notification)&lt;/strong&gt; assumes that the cause of any packet loss is router congestion. It allows routers experiencing congestion to mark packets and allow clients to automatically lower their transfer rate to prevent further packet loss.&lt;strong&gt;ECN (Explicit Congestion Notification)&lt;/strong&gt; is disabled by default in Windows Vista, as it is possible that it may cause problems with some older routers that do not support this feature.&lt;/p&gt;  &lt;p&gt;Open a command prompt as an administrator(elevated command prompt)&amp;#160; in Windows Vista or you will get an error that request needs to be elevated.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;To &lt;strong&gt;Enable CTCP(Compound TCP) in Windows Vista&lt;/strong&gt; run the following command in an elevated command prompt: &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;netsh interface tcp set global congestionprovider=ctcp&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;To &lt;strong&gt;Disable CTCP(Compound TCP) in Windows Vista&lt;/strong&gt; run the following command in an elevated command prompt: &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;netsh interface tcp set global congestionprovider=none&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;To &lt;strong&gt;Enable ECN (Explicit Congestion Notification) in Windows Vista&lt;/strong&gt; run the following command in an elevated command prompt: &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;netsh int tcp set global ecncapability=enabled&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;To verify changes,run the following command in&amp;#160; an elevated command prompt: &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;netsh int tcp show global&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Notes: &lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;If you are going to use &lt;strong&gt;CTCP(Compound TCP)&lt;/strong&gt; on a lossy connection that might have packets come back out of order, you might also want to enable RFC 1323 timestamps, unless you are on a very low bandwidth connection. You can do that by running ‘&lt;strong&gt;netsh interface tcp set global timestamps=enabled&lt;/strong&gt;‘ in an elevated command prompt. &lt;/li&gt;    &lt;li&gt;“&lt;strong&gt;Large bandwidth-delay product&lt;/strong&gt;” usually means there is a very busy (congested) network or a connection that has a long trip to make (like satellite). &lt;/li&gt; &lt;/ul&gt; Source: TomsTricks&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-2244259992955338360?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/bqzg0lbBrlc" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/2244259992955338360?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/2244259992955338360?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/bqzg0lbBrlc/enable-ctcpcompound-tcp-and-ecn.html" title="Enable CTCP(Compound TCP) And ECN (Explicit Congestion Notification) In&#xA;Windows Vista" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/03/enable-ctcpcompound-tcp-and-ecn.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQHw4eSp7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-3221452283019957023</id><published>2010-03-03T08:54:00.000-08:00</published><updated>2011-04-15T21:10:31.231-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.231-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="DNS" /><category scheme="http://www.blogger.com/atom/ns#" term="Cache" /><category scheme="http://www.blogger.com/atom/ns#" term="Web Browsing" /><category scheme="http://www.blogger.com/atom/ns#" term="Faster" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><title>Increase DNS Cache In Windows Vista For Faster Web Browsing</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/j12tGFP3UvPIkwEYufB8hyMhVc8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j12tGFP3UvPIkwEYufB8hyMhVc8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/j12tGFP3UvPIkwEYufB8hyMhVc8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j12tGFP3UvPIkwEYufB8hyMhVc8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;About Windows DNS Cache: &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Windows uses a cache called DNS cache to store recently visited websites ie,Windows operating system puts the DNS information into a local DNS cache on your PC when you visit a site. You can see what your computer stores in this cache by going to Windows Vista Start &amp;gt; Run and typing cmd (the command prompt). Now type ipconfig/displaydns. You should see a list of all the website addresses it has stored in the cache.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Working of Windows DNS Cache:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Whenever you go to a website, it has to look up the IP address where that website is located. First it checks to see if it’s in your cache before asking the DNS server over the Internet for the IP address.The cache contains both negative and positive entries. Positive entries are those in which the DNS lookup succeeded and you were able to connect to the Web site. When Windows looks in the cache, if it finds a positive entry, it immediately uses that DNS information and sends you to the requested Web site. As you can see, referring to the address when you already have it is going to be faster than if it has to travel over the wires to retrieve it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.tomstricks.com/how-to-increase-dns-cache-in-windows-vista-for-faster-web-browsing/increase_dns_cache_vista/"&gt;&lt;img title="increase_dns_cache_vista" alt="increase_dns_cache_vista" src="http://www.tomstricks.com/wp-content/uploads/2009/04/increase_dns_cache_vista-300x236.jpg" width="300" height="236" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Negative entries are those in which no match was found, and you end up getting a “&lt;strong&gt;Cannot find server or DNS&lt;/strong&gt;” error in your browser. Similarly, when Windows looks in the cache and finds a negative entry, it gives you the error message without bothering to go out to the site.Negative entries can lead to problems. When you try to make a connection to a site that has a negative entry in your cache, you’ll get an error message, even if the site’s problems have been resolved and it’s now reachable.&lt;/p&gt;  &lt;p&gt;The items in the cache do not stay there forever, and are constantly making room for more recent addresses you visited. &lt;strong&gt;Increasing the size of the DNS cache in Windows Vista will allow for faster web browsing&lt;/strong&gt;, especially if you frequently view the same websites. Edit some registry values to achieve this.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Click Start, type regedit in the Windows Vista Start search box, and then press ENTER. &lt;/li&gt;    &lt;li&gt;Locate and then expand the following registry subkey: &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Go to New &amp;gt; DWORD (32-bit) Value. &lt;/li&gt;    &lt;li&gt;Name it as &lt;em&gt;&lt;strong&gt;CacheHashTableBucketSize&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;Double-click into it and enter the value 1 &lt;/li&gt;    &lt;li&gt;Also create the following DWORD values with the following values: &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;NegativeCacheTime = 0       &lt;br /&gt;CacheHashTableSize = 384        &lt;br /&gt;MaxCacheEntryTtlLimit = 64000        &lt;br /&gt;MaxSOACacheEntryTtlLimit = 301&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Close the Windows Vista registry editor window and restart your computer for the changes. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Note: &lt;/strong&gt;To make the change take effect flush your Windows DNS cache by issuing the command &lt;strong&gt;ipconfig /flushdns&lt;/strong&gt; at an elevated command prompt. The command will flush your DNS cache — all the entries, both positive and negative, will be flushed — and it will be empty until you start visiting Web sites. Negative entries, however, will not be added to the cache if you’ve given the DWORD a value of 0.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; Source : Tomstricks&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-3221452283019957023?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/AkLf7Y97R2w" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/3221452283019957023?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/3221452283019957023?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/AkLf7Y97R2w/increase-dns-cache-in-windows-vista-for.html" title="Increase DNS Cache In Windows Vista For Faster Web Browsing" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/03/increase-dns-cache-in-windows-vista-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQHw4eyp7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-1393126283538466914</id><published>2010-03-03T08:53:00.000-08:00</published><updated>2011-04-15T21:10:31.233-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.233-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Speed of Internet" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><category scheme="http://www.blogger.com/atom/ns#" term="Vista" /><category scheme="http://www.blogger.com/atom/ns#" term="Packet Scheduler" /><category scheme="http://www.blogger.com/atom/ns#" term="Spped" /><title>Increase The Speed Of Internet Connection By 20% In Windows Vista</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JtU_L_85nV7L_88irIbsZAQwQnk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JtU_L_85nV7L_88irIbsZAQwQnk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JtU_L_85nV7L_88irIbsZAQwQnk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JtU_L_85nV7L_88irIbsZAQwQnk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Fact:&lt;/strong&gt; Windows Operating System uses 20% of your internet connection bandwidth by default!    &lt;br /&gt;&lt;strong&gt;     &lt;br /&gt;Reason:&lt;/strong&gt; Windows reserves 20% of your available bandwidth for several reasons related to QoS or Quality of Services like Internet telephone systems, video, and also Windows Updates. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Resolution:&lt;/strong&gt; But there is a simple trick to utilize your full internet bandwidth . You can use this trick to accelerate your internet speed.Here’s how to get it back.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Go to Windows Vista Start Menu &amp;gt; Run and then type “&lt;strong&gt;gpedit.msc&lt;/strong&gt;” to run Group Policy Editor. &lt;/li&gt;    &lt;li&gt;You’ll need to provide administrative confirmation if &lt;strong&gt;User Account Control(UAC)&lt;/strong&gt; is turned on. &lt;/li&gt;    &lt;li&gt;Go to Local &lt;strong&gt;Computer Policy &amp;gt; Computer Configuration &amp;gt; Administrative Templates&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Under &lt;strong&gt;Administrative Templates&lt;/strong&gt;, expand &lt;strong&gt;Network&lt;/strong&gt; and then &lt;strong&gt;Qos Packet Scheduler&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;In the right panel, right click on &lt;strong&gt;Limit reservable bandwidth&lt;/strong&gt; and then select &lt;strong&gt;Properties&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;In &lt;strong&gt;Limit reservable bandwidth&lt;/strong&gt; Properties, click on &lt;strong&gt;Setting&lt;/strong&gt; tab and then &lt;strong&gt;enable&lt;/strong&gt; Limit reservable bandwidth. &lt;/li&gt;    &lt;li&gt;Here you can change Bandwidth Limit from default 20 to 0. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; By default, the Packet Scheduler limits the system to 20 percent of the bandwidth of a connection, but you can use this setting to override the default. This setting will allow the system to reserve nothing, rather than the default 20%.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Now , go to your Connection properties, select Networking and be sure &lt;strong&gt;Packet Scheduler&lt;/strong&gt; is enabled . &lt;/li&gt;    &lt;li&gt;Click ok and the restart your computer. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The &lt;strong&gt;Quality of Service Packet Scheduler&lt;/strong&gt; is a Windows platform component that is enabled by default on Windows Vista and Windows XP computers. This scheduler is designed to control the IP traffic for various network services, including Real Time Communications traffic. This component must be installed and enabled if the QoS markings described earlier for audio and video traffic are to be implemented by the IP stack. &lt;/li&gt;    &lt;li&gt;QoS&amp;#160; allow you to measure bandwidth, detect changing network conditions (such as congestion or availability of bandwidth), and prioritize or throttle traffic. &lt;/li&gt;    &lt;li&gt;Disabling or lowering the reserved percentage to much can cause problems with applications that rely on it. For example, with streaming media or VoIP(Voice Over IP) applications. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Group Policy Editor (gpedit.msc)&lt;/strong&gt; is not available in Windows Vista Home and Vista Home Premium editions &lt;/li&gt;    &lt;li&gt;This trick is applicable to Windows XP Pro also. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;Source: tomstricks&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-1393126283538466914?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/jgVCxTKifz8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/1393126283538466914?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/1393126283538466914?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/jgVCxTKifz8/increase-speed-of-internet-connection.html" title="Increase The Speed Of Internet Connection By 20% In Windows Vista" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/03/increase-speed-of-internet-connection.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQHw4fSp7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-3449180208795460127</id><published>2010-02-10T09:03:00.001-08:00</published><updated>2011-04-15T21:10:31.235-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.235-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Concurrency Visualizer" /><category scheme="http://www.blogger.com/atom/ns#" term="Parallel Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="LINQ" /><category scheme="http://www.blogger.com/atom/ns#" term="Parallel Computing" /><title>Tuning a Parallel LINQ File Search Application</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uIWHPMdT7LZB6_AlatOQ2U7d48o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uIWHPMdT7LZB6_AlatOQ2U7d48o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uIWHPMdT7LZB6_AlatOQ2U7d48o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uIWHPMdT7LZB6_AlatOQ2U7d48o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This post explores the performance issues that arise when using PLINQ to parallelize queries, and illustrates how the &lt;a href="http://msdn.microsoft.com/en-us/library/dd537632(VS.100).aspx"&gt;Concurrency Visualizer&lt;/a&gt; in Visual Studio 2010 can be a valuable tool in identifying performance bottlenecks and making efficient and profitable parallelization choices. The subject of this entry is a toy application that scans a set of files for a user-specified pattern and performs some processing every time it finds an occurrence of the pattern. The processing in this case is a simple count of the number of matches. In spite of its small size, the application provides insight into several issues that arise in parallelization using PLINQ.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_2.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb.png" width="551" height="474" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Figure 1: Sequential version of the scan algorithm. The LINQ query is highlighted.&lt;/p&gt;  &lt;p&gt;The starting point is a sequential version of the search algorithm expressed using LINQ shown in figure 1. Arguments to the function specify the pattern to be searched, as well as the files that are to be searched from a starting path and a pattern of searchable files. The code queries all lines in all applicable files for the pattern specified. A Stopwatch is used to measure the time consumed in this region. Also note the use of a “scenario marker&amp;quot; to identify and demarcate the interesting search region in the Concurrency Visualizer. The use of scenario marker is explained in detail in a &lt;a href="http://blogs.msdn.com/hshafi/archive/2009/11/13/concurrency-visualizer-linking-visualizations-to-application-phases.aspx"&gt;previous blog entry&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;This application is profiled in Visual Studio 2010 Concurrency Visualizer. Since the topic of this entry is to understand the parallelization of CPU-intensive LINQ fragments, the application makes three successive calls to Scan function with the same arguments so that virtual memory and page files are warmed up. This entry focuses on the third call to the Scan function. Improving performance bottlenecks posed by the blocking that arises due to disk reads/writes is a separate topic and is not the focus of this entry. The application is profiled in Concurrency Visualizer when scanning ~5000 files, each containing at most a few thousand lines of text, for a reasonably complicated regular expression.&amp;#160; Scenario marker &amp;quot;GrepMarker&amp;quot; demarcates the region of interest. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_4.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_1.png" width="558" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Figure 2: Threads view of the sequential scan region. Irrelevant threads are hidden using the &amp;quot;hide threads&amp;quot; functionality of Concurrency Visualizer. A scenario marker helps zoom in on the important region.&lt;/p&gt;  &lt;p&gt;Figure 2 shows the &amp;quot;threads view&amp;quot; after zooming in on GrepMarker region and selecting the marker. As shown in the figure, the region takes ~6.9 seconds and is executing (green) most of this time. Figure 3 shows the CPU utilization view of the same Scan region. As expected, the application fails to use up more than one CPU at any stage, and is compute-bound, resulting in almost a 100% CPU utilization the entire time. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_6.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_2.png" width="551" height="337" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 3: CPU utilization view of the scan region. The application is CPU-bound and might benefit from parallelism to take advantage of available cores. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_8.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_3.png" width="563" height="258" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 4: Execution report of the scan region.&lt;/p&gt;  &lt;p&gt;Figure 4 shows the execution report for the scan segment. This shows that almost 75% of the compute cycles are spent in the Regex.Match function, which does pattern matching. The remaining time is spent in reading files, listing directories, in garbage collection, etc. The report shows that there is much potential for improving performance through parallelism. The key is that while the processing on each file is hard to parallelize (it is most natural to read and process lines within a file sequentially), different files can be searched in parallel. Figure 5 shows how to achieve this using PLINQ, by adding a &amp;quot;.AsParallel&amp;quot; directive to the query so that each file is processed in parallel. PLINQ hides away the management required to create threads, partition the work between threads, and collecting the results. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_10.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_4.png" width="562" height="74" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 5: Converting LINQ to PLINQ for parallel performance by adding a .AsParallel directive at the end. &lt;/p&gt;  &lt;p&gt;Figure 6 shows the threads view when this parallel version of scan is profiled on the same machine, which is a 4-core system. PLINQ allocates the work to four worker threads, while the main thread processes results as and when they become available. This first attempt at parallelism reduces the time from 6.9 seconds initially to 3.7 seconds, a 1.8x speedup. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_12.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_5.png" width="555" height="181" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 6: Threads view of parallel Scan. The outer marker is the “GrepMarker” scenario marker, while the marker nested inside it identifies the region executing PLINQ code.&lt;/p&gt;  &lt;p&gt;The figure also gives insight into why this version did not yield even more speedup. A major bottleneck is the initial sequential portion of the query, which is spent executing Directory.GetFiles, readily identified by examining stacks and execution report for this segment. Another major reason is the load imbalance between the four worker threads, where worker thread 10532 finishes the earliest and thread 9664 finishes the last, delaying completion of the query for almost a second. This is further confirmed by examining the CPU execution view as shown in figure 7. The view clearly illustrates the sequential bottleneck regions that limit gains from parallel performance. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_14.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_6.png" width="554" height="334" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 7: CPU execution view of parallel Scan. Sequential bottleneck regions are circled out.&lt;/p&gt;  &lt;p&gt;The initial sequential execution is due to the fact that the call to Directory.GetFi&lt;br/&gt;les needs to get the names of all files before it returns an array containing those names. In the sequential version, this operation took only 7.1% of the execution time, but following Almdahl's law, it becomes a limiter to parallel performance. The second sequential bottleneck (circled in the latter part of the region) is due to load-imbalance between the threads executing the query. The load-imbalance problem arises because PLINQ performs range partitioning on the array, assigning equal number of files to each thread, as explained &lt;a href="http://blogs.msdn.com/pfxteam/archive/2009/05/28/9648672.aspx"&gt;here&lt;/a&gt;. This leads to poor partitioning since files are of different length, and require different amounts of processing and simply allocating equal number of files to each partition need not result in a good distribution.&lt;/p&gt;  &lt;p&gt;A better parallelization can be achieved by replacing the call to Directory.GetFiles by Directory.EnumerateFiles. This returns an enumerator, and the file enumeration can now proceed in parallel with processing of other files. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_16.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_7.png" width="596" height="80" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 8: Alternative file enumeration strategy for PLINQ based Scan. &lt;/p&gt;  &lt;p&gt;Figure 9 shows the result of profiling the resulting version in Concurrency Visualizer, and the region demarcated by scenario marker is selected. In this version, the execution time is ~2.4 seconds which is a 2.9x speedup over the initial sequential version.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_18.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_8.png" width="591" height="153" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 9: Threads view for parallel Scan version 2.&lt;/p&gt;  &lt;p&gt;Figure 10 shows the CPU utilization view for this version of scan. Largely, the performance is limited by other processes, or the system doing file system operations on behalf of this application. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_20.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_9.png" width="561" height="308" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 10: CPU utilization view for parallel Scan version 2.&lt;/p&gt;  &lt;p&gt;However, there are a few sequential regions that limit even further performance gains. Going back to the threads view, there is non-trivial amounts of blocking. Clicking on such regions gives the detailed blocking stack, as well as what unblocked it. Figure 11 shows the blocking stack for one such region, where three of the worker threads are blocked waiting for the fourth thread. Examining the stack provides some hints into what causes this blocking. The blocking arises due to the chunk partitioning strategy in PLINQ which starts out with a small chunk size, and attempts to grow the chunk size based on application behavior. This particular region was one where the chunk size was increased. Due to this, one thread was enumerating the files and the remaining worker threads were waiting on a lock to be allocated their chunks. This seems to be a one-time thing though, subsequently PLINQ adapted well to the application. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_22.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_10.png" width="639" height="251" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 11: Details of blocking stack for one region in parallel scan version 2.&lt;/p&gt;  &lt;p&gt;Figure 12 shows the report summarizing reasons for blocking during this entire period, and file enumeration for chunk partitioning accounts for 0.47 out of the 1.1 second blocked time in the scan period. The remainder of blocked time was spent mainly in garbage collection, something seen by further expanding the report. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_24.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_11.png" width="648" height="305" /&gt;&lt;/a&gt;    &lt;br /&gt;At this point, one could spend further time trying to write a custom PLINQ partitioning scheme to reduce the blocking time from chunk partitioning, as well as trying to reduce garbage collection time by selecting a server garbage collector or by using a memory profiler to weed out memory hogs. But already, a 2.9x improvement in performance is quite significant for pretty minimal set of changes to the application code. While changes to code were minimal in this case, Concurrency Visualizer was an important tool in this process to help identify the right set of changes needed and to identify bottlenecks. &lt;/p&gt;  &lt;p&gt;Further links:    &lt;br /&gt;LINQ:     &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx"&gt;http://msdn.microsoft.com/en-us/netframework/aa904594.aspx&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/hi-in/library/bb308961%28en-us%29.aspx"&gt;http://msdn.microsoft.com/hi-in/library/bb308961%28en-us%29.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Parallel Computing    &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/concurrency/default.aspx"&gt;http://msdn.microsoft.com/en-us/concurrency/default.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Parallel Programming in .NET Framework    &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd460693%28VS.100%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd460693%28VS.100%29.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Parallel LINQ    &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd460688%28VS.100%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd460688%28VS.100%29.aspx&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/pfxteam/"&gt;http://blogs.msdn.com/pfxteam/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Concurrency Visualizer    &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd537632%28VS.100%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd537632%28VS.100%29.aspx&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/visualizeparallel/"&gt;http://blogs.msdn.com/visualizeparallel/&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-3449180208795460127?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/YaZHAExm1a4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/3449180208795460127?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/3449180208795460127?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/YaZHAExm1a4/tuning-parallel-linq-file-search_10.html" title="Tuning a Parallel LINQ File Search Application" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/02/tuning-parallel-linq-file-search_10.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQHw4cCp7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-888540278634035554</id><published>2010-02-10T09:03:00.000-08:00</published><updated>2011-04-15T21:10:31.238-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.238-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Concurrency Visualizer" /><category scheme="http://www.blogger.com/atom/ns#" term="Parallel Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="LINQ" /><category scheme="http://www.blogger.com/atom/ns#" term="Parallel Computing" /><title>Tuning a Parallel LINQ File Search Application</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EQ3xLvdNb9Ccf_RBljEWTYDErIk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EQ3xLvdNb9Ccf_RBljEWTYDErIk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EQ3xLvdNb9Ccf_RBljEWTYDErIk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EQ3xLvdNb9Ccf_RBljEWTYDErIk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This post explores the performance issues that arise when using PLINQ to parallelize queries, and illustrates how the &lt;a href="http://msdn.microsoft.com/en-us/library/dd537632(VS.100).aspx"&gt;Concurrency Visualizer&lt;/a&gt; in Visual Studio 2010 can be a valuable tool in identifying performance bottlenecks and making efficient and profitable parallelization choices. The subject of this entry is a toy application that scans a set of files for a user-specified pattern and performs some processing every time it finds an occurrence of the pattern. The processing in this case is a simple count of the number of matches. In spite of its small size, the application provides insight into several issues that arise in parallelization using PLINQ.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_2.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb.png" width="551" height="474" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Figure 1: Sequential version of the scan algorithm. The LINQ query is highlighted.&lt;/p&gt;  &lt;p&gt;The starting point is a sequential version of the search algorithm expressed using LINQ shown in figure 1. Arguments to the function specify the pattern to be searched, as well as the files that are to be searched from a starting path and a pattern of searchable files. The code queries all lines in all applicable files for the pattern specified. A Stopwatch is used to measure the time consumed in this region. Also note the use of a “scenario marker&amp;quot; to identify and demarcate the interesting search region in the Concurrency Visualizer. The use of scenario marker is explained in detail in a &lt;a href="http://blogs.msdn.com/hshafi/archive/2009/11/13/concurrency-visualizer-linking-visualizations-to-application-phases.aspx"&gt;previous blog entry&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;This application is profiled in Visual Studio 2010 Concurrency Visualizer. Since the topic of this entry is to understand the parallelization of CPU-intensive LINQ fragments, the application makes three successive calls to Scan function with the same arguments so that virtual memory and page files are warmed up. This entry focuses on the third call to the Scan function. Improving performance bottlenecks posed by the blocking that arises due to disk reads/writes is a separate topic and is not the focus of this entry. The application is profiled in Concurrency Visualizer when scanning ~5000 files, each containing at most a few thousand lines of text, for a reasonably complicated regular expression.&amp;#160; Scenario marker &amp;quot;GrepMarker&amp;quot; demarcates the region of interest. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_4.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_1.png" width="558" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Figure 2: Threads view of the sequential scan region. Irrelevant threads are hidden using the &amp;quot;hide threads&amp;quot; functionality of Concurrency Visualizer. A scenario marker helps zoom in on the important region.&lt;/p&gt;  &lt;p&gt;Figure 2 shows the &amp;quot;threads view&amp;quot; after zooming in on GrepMarker region and selecting the marker. As shown in the figure, the region takes ~6.9 seconds and is executing (green) most of this time. Figure 3 shows the CPU utilization view of the same Scan region. As expected, the application fails to use up more than one CPU at any stage, and is compute-bound, resulting in almost a 100% CPU utilization the entire time. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_6.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_2.png" width="551" height="337" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 3: CPU utilization view of the scan region. The application is CPU-bound and might benefit from parallelism to take advantage of available cores. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_8.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_3.png" width="563" height="258" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 4: Execution report of the scan region.&lt;/p&gt;  &lt;p&gt;Figure 4 shows the execution report for the scan segment. This shows that almost 75% of the compute cycles are spent in the Regex.Match function, which does pattern matching. The remaining time is spent in reading files, listing directories, in garbage collection, etc. The report shows that there is much potential for improving performance through parallelism. The key is that while the processing on each file is hard to parallelize (it is most natural to read and process lines within a file sequentially), different files can be searched in parallel. Figure 5 shows how to achieve this using PLINQ, by adding a &amp;quot;.AsParallel&amp;quot; directive to the query so that each file is processed in parallel. PLINQ hides away the management required to create threads, partition the work between threads, and collecting the results. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_10.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_4.png" width="562" height="74" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 5: Converting LINQ to PLINQ for parallel performance by adding a .AsParallel directive at the end. &lt;/p&gt;  &lt;p&gt;Figure 6 shows the threads view when this parallel version of scan is profiled on the same machine, which is a 4-core system. PLINQ allocates the work to four worker threads, while the main thread processes results as and when they become available. This first attempt at parallelism reduces the time from 6.9 seconds initially to 3.7 seconds, a 1.8x speedup. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_12.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_5.png" width="555" height="181" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 6: Threads view of parallel Scan. The outer marker is the “GrepMarker” scenario marker, while the marker nested inside it identifies the region executing PLINQ code.&lt;/p&gt;  &lt;p&gt;The figure also gives insight into why this version did not yield even more speedup. A major bottleneck is the initial sequential portion of the query, which is spent executing Directory.GetFiles, readily identified by examining stacks and execution report for this segment. Another major reason is the load imbalance between the four worker threads, where worker thread 10532 finishes the earliest and thread 9664 finishes the last, delaying completion of the query for almost a second. This is further confirmed by examining the CPU execution view as shown in figure 7. The view clearly illustrates the sequential bottleneck regions that limit gains from parallel performance. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_14.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_6.png" width="554" height="334" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 7: CPU execution view of parallel Scan. Sequential bottleneck regions are circled out.&lt;/p&gt;  &lt;p&gt;The initial sequential execution is due to the fact that the call to Directory.GetFi&lt;br/&gt;les needs to get the names of all files before it returns an array containing those names. In the sequential version, this operation took only 7.1% of the execution time, but following Almdahl's law, it becomes a limiter to parallel performance. The second sequential bottleneck (circled in the latter part of the region) is due to load-imbalance between the threads executing the query. The load-imbalance problem arises because PLINQ performs range partitioning on the array, assigning equal number of files to each thread, as explained &lt;a href="http://blogs.msdn.com/pfxteam/archive/2009/05/28/9648672.aspx"&gt;here&lt;/a&gt;. This leads to poor partitioning since files are of different length, and require different amounts of processing and simply allocating equal number of files to each partition need not result in a good distribution.&lt;/p&gt;  &lt;p&gt;A better parallelization can be achieved by replacing the call to Directory.GetFiles by Directory.EnumerateFiles. This returns an enumerator, and the file enumeration can now proceed in parallel with processing of other files. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_16.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_7.png" width="596" height="80" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 8: Alternative file enumeration strategy for PLINQ based Scan. &lt;/p&gt;  &lt;p&gt;Figure 9 shows the result of profiling the resulting version in Concurrency Visualizer, and the region demarcated by scenario marker is selected. In this version, the execution time is ~2.4 seconds which is a 2.9x speedup over the initial sequential version.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_18.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_8.png" width="591" height="153" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 9: Threads view for parallel Scan version 2.&lt;/p&gt;  &lt;p&gt;Figure 10 shows the CPU utilization view for this version of scan. Largely, the performance is limited by other processes, or the system doing file system operations on behalf of this application. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_20.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_9.png" width="561" height="308" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 10: CPU utilization view for parallel Scan version 2.&lt;/p&gt;  &lt;p&gt;However, there are a few sequential regions that limit even further performance gains. Going back to the threads view, there is non-trivial amounts of blocking. Clicking on such regions gives the detailed blocking stack, as well as what unblocked it. Figure 11 shows the blocking stack for one such region, where three of the worker threads are blocked waiting for the fourth thread. Examining the stack provides some hints into what causes this blocking. The blocking arises due to the chunk partitioning strategy in PLINQ which starts out with a small chunk size, and attempts to grow the chunk size based on application behavior. This particular region was one where the chunk size was increased. Due to this, one thread was enumerating the files and the remaining worker threads were waiting on a lock to be allocated their chunks. This seems to be a one-time thing though, subsequently PLINQ adapted well to the application. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_22.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_10.png" width="639" height="251" /&gt;&lt;/a&gt;    &lt;br /&gt;Figure 11: Details of blocking stack for one region in parallel scan version 2.&lt;/p&gt;  &lt;p&gt;Figure 12 shows the report summarizing reasons for blocking during this entire period, and file enumeration for chunk partitioning accounts for 0.47 out of the 1.1 second blocked time in the scan period. The remainder of blocked time was spent mainly in garbage collection, something seen by further expanding the report. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_24.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/TuningaParallelLINQFileSearchApplication_A359/image_thumb_11.png" width="648" height="305" /&gt;&lt;/a&gt;    &lt;br /&gt;At this point, one could spend further time trying to write a custom PLINQ partitioning scheme to reduce the blocking time from chunk partitioning, as well as trying to reduce garbage collection time by selecting a server garbage collector or by using a memory profiler to weed out memory hogs. But already, a 2.9x improvement in performance is quite significant for pretty minimal set of changes to the application code. While changes to code were minimal in this case, Concurrency Visualizer was an important tool in this process to help identify the right set of changes needed and to identify bottlenecks. &lt;/p&gt;  &lt;p&gt;Further links:    &lt;br /&gt;LINQ:     &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx"&gt;http://msdn.microsoft.com/en-us/netframework/aa904594.aspx&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/hi-in/library/bb308961%28en-us%29.aspx"&gt;http://msdn.microsoft.com/hi-in/library/bb308961%28en-us%29.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Parallel Computing    &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/concurrency/default.aspx"&gt;http://msdn.microsoft.com/en-us/concurrency/default.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Parallel Programming in .NET Framework    &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd460693%28VS.100%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd460693%28VS.100%29.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Parallel LINQ    &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd460688%28VS.100%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd460688%28VS.100%29.aspx&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/pfxteam/"&gt;http://blogs.msdn.com/pfxteam/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Concurrency Visualizer    &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd537632%28VS.100%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd537632%28VS.100%29.aspx&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/visualizeparallel/"&gt;http://blogs.msdn.com/visualizeparallel/&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-888540278634035554?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/MxiwXBJ46YE" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/888540278634035554?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/888540278634035554?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/MxiwXBJ46YE/tuning-parallel-linq-file-search.html" title="Tuning a Parallel LINQ File Search Application" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/02/tuning-parallel-linq-file-search.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQHw_eSp7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-8449009938154645088</id><published>2010-02-10T09:01:00.001-08:00</published><updated>2011-04-15T21:10:31.241-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.241-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Concurrency Visualizer" /><category scheme="http://www.blogger.com/atom/ns#" term="Parallel Programming" /><title>Using the Concurrency Visualizer to Analyze MPI Communication Overheads</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YFvvPQLpqAyXjROQMCuQiuiYlOo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YFvvPQLpqAyXjROQMCuQiuiYlOo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YFvvPQLpqAyXjROQMCuQiuiYlOo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YFvvPQLpqAyXjROQMCuQiuiYlOo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The Message Passing Interface (MPI) is a popular API for developing message-passing based parallel applications on clusters.&amp;#160; Microsoft has a Windows HPC Server product that includes an implementation of MPI, among other things (visit &lt;a href="http://www.microsoft.com/hpc)"&gt;http://www.microsoft.com/hpc)&lt;/a&gt;.&amp;#160; In this post, I’d like to demonstrate how the Visual Studio Concurrency Visualizer can be used to efficiently identify MPI communication overheads on the Windows HPC Server platform.&amp;#160; Before I start, I’d like to acknowledge the help of some colleagues of mine, Jeff Baxter, Mayank Agarwal, Matthew Jacobs, and Paulo Janotti, who helped me prepare the material for this post. &lt;/p&gt;  &lt;p&gt;One of the difficulties in analyzing MPI overheads using the Concurrency Visualizer is that the runtime system may use polling to reduce communication latency on some network platforms that support it. This hides what are logically blocking operations from the tool, making it difficult for the Threads view to illustrate exactly how often threads block waiting for messages, barriers, or reduction operations and where those events take place in the application code.&amp;#160; Instead of showing these as blocking events, they will appear to be green execution segments in the tool.&amp;#160; Although the Execution profile report will usually show these costs, they can be difficult to pinpoint as they may account for a small fraction of total samples.&amp;#160; Even on network implementations where polling is not used (e.g., pure Gigabit Ethernet), blocking on MPI network communication might appear as blocking on synchronization or some other category.&lt;/p&gt;  &lt;p&gt;In order to make MPI communication analysis easier on developers, we’ve included special support in the Concurrency Visualizer to show MPI delays in the I/O category.&amp;#160;&amp;#160; Here are the steps necessary to accomplish this:&lt;/p&gt;  &lt;p&gt;1.&amp;#160;&amp;#160;&amp;#160; Install the command-line profiling tools on one of your cluster compute nodes. This requires running the installer from the \Standalone Profiler\x64\vs_profiler.exe on your Visual Studio Premium or Ultimate DVD (or the ISO image for Beta 2).&amp;#160; You also need to install .NET 4. &lt;/p&gt;  &lt;p&gt;2.&amp;#160;&amp;#160;&amp;#160;&amp;#160; In order to enable the Concurrency Visualizer MPI functionality, you need to disable polling in the MPI runtime.&amp;#160; This can be accomplished by supplying a special environment setting when launching your MPI application, as shown in the following command: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;job submit /numcores:8 mpiexec –env MPICH_PROGRESS_SPIN_LIMIT 1 …executable_path..&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Note that setting the MPICH_PROGRESS_SPIN_LIMIT environment variable is the special sauce that you’ll need to address the spinning vs. blocking issue described above. &lt;/p&gt;  &lt;p&gt;3.&amp;#160;&amp;#160;&amp;#160; When you’re ready to profile your application, follow the instructions for the attach scenario using the command-line tools described in my blog &lt;a href="http://blogs.msdn.com/hshafi/archive/2009/12/29/concurrency-visualizer-avoiding-interference-during-profile-collection.aspx"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;4.&amp;#160;&amp;#160;&amp;#160; Copy the resulting .vsp and .ctl files to the machine that has Visual Studio 2010 Premium or Ultimate installed and open the .vsp file.&amp;#160; Make sure that you have an appropriate symbol path that includes symbols for msmpi.dll (the Microsoft public symbol server should be sufficient). &lt;/p&gt;  &lt;p&gt;To illustrate how an MPI profile looks like in the Concurrency Visualizer, let’s take a look at a simple Jacobi implementation with nearest neighbor communication at partition boundaries: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/UsingtheConcurrencyVisualizertoAnalyzeMP_8B45/image_2.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/UsingtheConcurrencyVisualizertoAnalyzeMP_8B45/image_thumb.png" width="549" height="313" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the above CPU Utilization view, you’ll notice that the MPI process, which is supposed to consume 100% of a single core on average is only consuming about ~70-80% of a core.&amp;#160; That’s usually an indication of either synchronization or I/O.&amp;#160; In this case, since the MPI application is single threaded, I/O must be the culprit.&amp;#160; Now here’s what the Threads view shows when we examine this run: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/UsingtheConcurrencyVisualizertoAnalyzeMP_8B45/image_4.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/UsingtheConcurrencyVisualizertoAnalyzeMP_8B45/image_thumb_1.png" width="563" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We now see some purple (I/O delays) mixed in with the green on the timeline that correspond to delays waiting on MPI messages.&amp;#160; The legend also shows that 20% of the time is spent blocking on I/O, which makes sense based on what we saw in the CPU Utilization view.&amp;#160; You can also see in the I/O report that all blocking MPI calls are clearly shown and the call stacks are collated and ordered to show you the most significant sources of delay (in this simple example, there’s only a single stack with an MPI_Sendrecv).&amp;#160; As usual, you can jump straight from the reports to the source code in order to tune your application.&amp;#160; If it wasn’t for the custom MPI experience in the Concurrency Visualizer, you might have observed various categories of blocking delays depending on the underlying kernel mechanisms used, instead of the MPI calls that are more intuitive from a programmer’s perspective.&amp;#160; &lt;/p&gt;  &lt;p&gt;You should be aware that changing from polling to blocking introduces some latency, so there’s a perturbation in execution, but when your application suffers from significant messaging overheads, it is sometimes an acceptable cost in return for better diagnostic feedback.&amp;#160; &lt;/p&gt;  &lt;p&gt;I hope that you’ll find this useful.&amp;#160; Now go have some fun! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-8449009938154645088?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/GFYayTFikVY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/8449009938154645088?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/8449009938154645088?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/GFYayTFikVY/using-concurrency-visualizer-to-analyze_10.html" title="Using the Concurrency Visualizer to Analyze MPI Communication Overheads" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/02/using-concurrency-visualizer-to-analyze_10.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQHw_eyp7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-8701940576906508098</id><published>2010-02-10T09:01:00.000-08:00</published><updated>2011-04-15T21:10:31.243-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.243-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Concurrency Visualizer" /><category scheme="http://www.blogger.com/atom/ns#" term="Parallel Programming" /><title>Using the Concurrency Visualizer to Analyze MPI Communication Overheads</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ebimZJtsmTCet2mwGo_zcrPx_d8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ebimZJtsmTCet2mwGo_zcrPx_d8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ebimZJtsmTCet2mwGo_zcrPx_d8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ebimZJtsmTCet2mwGo_zcrPx_d8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The Message Passing Interface (MPI) is a popular API for developing message-passing based parallel applications on clusters.&amp;#160; Microsoft has a Windows HPC Server product that includes an implementation of MPI, among other things (visit &lt;a href="http://www.microsoft.com/hpc)"&gt;http://www.microsoft.com/hpc)&lt;/a&gt;.&amp;#160; In this post, I’d like to demonstrate how the Visual Studio Concurrency Visualizer can be used to efficiently identify MPI communication overheads on the Windows HPC Server platform.&amp;#160; Before I start, I’d like to acknowledge the help of some colleagues of mine, Jeff Baxter, Mayank Agarwal, Matthew Jacobs, and Paulo Janotti, who helped me prepare the material for this post. &lt;/p&gt;  &lt;p&gt;One of the difficulties in analyzing MPI overheads using the Concurrency Visualizer is that the runtime system may use polling to reduce communication latency on some network platforms that support it. This hides what are logically blocking operations from the tool, making it difficult for the Threads view to illustrate exactly how often threads block waiting for messages, barriers, or reduction operations and where those events take place in the application code.&amp;#160; Instead of showing these as blocking events, they will appear to be green execution segments in the tool.&amp;#160; Although the Execution profile report will usually show these costs, they can be difficult to pinpoint as they may account for a small fraction of total samples.&amp;#160; Even on network implementations where polling is not used (e.g., pure Gigabit Ethernet), blocking on MPI network communication might appear as blocking on synchronization or some other category.&lt;/p&gt;  &lt;p&gt;In order to make MPI communication analysis easier on developers, we’ve included special support in the Concurrency Visualizer to show MPI delays in the I/O category.&amp;#160;&amp;#160; Here are the steps necessary to accomplish this:&lt;/p&gt;  &lt;p&gt;1.&amp;#160;&amp;#160;&amp;#160; Install the command-line profiling tools on one of your cluster compute nodes. This requires running the installer from the \Standalone Profiler\x64\vs_profiler.exe on your Visual Studio Premium or Ultimate DVD (or the ISO image for Beta 2).&amp;#160; You also need to install .NET 4. &lt;/p&gt;  &lt;p&gt;2.&amp;#160;&amp;#160;&amp;#160;&amp;#160; In order to enable the Concurrency Visualizer MPI functionality, you need to disable polling in the MPI runtime.&amp;#160; This can be accomplished by supplying a special environment setting when launching your MPI application, as shown in the following command: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;job submit /numcores:8 mpiexec –env MPICH_PROGRESS_SPIN_LIMIT 1 …executable_path..&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Note that setting the MPICH_PROGRESS_SPIN_LIMIT environment variable is the special sauce that you’ll need to address the spinning vs. blocking issue described above. &lt;/p&gt;  &lt;p&gt;3.&amp;#160;&amp;#160;&amp;#160; When you’re ready to profile your application, follow the instructions for the attach scenario using the command-line tools described in my blog &lt;a href="http://blogs.msdn.com/hshafi/archive/2009/12/29/concurrency-visualizer-avoiding-interference-during-profile-collection.aspx"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;4.&amp;#160;&amp;#160;&amp;#160; Copy the resulting .vsp and .ctl files to the machine that has Visual Studio 2010 Premium or Ultimate installed and open the .vsp file.&amp;#160; Make sure that you have an appropriate symbol path that includes symbols for msmpi.dll (the Microsoft public symbol server should be sufficient). &lt;/p&gt;  &lt;p&gt;To illustrate how an MPI profile looks like in the Concurrency Visualizer, let’s take a look at a simple Jacobi implementation with nearest neighbor communication at partition boundaries: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/UsingtheConcurrencyVisualizertoAnalyzeMP_8B45/image_2.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/UsingtheConcurrencyVisualizertoAnalyzeMP_8B45/image_thumb.png" width="549" height="313" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the above CPU Utilization view, you’ll notice that the MPI process, which is supposed to consume 100% of a single core on average is only consuming about ~70-80% of a core.&amp;#160; That’s usually an indication of either synchronization or I/O.&amp;#160; In this case, since the MPI application is single threaded, I/O must be the culprit.&amp;#160; Now here’s what the Threads view shows when we examine this run: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/UsingtheConcurrencyVisualizertoAnalyzeMP_8B45/image_4.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/visualizeparallel/WindowsLiveWriter/UsingtheConcurrencyVisualizertoAnalyzeMP_8B45/image_thumb_1.png" width="563" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We now see some purple (I/O delays) mixed in with the green on the timeline that correspond to delays waiting on MPI messages.&amp;#160; The legend also shows that 20% of the time is spent blocking on I/O, which makes sense based on what we saw in the CPU Utilization view.&amp;#160; You can also see in the I/O report that all blocking MPI calls are clearly shown and the call stacks are collated and ordered to show you the most significant sources of delay (in this simple example, there’s only a single stack with an MPI_Sendrecv).&amp;#160; As usual, you can jump straight from the reports to the source code in order to tune your application.&amp;#160; If it wasn’t for the custom MPI experience in the Concurrency Visualizer, you might have observed various categories of blocking delays depending on the underlying kernel mechanisms used, instead of the MPI calls that are more intuitive from a programmer’s perspective.&amp;#160; &lt;/p&gt;  &lt;p&gt;You should be aware that changing from polling to blocking introduces some latency, so there’s a perturbation in execution, but when your application suffers from significant messaging overheads, it is sometimes an acceptable cost in return for better diagnostic feedback.&amp;#160; &lt;/p&gt;  &lt;p&gt;I hope that you’ll find this useful.&amp;#160; Now go have some fun! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-8701940576906508098?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/Y2kCxHIGGgo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/8701940576906508098?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/8701940576906508098?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/Y2kCxHIGGgo/using-concurrency-visualizer-to-analyze.html" title="Using the Concurrency Visualizer to Analyze MPI Communication Overheads" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/02/using-concurrency-visualizer-to-analyze.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQHw_fip7ImA9WhZRGU8.&quot;"><id>tag:blogger.com,1999:blog-7060643381673354494.post-7017780200367804422</id><published>2010-02-10T08:46:00.000-08:00</published><updated>2011-04-15T21:10:31.246-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-15T21:10:31.246-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="TPL" /><category scheme="http://www.blogger.com/atom/ns#" term=".Net 4" /><category scheme="http://www.blogger.com/atom/ns#" term="Parallel Programming" /><title>Maintaining a Consistent Application State with TPL</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dzKB4DZxVvGQ6Pf4iOepc4XwHj0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dzKB4DZxVvGQ6Pf4iOepc4XwHj0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dzKB4DZxVvGQ6Pf4iOepc4XwHj0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dzKB4DZxVvGQ6Pf4iOepc4XwHj0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The aim of this post is to help developers writing applications in which operations may need to be performed and then later undone due to a subsequent failure. It shows a pattern for how to maintain such a consistent application state by utilizing functionality from the Task Parallel Library (TPL) in the .NET Framework 4. &lt;/p&gt;  &lt;p&gt;For the purposes of this blog post, a program/routine is a state machine where each state is equally valid and important and should be handled correctly regardless of whether it belongs to a happy path or not. Specifically, a step that rolls back an incomplete state transition is equally important as a step that makes a forward state transition. A lot could be written about the advantages and disadvantages of exceptions vs. error codes, and such a discussion is not the goal of this post: for the purpose of this article, it is only worth mentioning that throwing and catching exceptions is focused on the happy path (it keeps the code clean and easy to comprehend), while returning and checking error codes is focused on detecting the places of the code (program states) where deviations from the happy path may occur. &lt;/p&gt;  &lt;p&gt;In general, a routine that consists of &lt;em&gt;n&lt;/em&gt; atomic forward steps, where each forward step may fail and then needs to be undone, could be modeled as the following state machine: &lt;/p&gt;  &lt;p&gt;&lt;img alt="" align="left" src="http://blogs.msdn.com/blogfiles/pfxteam/020910_2013_Maintaining1.png" /&gt;&lt;/p&gt;  &lt;p&gt;Assuming a step is &lt;em&gt;atomic&lt;/em&gt; means we don't have to undo that particular step if it fails. That is why the undo sequences in the diagram start with the last successful step. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: It is also assumed that undoing may not fail. If failures are possible to occur during rollback, then you should strongly consider using a real transactional resource manager like a database server. &lt;/p&gt;  &lt;p&gt;Now that we've stated the problem, what is the best way to approach it? Obviously, there are solutions through either error checking or through exception handling, but both of those come at the expense of convoluting the code. Notice that the number of state transition paths is about three times the number of forward steps. Ideally, we are looking for a solution that has a clean happy path as well as clean undo paths without any &lt;em&gt;if&lt;/em&gt; statements or separate &lt;em&gt;Exception&lt;/em&gt; types for each forward step. In other words, we are looking for a way to describe a program as a state machine. &lt;/p&gt;  &lt;p&gt;That's exactly what the TPL does through tasks (as states) and continuations (as state transitions). &lt;/p&gt;  &lt;p&gt;Let's take a concrete application as an example and write some real code. Let's say we have a system that manages the process of making a sandwich. In a terminal state our resources, bread and ham, are in the fridge. (For the sake of simplicity, we produce one sandwich at a time.) First, we take a slice of bread out of the fridge. Second, we take a slice of ham out of the fridge. Third, we assemble the bread and the ham into a sandwich. If an operation fails, we have to return whatever ingredients are currently on the line back to the fridge so they don't rot: &lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://blogs.msdn.com/blogfiles/pfxteam/020910_2013_Maintaining2.png" /&gt;&lt;/p&gt;  &lt;p&gt;And here is the code of our routine: &lt;/p&gt;  &lt;p&gt;// HAPPY PATH&lt;/p&gt;  &lt;p&gt;Task retrieveBread = Task.Factory.StartNew(RetrieveBreadFromFridge);&lt;/p&gt;  &lt;p&gt;Task retrieveHam = retrieveBread.ContinueWith(_ =&amp;gt; RetrieveHamFromFridge(), &lt;/p&gt;  &lt;p&gt;TaskContinuationOptions.OnlyOnRanToCompletion);&lt;/p&gt;  &lt;p&gt;Task assembleSandwich = retrieveHam.ContinueWith(_ =&amp;gt; AssembleSandwich(), &lt;/p&gt;  &lt;p&gt;TaskContinuationOptions.OnlyOnRanToCompletion);&lt;/p&gt;  &lt;p&gt;// RESET STATE&lt;/p&gt;  &lt;p&gt;TaskCompletionSource&amp;lt;bool&amp;gt; reset = new TaskCompletionSource&amp;lt;bool&amp;gt;();&lt;/p&gt;  &lt;p&gt;assembleSandwich.ContinueWith(_ =&amp;gt; reset.SetCanceled(),&lt;/p&gt;  &lt;p&gt;TaskContinuationOptions.OnlyOnRanToCompletion);&lt;/p&gt;  &lt;p&gt;// UNDO PATH&lt;/p&gt;  &lt;p&gt;Task returnBread = new Task(ReturnBreadToFridge);&lt;/p&gt;  &lt;p&gt;returnBread.ContinueWith(_ =&amp;gt; reset.SetResult(true),&lt;/p&gt;  &lt;p&gt;TaskContinuationOptions.OnlyOnRanToCompletion);&lt;/p&gt;  &lt;p&gt;Task returnHam = new Task(ReturnHamToFridge);&lt;/p&gt;  &lt;p&gt;returnHam.ContinueWith(_ =&amp;gt; returnBread.Start(),&lt;/p&gt;  &lt;p&gt;TaskContinuationOptions.OnlyOnRanToCompletion);&lt;/p&gt;  &lt;p&gt;// HAPPY PATH -&amp;gt; UNDO PATH&lt;/p&gt;  &lt;p&gt;// On a failure in bread retrieval - signal &amp;quot;reset&amp;quot;.&lt;/p&gt;  &lt;p&gt;retrieveBread.ContinueWith(_ =&amp;gt; reset.SetResult(true),&lt;/p&gt;  &lt;p&gt;TaskContinuationOptions.OnlyOnFaulted);&lt;/p&gt;  &lt;p&gt;// On a failure in ham retrieval - return bread&lt;/p&gt;  &lt;p&gt;retrieveHam.ContinueWith(_ =&amp;gt; returnBread.Start(), &lt;/p&gt;  &lt;p&gt;TaskContinuationOptions.OnlyOnFaulted);&lt;/p&gt;  &lt;p&gt;// On a failure in sandwich assembly- return ham and bread &lt;/p&gt;  &lt;p&gt;assembleSandwich.ContinueWith(_ =&amp;gt; returnHam.Start(),&lt;/p&gt;  &lt;p&gt;TaskContinuationOptions.OnlyOnFaulted);&lt;/p&gt;  &lt;p&gt;// WAIT&lt;/p&gt;  &lt;p&gt;// Log the execution of the HAPPY PATH tasks.&lt;/p&gt;  &lt;p&gt;// Additionally, wait on the reset state to get signaled.&lt;/p&gt;  &lt;p&gt;Task[] loggedTasks = new Task[] &lt;/p&gt;  &lt;p&gt;{retrieveBread, retrieveHam, assembleSandwich, reset.Task};&lt;/p&gt;  &lt;p&gt;Task.Factory.ContinueWhenAll(loggedTasks,LogErrors)&lt;/p&gt;  &lt;p&gt;.Wait();&lt;/p&gt;  &lt;p&gt;As you can see, there are no &lt;em&gt;if&lt;/em&gt; statements, nor are there any &lt;em&gt;Exception&lt;/em&gt; types customized to provide information what step failed. &lt;/p&gt;  &lt;p&gt;Finally, I added a logging task that effectively waits for all the state machine tasks to finish, and then traverses the given task array and logs any error messages. (Notice that I still have to wait for that task to finish.) The body of that method is straightforward: &lt;/p&gt;  &lt;p&gt;private void LogErrors(Task[] tasks)&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;Console.WriteLine(&amp;quot;\n\tERRORS:&amp;quot;);&lt;/p&gt;  &lt;p&gt;foreach (Task task in tasks)&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;if (task.IsFaulted)&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;// Use the InnerException since it is wrapped in an AggregateException&lt;/p&gt;  &lt;p&gt;Console.WriteLine(&amp;quot;\t{0}&amp;quot;, task.Exception.InnerException.Message);&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;In conclusion, TPL enables writing state-sensitive applications on the .NET platform without convoluting the application code with many &lt;em&gt;if&lt;/em&gt; statements or customized exception types. While the code is still a little verbose, it closely resembles the state machine's diagram&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7060643381673354494-7017780200367804422?l=www.way2solve.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/way2solve/iaFl/~4/T9XOoNWkjH0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/7017780200367804422?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7060643381673354494/posts/default/7017780200367804422?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/way2solve/iaFl/~3/T9XOoNWkjH0/maintaining-consistent-application.html" title="Maintaining a Consistent Application State with TPL" /><author><name>Contributor</name><uri>http://www.blogger.com/profile/11750755344255973305</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://www.way2solve.com/2010/02/maintaining-consistent-application.html</feedburner:origLink></entry></feed>

