<?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:thr="http://purl.org/syndication/thread/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0ACQn8_eCp7ImA9WhdWGEk.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391</id><updated>2011-09-12T08:36:03.140-07:00</updated><title>Technology | Business | Life | Thoughts | Meta ツ</title><subtitle type="html">All About Everything.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://izlooite.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>KMan</name><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>163</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/blogspot/wZVIK" /><feedburner:info uri="blogspot/wzvik" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C0ACQn8_cSp7ImA9WhdWGEk.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-7469640683651308835</id><published>2011-09-12T08:36:00.001-07:00</published><updated>2011-09-12T08:36:03.149-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-12T08:36:03.149-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Meta" /><title>Phases in life of a “software developer”–Types of developers! Who am i?</title><content type="html">&lt;p&gt;Do you call yourself developer? If so, where exactly do you stand in the following table? Following table peeks into the “professional” life of a software developer&lt;/p&gt; &lt;table border="1" cellspacing="0" cellpadding="0" width="664"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="78"&gt; &lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="71"&gt; &lt;p align="center"&gt;&lt;font color="#ffffff"&gt;Wannabe Developer&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="93"&gt; &lt;p align="center"&gt;&lt;font color="#ffffff"&gt;Developer, as a profession&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="125"&gt; &lt;p align="center"&gt;&lt;font color="#ffffff"&gt;Senior developer&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="107"&gt; &lt;p align="center"&gt;&lt;font color="#ffffff"&gt;Principal developer&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="83"&gt; &lt;p align="center"&gt;&lt;font color="#ffffff"&gt;Architect&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="105"&gt; &lt;p align="center"&gt;&lt;font color="#ffffff"&gt;Chief architect&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="78"&gt; &lt;h4 align="center"&gt;&lt;font style="background-color: #ffff00"&gt;&lt;strong&gt;Question&lt;/strong&gt;&lt;/font&gt;&lt;/h4&gt;&lt;/td&gt; &lt;td valign="top" width="71"&gt; &lt;h4 align="center"&gt;&lt;font style="background-color: #ffff00"&gt;&lt;strong&gt;Level 0&lt;/strong&gt;&lt;/font&gt;&lt;/h4&gt;&lt;/td&gt; &lt;td valign="top" width="93"&gt; &lt;h4 align="center"&gt;&lt;font style="background-color: #ffff00"&gt;&lt;strong&gt;Level 1&lt;/strong&gt;&lt;/font&gt;&lt;/h4&gt;&lt;/td&gt; &lt;td valign="top" width="125"&gt; &lt;h4 align="center"&gt;&lt;font style="background-color: #ffff00"&gt;&lt;strong&gt;Level 2&lt;/strong&gt;&lt;/font&gt;&lt;/h4&gt;&lt;/td&gt; &lt;td valign="top" width="107"&gt; &lt;h4 align="center"&gt;&lt;font style="background-color: #ffff00"&gt;&lt;strong&gt;Level 3&lt;/strong&gt;&lt;/font&gt;&lt;/h4&gt;&lt;/td&gt; &lt;td valign="top" width="83"&gt; &lt;h4 align="center"&gt;&lt;font style="background-color: #ffff00"&gt;&lt;strong&gt;Level 4&lt;/strong&gt;&lt;/font&gt;&lt;/h4&gt;&lt;/td&gt; &lt;td valign="top" width="105"&gt; &lt;h4 align="center"&gt;&lt;font style="background-color: #ffff00"&gt;&lt;strong&gt;Level 5&lt;/strong&gt;&lt;/font&gt;&lt;/h4&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="78"&gt; &lt;p&gt;&lt;font style="background-color: #ffff00"&gt;&lt;strong&gt;Changes?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="71"&gt; &lt;p&gt;Copy pasting code, trying to merge; doesn’t know/care about changes&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="93"&gt; &lt;p&gt;Very resistant to change; spaghetti code.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="125"&gt; &lt;p&gt;Ok to change, but provides no suggestions; tries to follow coding standards.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="107"&gt; &lt;p&gt;Ok to change, provide suggestions, brainstorm;, finds alternate solutions; &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="83"&gt; &lt;p&gt;Accept changes, provide alternate solutions, face mortar board&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="105"&gt; &lt;p&gt;Brings change&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="78"&gt; &lt;p&gt;&lt;strong&gt;&lt;font style="background-color: #ffff00"&gt;Thought process?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="71"&gt; &lt;p&gt;Not available (0:&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="93"&gt; &lt;p&gt;Doesn’t think&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="125"&gt; &lt;p&gt;Thinks about how; &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="107"&gt; &lt;p&gt;Following industry standards and practices.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="83"&gt; &lt;p&gt;Provide feedbacks, comments, corrections&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="105"&gt; &lt;p&gt;Build industry standards&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="78"&gt; &lt;p&gt;&lt;strong&gt;&lt;font style="background-color: #ffff00"&gt;Sticks around&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="71"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="93"&gt; &lt;p&gt;Functional/method level implementation; coding&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="125"&gt; &lt;p&gt;Available libraries, classes, &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="107"&gt; &lt;p&gt;Reusable components&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="83"&gt; &lt;p&gt;Thinking process is more in terms of business strategy; provides solutions; face mortar board, provide alternate solutions, answer any missing questions&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="105"&gt; &lt;p&gt;Mortar board; business, technology&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="78"&gt;&lt;strong&gt;&lt;font style="background-color: #ffff00"&gt;Inclines toward&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="71"&gt;Coder; coding&lt;/td&gt; &lt;td valign="top" width="93"&gt; &lt;p&gt;Classes&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="125"&gt; &lt;p&gt;Modular&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="107"&gt; &lt;p&gt;how; componentized approach&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="83"&gt; &lt;p&gt;what;  &lt;p&gt;enterprise approach&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="105"&gt; &lt;p&gt;why;  &lt;p&gt;business market&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="78"&gt;&lt;strong&gt;&lt;font style="background-color: #ffff00"&gt;Goal&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="71"&gt;To go home&lt;/td&gt; &lt;td valign="top" width="93"&gt;Learning&lt;/td&gt; &lt;td valign="top" width="125"&gt;Advancement, participation, &lt;/td&gt; &lt;td valign="top" width="107"&gt; &lt;p&gt;Think around technology&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="83"&gt; &lt;p&gt;Thinks around scalability, availability, modularity, loose coupling high cohesion, security, etc.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="105"&gt; &lt;p&gt;Thinks around business strategy&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://freshvine.co/content/2011/08/web-designers-vs-developers.png" width="597" height="929"&gt; &lt;p align="center"&gt;&amp;nbsp; &lt;p&gt;High light the first row of the table above, to see exactly where you stand.  &lt;p&gt;Btw, no offense to anyone, these are just thoughts out of small experience that I have.  &lt;p&gt;Enjoy! (0:     &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-7469640683651308835?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/HNKfWZZ0_Vs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/7469640683651308835/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/09/phases-in-life-of-software.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/7469640683651308835?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/7469640683651308835?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/HNKfWZZ0_Vs/phases-in-life-of-software.html" title="Phases in life of a “software developer”–Types of developers! Who am i?" /><author><name>KMan</name><email>noreply@blogger.com</email></author><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/09/phases-in-life-of-software.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cMSH07fCp7ImA9WhdREE4.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-6362894846501567143</id><published>2011-07-30T05:58:00.001-07:00</published><updated>2011-07-30T06:04:49.304-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-30T06:04:49.304-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OK-TO-BOARD" /><category scheme="http://www.blogger.com/atom/ns#" term="Visa" /><category scheme="http://www.blogger.com/atom/ns#" term="HEC" /><category scheme="http://www.blogger.com/atom/ns#" term="Karachi" /><category scheme="http://www.blogger.com/atom/ns#" term="Immigration" /><category scheme="http://www.blogger.com/atom/ns#" term="Process" /><category scheme="http://www.blogger.com/atom/ns#" term="Passport" /><category scheme="http://www.blogger.com/atom/ns#" term="Attestation" /><category scheme="http://www.blogger.com/atom/ns#" term="UAE Consulate Attestation" /><category scheme="http://www.blogger.com/atom/ns#" term="Protectorate" /><category scheme="http://www.blogger.com/atom/ns#" term="Residence" /><category scheme="http://www.blogger.com/atom/ns#" term="Bokhari Travels" /><category scheme="http://www.blogger.com/atom/ns#" term="Help" /><category scheme="http://www.blogger.com/atom/ns#" term="Meta" /><category scheme="http://www.blogger.com/atom/ns#" term="Gulf" /><category scheme="http://www.blogger.com/atom/ns#" term="Dubai" /><title>Are you sure you want to move to gulf? Think again!</title><content type="html">&lt;p&gt;Yep, if you are moving to gulf(Dubai) from Pakistan (Karachi), it(the process) sounds like you are placing an order for a double cheese burger with diet coke!&lt;br&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-HsonkPLmGjs/TjP_oMCPhxI/AAAAAAAAASw/4KUavcBonJ8/s1600-h/image25.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-2WF4HAxhzl4/TjP_pNn2CDI/AAAAAAAAAS0/INTcmmjl5Gc/image_thumb8.png?imgmax=800" width="238" height="306"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&amp;nbsp;&lt;b&gt;What is the process?&lt;/b&gt;&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="bottom" width="53"&gt; &lt;p&gt;&lt;b&gt;&lt;font style="background-color: #ffff00"&gt;S. No.&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="134"&gt; &lt;p&gt;&lt;b&gt;&lt;font style="background-color: #ffff00"&gt;Steps&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="78"&gt; &lt;p&gt;&lt;b&gt;&lt;font style="background-color: #ffff00"&gt;Duration (Days)&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="75"&gt; &lt;p&gt;&lt;b&gt;&lt;font style="background-color: #ffff00"&gt;Fee (PKR)&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="296"&gt; &lt;p&gt;&lt;b&gt;&lt;font style="background-color: #ffff00"&gt;Comment&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="bottom" width="53"&gt; &lt;p align="center"&gt;1&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="134"&gt; &lt;p&gt;Get passport&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="78"&gt; &lt;p align="center"&gt;7&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="75"&gt; &lt;p&gt;4200&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="296"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="bottom" width="53"&gt; &lt;p align="center"&gt;2&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="134"&gt; &lt;p&gt;Get attested degrees&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="78"&gt; &lt;p align="center"&gt;5&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="75"&gt; &lt;p&gt;6700&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="296"&gt; &lt;p&gt;HEC + UAE Consulate (PKR1200 + ~USD45)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="bottom" width="53"&gt; &lt;p align="center"&gt;3&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="134"&gt; &lt;p&gt;Send to employer for visa&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="78"&gt; &lt;p align="center"&gt;1&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="75"&gt; &lt;p&gt;0&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="296"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="bottom" width="53"&gt; &lt;p align="center"&gt;4&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="134"&gt; &lt;p&gt;Receive passport/visa&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="78"&gt; &lt;p align="center"&gt;20&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="75"&gt; &lt;p&gt;0&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="296"&gt; &lt;p&gt;~Keep 3/4 weeks of time; better resign only when you receive your visa&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="bottom" width="53"&gt; &lt;p align="center"&gt;5&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="134"&gt; &lt;p&gt;Get NICOP&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="78"&gt; &lt;p align="center"&gt;7&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="75"&gt; &lt;p&gt;1500&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="296"&gt; &lt;p&gt;USD 25? @PKR86 (PKR 3000 for urgent); besides &lt;a href="http://en.wikipedia.org/wiki/National_ID_card"&gt;NIC&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="bottom" width="53"&gt; &lt;p align="center"&gt;6&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="134"&gt; &lt;p&gt;Obtain ticket with OK-TO-BOARD&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="78"&gt; &lt;p align="center"&gt;2&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="75"&gt; &lt;p&gt;21000&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="296"&gt; &lt;p&gt;Get the ticket agent that is close to your place; they usually charge 6% of the ticket charges&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="bottom" width="53"&gt; &lt;p align="center"&gt;7&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="134"&gt; &lt;p&gt;Get protector stamp&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="78"&gt; &lt;p align="center"&gt;1&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="75"&gt; &lt;p&gt;6700&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="296"&gt; &lt;p&gt;Very cumbersome process if you &lt;a href="http://en.wikipedia.org/wiki/Do_it_yourself"&gt;DIY&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="bottom" width="53"&gt; &lt;p align="center"&gt;8&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="134"&gt; &lt;p&gt;Shop&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="78"&gt; &lt;p align="center"&gt;3&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="75"&gt; &lt;p&gt;25000&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="296"&gt; &lt;p&gt;If you must, must you should&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="bottom" width="53"&gt; &lt;p align="center"&gt;9&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="134"&gt; &lt;p&gt;Prepare to fly&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="78"&gt; &lt;p align="center"&gt;1&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="75"&gt; &lt;p&gt;0&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="296"&gt; &lt;p&gt;Checkout the checklist that, if you may need&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="bottom" width="53"&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="134"&gt; &lt;p&gt;&lt;b&gt;TOTAL&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="78"&gt; &lt;p align="center"&gt;&lt;b&gt;47&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="75"&gt; &lt;p&gt;&lt;b&gt;65100&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="bottom" width="296"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp; &lt;p&gt;&lt;font size="4"&gt;&lt;strong&gt;STEP 1: How to prepare/renew Pakistani passport?&lt;/strong&gt; &lt;/font&gt; &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-nfTyLbSgxFs/TjP_q0rl7BI/AAAAAAAAAS4/nYYxJZdq8QU/s1600-h/image21.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-pbN8BLSWZR0/TjP_r4GftEI/AAAAAAAAAS8/IFzaNuK81lA/image_thumb6.png?imgmax=800" width="244" height="164"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Process:&lt;/strong&gt;  &lt;ol&gt; &lt;li&gt;Day 1: Get bank Challan from the National Bank that is inside Passport office, Saddar (PKR4100 Fee + PKR25 Service Charges = 4125 (as of today) – FastTrack ~5 days)  &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Requires&lt;/strong&gt;:  &lt;ol&gt; &lt;li&gt;Old passport  &lt;li&gt;NIC  &lt;li&gt;NIC of one of your parent&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font style="background-color: #ffff00" color="#4e4e4e"&gt;Note&lt;/font&gt; that, if you are going for a brand new passport, they will ask you for the educational transcripts; so, inquire before you leave your place for passport office&lt;/p&gt;&lt;/blockquote&gt; &lt;ol&gt; &lt;li&gt;Day 2: Submit application (if you have time, and patience, you can continue this on the Day1 – but trust me, you wouldn’t want to afford that if you are with you family)  &lt;li&gt;Day 7: Collect passport (~next week sometime)  &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Requires&lt;/strong&gt;:  &lt;ol&gt; &lt;li&gt;NIC&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="left"&gt;&lt;strong&gt;Location:&lt;/strong&gt;  &lt;p&gt;Passport office, Saddar, Karachi  &lt;p&gt;&lt;strong&gt;References: &lt;/strong&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.dgip.gov.pk/Files/Passport.html"&gt;Directorate General of Immigration &amp;amp; Passports, Ministry of Interior, Government of Pakistan&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&amp;nbsp; &lt;p&gt;&lt;b&gt;&lt;font size="4"&gt;STEP 2: How to get the educational documents (degree/transcripts) attested?&lt;/font&gt;&lt;/b&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-nPawuqT3yBo/TjP_sozTvUI/AAAAAAAAATA/xvtQOzI7_HA/s1600-h/image36.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-vhX_PuaOcho/TjP_vuopDdI/AAAAAAAAATE/6q78uIgOznk/image_thumb13.png?imgmax=800" width="406" height="262"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;b&gt;Process:&lt;/b&gt; &lt;/p&gt; &lt;ol&gt; &lt;li&gt;Day 1: Attestation from &lt;u&gt;HEC&lt;/u&gt; (Use OCS Courier Service, PKR1200/-) ~5 days. Any OCS close to your place.  &lt;ul&gt; &lt;li&gt;&lt;b&gt;Requires:&lt;/b&gt;  &lt;ol&gt; &lt;li&gt;HEC requires Matriculation/Intermediate marksheets, and certificates to be attached as well, besides your University degrees&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Day 6: Attestation from &lt;u&gt;Foreign Ministry&lt;/u&gt; (Submit PKR25/-) ~2 Day process. This is right beside the FTC (Finance and Trade Center), Sharah-e-Faisal road.  &lt;ul&gt; &lt;li&gt;&lt;b&gt;Requires:&lt;/b&gt;  &lt;ol&gt; &lt;li&gt;Degree attested by HEC&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Day 8: Attestation from &lt;u&gt;UAE Embassy&lt;/u&gt; (Use Bokhari Travels, USD40/- per document) ~1 day if you are willing to pay USD60/- for urgent service, otherwise USD40/- ~4 working days.  &lt;ul&gt; &lt;li&gt;&lt;b&gt;Requires:&lt;/b&gt;  &lt;ol&gt; &lt;li&gt;Degrees attested by HEC + Foreign Ministry&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;b&gt;Location:&lt;/b&gt;  &lt;ul&gt; &lt;li&gt;For HEC, use nearest OCS  &lt;li&gt;Foreign Ministry, right beside FTC, Shahrah-e-Faisal  &lt;li&gt;For UAE Consulate, go to Bokhari Travels that is on main Punjab Chowrangi&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;b&gt;References:&lt;/b&gt;  &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.hec.gov.pk/InsideHEC/Divisions/QALI/DegreeAttestationEquivalence/DegreeAttestationServices/Pages/Default.aspx"&gt;Higher Education Commission, Degree Attestation Services&lt;/a&gt;  &lt;li&gt;&lt;a href="http://pak-uae.com/site/?page_id=117"&gt;Possible fee&lt;/a&gt;&lt;u&gt;&lt;/u&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;font size="4"&gt;STEP 3: How to get NICOP (National Identity Card for Overseas Pakistanis)? &lt;/font&gt;&lt;/b&gt; &lt;p&gt;Please don’t ask why, it is necessary, because I don’t have the answer to that; I wonder about the reason of having multiple identifications, NIC, NICOP, Passport, and what not – for a single reason!  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-whN4nz4AXH0/TjP_yOAPpLI/AAAAAAAAATI/hv0Gy2k8ynw/s1600-h/image28.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-PZSjVU5HTEo/TjP_zeIkstI/AAAAAAAAATM/nWFDV_9h3Hc/image_thumb9.png?imgmax=800" width="224" height="244"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;Process:&lt;/b&gt;  &lt;p&gt;Somewhat similar to when filing for an NIC  &lt;ol&gt; &lt;li&gt;Issuance of Token  &lt;ul&gt; &lt;li&gt;&lt;b&gt;Requires:&lt;/b&gt;  &lt;ol&gt; &lt;li&gt;Birth Certificate —OR—  &lt;li&gt;Old NIC —OR—  &lt;li&gt;Matriculation Certificate —OR—  &lt;li&gt;CNICs of immediate relatives —OR—  &lt;li&gt;Passport (&lt;u&gt;mandatory&lt;/u&gt; in case of new)&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Photo capturing  &lt;li&gt;Thumb and Signatures  &lt;li&gt;Data Acquisition by DEO  &lt;li&gt;Form Printing  &lt;li&gt;Attestation &amp;amp; Form Submission&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;b&gt;Location:&lt;/b&gt;  &lt;p&gt;Any NADRA office close to your place  &lt;p&gt;&lt;b&gt;References:&lt;/b&gt;  &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.nadra.gov.pk/index.php?option=com_content&amp;amp;view=article&amp;amp;id=7&amp;amp;Itemid=10"&gt;National Database &amp;amp; Registration Authority (NADRA)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;font size="4"&gt;STEP 4: How to get OK-TO-BOARD stamped on my visa copy?&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;Process:&lt;/b&gt;  &lt;ol&gt; &lt;li&gt;Get ticket  &lt;li&gt;Send your ticket/itinerary details to your &lt;u&gt;employer&lt;/u&gt;, and ask them to apply for the OK-TO-BOARD message — OR—  &lt;ul&gt; &lt;li&gt;&lt;b&gt;Requires:&lt;/b&gt;  &lt;ol&gt; &lt;li&gt;Ticket/itinerary details&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Give you visa/entry permit copy to your &lt;u&gt;ticket agent&lt;/u&gt;, and tell her to provide you with an OK-TO-BOARD stamp.  &lt;ul&gt; &lt;li&gt;&lt;b&gt;Requires:&lt;/b&gt;  &lt;ol&gt; &lt;li&gt;Visa/entry permit copy&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: Get ticket from &lt;a href="http://emirates.ae"&gt;Emirates&lt;/a&gt;. OK-TO-BOARD more streamlined; suggested by a friend. It would look something like following(see hand written OK-TO-BOARD in the highlighted red): &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-H2gkuWHk8rI/TjP_0V5bsuI/AAAAAAAAATQ/DHwdNzxKfiU/s1600-h/OK%252520TO%252520BOARD%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="OK TO BOARD" border="0" alt="OK TO BOARD" src="http://lh5.ggpht.com/-8ptE39ONzbY/TjP_1UG4GfI/AAAAAAAAATU/3cxAYMNOVkE/OK%252520TO%252520BOARD_thumb.jpg?imgmax=800" width="225" height="244"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;References:&lt;/b&gt;  &lt;ul&gt; &lt;li&gt;&lt;a href="http://emirates.ae/"&gt;Emirates Airlines&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.dailytimes.com.pk/default.asp?page=2006\03\31\story_31-3-2006_pg12_1"&gt;OK-TO-BOARD Since when?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;font size="4"&gt;STEP 5: How can I get protectorate stamp on my passport?&lt;/font&gt;&lt;/b&gt;  &lt;p&gt;Who and why in the world would ever want it? &lt;a href="http://www.wikihow.com/Get-Your-Passport-Stamped-from-Protectorate-of-Emigrants-in-Pakistan"&gt;This&lt;/a&gt; process/explanation might soothe your veins.  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-apyllALkdTo/TjP_3KBIC9I/AAAAAAAAATY/_yhAEt0d2Mw/s1600-h/image32.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-5bSthpb6Iqc/TjP_5LV3QtI/AAAAAAAAATc/_i43sxJZmKc/image_thumb11.png?imgmax=800" width="477" height="302"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;Process:&lt;/b&gt;  &lt;ol&gt; &lt;li&gt;Provide documents on the protectorate counter; s/he will give you a bank challan copy to sign it  &lt;ul&gt; &lt;li&gt;· &lt;b&gt;Requires:&lt;/b&gt;  &lt;ol&gt; &lt;li&gt;Passport with visa stamped  &lt;li&gt;NICOP or its receipt  &lt;li&gt;Offer letter  &lt;li&gt;Ticket with OK to board —OR—  &lt;li&gt;Attested offer letter by Ministry of foreign affairs in DUBAI&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt; &lt;blockquote&gt; &lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; You will need OK-TO-BOARD in any case, but you can’t get it stamped prior to departure. &lt;/p&gt;&lt;/blockquote&gt; &lt;ol&gt; &lt;li&gt;Submit challan in National Bank, UBL Bank, and Habib Bank  &lt;li&gt;Get photocopy of those challan on single page – not sure why its important, but it was asked with everyone  &lt;li&gt;Attach the challan recepts with other documents, and arrange if you can, otherwise give it to the photocopy guy; he will do that for you.  &lt;li&gt;Hand it over to the counter  &lt;li&gt;If you are lucky, they will tell you collect after 2 hours; meanwhile you roam around the Shahrah-e-Faisal sidewalks, you can enjoy a newly open &lt;font style="background-color: #ffff00"&gt;Biryani&lt;/font&gt; shop there. ~PKR60/serving;0) &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;b&gt;Catch99&lt;/b&gt;: There is a tiny Photostat shop inside the protectorate office; give all of the documents to him, and he will do the job for you, just for PKR100/- no hassle.  &lt;p&gt;I did it on my own, with the help of the people around, and I did all of it. &lt;u&gt;Except&lt;/u&gt; for the &lt;u&gt;arrangements of the documents in specific order&lt;/u&gt;. I did not know that – and that shop guy was not willing to disclose that to me; under pressure with small amount of time left in that “sarkari (read: government)” office, I decided to let him arrange that for a cost of PKR90/- Money wasn’t the issue, it was just that I wanted to do it myself, because documents were original and I wanted to avoid any last minutes shocks – or – apologies – so to say, that he has lost the documents/etc. Anyway, throw in the money, relax, and enjoy!  &lt;p&gt;&lt;b&gt;Notes&lt;/b&gt;  &lt;ul&gt; &lt;li&gt;NICOP and protector can be done through the same office&lt;b&gt;&lt;/b&gt;  &lt;li&gt;Takes ~1 week to receive the NICOP for urgent service  &lt;li&gt;You can apply for Protectorate based on the receipt of the NICOP&lt;b&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;Location:&lt;/b&gt;  &lt;ul&gt; &lt;li&gt;Protectorate Office is located on the &lt;a href="http://www.panoramio.com/photo/50745212"&gt;street right behind KFC, Nursery, Shahrah-e-Faisal, Karachi&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-Zkux3Mp2Dls/TjP_6gtnKNI/AAAAAAAAATg/F-IjsbKJuPY/s1600-h/image2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-EVtTUTYJWi0/TjP_7mEz-bI/AAAAAAAAATk/iPdjwPMDt5k/image_thumb.png?imgmax=800" width="244" height="174"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-CAl5-0Z093U/TjQBbSZf1HI/AAAAAAAAATo/Cu1eqyt0hfc/s1600-h/Protectorate%252520Office%252520Karachi%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Protectorate Office Karachi" border="0" alt="Protectorate Office Karachi" src="http://lh5.ggpht.com/-Xzhg0nWB39M/TjQBb0vNuMI/AAAAAAAAATs/3CejssLa1PI/Protectorate%252520Office%252520Karachi_thumb%25255B1%25255D.jpg?imgmax=800" width="463" height="427"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;ul&gt; &lt;li&gt;If you live somewhere near North Nazimabad, there is one more office, which I have not verified, which is near Nagan Chorangi behind Salim Center, PTCL Office; a service lane is going inside, after ~200 meters, you will find the office on the left. A friend pointed out.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;b&gt;References: &lt;/b&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.beoe.gov.pk/Emigrants_Registration_Method.asp"&gt;Bureau of Emigration &amp;amp; Overseas Employment&lt;/a&gt;, Government of Pakistan  &lt;li&gt;&lt;a href="http://www.wikihow.com/Get-Your-Passport-Stamped-from-Protectorate-of-Emigrants-in-Pakistan"&gt;WikiHow&lt;/a&gt;, Howto&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/4252428322984442391-6362894846501567143?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/7YYPx_OB-vc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/6362894846501567143/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/07/are-you-sure-you-want-to-move-to-gulf.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/6362894846501567143?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/6362894846501567143?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/7YYPx_OB-vc/are-you-sure-you-want-to-move-to-gulf.html" title="Are you sure you want to move to gulf? Think again!" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-2WF4HAxhzl4/TjP_pNn2CDI/AAAAAAAAAS0/INTcmmjl5Gc/s72-c/image_thumb8.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/07/are-you-sure-you-want-to-move-to-gulf.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8EQX44fyp7ImA9WhZaGUs.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-305829126387104372</id><published>2011-07-06T04:34:00.001-07:00</published><updated>2011-07-06T08:56:40.037-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-06T08:56:40.037-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WebGet" /><category scheme="http://www.blogger.com/atom/ns#" term="DataContract" /><category scheme="http://www.blogger.com/atom/ns#" term=".SLN" /><category scheme="http://www.blogger.com/atom/ns#" term="Concept" /><category scheme="http://www.blogger.com/atom/ns#" term="REST" /><category scheme="http://www.blogger.com/atom/ns#" term="App_Browser" /><category scheme="http://www.blogger.com/atom/ns#" term="Design pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="Unified design" /><category scheme="http://www.blogger.com/atom/ns#" term="JSON" /><category scheme="http://www.blogger.com/atom/ns#" term="Architecture" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="device gateway" /><category scheme="http://www.blogger.com/atom/ns#" term="multiple device" /><category scheme="http://www.blogger.com/atom/ns#" term="WCF" /><title>How to think a unified design for multi device architecture?</title><content type="html">Couple of weeks ago, I responded to &lt;a href="http://stackoverflow.com/questions/6262906/multi-device-architecture"&gt;question of similar sort&lt;/a&gt;, and then I thought I must elaborate on this using actual code snips, that may help anyone looking for similar solution.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Problem statement: &lt;/strong&gt; &lt;br /&gt;
Build an internet based application that should be able to:  &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Process the incoming requests&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Get records available in the data store&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Perform actions on that data&lt;/li&gt;
&lt;/ul&gt;Most importantly, a non functional requirement is that, the request may come from multiple devices, for instance PC, Handheld device, iPhone, Windows Phone, Android, etc. This means, solution should have one core functional module (Unified Functionality); that would serve multiple device ends.&lt;br /&gt;
&lt;br /&gt;
Simple? It is.  &lt;br /&gt;
&lt;br /&gt;
There could be several ways of achieving that; lets discuss couple ways, and then elaborate the implementation.  &lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;SOLUTION 1: Use WCF based RESTful service with App_Browser feature &lt;/strong&gt; &lt;br /&gt;
&lt;br /&gt;
Why? Because it is easy, tidy, and quick.  &lt;br /&gt;
&lt;br /&gt;
What is required to achieve that?  &lt;br /&gt;
&lt;br /&gt;
Mark the web service methods with &lt;span style="font-family: 'Courier New';"&gt;WebGet&lt;/span&gt; attribute, and set the &lt;span style="font-family: 'Courier New';"&gt;ResponseFormat&lt;/span&gt; parameter to &lt;span style="font-family: 'Courier New';"&gt;WebMessageFormat.Json&lt;/span&gt;.  &lt;br /&gt;
&lt;br /&gt;
For instance:  &lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;[OperationContract]&lt;/pre&gt;&lt;pre&gt;[WebGet(UriTemplate = &lt;span class="str"&gt;"/DoSomething?intSomeType={intSomeType}"&lt;/span&gt;, ResponseFormat = WebMessageFormat.Json)]&lt;/pre&gt;&lt;pre class="alt"&gt;Response DoSomething (Int32 intSomeType); &lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
When the service is accessed RESTfully, it will return the data using the &lt;span style="font-family: 'Courier New';"&gt;DataContractJsonSerializer&lt;/span&gt;. So you should JSONize(JSON Serialize) your POCO’s by marking it with the &lt;span style="font-family: 'Courier New';"&gt;[DataContract]&lt;/span&gt; attribute and mark each serializable member as [DataMember].  &lt;br /&gt;
Note that, this assumes that requests will only come from browser based user agent.  &lt;br /&gt;
&lt;br /&gt;
Also, the &lt;a href="http://msdn.microsoft.com/en-us/library/bb412170.aspx"&gt;type hinting&lt;/a&gt; in WCF can add a lot of &lt;em&gt;unnecessary&lt;/em&gt; overhead in the JSON response for large collections. Therefore, if you believe that you &lt;em&gt;might&lt;/em&gt; want multiple types of end-points (SOAP, etc.) at some point in the time, then WCF is the way to go.  &lt;br /&gt;
&lt;img src="http://blog.divebomb.org/wp-content/uploads/2010/12/wcf-post-01-a.png" /&gt; &lt;br /&gt;
&lt;br /&gt;
Easy? See! Let’s go through a demo app code right out of my pilot project.  &lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Step 1&lt;/strong&gt;: Write an interface that defines the basic operations that a mobile service will provide; and then provide an implementation of the interface:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;[ServiceContract(Namespace = &lt;span class="str"&gt;"izlooite.blogspot.services"&lt;/span&gt;)]&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IMobileService&lt;/pre&gt;&lt;pre class="alt"&gt;{&lt;/pre&gt;&lt;pre&gt;[OperationContract]&lt;/pre&gt;&lt;pre class="alt"&gt;[WebGet(UriTemplate = &lt;span class="str"&gt;"/ListBusinesses?intBusinessType={intBusinessType}"&lt;/span&gt;, ResponseFormat = WebMessageFormat.Json)]&lt;/pre&gt;&lt;pre&gt;Response ListBusinesses(Int32 intBusinessType);&lt;/pre&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;  &lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Create WCF web service that implements &lt;span style="color: #2b91af; font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"&gt;IMobileService&lt;/span&gt; interface&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;pre name="code" class="Cpp"&gt;[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class MobileService : IMobileService
    {
        private NameValueCollection _params = null;

        public MobileService()
        {
            _params = null;
            if (HttpContext.Current.Request.HttpMethod == "POST")
            {
                _params = HttpContext.Current.Request.Params;
            }
        }

        public Response ListBusinesses(Int32 intBusinessType)
        {
            return new Response(AcknowledgmentStateSuccess, ConvertToString(Business.List(intBusinessType)));
        }
&lt;/pre&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small; white-space: normal;"&gt;&lt;strong&gt;
&lt;/strong&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small; white-space: normal;"&gt;

&lt;strong&gt;Step 3&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small; white-space: normal;"&gt;: Create a &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small; white-space: normal;"&gt;

&lt;span style="color: #2b91af; font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"&gt;DataContract&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small; white-space: normal;"&gt; for a generic response:&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre name="code" class="Cpp"&gt;[DataContract]
    public class Response
    {
        private AcknowledgmentState _ack;//custom types
        private List&lt;error&gt; _errors;
        private Object _result;

        private void Initialize(AcknowledgmentState ack, List&lt;error&gt; errors, object res)
        {
            _ack = ack;
            _errors = (errors == null) ? new List&lt;error&gt;() : errors;
            _result = (res == null) ? "" : res;
        }

        public Response()
        {
            Initialize(AcknowledgmentStateCustom, null, null);
        }

        public Response(object res)
        {
            Initialize(AcknowledgmentStateSuccess, null, res);
        }

        public Response(AcknowledgmentState ack, object res)
        {
            Initialize(ack, null, res);
        }

        public Response(AcknowledgmentState ack, Error error, object res)
        {
            List&lt;error&gt; errors = new List&lt;error&gt;(1);
            errors.Add(error);
            Initialize(ack, errors, res);
        }

        public Response(AcknowledgmentState ack, List&lt;error&gt; errors, object res)
        {
            Initialize(ack, errors, res);
        }

        [DataMember(EmitDefaultValue = true, IsRequired = true)]
        public AcknowledgmentState Ack { get { return _ack; } set { _ack = value; } }

        [DataMember(EmitDefaultValue = false, IsRequired = false)]
        public List&lt;error&gt; Errors { get { return _errors; } set { _errors = value; } }

        [DataMember(EmitDefaultValue = false, IsRequired = true)]
        public Object Result { get { return _result; } set { _result = value; } }
    }
&lt;/pre&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: Create a business class that takes in the type of business, and respond with a list.  &lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small; white-space: normal;"&gt;&lt;strong&gt;
&lt;/strong&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small; white-space: normal;"&gt;&lt;strong&gt;Step 5&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small; white-space: normal;"&gt;: Configure and then use the&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small; white-space: normal;"&gt;&lt;span style="font-family: 'Courier New';"&gt;App_Browser, MOBILE.BROWSER&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: small; white-space: normal;"&gt;&amp;nbsp;class file&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre name="code" class="Cpp"&gt;private static List&lt;mybusinesscontract&gt; List(int? businessType, int count)
        {
            List&lt;mybusinesscontract&gt; businessList = new List&lt;mybusinesscontract&gt;();

            if (count &gt; 100)
                count = 100;

            EnumBusinessType enumBizType = EnumBusinessType.UNKNOWN;
            try
            {
                if(businessType != null)
                    if(businessType &gt; 0)
                        enumBizType = (EnumBusinessType)Enum.ToObject(typeof(EnumBusinessType), businessType);
            }
            catch { }

            using (NorthwindDataContext dc = new NorthwindDataContext())
            {
                var records = dc.Businesses.Select(b=&gt; b);
                
                if(enumBizType != EnumBusinessType.UNKNOWN)
                    records = records.Where(b=&gt; b.TypeID == businessType);

                if (!string.IsNullOrEmpty(prefix))
                    records = records.Where(b =&gt; b.Name.StartsWith(prefix.Trim()));

                records = records
                            .OrderBy(b =&gt; b.Name)
                            .Take(count);

                foreach (var rec in records)
                {
                    businessList.Add(new MyBusinessContract(rec.ID, rec.Name));
                }
            }
            return businessList;
        }

&lt;/pre&gt;&lt;br /&gt;
Note that App_Browser is a feature that lets you *tweak* the way user interface is rendered based upon different devices. Its an xml based file, that uses xml to format the user interface presentation.&lt;br /&gt;
&lt;br /&gt;
From &lt;a href="http://msdn.microsoft.com/en-us/library/ms228122.aspx"&gt;MSDN&lt;/a&gt;:  &lt;br /&gt;
&lt;blockquote&gt;Browser definition files contain definitions for individual browsers. At run time, ASP.NET uses the information in the request header to determine what type of browser has made the request. Then ASP.NET uses .browser files to determine the capabilities of the browser. ASP.NET control adapters can use this information to adapt the behavior of an ASP.NET Web server control depending on the type of device. For example, a server control might generate different HTML for a graphical browser such as Internet Explorer than it would for a mobile device.&lt;/blockquote&gt;I will add this &lt;span style="font-family: 'Courier New';"&gt;.SLN&lt;/span&gt; on codeplex soon, ping me if I don’t. (0:  &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SOLUTION 2: &lt;i&gt;WCF RESTful service with customized client applications&lt;/i&gt;&lt;/b&gt;  &lt;br /&gt;
&lt;b&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
This means, separate client apps for separate devices, for instance Objective-C based app for iPhone, Silverlight based app for Windows Mobile. In this case, let’s get inside the core, and come up with a set of core&amp;nbsp;functionality.  &lt;br /&gt;
&lt;br /&gt;
Lets &lt;i&gt;decide&lt;/i&gt;, what the "Core" is? Or what the Core &lt;i&gt;should&lt;/i&gt; be - what will be the functionality that Core will perform. Ideally, when we say Core, it essentially means, a &lt;b&gt;layer that performs basic or atomic operations&lt;/b&gt;.  &lt;br /&gt;
&lt;br /&gt;
Over that Core you can wrap the device wrapper (IPhone, PC, etc) that builds a query to be sent to core, for instance, coming in from different device channels. &lt;br /&gt;
&lt;img src="http://2.bp.blogspot.com/_gWQaU40PH24/TKkzbe004AI/AAAAAAAAJcQ/9ZG1PkXgPWs/s1600/REST2.JPG" /&gt;&amp;nbsp; &lt;br /&gt;
We can use WCF Data Service to constitute a data layer. And your core can perform business operations/etc, and communicate with the Data Service.  &lt;br /&gt;
&lt;br /&gt;
For instance:  &lt;br /&gt;
1. Our core will performs core operations - for instance talking to Datalayer ; the &lt;code&gt;Core&lt;/code&gt; will be a "library" that will perform basic operations:  &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Authentication &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Authorization &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Select records &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Perform Action 1 &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Perform Action 2&lt;/li&gt;
&lt;/ul&gt;2. A DeviceWrapper(&lt;i&gt;DeviceAndriod, DeviceIPhone, DeviceWeb, etc&lt;/i&gt;), that wraps different devices.  &lt;br /&gt;
The first thing that comes to mind, in this case, is a mixture of Factory and Builder pattern. Think about factory of Devices, and Builder pattern for types of views to be rendered on different devices.&lt;br /&gt;
&lt;br /&gt;
3. TextRenderer, based upon the device settings, renders the text.&amp;nbsp;Therefore, following will be the steps to implement:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: Write a core that will provide authenticate/authorization; for instance, call the &lt;code&gt;Core.Authenticate()&lt;/code&gt;, and &lt;code&gt;.Authorize()&lt;/code&gt;; &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Based upon the &lt;a href="http://www.ytechie.com/2008/10/detecting-mobile-device-user-agents-in-aspnet.html"&gt;user agent&lt;/a&gt; call ICore.RenderView(agentType, url), this may return you the view/html to be rendered.&lt;/li&gt;
&lt;/ul&gt;User may perform an action, your request may call &lt;code&gt;Core.PerformAction()&lt;/code&gt;; which in turn may return the link to the page to be redirected, for instance.  &lt;br /&gt;
&lt;br /&gt;
Up till now, we were talking about &lt;strong&gt;Server&lt;/strong&gt; side, which primarily is concerned with:  &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;How the requests from different user agents will be processed by the server. &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;How the text will be rendered with respect to different devices.&lt;/li&gt;
&lt;/ul&gt;&lt;strong&gt;Client ends &lt;i&gt;could&lt;/i&gt; be:&lt;/strong&gt;  &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;A web browser, in this case &lt;em&gt;you don't need any client app to be developed –OR–&lt;/em&gt; &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;A, let’s say, Silverlight app for Windows Phone &lt;em&gt;–OR–&lt;/em&gt; &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;An android app for Android phone &lt;em&gt;–OR–&lt;/em&gt; &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;So on so forth…&lt;/li&gt;
&lt;/ol&gt;Decide what this "client app" will do. For instance:  &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;User shall login &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;User shall be able to perform certain operations&lt;/li&gt;
&lt;/ul&gt;Note that, these client apps will call the server side smartly (using web services, rather than asp.net web pages) in order to perform operations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-305829126387104372?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/s2t6_As5Sgk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/305829126387104372/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/07/how-to-think-unified-design-for-multi.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/305829126387104372?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/305829126387104372?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/s2t6_As5Sgk/how-to-think-unified-design-for-multi.html" title="How to think a unified design for multi device architecture?" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_gWQaU40PH24/TKkzbe004AI/AAAAAAAAJcQ/9ZG1PkXgPWs/s72-c/REST2.JPG" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/07/how-to-think-unified-design-for-multi.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQCSXY9eSp7ImA9WhdTE0s.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-561419191894901383</id><published>2011-06-29T09:51:00.001-07:00</published><updated>2011-07-11T00:12:48.861-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-11T00:12:48.861-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dynamic" /><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="C# 4.0" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="CSV Parser" /><category scheme="http://www.blogger.com/atom/ns#" term="High Performance" /><category scheme="http://www.blogger.com/atom/ns#" term="ETL" /><category scheme="http://www.blogger.com/atom/ns#" term="Efficient CSV Parser" /><category scheme="http://www.blogger.com/atom/ns#" term="FAST" /><category scheme="http://www.blogger.com/atom/ns#" term="Custom Parser" /><category scheme="http://www.blogger.com/atom/ns#" term="LINQ" /><title>Top 6 ways to parse .CSV? High Performance!</title><content type="html">Sometime back a question was asked to develop a well performant parser– there was no restriction defined in the question whatsoever as to what technology, logic, flow/etc should be applied. Just the input block, and expected output result format, and maximum time that the parser may take.&lt;br /&gt;
This may answer questions: &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;How to query a .CSV and save the result in another CSV?&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Custom .CSV Parser?&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;How to ETL .CSV into a .CSV&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;High performance .CSV parser&lt;/li&gt;
&lt;/ul&gt;I found the performance requirement interesting, and so is the reason of this post; besides, another reason is to discuss only “some” of the solutions of the problem; therefore, it should be stated clearly in a question as to what exactly is required, just to save the the test’ee and tester from any after shocks. Though can have several solutions, but lets get into the details and see what do we have here. Following are important aspects of the problem.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Business requirement:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Calculate the usage of different country and dial codes for a particular customer, and write result in a separate file.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Functional requirement:&lt;/b&gt;  &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Read from CSV data source&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Query for the data (select, group by, sum, count, etc)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Write into a separate &lt;span style="font-family: 'courier new';"&gt;&lt;u&gt;.CSV&lt;/u&gt;&lt;/span&gt; file&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Non functional requirement: (&lt;/b&gt;&lt;b&gt;Performance)&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
Data source contains the ~1.2 million records, and the module is required to complete the whole procedure in less than 5 seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Given that:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
We have a &lt;u&gt;&lt;span style="font-family: 'courier new';"&gt;CustomerData.CSV&lt;/span&gt;&lt;/u&gt; file already exists, to which we will query.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;span style="font-family: 'courier new';"&gt;CustomerData.CSV&lt;/span&gt;&lt;/u&gt; has the following schema:&lt;br /&gt;
&lt;br /&gt;
&lt;table border="1" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;td valign="top" width="204"&gt;&lt;b style="background-color: #cccccc;"&gt;Columns&lt;/b&gt;&lt;/td&gt; &lt;td valign="top" width="594"&gt;&lt;b style="background-color: #cccccc;"&gt;Description&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td valign="top" width="204"&gt;Field 1&lt;/td&gt; &lt;td valign="top" width="594"&gt;This field contains the customer id (sorted in ascending order)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td valign="top" width="204"&gt;Field 2&lt;/td&gt; &lt;td valign="top" width="594"&gt;Country code&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td valign="top" width="204"&gt;Field 3&lt;/td&gt; &lt;td valign="top" width="594"&gt;Dial Code&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td valign="top" width="204"&gt;Field 4&lt;/td&gt; &lt;td valign="top" width="594"&gt;Start time&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td valign="top" width="204"&gt;Field 5&lt;/td&gt; &lt;td valign="top" width="594"&gt;Call duration&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;u&gt;&lt;br /&gt;
&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;&lt;u&gt;Result.CSV&lt;/u&gt; &lt;/span&gt;has the following schema:   &lt;br /&gt;
&lt;br /&gt;
&lt;table border="1" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;td valign="top" width="204"&gt;&lt;b style="background-color: #cccccc;"&gt;Columns&lt;/b&gt;&lt;/td&gt; &lt;td valign="top" width="594"&gt;&lt;b style="background-color: #cccccc;"&gt;Description&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td valign="top" width="204"&gt;Field 1&lt;/td&gt; &lt;td valign="top" width="594"&gt;Country code&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td valign="top" width="204"&gt;Field 2&lt;/td&gt; &lt;td valign="top" width="594"&gt;Dial Code&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td valign="top" width="204"&gt;Field 3&lt;/td&gt; &lt;td valign="top" width="594"&gt;Total duration (in minutes and seconds)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;  &lt;b&gt;&lt;u&gt;SOLUTION 1:&lt;/u&gt; (Use Jet OLE DB Text Driver)&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
Easiest, quickest, fastest, and very well performant!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Step 1&lt;/b&gt;: Define the following &lt;u&gt;&lt;span style="font-family: 'Courier New', courier, monospace;"&gt;schema.ini&lt;/span&gt;&lt;/u&gt; file in some folder that you like:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;a href="http://lh6.ggpht.com/-S6J5PUgV72o/TgtVRcoZtmI/AAAAAAAAASY/jap_tR0B2cQ/s1600-h/image%25255B2%25255D.png"&gt;&lt;img alt="image" border="0" height="244" src="http://lh4.ggpht.com/-pElz0Bo8N8s/TgtVS_CNQcI/AAAAAAAAASc/mHz0cVx3QA8/image_thumb.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="image" width="222" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
If you would like, then look into the &lt;a href="http://msdn.microsoft.com/en-us/library/ms709353%28v=vs.85%29.aspx"&gt;Schema.ini File (Text File Driver)&lt;/a&gt;.  Following content goes in &lt;span style="font-family: 'courier new';"&gt;&lt;u&gt;schema.ini&lt;/u&gt;&lt;/span&gt;: &lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; height: 286px; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; [CustomerData.csv]&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; Format=CSVDelimited&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt; CharacterSet=ANSI&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt; ColNameHeader=False&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt; Col1=customerId Text Width 20&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt; Col2=countryCode Short Width 3&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt; Col3=dialCode Short Width 3&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt; Col4=startTime DateTime Width 15&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt; Col5=callDuration Text Width 5&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt; [result.csv]&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt; ColNameHeader=False&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt; CharacterSet=1252&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt; Format=CSVDelimited&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt; Col1=countryCode Short&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt; Col2=dialCode Short&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt; Col3=Expr1002 Float&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;STEP 2: &lt;/b&gt;Stub in the backend code in some .cs file&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Query(&lt;span style="color: blue;"&gt;string&lt;/span&gt; CustomerID)&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color: green;"&gt;//Pseudo/logic:&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color: green;"&gt;//Use jet ole db text driver to select * insert into new table; &lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color: green;"&gt;//to read-from a .csv, and write-into a .csv&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color: blue;"&gt;string&lt;/span&gt; customerId = CustomerID;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color: blue;"&gt;string&lt;/span&gt; writeTo = &lt;span style="color: #006080;"&gt;@"result.csv"&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color: blue;"&gt;string&lt;/span&gt; readFrom = &lt;span style="color: #006080;"&gt;@"CustomerData.csv"&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color: green;"&gt;//1: SELECT * INTO NEW_TABLE &lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color: green;"&gt;//2:  FROM SOURCE_TABLE &lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt;     &lt;span style="color: green;"&gt;//dont just read, write as well.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt;     &lt;span style="color: blue;"&gt;string&lt;/span&gt; query = &lt;span style="color: #006080;"&gt;@"  SELECT &lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt;                     countryCode, dialCode, sum(callDuration) INTO " + writeTo + &lt;span style="color: #006080;"&gt;@"&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum17" style="color: #606060;"&gt;  17:&lt;/span&gt;                 FROM &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum18" style="color: #606060;"&gt;  18:&lt;/span&gt;                     [" + readFrom + &lt;span style="color: #006080;"&gt;@"] &lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum19" style="color: #606060;"&gt;  19:&lt;/span&gt;                 WHERE &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum20" style="color: #606060;"&gt;  20:&lt;/span&gt;                     customerId='" + customerId + &lt;span style="color: #006080;"&gt;@"' &lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum21" style="color: #606060;"&gt;  21:&lt;/span&gt;                 GROUP BY countryCode, dialCode";&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum22" style="color: #606060;"&gt;  22:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum23" style="color: #606060;"&gt;  23:&lt;/span&gt;     Stopwatch timer = &lt;span style="color: blue;"&gt;new&lt;/span&gt; Stopwatch();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum24" style="color: #606060;"&gt;  24:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum25" style="color: #606060;"&gt;  25:&lt;/span&gt;     &lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum26" style="color: #606060;"&gt;  26:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum27" style="color: #606060;"&gt;  27:&lt;/span&gt;         Console.WriteLine(&lt;span style="color: #006080;"&gt;"Looking for customer: {0}, to export into {1}."&lt;/span&gt;, customerId, writeTo);&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum28" style="color: #606060;"&gt;  28:&lt;/span&gt;                 &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum29" style="color: #606060;"&gt;  29:&lt;/span&gt;         &lt;span style="color: blue;"&gt;string&lt;/span&gt; connectionString = &lt;span style="color: #006080;"&gt;@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\MyDocs\Software Test\;Extended Properties='text;HDR=No;FMT=CSVDelimited'"&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum30" style="color: #606060;"&gt;  30:&lt;/span&gt;         &lt;span style="color: blue;"&gt;using&lt;/span&gt; (OleDbConnection conn = &lt;span style="color: blue;"&gt;new&lt;/span&gt; OleDbConnection(connectionString))&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum31" style="color: #606060;"&gt;  31:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum32" style="color: #606060;"&gt;  32:&lt;/span&gt;             OleDbCommand cmd = &lt;span style="color: blue;"&gt;new&lt;/span&gt; OleDbCommand(query, conn);&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum33" style="color: #606060;"&gt;  33:&lt;/span&gt;             conn.Open();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum34" style="color: #606060;"&gt;  34:&lt;/span&gt;             timer.Start();&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum35" style="color: #606060;"&gt;  35:&lt;/span&gt;             &lt;span style="color: blue;"&gt;int&lt;/span&gt; nRecordsAffected = cmd.ExecuteNonQuery();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum36" style="color: #606060;"&gt;  36:&lt;/span&gt;             timer.Stop();&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum37" style="color: #606060;"&gt;  37:&lt;/span&gt;             conn.Close();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum38" style="color: #606060;"&gt;  38:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum39" style="color: #606060;"&gt;  39:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum40" style="color: #606060;"&gt;  40:&lt;/span&gt;     &lt;span style="color: blue;"&gt;catch&lt;/span&gt; (Exception ex) { Console.Write(ex.ToString()); }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum41" style="color: #606060;"&gt;  41:&lt;/span&gt;     Console.WriteLine(&lt;span style="color: #006080;"&gt;"Time taken to read/write (ms):[{0}] ({1} secs)"&lt;/span&gt;, timer.ElapsedMilliseconds, TimeSpan.FromMilliseconds(timer.ElapsedMilliseconds).Seconds);&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum42" style="color: #606060;"&gt;  42:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Output:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;a href="http://lh5.ggpht.com/-UO3NcEI1XC4/TgtVk_w-oqI/AAAAAAAAASg/8C6s8tJx5Ns/s1600-h/image%25255B5%25255D.png"&gt;&lt;img alt="image" border="0" height="161" src="http://lh6.ggpht.com/-Qjl98qDKMTU/TgtVlnR8g3I/AAAAAAAAASk/Q2N5qmyTKpA/image_thumb%25255B1%25255D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="image" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;SOLUTION&amp;nbsp;&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;2&lt;/u&gt;: (Write a custom class, create indexes, and apply bisection search)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
For instance, following code performs following operations to achieve the same:   &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Perform indexing on the selected column&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Select specific records from the &lt;span style="font-family: 'courier new';"&gt;&lt;u&gt;.CSV&lt;/u&gt;&lt;/span&gt; file&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Perform aggregate function, call SUM() – Use LINQ&lt;/li&gt;
&lt;/ol&gt;&lt;b&gt;Usage:&lt;/b&gt;  &lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (CsvParser parser = &lt;span style="color: blue;"&gt;new&lt;/span&gt; CsvParser(&lt;span style="color: #006080;"&gt;@"E:\CustomerData.csv"&lt;/span&gt;))&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;     parser.PerformIndexing((&lt;span style="color: blue;"&gt;int&lt;/span&gt;)CsvParser.CsvColumns.Col1_CustomerID);&lt;span style="color: green;"&gt;//One time only.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;     timer.Start();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;     parser.Select(&lt;span style="color: #006080;"&gt;"AMANTEL"&lt;/span&gt;).Sum((&lt;span style="color: blue;"&gt;int&lt;/span&gt;)CsvParser.CsvColumns.CallDuration);&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;     timer.Stop();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (var o &lt;span style="color: blue;"&gt;in&lt;/span&gt; parser.Result)&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;         Console.WriteLine(&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080;"&gt;"CountryCode:{0}, DialCode:{1}, TotalDurationOfCall:{2}"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt;                    o.CountryCode, o.DialCode, o.TotalDurationOfCall));&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt; }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt; Console.WriteLine(&lt;span style="color: #006080;"&gt;"Time taken to read/write (ms):[{0}] ({1} secs)"&lt;/span&gt;, timer.ElapsedMilliseconds, TimeSpan.FromMilliseconds(timer.ElapsedMilliseconds).Seconds);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Output:&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-i_Z2gEUFLeI/TgtX9eYw-7I/AAAAAAAAASo/C1q4C9CIy14/s1600-h/image%25255B8%25255D.png"&gt;&lt;img alt="image" border="0" height="161" src="http://lh6.ggpht.com/--dnzGDx9r3A/TgtX-o6U1YI/AAAAAAAAASs/Lx5Lxp66sqQ/image_thumb%25255B2%25255D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="image" width="244" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;b&gt;Backend code: &lt;/b&gt;  &lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; height: 244px; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.14%;"&gt;&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; CsvParser : IDisposable&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color: blue;"&gt;public&lt;/span&gt; dynamic Result { get; set; }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; _fileName;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;char&lt;/span&gt; _separator = &lt;span style="color: #006080;"&gt;','&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color: blue;"&gt;private&lt;/span&gt; Dictionary&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;, Bounds&amp;gt; _lstIndex = &lt;span style="color: blue;"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;, Bounds&amp;gt;();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color: blue;"&gt;private&lt;/span&gt; List&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt; _Rows = &lt;span style="color: blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;enum&lt;/span&gt; CsvColumns { Col1_CustomerID = 0, Col2_CountryCode = 1, Col3_DialCode = 2, Col4_StartTime = 3, CallDuration = 5 }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color: green;"&gt;//Simple bound structure to hold start and end index in the file.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color: blue;"&gt;class&lt;/span&gt; Bounds&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt;         &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Start { get; set; }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt;         &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; End { get; set; }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum17" style="color: #606060;"&gt;  17:&lt;/span&gt;         &lt;span style="color: blue;"&gt;public&lt;/span&gt; Bounds(&lt;span style="color: blue;"&gt;int&lt;/span&gt; start, &lt;span style="color: blue;"&gt;int&lt;/span&gt; stop) { Start = start; End = stop; }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum18" style="color: #606060;"&gt;  18:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum19" style="color: #606060;"&gt;  19:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum20" style="color: #606060;"&gt;  20:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum21" style="color: #606060;"&gt;  21:&lt;/span&gt;     &lt;span style="color: green;"&gt;//Default constructor&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum22" style="color: #606060;"&gt;  22:&lt;/span&gt;     &lt;span style="color: blue;"&gt;public&lt;/span&gt; CsvParser(&lt;span style="color: blue;"&gt;string&lt;/span&gt; file, &lt;span style="color: blue;"&gt;char&lt;/span&gt; seperator = &lt;span style="color: #006080;"&gt;','&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum23" style="color: #606060;"&gt;  23:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum24" style="color: #606060;"&gt;  24:&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(file)) &lt;span style="color: blue;"&gt;throw&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; Exception(&lt;span style="color: #006080;"&gt;"Invalid file"&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum25" style="color: #606060;"&gt;  25:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum26" style="color: #606060;"&gt;  26:&lt;/span&gt;         &lt;span style="color: blue;"&gt;this&lt;/span&gt;._fileName = file; &lt;span style="color: blue;"&gt;this&lt;/span&gt;._separator = seperator;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum27" style="color: #606060;"&gt;  27:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum28" style="color: #606060;"&gt;  28:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum29" style="color: #606060;"&gt;  29:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum30" style="color: #606060;"&gt;  30:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// Should be called once, before using the object;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum31" style="color: #606060;"&gt;  31:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum32" style="color: #606060;"&gt;  32:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;param name="nColumn"&amp;gt;Column to be indexed&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum33" style="color: #606060;"&gt;  33:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;returns&amp;gt;Chained object&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum34" style="color: #606060;"&gt;  34:&lt;/span&gt;     &lt;span style="color: blue;"&gt;public&lt;/span&gt; CsvParser PerformIndexing(&lt;span style="color: blue;"&gt;int&lt;/span&gt; nColumn)&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum35" style="color: #606060;"&gt;  35:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum36" style="color: #606060;"&gt;  36:&lt;/span&gt;         &lt;span style="color: blue;"&gt;using&lt;/span&gt; (StreamReader reader = &lt;span style="color: blue;"&gt;new&lt;/span&gt; StreamReader(_fileName))&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum37" style="color: #606060;"&gt;  37:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum38" style="color: #606060;"&gt;  38:&lt;/span&gt;             &lt;span style="color: blue;"&gt;string&lt;/span&gt; previousVal = &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Empty; &lt;span style="color: blue;"&gt;string&lt;/span&gt; currentVal = &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum39" style="color: #606060;"&gt;  39:&lt;/span&gt;             &lt;span style="color: blue;"&gt;int&lt;/span&gt; nStart = 0;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum40" style="color: #606060;"&gt;  40:&lt;/span&gt;             &lt;span style="color: blue;"&gt;int&lt;/span&gt; nEnd = 0;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum41" style="color: #606060;"&gt;  41:&lt;/span&gt;             &lt;span style="color: blue;"&gt;int&lt;/span&gt; nRowCounter = 0;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum42" style="color: #606060;"&gt;  42:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum43" style="color: #606060;"&gt;  43:&lt;/span&gt;             &lt;span style="color: blue;"&gt;do&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum44" style="color: #606060;"&gt;  44:&lt;/span&gt;             {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum45" style="color: #606060;"&gt;  45:&lt;/span&gt;                 currentVal = reader.ReadLine().Split(_separator)[nColumn];&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum46" style="color: #606060;"&gt;  46:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum47" style="color: #606060;"&gt;  47:&lt;/span&gt;                 &lt;span style="color: blue;"&gt;if&lt;/span&gt; (previousVal != currentVal)&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum48" style="color: #606060;"&gt;  48:&lt;/span&gt;                 {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum49" style="color: #606060;"&gt;  49:&lt;/span&gt;                     &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!&lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(previousVal))&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum50" style="color: #606060;"&gt;  50:&lt;/span&gt;                     {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum51" style="color: #606060;"&gt;  51:&lt;/span&gt;                         nEnd = nRowCounter;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum52" style="color: #606060;"&gt;  52:&lt;/span&gt;                         _lstIndex.Add(previousVal, &lt;span style="color: blue;"&gt;new&lt;/span&gt; Bounds(nStart, nEnd)); &lt;span style="color: green;"&gt;//Add previous value&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum53" style="color: #606060;"&gt;  53:&lt;/span&gt;                         nStart = nEnd + 1;&lt;span style="color: green;"&gt;//next line&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum54" style="color: #606060;"&gt;  54:&lt;/span&gt;                     }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum55" style="color: #606060;"&gt;  55:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum56" style="color: #606060;"&gt;  56:&lt;/span&gt;                     previousVal = currentVal;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum57" style="color: #606060;"&gt;  57:&lt;/span&gt;                 }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum58" style="color: #606060;"&gt;  58:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum59" style="color: #606060;"&gt;  59:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum60" style="color: #606060;"&gt;  60:&lt;/span&gt;                 nRowCounter++;&lt;span style="color: green;"&gt;//next line&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum61" style="color: #606060;"&gt;  61:&lt;/span&gt;             } &lt;span style="color: blue;"&gt;while&lt;/span&gt; (!reader.EndOfStream);&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum62" style="color: #606060;"&gt;  62:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum63" style="color: #606060;"&gt;  63:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum64" style="color: #606060;"&gt;  64:&lt;/span&gt;         System.Diagnostics.Trace.WriteLine(&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080;"&gt;"Done. Total indexed {0}."&lt;/span&gt;, _lstIndex.Count));&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum65" style="color: #606060;"&gt;  65:&lt;/span&gt;         &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum66" style="color: #606060;"&gt;  66:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum67" style="color: #606060;"&gt;  67:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum68" style="color: #606060;"&gt;  68:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum69" style="color: #606060;"&gt;  69:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// Select rows where given customer id&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum70" style="color: #606060;"&gt;  70:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum71" style="color: #606060;"&gt;  71:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;param name="CustomerID"&amp;gt;Customer id predicate&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum72" style="color: #606060;"&gt;  72:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum73" style="color: #606060;"&gt;  73:&lt;/span&gt;     &lt;span style="color: blue;"&gt;internal&lt;/span&gt; CsvParser Select(&lt;span style="color: blue;"&gt;string&lt;/span&gt; CustomerID)&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum74" style="color: #606060;"&gt;  74:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum75" style="color: #606060;"&gt;  75:&lt;/span&gt;         &lt;span style="color: blue;"&gt;using&lt;/span&gt; (StreamReader reader = &lt;span style="color: blue;"&gt;new&lt;/span&gt; StreamReader(_fileName))&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum76" style="color: #606060;"&gt;  76:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum77" style="color: #606060;"&gt;  77:&lt;/span&gt;             &lt;span style="color: green;"&gt;//1. Get location from index; also get the next index id so that we know where to stop.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum78" style="color: #606060;"&gt;  78:&lt;/span&gt;             &lt;span style="color: green;"&gt;//2. Jump to that position&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum79" style="color: #606060;"&gt;  79:&lt;/span&gt;             &lt;span style="color: green;"&gt;//3. Start fetching&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum80" style="color: #606060;"&gt;  80:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum81" style="color: #606060;"&gt;  81:&lt;/span&gt;             Bounds bounds = _lstIndex[CustomerID];&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum82" style="color: #606060;"&gt;  82:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum83" style="color: #606060;"&gt;  83:&lt;/span&gt;             &lt;span style="color: blue;"&gt;int&lt;/span&gt; nRowCounter = 0;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum84" style="color: #606060;"&gt;  84:&lt;/span&gt;             &lt;span style="color: blue;"&gt;while&lt;/span&gt; (!reader.EndOfStream || nRowCounter == bounds.End)&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum85" style="color: #606060;"&gt;  85:&lt;/span&gt;             {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum86" style="color: #606060;"&gt;  86:&lt;/span&gt;                 &lt;span style="color: blue;"&gt;if&lt;/span&gt; (nRowCounter &amp;gt;= bounds.Start)&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum87" style="color: #606060;"&gt;  87:&lt;/span&gt;                     _Rows.Add(reader.ReadLine());&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum88" style="color: #606060;"&gt;  88:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum89" style="color: #606060;"&gt;  89:&lt;/span&gt;                 nRowCounter++;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum90" style="color: #606060;"&gt;  90:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum91" style="color: #606060;"&gt;  91:&lt;/span&gt;                 &lt;span style="color: blue;"&gt;if&lt;/span&gt; (nRowCounter &amp;gt; bounds.End) &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum92" style="color: #606060;"&gt;  92:&lt;/span&gt;             }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum93" style="color: #606060;"&gt;  93:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum94" style="color: #606060;"&gt;  94:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum95" style="color: #606060;"&gt;  95:&lt;/span&gt;         &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum96" style="color: #606060;"&gt;  96:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum97" style="color: #606060;"&gt;  97:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum98" style="color: #606060;"&gt;  98:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum99" style="color: #606060;"&gt;  99:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// Binary search&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum100" style="color: #606060;"&gt; 100:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum101" style="color: #606060;"&gt; 101:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;param name="data"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum102" style="color: #606060;"&gt; 102:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;param name="key"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum103" style="color: #606060;"&gt; 103:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;param name="left"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum104" style="color: #606060;"&gt; 104:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;param name="right"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum105" style="color: #606060;"&gt; 105:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum106" style="color: #606060;"&gt; 106:&lt;/span&gt;     [Obsolete(&lt;span style="color: #006080;"&gt;"Unused"&lt;/span&gt;, &lt;span style="color: blue;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum107" style="color: #606060;"&gt; 107:&lt;/span&gt;     &lt;span style="color: blue;"&gt;internal&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Search(&lt;span style="color: blue;"&gt;string&lt;/span&gt;[] data, &lt;span style="color: blue;"&gt;string&lt;/span&gt; key, &lt;span style="color: blue;"&gt;int&lt;/span&gt; left, &lt;span style="color: blue;"&gt;int&lt;/span&gt; right)&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum108" style="color: #606060;"&gt; 108:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum109" style="color: #606060;"&gt; 109:&lt;/span&gt;         &lt;span style="color: blue;"&gt;if&lt;/span&gt; (left &amp;lt;= right)&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum110" style="color: #606060;"&gt; 110:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum111" style="color: #606060;"&gt; 111:&lt;/span&gt;             &lt;span style="color: blue;"&gt;int&lt;/span&gt; middle = (left + right) / 2;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum112" style="color: #606060;"&gt; 112:&lt;/span&gt;             &lt;span style="color: blue;"&gt;if&lt;/span&gt; (key == data[middle])&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum113" style="color: #606060;"&gt; 113:&lt;/span&gt;                 &lt;span style="color: blue;"&gt;return&lt;/span&gt; middle;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum114" style="color: #606060;"&gt; 114:&lt;/span&gt;             &lt;span style="color: blue;"&gt;else&lt;/span&gt; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!key.Equals(data[middle]))&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum115" style="color: #606060;"&gt; 115:&lt;/span&gt;                 &lt;span style="color: blue;"&gt;return&lt;/span&gt; Search(data, key, left, middle - 1);&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum116" style="color: #606060;"&gt; 116:&lt;/span&gt;             &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum117" style="color: #606060;"&gt; 117:&lt;/span&gt;                 &lt;span style="color: blue;"&gt;return&lt;/span&gt; Search(data, key, middle + 1, right);&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum118" style="color: #606060;"&gt; 118:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum119" style="color: #606060;"&gt; 119:&lt;/span&gt;         &lt;span style="color: blue;"&gt;return&lt;/span&gt; -1;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum120" style="color: #606060;"&gt; 120:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum121" style="color: #606060;"&gt; 121:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum122" style="color: #606060;"&gt; 122:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum123" style="color: #606060;"&gt; 123:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// Provide SUM aggregate function&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum124" style="color: #606060;"&gt; 124:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum125" style="color: #606060;"&gt; 125:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;param name="nColumnID"&amp;gt;by column&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum126" style="color: #606060;"&gt; 126:&lt;/span&gt;     &lt;span style="color: green;"&gt;/// &amp;lt;returns&amp;gt;Chained object&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum127" style="color: #606060;"&gt; 127:&lt;/span&gt;     &lt;span style="color: blue;"&gt;internal&lt;/span&gt; CsvParser Sum(&lt;span style="color: blue;"&gt;int&lt;/span&gt; nColumnID)&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum128" style="color: #606060;"&gt; 128:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum129" style="color: #606060;"&gt; 129:&lt;/span&gt;         var result = from theRow &lt;span style="color: blue;"&gt;in&lt;/span&gt; _Rows&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum130" style="color: #606060;"&gt; 130:&lt;/span&gt;                         let rowItems = theRow.Split(_separator)&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum131" style="color: #606060;"&gt; 131:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum132" style="color: #606060;"&gt; 132:&lt;/span&gt;                         group theRow by &lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum133" style="color: #606060;"&gt; 133:&lt;/span&gt;                         {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum134" style="color: #606060;"&gt; 134:&lt;/span&gt;                             countryCode = rowItems[(&lt;span style="color: blue;"&gt;int&lt;/span&gt;)CsvColumns.Col2_CountryCode],&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum135" style="color: #606060;"&gt; 135:&lt;/span&gt;                             dialCode = rowItems[(&lt;span style="color: blue;"&gt;int&lt;/span&gt;)CsvColumns.Col3_DialCode]&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum136" style="color: #606060;"&gt; 136:&lt;/span&gt;                         } into g&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum137" style="color: #606060;"&gt; 137:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum138" style="color: #606060;"&gt; 138:&lt;/span&gt;                         select &lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum139" style="color: #606060;"&gt; 139:&lt;/span&gt;                         {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum140" style="color: #606060;"&gt; 140:&lt;/span&gt;                             CountryCode = g.Key.countryCode,&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum141" style="color: #606060;"&gt; 141:&lt;/span&gt;                             DialCode = g.Key.dialCode,&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum142" style="color: #606060;"&gt; 142:&lt;/span&gt;                             TotalDurationOfCall = g.Sum(p =&amp;gt; p[(&lt;span style="color: blue;"&gt;int&lt;/span&gt;)CsvColumns.CallDuration]),&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum143" style="color: #606060;"&gt; 143:&lt;/span&gt;                             selectedRows = g&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum144" style="color: #606060;"&gt; 144:&lt;/span&gt;                         };&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum145" style="color: #606060;"&gt; 145:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum146" style="color: #606060;"&gt; 146:&lt;/span&gt;         Result = result.ToList();&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum147" style="color: #606060;"&gt; 147:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum148" style="color: #606060;"&gt; 148:&lt;/span&gt;         &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum149" style="color: #606060;"&gt; 149:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum150" style="color: #606060;"&gt; 150:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum151" style="color: #606060;"&gt; 151:&lt;/span&gt;     &lt;span style="color: #cc6633;"&gt;#region&lt;/span&gt; IDisposable Members&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum152" style="color: #606060;"&gt; 152:&lt;/span&gt;     &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Dispose() { }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum153" style="color: #606060;"&gt; 153:&lt;/span&gt;     &lt;span style="color: #cc6633;"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum154" style="color: #606060;"&gt; 154:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum155" style="color: #606060;"&gt; 155:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum156" style="color: #606060;"&gt; 156:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
Btw, far more interesting code would have been the following implementation: &lt;br /&gt;
&lt;pre class="Cpp" name="code"&gt;parser .Select(Col1, Col2, Col3)
 .Where(Col1,"AMANTEL")
 .Sum(Col3);
&lt;/pre&gt;&lt;br /&gt;
Let me know if you can help me with that (0:  Note that, I have not applied bisection search, yet; but the method is there.  &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;SOLUTION 3&lt;/u&gt;&lt;/b&gt;&lt;b&gt;: (Use &lt;/b&gt;&lt;b&gt;&lt;span style="font-family: 'courier new';"&gt;TextFieldParser&lt;/span&gt; class)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Checkout &lt;a href="http://bradraulston.blogspot.com/2008/11/using-vb-textfieldparser-in-c.html"&gt;this solution&lt;/a&gt;, but its a VB turned into C# solution. Let me know if you enjoy?  &lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (var parser =&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color: blue;"&gt;new&lt;/span&gt; TextFieldParser(&lt;span style="color: #006080;"&gt;@"c:\CustomerData.CSV"&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;             TextFieldType = FieldType.Delimited,&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;             Delimiters = &lt;span style="color: blue;"&gt;new&lt;/span&gt;[] { &lt;span style="color: #006080;"&gt;","&lt;/span&gt; }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;         })&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color: blue;"&gt;while&lt;/span&gt; (!parser.EndOfData)&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;         &lt;span style="color: blue;"&gt;string&lt;/span&gt;[] fields;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;         fields = parser.ReadFields();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt;         &lt;span style="color: green;"&gt;//Do something with it!&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;SOLUTION 4&lt;/u&gt;&lt;/b&gt;&lt;b&gt;: (Using LINQ to CSV)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://blogs.msdn.com/b/ericwhite/archive/2008/09/30/linq-to-text-and-linq-to-csv.aspx"&gt;Here&lt;/a&gt; is how.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;SOLUTION 5&lt;/u&gt;&lt;/b&gt;&lt;b&gt;: (Use &lt;span style="font-family: 'courier new';"&gt;XmlCSVReader&lt;/span&gt;&lt;/b&gt;&lt;b&gt;, convert CSV to XML and use XPath to query the data)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
How so? &lt;a href="http://msdn.microsoft.com/en-us/library/aa302293.aspx"&gt;Here&lt;/a&gt; is the method.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;SOLUTION 6&lt;/u&gt;&lt;/b&gt;&lt;b&gt;: (Load &lt;span style="font-family: 'courier new';"&gt;.CSV&lt;/span&gt; in a database and use SELECT query to get result)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
See &lt;a href="http://www.codeproject.com/KB/database/FinalCSVReader.aspx"&gt;Importing CSV Data and saving it in database&lt;/a&gt;; I hope you get the idea; ping me if you did not.  Another, just as interesting &lt;a href="http://www.codeproject.com/KB/database/CsvReader.aspx"&gt;A Fast CSV Reader&lt;/a&gt; is also there; this is interesting because it has benchmarks. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;SOLUTION 7 (Bonus)&lt;/u&gt;&lt;/b&gt;&lt;strong&gt;: (Use Text Driver with DSN)&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Just to retrieve data, quick and easy.&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; OdbcConnection conn = &lt;span style="color: blue;"&gt;new&lt;/span&gt; OdbcConnection(&lt;span style="color: #006080;"&gt;"DSN=CustomerData.csv"&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; conn.Open();&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt; OdbcCommand foo = &lt;span style="color: blue;"&gt;new&lt;/span&gt; OdbcCommand(&lt;span style="color: #006080;"&gt;@"SELECT * FROM [CustomerData.csv]"&lt;/span&gt;, conn);&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt; IDataReader dr = foo.ExecuteReader();&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt; &lt;span style="color: blue;"&gt;while&lt;/span&gt; (dr.Read())&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;     List&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt; data = &lt;span style="color: blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color: blue;"&gt;int&lt;/span&gt; cols = dr.GetSchemaTable().Rows.Count;&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; cols; i++)&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;         Console.WriteLine(&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080;"&gt;"Col:{0}"&lt;/span&gt;, dr[i].ToString()));&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
Happy parsing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-561419191894901383?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/_NZ-PbZ35Uw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/561419191894901383/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/06/top-6-ways-to-parse-csv-high.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/561419191894901383?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/561419191894901383?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/_NZ-PbZ35Uw/top-6-ways-to-parse-csv-high.html" title="Top 6 ways to parse .CSV? High Performance!" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-pElz0Bo8N8s/TgtVS_CNQcI/AAAAAAAAASc/mHz0cVx3QA8/s72-c/image_thumb.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/06/top-6-ways-to-parse-csv-high.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08MQ304cSp7ImA9WhZUE04.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-1441397746202494602</id><published>2011-06-05T22:58:00.000-07:00</published><updated>2011-06-05T22:58:02.339-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-05T22:58:02.339-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Business Objects" /><category scheme="http://www.blogger.com/atom/ns#" term="VS2010" /><category scheme="http://www.blogger.com/atom/ns#" term="Crystal reports" /><title>Crystal Reports for VS2010 (v13.0.1)</title><content type="html">&lt;a href="http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_13_0_1.exe"&gt;Download here.&lt;/a&gt; Also, checkout &lt;a href="http://social.msdn.microsoft.com/Forums/et-EE/vscrystalreports/thread/24bd3f52-8b22-47ee-90eb-2504d49a4625"&gt;this discussion&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-1441397746202494602?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/Vcsb--4V0WM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/1441397746202494602/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/06/crystal-reports-for-vs2010-v1301.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/1441397746202494602?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/1441397746202494602?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/Vcsb--4V0WM/crystal-reports-for-vs2010-v1301.html" title="Crystal Reports for VS2010 (v13.0.1)" /><author><name>KMan</name><email>noreply@blogger.com</email></author><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/06/crystal-reports-for-vs2010-v1301.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcGRnw5cCp7ImA9WhZVF0s.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-2893430148669145412</id><published>2011-05-30T06:43:00.001-07:00</published><updated>2011-05-30T06:43:47.228-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-30T06:43:47.228-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="worker threads in asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term="threading in asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="async" /><category scheme="http://www.blogger.com/atom/ns#" term="Reactive Framework" /><category scheme="http://www.blogger.com/atom/ns#" term="Reactive Framework in ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="parallel calls" /><title>ASP.NET: Async calls vs threading</title><content type="html">&lt;p&gt;This answers following questions:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;How to improve performance?&lt;/li&gt; &lt;li&gt;Should I ever use Threading in ASP.NET? &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;How to improve performance of an ASP.NET MVC page that calls a database which takes a specific amount of time, and the results are then rendered on to an html page? This means, for instance, if 4 method calls takes 4 seconds, then target is, to improve the performance to 2 seconds for 4 database calls. &lt;/p&gt; &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt; &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; strReturnValue1 = CallDB(&lt;span style="color: #006080"&gt;"SomeStoredProcedureThatTakes1CompleteSecondToProcess1"&lt;/span&gt;);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; strReturnValue2 = CallDB(&lt;span style="color: #006080"&gt;"SomeStoredProcedureThatTakes1CompleteSecondToProcess2"&lt;/span&gt;);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; strReturnValue1 = CallDB(&lt;span style="color: #006080"&gt;"SomeStoredProcedureThatTakes1CompleteSecondToProcess1"&lt;/span&gt;);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Takes exactly &lt;u&gt;3 seconds&lt;/u&gt;. &lt;br /&gt;&lt;p&gt;Move it inside a web service, and then call:&lt;/p&gt;&lt;br /&gt;&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&lt;br /&gt;&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; yourWebServiceObject.CallDB +=  &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; CallDBCompletedEventHandler(CallDBCompleted); &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;img src="http://www.williablog.net/williablog/image.axd?picture=2010/1/Slide3.JPG" width="240" height="180"&gt; &lt;br /&gt;&lt;p&gt;&lt;strong&gt;Define a handler:&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&lt;br /&gt;&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; CallDBCompletedEventHandler(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, CallDBCompletedEventArgs e)&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     SomeLabel.Text += &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080"&gt;"Return value: [{0}]&amp;lt;br/&amp;gt;"&lt;/span&gt;, e.Result);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; }&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Lets call it async'ly:&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&lt;br /&gt;&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; yourWebServiceObject.CallDBAsync(&lt;span style="color: #006080"&gt;"SomeStoredProcedureThatTakes1CompleteSecondToProcess2"&lt;/span&gt;);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; yourWebServiceObject.CallDBAsync(&lt;span style="color: #006080"&gt;"SomeStoredProcedureThatTakes1CompleteSecondToProcess2"&lt;/span&gt;);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; yourWebServiceObject.CallDBAsync(&lt;span style="color: #006080"&gt;"SomeStoredProcedureThatTakes1CompleteSecondToProcess2"&lt;/span&gt;);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Takes &lt;u&gt;~1 second&lt;/u&gt;. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;How so? &lt;/strong&gt;&lt;br /&gt;&lt;p&gt;The I/O thread(completion ports or IOCPs) use the ThreadPool, but they use IOCP, which do not interfere with ASP.NET requests. Therefore, you can safely use the asynchronous call to a web service, and update the page accordingly; for instance using UpdatePanel. &lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://www.williablog.net/williablog/image.axd?picture=2010/1/Slide6.JPG" width="240" height="180"&gt; &lt;br /&gt;&lt;p&gt;These web service asynchronous calls, uses IOCP behind the scenes, freeing ASP from essentially all of the burdens. &lt;br /&gt;&lt;p&gt;&lt;strong&gt;I could have done it using the thread pool as well?! &lt;/strong&gt;&lt;br /&gt;&lt;p&gt;Usually, unless we want to parallelize a CPU-intensive operation in order to get it done faster, it is generally *not recommended* to use a worker thread; this eventually will starve the ThreadPool in an ASP.NET process by queuing too many work items. &lt;br /&gt;&lt;p&gt;Don't forget that you also use &lt;a href="http://rxwiki.wikidot.com/101samples#toc0"&gt;Reactive Framework&lt;/a&gt; in your ASP.NET app to do the job async'ly.&lt;br /&gt;&lt;p&gt;For instance,&lt;/p&gt;&lt;br /&gt;&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;&lt;br /&gt;&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; var o = Observable.Start(() =&amp;gt; { CallDB &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; (&lt;span style="color: #006080"&gt;"SomeStoredProcedureThatTakes1CompleteSecondToProcess2"&lt;/span&gt;); Popup.Message(&lt;span style="color: #006080"&gt;"Done."&lt;/span&gt;); Popup.Show (); });&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; o.First();   &lt;span style="color: #008000"&gt;// subscribe and wait for completion of background operation&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Takes &lt;u&gt;~1 second&lt;/u&gt;. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://blog.stevensanderson.com/2008/04/05/improve-scalability-in-aspnet-mvc-using-asynchronous-requests/"&gt;This&lt;/a&gt; and &lt;a href="http://www.williablog.net/williablog/post/2009/06/18/Asynchronous-Programming-with-ASPNet-MVC-Futures.aspx"&gt;this&lt;/a&gt; a very interesting article targeted to performance as well as scalability gains in a web app. &lt;br /&gt;&lt;p&gt;Enjoy!&lt;br /&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-2893430148669145412?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/YqBh4jXej34" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/2893430148669145412/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/05/aspnet-async-calls-vs-threading.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/2893430148669145412?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/2893430148669145412?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/YqBh4jXej34/aspnet-async-calls-vs-threading.html" title="ASP.NET: Async calls vs threading" /><author><name>KMan</name><email>noreply@blogger.com</email></author><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/05/aspnet-async-calls-vs-threading.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQGSX4zfyp7ImA9WhZWGEU.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-5097299740929317804</id><published>2011-05-20T00:40:00.001-07:00</published><updated>2011-05-20T02:05:28.087-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-20T02:05:28.087-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jQuery vs Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="design decisions" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="RIA" /><title>Is ‘jQuery vs Silverlight’-comparison even possible?</title><content type="html">Some "time" back, I was given a choice to decide between jQuery and Silverlight.&lt;br /&gt;
&lt;br /&gt;
I did not delve into the discussion of what Silverlight is and what jQuery is. I just presented the solution, using jQuery for lightweight UI's, Silverlight if its intranet based.&lt;br /&gt;
&lt;br /&gt;
First, please understand that Silverlight is not Macromedia Flash. It is far more superior, and elegant; -- and -- it has the "capabilities" of Flash.  &lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/_r-Q5M_GfhZo/TdYa0yMImiI/AAAAAAAAASI/KMYy3qC989E/s1600-h/jLightLogo_200x200%5B3%5D.png"&gt;&lt;img alt="jLightLogo_200x200" border="0" height="200" src="http://lh5.ggpht.com/_r-Q5M_GfhZo/TdYa1aDF-NI/AAAAAAAAASM/BfI3Rm299vk/jLightLogo_200x200_thumb%5B1%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="jLightLogo_200x200" width="227" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;[Image shamefully stolen from &lt;/span&gt;&lt;a href="http://nuget.org/List/Packages/jLight"&gt;&lt;span style="font-size: xx-small;"&gt;Silverlight/Javascript interop library&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: xx-small;"&gt; :0) ]&lt;/span&gt;&lt;br /&gt;
Silverlight and jQuery "may be" intended for similar things, rich user interface, but Silverlight has a complete framework that utilizes the power of .NET and provide rich feature set.  &lt;br /&gt;
Actually comparing jQuery and Silverlight feels like comparing a red-apple with one-hundred-acre'd-fruit-farm.&lt;br /&gt;
&lt;br /&gt;
Ok, that may be indigestible example, but that's how it really is.&lt;br /&gt;
&lt;br /&gt;
Silverlight comes with a framework, while jQuery is just a JavaScript library. JavaScript -- that is used to play around with DOM elements; meaning? Find and manipulate the html elements. It is just ~30KB in size.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;So, how can you compare the two? &lt;/b&gt; &lt;br /&gt;
The only way you *&lt;i&gt;can&lt;/i&gt;* look into the two is from the &lt;u&gt;UI perspective&lt;/u&gt;, both can be used to develop Rich Internet Application(RIA); for instance, the data grid provided by Silverlight, and the data grid provided by jQuery. Obviously in that case, jQuery is lightweight. But then again, you might need to "&lt;u&gt;extend&lt;/u&gt;" the jQuery data grid to your custom needs. Its JavaScript, so you've got your length and breadth to play around.  &lt;br /&gt;
Also, you can use jQuery inside Silverlight app, but you cannot otherwise.&lt;br /&gt;
&lt;br /&gt;
The only problem is that, Silverlight requires to be downloaded, similar to Macromedia Flash plugin, but once you download it, you're good to go. Plus, with MEF(Microsoft Extensibility Framework) it feels cool to "componentize" a Silverlight app and load modules on-the-fly and on-demand.&lt;br /&gt;
&lt;br /&gt;
So, must if you choose between the two, go for jQuery if you are considering a web based line of business - lightweight and simple;&lt;br /&gt;
&lt;br /&gt;
And if its a web application, which means, intranet based application for some corporate customer, you can always play with the Silverlight and its features. It can help providing native windows application on the web.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;The questions that may help you reach a decision:&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
0. What feature set customer is looking for? What domain does it belong to? For instance, for a media company you might choose Silverlight UI for a web based app, rather than a jQuery.&lt;br /&gt;
&lt;br /&gt;
1. Is your customer ok with Silverlight requirement on every pc of the network? This means, application will not work if the user has not installed Silverlight.&lt;br /&gt;
&lt;br /&gt;
2. If your customer wants an extra-ordinary user experience; which includes rich interactive media, games, simulation, etc.&lt;br /&gt;
&lt;br /&gt;
3. jQuery may be easier to get along if you already know Javascript, but Silverlight would require a learning curve, atleast of 4 weeks to "really" get along.&lt;br /&gt;
&lt;br /&gt;
Here is an &lt;a href="http://geekswithblogs.net/lbugnion/archive/2010/07/14/javascript-vs-silverlight-an-answer.aspx"&gt;interesting answer&lt;/a&gt; posted; and if you’re a jQuery fan &lt;a href="http://stackoverflow.com/questions/394601/which-javascript-framework-jquery-vs-dojo-vs/394837#394837"&gt;this will soothe&lt;/a&gt; your veins.&lt;br /&gt;
&lt;br /&gt;
Enjoy, the silver light (0;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-5097299740929317804?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/p744vp_tm7g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/5097299740929317804/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/05/is-jquery-vs-silverlight-comparison.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/5097299740929317804?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/5097299740929317804?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/p744vp_tm7g/is-jquery-vs-silverlight-comparison.html" title="Is ‘jQuery vs Silverlight’-comparison even possible?" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_r-Q5M_GfhZo/TdYa1aDF-NI/AAAAAAAAASM/BfI3Rm299vk/s72-c/jLightLogo_200x200_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/05/is-jquery-vs-silverlight-comparison.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIASX45cCp7ImA9WhZXEUQ.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-4093644049577292820</id><published>2011-04-30T13:35:00.001-07:00</published><updated>2011-04-30T14:05:48.028-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-30T14:05:48.028-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ADO.NET" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="nHibernate" /><category scheme="http://www.blogger.com/atom/ns#" term="Fluent NHibernate" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="stored procedure" /><category scheme="http://www.blogger.com/atom/ns#" term="ORM" /><title>NHibernate – The Good, the Bad, and the Ugly, that it gets!</title><content type="html">A data access layer usually consumes 30% of the development time. A reasonable ORM can save you 90% of that 30% time. One such big hit is NHibernate.&lt;br /&gt;
&lt;b&gt;Steps to use NHibernate:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Decide - Model first, Database first, or Code first&lt;/li&gt;
&lt;li&gt;Create Mapping&lt;/li&gt;
&lt;li&gt;Configuration&lt;/li&gt;
&lt;li&gt;Query!&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;&lt;img src="http://www.nhforge.org/doc/nh/shared/images/fullcream.png" /&gt; &lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Pros:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Detached object&lt;/li&gt;
&lt;li&gt;Concurrency&lt;/li&gt;
&lt;li&gt;Interceptors&lt;/li&gt;
&lt;li&gt;Batch processing&lt;/li&gt;
&lt;li&gt;Attributes&lt;/li&gt;
&lt;li&gt;Fluent Syntax&lt;/li&gt;
&lt;li&gt;Database independency &lt;/li&gt;
&lt;li&gt;Pretty mature, and large community&lt;/li&gt;
&lt;li&gt;Open source&lt;/li&gt;
&lt;li&gt;Model classes are POCO&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Cons:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;No visual modeler&lt;/li&gt;
&lt;li&gt;Alot of mapping code that requires to be put into&lt;/li&gt;
&lt;li&gt;Classes must have a no-arg constructor&lt;/li&gt;
&lt;li&gt;Classes should have a&amp;nbsp; private Long id;&lt;/li&gt;
&lt;li&gt;Classes may have private database attributes&lt;/li&gt;
&lt;li&gt;Clumsy mapping/configuration files&lt;/li&gt;
&lt;/ul&gt;Note that, to handle mappings/configurations, Fluent NHibernate is there. Fluent NHibernate is not a replacement for NHibernate or LINQ but merely a helper library that helps you configure NHibernate in code rather than using XML files; Fluent NHibernate defines helper classes which significantly facilitate the task of providing the correct configuration.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;No good LINQ to NHB! still under development – very, very young!&lt;/li&gt;
&lt;li&gt;Stored procedures in NHB; challenging.&lt;/li&gt;
&lt;li&gt;Increased startup time due to metadata preparation ( not good for desktop like apps)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Huge learning curve, especially for those having no ORM background.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Pretty challenging to fine-tune the generated sql. For instance, see following SQL:&lt;/li&gt;

&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;SELECT&lt;/span&gt;    this_.[CHEQUE_ID] &lt;span style="color: blue;"&gt;as&lt;/span&gt; CHEQUE1_0_1_, this_.[CHEQUE_TYPE_ID] &lt;span style="color: blue;"&gt;as&lt;/span&gt; CHEQUE2_0_1_, this_.[BATCH_ID] &lt;span style="color: blue;"&gt;as&lt;/span&gt; BATCH3_0_1_, this_.[ENTRY_DATETIME] &lt;span style="color: blue;"&gt;as&lt;/span&gt; ENTRY4_0_1_, this_.[STATE_ID] &lt;span style="color: blue;"&gt;as&lt;/span&gt; STATE5_0_1_, this_.[MICR_AMOUNT] &lt;span style="color: blue;"&gt;as&lt;/span&gt; MICR6_0_1_, &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;         this_.[CHEQUE_NUMBER] &lt;span style="color: blue;"&gt;as&lt;/span&gt; CHEQUE7_0_1_, this_.[PHEONIX_REFERENCE_NUMBER] &lt;span style="color: blue;"&gt;as&lt;/span&gt; PHEONIX8_0_1_, this_.[ACCOUNT_NUMBER] &lt;span style="color: blue;"&gt;as&lt;/span&gt; ACCOUNT9_0_1_,this_.[ACCOUNT_TITLE] &lt;span style="color: blue;"&gt;as&lt;/span&gt; ACCOUNT10_0_1_, this_.[BRANCH_CODE] &lt;span style="color: blue;"&gt;as&lt;/span&gt; BRANCH11_0_1_, this_.[ENTITY_ID] &lt;span style="color: blue;"&gt;as&lt;/span&gt; ENTITY12_0_1_, this_.[FRONT_IMAGE] &lt;span style="color: blue;"&gt;as&lt;/span&gt; FRONT13_0_1_, this_.[BACK_IMAGE] &lt;span style="color: blue;"&gt;as&lt;/span&gt; BACK14_0_1_, this_.[IS_LINKED] &lt;span style="color: blue;"&gt;as&lt;/span&gt; IS15_0_1_, this_.[CHEQUE_AMOUNT] &lt;span style="color: blue;"&gt;as&lt;/span&gt; CHEQUE16_0_1_, &lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;         this_.[LINKED_CHEQUE_NUMBER] &lt;span style="color: blue;"&gt;as&lt;/span&gt; LINKED17_0_1_, this_.[LINKED_ACCOUNT_NUMBER] &lt;span style="color: blue;"&gt;as&lt;/span&gt; LINKED18_0_1_, this_.[LINKED_CHEQUE_AMOUNT] &lt;span style="color: blue;"&gt;as&lt;/span&gt; LINKED19_0_1_, this_.[LINKED_BENEFICIARY_ACCOUNT_NUMBER] &lt;span style="color: blue;"&gt;as&lt;/span&gt; LINKED20_0_1_, this_.[EXCEPTION_DESCRIPTION] &lt;span style="color: blue;"&gt;as&lt;/span&gt; EXCEPTION21_0_1_, this_.[OWNER_VERIFIER] &lt;span style="color: blue;"&gt;as&lt;/span&gt; OWNER22_0_1_, this_.[CUSTOMER_TYPE_CODE] &lt;span style="color: blue;"&gt;as&lt;/span&gt; CUSTOMER23_0_1_, this_.[IS_STOPPED] &lt;span style="color: blue;"&gt;as&lt;/span&gt; IS24_0_1_, this_.[IS_OVERDRAW] &lt;span style="color: blue;"&gt;as&lt;/span&gt; IS25_0_1_, this_.[LOCK_DATETIME] &lt;span style="color: blue;"&gt;as&lt;/span&gt; LOCK26_0_1_, this_.[DEPOSIT_BANK] &lt;span style="color: blue;"&gt;as&lt;/span&gt; DEPOSIT27_0_1_, this_.[AVAILABLE_BALANCE] &lt;span style="color: blue;"&gt;as&lt;/span&gt; AVAILABLE28_0_1_, this_.[LINKED_DEPOSITED_BRANCH] &lt;span style="color: blue;"&gt;as&lt;/span&gt; LINKED29_0_1_, this_.[LINKED_CHEQUE_NAME] &lt;span style="color: blue;"&gt;as&lt;/span&gt; LINKED30_0_1_, b1_.[CHEQUE_ACTIVITY_ID] &lt;span style="color: blue;"&gt;as&lt;/span&gt; CHEQUE1_1_0_&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;         , b1_.[CHEQUE_ID] &lt;span style="color: blue;"&gt;as&lt;/span&gt; CHEQUE2_1_0_, b1_.[ACTIVITY_TYPE_ID] &lt;span style="color: blue;"&gt;as&lt;/span&gt; ACTIVITY3_1_0_, b1_.[Status] &lt;span style="color: blue;"&gt;as&lt;/span&gt; Status4_1_0_, b1_.[REJECTION_REASON_ID] &lt;span style="color: blue;"&gt;as&lt;/span&gt; REJECTION5_1_0_, b1_.[IS_OVERDRAW] &lt;span style="color: blue;"&gt;as&lt;/span&gt; IS6_1_0_, b1_.[TRANSFER_AMOUNT] &lt;span style="color: blue;"&gt;as&lt;/span&gt; TRANSFER7_1_0_, b1_.[Description] &lt;span style="color: blue;"&gt;as&lt;/span&gt; Descript8_1_0_, b1_.[ACTIVITY_DATETIME] &lt;span style="color: blue;"&gt;as&lt;/span&gt; ACTIVITY9_1_0_, b1_.[USER_ID] &lt;span style="color: blue;"&gt;as&lt;/span&gt; USER10_1_0_, b1_.[ACCOUNT_NUMBER] &lt;span style="color: blue;"&gt;as&lt;/span&gt; ACCOUNT11_1_0_&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;         , b1_.[UserId] &lt;span style="color: blue;"&gt;as&lt;/span&gt; UserId12_1_0_ &lt;span style="color: blue;"&gt;FROM&lt;/span&gt; [CPS_CHEQUE] this_ &lt;span style="color: blue;"&gt;inner&lt;/span&gt; &lt;span style="color: blue;"&gt;join&lt;/span&gt; [CPS_CHEQUE_ACTIVITY] b1_ &lt;span style="color: blue;"&gt;on&lt;/span&gt; this_.[CHEQUE_ID]=b1_.[CHEQUE_ID] &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;li&gt;Hard to get session management right if used in non-typical environments ( read non webapps ) &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Not suited for apps without a clean domain object model ( no all apps in world dont need clean domain object models) . &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Have to jump through hoops if you have badly designed ( legacy ) db schema. &lt;/li&gt;

&lt;/ul&gt;You might find this interesting to know that, NHibernate is also marketed by the term “multi-database support”; this means, you *can* move from one engine to another (from SQL Server to Oracle); &lt;b&gt;&lt;u&gt;but&lt;/u&gt;&lt;/b&gt; this does not mean that you can connect to both the databases at a time. For instance, query from Oracle and save into the SQL Server; for this you will have to create another set of configuration file!&lt;br /&gt;
&lt;br /&gt;
&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 741px;"&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;td width="65"&gt;&lt;/td&gt; &lt;td width="205"&gt;&lt;b&gt;&lt;/b&gt;&lt;/td&gt; &lt;td width="123"&gt;&lt;b&gt;ADO.NET&lt;/b&gt;&lt;/td&gt; &lt;td width="347"&gt;&lt;b&gt;Nhibernate&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td width="65"&gt;&lt;b&gt;Test #&lt;/b&gt;&lt;/td&gt; &lt;td width="205"&gt;&lt;b&gt;Operation&lt;/b&gt;&lt;/td&gt; &lt;td width="123"&gt;&lt;b&gt;Time (ms)&lt;/b&gt;&lt;/td&gt; &lt;td width="347"&gt;&lt;b&gt;NH&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td width="65"&gt;1&lt;/td&gt; &lt;td width="205"&gt;100 Reads&lt;/td&gt; &lt;td width="123"&gt;000.609&lt;/td&gt; &lt;td width="347"&gt;000.859&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td width="65"&gt;2&lt;/td&gt; &lt;td width="205"&gt;100 Reads - 3 Joins&lt;/td&gt; &lt;td width="123"&gt;001.844&lt;/td&gt; &lt;td width="347"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: x-small;"&gt;Couldnt apply 3 level join in HQL! ツ&lt;/span&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td width="65"&gt;3&lt;/td&gt; &lt;td width="205"&gt;100 Inserts&lt;/td&gt; &lt;td width="123"&gt;000.422&lt;/td&gt; &lt;td width="347"&gt;000.516&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td width="65"&gt;4&lt;/td&gt; &lt;td width="205"&gt;100 Updates&lt;/td&gt; &lt;td width="123"&gt;000.109&lt;/td&gt; &lt;td width="347"&gt;000.078&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td width="65"&gt;5&lt;/td&gt; &lt;td width="205"&gt;100 Reads - 1 Join&lt;/td&gt; &lt;td width="123"&gt;000.328&lt;/td&gt; &lt;td width="347"&gt;000.781&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;a href="http://lh6.ggpht.com/_r-Q5M_GfhZo/Tbxyoof7c7I/AAAAAAAAASA/bO2o6Ikgtzo/s1600-h/image%5B9%5D.png"&gt;&lt;img alt="image" border="0" height="194" src="http://lh5.ggpht.com/_r-Q5M_GfhZo/TbxypSh78cI/AAAAAAAAASE/ttuFp25lMmQ/image_thumb%5B7%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="image" width="644" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;b&gt;&lt;i&gt;FIG1: ADO.NET vs NHibernate&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Happy coding!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-4093644049577292820?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/mEoFZJi-JXk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/4093644049577292820/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/04/nhibernate-good-bad-and-ugly-that-it.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/4093644049577292820?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/4093644049577292820?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/mEoFZJi-JXk/nhibernate-good-bad-and-ugly-that-it.html" title="NHibernate – The Good, the Bad, and the Ugly, that it gets!" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_r-Q5M_GfhZo/TbxypSh78cI/AAAAAAAAASE/ttuFp25lMmQ/s72-c/image_thumb%5B7%5D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/04/nhibernate-good-bad-and-ugly-that-it.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcHQHg5fSp7ImA9WhZXEko.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-451165156097891378</id><published>2011-04-19T00:53:00.001-07:00</published><updated>2011-05-01T11:20:31.625-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-01T11:20:31.625-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="C# 4.0" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="API" /><category scheme="http://www.blogger.com/atom/ns#" term="Persistent Dictionary" /><category scheme="http://www.blogger.com/atom/ns#" term="framework" /><category scheme="http://www.blogger.com/atom/ns#" term="Question" /><category scheme="http://www.blogger.com/atom/ns#" term="interview" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Persistent Dictionary</title><content type="html">Key Features:&lt;br /&gt;
A data structure implementation similar to Dictionary in .NET. &lt;br /&gt;
- Writes objects to file system to preserve the memory &lt;br /&gt;
- Hold keys/locations in memory &lt;br /&gt;
- Retrieves any object by passing key in less than five milliseconds&lt;br /&gt;
Output, with 10000 inserts/updates/deletes:&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_r-Q5M_GfhZo/Ta0_bOGy-XI/AAAAAAAAARY/TOdLWf27go0/s1600-h/image%5B2%5D.png"&gt;&lt;img alt="image" border="0" height="161" src="http://lh6.ggpht.com/_r-Q5M_GfhZo/Ta0_c451yvI/AAAAAAAAARc/tf6Cy74YKJ4/image_thumb.png?imgmax=800" style="border-width: 0px; display: inline;" title="image" width="244" /&gt;&lt;/a&gt; &lt;br /&gt;
Memory profiling:&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/_r-Q5M_GfhZo/Ta0_eP1brHI/AAAAAAAAARg/EQL-JiSXs4c/s1600-h/image%5B5%5D.png"&gt;&lt;img alt="image" border="0" height="134" src="http://lh6.ggpht.com/_r-Q5M_GfhZo/Ta0_gj7GWoI/AAAAAAAAARk/ZWyEQ6AZrdk/image_thumb%5B1%5D.png?imgmax=800" style="border-width: 0px; display: inline;" title="image" width="244" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; height: 224px; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.48%;"&gt;&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (CPersistentDictionary lst = &lt;span style="color: blue;"&gt;new&lt;/span&gt; CPersistentDictionary(@"C:\persist.kkhan"))&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;     Stopwatch timer = &lt;span style="color: blue;"&gt;new&lt;/span&gt; Stopwatch();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color: green;"&gt;//1. Insert/update items&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color: blue;"&gt;int&lt;/span&gt; threshold = 10000;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;     timer.&lt;span style="color: blue;"&gt;Start&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; threshold; i++)&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;         lst.&lt;span style="color: blue;"&gt;Add&lt;/span&gt;("Counter" + i.ToString(), i.ToString());&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt;     timer.Stop();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt;     Console.WriteLine("Items processed(&lt;span style="color: blue;"&gt;add&lt;/span&gt;):{0}", threshold);&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt;     Console.WriteLine("&lt;span style="color: blue;"&gt;Time&lt;/span&gt; elapsed &lt;span style="color: blue;"&gt;in&lt;/span&gt; (ms):{0}  ({1} secs)", timer.ElapsedMilliseconds, TimeSpan.FromMilliseconds(timer.ElapsedMilliseconds).Seconds);&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum17" style="color: #606060;"&gt;  17:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum18" style="color: #606060;"&gt;  18:&lt;/span&gt;     &lt;span style="color: green;"&gt;//2. Read items&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum19" style="color: #606060;"&gt;  19:&lt;/span&gt;     timer.&lt;span style="color: blue;"&gt;Start&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum20" style="color: #606060;"&gt;  20:&lt;/span&gt;     &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; threshold; i++)&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum21" style="color: #606060;"&gt;  21:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum22" style="color: #606060;"&gt;  22:&lt;/span&gt;         var o = lst["Counter" + i.ToString()];&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum23" style="color: #606060;"&gt;  23:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum24" style="color: #606060;"&gt;  24:&lt;/span&gt;     timer.Stop();&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum25" style="color: #606060;"&gt;  25:&lt;/span&gt;     Console.WriteLine("Items processed(&lt;span style="color: blue;"&gt;read&lt;/span&gt;):{0}", threshold);&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum26" style="color: #606060;"&gt;  26:&lt;/span&gt;     Console.WriteLine("&lt;span style="color: blue;"&gt;Time&lt;/span&gt; elapsed &lt;span style="color: blue;"&gt;in&lt;/span&gt; (ms):{0}  ({1} secs)", timer.ElapsedMilliseconds, TimeSpan.FromMilliseconds(timer.ElapsedMilliseconds).Seconds);&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum27" style="color: #606060;"&gt;  27:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum28" style="color: #606060;"&gt;  28:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum29" style="color: #606060;"&gt;  29:&lt;/span&gt;     &lt;span style="color: green;"&gt;//3. Remove items&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum30" style="color: #606060;"&gt;  30:&lt;/span&gt;     timer.&lt;span style="color: blue;"&gt;Start&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum31" style="color: #606060;"&gt;  31:&lt;/span&gt;     &lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; threshold; i++)&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum32" style="color: #606060;"&gt;  32:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum33" style="color: #606060;"&gt;  33:&lt;/span&gt;         lst.Remove("Counter" + i.ToString());&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum34" style="color: #606060;"&gt;  34:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum35" style="color: #606060;"&gt;  35:&lt;/span&gt;     timer.Stop();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum36" style="color: #606060;"&gt;  36:&lt;/span&gt;     Console.WriteLine("Items processed(Remove):{0}", threshold);&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum37" style="color: #606060;"&gt;  37:&lt;/span&gt;     Console.WriteLine("&lt;span style="color: blue;"&gt;Time&lt;/span&gt; elapsed &lt;span style="color: blue;"&gt;in&lt;/span&gt; (ms):{0}  ({1} secs)", timer.ElapsedMilliseconds, TimeSpan.FromMilliseconds(timer.ElapsedMilliseconds).Seconds);&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum38" style="color: #606060;"&gt;  38:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum39" style="color: #606060;"&gt;  39:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum40" style="color: #606060;"&gt;  40:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum41" style="color: #606060;"&gt;  41:&lt;/span&gt;     Console.ReadKey();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum42" style="color: #606060;"&gt;  42:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&amp;nbsp;&lt;a href="http://persistentdictionary.codeplex.com/" title="http://persistentdictionary.codeplex.com"&gt;http://persistentdictionary.codeplex.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-451165156097891378?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/0_xOpr_zdtE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/451165156097891378/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/04/persistent-dictionary.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/451165156097891378?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/451165156097891378?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/0_xOpr_zdtE/persistent-dictionary.html" title="Persistent Dictionary" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_r-Q5M_GfhZo/Ta0_c451yvI/AAAAAAAAARc/tf6Cy74YKJ4/s72-c/image_thumb.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/04/persistent-dictionary.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIBRn89cCp7ImA9WhZQEUw.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-3873231354117361438</id><published>2011-04-18T00:46:00.001-07:00</published><updated>2011-04-18T00:59:17.168-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-18T00:59:17.168-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SELECT" /><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="ORACLE" /><category scheme="http://www.blogger.com/atom/ns#" term="CREATE TABLE" /><category scheme="http://www.blogger.com/atom/ns#" term="sql server" /><category scheme="http://www.blogger.com/atom/ns#" term="TSQL" /><category scheme="http://www.blogger.com/atom/ns#" term="POSTGRE" /><category scheme="http://www.blogger.com/atom/ns#" term="mySQL" /><title>CREATE TABLE FROM SELECT STAR</title><content type="html">This answers the questions:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;How to create a new table(on the fly) out of a query result?&lt;/li&gt;
&lt;li&gt;How to copy schema into a new table out of a query result? &lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;SQL Server:&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt; &lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; * &lt;span style="color: blue;"&gt;INTO&lt;/span&gt; NEW_TABLE &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;  &lt;span style="color: blue;"&gt;FROM&lt;/span&gt; SOURCE_TABLE &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;mySQL:&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;br /&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color: blue;"&gt;TABLE&lt;/span&gt; NEW_TABLE &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;  &lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; * &lt;span style="color: blue;"&gt;FROM&lt;/span&gt; SOURCE_TABLE; &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Oracle:&lt;/b&gt;&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;br /&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; * &lt;span style="color: blue;"&gt;INTO&lt;/span&gt; NEW_TABLE&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;  &lt;span style="color: blue;"&gt;FROM&lt;/span&gt; SOURCE_TABLE &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
or&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;br /&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; Col1, Col2, Col_n &lt;span style="color: blue;"&gt;INTO&lt;/span&gt; NEW_TABLE&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;  &lt;span style="color: blue;"&gt;FROM&lt;/span&gt; SOURCE_TABLE &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Postgre SQL:&lt;/b&gt;&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;br /&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;CREATE&lt;/span&gt; &lt;span style="color: blue;"&gt;TABLE&lt;/span&gt; NEW_TABLE&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;  &lt;span style="color: blue;"&gt;AS&lt;/span&gt; &lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; * &lt;span style="color: blue;"&gt;FROM&lt;/span&gt; SOURCE_TABLE;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
Note, you can always use &lt;b&gt;WHERE 1=0&lt;/b&gt;&amp;nbsp; if you want to &lt;u&gt;copy only schema&lt;/u&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/_r-Q5M_GfhZo/TavsWjOUjtI/AAAAAAAAARQ/OXrWmH87r2k/s1600-h/exploits_of_a_mom%5B6%5D.png"&gt;&lt;img alt="exploits_of_a_mom" border="0" src="http://lh5.ggpht.com/_r-Q5M_GfhZo/TavsYRqsbZI/AAAAAAAAARU/vlfk9Zu_HyI/exploits_of_a_mom_thumb%5B4%5D.png?imgmax=800" style="border: 0px none; display: inline;" title="exploits_of_a_mom" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-3873231354117361438?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/i9mMEsJbyKE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/3873231354117361438/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/04/create-table-from-select-star.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/3873231354117361438?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/3873231354117361438?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/i9mMEsJbyKE/create-table-from-select-star.html" title="CREATE TABLE FROM SELECT STAR" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_r-Q5M_GfhZo/TavsYRqsbZI/AAAAAAAAARU/vlfk9Zu_HyI/s72-c/exploits_of_a_mom_thumb%5B4%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/04/create-table-from-select-star.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08MQ3o_fip7ImA9WhZRFUw.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-515381141772841322</id><published>2011-04-10T23:00:00.001-07:00</published><updated>2011-04-11T01:51:22.446-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-11T01:51:22.446-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="C# 4.0" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Concepts" /><category scheme="http://www.blogger.com/atom/ns#" term="Generics" /><category scheme="http://www.blogger.com/atom/ns#" term="Covariance" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Contravariance" /><title>Covariance and Contravariance</title><content type="html">Covariance is when an object that is instantiated with a more derived type is assigned to an object that is instantiated with a less derived type.  &lt;br /&gt;
For instance, &lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; height: 39px; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; IEnumerable&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt; strings = &lt;span style="color: blue;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(); &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
The assignment compatibility is preserved. Know that: &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Invariant&lt;/b&gt; means, must use the exact type – be ‘in’ or ‘out’ &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Covariant&lt;/b&gt; means, parameter type can be of a derived class type; upcast’able; more specific to more general. Specified as output types: return types, 'out' params, get properties. Array types fall in this category. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Contravariant&lt;/b&gt; is opposite of covariance. Parameter type can be a parent class type; downcast'able; more general to specific type. Use base type where a child type was expected. Specified as input types: set, 'in' parameters, etc. &lt;br /&gt;
&lt;br /&gt;
Covariance and contravariance (or simply “variance”) are advanced concepts. The motivation behind introducing and enhancing &lt;a href="http://msdn.microsoft.com/en-us/library/dd799517.aspx"&gt;variance in C# was to allow generic interface and generic types&lt;/a&gt; (in particular, those defined in the Framework, such as &lt;span style="font-family: Courier New;"&gt;IEnumerable&amp;lt;T&amp;gt;()&lt;/span&gt; to work &lt;i&gt;more as we would expect&lt;/i&gt;. &lt;br /&gt;
&lt;br /&gt;
Conventionally, array types are covariant. This means that X can be cast to Y if X subclasses Y. For instance:&lt;br /&gt;
&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; height: 57px; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;br /&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; Bear[] bears = &lt;span style="color: blue;"&gt;new&lt;/span&gt; Bear[3];&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; Animal[] animals = bears; // OK&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
The downside of this reusability is that element assignments can fail at &lt;u&gt;runtime&lt;/u&gt;: &lt;br /&gt;
&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; height: 58px; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;br /&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; animals[0] = &lt;span style="color: blue;"&gt;new&lt;/span&gt; Camel(); &lt;span style="color: green;"&gt;// Runtime error. Why, because Animal class is &lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; //expecting Bears, notCamels!&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
Covariance (and contra variance) in interfaces is something that you typically &lt;i&gt;consume&lt;/i&gt;: it’s less common that you need to &lt;i&gt;write &lt;/i&gt;variant interfaces. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;See following example:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; height: 224px; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.86%;"&gt;&lt;br /&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: green;"&gt;//Base type&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; Car { &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; name = &lt;span style="color: #006080;"&gt;"Base car"&lt;/span&gt;; } &lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt; &lt;span style="color: green;"&gt;//Sub type&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; Honda : Car { &lt;span style="color: blue;"&gt;public&lt;/span&gt; Honda() { name = &lt;span style="color: #006080;"&gt;"Specific car: &lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt; Honda"; } } &lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; Program&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;  &lt;span style="color: blue;"&gt;delegate&lt;/span&gt; T Func&amp;lt;&lt;span style="color: blue;"&gt;out&lt;/span&gt; T&amp;gt;(); &lt;span style="color: green;"&gt;/*Covariant; remember? Specified as 'out'put types*/&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Action&amp;lt;&lt;span style="color: blue;"&gt;in&lt;/span&gt; T&amp;gt;(T a);&lt;span style="color: green;"&gt;/*Contravariant; Specified as 'in'put types!*/&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt;  &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color: blue;"&gt;string&lt;/span&gt;[] &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt; args)&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt;  {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt;  &lt;span style="color: green;"&gt;// Example: Covariance&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum17" style="color: #606060;"&gt;  17:&lt;/span&gt;  Func&amp;lt;Honda&amp;gt; child1 = () =&amp;gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; Honda();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum18" style="color: #606060;"&gt;  18:&lt;/span&gt;  Func&amp;lt;Car&amp;gt; parent1 = child1; &lt;span style="color: green;"&gt;//Assignment compatibility is preserved &lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum19" style="color: #606060;"&gt;  19:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum20" style="color: #606060;"&gt;  20:&lt;/span&gt;  &lt;span style="color: green;"&gt;// Example: Contravariance&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum21" style="color: #606060;"&gt;  21:&lt;/span&gt;  Action&amp;lt;Car&amp;gt; parent2 = (someArgs) =&amp;gt; { Console.WriteLine(someArgs.name); };&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum22" style="color: #606060;"&gt;  22:&lt;/span&gt;  Action&amp;lt;Honda&amp;gt; child2 = parent2;&lt;span style="color: green;"&gt;//Assignment compatibility is maintained &lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum23" style="color: #606060;"&gt;  23:&lt;/span&gt;  child2(&lt;span style="color: blue;"&gt;new&lt;/span&gt; Honda());&lt;span style="color: green;"&gt;//Prints, Specific car: Honda &lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum24" style="color: #606060;"&gt;  24:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum25" style="color: #606060;"&gt;  25:&lt;/span&gt; Console.ReadKey();&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum26" style="color: #606060;"&gt;  26:&lt;/span&gt;  }&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum27" style="color: #606060;"&gt;  27:&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
The type system is free to allow us to safely upcast and downcast between those interfaces in the direction indicated by the keyword. You might like exploring more &lt;a href="http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;blockquote&gt;It's really not a "save the day" sort of feature. It's more of a "it works the way I expect it to" feature - &lt;a href="http://stackoverflow.com/questions/3581453/examples-of-good-real-life-use-cases-for-covariance-and-contravariance-in-c-4-0/3593669#3593669"&gt;Eric Lippert&lt;/a&gt;&lt;/blockquote&gt;Enjoy, variants in life! (0:&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-515381141772841322?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/yGkx5Rd11PU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/515381141772841322/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/04/covariance-and-contravariance.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/515381141772841322?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/515381141772841322?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/yGkx5Rd11PU/covariance-and-contravariance.html" title="Covariance and Contravariance" /><author><name>KMan</name><email>noreply@blogger.com</email></author><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/04/covariance-and-contravariance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8GRn87eCp7ImA9WhZXEko.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-1522422090771708385</id><published>2011-04-07T23:53:00.000-07:00</published><updated>2011-05-01T11:17:07.100-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-01T11:17:07.100-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Slow" /><category scheme="http://www.blogger.com/atom/ns#" term="Developer Resources" /><category scheme="http://www.blogger.com/atom/ns#" term="Mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="XDE.exe" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7 Developer Tools" /><category scheme="http://www.blogger.com/atom/ns#" term="Howto" /><category scheme="http://www.blogger.com/atom/ns#" term="WM7 Emulator" /><category scheme="http://www.blogger.com/atom/ns#" term="XDELauncher.EXE" /><category scheme="http://www.blogger.com/atom/ns#" term="WP7" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows XP" /><title>Will I ever be able run windows phone 7 on windows xp machine?</title><content type="html">This post answers the following questions:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;How to run Windows Phone Development Tools on Windows XP?&lt;/li&gt;
&lt;li&gt;How to run install windows phone developer resources on windows xp?&lt;/li&gt;
&lt;li&gt;XDELauncher.EXE vs XDE.exe?&lt;/li&gt;
&lt;/ul&gt;I tried running windows phone 7 development environment from an xp machine. Amazing! the windows phone 7 developer phone would not install on xp machine, in the first place.&lt;br /&gt;
&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
When you download a windows phone 7 online installation executable (vm_web.exe) and double click the file, it throws an error saying that a better OS is required, which means a Windows 7 or Vista.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-K9CrCLPFTAE/TZ6uNu848AI/AAAAAAAAAPw/584upgNkrZI/s1600/Windows%2BPhone%2B7%2BError.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-K9CrCLPFTAE/TZ6uNu848AI/AAAAAAAAAPw/584upgNkrZI/s400/Windows%2BPhone%2B7%2BError.JPG" width="367" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Dint work!&lt;br /&gt;
&lt;br /&gt;
Then I thought that I should download the .ISO (WPDT_RTM_en1.iso); and may be I get lucky to find the exact files that required installation.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.j2i.net/BlogEngine/post/2010/08/17/Running-the-Windows-Phone-Dev-Tools-on-Windows-XP.aspx"&gt;This helped&lt;/a&gt; digging in more, and was able to find in the extracted files, a folder named WindowsPhone inside WCU folder. Installed XNA Game Studio, and Expression Blend without a glitch. What did not work was WindowsPhoneDeveloperResources_en.msi; it did not install. Same error, a better OS is required.&lt;br /&gt;
&lt;br /&gt;
I was able to see the windows phone templates in visual studio 2010 professional; that kept on throwing the error that it &lt;i&gt;&lt;b&gt;requires windows phone developer resources&lt;/b&gt;&lt;/i&gt;!&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;
Dint work!&lt;br /&gt;
&lt;br /&gt;
Some how I still was sure that I'd be able to run the windows phone 7 application on a windows xp machine.&lt;br /&gt;
&lt;br /&gt;
I tried installing Visual Studio 2010 Ultimate; and bang! it did the trick (0:&lt;br /&gt;
&lt;br /&gt;
But wait! &lt;br /&gt;
&lt;br /&gt;
I get this compilation error which says, Device Emulator is not detected. Install the Device Emulator.   &lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-k72Fs3h31OI/TZ6vJV6wNEI/AAAAAAAAAQA/t4Ye0VYpUSI/s1600/Windows%2BPhone%2B7%2BDevice%2BEmulator%2Bis%2Bnot%2Bdetected.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://2.bp.blogspot.com/-k72Fs3h31OI/TZ6vJV6wNEI/AAAAAAAAAQA/t4Ye0VYpUSI/s400/Windows%2BPhone%2B7%2BDevice%2BEmulator%2Bis%2Bnot%2Bdetected.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Woohoo!!! &lt;br /&gt;
&lt;br /&gt;
And this happiness turned in to a nightmare when I tried lauching the WP7 emulator (XDELauncher.exe, found in \Program Files\Microsoft SDKs\Windows Phone\v7.0\Tools\XDE Launcher); and un/fortunately, it did not run. I click on it, it seems that it runs, but it does not. When you click on the file, the program ends, it seems, before it starts!&lt;br /&gt;
&lt;br /&gt;
Dint work!&lt;br /&gt;
&lt;br /&gt;
I still, "had" some hope... so I asked my friend google; but to my surprise it responded me with zero result set.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ph584hR74JU/TZ6vk1X9aGI/AAAAAAAAAQI/AyZ-NtMoTR0/s1600/Google%2Bsearch%2Bfor%2Bxdelauncher.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="272" src="http://1.bp.blogspot.com/-ph584hR74JU/TZ6vk1X9aGI/AAAAAAAAAQI/AyZ-NtMoTR0/s400/Google%2Bsearch%2Bfor%2Bxdelauncher.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Ah ha! (made me scratch my skull)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://forums.create.msdn.com/forums/p/67398/412433.aspx#412433"&gt;It turned out&lt;/a&gt; not many people know about the XDELauncher.exe. And it seems that in Windows 7, XDELauncher.exe is called XDE.exe.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://social.msdn.microsoft.com/Forums/en-GB/windowsphone7series/thread/bd63b265-50d9-4d36-9508-716759919ee0"&gt;Here&lt;/a&gt;, another one like myself tried a different method of installation which "did" work! But, not really worked! (0:&lt;br /&gt;
&lt;br /&gt;
The emulator requires:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;DirectX 10&lt;/li&gt;
&lt;li&gt;WDDM Driver&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Both of which do not exists on Windows XP. Installing DirectX 10 also did not work.&lt;br /&gt;
&lt;br /&gt;
Dint work!&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://connect.microsoft.com/VisualStudio/feedback/details/557004/windows-phone-7-tools-and-emulator-for-windows-xp"&gt;This issue&lt;/a&gt; was raised on Microsoft Connect on May/4/2010; currently in "&lt;b&gt;Review&lt;/b&gt;" status, with only 1 vote for it! Sounds like windows xp is scrap already. What will those do whos "corporate standard" is still Windows XP.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://stackoverflow.com/questions/2783759/can-the-windows-phone-7-series-emulator-be-made-to-run-on-windows-xp/2962126#2962126"&gt;From another&lt;/a&gt;, more into "mobile-dev" says:&lt;br /&gt;
&lt;blockquote&gt;"I work for a large mobile silicon vendor with many, many developers working on WP7. Our corporate standard is Windows XP, and I can promise you that a bunch of very bright people have spent a lot of time trying to get this to work."&lt;/blockquote&gt;&lt;br /&gt;
It seems, even if you are able to install and run the WP7 app successfully, you cannot guarantee that it will run smoothly everywhere. The hacked/cracked environment&amp;nbsp; that you will setup will be full of surprises. (0:&lt;br /&gt;
&lt;br /&gt;
Btw, if you "still" want a workaround while staying on XP - get a VM! I created a virtual (VMWare) environment with windows 7, visual studio 2010 ultimate, and windows phone 7 developer tools - Just need to see if it works!&lt;br /&gt;
&lt;br /&gt;
I'll post an update as soon as I deploy my first app on Windows Phone 7 App Store.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Update 2011/APR/21:&lt;/b&gt;&lt;/u&gt; (for those who are interested)&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;"Running Windows Phone developer edition in Virtual Machine is not supported".&lt;/b&gt;&lt;/i&gt; Yep, damn!&lt;br /&gt;
&lt;br /&gt;
From &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/windowsphone7series/thread/5c67cd6f-a221-4975-8479-8904a52c8366/"&gt;MSDN Forums&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;"Running Windows Phone developer edition in Virtual Machine is not supported. Windows Phone Developer Edition is supported on physical machine"&lt;/blockquote&gt;Emulator during its boot checks whether HW virtualiztion is enabled or not. If enabled and is available, it will enable it for its VM. My guess is that the VMWare VM driver must be tripping when the query is invoked. I will follow up with development team for possible solutions to fix this. For the current drop, please do not have active VM when launching the Emulator.&lt;br /&gt;
&lt;br /&gt;
You might also enjoy &lt;a href="http://stackoverflow.com/questions/2878307/windows-phone-7-emulator-on-a-vm/2878375#2878375"&gt;this discussion&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-1522422090771708385?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/kMNF6sM7Zr4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/1522422090771708385/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/04/will-i-ever-be-able-run-windows-phone-7.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/1522422090771708385?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/1522422090771708385?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/kMNF6sM7Zr4/will-i-ever-be-able-run-windows-phone-7.html" title="Will I ever be able run windows phone 7 on windows xp machine?" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-K9CrCLPFTAE/TZ6uNu848AI/AAAAAAAAAPw/584upgNkrZI/s72-c/Windows%2BPhone%2B7%2BError.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/04/will-i-ever-be-able-run-windows-phone-7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8CRnY7fCp7ImA9WhZREEo.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-5421127227281482141</id><published>2011-04-06T00:23:00.000-07:00</published><updated>2011-04-06T00:27:47.804-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-06T00:27:47.804-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows 2003 Server" /><category scheme="http://www.blogger.com/atom/ns#" term="DOS" /><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="MOVE.exe" /><category scheme="http://www.blogger.com/atom/ns#" term="Delete" /><category scheme="http://www.blogger.com/atom/ns#" term="Copy" /><category scheme="http://www.blogger.com/atom/ns#" term="FC" /><title>DOS Move command doesn't work on Windows 2003 Server?</title><content type="html">MOVE command doesnt work in Windows 2003 Server; workaround?&lt;br /&gt;
&lt;br /&gt;
To emulate the process, we can &lt;a href="http://en.wikipedia.org/wiki/Batch_file"&gt;create a batch file&lt;/a&gt; and:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/copy.mspx"&gt;Copy&lt;/a&gt; the file to new folder&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/del.mspx?mfr=true"&gt;Verify&lt;/a&gt; the copied file&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/del.mspx?mfr=true"&gt;Delete&lt;/a&gt; the file from old folder&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;pre class="Cpp" name="code"&gt;@echo off

echo -----------------------------------------
ECHO File Move Utility for Windows 2003 Server
echo -----------------------------------------

set /p loc1= Copy From location 1: 
set /p loc2= Copy To location 2: 

@echo Copying...
copy /b "%loc1%" "%loc2%"

@echo Validating...
fc /b "%loc2%"  "%loc1%" |find /i "Ditto" &amp;gt; nul

@echo Cleaning...
if not errorlevel 1 del /f "%loc1%"

@echo Logging...
if not errorlevel 1 &amp;gt;&amp;gt;"file.log" echo File copied successfully
if errorlevel 1 &amp;gt;&amp;gt;"file.log" echo Error removing file from "%loc1%"

@echo Complete.
&lt;/pre&gt;&lt;br /&gt;
&lt;i&gt;&lt;b&gt;A couple of gotchas to keep an eye on:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;You could have used the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;MOVE.EXE&lt;/span&gt; command if its available on your OS; move simply alters the folder information, which means it does not move the data. While &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;COPY.EXE&lt;/span&gt; may do. &lt;/li&gt;
&lt;li&gt;When you compare the file, it most probably compares the contents with disk cache. In order to test, you can copy the file on a flash drive, a pause for a while, pull out the flash drive, and then compare. If it does not look for the flash drive, this means the OS uses the cached version instead.&lt;/li&gt;
&lt;li&gt;Copy does not copy files that are 0 bytes long. Use &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;XCOPY.exe &lt;/span&gt;to copy these files. &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/4252428322984442391-5421127227281482141?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/WdNPQ9pWlVU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/5421127227281482141/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/04/dos-move-command-doesnt-work-on-windows.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/5421127227281482141?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/5421127227281482141?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/WdNPQ9pWlVU/dos-move-command-doesnt-work-on-windows.html" title="DOS Move command doesn't work on Windows 2003 Server?" /><author><name>KMan</name><email>noreply@blogger.com</email></author><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/04/dos-move-command-doesnt-work-on-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQBQXk4fip7ImA9WhZREUs.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-3844496689257554330</id><published>2011-03-29T11:54:00.000-07:00</published><updated>2011-04-07T01:02:30.736-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-07T01:02:30.736-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Environment" /><category scheme="http://www.blogger.com/atom/ns#" term="Pakistan" /><category scheme="http://www.blogger.com/atom/ns#" term="Green Computing" /><title>Why go green?</title><content type="html">This is an article that I wrote some time back for a well known Pakistani internet magazine, about green computing.&lt;br /&gt;
&lt;br /&gt;
This answers following questions:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;What is Green Computing?&lt;/li&gt;
&lt;li&gt;Why go green?&lt;/li&gt;
&lt;li&gt;Who is going green?&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
They say about Nature, the more the need is, the abundant is its quantity. Air is one of such instances.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;So, what is it?&lt;/b&gt; &lt;br /&gt;
To answer the question, it is a "way" to minimize the environmental pollution. But how would a computer harm the environment? You may ask. Well, how did you last dispose off your old 286 desktop pc along with a large 14 inch Cathode Ray Tube (CRT) monitor? I ask.&lt;br /&gt;
&lt;br /&gt;
You will either throw it, sell it to *raddi wala* for as low as 50 rupees, or give it away to your house maid who would "eventually" do the same thing as you did.&lt;br /&gt;
&lt;br /&gt;
And you might well find some garbage collector lads burning your monitor in the chilly mornings to warm their hands.&lt;br /&gt;
&lt;br /&gt;
Have you ever thought about how this pc ends up, and is processed by the Nitrogen Cycle?&lt;br /&gt;
&lt;br /&gt;
Severely dangerous gas is released when the plastic, silicon, mercury, etc is burnt; and to my surprise, some time back when I tried to burn my much fiddled/diddled oldest Cathode Ray Tube (CRT) computer monitor back in 1998, burns with a notable blast - reason being, some parts in the circuitry (specially capacitors) can hold high voltage of charges even when the component is turned off.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://this-old-hippie.com/wp-content/uploads/2010/01/goinggreenaroundtheoffice.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="263" src="http://this-old-hippie.com/wp-content/uploads/2010/01/goinggreenaroundtheoffice.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Now think about this; you are in-charge of computer labs in a large company having tens of labs equipped with several hundreds of computers and hardware equipments. To maintain a certain level of quality your management decided that you need to replace all; they mean ALL of your hardware with brand new machines. &lt;br /&gt;
&lt;br /&gt;
It may be easy for you to procure another couple of hundred pcs; but How, and where will you dispose off the existing ones?&lt;br /&gt;
&lt;br /&gt;
Try answering this question and you might understand. &lt;br /&gt;
&lt;br /&gt;
Even if you are able to find an online, offshored, Garbage collector; you've only "transferred" the direction of responsibility in question. But really, how do you think that Garbage collector will dispose off the crap. In case if you are thinking that the Garbage collector is going to reuse the workable components - there are three things that you must know:&lt;br /&gt;
&lt;br /&gt;
1. Old components, especially in computing industry, are just worthless from every aspect, selling or reusing. Or downgrade drastically.&lt;br /&gt;
&lt;br /&gt;
2. You may want to recycle those components, but remember not everything can be recycled; you must "produce" recycle'able components in order for them to be recycled.&lt;br /&gt;
&lt;br /&gt;
3. For the sake of making the point, let’s assume that "you must dispose" the hardware.&lt;br /&gt;
&lt;br /&gt;
Some believe that it is better to have passed on your computer to benefit someone else - this helps others.&lt;br /&gt;
&lt;br /&gt;
This avoids the environmental dangers of disposal in landfill or incinerators. But this "could" have been correct if the components could retain its original state of functionality. Many charities have recently imposed minimum system requirements for donated equipment.&lt;br /&gt;
&lt;br /&gt;
So, you might end up digging a hole somewhere near Gavadar so that no one would know. That’s exactly where the Green Computing comes in; it would stop you from doing so.&lt;br /&gt;
&lt;br /&gt;
A Malaysian Multimedia University professor, Dr San Murugesan, in his recent publication 'Harnessing Green IT: Principles and Practices', defines green computing as:&lt;br /&gt;
&lt;blockquote&gt;"The study and practice of designing, manufacturing, using, and disposing of computers, servers, and associated subsystems—such as monitors, printers, storage devices, and networking and communications systems—efficiently and effectively with minimal or no impact on the environment."&lt;/blockquote&gt;&lt;br /&gt;
&lt;b&gt;Who is doing what?&lt;/b&gt;&lt;br /&gt;
Companies are now producing environment friendly components; even with an extra extensible life cycle or those that could be disposed off easily. &lt;br /&gt;
&lt;br /&gt;
In Pakistan, the concept is relatively "still" new. There are a few technology companies who helped. Students of Karachi University, SZABIST are exploring the idea in their research projects.&lt;br /&gt;
&lt;br /&gt;
A joint venture of Lahore based software house FiveRivers Technologies, and ClearCube Technology provides extensive virtualization services. In India green computing is becoming more prevalent[2], WIPRO was the first company to go green in 2007. Bangladesh is already in the lines and trying to introduce the idea.&lt;br /&gt;
PCAdvisor ran a poll[5], that resulted in that, 45% of firms have green computing policy in UK.&lt;br /&gt;
&lt;br /&gt;
Recently people have started adding, you might have noticed, a green colored tree-and-road icon in the footer of email messages, discouraging the printing of email text unless necessary. That is a part of green computing concept.&lt;br /&gt;
&lt;br /&gt;
Several international certification(CompTIA Strata Green IT, for instance) programs have been introduced for managers, which show that they have good knowledge of green IT practices and methods and why it is important to incorporate them into an organization.&lt;br /&gt;
&lt;br /&gt;
According to Microsoft Research Labs the best practices [6] for sustainable architecture design includes:&lt;br /&gt;
• Reduced energy consumption&lt;br /&gt;
• Reduced operational costs for the data center and business&lt;br /&gt;
• Understand energy consumption and environmental impact.&lt;br /&gt;
• Build environmental sustainability into change and configuration management processes.&lt;br /&gt;
&lt;br /&gt;
This is where Cloud Computing plays an important part, where environment (including hardware, operating system, etc) is provided by the service (Virtualization, etc) provider; all you have to focus on is business. Cloud Computing was ranked top technology strategy by Gartner[3] for year 2010.&lt;br /&gt;
&lt;br /&gt;
There are quite a couple of companies providing virtualization services in Pakistan; and whole lot more in India.&lt;br /&gt;
&lt;br /&gt;
Government can play a vital role, by introducing laws and regulations to dispose such components. Govt can encourage garbage collector companies to get an international quality certification for waste disposal.&lt;br /&gt;
Provide help line 0800 numbers for public and corporate consumers so that they feel encouraged and comfortable disposing off the material.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How can I help?&lt;/b&gt;&lt;br /&gt;
Just remember the primary goal:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Discourage the make/use of hazardous components, and factory waste.&lt;/li&gt;
&lt;li&gt;Encourage the make/use of efficient, energy-aware, durable, recyclable components.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
If you are "just a guy" living next door, then don’t throw away the pc or hand it over to "help" someone - well just wait - wait till Mustafa Kamal installs the promised Waste Disposal and Management System.&lt;br /&gt;
Just so this may interest you, you better wipe your hard drive clean before disposing off - your data can be restored[4].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Peek More At:&lt;/b&gt;&lt;br /&gt;
• Going Green [http://www.time.com/time/goinggreen]&lt;br /&gt;
• Harnessing Green IT: Principles and Practices [http://www.computer.org/portal/web/csdl/doi/10.1109/MITP.2008.10]&lt;br /&gt;
• Green Computing [http://www.computing.co.uk/ctg/special/1814241/green-computing]&lt;br /&gt;
• Old Computer Disposal [http://www.intel.com/learn/practical-advice/computer-maintenance/green/old-computer-disposal]&lt;br /&gt;
• http://en.wikipedia.org/wiki/Green_computing&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;References:&lt;/b&gt;&lt;br /&gt;
[1]: http://jehanara.wordpress.com/2009/08/25/pakistan-tech-sector-helping-companies-to-go-green&lt;br /&gt;
[2]: http://www.businessweek.com/globalbiz/content/apr2009/gb20090413_237615.htm&lt;br /&gt;
[3]: http://www.gartner.com/it/page.jsp?id=1210613&lt;br /&gt;
[4]: http://www.which.co.uk/news/2009/01/smash-up-your-hard-drive-to-avoid-id-theft-166079/&lt;br /&gt;
[5]: http://www.pcadvisor.co.uk/news/index.cfm?newsId=3247127&lt;br /&gt;
[6]: Microsoft Research Labs [http://research.microsoft.com/pubs/78813/AJ18_EN.pdf]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-3844496689257554330?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/tNSI5zzvJwE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/3844496689257554330/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/03/what-is-green-computing.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/3844496689257554330?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/3844496689257554330?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/tNSI5zzvJwE/what-is-green-computing.html" title="Why go green?" /><author><name>KMan</name><email>noreply@blogger.com</email></author><thr:total>2</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/03/what-is-green-computing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIAR38_eyp7ImA9WhZSEEg.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-4811070314307996295</id><published>2011-03-25T05:00:00.000-07:00</published><updated>2011-03-25T05:02:26.143-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-25T05:02:26.143-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="interview" /><category scheme="http://www.blogger.com/atom/ns#" term="factorial" /><category scheme="http://www.blogger.com/atom/ns#" term="algorithm" /><title>Find trailing zeros in a factorial number</title><content type="html">How many zeros are at the end of "1000!" (one thousand factorial)?&lt;br /&gt;
&lt;br /&gt;
No cheating... calculator is not allowed! Btw, you cant calculate that, because of the &lt;br /&gt;
&lt;br /&gt;
I hope you are not thinking about multiplying all the numbers, are you?&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;N! = N x (N-1)!&lt;/div&gt;&lt;br /&gt;
The trick is around the the number Five(5).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;STEP 1:&lt;/b&gt; Divide the number by 5, and note down the remainder&lt;br /&gt;
&lt;b&gt;STEP 2:&lt;/b&gt; If the remainder is greater than 5, goto step 1&lt;br /&gt;
&lt;b&gt;STEP 3:&lt;/b&gt; Add all remainders&lt;br /&gt;
&lt;br /&gt;
Yep, thats it.&lt;br /&gt;
&lt;br /&gt;
Lets have an example.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Example 1: 6!&lt;/b&gt;&lt;br /&gt;
=&amp;gt; 6/5 = 1 (This means, expect one (1) trailing zero at the end of 6!)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Example 2: 10! &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
10/5 = 2 (Expect two zeros)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Example 3: 50!&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
50/5 = 10 &lt;br /&gt;
10/5 = 2&lt;br /&gt;
=&amp;gt; 10 + 2= 12 (Expect 12 trailing zeros)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Example 4: 100!&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
100/5 = 20&lt;br /&gt;
20/5 = 4&lt;br /&gt;
=&amp;gt; 20+4 (Expect 24 zeros)&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_vn8USmfGHWw/Sxl0SyFoVxI/AAAAAAAAAlw/FXwcTagfq2s/20091204factorial02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="333" src="http://2.bp.blogspot.com/_vn8USmfGHWw/Sxl0SyFoVxI/AAAAAAAAAlw/FXwcTagfq2s/20091204factorial02.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I am leaving &lt;a href="http://www.codeproject.com/KB/recipes/factorial.aspx"&gt;1000!&lt;/a&gt; as an exercise for the reader (0:&lt;br /&gt;
&lt;br /&gt;
Btw, no standard C data type can handle numbers this large. Unless you use some Mathlab library or your own code with some arbitrary data type restricted only to the available memory, you might be able to write a program. So, just find out the number of trailing zeros; and if you want to validate the answer using Calculator, try for 15!, 25!, 35!, etc...&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-4811070314307996295?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/I8FBXyoz5cA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/4811070314307996295/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/03/find-trailing-zeros-in-factorial-number.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/4811070314307996295?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/4811070314307996295?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/I8FBXyoz5cA/find-trailing-zeros-in-factorial-number.html" title="Find trailing zeros in a factorial number" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_vn8USmfGHWw/Sxl0SyFoVxI/AAAAAAAAAlw/FXwcTagfq2s/s72-c/20091204factorial02.PNG" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/03/find-trailing-zeros-in-factorial-number.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QHQ3k-eCp7ImA9WhZTGEQ.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-5832781424611734254</id><published>2011-03-23T09:55:00.000-07:00</published><updated>2011-03-23T09:55:32.750-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-23T09:55:32.750-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="answer" /><category scheme="http://www.blogger.com/atom/ns#" term="Question" /><category scheme="http://www.blogger.com/atom/ns#" term="interview" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="CLR" /><title>C++ Refresher Course - Interview Questions and Answers</title><content type="html">Refresh your C++ days! &lt;a href="http://www.uop.edu.jo/download/PdfCourses/Cplus/c++interviewquestions.pdf"&gt;This resource&lt;/a&gt; is not only an excellent resource to interview questions, I found the answers interesting enough to float your thoughts upon. Compiled by Dr. Fatih Kocan, Wael Kdouh, and Kathryn Patterson. Though, I am not sure how long this PDF is going to stay there.&lt;br /&gt;
&lt;br /&gt;
My first love "was" and "is" C++ - just that I have been unable to spend time with it since I switched to .NET development stack. The world of dots. While rest of the class was moving into the Java and qualifying for the certifications of UML, the challenge of understanding C++ attracted me more into it. Luckily I got a chance to learn more about C++ from a university senior, now in Microsoft, Haroon Ahmed. He was the inspiration that I wrote multilingual chat server in plain VC++ and made it to the AQ Khan Research Labs, an state level software development competition.&lt;br /&gt;
&lt;br /&gt;
In .NET, the emphasis is more on business, than the mere UI library that you had to create before developing your logic. Or everytime you start your Doc-View architected C++ application, you had to provide everything that would make your business logic work. And then move to business logic. More side-kick code was required to develop an app. And in .NET, seldom - very seldom, we find ourselves implementing the OnPaint, OnDraw, people do not know about the PreTranslateMessage(), yep I'm talking about VC++, WNDPROC, the DispatchMessage method. The power that VC++ brought with it - Absolute - the God Language.&lt;br /&gt;
&lt;br /&gt;
Plus, the concept of CLR; the .NET exe and dll aren't really exe/dll. They are just the intermediate language for the CLR that would JIT the .EXE/DLL and turn that into machine language. How easy it is to disassemble your code! that hurts. (0:&lt;br /&gt;
&lt;br /&gt;
Just so this may interests you, when a managed module is invoked, the OS(windows) "thinks" that its just another "normal"(win32) executable; then it tells the windows loader to load the file; the loader reads the idata section, and when it finds the reference of mscoree.dll, it knows that it now needs to load the managed module in CLR; and then eventually managed module's IL is JIT'ted(Just in time compilation) into native code; which means, MSCorEE.dll compiles IL to native CPU instructions. &lt;a href="http://izlooite.blogspot.com/2009/09/what-is-clr-metadata-in-managed-module.html#more"&gt;I wrote about it sometime ago&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
But still, if you are to develop a mission critical system, or software that does some real time process, or rendering realtime data, with zero delays, and zero compromise on performance - C++ is the way to go.&lt;br /&gt;
&lt;br /&gt;
Well, also, if you want more, for instance to know about STL, ATL, COM, DCOM development using VC++, check out the CODEGURU.com website. It has excellent, invaluable resources in their VC++ section.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-5832781424611734254?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/7rSYzI8jD9Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/5832781424611734254/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/03/c-refresher-course-interview-questions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/5832781424611734254?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/5832781424611734254?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/7rSYzI8jD9Y/c-refresher-course-interview-questions.html" title="C++ Refresher Course - Interview Questions and Answers" /><author><name>KMan</name><email>noreply@blogger.com</email></author><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/03/c-refresher-course-interview-questions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4DQX0_eyp7ImA9WhZTEks.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-2505786865118337246</id><published>2011-03-16T02:32:00.000-07:00</published><updated>2011-03-16T02:32:50.343-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-16T02:32:50.343-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CheckBoxList" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>How to get checked values out of a CheckBoxList?</title><content type="html">Have you ever thought of why exactly do you love custom extensions? Roll out one just for this case:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="Cpp" name="code"&gt;public static class ControlExtensions
{
    public static string GetCheckedValues(this CheckBoxList list)
    {
        return String.Join(",", list.Items.OfType&lt;listitem&gt;()
                                             .Where(s =&amp;gt; s.Selected)
                                             .Select(s =&amp;gt; s.Value).ToArray());
    }

}
&lt;/listitem&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://images1.hellotrade.com/data2/UE/TG/HTVENDOR-2026729/extension-springs-250x250.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="167" src="http://images1.hellotrade.com/data2/UE/TG/HTVENDOR-2026729/extension-springs-250x250.jpg" width="250" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Usage example, somewhere in ASP.NET MVC:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="Cpp" name="code"&gt;public ActionResult Index()
{
    CheckBoxList lst = new CheckBoxList();
    lst.Items.Add(new ListItem("one", "1"));
    lst.Items.Add(new ListItem("two", "2"));
    lst.Items.Add(new ListItem("three", "3"));
    lst.Items.Add(new ListItem("four", "4"));

    lst.Items[0].Selected = true;
    lst.Items[1].Selected = true;

    ViewData["Message"] = lst.GetCheckedValues();// Here.

    return View();
}
&lt;/pre&gt;&lt;br /&gt;
Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-2505786865118337246?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/WX-Y4CpyJwk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/2505786865118337246/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/03/how-to-get-checked-values-out-of.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/2505786865118337246?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/2505786865118337246?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/WX-Y4CpyJwk/how-to-get-checked-values-out-of.html" title="How to get checked values out of a CheckBoxList?" /><author><name>KMan</name><email>noreply@blogger.com</email></author><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/03/how-to-get-checked-values-out-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUARHw5eCp7ImA9WhZSGUw.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-5848986669513280266</id><published>2011-03-13T11:56:00.000-07:00</published><updated>2011-04-04T04:24:05.220-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-04T04:24:05.220-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="requirements" /><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="traceability" /><category scheme="http://www.blogger.com/atom/ns#" term="specifications" /><title>Top 10 answers to top 10 software requirements interview question</title><content type="html">This is a second post to the sequel to &lt;a href="http://profile.typepad.com/jurgenappelo"&gt;Jurgen Appelo&lt;/a&gt;’s blog &lt;a href="http://www.noop.nl/2009/01/100-interview-questions-for-software-developers.html"&gt;post&lt;/a&gt;, where he asks top 100 questions that a software developer should know.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Can you name a number of non-functional (or quality) requirements?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Anything that is not a direct requirement by the buyer. &lt;br /&gt;
&lt;br /&gt;
For instance, a buyer wants a software that periodically uploads an xml file to an FTP from a local directory. A functional requirement here is that system shall display a user interface that lists the files that have been transferred with date/time stamps and other information. &lt;br /&gt;
&lt;br /&gt;
But "how frequent" the software should upload the file, is non functional requirement. &lt;br /&gt;
&lt;br /&gt;
Similarly, the audit log modules that you write, and that “well known” archival windows service is a part of non functional requirement.&lt;br /&gt;
&lt;br /&gt;
The file to interact with the software and configure; that is, provide the folder path/location and xml files with valid format.&lt;br /&gt;
&lt;br /&gt;
Other non functional requirements, but not limited to, are Usability, that is user interactions with a system. How many times your customer will need to train the user? How complex is your user interface? What are you doing about drop down lists with more than 500+ items in it? Do you really expect your user to scroll down to 270th item using the mouse? (0; &lt;br /&gt;
&lt;br /&gt;
Think about it. &lt;br /&gt;
&lt;br /&gt;
What do you do? Provide the drop down list – as is? Provide a popup to find and select from? Or just provide a text box with “Find” button? Obviously, there the answer varies from situation to situation; But remember, anything that is interactive, intuitive for the user – is the best way to keep your user happy.&lt;br /&gt;
How about Security? Remember the SSO’s you have been integrating in all your web apps? Security is another non functional requirement.&lt;br /&gt;
&lt;br /&gt;
Performance (response time?), reliability (this may boil down to the service level agreements/support – MTTR, MTBF, etc), maintainability (life cycle costing), efficiency (memory consumption, leakages?), are a few such examples of non functional requirements.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. What is your advice when a customer wants high performance, high usability and high security?&lt;/b&gt;&lt;br /&gt;
Beware! The question is a fully loaded. I’ll &lt;a href="http://en.wikipedia.org/wiki/KISS_principle"&gt;KISS&lt;/a&gt; it according to the knowledge that I have (0:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;High performance&lt;/b&gt;: is a broad term. &lt;br /&gt;
&lt;br /&gt;
High performance computing, high performance storage system, high performance chassis (read: hardware specs); depending upon what exactly a buyer wants, your suggestion could be around the lines of: clustering, load balancing, mirroring, replication, fail over, segmentation; implementing RAID levels (for instance level 5 – being highest), SAM hardware, in-memory databases, etc.&lt;br /&gt;
&lt;br /&gt;
If talking about high performance programming technology, go for using C++; this provides close to real time processing.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;High usability: &lt;/b&gt;&lt;br /&gt;
This means, ease of use. Allow user to use their intuition about &lt;a href="http://www.useit.com/alertbox/9605.html"&gt;how software will work &lt;/a&gt;or react to a user action.&lt;br /&gt;
&lt;br /&gt;
Hire experienced user experience designers and have them research and come up with the best UI’s ever. What are you going to use most of the screen to display main content? How will you display menus and sidebars? Should they take up less space than the main content? How about when the screen goes to 800x600 from 1024 x 768? How your application will react to a range of internet browsers? Etc...&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.useit.com/alertbox/20021223_02_mistake.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.useit.com/alertbox/20021223_02_mistake.gif" width="241" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Conduct closely interacted rad/jad sessions with the customer; using iterative releases; fix font, color schemes, menus, bread-crumbs, action buttons, long lists, etc. Save your users from being &lt;a href="http://en.wikipedia.org/wiki/Principle_of_least_astonishment"&gt;POLA&lt;/a&gt;rized.&lt;br /&gt;
&lt;br /&gt;
Note that, the usability aspect is not only for software – it applies everywhere. Thinking about a mobile phone that has no button and you don’t know how to turn in on. Or a school bag that is a zipper inside out.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://blog.vkistudios.com/images//not%20usable.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://blog.vkistudios.com/images//not%20usable.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;High Security: &lt;/b&gt;&lt;br /&gt;
Depends upon the scenario and specific security requirements; if its non-repudiation security can be provided using SSL/transport level security, Client Certificates, PKI, TDES.&lt;br /&gt;
&lt;br /&gt;
Use a combination of cryptographic techniques, for instance, symmetric, asymmetric, and hashing algorithms – wherever whichever is applicable. &lt;br /&gt;
&lt;br /&gt;
Provide a solution of infrastructure that includes demilitarized zone (DMZ), encrypted transportation of data, fire walls, secure gateways, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.techrepublic.com/i/tr/cms/contentPics/5756029-DMZ-overview-B.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://www.techrepublic.com/i/tr/cms/contentPics/5756029-DMZ-overview-B.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
If from coding perspective, obfuscate your code; for instance .NET is almost an open source; so you will need to obfuscate your code in order to make it less prone to hack. Or use low level coding to keep the code to low level.&lt;br /&gt;
&lt;br /&gt;
Use a centralized security mechanism, for instance providing SSO for centralized authentication; encrypted data sources, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Can you name a number of different techniques for specifying requirements? What works best in which case?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Brainstorming, Focus Groups, Interface Analysis, Interview, Prototyping, Requirements Workshop, Reverse Engineering, Survey, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. What is a requirement tracing? What is backward tracing vs. forward tracing?&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://people.cis.ksu.edu/%7Ehankley/d841/Fa99/chap2.htm"&gt;Requirements tracing&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.jiludwig.com/Backward_Traceability_1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="173" src="http://www.jiludwig.com/Backward_Traceability_1.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;5. Which tools do you like to use for keeping track of requirements?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
There could be several ways to keep track of requirements. Make a software requirements specifications document to list all of the requirements and description.&lt;br /&gt;
&lt;br /&gt;
Prepare an excel sheet the list down the requirement, type, priority, dependency, etc.&lt;br /&gt;
&lt;a href="http://www.gartner.com/AnalystBiography?authorId=511"&gt;Matt Light&lt;/a&gt;, Research VP, Gartner says:&lt;br /&gt;
&lt;blockquote&gt;“Requirements management can be simplified if initial requirements definitions are captured in a database-based tool to enable collaborative review... traceability and versioning/change control”.&lt;/blockquote&gt;&lt;br /&gt;
Whatever you choose to maintain the list of the requirements, don’t forget the add that in your version control system.&lt;br /&gt;
&lt;br /&gt;
I love &lt;a href="http://en.wikipedia.org/wiki/Apache_Subversion"&gt;Subversion&lt;/a&gt;(+ &lt;a href="http://en.wikipedia.org/wiki/Tortoisesvn"&gt;TortoiseSvn &lt;/a&gt;+ &lt;a href="http://en.wikipedia.org/wiki/AnkhSVN"&gt;AnkhSvn &lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/Concurrent_Versions_System"&gt;Cvs &lt;/a&gt;is ok. &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/Git_%28software%29"&gt;Git &lt;/a&gt;is absolute.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;6. How do you treat changing requirements? Are they good or bad? Why?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Change denotes life. No change means – stagnant or dead. Therefore change is an essential part of “life” and of course software industry. &lt;br /&gt;
&lt;br /&gt;
Good or bad? Depends upon the sort of change. &lt;br /&gt;
&lt;br /&gt;
A change in decision by buyer to shut down the project may not be a good change for the seller. A change to add three more buildings in a residential complex may be a good change for the seller. &lt;br /&gt;
&lt;br /&gt;
How about the change, when a project, half way through using Oracle WebCenter as a base technology is decided to move to Microsoft Office SharePoint Server 2010?&lt;br /&gt;
Generally there is an Issue Control List(usually a Microsoft Excel Sheet?) also called Customer Issues and Changes List (CICL), containing date/time, request issuer, type of change(change request, bug, fix, etc),  priority, description, remarks, and the status of the issue.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;7. How do you search and find requirements? What are possible sources?&lt;/b&gt;&lt;br /&gt;
Stakeholders. &lt;br /&gt;
&lt;br /&gt;
User, customer, developer, manager, sponsor, functional manager, business, technology departments, etc. &lt;br /&gt;
&lt;br /&gt;
Note that even those shall be called stakeholders, who would “not” benefit from the project. How so? Because they “can” influence the management induce/reduce the scope of work or kill the project completely. For instance, you plan to install a payroll system in a bank; the bank personnel has been working in the administration departments for years (lets say 20+ years); and they “think” that after the installation of an electronic solution, company might decide to lay them off and keep only two or three employees. So, they might try any or all of the actions to shut this project down. In this case, these department personnel are one of the key stake holders to keep an eye on.&lt;br /&gt;
&lt;br /&gt;
Possible sources of finding requirements, besides stakeholders are, company’s historical records that may contain the experiences of similar projects, market research, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;8. How do you prioritize requirements? Do you know different techniques?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/Requirement_prioritization"&gt;Requirement prioritization&lt;/a&gt; is a process of formalizing and shifting focus on specific requirements. This includes gaining customer buy-in on prioritized requirements.&lt;br /&gt;
&lt;br /&gt;
Agile development methodologies takes into account the requirement prioritization; you prioritize, select the requirements that you want to rollout for this iteration, validate and release the your software.&lt;br /&gt;
&lt;br /&gt;
You will have to define some scale of prioritization based upon customer feedback. For instance, a customer may say that they want certain functionality first, and then they can come back on the user interface afterwards.&lt;br /&gt;
&lt;br /&gt;
Here is a &lt;a href="http://www.processimpact.com/articles/prioritizing.html"&gt;nice to read article&lt;/a&gt;, in case if you want to dig further.&lt;br /&gt;
&lt;br /&gt;
Classical (stakeholders do the prioritization), Exhaustive (all areas including minor ones), and Value Based (prioritization based upon ROI) are a few prioritization techniques.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;9. Can you name the responsibilities of the user, the customer and the developer in the requirements process?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
A simple responsibility assignment matrix can help. A list that contains and rest of the columns may contain the role name. For instance:&lt;br /&gt;
Role A: Project Sponsor &lt;br /&gt;
Role B: Project Manager &lt;br /&gt;
Role C: Business Analyst &lt;br /&gt;
Role D: System Analyst &lt;br /&gt;
Role E: Technical Architect &lt;br /&gt;
Role F: Programmer&lt;br /&gt;
Role N: Whatever that needs to be here&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-sYislzOmJzM/TX0JRR6oNaI/AAAAAAAAAPc/sG-4gV8X6hM/s1600/Responsibility+assignment+matrix.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="323" src="https://lh3.googleusercontent.com/-sYislzOmJzM/TX0JRR6oNaI/AAAAAAAAAPc/sG-4gV8X6hM/s640/Responsibility+assignment+matrix.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &lt;br /&gt;
&lt;b&gt;10. What do you do with requirements that are incomplete or incomprehensible?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This is a fairly subjective topic to be covered in a “definition”. &lt;br /&gt;
&lt;br /&gt;
Generally, with incomplete or incomprehensible requirements, rolling-wave planning project management technique can be used; which emphasizes on focusing on small areas of requirement until further scope of requirement gets clearer.&lt;br /&gt;
&lt;br /&gt;
Use requirements gathering techniques to gather as much information as possible.&lt;br /&gt;
But in cases where requirement is “incomplete or incomprehensible”, use Assumptions. Yep! Do not stop the work, make assumptions, let customers know about the assumptions you made in black and white, and move forward. In this case, Agile methodology will help. &lt;br /&gt;
&lt;br /&gt;
STEP 1: Add/refine requirements + Assumptions&lt;br /&gt;
STEP 2: Build &lt;br /&gt;
STEP 3: Verify &lt;br /&gt;
STEP 4: Release/rollout&lt;br /&gt;
STEP 5: Iterate (Goto step 3) &lt;br /&gt;
STEP 6: Increment (Goto step 1)&lt;br /&gt;
&lt;br /&gt;
I have found &lt;a href="http://www.processimpact.com/articles/reqtraps.html"&gt;this small article&lt;/a&gt; to be very interesting and useful, especially if you do design the requirements or functional specifications documents.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-5848986669513280266?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/tZWgmgWZDdw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/5848986669513280266/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/03/top-10-answers-to-top-10-software.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/5848986669513280266?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/5848986669513280266?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/tZWgmgWZDdw/top-10-answers-to-top-10-software.html" title="Top 10 answers to top 10 software requirements interview question" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/-sYislzOmJzM/TX0JRR6oNaI/AAAAAAAAAPc/sG-4gV8X6hM/s72-c/Responsibility+assignment+matrix.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/03/top-10-answers-to-top-10-software.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YCRn86eyp7ImA9WhZVGUQ.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-1581176061167839412</id><published>2011-03-02T05:31:00.000-08:00</published><updated>2011-06-01T22:06:07.113-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-01T22:06:07.113-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C# 4.0" /><category scheme="http://www.blogger.com/atom/ns#" term="ADO.NET" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Concept" /><category scheme="http://www.blogger.com/atom/ns#" term="use Entity Framework 4.0" /><category scheme="http://www.blogger.com/atom/ns#" term="APPLICATION BLOCK" /><category scheme="http://www.blogger.com/atom/ns#" term="Logging" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Entity Framework" /><category scheme="http://www.blogger.com/atom/ns#" term="ORM" /><category scheme="http://www.blogger.com/atom/ns#" term="DATA-ACCESS" /><title>Should I ever use Entity Framework 4.0?</title><content type="html">I did a small in-house presentation for the young architects in our company and though of sharing my findings. We compared different ORMs, and discussed more about entity framework vs NHibernate vs performance that ADO.NET provides. I will also post the difference of performance that we found while comparing NHibernate and ADO.NET. You count this in continuum to my previous post that I wrote sometime back, about &lt;a href="http://izlooite.blogspot.com/2010/03/ef4-adonet-entity-framework-v40.html" title="EF4: ADO.NET Entity Framework v4.0"&gt;EF4: ADO.NET Entity Framework v4.0&lt;/a&gt; &lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;b&gt;What is Entity Framework?&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Is a data access framework comes with .NET 4.0&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Bridges the gap between database and objects(POCO)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Its an evolution of ADO.NET&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Uses Entity SQL (eSQL) – Query to entity framework model (.edmx files)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Sits on top of ADO.NET 2.0&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Has an out-the-box answer with regard to n-tier development, in "self-tracking entities“ - eventually.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Architecture&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/_r-Q5M_GfhZo/TbLHPoxw01I/AAAAAAAAARo/tZI3t_jqu_o/s1600-h/ado.net%20evolution%5B25%5D.jpg"&gt;&lt;img alt="ado.net evolution" border="0" height="422" src="http://lh3.ggpht.com/_r-Q5M_GfhZo/TbLHQQkzvqI/AAAAAAAAARs/WNqW_Sg3IQU/ado.net%20evolution_thumb%5B23%5D.jpg?imgmax=800" style="border-width: 0px; display: inline;" title="ado.net evolution" width="644" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;i&gt;&lt;b&gt;&lt;u&gt;FIG 1:&lt;/u&gt; ADO.NET Evolution and technology support&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/_r-Q5M_GfhZo/TbLHRJl9UXI/AAAAAAAAARw/8veo46Uy6FY/s1600-h/entity%20framework%20arch%5B21%5D.jpg"&gt;&lt;img alt="entity framework arch" border="0" height="387" src="http://lh4.ggpht.com/_r-Q5M_GfhZo/TbLHSV4AmuI/AAAAAAAAAR0/BG_LNMf4b4A/entity%20framework%20arch_thumb%5B19%5D.jpg?imgmax=800" style="border-width: 0px; display: inline;" title="entity framework arch" width="644" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;i&gt;&lt;b&gt;&lt;u&gt;FIG 2:&lt;/u&gt; Entity Framework mapping to ADO.NET&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/_r-Q5M_GfhZo/TbLHTwbbR5I/AAAAAAAAAR4/ICwDEnpcQZ4/s1600-h/entity%20framework%20layer%5B12%5D.jpg"&gt;&lt;img alt="entity framework layer" border="0" height="484" src="http://lh3.ggpht.com/_r-Q5M_GfhZo/TbLHUSrDvQI/AAAAAAAAAR8/xGRzCHwk3e0/entity%20framework%20layer_thumb%5B10%5D.jpg?imgmax=800" style="border-width: 0px; display: inline;" title="entity framework layer" width="546" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;i&gt;&lt;b&gt;&lt;u&gt;FIG 3:&lt;/u&gt; Entity Framework components&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Provides three types of approach:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Database first (the old way – then generate the model, then code)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Model first (the .edmx model – and then generate the database)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Code first (and then generate the model, and then the database)&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;What does it provide?&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Generates strongly-typed entity objects&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Customizable beyond 1-1 map&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Generates mapping/plumbing code&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Translates LINQ queries to database queries (LINQ to Entities)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Materializes objects from db calls&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Tracks changes, generates updates/inserts&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Giving intellisense, compile-time and debugger support&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Where can it help?&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Create ER--&amp;gt;Database&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Generate ER Model&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Quickly provide the CRUD operations, along with lazy/eager loading options.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Data layer (&lt;s&gt;Enumerated tables&lt;/s&gt;, &lt;s&gt;query generation&lt;/s&gt;, &lt;s&gt;default crud&lt;/s&gt;, complex joins - reports, data core Wrapper, business logic, etc?) – You may want to utilize the Unit of Work pattern along with the Repository pattern.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Specific modules (UI logic - Handling data/complex grids, cells within cells)&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Are there any EF data providers?&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The Progress DataDirect 100% managed code ADO.NET data provider eliminates the need for database clients, which boosts .NET application performance and delivers a flexible, secure connection to all major databases, including Oracle, DB2, Sybase, and Microsoft SQL Server.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;VistaDB is the only .NET embedded database that allows you to Xcopy a single DLL for both 32 and 64 bit runtime support.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Devart, offers ADO.NET Data Providers supporting access to Oracle, MySQL, SQL Lite, PostgreSQL, and Microsoft SQL Server databases.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;OpenLink's Virtuoso ADO.NET Data Provider allows developers to access native Virtuoso data (SQL, XML, and RDF) and any Virtuoso Linked Tables from external ODBC and JDBC accessible data sources. Known-compatible external data sources include Oracle (versions 7.x to 11.x), Microsoft SQL Server (6.x to 2005), IBM DB2 , Sybase (4.2 to 12.x+), IBM Informix (5.x to 11.x), Ingres (6.4 to 9.x), Progress (7.x to 10.x), MySQL, PostgreSQL, and Firebird.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;IBM supplies ADO.NET data providers for access to DB2, Informix, and U2 databases.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Sybase SQL Anywhere 11 includes Sybase iAnywhere's ADO.NET Data Provider.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Sample Entity Framework Provider for Oracle - community effort project&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Some points to ponder&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Primary purpose is providing basic CRUD operations&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Not really feasible for reporting.  &lt;ul&gt;&lt;li&gt;eSQL Learning Curve, usually required to learn eSQL(unless generating complex reports?).&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Requires knowledge of eSQL for complex joins/GROUPBY&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Uses traditional string based queries with a more familiar SQL like syntax&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Dynamic queries may be composed in a traditional way at run time using string manipulation&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Projection is not possible; you must always return an &lt;span style="color: blue; font-family: Courier New;"&gt;ObjectQuery&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Develop against a conceptual view(the model, that is, .edmx classes) of your underlying data, not the store itself&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Doesn't have a lot of providers for other databases.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Very young&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Small community behind it.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Requires workaround for &lt;span style="color: blue; font-family: Courier New;"&gt;LEFT OUTER JOIN&lt;/span&gt;s. For instance, see following loc:&lt;/li&gt;
&lt;/ul&gt;&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; var v = &lt;span style="color: blue;"&gt;from&lt;/span&gt; en &lt;span style="color: blue;"&gt;in&lt;/span&gt; context.Entity.&lt;span style="color: blue;"&gt;Include&lt;/span&gt;("PostalAddress").&lt;span style="color: blue;"&gt;Include&lt;/span&gt;("PostalAddressType")&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt; let leftouter = (&lt;span style="color: blue;"&gt;from&lt;/span&gt; pa &lt;span style="color: blue;"&gt;in&lt;/span&gt; en.PostalAddress&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;                 &lt;span style="color: blue;"&gt;select&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: green;"&gt;//Project into a new object&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;                 {&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;                 PA = pa,&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;                 PAT = pa.PostalAddressType&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;                 }).FirstOrDefault()&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;                 &lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;             &lt;span style="color: blue;"&gt;select&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt;             EntityID = en.EntityID,&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt;             PostalAddressID = (Guid?)leftouter.PA.PostalAddressID,&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt;             PostalTypeID = (Guid?)leftouter.PAT.PostalAddressTypeID&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt;             };&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;&lt;/b&gt;&amp;nbsp;&lt;b&gt;Entity Framework problems with SQL &lt;span style="font-family: Courier New;"&gt;IN&lt;/span&gt; keyword&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;…AND D.STATE_NAME &lt;span style="color: blue;"&gt;IN&lt;/span&gt; ('Approved', 'Scanned', 'Returned')&lt;/span&gt; is &lt;b&gt;&lt;u&gt;&lt;span style="color: red;"&gt;invalid&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;b&gt;eSQL is not SQL! &lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Cannot access multiple database! Quite rare in our case…&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Relationship navigation problem – Learn to navigate! &lt;/b&gt; &lt;br /&gt;
&lt;span style="color: blue; font-family: Courier New;"&gt;NAVIGATE&lt;/span&gt; operator allows a query to explicitly traverse a relationship; says don’t use joins.&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; SalesPersonID, FirstName, LastName, HireDate&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt; &lt;span style="color: blue;"&gt;FROM&lt;/span&gt; SalesPerson sp&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color: blue;"&gt;INNER&lt;/span&gt; &lt;span style="color: blue;"&gt;JOIN&lt;/span&gt; Employee e &lt;span style="color: blue;"&gt;ON&lt;/span&gt; sp.SalesPersonID = e.EmployeeID&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color: blue;"&gt;INNER&lt;/span&gt; &lt;span style="color: blue;"&gt;JOIN&lt;/span&gt; Contact c &lt;span style="color: blue;"&gt;ON&lt;/span&gt; e.EmployeeID = c.ContactID&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color: blue;"&gt;INNER&lt;/span&gt; &lt;span style="color: blue;"&gt;JOIN&lt;/span&gt; SalesOrder o &lt;span style="color: blue;"&gt;ON&lt;/span&gt; sp.SalesPersonID = o.SalesPersonID&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt; &lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; e.SalariedFlag = 1 &lt;span style="color: blue;"&gt;AND&lt;/span&gt; o.TotalDue &amp;gt; 200000&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;The above code is like following is eSQL:&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border: 1px solid silver; cursor: text; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding: 4px; text-align: left; width: 97.5%;"&gt;&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color: blue;"&gt;VALUE&lt;/span&gt; sp&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color: blue;"&gt;FROM&lt;/span&gt; AdventureWorks.AdventureWorksDB.SalesPeople &lt;span style="color: blue;"&gt;AS&lt;/span&gt; sp&lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt; &lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; &lt;span style="color: blue;"&gt;EXISTS&lt;/span&gt;(&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color: blue;"&gt;VALUE&lt;/span&gt; o &lt;/pre&gt;&lt;pre style="background-color: white; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;         &lt;span style="color: blue;"&gt;FROM&lt;/span&gt; NAVIGATE(p, AdventureWorks.SalesPerson_Order) &lt;span style="color: blue;"&gt;AS&lt;/span&gt; o&lt;/pre&gt;&lt;pre style="background-color: #f4f4f4; border-style: none; color: black; direction: ltr; font-family: 'Courier New',courier,monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; o.TotalDue &amp;gt; 200000)&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&amp;nbsp;&lt;b&gt;What about EF Logging? Does it provide cool logging features? &lt;/b&gt;&lt;br /&gt;
Nope. Missing!&lt;br /&gt;
&lt;br /&gt;
Use &lt;span style="font-family: Courier New;"&gt;objectQuery.ToTraceString();&lt;/span&gt; for query logging; yep, thats all.  &lt;br /&gt;
&lt;br /&gt;
Output for the above loc: &lt;b&gt;&lt;span style="color: red;"&gt;Untraceable!&lt;/span&gt;&lt;/b&gt;  &lt;br /&gt;
&lt;span style="color: grey; font-family: Courier New;"&gt;[SELECT 1 AS [C1], [Extent1].[CHEQUE_ID] AS [CHEQUE_ID], [Extent1].[CHEQUE_NUMBER] AS [CHEQUE_NUMBER], [Extent1].[ACCOUNT_NUMBER] AS [ACCOUNT_NUMBER], [Extent1].[ACCOUNT_TITLE] AS [ACCOUNT_TITLE], [Extent1].[MICR_AMOUNT] AS [MICR_AMOUNT] FROM [dbo].[CHEQUE] AS [Extent1] INNER JOIN [dbo].[CHEQUE_ACTIVITY] AS [Extent2] ON EXISTS (SELECT cast(1 as bit) AS [C1] FROM ( SELECT cast(1 as bit) AS X ) AS [SingleRowTable1] INNER JOIN [dbo].[CPS_CHEQUE] AS [Extent3] ON 1 = 1 WHERE ([Extent2].[CHEQUE_ID] = [Extent3].[CHEQUE_ID]) AND ([Extent1].[CHEQUE_ID] = [Extent3].[CHEQUE_ID]) ) INNER JOIN [dbo].[SEC_USER] AS [Extent4] ON EXISTS (SELECT cast(1 as bit) AS [C1] FROM ( SELECT cast(1 as bit) AS X ) AS [SingleRowTable2] INNER JOIN [dbo].[USER] AS [Extent5] ON 1 = 1 WHERE ([Extent2].[USER_ID] = [Extent5].[USER_ID]) AND ([Extent4].[USER_ID] = [Extent5].[USER_ID]) ) INNER JOIN [dbo].[WF_STATE] AS [Extent6] ON ([Extent1].[STATE_ID] = [Extent6].[STATE_ID]) AND (([Extent6].[STATE_NAME] = 'Approved') OR ([Extent6].[STATE_NAME] = 'Scanned') OR ([Extent6].[STATE_NAME] = 'Returned'))] &lt;/span&gt; &lt;br /&gt;
How in the world will you map Extent1 with the actual database table? think, and leme know.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Vote of no/confidence?&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/"&gt;Here is a website&lt;/a&gt;, expecting “more” from Microsoft! (0: Signed by the people who doesn’t buy into the vote of confidence on this product. What does this mean? This means, no one, at least no one from the signatories.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;So, should I ever use entity framework? &lt;/b&gt;&lt;br /&gt;
Yes, you should. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;B…ut… Why? &lt;/b&gt;&lt;br /&gt;
Community as well as the online help (tutorials, videos, etc) growing, stabilizing, and &lt;u&gt;expanding fast&lt;/u&gt;. Plus, dont forget the LINQ functionalities. EF has the best LINQ providers as compared the NHibernate. NHibernate is far far beyond where LINQ is concerned.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Where should I use it? &lt;/b&gt;&lt;br /&gt;
Anywhere and everywhere. Except for your production environment! If you still are, then tell your customer to be prepared for surprises. Since EF is growing faster, you may bank upon it after sometime.&lt;br /&gt;
Good luck.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;References:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/data/aa937723"&gt;The ADO.NET Entity Framework&lt;/a&gt; &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://thedatafarm.com/"&gt;Excellent resource to learn EF4&lt;/a&gt; &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ayende.com/blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx"&gt;NHibernate vs. Entity Framework 4.0&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;u&gt;&lt;b&gt;Disclaimer:&lt;/b&gt;&lt;/u&gt; Please understand, the motive behind this post is to &lt;u&gt;understand the pros and cons&lt;/u&gt;, this means, there is &lt;u&gt;NO boiler plate answer&lt;/u&gt;; and its up to the &lt;u&gt;reader to decide&lt;/u&gt; whether they want to use EF or not.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-1581176061167839412?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/W3Cr5wBAjAA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/1581176061167839412/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/04/should-i-ever-use-entity-framework-40.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/1581176061167839412?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/1581176061167839412?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/W3Cr5wBAjAA/should-i-ever-use-entity-framework-40.html" title="Should I ever use Entity Framework 4.0?" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_r-Q5M_GfhZo/TbLHQQkzvqI/AAAAAAAAARs/WNqW_Sg3IQU/s72-c/ado.net%20evolution_thumb%5B23%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/04/should-i-ever-use-entity-framework-40.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcER3wycCp7ImA9Wx9aFkk.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-8955002290048630876</id><published>2011-02-27T03:46:00.000-08:00</published><updated>2011-03-08T21:20:06.298-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-08T21:20:06.298-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="life cycle" /><category scheme="http://www.blogger.com/atom/ns#" term="sdlc" /><category scheme="http://www.blogger.com/atom/ns#" term="buyer" /><category scheme="http://www.blogger.com/atom/ns#" term="sales" /><category scheme="http://www.blogger.com/atom/ns#" term="PMP" /><category scheme="http://www.blogger.com/atom/ns#" term="incremental" /><category scheme="http://www.blogger.com/atom/ns#" term="phases" /><category scheme="http://www.blogger.com/atom/ns#" term="PROJECT MANAGEMENT" /><category scheme="http://www.blogger.com/atom/ns#" term="control" /><category scheme="http://www.blogger.com/atom/ns#" term="iterative" /><category scheme="http://www.blogger.com/atom/ns#" term="risk" /><category scheme="http://www.blogger.com/atom/ns#" term="framework" /><category scheme="http://www.blogger.com/atom/ns#" term="PRINCE2" /><category scheme="http://www.blogger.com/atom/ns#" term="monitoring" /><category scheme="http://www.blogger.com/atom/ns#" term="seller" /><category scheme="http://www.blogger.com/atom/ns#" term="scrum" /><category scheme="http://www.blogger.com/atom/ns#" term="FDI" /><title>Top 10 answers to top 10 Project Management questions that a senior software developer must know</title><content type="html">This post is inspired by &lt;a href="http://profile.typepad.com/jurgenappelo"&gt;Jurgen Appelo&lt;/a&gt;’s blog &lt;a href="http://www.noop.nl/2009/01/100-interview-questions-for-software-developers.html"&gt;post&lt;/a&gt;, where he asks top 100 questions that a software developer should know. The questions are from different categories which covers various areas of &lt;a href="http://en.wikipedia.org/wiki/SWEBOK"&gt;software engineering body of knowledge&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Though, I’d like to add that a software developer, most of the time, is unaware of many of the questions raised here. Unless, she has been into management, or has done some project management as a part of her job description. These questions may be posed to senior developers who have had involvement in such activities, have more than 6 years of experience. But definitely, is not expected from a junior software developer.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Some of the terms that are used frequently:&lt;/i&gt;&lt;br /&gt;
&lt;u&gt;Buyer&lt;/u&gt;, which means Customer, or Client&lt;br /&gt;
&lt;u&gt;Seller&lt;/u&gt;, which means you, or service provider, or consultant, contractor, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Project Management:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. What are triple constraints? How many of the three variables scope, time and cost can be fixed by the customer?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Triple constraints are: Cost, scope, and time. But according to Rita Mulchay, it also includes Quality and Customer Satisfaction.&lt;br /&gt;
&lt;br /&gt;
Customer can set any or all of the variables, depending upon the project scenario. A seller(the one providing solution services) must consider the contract type (Fixed Price, Cost Reimbursable, or Time and Material, etc) before signing the contract.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.Who should make estimates for the effort of a project? Who is allowed to set the deadline?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Ideally, team – the development team – should provide the realistic estimates, based upon the work breakdown structure.&lt;br /&gt;
&lt;br /&gt;
But the “deadline” may be imposed by the customer. Even in that case, realistic estimates should come from the development team. Those estimates should be shared with customer, along with the options of Crashing, Fast Tracking the critical path - or removing the test cycles, cutting scope, etc.&lt;br /&gt;
&lt;br /&gt;
Impact of every change should be notified to customer; note that not only “additions” are changes. A customer may ask to remove a part of scope; which, is also a change.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3.Do you prefer minimization of the number of releases or minimization of the amount of work-in-progress?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Both.&lt;br /&gt;
&lt;br /&gt;
Minimize the number of release shall help in configuration management of the release. Minimizing the amount of work in progress shall help focus on specific areas/functionality.&lt;br /&gt;
&lt;br /&gt;
Btw, this really depends upon triple constraint and other variables available. For instance, do we have enough time to build release? How often can we afford that? What are the number of resources dedicated to this project? What are customer requirements? What is the project methodology being used? If its Iterative Model, then you might limit the number of releases to the specific functionality. For instance, if there are 10 functional areas of the application, then you decide that based upon available time and resources, you will roll out 2 functions per release basis.&lt;br /&gt;
&lt;br /&gt;
Moreover, iterative model helps buyer as well as the seller to focus on specific areas of the application. Plus, it helps buyer see the result of their requirement as soon as you move into the development phase.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4.Which kind of diagrams do you use to track progress in a project?&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/Gantt_chart"&gt;Gantt chart&lt;/a&gt;/bar chart&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e2/GanttChartAnatomy.png/300px-GanttChartAnatomy.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e2/GanttChartAnatomy.png/300px-GanttChartAnatomy.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Basically you can use any chart or diagram that displays the task name and start/finish dates. So, you can mark the current date, everything beyond that mark should have been finished, and everything after that line, should in pending-completion state.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;5.What is the difference between an iteration and an increment?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Think of Iterative-model as repeatable. You can repeat a functional requirement and roll out the release as many times as you want, unless the buyer is satisfied.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/Iterative_development_model_V2.jpg/300px-Iterative_development_model_V2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/Iterative_development_model_V2.jpg/300px-Iterative_development_model_V2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Incremental-model contains the added functionality. &lt;br /&gt;
&lt;br /&gt;
For instance, you have an application that has 10 functionality in it. So, you plan the increments with 2 functionality per release. So, you roll out the release with 2 functionality, buyer shall test, provide their feedback, you will “iterate” through the 2 functionality, fix bugs, add changes, etc, and again roll-out a new release or fix with these two updated functionality. This can iterate as much as you decide to.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/0/05/Development-iterative.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="205" src="http://upload.wikimedia.org/wikipedia/commons/0/05/Development-iterative.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;6.Can you explain the practice of risk management? How should risks be managed?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
PMI defines the processes involved in the risk management, is, Risk Identification, qualitative risk analysis, followed by quantitative risk analysis, then risk response planning, and then risk monitoring and controlling throughout the project life cycle.&lt;br /&gt;
&lt;br /&gt;
Please know that &lt;a href="http://en.wikipedia.org/wiki/Risk_management"&gt;risk management&lt;/a&gt; is vast subject in itself. There are people who are hired by organizations just for risk management purpose.&lt;br /&gt;
&lt;br /&gt;
Just so you may get an idea, what each process means, let me elaborate a bit.&lt;br /&gt;
&lt;br /&gt;
Risk identification is a process where you close your eyes, and jot down each and every item that you can think of as a risk. &lt;br /&gt;
&lt;br /&gt;
Quantitative risk analysis would allow to identify the probability and impact of a risk.&lt;br /&gt;
&lt;br /&gt;
Qualitative risk analysis is the process of assigning the levels. For instance, on a scale of High, Medium, and Low.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.projectperfect.com.au/images/info/risk_matrix.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="219" src="http://www.projectperfect.com.au/images/info/risk_matrix.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
And then preparing the risk response;&lt;br /&gt;
&lt;br /&gt;
Following are the risk response strategies that you can use:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Avoid &lt;/b&gt;risk: Avoid the risk. For instance, remove the functionality or module from the project.&lt;br /&gt;
&lt;b&gt;Transfer &lt;/b&gt;the risk: Transfer the responsibility to someone else. For instance, sub-contract.&lt;br /&gt;
&lt;b&gt;Mitigate &lt;/b&gt;risk: Try to minimize the impact of the risk. For instance, have insurance.&lt;br /&gt;
&lt;b&gt;Accept &lt;/b&gt;the risk: If has to happen, let it happen. Can include risks with lower impacts.&lt;br /&gt;
&lt;br /&gt;
A point to note is that risk can be of the positive nature as well. That’s called &lt;u&gt;positive risk&lt;/u&gt;. Managers tend to take positive risks to for the benefit of the project.&lt;br /&gt;
&lt;br /&gt;
A petty example of positive risk could be that, a change particular hardware equipment price, due to change in government, or for instance, due to new policies to increase foreign direct investment (FDI) in the country. So, this can be called a positive risk, and you would want to take that risk. So your response to this sort of risk is to “enhance”, the chances of its occurrence. I don’t know how you’d “influence” the state departments to enhance the likelihood of such a policy by federal government; requires “state” level professional/personal relations (0;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;7.Do you prefer a work breakdown structure or a rolling wave planning?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
One answer? Work breakdown structure.&lt;br /&gt;
&lt;br /&gt;
Why? Because work breakdown structure signifies the scope of the work. Anything and everything that is part of WBS is part of scope – and nothing else needs to be done. Scope of work is clear. &lt;br /&gt;
&lt;br /&gt;
But sometimes, for larger projects; projects that spans over a period of multiple years, in which scope of the work is not clear – due to the nature of the project. In such cases, what you do is called “rolling wave planning”. You identify the scope of work for year 1, for instance if its 6 year project, and start working over it(design, development, testing, etc); and as soon as you move forward the scope for rest of the work gets clearer, customer gets more understanding of the business, changes coming in; then, you update the scope to add more functionality, for instance for the 2nd year. I hope you get the idea. &lt;br /&gt;
&lt;br /&gt;
Note that, in either case, large project or smaller project, you must use WBS – why? Because WBS clearly identifies the scope of work; the work that needs to be done. Its clear to you, your customer, your team – and everyone.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;8.What do you need to be able to determine if a project is on time and within budget?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Earned value management; this includes variance analysis.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/Earned_value_management"&gt;Earned value management&lt;/a&gt; is a project management technique that allows you to identify where the project currently stands; with respect to actual budget, actual time-line; and answer the questions like, how much more money is required to finish the project, how much more time is require to finish the work, what was originally planned, how much has actually been spent, what should have been spent?&lt;br /&gt;
&lt;br /&gt;
Cost Performance Index(CPI) tells you about the cost, Schedule Performance Index(SPI) tells you about the project schedule. A CPI value of more than 1 means project is under budget; an SPI value of more than 1 means the project is ahead of schedule.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/en/b/b8/EVM_Fig4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="219" src="http://upload.wikimedia.org/wikipedia/en/b/b8/EVM_Fig4.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
As a side note, if this may interest you, a downside with the EVM is that it has no provision to measure project quality; which means, it is possible for EVM to indicate a project is under budget, ahead of schedule and scope completed, but still have unhappy clients. Look for workarounds, because the end result of every project should be “&lt;b&gt;&lt;u&gt;Delighted customer&lt;/u&gt;&lt;/b&gt;”.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;9.Can you name some differences between DSDM, Prince2 and Scrum?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;DSDM &lt;/b&gt;&lt;/i&gt;is &lt;a href="http://en.wikipedia.org/wiki/DSDM"&gt;Dynamic Systems Development Method&lt;/a&gt;, is software development method, uses iterative and incremental models with RAD/JAD strategies.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Prince2 &lt;/b&gt;&lt;/i&gt;is a process based project management methodology; provides specific set of processes defining what, when and how an activity shall be performed and by whom over the life of a project.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Scrum&lt;/b&gt;&lt;/i&gt;, is a project management method, inclines more towards the iterative, incremental project management – an attribute of Agile software development methodologies.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;10.How do you agree on scope and time with the customer, when the customer wants too much?&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
I would "discuss" - with the customer - the impact of constraints.&lt;br /&gt;
&lt;br /&gt;
In my experience, sales (sales department) tend to promise exceptional software with “exceptional” timelines. Now, exceptional timelines may be ok, but unrealistic timeline is not ok.&lt;br /&gt;
&lt;br /&gt;
What would your customer think when you will tell them that you have slipped a deadline; and then what would be the customer’s reaction if you continue to slip the timelines.&lt;br /&gt;
&lt;br /&gt;
You will find yourself with following major reasons whenever you end up in the situation above:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Major Reason 1: &lt;/b&gt;Sales! In order to “attain” their targets, the Sales tend to promise timelines which are only achievable if either customer is dead – no impact of timeline – or if you resources are humanoids. If you know what I mean. If you don’t know, then I am “really” talking about the realistic timelines. Usually timelines are “imposed” to the team, and they rub their asses off to get the work done.&lt;br /&gt;
&lt;br /&gt;
Following is how the whole team ends up:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-aCc8oIOKDrw/TW3AY7ZtTrI/AAAAAAAAAPY/7j9WEGvUvZM/s1600/staff+in+problem.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh6.googleusercontent.com/-aCc8oIOKDrw/TW3AY7ZtTrI/AAAAAAAAAPY/7j9WEGvUvZM/s320/staff+in+problem.jpg" width="218" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Major Reason 2:&lt;/b&gt; Alternatively, the “imposed” time-lines can come directly from your boss. Yup! Not sales, but your BOSS! A boss, who “once” was a developer, and can “assume” that a work worth 4 days can be squeezed into 1 day because of latest Intel Core i7 machines. &lt;br /&gt;
&lt;br /&gt;
This decision usually comes from a boss who doesn’t know much project management. Who may have been a good coder some time back, and believes that the task is achievable in a few nights. These are those that are promoted to a position out of an "affection", &lt;a href="http://www.fortunemediakit.com/bios/FOR_gilman.html"&gt;Hank Gilman&lt;/a&gt; calls them &lt;a href="http://www.goodreads.com/book/show/9796436-you-can-t-fire-everyone?utm_content=nonfiction_pos2&amp;amp;utm_medium=email&amp;amp;utm_source=3_newreleases"&gt;Accidental Managers&lt;/a&gt;; while PMI calls this act of affection, &lt;a href="http://en.wikipedia.org/wiki/Halo_effect"&gt;Hallo Affect&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
A simple example could be, when you look at a good looking, suited/booted person at a shopping plaza, you tend to believe that she is an educated, gentle woman. &lt;u&gt;Contrary &lt;/u&gt;to this, Hallo Affect says, that she could be anyone. “a blossoming movie star, an award-winning scientist, or a bank-robber or an attempted serial killer.&lt;br /&gt;
So, basically &lt;i&gt;its against the theory of WYSIWYG&lt;/i&gt; (0;&lt;br /&gt;
&lt;br /&gt;
Or the &lt;u&gt;only other reason &lt;/u&gt;could be that you are too lazy of a developer. You take time, more than it is required to develop a functionality.&lt;br /&gt;
&lt;br /&gt;
Anyway, the whole product life cycle ends up:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-6AZZIAvXH7k/TWo5Q-hLDUI/AAAAAAAAAPU/Q6sNrvVc6PY/s1600/Sales+development+life+cycle.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="370" src="https://lh5.googleusercontent.com/-6AZZIAvXH7k/TWo5Q-hLDUI/AAAAAAAAAPU/Q6sNrvVc6PY/s400/Sales+development+life+cycle.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Thats about it. I plan to respond to rest of the 90 questions, as soon I get some time.&lt;br /&gt;
&lt;br /&gt;
Until then, enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-8955002290048630876?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/rBz9o0cxD9I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/8955002290048630876/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/02/top-10-answers-to-top-10-project.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/8955002290048630876?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/8955002290048630876?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/rBz9o0cxD9I/top-10-answers-to-top-10-project.html" title="Top 10 answers to top 10 Project Management questions that a senior software developer must know" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh6.googleusercontent.com/-aCc8oIOKDrw/TW3AY7ZtTrI/AAAAAAAAAPY/7j9WEGvUvZM/s72-c/staff+in+problem.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/02/top-10-answers-to-top-10-project.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8MRHYzfSp7ImA9WhZQE0o.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-3214517586660701836</id><published>2011-02-25T10:28:00.001-08:00</published><updated>2011-04-21T02:08:05.885-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-21T02:08:05.885-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="title" /><category scheme="http://www.blogger.com/atom/ns#" term="entreprenuer" /><category scheme="http://www.blogger.com/atom/ns#" term="Business" /><category scheme="http://www.blogger.com/atom/ns#" term="contractor" /><category scheme="http://www.blogger.com/atom/ns#" term="position" /><category scheme="http://www.blogger.com/atom/ns#" term="consultant" /><category scheme="http://www.blogger.com/atom/ns#" term="Billable hours" /><category scheme="http://www.blogger.com/atom/ns#" term="architect" /><category scheme="http://www.blogger.com/atom/ns#" term="freelance" /><title>Part II: How to become a consultant , employed, independent or contract - Pricing model</title><content type="html">&lt;a href="http://izlooite.blogspot.com/2011/02/part-i-what-should-you-choose.html"&gt;Related to Part I: How to become a consultant&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Part II: What should be the pricing model&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
So what could be pricing model. Interesting you may find, all across Europe, your services are rented on per hour basis. For instance her in Asian sub continent, one would ask your monthly expected salary. But if you were somewhere in UK, do not wonder if they ask you about hourly charges. You better calculate that before appearing in any interview. Same holds good for USA. Not sure about the eastern region - Singapore, Malaysia, Australia, etc.&lt;br /&gt;
&lt;br /&gt;
Generally there are 250 billable days per year. How so? Lets see a possible breakup for billable hours per year; a breakup that you can also think of, could be as follows:&lt;br /&gt;
&lt;br /&gt;
1 Month = 4 weeks&lt;br /&gt;
Now, 4 weeks x 12 months = 48 weeks + the odd days of the month (for instance, not all months are of 30, so add 2 weeks, ~15 days, of variation)&lt;br /&gt;
&lt;br /&gt;
So, 48 weeks + 2 weeks = 50 weeks. &lt;br /&gt;
&lt;br /&gt;
Note that the above 50-weeks includes weekends, holidays, and sickness leaves.&lt;br /&gt;
&lt;br /&gt;
This concludes that your baseline in calculating the work weeks shall be 50 weeks per year.&lt;br /&gt;
&lt;br /&gt;
Now lets calculate the work hours per year:&lt;br /&gt;
&lt;br /&gt;
A usual 9 to 5 job corresponds to 8 working hours. So, working for 8 hours per day(&lt;a href="http://izlooite.blogspot.com/2009/12/pomodoro-technique.html#more"&gt;btw, do you work for straight 8 hours?&lt;/a&gt;), that makes it: &lt;br /&gt;
&lt;br /&gt;
8 hours x 5 days a week = 40 hours per week; if you are lost, then continue reading - you don't have a choice (0;&lt;br /&gt;
&lt;br /&gt;
This concludes 40 hours x 365 = 14600 hours a year.&lt;br /&gt;
&lt;br /&gt;
Note that, sometimes contractors avoid adding weekends, holidays, leaves/etc, when they quote the price; how would this help them? They tend to charge higher per hour; so either way the actual result is same.&lt;br /&gt;
&lt;br /&gt;
What makes the most difference is how many links are in the chain between the company (who's paying) and you (the resource). In most cases, there's a middle-man or an staffing firm who has the prime contract; and all the resources gets sub-contracted through them. &lt;br /&gt;
&lt;br /&gt;
Gulf is full of such contracting companies. Hiring guys for different large companies, but on their own payroll.&lt;br /&gt;
&lt;br /&gt;
A very well known company that does just that in the Middle Eastern region is the &lt;a href="http://www.itpeoplegulf.com/"&gt;IT People&lt;/a&gt;. Btw, a google will tell you that most of these are Indian companies, and they have "Consulting" as a suffix to their company name. &lt;br /&gt;
&lt;br /&gt;
These middlemen come into play because of the &lt;a href="http://en.wikipedia.org/wiki/Liability_insurance"&gt;liability protection&lt;/a&gt; for the company. Which works as a insurance company for the large corporates. But getting a contract directly from a company is actually better for both, the consultant as well as the company; why? Because company will be able to pay less(no middlemen) to you, while you'd be able to see more money pouring in - no middlemen.&lt;br /&gt;
&lt;br /&gt;
There is one more point about hourly vs. daily rate. There are a number of different ways a company can spin it. For instance, now you are a contractor, and you hire a couple-a resources - how would you go about their salaries? You may call it  "work-day" rate or they can also call it a cap-on-billing. Like for instance in case of my company, it says "&lt;i&gt;I don't care how many hours you work for, I want to see 8 hours a day across the board.&lt;/i&gt;". &lt;br /&gt;
&lt;br /&gt;
Typically the company does a day rate to limit the overtime they would normally have to pay if they're driving hard on a project. It's free labor to them. Also, daily billing usually simplifies the time reporting requirement. Which probably in turn helps management "justify" their management. &lt;a href="http://answers.onstartups.com/questions/19422/if-im-working-at-a-company-do-they-have-intellectual-property-rights-to-the-stu/20136#20136"&gt;This &lt;/a&gt;is an interesting information.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
And yes, in case this interests you, my friend decided to use the "Consultant" title, and Consulting as a suffix in his company name.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-3214517586660701836?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/Yx6Lt12ujB0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/3214517586660701836/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/02/part-ii-what-should-be-pricing-model.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/3214517586660701836?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/3214517586660701836?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/Yx6Lt12ujB0/part-ii-what-should-be-pricing-model.html" title="Part II: How to become a consultant , employed, independent or contract - Pricing model" /><author><name>KMan</name><email>noreply@blogger.com</email></author><thr:total>1</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/02/part-ii-what-should-be-pricing-model.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMMQ348fSp7ImA9Wx9bF08.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-4890773861974178379</id><published>2011-02-25T10:28:00.000-08:00</published><updated>2011-02-26T04:31:22.075-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-26T04:31:22.075-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="title" /><category scheme="http://www.blogger.com/atom/ns#" term="entreprenuer" /><category scheme="http://www.blogger.com/atom/ns#" term="Business" /><category scheme="http://www.blogger.com/atom/ns#" term="contractor" /><category scheme="http://www.blogger.com/atom/ns#" term="position" /><category scheme="http://www.blogger.com/atom/ns#" term="consultant" /><category scheme="http://www.blogger.com/atom/ns#" term="Billable hours" /><category scheme="http://www.blogger.com/atom/ns#" term="architect" /><category scheme="http://www.blogger.com/atom/ns#" term="freelance" /><title>Part I: How to become a consultant , employed, independent or contract</title><content type="html">I have been working over this article, with discussion and research, so the content has gone miles from a single kilometer and has reached to a point of no return (0: So I have broken it up into parts, just so you I may share my experience that can be understood well. Here it goes:&lt;br /&gt;
&lt;br /&gt;
I have been working with some friends - on and off - doing freelance consulting locally and online using rentacoder. Recently a friend asked for some help who decided to leave the job and go-consultant.&lt;br /&gt;
&lt;br /&gt;
We were precisely looking for following two questions:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Question 1: Choosing the title&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
The type of position-or-title that should be used; as it could range from consultant, architect, to contractor, or simply a freelance. But you cant print that on your card, can you? (0:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Question 2: &lt;a href="http://izlooite.blogspot.com/2011/02/part-ii-what-should-be-pricing-model.html"&gt;Pricing model&lt;/a&gt;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
And the type of pricing model that would benefit the most - not only funds-wise but consulting as well career-wise.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Part I: How and what to choose the title&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
So, What should you choose? Consultant, Entrepreneur, Freelance, or Architect?&lt;br /&gt;
&lt;br /&gt;
At rentacoder, I saw the term "Freelancer", which is more inclined towards graphics/designing type of role, and seldom is used with freelance-developers. Mostly, the freelance developers go by their own company name.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-Nt8kCK3ueHQ/TWjyaGcRHeI/AAAAAAAAAPQ/35f7n_oDagg/s1600/how+to+become+consultant.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh6.googleusercontent.com/-Nt8kCK3ueHQ/TWjyaGcRHeI/AAAAAAAAAPQ/35f7n_oDagg/s1600/how+to+become+consultant.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
So if you are working for yourself, who are you? A consultant, a contractor, a freelancer or an entrepreneur? or what would you want to be?&lt;br /&gt;
&lt;br /&gt;
This really boils down to where do you want to see yourself? What words attracts you? What words sound convincing to you. Note that, IMHO, its important that you convince yourself first, and only then you would be able to prove that to the world. So, unless you are sure, unless you "believe" in it - don't buy it.&lt;br /&gt;
&lt;br /&gt;
Many people goes with title of Consultant. You must have seen visiting cards saying &lt;some technology=""&gt; Consultant, with a keyword "specialist" as a prefix or suffix to that title.&lt;br /&gt;
&lt;br /&gt;
So, one question that you must ask yourself, what you really like(I meant love) doing?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt; Consultant:&lt;/b&gt;&lt;br /&gt;
Job responsibilities may include, proposing the re-engineered IT solution to business people. Turn business requirements into functional requirements. Propose solutions. Either subcontract the work to other company or allocate resources, make the job done ASAP, with quality, timeliness, and with a delighted customer.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt; Architect:&lt;/b&gt;&lt;br /&gt;
When you are proposing a solution based upon business requirements, built around specific set of technologies, you may be called architect. This may include, helping with a robust system architecture. Providing all sorts of design artifacts, which includes but not limited to, system design diagram, entity relationship, code/solution files structure; as well as lead and mentor other developers to help finish their project on time, with quality.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt; Contractor:&lt;/b&gt;&lt;br /&gt;
Contractor is usually a term used if you are involved in state level projects. So, a government department "subcontracts" you the piece of business to be turned into a technology masterpiece. You can further "subcontract" the project depending upon the revenue and legal agreements that you signed with buyer. Note that, in legal terms, you are called - Seller - the one who is selling the services; and state shall be called Buyer, the one who is buying your services.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt; Freelancer:&lt;/b&gt;&lt;br /&gt;
As for freelancer, that's just a general term for anyone not employed by a company - or doing anything in *parallel*. You can be a freelance contractor or consultant.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://izlooite.blogspot.com/2011/02/part-ii-what-should-be-pricing-model.html"&gt; More in Part II: Pricing Model...&lt;/a&gt;&lt;/some&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-4890773861974178379?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/IxdeYlFP_fo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/4890773861974178379/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/02/part-i-what-should-you-choose.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/4890773861974178379?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/4890773861974178379?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/IxdeYlFP_fo/part-i-what-should-you-choose.html" title="Part I: How to become a consultant , employed, independent or contract" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh6.googleusercontent.com/-Nt8kCK3ueHQ/TWjyaGcRHeI/AAAAAAAAAPQ/35f7n_oDagg/s72-c/how+to+become+consultant.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/02/part-i-what-should-you-choose.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEEQX4_cSp7ImA9Wx9bE0s.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-2731661591054531182</id><published>2011-02-17T21:26:00.000-08:00</published><updated>2011-02-22T01:56:40.049-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-22T01:56:40.049-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="delegates" /><category scheme="http://www.blogger.com/atom/ns#" term="methods" /><category scheme="http://www.blogger.com/atom/ns#" term="callback" /><category scheme="http://www.blogger.com/atom/ns#" term="pure virtual functions" /><category scheme="http://www.blogger.com/atom/ns#" term="interface" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Delegates vs Methods</title><content type="html">You might get into arguments with your peers upon using delegates over method calls.&lt;br /&gt;
&lt;br /&gt;
Delegates have an entirely different purpose in their life, compared to a method call. If you can call a method directly, then you don't need a delegate. Because delegates are mostly useful when a function needs to be invoked in a context where the actual object is not available, such as event callbacks.&lt;br /&gt;
&lt;br /&gt;
Or delegates are used in cases where you want a class to notify you, for instance, upon certain action.&lt;br /&gt;
&lt;br /&gt;
Here is a scenario where you definitely need a delegate.&lt;br /&gt;
&lt;br /&gt;
There is a sample worker class, that does some processing. While processing we require the class to send the updated status of the process.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="Cpp" name="code"&gt;//Small enumerated work statuses
enum WorkState
{
    Started,
    InProcess,
    AlmostThere,
    Completed
}

&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="Cpp" name="code"&gt;//A sample worker class, that uses the 
class Worker
{
    public void SomeWork(TheDelegate callback)
    {
        callback(this, WorkState.Started);

        int count = 0;
        while (count &amp;lt; 100)
        {
            count++;//the usual while counter.
            if(count&amp;gt;80)
                callback(this, WorkState.AlmostThere);
            else
                callback(this, WorkState.InProcess);
        }

        callback(this, WorkState.Completed);
    }
}

&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.cartoonstock.com/lowres/hsc4683l.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="332" src="http://www.cartoonstock.com/lowres/hsc4683l.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How to call the delegate?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="Cpp" name="code"&gt;//The delegate, that "delegates" the reference to the 
//actual callback method.
delegate void TheDelegate(Worker t, WorkState status);

class Program
{
    static void Main(string[] args)
    {
        Worker t = new Worker();

        //Pass on the reference to the callback method.
        t.SomeWork(new TheDelegate(MyCallbackMethod));

        Console.ReadKey();
    }

    //The call back method.
    static void MyCallbackMethod(Worker t, WorkState status)
    {
        Console.WriteLine("The task status is {0}", status);

        //Can also send it to a different network/pc or write into a file.
        //if (Network.IsConnectedToNetwork)
        //{
        //    Network.Send(IPAddress, t, status);
        //}
    }
}

&lt;/pre&gt;Quite an interesting part to note that you can send the data anywhere you want, over intranet, internet, shared device, print server, etc.&lt;br /&gt;
&lt;br /&gt;
Now you may question about the performance of delegate over method calls? Just so you may know there is not much of a difference: Performance of calling delegates vs methods?&lt;br /&gt;
&lt;br /&gt;
Since CLR v2, the cost of delegate invocation is very close to that of virtual method invocation, which is used for interface methods.&lt;br /&gt;
&lt;br /&gt;
Jon Skeet has &lt;a href="http://stackoverflow.com/questions/2082735/performance-of-calling-delegates-vs-methods/2082895#2082895"&gt;provided his results&lt;/a&gt;: &lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;Now I don't have particular faith that that means delegates are really faster than interfaces... but it makes me fairly convinced that they're not an order of magnitude slower. Additionally, this is doing almost nothing within the delegate/interface method. Obviously the invocation cost is going to make less and less difference as you do more and more work per call.&lt;/blockquote&gt;&lt;br /&gt;
Joel Pobar's &lt;a href="http://blogs.msdn.com/joelpob/archive/2004/04/01/105862.aspx"&gt;blog &lt;/a&gt;has some interesting facts about the cost of delegate invocation; it says its somehwat similar to virtual method call invocation for interface methods - or - should I say, our good old pure virtual functions - as we call it.&lt;br /&gt;
&lt;br /&gt;
Enjoy! (0:&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-2731661591054531182?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/8yH0Wp-xsKU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/2731661591054531182/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/02/delegates-vs-methods.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/2731661591054531182?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/2731661591054531182?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/8yH0Wp-xsKU/delegates-vs-methods.html" title="Delegates vs Methods" /><author><name>KMan</name><email>noreply@blogger.com</email></author><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/02/delegates-vs-methods.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIBR3c6eip7ImA9WhdRF0U.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-3205789610895644415</id><published>2011-02-17T20:28:00.000-08:00</published><updated>2011-08-07T22:49:16.912-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-07T22:49:16.912-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="returns" /><category scheme="http://www.blogger.com/atom/ns#" term="george thomas" /><category scheme="http://www.blogger.com/atom/ns#" term="Business Process" /><category scheme="http://www.blogger.com/atom/ns#" term="central bank" /><category scheme="http://www.blogger.com/atom/ns#" term="Business" /><category scheme="http://www.blogger.com/atom/ns#" term="electronic funds transfer" /><category scheme="http://www.blogger.com/atom/ns#" term="middleware" /><category scheme="http://www.blogger.com/atom/ns#" term="dhaka" /><category scheme="http://www.blogger.com/atom/ns#" term="eft" /><category scheme="http://www.blogger.com/atom/ns#" term="radix consulting" /><category scheme="http://www.blogger.com/atom/ns#" term="nacha" /><title>Offline - Electronic funds transfer</title><content type="html">Recently, I was involved in the development and implementation of the electronic funds transfer in offline mode. The destination was Dhaka, Bangladesh. The inward processing of EFT was imposed by the central bank, that all banks needed to pass the &lt;a href="http://en.wikipedia.org/wiki/System_integration_testing"&gt;SIT &lt;/a&gt;with the central bank's central server.&lt;br /&gt;
&lt;br /&gt;
Offline-mode meaning, that transaction would settle the next day; contrary to the middleware/switch concept, that a customer is standing on a channel(ATM, for instance) and waiting for the transaction to be processed then and there.The middleware that the central bank was using was called PBM (Participant banking module) server.&lt;br /&gt;
&lt;br /&gt;
The central bank hired a American consulting company to implement the central server; the company had similar experience of implementing the Clearing Houses (CA); somehow that I couldn't understand, the company suggested the central bank to use the twisted format of &lt;a href="http://en.wikipedia.org/wiki/NACHA_%E2%80%93_The_Electronic_Payments_Association"&gt;NACHA&lt;/a&gt; format. By *twisted* I mean, they turned the length based format into XML. Now XML is good, but not utilizing the powers of XML is not good. This means, we were provided with the XML format without providing the XSD schema, which the core of an XML, especially when you plan to exchange the data in huge amounts, and with a large customer base.&lt;br /&gt;
&lt;br /&gt;
Btw, in case if you are interested in the consulting company, it is called Radix Consulting, run by&amp;nbsp; "famous-in-the-payment-solutions-industry" &lt;a href="http://www.radixconsulting.com/Career%20Accomplishments%20Standalone%20PopUp.html"&gt;George Thomas&lt;/a&gt;. He is an nice person with a wealth of clearing house business knowledge.&lt;br /&gt;
&lt;br /&gt;
When I started with the training sessions, users were unable to understand their business process, so I had to come up with following simple visual. This turned out to be very helpful for them.&lt;br /&gt;
&lt;br /&gt;
Usually, the business process of inward clearing would be same in any banking industry, with a plus or minus one. This is for inward clearing, which means  processing of credits only, which was made mandatory by the central  bank.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-5MkOdfCpK4g/TV30CDqrL9I/AAAAAAAAAPI/mAJ0ztv7cww/s1600/EFT%2BBusiness%2BProcess.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="472" src="http://3.bp.blogspot.com/-5MkOdfCpK4g/TV30CDqrL9I/AAAAAAAAAPI/mAJ0ztv7cww/s640/EFT%2BBusiness%2BProcess.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
This is for those who want to understand the offline electronic funds transfer process; turning business classes into services.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-3205789610895644415?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/vTu6oQUjQbA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/3205789610895644415/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/02/offline-electronic-funds-transfer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/3205789610895644415?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/3205789610895644415?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/vTu6oQUjQbA/offline-electronic-funds-transfer.html" title="Offline - Electronic funds transfer" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-5MkOdfCpK4g/TV30CDqrL9I/AAAAAAAAAPI/mAJ0ztv7cww/s72-c/EFT%2BBusiness%2BProcess.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/02/offline-electronic-funds-transfer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUGRH46cSp7ImA9Wx9UEUU.&quot;"><id>tag:blogger.com,1999:blog-4252428322984442391.post-7046728251530934740</id><published>2011-02-08T07:50:00.000-08:00</published><updated>2011-02-08T07:50:25.019-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-08T07:50:25.019-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="OleDB" /><category scheme="http://www.blogger.com/atom/ns#" term="openrowset" /><category scheme="http://www.blogger.com/atom/ns#" term="sql server 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="sql server 2008 R2" /><category scheme="http://www.blogger.com/atom/ns#" term="JET" /><title>How to OPENROWSET on x64?</title><content type="html">&lt;b&gt;Requirement:&lt;/b&gt;&lt;br /&gt;
- Load data from csv source file&lt;br /&gt;
- Join with an internal table&lt;br /&gt;
- Trim a column of csv&lt;br /&gt;
- Insert into the target table&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Problem statement:&lt;/b&gt;&lt;br /&gt;
OPENROWSET query works on my dev machine, but doesn't work in test server environment, why?!&lt;br /&gt;
&lt;br /&gt;
Because dev machine:&lt;br /&gt;
- Wass x86 machine, having 32bit software installed on it&lt;br /&gt;
- 32 bit SQL Server 2008&lt;br /&gt;
- and because you cannot run 32bit driver for JET from a 64 bit application;&lt;br /&gt;
&lt;br /&gt;
And test machine:&lt;br /&gt;
- Was running on x64 bit, windows server 2008 R2, with SQL Server 2008 R2&lt;br /&gt;
&lt;br /&gt;
There are couple of solutions that you can target according to your workload and required effort:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_r-Q5M_GfhZo/TVFmEzh4F0I/AAAAAAAAAPE/AoPq12j8MOU/s1600/Clipart-Cartoon-Design-02.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/_r-Q5M_GfhZo/TVFmEzh4F0I/AAAAAAAAAPE/AoPq12j8MOU/s320/Clipart-Cartoon-Design-02.gif" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;
Solution 1:&lt;/b&gt; Use push technique instead of pulling from SQL Server&lt;br /&gt;
Write a visual studio app using CPUAll as configuration settings; and  run this app on the target machine.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Solution 2:&lt;/b&gt; Use Microsoft Access Database Engine 2010 Redistributable&lt;br /&gt;
&lt;br /&gt;
You can download &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c06b8369-60dd-4b64-a44b-84b371ede16d"&gt;x64 version&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;This download will install a set of components that facilitate the transfer of data between existing Microsoft Office files such as Microsoft Office Access 2010 (*.mdb and *.accdb) files and Microsoft Office Excel 2010 (*.xls, *.xlsx, and *.xlsb) files to other data sources such as Microsoft SQL Server. Connectivity to existing text files is also supported.ODBC and OLEDB drivers are installed for application developers to use in developing their applications with connectivity to Office file formats.&lt;/blockquote&gt;&lt;br /&gt;
&lt;pre&gt;SELECT * INTO #tem FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Data Source=c:\test.xlsx;Extended Properties=Excel 12.0')...[Sheet1$]

select * from #tem

drop table #tem
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Solution 3:&lt;/b&gt; Use temp table&lt;br /&gt;
- Load the csv in temporary table&lt;br /&gt;
- Join and select&lt;br /&gt;
- Insert&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;CREATE TABLE #tmp(a float, b varchar(max), c varchar(max));

BULK INSERT #tmp FROM 'c:\test.csv' 
WITH (FIELDTERMINATOR = ',' , FIRSTROW = 2 );

--If you want to see anything from the temp table, uncomment following loc
--SELECT * FROM #tmp

--Insert into select *
INSERT INTO TARGET_TABLE ([C1],[C2],[C3])

SELECT name=SUBSTRING(A.b,0,30)
,trimmedPhoneNumber= SUBSTRING(CONVERT(VARCHAR, A.c,0), 4,5)
,code=b
FROM #tmp A
 INNER JOIN OTHER_TABLE B ON REPLACE(STR(A.a, 3), SPACE(1), '0') = CONVERT(VARCHAR,B.CODE,0)
ORDER BY B.ID;

TRUNCATE TABLE #tmp;
DROP TABLE #tmp;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4252428322984442391-7046728251530934740?l=izlooite.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/wZVIK/~4/6qdyuo0kULw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://izlooite.blogspot.com/feeds/7046728251530934740/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://izlooite.blogspot.com/2011/02/how-to-openrowset-on-x64.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/7046728251530934740?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4252428322984442391/posts/default/7046728251530934740?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/wZVIK/~3/6qdyuo0kULw/how-to-openrowset-on-x64.html" title="How to OPENROWSET on x64?" /><author><name>KMan</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_r-Q5M_GfhZo/TVFmEzh4F0I/AAAAAAAAAPE/AoPq12j8MOU/s72-c/Clipart-Cartoon-Design-02.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://izlooite.blogspot.com/2011/02/how-to-openrowset-on-x64.html</feedburner:origLink></entry></feed>
