<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1327232692541091701</id><updated>2024-10-20T06:53:47.301+02:00</updated><category term="OpenUP"/><category term="TDD"/><category term="unit testing"/><category term="wpf"/><category term="alt.net"/><category term="dsl"/><category term="oslo"/><category term="ruby"/><category term="stackoverflow"/><category term="video"/><category term="Fitness"/><category term="Running"/><category term="agile soa"/><category term="agileUP"/><category term="alt.conference"/><category term="aop ioc"/><category term="asp.net_mvc"/><category term="bdd"/><category term="best practices"/><category term="blog"/><category term="blogger"/><category term="cape town"/><category term="cloud computing"/><category term="coding dojo"/><category term="coding guidelines"/><category term="cucumber"/><category term="cv&#39;s"/><category term="delete"/><category term="elmah"/><category term="f#"/><category term="facebook"/><category term="faizal human"/><category term="family"/><category term="foofnick"/><category term="format source code"/><category term="gac"/><category term="hanselminutes"/><category term="hello world"/><category term="hierarchy data type"/><category term="hierarchyid"/><category term="integration"/><category term="interests"/><category term="interpreted language"/><category term="introduction"/><category term="ironRuby"/><category term="jeff atwood"/><category term="job seeking"/><category term="joule"/><category term="jruby"/><category term="lesson"/><category term="mvc3"/><category term="nailgun"/><category term="ninject"/><category term="old fashioned"/><category term="pair programming"/><category term="podcast"/><category term="prism"/><category term="project management"/><category term="psychology"/><category term="python"/><category term="quality"/><category term="recession"/><category term="rubygems"/><category term="saving"/><category term="silverlight"/><category term="simplicity"/><category term="sketchflow"/><category term="smalltalk"/><category term="social"/><category term="sql server 2008"/><category term="stanford"/><category term="subversion"/><category term="svn"/><category term="teched2009"/><category term="techzing"/><category term="tools google mindomo destroyTwitter"/><category term="twitter"/><category term="values"/><category term="vlog"/><category term="windows workflow"/><category term="wordpress"/><category term="workflow"/><category term="xp"/><title type='text'>The Coder&#39;s Perspective</title><subtitle type='html'>Willem Odendaal&#39;s Technical Blog</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>218</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-5350082212314860110</id><published>2013-04-17T13:18:00.002+02:00</published><updated>2013-04-17T13:18:24.419+02:00</updated><title type='text'>What I look for in a company</title><content type='html'>Just a quick post on some things that are important to me. What do I look for in a company that I work for?
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;As little chaos as possible.&lt;/li&gt;
&lt;li&gt;A fun, social, friendly environment...&lt;/li&gt;
&lt;li&gt;... where people can still have some quiet time and focus.&lt;/li&gt;
&lt;li&gt;Working with clever people.&lt;/li&gt;
&lt;li&gt;Working with motivated people.&lt;/li&gt;
&lt;li&gt;Rewards - especially seeing your work go &quot;live&quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/5350082212314860110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/5350082212314860110' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5350082212314860110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5350082212314860110'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2013/04/what-i-look-for-in-company.html' title='What I look for in a company'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-5927431286632110340</id><published>2013-01-27T09:33:00.001+02:00</published><updated>2013-01-27T09:33:56.266+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Fitness"/><category scheme="http://www.blogger.com/atom/ns#" term="Running"/><title type='text'>Run Harder and Easier</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;&lt;p&gt;I like this advice from Active.com. It&#39;s in line with how I&#39;m training at the moment:&lt;/p&gt;  &lt;p&gt;  &lt;p style=&quot;padding-left: 30px;&quot;&gt;The principle, &quot;make your easy days easier and your hard days harder,&quot; couldn&#39;t be truer. But most runners tend to stay in the middle and do most of their runs at a moderate effort. They&#39;re missing out on a crucial way to improve running endurance when it&#39;s most responsive to training adaptations.&lt;/p&gt;  &lt;p style=&quot;padding-left: 30px;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;padding-left: 30px;&quot;&gt;Let&#39;s start with easy runs. It&#39;s critical that your easy runs are truly easy. To keep yourself honest, it can be helpful to wear a heart-rate monitor to ensure your heart rate stays low enough to qualify as easy. The easy run is not meant to help you gain fitness. It&#39;s simply in your schedule to add a little bit of mileage and promote recovery.&lt;/p&gt;  &lt;p style=&quot;padding-left: 30px;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;padding-left: 30px;&quot;&gt;With harder workouts, many runners don&#39;t put forth the effort they need to maximize fitness gains. Instead, they start to feel fatigued and cut the workout or slow their pace. In effect, they&amp;rsquo;re moving the difficulty of the workout closer to a moderate level. The next time you run a hard workout, make it exactly that&amp;mdash;hard.&lt;/p&gt;  &lt;p style=&quot;padding-left: 30px;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;padding-left: 30px;&quot;&gt;Balance the demands of your training program, and utilize these training strategies to get more endurance, speed and overall fitness from your workouts. You don&#39;t have to always train harder&amp;mdash;you just have to train smarter to run faster.&lt;/p&gt;  &lt;/p&gt;  &lt;p style=&quot;padding-left: 30px;&quot;&gt;&amp;nbsp;&lt;/p&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt; from &lt;a href=&quot;http://thecodersperspective.posterous.com/run-harder-and-easier&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/5927431286632110340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/5927431286632110340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5927431286632110340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5927431286632110340'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2013/01/run-harder-and-easier.html' title='Run Harder and Easier'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-473640288973982358</id><published>2012-06-26T14:51:00.001+02:00</published><updated>2012-06-26T14:51:23.333+02:00</updated><title type='text'>Remember to build a log viewer page</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;&lt;p&gt;&lt;strong&gt;Lesson number 1&lt;/strong&gt;: if you&#39;re building a website, be sure to be log any oddities and errors to a log file. That&#39;s easy enough. It&#39;s absolutely critical when you need to debug issues in a live system. We use NLog and it works great.&lt;/p&gt;  &lt;p&gt;But that&#39;s not enough.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Lesson number 2&lt;/strong&gt;: you probably won&#39;t have direct access to the live server and your precious log files, so remember to build a &lt;strong&gt;log file viewer page&lt;/strong&gt;, or at least a page that allows you to download log files. (Obviously you want to restrict this to Administrator users only.) &amp;nbsp;Log files are pretty useless if it takes a day to get the IT administrator to mail them to you. The turn-around time is just too slow.&lt;/p&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt; from &lt;a href=&quot;http://thecodersperspective.posterous.com/remember-to-build-a-log-viewer-page&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/473640288973982358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/473640288973982358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/473640288973982358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/473640288973982358'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/06/remember-to-build-log-viewer-page.html' title='Remember to build a log viewer page'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-5763904945423320407</id><published>2012-06-25T10:20:00.001+02:00</published><updated>2012-06-25T10:20:37.251+02:00</updated><title type='text'>Why integration tests are awesome</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;&lt;p&gt;I&#39;ve spent the last month continuing work on a project that was started by someone else. So it didn&#39;t have integration tests from the start.&lt;/p&gt;  &lt;p&gt;If you have ever written integration tests you know that a lot of effort goes into them and that they are very difficult to add midway through the project.&lt;/p&gt;  &lt;p&gt;So I have continued development and have not started to create an integration test suite... yet.&lt;/p&gt;  &lt;p&gt;But last week I once again realized why integration tests are so useful: I spent a fair amount of time fixing bugs that were introduced by other bug fixes. Naturally they were in unrelated parts of the system - places I wouldn&#39;t imagine things to break, so the bugs weren&#39;t detected during my development testing.&lt;/p&gt;  &lt;p&gt;Fortunately they &lt;strong&gt;were&lt;/strong&gt; detected in the UAT testing stage, so none of them will go live. But if testing wasn&#39;t as thorough...&lt;/p&gt;  &lt;p&gt;Integration tests definitely lead to a better quality product. And they let me sleep better at night.&lt;/p&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt; from &lt;a href=&quot;http://thecodersperspective.posterous.com/why-integration-tests-are-awesome&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/5763904945423320407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/5763904945423320407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5763904945423320407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5763904945423320407'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/06/why-integration-tests-are-awesome.html' title='Why integration tests are awesome'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-7948880488960506816</id><published>2012-06-20T15:57:00.001+02:00</published><updated>2012-06-20T15:57:59.863+02:00</updated><title type='text'>Debugging a weird 403.14 error in an MVC application</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;&lt;p&gt;I was getting a very strange &quot;HTTP 403.14 Directory Listing Denied&quot; error in my ASP.NET MVC3 application.&lt;/p&gt;  &lt;p&gt;The strange thing was that I was only getting this for a part of my site; most of the site still worked fine.&lt;/p&gt;  &lt;p&gt;I got the error whenever I tried to access the /Partners/ controller. Folder rights in the file system were correct. The controller did exist. Yet I kept getting this error.&lt;/p&gt;  &lt;p&gt;Turns out the problem was a deployment of front-end files that went wrong. Instead of copying a view file into /Views/Partners/ I copied the /Partners/ folder to the root of my website. So the structure was:&lt;/p&gt;  &lt;p style=&quot;padding-left: 30px;&quot;&gt;/root/Partners/&lt;/p&gt;  &lt;p style=&quot;padding-left: 30px;&quot;&gt;/root/Views/Partners/&lt;/p&gt;  &lt;p&gt;That first (incorrect) partners folder was confusing the hell out of MVC. I deleted it and the problem went away.&lt;/p&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt; from &lt;a href=&quot;http://thecodersperspective.posterous.com/debugging-a-weird-40314-error-in-an-mvc-appli&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/7948880488960506816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/7948880488960506816' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/7948880488960506816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/7948880488960506816'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/06/debugging-weird-40314-error-in-mvc.html' title='Debugging a weird 403.14 error in an MVC application'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-3274013070218154041</id><published>2012-06-19T08:50:00.001+02:00</published><updated>2012-06-19T08:50:23.526+02:00</updated><title type='text'>Pros and Cons of using an ORM</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;&lt;p&gt;I&#39;ve been having loads of second thoughts lately about using ORMs. Do they cause more problems than they solve?&lt;/p&gt;  &lt;p&gt;So Samuel Goldenbaum, whom I&#39;ve done some work, shared some pro&#39;s and cons with me. I asked if I could blog his thoughts because they are insightful:&lt;/p&gt;  &lt;p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;1.&lt;span style=&quot;&quot;&gt; &lt;/span&gt;Most NB is that allows you to focus in entities and not the persistence implementation. i.e. do I need to care how something is saved within the underlying provider &amp;ndash; and do I need to care about that for all the different providers I will use? I want to say _session.Save(myOrder) and move on to other domain concerns.&lt;/p&gt;  &lt;p&gt;2.&lt;span style=&quot;&quot;&gt; &lt;/span&gt;Huge cutdown on code write&lt;/p&gt;  &lt;p&gt;3.&lt;span style=&quot;&quot;&gt; &lt;/span&gt;Abstract your db &amp;ndash; allows you to switch between db&amp;rsquo;s pretty easy. You write the same set of code. Also think about your dev environment &amp;ndash; you can run super-fast sqlite for development &amp;ndash; more nb when doing TDD, and also not be concerned about licences for everyone to have copies of SQL.&lt;/p&gt;  &lt;p&gt;4.&lt;span style=&quot;&quot;&gt; &lt;/span&gt;Abstract your db instances &amp;ndash; allows you to write the same set of code to access multiple db instances. You may have a situation where you have MySql instances for some readonly denormalized data yet also have a large MS SQL server for core transactional stuff, and maybe even a Firebird or Postgresql instance. MS SQL is pricey these days.&lt;/p&gt;  &lt;p&gt;5.&lt;span style=&quot;&quot;&gt; &lt;/span&gt;Entity tracking &amp;ndash; how else would you track changes to entities? All built in.&lt;/p&gt;  &lt;p&gt;6.&lt;span style=&quot;&quot;&gt; &lt;/span&gt;Cascading updates/deletes.&lt;/p&gt;  &lt;p&gt;7.&lt;span style=&quot;&quot;&gt; &lt;/span&gt;Entity navigation and eager loading entities i.e. Order.OrderLines.First().Product.Category.Name.&lt;/p&gt;  &lt;p&gt;8.&lt;span style=&quot;&quot;&gt; &lt;/span&gt;Powerful query language &amp;ndash; lookup things like Futures and Transformers in NH&lt;/p&gt;  &lt;p&gt;9.&lt;span style=&quot;&quot;&gt; &lt;/span&gt;Fits in with TDD/DDD smoothly&lt;/p&gt;  &lt;p&gt;10.&lt;span style=&quot;&quot;&gt; &lt;/span&gt;Makes refactoring MUCH easier &amp;ndash; esp when able to avoid &amp;ldquo;magic strings&amp;rdquo;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Cons:&lt;/p&gt;  &lt;p&gt;1.&lt;span style=&quot;&quot;&gt; &lt;/span&gt;Like anything, additional learning curve&lt;/p&gt;  &lt;p&gt;2.&lt;span style=&quot;&quot;&gt; &lt;/span&gt;Bulk updating is not great &amp;ndash; but can be tweaked to improve performance&lt;/p&gt;  &lt;p&gt;3.&lt;span style=&quot;&quot;&gt; &lt;/span&gt;?&lt;/p&gt;  &lt;p /&gt;  &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt; from &lt;a href=&quot;http://thecodersperspective.posterous.com/pros-and-cons-of-using-an-orm&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/3274013070218154041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/3274013070218154041' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/3274013070218154041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/3274013070218154041'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/06/pros-and-cons-of-using-orm.html' title='Pros and Cons of using an ORM'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-4477713992706324722</id><published>2012-05-14T21:06:00.001+02:00</published><updated>2012-05-14T21:06:49.181+02:00</updated><title type='text'>The Extract and Override pattern</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;I&amp;#39;m in the process of reading Roy Osherove&amp;#39;s book, &amp;quot;The Art of Unit Testing&amp;quot;. It&amp;#39;s a great book - recommended for both Gurus and N00bs; I&amp;#39;ve learnt a couple of new things.&lt;p /&gt;&lt;div&gt;One of those ideas is the &amp;quot;Extract and Override&amp;quot; pattern. It is a dependency breaking technique described in &amp;quot;The Art of Unit Testing&amp;quot;, but I think the name stems from Michael Feather&amp;#39;s book, &amp;quot;Working Effectively with Legacy Code&amp;quot;.&lt;/div&gt; &lt;p /&gt;&lt;div&gt;I&amp;#39;ll describe the scenario where this pattern can help. Imagine you need to unit test a class, BookingManager. You specifically want to test the MakeBooking method. Note how the MakeBooking method depends on other methods and those methods use external dependencies:&lt;/div&gt; &lt;p /&gt;&lt;div&gt;&lt;div class=&quot;data type-c&quot;&gt; &lt;table class=&quot;lines&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt; &lt;tr&gt; &lt;td&gt; &lt;pre class=&quot;line_numbers&quot;&gt;&lt;span rel=&quot;#L1&quot; id=&quot;L1&quot;&gt;1&lt;/span&gt; &lt;span rel=&quot;#L2&quot; id=&quot;L2&quot;&gt;2&lt;/span&gt; &lt;span rel=&quot;#L3&quot; id=&quot;L3&quot;&gt;3&lt;/span&gt; &lt;span rel=&quot;#L4&quot; id=&quot;L4&quot;&gt;4&lt;/span&gt; &lt;span rel=&quot;#L5&quot; id=&quot;L5&quot;&gt;5&lt;/span&gt; &lt;span rel=&quot;#L6&quot; id=&quot;L6&quot;&gt;6&lt;/span&gt; &lt;span rel=&quot;#L7&quot; id=&quot;L7&quot;&gt;7&lt;/span&gt; &lt;span rel=&quot;#L8&quot; id=&quot;L8&quot;&gt;8&lt;/span&gt; &lt;span rel=&quot;#L9&quot; id=&quot;L9&quot;&gt;9&lt;/span&gt; &lt;span rel=&quot;#L10&quot; id=&quot;L10&quot;&gt;10&lt;/span&gt; &lt;span rel=&quot;#L11&quot; id=&quot;L11&quot;&gt;11&lt;/span&gt; &lt;span rel=&quot;#L12&quot; id=&quot;L12&quot;&gt;12&lt;/span&gt; &lt;span rel=&quot;#L13&quot; id=&quot;L13&quot;&gt;13&lt;/span&gt; &lt;span rel=&quot;#L14&quot; id=&quot;L14&quot;&gt;14&lt;/span&gt; &lt;span rel=&quot;#L15&quot; id=&quot;L15&quot;&gt;15&lt;/span&gt; &lt;span rel=&quot;#L16&quot; id=&quot;L16&quot;&gt;16&lt;/span&gt; &lt;span rel=&quot;#L17&quot; id=&quot;L17&quot;&gt;17&lt;/span&gt; &lt;span rel=&quot;#L18&quot; id=&quot;L18&quot;&gt;18&lt;/span&gt; &lt;span rel=&quot;#L19&quot; id=&quot;L19&quot;&gt;19&lt;/span&gt; &lt;span rel=&quot;#L20&quot; id=&quot;L20&quot;&gt;20&lt;/span&gt; &lt;span rel=&quot;#L21&quot; id=&quot;L21&quot;&gt;21&lt;/span&gt; &lt;span rel=&quot;#L22&quot; id=&quot;L22&quot;&gt;22&lt;/span&gt; &lt;span rel=&quot;#L23&quot; id=&quot;L23&quot;&gt;23&lt;/span&gt; &lt;span rel=&quot;#L24&quot; id=&quot;L24&quot;&gt;24&lt;/span&gt; &lt;span rel=&quot;#L25&quot; id=&quot;L25&quot;&gt;25&lt;/span&gt; &lt;span rel=&quot;#L26&quot; id=&quot;L26&quot;&gt;26&lt;/span&gt; &lt;span rel=&quot;#L27&quot; id=&quot;L27&quot;&gt;27&lt;/span&gt; &lt;span rel=&quot;#L28&quot; id=&quot;L28&quot;&gt;28&lt;/span&gt; &lt;span rel=&quot;#L29&quot; id=&quot;L29&quot;&gt;29&lt;/span&gt; &lt;span rel=&quot;#L30&quot; id=&quot;L30&quot;&gt;30&lt;/span&gt; &lt;span rel=&quot;#L31&quot; id=&quot;L31&quot;&gt;31&lt;/span&gt; &lt;span rel=&quot;#L32&quot; id=&quot;L32&quot;&gt;32&lt;/span&gt; &lt;span rel=&quot;#L33&quot; id=&quot;L33&quot;&gt;33&lt;/span&gt; &lt;span rel=&quot;#L34&quot; id=&quot;L34&quot;&gt;34&lt;/span&gt; &lt;span rel=&quot;#L35&quot; id=&quot;L35&quot;&gt;35&lt;/span&gt; &lt;span rel=&quot;#L36&quot; id=&quot;L36&quot;&gt;36&lt;/span&gt; &lt;span rel=&quot;#L37&quot; id=&quot;L37&quot;&gt;37&lt;/span&gt; &lt;span rel=&quot;#L38&quot; id=&quot;L38&quot;&gt;38&lt;/span&gt; &lt;span rel=&quot;#L39&quot; id=&quot;L39&quot;&gt;39&lt;/span&gt; &lt;span rel=&quot;#L40&quot; id=&quot;L40&quot;&gt;40&lt;/span&gt; &lt;span rel=&quot;#L41&quot; id=&quot;L41&quot;&gt;41&lt;/span&gt; &lt;span rel=&quot;#L42&quot; id=&quot;L42&quot;&gt;42&lt;/span&gt; &lt;span rel=&quot;#L43&quot; id=&quot;L43&quot;&gt;43&lt;/span&gt; &lt;span rel=&quot;#L44&quot; id=&quot;L44&quot;&gt;44&lt;/span&gt; &lt;span rel=&quot;#L45&quot; id=&quot;L45&quot;&gt;45&lt;/span&gt; &lt;span rel=&quot;#L46&quot; id=&quot;L46&quot;&gt;46&lt;/span&gt; &lt;span rel=&quot;#L47&quot; id=&quot;L47&quot;&gt;47&lt;/span&gt; &lt;span rel=&quot;#L48&quot; id=&quot;L48&quot;&gt;48&lt;/span&gt; &lt;span rel=&quot;#L49&quot; id=&quot;L49&quot;&gt;49&lt;/span&gt; &lt;span rel=&quot;#L50&quot; id=&quot;L50&quot;&gt;50&lt;/span&gt; &lt;span rel=&quot;#L51&quot; id=&quot;L51&quot;&gt;51&lt;/span&gt; &lt;span rel=&quot;#L52&quot; id=&quot;L52&quot;&gt;52&lt;/span&gt; &lt;span rel=&quot;#L53&quot; id=&quot;L53&quot;&gt;53&lt;/span&gt; &lt;span rel=&quot;#L54&quot; id=&quot;L54&quot;&gt;54&lt;/span&gt; &lt;span rel=&quot;#L55&quot; id=&quot;L55&quot;&gt;55&lt;/span&gt; &lt;/pre&gt; &lt;/td&gt; &lt;td width=&quot;100%&quot;&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;pre /&gt;&lt;div class=&quot;line&quot; id=&quot;LC1&quot;&gt;	&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BookingManager&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC2&quot;&gt;	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC3&quot;&gt;		&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookingWebService&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookingWebService&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC4&quot;&gt;		&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookingAuditingService&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookingAuditingService&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC5&quot;&gt;		&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PartnerProgram&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PartnerProgram&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC6&quot;&gt;		&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BlacklistChecker&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BlacklistChecker&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC7&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC8&quot;&gt;		&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookingResponse&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;MakeBooking&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;serviceId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personsTraveling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DateTime&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC9&quot;&gt;		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC10&quot;&gt;			&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TravelerIsValid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC11&quot;&gt;			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC12&quot;&gt;				&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;BookingResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Traveler is invalid, unable to continue. View audit logs for more details&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC13&quot;&gt;			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC14&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC15&quot;&gt;			&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DateTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC16&quot;&gt;			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC17&quot;&gt;				&lt;span class=&quot;n&quot;&gt;BookingWebService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RecordBooking&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;serviceId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personsTraveling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC18&quot;&gt;				&lt;span class=&quot;n&quot;&gt;LogTravelRewardInfoWithPartner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personsTraveling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC19&quot;&gt;				&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;BookingResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Success.&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC20&quot;&gt;			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC21&quot;&gt;			&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC22&quot;&gt;			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC23&quot;&gt;				&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;BookingResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Booking date was in the past.&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC24&quot;&gt;			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC25&quot;&gt;		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC26&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC27&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC28&quot;&gt;		&lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;LogTravelRewardInfoWithPartner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personsTraveling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DateTime&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC29&quot;&gt;		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC30&quot;&gt;			&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PartnerSession&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;partnerSession&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PartnerProgram&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;OpenSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC31&quot;&gt;			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC32&quot;&gt;				&lt;span class=&quot;n&quot;&gt;partnerSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RecordRewardInfo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personsTraveling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC33&quot;&gt;			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC34&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC35&quot;&gt;			&lt;span class=&quot;n&quot;&gt;BookingAuditingService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WriteAuditEntry&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Recorded log travel reward with partner service.&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC36&quot;&gt;		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC37&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC38&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC39&quot;&gt;		&lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;TravelerIsValid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC40&quot;&gt;		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC41&quot;&gt;			&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BookingWebService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TravelerIsActive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC42&quot;&gt;			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC43&quot;&gt;				&lt;span class=&quot;n&quot;&gt;BookingAuditingService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WriteAuditEntry&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Format&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Traveler {0} was inactive. BookingManager should not have been called.&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC44&quot;&gt;				&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC45&quot;&gt;			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC46&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC47&quot;&gt;			&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BlacklistChecker&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TravelerIsBlacklisted&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC48&quot;&gt;			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC49&quot;&gt;				&lt;span class=&quot;n&quot;&gt;BookingAuditingService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WriteAuditEntry&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Format&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Traveler {0} was blacklisted. BookingManager should not have been called.&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC50&quot;&gt;				&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC51&quot;&gt;			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC52&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC53&quot;&gt;			&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC54&quot;&gt;		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC55&quot;&gt;	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt; &lt;/div&gt;&lt;p /&gt;&lt;div&gt;What the Extract and Override pattern allows is for you to test the MakeBooking method in isolation, without the all the logic and external dependencies in the other methods it depends on. You extract a sub class from the class under test, and *override* the methods you don&amp;#39;t care about. Those method can return predefined values. Like so:&lt;/div&gt; &lt;p /&gt;&lt;div&gt;&lt;div class=&quot;data type-c&quot;&gt; &lt;table class=&quot;lines&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt; &lt;tr&gt; &lt;td&gt; &lt;pre class=&quot;line_numbers&quot;&gt;&lt;span rel=&quot;#L1&quot; id=&quot;L1&quot;&gt;1&lt;/span&gt; &lt;span rel=&quot;#L2&quot; id=&quot;L2&quot;&gt;2&lt;/span&gt; &lt;span rel=&quot;#L3&quot; id=&quot;L3&quot;&gt;3&lt;/span&gt; &lt;span rel=&quot;#L4&quot; id=&quot;L4&quot;&gt;4&lt;/span&gt; &lt;span rel=&quot;#L5&quot; id=&quot;L5&quot;&gt;5&lt;/span&gt; &lt;span rel=&quot;#L6&quot; id=&quot;L6&quot;&gt;6&lt;/span&gt; &lt;span rel=&quot;#L7&quot; id=&quot;L7&quot;&gt;7&lt;/span&gt; &lt;span rel=&quot;#L8&quot; id=&quot;L8&quot;&gt;8&lt;/span&gt; &lt;span rel=&quot;#L9&quot; id=&quot;L9&quot;&gt;9&lt;/span&gt; &lt;span rel=&quot;#L10&quot; id=&quot;L10&quot;&gt;10&lt;/span&gt; &lt;span rel=&quot;#L11&quot; id=&quot;L11&quot;&gt;11&lt;/span&gt; &lt;span rel=&quot;#L12&quot; id=&quot;L12&quot;&gt;12&lt;/span&gt; &lt;/pre&gt; &lt;/td&gt; &lt;td width=&quot;100%&quot;&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;pre /&gt;&lt;div class=&quot;line&quot; id=&quot;LC1&quot;&gt;	&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BookingManagerTestMakeBooking&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookingManager&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC2&quot;&gt;	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC3&quot;&gt;		&lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;LogTravelRewardInfoWithPartner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personsTraveling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DateTime&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC4&quot;&gt;		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC5&quot;&gt;			&lt;span class=&quot;c1&quot;&gt;//All good.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC6&quot;&gt;		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC7&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC8&quot;&gt;		&lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;TravelerIsValid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC9&quot;&gt;		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC10&quot;&gt;			&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC11&quot;&gt;		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC12&quot;&gt;	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt; &lt;/div&gt;&lt;p /&gt;&lt;div&gt;We had to mark the methods we are overriding as virtual. The test can create an instance of THIS class instead of the actual class, but it will still test the actual MakeBooking method. The methods our MakeBooking method depends on are stub methods - they simply succeed.&lt;/div&gt; &lt;p /&gt;&lt;div&gt;This pattern helps you to isolate the method you want to test from other methods in the same class under test. Pretty useful!&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt; from &lt;a href=&quot;http://thecodersperspective.posterous.com/the-extract-and-override-pattern-13661&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/4477713992706324722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/4477713992706324722' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/4477713992706324722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/4477713992706324722'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/05/extract-and-override-pattern_14.html' title='The Extract and Override pattern'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-6829454001415838944</id><published>2012-05-14T13:17:00.001+02:00</published><updated>2012-05-14T13:17:32.211+02:00</updated><title type='text'>The Extract and Override pattern</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;&lt;p&gt;&lt;span style=&quot;&quot;&gt;I&#39;m in the process of reading Roy Osherove&#39;s book, &quot;The Art of Unit Testing&quot;. It&#39;s a great book - recommended for both Gurus and N00bs; I&#39;ve learnt a couple of new things.&lt;/span&gt;  &lt;p /&gt;  &lt;div style=&quot;&quot;&gt;One of those ideas is the &quot;Extract and Override&quot; pattern. It is a dependency breaking technique described in &quot;The Art of Unit Testing&quot;, but I think the name stems from Michael Feather&#39;s book, &quot;Working Effectively with Legacy Code&quot;.&lt;/div&gt;  &lt;p /&gt;  &lt;div style=&quot;&quot;&gt;I&#39;ll describe the scenario where this pattern can help. Imagine you need to unit test a class, BookingManager. You specifically want to test the MakeBooking method. Note how the MakeBooking method depends on other methods and those methods use external dependencies:&lt;/div&gt;  &lt;p /&gt;  &lt;div style=&quot;&quot;&gt;&lt;div class=&quot;data type-c&quot;&gt; &lt;table class=&quot;lines&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt; &lt;tr&gt; &lt;td&gt; &lt;pre class=&quot;line_numbers&quot;&gt;&lt;span rel=&quot;#L1&quot; id=&quot;L1&quot;&gt;1&lt;/span&gt; &lt;span rel=&quot;#L2&quot; id=&quot;L2&quot;&gt;2&lt;/span&gt; &lt;span rel=&quot;#L3&quot; id=&quot;L3&quot;&gt;3&lt;/span&gt; &lt;span rel=&quot;#L4&quot; id=&quot;L4&quot;&gt;4&lt;/span&gt; &lt;span rel=&quot;#L5&quot; id=&quot;L5&quot;&gt;5&lt;/span&gt; &lt;span rel=&quot;#L6&quot; id=&quot;L6&quot;&gt;6&lt;/span&gt; &lt;span rel=&quot;#L7&quot; id=&quot;L7&quot;&gt;7&lt;/span&gt; &lt;span rel=&quot;#L8&quot; id=&quot;L8&quot;&gt;8&lt;/span&gt; &lt;span rel=&quot;#L9&quot; id=&quot;L9&quot;&gt;9&lt;/span&gt; &lt;span rel=&quot;#L10&quot; id=&quot;L10&quot;&gt;10&lt;/span&gt; &lt;span rel=&quot;#L11&quot; id=&quot;L11&quot;&gt;11&lt;/span&gt; &lt;span rel=&quot;#L12&quot; id=&quot;L12&quot;&gt;12&lt;/span&gt; &lt;span rel=&quot;#L13&quot; id=&quot;L13&quot;&gt;13&lt;/span&gt; &lt;span rel=&quot;#L14&quot; id=&quot;L14&quot;&gt;14&lt;/span&gt; &lt;span rel=&quot;#L15&quot; id=&quot;L15&quot;&gt;15&lt;/span&gt; &lt;span rel=&quot;#L16&quot; id=&quot;L16&quot;&gt;16&lt;/span&gt; &lt;span rel=&quot;#L17&quot; id=&quot;L17&quot;&gt;17&lt;/span&gt; &lt;span rel=&quot;#L18&quot; id=&quot;L18&quot;&gt;18&lt;/span&gt; &lt;span rel=&quot;#L19&quot; id=&quot;L19&quot;&gt;19&lt;/span&gt; &lt;span rel=&quot;#L20&quot; id=&quot;L20&quot;&gt;20&lt;/span&gt; &lt;span rel=&quot;#L21&quot; id=&quot;L21&quot;&gt;21&lt;/span&gt; &lt;span rel=&quot;#L22&quot; id=&quot;L22&quot;&gt;22&lt;/span&gt; &lt;span rel=&quot;#L23&quot; id=&quot;L23&quot;&gt;23&lt;/span&gt; &lt;span rel=&quot;#L24&quot; id=&quot;L24&quot;&gt;24&lt;/span&gt; &lt;span rel=&quot;#L25&quot; id=&quot;L25&quot;&gt;25&lt;/span&gt; &lt;span rel=&quot;#L26&quot; id=&quot;L26&quot;&gt;26&lt;/span&gt; &lt;span rel=&quot;#L27&quot; id=&quot;L27&quot;&gt;27&lt;/span&gt; &lt;span rel=&quot;#L28&quot; id=&quot;L28&quot;&gt;28&lt;/span&gt; &lt;span rel=&quot;#L29&quot; id=&quot;L29&quot;&gt;29&lt;/span&gt; &lt;span rel=&quot;#L30&quot; id=&quot;L30&quot;&gt;30&lt;/span&gt; &lt;span rel=&quot;#L31&quot; id=&quot;L31&quot;&gt;31&lt;/span&gt; &lt;span rel=&quot;#L32&quot; id=&quot;L32&quot;&gt;32&lt;/span&gt; &lt;span rel=&quot;#L33&quot; id=&quot;L33&quot;&gt;33&lt;/span&gt; &lt;span rel=&quot;#L34&quot; id=&quot;L34&quot;&gt;34&lt;/span&gt; &lt;span rel=&quot;#L35&quot; id=&quot;L35&quot;&gt;35&lt;/span&gt; &lt;span rel=&quot;#L36&quot; id=&quot;L36&quot;&gt;36&lt;/span&gt; &lt;span rel=&quot;#L37&quot; id=&quot;L37&quot;&gt;37&lt;/span&gt; &lt;span rel=&quot;#L38&quot; id=&quot;L38&quot;&gt;38&lt;/span&gt; &lt;span rel=&quot;#L39&quot; id=&quot;L39&quot;&gt;39&lt;/span&gt; &lt;span rel=&quot;#L40&quot; id=&quot;L40&quot;&gt;40&lt;/span&gt; &lt;span rel=&quot;#L41&quot; id=&quot;L41&quot;&gt;41&lt;/span&gt; &lt;span rel=&quot;#L42&quot; id=&quot;L42&quot;&gt;42&lt;/span&gt; &lt;span rel=&quot;#L43&quot; id=&quot;L43&quot;&gt;43&lt;/span&gt; &lt;span rel=&quot;#L44&quot; id=&quot;L44&quot;&gt;44&lt;/span&gt; &lt;span rel=&quot;#L45&quot; id=&quot;L45&quot;&gt;45&lt;/span&gt; &lt;span rel=&quot;#L46&quot; id=&quot;L46&quot;&gt;46&lt;/span&gt; &lt;span rel=&quot;#L47&quot; id=&quot;L47&quot;&gt;47&lt;/span&gt; &lt;span rel=&quot;#L48&quot; id=&quot;L48&quot;&gt;48&lt;/span&gt; &lt;span rel=&quot;#L49&quot; id=&quot;L49&quot;&gt;49&lt;/span&gt; &lt;span rel=&quot;#L50&quot; id=&quot;L50&quot;&gt;50&lt;/span&gt; &lt;span rel=&quot;#L51&quot; id=&quot;L51&quot;&gt;51&lt;/span&gt; &lt;span rel=&quot;#L52&quot; id=&quot;L52&quot;&gt;52&lt;/span&gt; &lt;span rel=&quot;#L53&quot; id=&quot;L53&quot;&gt;53&lt;/span&gt; &lt;span rel=&quot;#L54&quot; id=&quot;L54&quot;&gt;54&lt;/span&gt; &lt;span rel=&quot;#L55&quot; id=&quot;L55&quot;&gt;55&lt;/span&gt; &lt;/pre&gt; &lt;/td&gt; &lt;td width=&quot;100%&quot;&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;pre /&gt;&lt;div class=&quot;line&quot; id=&quot;LC1&quot;&gt;	&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BookingManager&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC2&quot;&gt;	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC3&quot;&gt;		&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookingWebService&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookingWebService&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC4&quot;&gt;		&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookingAuditingService&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookingAuditingService&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC5&quot;&gt;		&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PartnerProgram&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PartnerProgram&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC6&quot;&gt;		&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BlacklistChecker&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BlacklistChecker&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC7&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC8&quot;&gt;		&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookingResponse&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;MakeBooking&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;serviceId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personsTraveling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DateTime&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC9&quot;&gt;		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC10&quot;&gt;			&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TravelerIsValid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC11&quot;&gt;			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC12&quot;&gt;				&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;BookingResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Traveler is invalid, unable to continue. View audit logs for more details&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC13&quot;&gt;			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC14&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC15&quot;&gt;			&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DateTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC16&quot;&gt;			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC17&quot;&gt;				&lt;span class=&quot;n&quot;&gt;BookingWebService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RecordBooking&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;serviceId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personsTraveling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC18&quot;&gt;				&lt;span class=&quot;n&quot;&gt;LogTravelRewardInfoWithPartner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personsTraveling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC19&quot;&gt;				&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;BookingResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Success.&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC20&quot;&gt;			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC21&quot;&gt;			&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC22&quot;&gt;			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC23&quot;&gt;				&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;BookingResponse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Booking date was in the past.&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC24&quot;&gt;			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC25&quot;&gt;		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC26&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC27&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC28&quot;&gt;		&lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;LogTravelRewardInfoWithPartner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personsTraveling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DateTime&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC29&quot;&gt;		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC30&quot;&gt;			&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PartnerSession&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;partnerSession&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PartnerProgram&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;OpenSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC31&quot;&gt;			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC32&quot;&gt;				&lt;span class=&quot;n&quot;&gt;partnerSession&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RecordRewardInfo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personsTraveling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC33&quot;&gt;			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC34&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC35&quot;&gt;			&lt;span class=&quot;n&quot;&gt;BookingAuditingService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WriteAuditEntry&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Recorded log travel reward with partner service.&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC36&quot;&gt;		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC37&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC38&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC39&quot;&gt;		&lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;TravelerIsValid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC40&quot;&gt;		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC41&quot;&gt;			&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BookingWebService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TravelerIsActive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC42&quot;&gt;			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC43&quot;&gt;				&lt;span class=&quot;n&quot;&gt;BookingAuditingService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WriteAuditEntry&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Format&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Traveler {0} was inactive. BookingManager should not have been called.&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC44&quot;&gt;				&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC45&quot;&gt;			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC46&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC47&quot;&gt;			&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BlacklistChecker&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TravelerIsBlacklisted&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC48&quot;&gt;			&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC49&quot;&gt;				&lt;span class=&quot;n&quot;&gt;BookingAuditingService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WriteAuditEntry&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Format&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Traveler {0} was blacklisted. BookingManager should not have been called.&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC50&quot;&gt;				&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC51&quot;&gt;			&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC52&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC53&quot;&gt;			&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC54&quot;&gt;		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC55&quot;&gt;	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt;&lt;/div&gt;  &lt;p /&gt;  &lt;div style=&quot;&quot;&gt;What the Extract and Override pattern allows is for you to test the MakeBooking method in isolation, without the all the logic and external dependencies in the other methods it depends on. You extract a sub class from the class under test, and *override* the methods you don&#39;t care about. Those method can return predefined values. Like so:&lt;/div&gt;  &lt;p /&gt;  &lt;div style=&quot;&quot;&gt;&lt;div class=&quot;data type-c&quot;&gt; &lt;table class=&quot;lines&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt; &lt;tr&gt; &lt;td&gt; &lt;pre class=&quot;line_numbers&quot;&gt;&lt;span rel=&quot;#L1&quot; id=&quot;L1&quot;&gt;1&lt;/span&gt; &lt;span rel=&quot;#L2&quot; id=&quot;L2&quot;&gt;2&lt;/span&gt; &lt;span rel=&quot;#L3&quot; id=&quot;L3&quot;&gt;3&lt;/span&gt; &lt;span rel=&quot;#L4&quot; id=&quot;L4&quot;&gt;4&lt;/span&gt; &lt;span rel=&quot;#L5&quot; id=&quot;L5&quot;&gt;5&lt;/span&gt; &lt;span rel=&quot;#L6&quot; id=&quot;L6&quot;&gt;6&lt;/span&gt; &lt;span rel=&quot;#L7&quot; id=&quot;L7&quot;&gt;7&lt;/span&gt; &lt;span rel=&quot;#L8&quot; id=&quot;L8&quot;&gt;8&lt;/span&gt; &lt;span rel=&quot;#L9&quot; id=&quot;L9&quot;&gt;9&lt;/span&gt; &lt;span rel=&quot;#L10&quot; id=&quot;L10&quot;&gt;10&lt;/span&gt; &lt;span rel=&quot;#L11&quot; id=&quot;L11&quot;&gt;11&lt;/span&gt; &lt;span rel=&quot;#L12&quot; id=&quot;L12&quot;&gt;12&lt;/span&gt; &lt;/pre&gt; &lt;/td&gt; &lt;td width=&quot;100%&quot;&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;pre /&gt;&lt;div class=&quot;line&quot; id=&quot;LC1&quot;&gt;	&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BookingManagerTestMakeBooking&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BookingManager&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC2&quot;&gt;	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC3&quot;&gt;		&lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;LogTravelRewardInfoWithPartner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;personsTraveling&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DateTime&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC4&quot;&gt;		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC5&quot;&gt;			&lt;span class=&quot;c1&quot;&gt;//All good.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC6&quot;&gt;		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC7&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC8&quot;&gt;		&lt;span class=&quot;k&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;TravelerIsValid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Guid&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;travelerId&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC9&quot;&gt;		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC10&quot;&gt;			&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC11&quot;&gt;		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC12&quot;&gt;	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt;&lt;/div&gt;  &lt;p /&gt;  &lt;div style=&quot;&quot;&gt;We had to mark the methods we are overriding as virtual. The test can create an instance of THIS class instead of the actual class, but it will still test the actual MakeBooking method. The methods our MakeBooking method depends on are stub methods - they simply succeed.&lt;/div&gt;  &lt;p /&gt;  &lt;div style=&quot;&quot;&gt;This pattern helps you to isolate the method you want to test from other methods in the same class under test. Pretty useful!&lt;/div&gt;  &lt;/p&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt; from &lt;a href=&quot;http://thecodersperspective.posterous.com/the-extract-and-override-pattern&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/6829454001415838944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/6829454001415838944' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/6829454001415838944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/6829454001415838944'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/05/extract-and-override-pattern.html' title='The Extract and Override pattern'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-5665689746937035033</id><published>2012-05-04T16:37:00.001+02:00</published><updated>2012-05-04T16:37:10.807+02:00</updated><title type='text'>Published Interface</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;Martin Fowler defines a Published Interface as a class that is used outside the code base it is defined in. It&amp;#39;s more public than public. I think we need a keyword for this in C# (veryPublic? :). &lt;p /&gt;&lt;div&gt;Here&amp;#39;s Martin&amp;#39;s post: &lt;a href=&quot;http://martinfowler.com/bliki/PublishedInterface.html&quot;&gt;http://martinfowler.com/bliki/PublishedInterface.html&lt;/a&gt;&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt; from &lt;a href=&quot;http://thecodersperspective.posterous.com/published-interface&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/5665689746937035033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/5665689746937035033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5665689746937035033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5665689746937035033'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/05/published-interface.html' title='Published Interface'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-5767197529349666980</id><published>2012-05-04T14:46:00.001+02:00</published><updated>2012-05-04T14:46:31.173+02:00</updated><title type='text'>Handling error: &amp;quot;401 - Unauthorized: Access is denied due to invalid credentials&amp;quot;</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;I struggled with an error from IIS after copying a website from one server to another: &amp;quot;401 - Unauthorized: Access is denied due to invalid credentials&amp;quot;&lt;p /&gt;&lt;div&gt;The website app pool identity was set to ApplicationPoolIdentity, and that user had full rights to the physical folder path. So I had no idea why I would be getting permissions errors.&lt;/div&gt; &lt;p /&gt;&lt;div&gt;Finally my colleague, Richard, helped me figure out that assigning rights to the AppPool user was not enough. You also have to give folder rights to the local IUSR account. Note that this is different from the IIS_IUSRS account.&lt;/div&gt; &lt;p /&gt;&lt;div&gt;Lovely.&lt;br /&gt;&lt;p /&gt;&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt; from &lt;a href=&quot;http://thecodersperspective.posterous.com/handling-error-401-unauthorized-access-is-den&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/5767197529349666980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/5767197529349666980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5767197529349666980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5767197529349666980'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/05/handling-error-unauthorized-access-is.html' title='Handling error: &amp;quot;401 - Unauthorized: Access is denied due to invalid credentials&amp;quot;'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-4457621941710555023</id><published>2012-03-15T12:44:00.001+02:00</published><updated>2012-03-15T12:44:00.182+02:00</updated><title type='text'>Long running integration tests</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;I&amp;#39;m typing this blog post while waiting for our integration tests to finish executing. For this project the tests take about 15 minutes to complete.  There are 178 integration tests.&lt;p /&gt;&lt;div&gt;I love the fact that the integration tests run several times a day. But I hate how long it takes to get my work integrated into the main branch (Edge/Trunk) of our repository.&lt;/div&gt; &lt;p /&gt;&lt;div&gt;If integration tests fail once or twice, it means integrating can take as much as two hours.&lt;/div&gt;&lt;p /&gt;&lt;div&gt;I wonder how other people feel about running integration tests as part of the build. Is it a good idea? Or a bad one?&lt;/div&gt; &lt;p /&gt;&lt;div&gt;I think it&amp;#39;s definitely great for quality. It&amp;#39;s just a pain in the ass.&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/long-running-integration-tests&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/4457621941710555023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/4457621941710555023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/4457621941710555023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/4457621941710555023'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/03/long-running-integration-tests.html' title='Long running integration tests'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-5711146358899090504</id><published>2012-03-09T19:07:00.001+02:00</published><updated>2012-03-09T19:07:16.148+02:00</updated><title type='text'>Thoughts about software projects</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;Software projects are risky. So plan to deliver a week or two earlier than the deadline. Yes, I know it feels like you will &amp;quot;waste&amp;quot; that week or two and that you won&amp;#39;t be 1-billion percent productive. Trust me - you won&amp;#39;t be wasting that time. There&amp;#39;s always loads more to do. Unexpected things always happen once you release to the &amp;quot;Production&amp;quot; server.&lt;p /&gt;&lt;div&gt;Software projects are risky. Shit happens. So play it safe. Release early. Then do lots of UAT.&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/thoughts-about-software-projects&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/5711146358899090504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/5711146358899090504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5711146358899090504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5711146358899090504'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/03/thoughts-about-software-projects.html' title='Thoughts about software projects'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-2758884065623724233</id><published>2012-03-07T14:25:00.001+02:00</published><updated>2012-03-07T14:25:35.257+02:00</updated><title type='text'>Code Snippet: Method to convert Variable sized list to a fixed size array</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;&lt;div&gt;I wrote this bit of code that takes a List&amp;lt;String&amp;gt; (variable size obviously) and converts it to an array of specified size as requested by the caller.&lt;/div&gt;&lt;p /&gt;&lt;div class=&quot;data type-c&quot;&gt; &lt;table class=&quot;lines&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt; &lt;tr&gt; &lt;td&gt; &lt;pre class=&quot;line_numbers&quot;&gt;&lt;span rel=&quot;#L1&quot; id=&quot;L1&quot;&gt;1&lt;/span&gt; &lt;span rel=&quot;#L2&quot; id=&quot;L2&quot;&gt;2&lt;/span&gt; &lt;span rel=&quot;#L3&quot; id=&quot;L3&quot;&gt;3&lt;/span&gt; &lt;span rel=&quot;#L4&quot; id=&quot;L4&quot;&gt;4&lt;/span&gt; &lt;span rel=&quot;#L5&quot; id=&quot;L5&quot;&gt;5&lt;/span&gt; &lt;span rel=&quot;#L6&quot; id=&quot;L6&quot;&gt;6&lt;/span&gt; &lt;span rel=&quot;#L7&quot; id=&quot;L7&quot;&gt;7&lt;/span&gt; &lt;span rel=&quot;#L8&quot; id=&quot;L8&quot;&gt;8&lt;/span&gt; &lt;span rel=&quot;#L9&quot; id=&quot;L9&quot;&gt;9&lt;/span&gt; &lt;span rel=&quot;#L10&quot; id=&quot;L10&quot;&gt;10&lt;/span&gt; &lt;span rel=&quot;#L11&quot; id=&quot;L11&quot;&gt;11&lt;/span&gt; &lt;span rel=&quot;#L12&quot; id=&quot;L12&quot;&gt;12&lt;/span&gt; &lt;span rel=&quot;#L13&quot; id=&quot;L13&quot;&gt;13&lt;/span&gt; &lt;span rel=&quot;#L14&quot; id=&quot;L14&quot;&gt;14&lt;/span&gt; &lt;span rel=&quot;#L15&quot; id=&quot;L15&quot;&gt;15&lt;/span&gt; &lt;span rel=&quot;#L16&quot; id=&quot;L16&quot;&gt;16&lt;/span&gt; &lt;span rel=&quot;#L17&quot; id=&quot;L17&quot;&gt;17&lt;/span&gt; &lt;span rel=&quot;#L18&quot; id=&quot;L18&quot;&gt;18&lt;/span&gt; &lt;span rel=&quot;#L19&quot; id=&quot;L19&quot;&gt;19&lt;/span&gt; &lt;span rel=&quot;#L20&quot; id=&quot;L20&quot;&gt;20&lt;/span&gt; &lt;span rel=&quot;#L21&quot; id=&quot;L21&quot;&gt;21&lt;/span&gt; &lt;span rel=&quot;#L22&quot; id=&quot;L22&quot;&gt;22&lt;/span&gt; &lt;span rel=&quot;#L23&quot; id=&quot;L23&quot;&gt;23&lt;/span&gt; &lt;span rel=&quot;#L24&quot; id=&quot;L24&quot;&gt;24&lt;/span&gt; &lt;span rel=&quot;#L25&quot; id=&quot;L25&quot;&gt;25&lt;/span&gt; &lt;span rel=&quot;#L26&quot; id=&quot;L26&quot;&gt;26&lt;/span&gt; &lt;span rel=&quot;#L27&quot; id=&quot;L27&quot;&gt;27&lt;/span&gt; &lt;span rel=&quot;#L28&quot; id=&quot;L28&quot;&gt;28&lt;/span&gt; &lt;span rel=&quot;#L29&quot; id=&quot;L29&quot;&gt;29&lt;/span&gt; &lt;span rel=&quot;#L30&quot; id=&quot;L30&quot;&gt;30&lt;/span&gt; &lt;span rel=&quot;#L31&quot; id=&quot;L31&quot;&gt;31&lt;/span&gt; &lt;span rel=&quot;#L32&quot; id=&quot;L32&quot;&gt;32&lt;/span&gt; &lt;span rel=&quot;#L33&quot; id=&quot;L33&quot;&gt;33&lt;/span&gt; &lt;span rel=&quot;#L34&quot; id=&quot;L34&quot;&gt;34&lt;/span&gt; &lt;span rel=&quot;#L35&quot; id=&quot;L35&quot;&gt;35&lt;/span&gt; &lt;span rel=&quot;#L36&quot; id=&quot;L36&quot;&gt;36&lt;/span&gt; &lt;span rel=&quot;#L37&quot; id=&quot;L37&quot;&gt;37&lt;/span&gt; &lt;span rel=&quot;#L38&quot; id=&quot;L38&quot;&gt;38&lt;/span&gt; &lt;/pre&gt; &lt;/td&gt; &lt;td width=&quot;100%&quot;&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;pre /&gt;&lt;div class=&quot;line&quot; id=&quot;LC1&quot;&gt;&lt;span class=&quot;c1&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC2&quot;&gt;&lt;span class=&quot;c1&quot;&gt;/// Takes a list of any size, and an int specifying how large the resulting array should be,&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC3&quot;&gt;&lt;span class=&quot;c1&quot;&gt;/// then fits the items of the list in the array. Concatenating more than one item in a single&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC4&quot;&gt;&lt;span class=&quot;c1&quot;&gt;/// array index with a comma.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC5&quot;&gt;&lt;span class=&quot;c1&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC6&quot;&gt;&lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;VariableSizeListToArrayOfFixedSize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;requiredFixedSize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sourceList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC7&quot;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC8&quot;&gt;	&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;destinationArray&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;requiredFixedSize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC9&quot;&gt;	&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;minNrOfItemsPerLine&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sourceList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Count&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;requiredFixedSize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC10&quot;&gt;	&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;listItemQueue&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Queue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sourceList&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC11&quot;&gt;	&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;destIndex&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC12&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC13&quot;&gt;	&lt;span class=&quot;c1&quot;&gt;//Populate resultArray one item at a time.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC14&quot;&gt;	&lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;destIndex&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;requiredFixedSize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC15&quot;&gt;	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC16&quot;&gt;		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;listItemQueue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Count&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC17&quot;&gt;			&lt;span class=&quot;k&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC18&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC19&quot;&gt;		&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;listItemQueue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dequeue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC20&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC21&quot;&gt;		&lt;span class=&quot;c1&quot;&gt;//If each line item receives more than one item from the queue, loop here&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC22&quot;&gt;		&lt;span class=&quot;c1&quot;&gt;//	and add list items to the current line item (concat with &amp;#39;,&amp;#39;).&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC23&quot;&gt;		&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;batchCount&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;batchCount&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;minNrOfItemsPerLine&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;batchCount&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;++)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC24&quot;&gt;		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC25&quot;&gt;			&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;listItemQueue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Count&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC26&quot;&gt;				&lt;span class=&quot;n&quot;&gt;line&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;, &amp;quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;listItemQueue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dequeue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC27&quot;&gt;		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC28&quot;&gt;		&lt;span class=&quot;n&quot;&gt;destinationArray&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;destIndex&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;++]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC29&quot;&gt;	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC30&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC31&quot;&gt;	&lt;span class=&quot;c1&quot;&gt;//If there are still items left in the list. Append remaining items to &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC32&quot;&gt;	&lt;span class=&quot;c1&quot;&gt;//	last item in the array.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC33&quot;&gt;	&lt;span class=&quot;k&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;listItem&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;listItemQueue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC34&quot;&gt;	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC35&quot;&gt;		&lt;span class=&quot;n&quot;&gt;destinationArray&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;destinationArray&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Length&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;, &amp;quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;listItem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC36&quot;&gt;	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC37&quot;&gt;	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;destinationArray&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC38&quot;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt; &lt;p /&gt;&lt;div&gt; Useful. And fun to write. Especially since I had loads of Unit Tests checking that I didn&amp;#39;t break anything while refactoring quite aggressively.&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/code-snippet-method-to-convert-variable-sized&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/2758884065623724233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/2758884065623724233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/2758884065623724233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/2758884065623724233'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/03/code-snippet-method-to-convert-variable.html' title='Code Snippet: Method to convert Variable sized list to a fixed size array'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-8497098373992291622</id><published>2012-02-17T07:33:00.001+02:00</published><updated>2012-02-17T07:33:41.654+02:00</updated><title type='text'>Reflection: I&amp;#39;m a versatile person</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;&lt;div&gt;We can be so hard on ourselves, so it&amp;#39;s nice to take a step back and think about what we do well.&lt;/div&gt;&lt;p /&gt;&lt;div&gt;I&amp;#39;m going to take advantage of my own blog and do a little bragging today. In relation to my job, I am actually a very versatile person. &lt;/div&gt; &lt;div&gt;&lt;ul&gt;&lt;li&gt;I code nice front-ends.&lt;/li&gt;&lt;li&gt;I code advanced back-ends.&lt;/li&gt;&lt;li&gt;I&amp;#39;m good at Debugging weird issues.&lt;/li&gt;&lt;/ul&gt;&lt;p /&gt;&lt;/div&gt;&lt;div&gt;But I&amp;#39;m more than just a code monkey. I also do the following things pretty well:&lt;/div&gt; &lt;div&gt;&lt;ul&gt;&lt;li&gt;I&amp;#39;m organized - I get things done.&lt;/li&gt;&lt;li&gt;I write well - proposals and blog posts.&lt;/li&gt;&lt;li&gt;I do presentations.&lt;/li&gt;&lt;li&gt;I design.&lt;/li&gt;&lt;li&gt;I&amp;#39;m professional and friendly when I deal with clients.&lt;/li&gt;&lt;li&gt; I even do network admin stuff.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;That&amp;#39;s a lot to be proud of I think.&lt;/div&gt;&lt;p /&gt;&lt;div&gt;There are some things that I&amp;#39;m&lt;b&gt; not&lt;/b&gt; so good at though, but practice makes perfect:&lt;/div&gt;&lt;div&gt;&lt;ul&gt; &lt;li&gt;Coordinating a project&lt;/li&gt;&lt;li&gt;Dealing with project politics&lt;/li&gt;&lt;li&gt;Fighting with managers and clients (i.e. pushing back against unrealistic expectations)&lt;/li&gt;&lt;li&gt;Handling too much pressure&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/reflection-im-a-versatile-person&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/8497098373992291622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/8497098373992291622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/8497098373992291622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/8497098373992291622'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/02/reflection-i-versatile-person.html' title='Reflection: I&amp;#39;m a versatile person'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-6473428115253471571</id><published>2012-02-15T08:38:00.001+02:00</published><updated>2012-02-15T08:38:59.191+02:00</updated><title type='text'>Different kinds of viruses/virii</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;A colleague, Justus, described the different kinds of viruses/virii to me. Interesting stuff...&lt;p /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;A Trojan&lt;/b&gt; - opens a &amp;quot;back door&amp;quot; into your system. Just like the story about the Trojan Horse.&lt;/li&gt; &lt;li&gt;&lt;b&gt;A Worm&lt;/b&gt; - propagates aggressively across your system and the network.&lt;/li&gt;&lt;li&gt;&lt;b&gt;A Rootkit&lt;/b&gt; - the most advanced. Attaches itself onto the operating system kernel and hides itself. Very difficult to detect and very dangerous.&lt;/li&gt; &lt;/ul&gt;&lt;div&gt;Nasty little fuckers.&lt;/div&gt;&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/different-kinds-of-virusesvirii&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/6473428115253471571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/6473428115253471571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/6473428115253471571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/6473428115253471571'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/02/different-kinds-of-virusesvirii.html' title='Different kinds of viruses/virii'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-8348011894318603494</id><published>2012-02-01T14:25:00.001+02:00</published><updated>2012-02-01T14:25:15.856+02:00</updated><title type='text'>An interesting difference between the ASP.NET Dev Server and IIS</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;By default IIS will not return static content like CSS and JS files through the &lt;a href=&quot;http://ASP.NET&quot;&gt;ASP.NET&lt;/a&gt; pipeline. So Global.asax won&amp;#39;t be invoked.&lt;p /&gt;&lt;div&gt;But on the &lt;a href=&quot;http://ASP.NET&quot;&gt;ASP.NET&lt;/a&gt; Dev server all files, including CSS and JS files, will go through the &lt;a href=&quot;http://ASP.NET&quot;&gt;ASP.NET&lt;/a&gt; pipeline. So Global.asax will be invoked.&lt;/div&gt; &lt;p /&gt;&lt;div&gt;Remember this when you&amp;#39;re profiling your application! It can lead to skewed results.&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/an-interesting-difference-between-the-aspnet&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/8348011894318603494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/8348011894318603494' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/8348011894318603494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/8348011894318603494'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/02/interesting-difference-between-aspnet.html' title='An interesting difference between the ASP.NET Dev Server and IIS'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-7586211632696241143</id><published>2012-01-27T07:53:00.001+02:00</published><updated>2012-01-27T07:53:20.479+02:00</updated><title type='text'>Skyrim first impressions</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;So I started playing Skyrim last night and I have to say: What a Treat!&lt;p /&gt;&lt;div&gt;I spent a lot of time looting and enjoying the scenery. I only played for two hours, but in those two hours I felt like I was in a different world entirely. The game really sucks you in. I love the frigid landscape, the mountains and the waterfalls; it feels like you&amp;#39;re in Beowulf.&lt;/div&gt; &lt;p /&gt;&lt;div&gt;But what I really appreciate is the slick menu system. You can see that Bethesda put a lot of effort into the menu. I find it interesting how they use typography (mostly font size actually) and subtle icons to indicate what&amp;#39;s active on the menu and what&amp;#39;s important. Most other games seem to go the garish-background and border-overload route to compartementalize the user interface. So I really like how Bethesda did Skyrim&amp;#39;s menu. Very well done.&lt;/div&gt; &lt;p /&gt;&lt;div&gt;I will probably spend this weekend in my underwear playing more. Looking forward to it :)&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/skyrim-first-impressions&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/7586211632696241143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/7586211632696241143' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/7586211632696241143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/7586211632696241143'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/01/skyrim-first-impressions.html' title='Skyrim first impressions'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-3452089497571002130</id><published>2012-01-26T07:15:00.001+02:00</published><updated>2012-01-26T07:15:26.272+02:00</updated><title type='text'>How to cure hiccups?</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;This &lt;a href=&quot;http://www.wikihow.com/Cure-Hiccups#Swallow_method&quot;&gt;&amp;quot;swallow method&amp;quot; from wikiHow &lt;/a&gt;did the trick for me. No more hiccups, thank goodness...&lt;p /&gt;&lt;div&gt;&lt;ol style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; color: rgb(65,65,65); font-family: Arial,Helvetica,sans-serif; font-size: 14px; background-color: rgb(249,247,241);&quot;&gt; &lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 4px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.2em; clear: both;&quot;&gt;Breathe in as far as you can.&lt;/li&gt;&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 4px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.2em; clear: both;&quot;&gt; Swallow &lt;i style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;&quot;&gt;without letting any air out&lt;/i&gt;.&lt;/li&gt;&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 4px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.2em; clear: both;&quot;&gt; Breathe in more, as far as you can. &lt;i style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;&quot;&gt;Do not let any air out!&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 4px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.2em; clear: both;&quot;&gt; Repeat steps two and three as many times as possible. When you feel you can&amp;#39;t swallow anymore, swallow again. You may turn red and make squeaking noises, but keep swallowing and inhaling.&lt;/li&gt;&lt;li style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 4px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.2em; clear: both;&quot;&gt; When you &lt;i style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;&quot;&gt;absolutely can&amp;#39;t&lt;/i&gt; swallow anymore, exhale all the way.&lt;/li&gt; &lt;li class=&quot;steps_li final_li&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 4px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1.2em; clear: both;&quot;&gt;Your hiccups will be gone!&lt;/li&gt; &lt;/ol&gt;&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/how-to-cure-hiccups&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/3452089497571002130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/3452089497571002130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/3452089497571002130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/3452089497571002130'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/01/how-to-cure-hiccups.html' title='How to cure hiccups?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-4375902453555838680</id><published>2012-01-19T08:04:00.001+02:00</published><updated>2012-01-19T08:04:52.349+02:00</updated><title type='text'>How using an Agile process combats the common project pitfalls</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;&lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;Software projects are&amp;nbsp; packed chock-full of Risk. It&#39;s important to acknowledge the risks and to mitigate them. How you address the risks depends on which type of &quot;project process&quot; you are following. The two types of project processes that I have experienced are Agile-type and Waterfall-type projects. In this post I list some of the common ways to mitigate well-known risks for both these project types.&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;When given a choice we prefer to adopt an Agile approach. We believe that following an Agile approach leads to a far superior final product. We also believe that Agile is much &lt;span style=&quot;font-weight: bold;&quot;&gt;less&lt;/span&gt; risky. So this post is unashamedly biased in favor of Agile.&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;First, a brief description of the two types of projects:&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 13.0pt; color: #366092;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Waterfall-type project:&amp;nbsp; &lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;margin: 0in;&quot;&gt;&lt;div class=&#39;p_embed p_image_embed&#39;&gt; &lt;a href=&quot;http://getfile6.posterous.com/getfile/files.posterous.com/temp-2012-01-18/ynqbFynFyjkBgllghyxoHGeeHjFsuujycIilupridyqjbDaccnkdxBjfGyGf/waterfall_600px.PNG.scaled1000.png&quot;&gt;&lt;img alt=&quot;Waterfall_600px&quot; height=&quot;266&quot; src=&quot;http://getfile9.posterous.com/getfile/files.posterous.com/temp-2012-01-18/ynqbFynFyjkBgllghyxoHGeeHjFsuujycIilupridyqjbDaccnkdxBjfGyGf/waterfall_600px.PNG.scaled500.png&quot; width=&quot;500&quot; /&gt;&lt;/a&gt; &lt;/div&gt; &lt;/p&gt;  &lt;p /&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;A waterfall project typically has a set deadline for set functionality.&amp;nbsp; Many businesses like this type of project because it seems predictable and makes it easy to get a budget approved for the project.&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Process&lt;/span&gt;: Plan, Build, Test, Done.&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Problems&lt;/span&gt;:&lt;/p&gt;  &lt;ul type=&quot;circle&quot; style=&quot;margin-left: .75in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Trying to predict accurately      while software development is very unpredictable.&lt;/span&gt;&lt;/li&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;User Requirements      Specifications are usually insufficient and open to interpretation, which      leads to errors.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;ul type=&quot;circle&quot; style=&quot;margin-left: .75in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Scope Creep is time-consuming      to manage and often &quot;sneaks&quot; in due to unclear specifications.      This puts pressure on the development team to deliver more functionality      in the same amount of time.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 13.0pt; color: #366092;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Agile-type project: &lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;margin: 0in;&quot;&gt;&lt;div class=&#39;p_embed p_image_embed&#39;&gt; &lt;a href=&quot;http://getfile0.posterous.com/getfile/files.posterous.com/temp-2012-01-18/HcjDEkkulezpncdGDBhvppnDpkFArBlpghGbmAkvqfavktuyaClsmpJEugbe/agile_600px.PNG.scaled1000.png&quot;&gt;&lt;img alt=&quot;Agile_600px&quot; height=&quot;339&quot; src=&quot;http://getfile4.posterous.com/getfile/files.posterous.com/temp-2012-01-18/HcjDEkkulezpncdGDBhvppnDpkFArBlpghGbmAkvqfavktuyaClsmpJEugbe/agile_600px.PNG.scaled500.png&quot; width=&quot;500&quot; /&gt;&lt;/a&gt; &lt;/div&gt; &lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;An agile project is typically seen as a recurring monthly expense instead of a big capital expense. Features are delivered frequently&amp;nbsp; (typically every two weeks) and the project carries on for as long as it is delivering useful functionality.&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Process&lt;/span&gt;: Plan, Build, Test, *Repeat Repeat Repeat&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Problems&lt;/span&gt;:&lt;/p&gt;  &lt;ul type=&quot;circle&quot; style=&quot;margin-left: .75in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Unable to promise specific      features at a specific deadline far in the future. &lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;ul type=&quot;circle&quot; style=&quot;margin-left: .75in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Difficult to work with      businesses with a &quot;waterfall&quot; mindset (most big old businesses).&lt;/span&gt;&lt;/li&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Difficult to get project      approval when hard-and-fast promises can&#39;t be made.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Advantages&lt;/span&gt;:&lt;/p&gt;  &lt;ul type=&quot;circle&quot; style=&quot;margin-left: .75in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Deliver what&#39;s useful, not      &quot;what the spec said&quot;.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;ul type=&quot;circle&quot; style=&quot;margin-left: .75in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Deliver useful features      early. &lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;ul type=&quot;circle&quot; style=&quot;margin-left: .75in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Detect problems early.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;ul type=&quot;circle&quot; style=&quot;margin-left: .75in; direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Embraces change.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;p style=&quot;margin: 0in; margin-left: .75in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 16.0pt; color: #17365d;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Why Projects Fail&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;Projects can be considered failures for many reasons. The most common reasons that I have observed are:&lt;/p&gt;  &lt;ol type=&quot;1&quot; style=&quot;direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: Calibri; font-size: 11pt; font-weight: bold;&quot;&gt;  &lt;li style=&quot;margin-top: 0px; margin-bottom: 0px; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;Budget Overruns and Late Delivery&lt;/span&gt;&lt;span style=&quot;font-weight: normal; font-size: 11pt;&quot;&gt; - these      two usually go hand-in-hand.&lt;/span&gt;&lt;/li&gt;  &lt;/ol&gt; &lt;ol type=&quot;1&quot; style=&quot;direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: Calibri; font-size: 11pt; font-weight: bold;&quot;&gt;  &lt;li style=&quot;margin-top: 0px; margin-bottom: 0px; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;Incorrect Functionality delivered&lt;/span&gt;&lt;span style=&quot;font-weight: normal; font-size: 11pt;&quot;&gt; - the      client expected one thing and the programmers built something else.&lt;/span&gt;&lt;/li&gt;  &lt;/ol&gt; &lt;ol type=&quot;1&quot; style=&quot;direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in; font-family: Calibri; font-size: 11pt; font-weight: bold;&quot;&gt;  &lt;li style=&quot;margin-top: 0px; margin-bottom: 0px; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;Technical Problems&lt;/span&gt;&lt;span style=&quot;font-weight: normal; font-size: 11pt;&quot;&gt; - for example: the system is too      slow to use, or it doesn&#39;t integrate with another critical system in the      software ecosystem.&lt;/span&gt;&lt;/li&gt;  &lt;/ol&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;Below is a list of ways to combat these three problems in either a Waterfall or Agile project.&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 13.0pt; color: #366092;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Problem 1: Budget Overrun/ Late Delivery&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;Waterfall:&lt;/p&gt;  &lt;ul type=&quot;disc&quot; style=&quot;direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Add extra time to mitigate      risk. For example: estimate 13 hours for a 10 hour task. Not optimal.      Expensive. &lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;ul type=&quot;disc&quot; style=&quot;direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Track progress against      milestones to ensure the project is progressing on schedule. (&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-family: Calibri; font-size: 11.0pt;&quot;&gt;The problem      with milestones is that they can give a false sense of security. When you      think something is &quot;Done&quot; it might not really be. &quot;It&#39;s      done! (except for the styling, or integration with external system      X)&quot;)&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;ul type=&quot;disc&quot; style=&quot;direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Work overtime if needed to      catch-up.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;Agile:&lt;/p&gt;  &lt;ul type=&quot;disc&quot; style=&quot;direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Frequent delivery means most      important features get delivered early.&lt;/span&gt;&lt;/li&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;If less important features      are late it is not such a big deal. The system is constantly improving and      maturing.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 13.0pt; color: #366092;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Problem 2: Technical Problems&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;Waterfall:&lt;/p&gt;  &lt;ul type=&quot;disc&quot; style=&quot;direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Do lots of prototyping in the      first stage of the project to try and spot technical challenges.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;ul type=&quot;disc&quot; style=&quot;direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt; color: red;&quot;&gt;If caught late it      may be too late to do anything about it. Major losses&lt;/span&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;Agile:&lt;/p&gt;  &lt;ul type=&quot;disc&quot; style=&quot;direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Will be picked up early due      to continuous early delivery. Project can then go a different direction,      or cancel project if absolutely necessary (at least it will be early).&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 13.0pt; color: #366092;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Problem 3: Wrong Functionality (incorrect assumptions)&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;Waterfall:&lt;/p&gt;  &lt;ul type=&quot;disc&quot; style=&quot;direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Write very detailed user      requirements specification. (&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-family: Calibri; font-size: 11.0pt;&quot;&gt;The problem with User Requirements      is that they give a false sense of security. Now matter how explicitly      they are written, they are still open to individual interpretation and      interpretation may not be what the author intended.&lt;/span&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;)&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;ul type=&quot;disc&quot; style=&quot;direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt; color: red;&quot;&gt;If caught late it      may be too late to do anything about it. Major losses&lt;/span&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;&amp;nbsp;&lt;/p&gt;  &lt;p style=&quot;margin: 0in; font-family: Calibri; font-size: 11.0pt;&quot;&gt;Agile:&lt;/p&gt;  &lt;ul type=&quot;disc&quot; style=&quot;direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;&quot;&gt;  &lt;li style=&quot;margin-top: 0; margin-bottom: 0; vertical-align: middle;&quot;&gt;&lt;span style=&quot;font-family: Calibri; font-size: 11.0pt;&quot;&gt;Agile embraces change.      Frequent delivery ensures that the correct functionality is delivered and      any &quot;mistakes&quot; are detected early. The client is continually      evaluating the system and can change direction as required.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/how-using-an-agile-process-combats-the-common&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/4375902453555838680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/4375902453555838680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/4375902453555838680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/4375902453555838680'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/01/how-using-agile-process-combats-common.html' title='How using an Agile process combats the common project pitfalls'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-8513452616442308969</id><published>2012-01-10T14:28:00.001+02:00</published><updated>2012-01-10T14:28:51.082+02:00</updated><title type='text'>Why I love my job reason nr 49...</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;I don&amp;#39;t have to work with &lt;a href=&quot;http://ASP.NET&quot;&gt;ASP.NET&lt;/a&gt; WebForms anymore!&lt;p /&gt;&lt;div&gt;That deserves lots of exclamation marks!!!!! !!!! !!!!&lt;/div&gt;&lt;p /&gt;&lt;div&gt;&lt;a href=&quot;http://ASP.NET&quot;&gt;ASP.NET&lt;/a&gt; MVC3 is such a pleasure. &lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/why-i-love-my-job-reason-nr-49&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/8513452616442308969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/8513452616442308969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/8513452616442308969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/8513452616442308969'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/01/why-i-love-my-job-reason-nr-49.html' title='Why I love my job reason nr 49...'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-2988786225859062007</id><published>2012-01-10T13:55:00.001+02:00</published><updated>2012-01-10T13:55:10.028+02:00</updated><title type='text'>Why I love my job reason number 48...</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;The website I am working on only caters for English speakers. What a pleasure!  Localization is such a pain. &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/why-i-love-my-job-reason-number-48&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/2988786225859062007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/2988786225859062007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/2988786225859062007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/2988786225859062007'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/01/why-i-love-my-job-reason-number-48.html' title='Why I love my job reason number 48...'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-488928298028082909</id><published>2012-01-07T16:59:00.001+02:00</published><updated>2012-01-07T16:59:41.988+02:00</updated><title type='text'>Code Snippet: Show a message when a user is using an old browser.</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;&lt;p&gt;For my personal project I would like to show a message to the user if the user is using an old browser. This is mainly because I don&#39;t want to spend time testing all the old browsers. I&#39;d rather just tell the user that the site works better on certain browsers and give him the links to download the browser of his choice.&lt;/p&gt;  &lt;p&gt;Thankfully JQuery makes this ridiculously easy. Here is the code...&lt;/p&gt;  &lt;p&gt;&lt;div class=&quot;data type-html&quot;&gt; &lt;table class=&quot;lines&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt; &lt;tr&gt; &lt;td&gt; &lt;pre class=&quot;line_numbers&quot;&gt;&lt;span rel=&quot;#L1&quot; id=&quot;L1&quot;&gt;1&lt;/span&gt; &lt;span rel=&quot;#L2&quot; id=&quot;L2&quot;&gt;2&lt;/span&gt; &lt;span rel=&quot;#L3&quot; id=&quot;L3&quot;&gt;3&lt;/span&gt; &lt;span rel=&quot;#L4&quot; id=&quot;L4&quot;&gt;4&lt;/span&gt; &lt;span rel=&quot;#L5&quot; id=&quot;L5&quot;&gt;5&lt;/span&gt; &lt;span rel=&quot;#L6&quot; id=&quot;L6&quot;&gt;6&lt;/span&gt; &lt;span rel=&quot;#L7&quot; id=&quot;L7&quot;&gt;7&lt;/span&gt; &lt;span rel=&quot;#L8&quot; id=&quot;L8&quot;&gt;8&lt;/span&gt; &lt;span rel=&quot;#L9&quot; id=&quot;L9&quot;&gt;9&lt;/span&gt; &lt;span rel=&quot;#L10&quot; id=&quot;L10&quot;&gt;10&lt;/span&gt; &lt;span rel=&quot;#L11&quot; id=&quot;L11&quot;&gt;11&lt;/span&gt; &lt;span rel=&quot;#L12&quot; id=&quot;L12&quot;&gt;12&lt;/span&gt; &lt;span rel=&quot;#L13&quot; id=&quot;L13&quot;&gt;13&lt;/span&gt; &lt;span rel=&quot;#L14&quot; id=&quot;L14&quot;&gt;14&lt;/span&gt; &lt;span rel=&quot;#L15&quot; id=&quot;L15&quot;&gt;15&lt;/span&gt; &lt;span rel=&quot;#L16&quot; id=&quot;L16&quot;&gt;16&lt;/span&gt; &lt;span rel=&quot;#L17&quot; id=&quot;L17&quot;&gt;17&lt;/span&gt; &lt;span rel=&quot;#L18&quot; id=&quot;L18&quot;&gt;18&lt;/span&gt; &lt;span rel=&quot;#L19&quot; id=&quot;L19&quot;&gt;19&lt;/span&gt; &lt;/pre&gt; &lt;/td&gt; &lt;td width=&quot;100%&quot;&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;pre /&gt;&lt;div class=&quot;line&quot; id=&quot;LC1&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;works-best-on hidden&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC2&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This web application works best on a modern browser like &lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;https://www.google.com/chrome&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Chrome&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;, &lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;http://www.mozilla.org/en-US/firefox/new/&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Firefox 4+&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; or &lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;http://www.microsoft.com/ie9&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Internet Explorer 8+&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC3&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC4&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC5&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC6&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC7&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC8&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;badBrowser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC9&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;.works-best-on&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;normal&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC10&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC11&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC12&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;badBrowser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC13&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;browser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;msie&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;parseInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;browser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC14&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;browser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;mozilla&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;parseInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;browser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC15&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC17&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC18&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;line&quot; id=&quot;LC19&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/div&gt;&lt;/p&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/code-snippet-show-a-message-when-a-user-is-us&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/488928298028082909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/488928298028082909' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/488928298028082909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/488928298028082909'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/01/code-snippet-show-message-when-user-is.html' title='Code Snippet: Show a message when a user is using an old browser.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-5661793802034335922</id><published>2012-01-06T10:08:00.001+02:00</published><updated>2012-01-06T10:08:53.339+02:00</updated><title type='text'>I&amp;#39;m proud to be a software developer</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;It&amp;#39;s easy to get stuck in a rut and disregard the big picture. The big picture is that as a software developer I get to build ridiculously complicated machines with an insane amount of components that interact with one another. And a software machine is so flexible that I get to make changes very easily. The machine can be reconfigured with a couple of keystrokes, tested, broken, fixed, several times a day.&lt;p /&gt;&lt;div&gt;This is a pretty amazing job.&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/im-proud-to-be-a-software-developer&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/5661793802034335922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/5661793802034335922' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5661793802034335922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5661793802034335922'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2012/01/i-proud-to-be-software-developer.html' title='I&amp;#39;m proud to be a software developer'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-5586300414329653925</id><published>2011-12-30T10:21:00.001+02:00</published><updated>2011-12-30T10:21:37.874+02:00</updated><title type='text'>Apples Painting</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;&lt;div class=&#39;p_embed p_image_embed&#39;&gt; &lt;a href=&quot;http://getfile2.posterous.com/getfile/files.posterous.com/thecodersperspective/GnCtQr3BVuaIxaNByO4J5JyCE0JapMlUkXRrxom19hpmtHfzGUy673lL6PkQ/apples.jpg&quot;&gt;&lt;img alt=&quot;Apples&quot; height=&quot;368&quot; src=&quot;http://getfile3.posterous.com/getfile/files.posterous.com/thecodersperspective/xuFKbKiHFnBb6gvP9xA0c2v5qRhYBe1eiZ4NpaKZND8q7f4XmCB8OZ3W5Viw/apples.jpg.scaled.500.jpg&quot; width=&quot;500&quot; /&gt;&lt;/a&gt; &lt;/div&gt; &lt;p&gt;Initially I was feeling discouraged about these bloody apples. But in the end I&amp;#39;m very happy with how the painting turned out. This is my first still-life painting and painted from life instead of a photo. Fun :)&lt;/p&gt;&lt;p /&gt;&lt;div&gt;12&amp;quot;x16&amp;quot;&lt;/div&gt;&lt;div&gt;Oil on Canvas Panel&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/apples-painting&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/5586300414329653925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/5586300414329653925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5586300414329653925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/5586300414329653925'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2011/12/apples-painting.html' title='Apples Painting'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1327232692541091701.post-1316687617228856189</id><published>2011-12-19T09:05:00.001+02:00</published><updated>2011-12-19T09:05:45.342+02:00</updated><title type='text'>Suddenly getting HTTP404 on your ASP.NET website?</title><content type='html'>&lt;div class=&#39;posterous_autopost&#39;&gt;Was your website working fine yesterday, but today you get an HTTP404 exception?&lt;p /&gt;&lt;div&gt;Check your disk space. Our drive had 0 bytes free space on C. After freeing some space the problem was resolved.&lt;/div&gt; &lt;p style=&quot;font-size: 10px;&quot;&gt; &lt;a href=&quot;http://posterous.com&quot;&gt;Posted via email&lt;/a&gt;  from &lt;a href=&quot;http://thecodersperspective.posterous.com/suddenly-getting-http404-on-your-aspnet-websi&quot;&gt;The Coder&#39;s Perspective&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecodersperspective.blogspot.com/feeds/1316687617228856189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1327232692541091701/1316687617228856189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/1316687617228856189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1327232692541091701/posts/default/1316687617228856189'/><link rel='alternate' type='text/html' href='http://thecodersperspective.blogspot.com/2011/12/suddenly-getting-http404-on-your-aspnet.html' title='Suddenly getting HTTP404 on your ASP.NET website?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12757934034270840611</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>