<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0YMRXc7eip7ImA9WxJVGUQ.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374</id><updated>2009-07-07T11:26:24.902-07:00</updated><title>[dot] Code Dump</title><subtitle type="html">Code and Rants</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.dotcodedump.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>52</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/dotCodeDump" type="application/atom+xml" /><entry gd:etag="W/&quot;DUQAQ3o4fyp7ImA9WxJVGEQ.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-8289886427076133087</id><published>2009-07-06T08:57:00.000-07:00</published><updated>2009-07-06T09:22:22.437-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-06T09:22:22.437-07:00</app:edited><title>You Don't Need Tools</title><content type="html">&lt;span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"  &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oJ89RnXa3zM/SlIgfTwD8gI/AAAAAAAAAWQ/sCNuOBEWIFw/s1600-h/homehammer.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 227px; height: 170px;" src="http://1.bp.blogspot.com/_oJ89RnXa3zM/SlIgfTwD8gI/AAAAAAAAAWQ/sCNuOBEWIFw/s320/homehammer.jpg" alt="" id="BLOGGER_PHOTO_ID_5355378629146833410" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;font-size:100%;"  &gt;High quality software can be created without, advanced tools, automation, and even design patterns. Professionals in many fields besides software development are looking for latest tools, and trends to stay ahead of the competition. Allocating, learning, and implementing new tools can soon become a dangerous cycle, where an emphasis is placed on specific technologies and trends, rather than the product being created. One of the many side effects of using an ever changing tool set is adding entropy and complexity to a development ecosystem.&lt;br /&gt;&lt;/span&gt;  &lt;p  style="color: rgb(0, 0, 0);font-family:arial;" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;There are thousands of blogs on software development.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;Many of these blogs demonstrate, promote, or even proselytize tools or methodologies. The large amount of information provides developers with a large choice of tools and ideas. Searching for proper ideas and tools is very time consuming.&lt;/span&gt;&lt;/p&gt;  &lt;p  style="color: rgb(0, 0, 0);font-family:arial;" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Software developers put knowledge in high regard. Learning is even more valuable. A good software developer should find a balance, between learning and doing. Programming is not philosophy. Making and creating is far more valuable to good programmers. Good is what works, and works well, not what is academically perfect.&lt;/span&gt;&lt;/p&gt;  &lt;p  style="color: rgb(0, 0, 0);font-family:arial;" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Finding tools and even using tools can become a distraction.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;Learning when your tools are getting in the way is skill, which is underdeveloped, in many programmers. A perfect example is how programmers can get into holy flame wars over a TEXT EDITOR! This is just one example of where the meta-product, becomes more important than the product, but there are many others.&lt;/span&gt;&lt;/p&gt;  &lt;p  style="color: rgb(0, 0, 0);font-family:arial;" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Ironically I am advocating learning how to ignore programming noise, in a blog. &lt;/span&gt;&lt;/p&gt;  &lt;p  style="color: rgb(0, 0, 0);font-family:arial;" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;The Lintner Code Complexity Analysis Test&lt;/span&gt;: &lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;Next time you start incorporating, tools, methodologies, and other ideas into your code base. Ask yourself could an average developer jump in and get the basic flow, and meaning of the code? If no, you may want to rethink your approach.&lt;/span&gt;&lt;/p&gt;&lt;p  style="color: rgb(0, 0, 0);font-family:arial;" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Personally I advocate simplicity, and minimalism when it makes sense, and some level of complexity is necessary. Tools create complexity. Tools require knowledge to operate, and they will change how your process works. When choosing tools, you must be aware of how they will effect your software development ecosystem over time.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p  style="color: rgb(0, 0, 0);font-family:arial;" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Technologies, tools, ideas, or just plain noise can get in the way of creating, and making. Many times a small project or tasks can be finished the without tools, in the time it would take to set up, and use complex tool. There are many examples of high quality software that was created without code analysis tools, unit tests, and even a structured development methodologies. Next time you start working on a new project, you may want too evaluate your tools too see if they are truly valuable or just wasteful. &lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-8289886427076133087?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/8289886427076133087/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=8289886427076133087" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/8289886427076133087?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/8289886427076133087?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/YYj9M-hNcd0/you-dont-need-tools.html" title="You Don't Need Tools" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_oJ89RnXa3zM/SlIgfTwD8gI/AAAAAAAAAWQ/sCNuOBEWIFw/s72-c/homehammer.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.dotcodedump.com/2009/07/you-dont-need-tools.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMER3gyeCp7ImA9WxJTFU0.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-8771693365560666308</id><published>2009-04-23T09:00:00.000-07:00</published><updated>2009-04-23T09:00:06.690-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-23T09:00:06.690-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="quality" /><category scheme="http://www.blogger.com/atom/ns#" term="bugs" /><category scheme="http://www.blogger.com/atom/ns#" term="simple" /><title>Whack A Mole Development</title><content type="html">&lt;span style="font-weight: bold;"&gt;Whack a Mole Development&lt;/span&gt;:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;When making changes to a section of code, causes other bugs, sometimes recurring, to pop up.  I.E. You fix one bug, and three other bugs pop up after you release.&lt;/blockquote&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oJ89RnXa3zM/Se_a42xkDZI/AAAAAAAAAUY/2LFuwCAJI-o/s1600-h/800px-Whackamole.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 272px; height: 320px;" src="http://1.bp.blogspot.com/_oJ89RnXa3zM/Se_a42xkDZI/AAAAAAAAAUY/2LFuwCAJI-o/s320/800px-Whackamole.jpg" alt="" id="BLOGGER_PHOTO_ID_5327717554513513874" border="0" /&gt;&lt;/a&gt;Have you ever worked on code where troubleshooting bugs was like playing a game whack a mole. I have worked on a few applications that seem to have taken this idea to heart. &lt;br /&gt;&lt;br /&gt;If you encounter an application that not very stable, many time your options for dealing with it are limited. You just have to work within the constraints of the system.  Previously I have mentioned, defensive development as a technique to cope with difficult system.  This is an example of controlling what you can, the new code, and fixes you introduce into the system.&lt;br /&gt;&lt;br /&gt;When dealing with difficult systems your best weapon is going to be communication.  Make everything as clear as possible.  Make your new code readable, understandable, and most importantly comment what you changed, and why you needed to change it.  Keep documentation on the system.  Document critical, and time consuming tasks.  If a process took you a week to update, document it, and it will take the next guy half as long.&lt;br /&gt;&lt;br /&gt;The most important technique for dealing with difficult systems is asking questions, and making sure you understand what people are asking.  Many times "whack a mole" conditions are caused by mis-communication, and lack of knowledge.&lt;br /&gt;&lt;br /&gt;Maintaining difficult systems is a reality for many developers.  This is as important, or more important of a development skill as creating new applications.  Many time maintenance programming is far more difficult than new development,  because you have to work outside of your code "comfort zone".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-8771693365560666308?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/8771693365560666308/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=8771693365560666308" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/8771693365560666308?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/8771693365560666308?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/_-bY-G5vcds/whack-mole-development.html" title="Whack A Mole Development" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_oJ89RnXa3zM/Se_a42xkDZI/AAAAAAAAAUY/2LFuwCAJI-o/s72-c/800px-Whackamole.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2009/04/whack-mole-development.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEEQXw9fSp7ImA9WxVVF0o.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-3866035353233777136</id><published>2009-03-11T05:30:00.000-07:00</published><updated>2009-03-11T05:30:00.265-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-11T05:30:00.265-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mvc" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><title>ASP.NET MVC... That was quick!</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/ModelViewControllerDiagram.svg/321px-ModelViewControllerDiagram.svg.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 321px; height: 151px;" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/ModelViewControllerDiagram.svg/321px-ModelViewControllerDiagram.svg.png" alt="" border="0" /&gt;&lt;/a&gt;So I finally delved into ASP.NET MVC.  My first impression is it was very easy to get it up and running very quickly. When using the defualt application, I was very easily able to create new routes, and controllers.&lt;br /&gt;&lt;br /&gt;The only thing that I did not like was the semantics of constructing a view.  It felt so much like the spaghetti code that I tried not to use in ASP.NET.  I do see benefit, because one of the down falls with traditional ASP.NET that drove me crazy was trying to implement styling, against the traditional forms controls.  I can see very good things from not being tied to those controls, making it easier to implement rich controls such as items from &lt;a href="http://developer.yahoo.com/yui/"&gt;YUI&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My first impression is it's all about the &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx"&gt;routes&lt;/a&gt;.  Routes is the magic behind the curtains.  Routes control what controllers are run, and how the URL is processed.  MVC is a lot more than just URL handling, but coming from ASP.NET forms, good URL handling was one the major things ASP.NET was missing.&lt;br /&gt;&lt;br /&gt;MVC is nothing new, but it is new to ASP.NET. I can't wait to delve into it further.  I see many places where I previously used ASP.NET forms where MVC would have been a better fit.  I like MVC, but I could see it being over-used, and used improperly, where something like ASP.NET forms should have been used.  I also can't wait for it to go to full release, then it will be a viable option.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-3866035353233777136?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/3866035353233777136/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=3866035353233777136" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/3866035353233777136?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/3866035353233777136?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/8rJ5A6VQplk/aspnet-mvc-that-was-quick.html" title="ASP.NET MVC... That was quick!" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2009/03/aspnet-mvc-that-was-quick.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08EQXY6eSp7ImA9WxVVFk0.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-4495111417186799410</id><published>2009-03-09T05:30:00.000-07:00</published><updated>2009-03-09T05:30:00.811-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-09T05:30:00.811-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="optimization" /><title>Optimization Is Not Easy</title><content type="html">&lt;div style="float: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oJ89RnXa3zM/Sa9fan2qNnI/AAAAAAAAAT4/qBVF0jbFgiM/s1600-h/spaceballs6wj.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 191px;" src="http://2.bp.blogspot.com/_oJ89RnXa3zM/Sa9fan2qNnI/AAAAAAAAAT4/qBVF0jbFgiM/s320/spaceballs6wj.jpg" alt="" id="BLOGGER_PHOTO_ID_5309567396672583282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center; font-style: italic; font-weight: bold;"&gt;Go to ludicrous speed!&lt;/div&gt;&lt;/div&gt;If optimization was easy there would be no slow applications. Slow performance rarely has a single cause.  Depending on the number of causes, optimization is a difficult goal.  Using a consistent, and defined process needs be a critical part of any optimization effort.&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 102, 102);"&gt;"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 102, 102);"&gt;Yet we should not pass up our opportunities in that critical 3%&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 102, 102);"&gt;" -Donald Knuth&lt;/span&gt;&lt;/blockquote&gt; Optimization has a number of side effects, of which we must be aware. During optimization, many times, we must make trade offs. A classic optimization case is, trading processor heavy calculations in favor of using more RAM. Optimizing code can have the unintended effect of making code unreadable, and inflexible.&lt;br /&gt;&lt;br /&gt;I mentioned before that Optimization is a difficult goal. I lied. The truth is optimization is not a goal, rather it is a process, also it is best handled as an iterative process.  Using an iterative approach allows you to compare your results, and it gives you a better shot at isolating troubled areas.  The worst approach you can have is to try tackle everything at once, because you will not be able to correlate the results to a specific change.&lt;br /&gt;&lt;br /&gt;My personal process for optimization is pretty straightforward:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Observe, and Measure&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Research&lt;/li&gt;&lt;li&gt;Change&lt;/li&gt;&lt;li&gt;Analyze&lt;/li&gt;&lt;li&gt;Repeat (If Necessary)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Once you have a chosen something to optimize the first task is to observe and measure a metric, such as number of operations during a particular action.  Attempt to do some research, as to why a particular section of code.  Once you have your researched as much as you need to, use your best judgment, and make a change you think will have a positive effect.  After making the change analyze whether it performed better than you original measurements, if it did you are on the right path, if not you have just eliminated a potential path.&lt;br /&gt;&lt;br /&gt;If you are not happy with the results of a round of iteration.  If you continue the process eventually you will notice that you are seeing diminished returns. A few items can be cherry picked, with a simple rewrite of this procedure.  If optimizing the easiest items do not achieve your goals, then the difficult work will commence.  The same procedure will be followed, but the success rate of the iterations will drop.&lt;br /&gt;&lt;br /&gt;Optimization is one of the core group of tasks many developers will need to confront. A consistent, and methodical process will provide a stable foundation to any optimization strategy.  Many times optimization goals may not be met, or will require a significant amount of effort.  Serious optimization does happen, but we must realize that it is not something that just happens, it requires directed, and methodical effort.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-4495111417186799410?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/4495111417186799410/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=4495111417186799410" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/4495111417186799410?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/4495111417186799410?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/nQK0Zzlo_tU/optimization-is-not-easy.html" title="Optimization Is Not Easy" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_oJ89RnXa3zM/Sa9fan2qNnI/AAAAAAAAAT4/qBVF0jbFgiM/s72-c/spaceballs6wj.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2009/03/optimization-is-not-easy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMEQXc4cCp7ImA9WxVVEUo.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-156324384111437082</id><published>2009-03-04T05:30:00.000-08:00</published><updated>2009-03-04T05:30:00.938-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-04T05:30:00.938-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><title>Cloud Computing and the REST of us</title><content type="html">&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;div style="border-width: 0px; margin: 0px; padding: 3px; width: auto; font-family: Georgia,serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 100%; line-height: normal; font-size-adjust: none; font-stretch: normal; text-align: left;"&gt;Cloud Computing as a buzzword is right up there with social networks, web 2.0, and everything else high technology.  I have just begun to delve into researching these services, and I see a lot of potential, but I also have a hesitance that the final incarnation will not look anything like what we see now. I sincerly hope that cloud computing is not just vapor ware (pun intended).  It has a possiblity of completly change the way software is hosted, and possibly even architected.&lt;br /&gt;&lt;br /&gt;If you work for one the tech giants, or a SF start up your companies may already be creating applications in the cloud. As a web developer not on the bleeding edge this may mean something different. This will most likely serve as an option in the future for hosting larger applications, but I don't think it will wipe out traditional hosting any time soon, just because I believe many companies would be hesitant to put their data out in a "cloud".&lt;br /&gt;&lt;br /&gt;As a developer on the ground level I think we will start to see the cloud producing content delivery services, and scalable web services that are reliable and USABLE. Once we have useful services, they can be integrated into our applications without the risk many services have today.&lt;br /&gt;&lt;br /&gt;We may even see new languages and programming styles emerge to fit the paradigm, and that will filter back into main stream development. So I probably won't be programming in "C flat++" or "Anaconda", or "IronSaphire" any time soon, but we may see the concepts and ideas filter back to plain old boring VB, and C#.&lt;br /&gt;&lt;br /&gt;I believe we will also see a move away from efficient nit picking in development. If you start working in an environment where processor and ram are cheap and on demand, you probably won't want to spend three days optimizing a single sort procedure, becuase it would not yeild any real ROI, and infact probably the opposite.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I do believe that this won't throw traditional programming practices out the window.  As a programmer moving into the new realm of highly distributed computing, the fundamentals will be even more important.  If a bug exists in single threaded system it only exists once, if a bug exists in a highly distributed system, it could exist a thousand times, and this will require us to be even more dilligent.  We will also encounter new types of bugs that exist, because of distributed enviornments.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The discussion has already be started on the bleeding edge of the software community, and it will beging to become more mainstream.  The developers on the ground may start to see changes, in how they do things.  We will have more options on using third party services in developing their software.  We will also be expected to make our applications available as a service for the companies we work with.  API style programming will need to become second nature.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This all rehash of the idea that all computers do is input data, output data, and compute data, nothing more.  The major change this time around is it will be done on a massive scale.  So when I create my widget processing service, it will be able as many widgets as needed, and I never have to worry about machines, and bandwidth, becuase it will now be available, and scale on demand. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-156324384111437082?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/156324384111437082/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=156324384111437082" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/156324384111437082?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/156324384111437082?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/BoOEZ59HYko/cloud-computing-and-rest-of-us.html" title="Cloud Computing and the REST of us" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2009/03/cloud-computing-and-rest-of-us.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEERHg9fSp7ImA9WxVVEE0.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-6253651057679995282</id><published>2009-03-02T05:30:00.000-08:00</published><updated>2009-03-02T05:30:05.665-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-02T05:30:05.665-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Programming Yield Signs</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oJ89RnXa3zM/SatTw22BajI/AAAAAAAAATw/B4rdWJ8aXPU/s1600-h/med_yield.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 233px;" src="http://2.bp.blogspot.com/_oJ89RnXa3zM/SatTw22BajI/AAAAAAAAATw/B4rdWJ8aXPU/s320/med_yield.jpg" alt="" id="BLOGGER_PHOTO_ID_5308428684607187506" border="0" /&gt;&lt;/a&gt;I don't advocate holding any one to any specific sort of rules, but I do have a general set of guidelines that I work with.  Here is a simple set of helpful coding warning signs that can save you major coding accidents, and nasty refactorings down the road if you pay attention when you see them.  Most of these apply generally to object oriented language, but could apply elsewhere.  Without further ado, my programming yield signs.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Recursion&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If you are using recursion there may be a better way, or I like to say just because it fits into recursive paradigm, it doesn't mean it HAS to.  There are many times I have found myself ending up doing something recursively, and regretting.  My word of warning: "It starts with a couple of recursive functions, and then you wake up 3 days later in the middle of New Mexico in playing Russian roulette with Bill Richardson.  Recursion has it's uses, but with it you probably are going to incur a performance cost that may not be worth it.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nesting Logic&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Any time you start nesting logic beyond 1 or 2 levels this should be a warning sign that something could be a miss.  This is where debugging is generally going to start getting difficult.  If you are having difficulty coding a section, and it involves nesting of logic this a point where you need to step back and get a second opinion on how to do it.  I am by no means saying don't do it, but watch&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Really Long Functions&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Writing really long functions is generally a sign of two things, either there is a lot of logic to parse through, or you may be doing something poorly.  This may also be an indicator that something else outside of your current scope is amiss.  This is generally a point to ask questions, and thoughts on how to program a specific section.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Maze Like Program Flow&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you are constantly searching for functions, and logic, and your program looks like a maze this is probably a point where you should take a step back.  This means that either there is some really sloppy code, or there is very high level of systematic complexity.  If the complexity does not match the task you are trying to achieve this may a point to step back and take a look at the big picture, and possibly get a different perspective on the situation.&lt;br /&gt;&lt;br /&gt;There are many other sets of guidelines, many other people have created.  This a small list of warning or "yield" signs that I use regularly.  This reflects my general bias for trying to make things as simple as possible, and reducing complexity where ever possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-6253651057679995282?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/6253651057679995282/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=6253651057679995282" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/6253651057679995282?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/6253651057679995282?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/Mnk9nn3l_hI/programming-yield-signs.html" title="Programming Yield Signs" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_oJ89RnXa3zM/SatTw22BajI/AAAAAAAAATw/B4rdWJ8aXPU/s72-c/med_yield.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2009/03/programming-yield-signs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8CRns-fip7ImA9WxVWFE4.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-3450281514689659841</id><published>2009-02-23T08:00:00.000-08:00</published><updated>2009-02-23T15:14:27.556-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-23T15:14:27.556-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="appengine" /><title>Intro to Google App Engine: Displaying Twitter Trends</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://code.google.com/appengine/images/appengine_lowres.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 142px; height: 109px;" src="http://code.google.com/appengine/images/appengine_lowres.jpg" alt="" border="0" /&gt;&lt;/a&gt;My adventure into to Twitter land let me to a point. JavaScript alone wasn't going to cut it. I was going to have to go back to the land of the server. I started investigating different options that were preferably free. I settled upon &lt;a href="http://code.google.com/appengine/"&gt;Google App Engine.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Google App Engine does lock you down to using Python. I took this as a challenge to delve into Python. The App Engine does not use a traditional relational database, instead it uses &lt;a href="http://en.wikipedia.org/wiki/BigTable"&gt;BigTable&lt;/a&gt; built on &lt;a href="http://en.wikipedia.org/wiki/Google_File_System"&gt;Google File System&lt;/a&gt;.  The App Engine is also scalable, and completely hosted by Google.&lt;br /&gt;&lt;br /&gt;This is checklist to get an application running on Google App Engine:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sign up for an Application (Requires a Google Account)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Download the SDK (Requires Python 2.5)&lt;/li&gt;&lt;li&gt;Create an application using the template provided in SDK&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Upload your application to the AppEngine&lt;/li&gt;&lt;/ul&gt;Some notes on the App Engine programming, you must use python.  You are limited to standard Python 2.5.  They provide some extensions, and a limited version of Django.  You can upload other "pure Python" extensions.&lt;br /&gt;&lt;br /&gt;View my &lt;a href="http://dcodedump.appspot.com/"&gt;simple Python CGI application&lt;/a&gt; for displaying the Twitter trends API call.&lt;br /&gt;&lt;br /&gt;My view of the App Engine is it is a service that has potential.  The service requires you to download the SDK and work for the command line, so if you are not comfortable with this then it probably is not the service for you.  I will probably continue to play with the App Engine, becuase it has some real potential, and I want to learn more about working BigTable.&lt;br /&gt;&lt;br /&gt;Once the service is more refined it could be a really smooth way to develop highly scalable web service.  Look out for this one as a major player in the cloud market if they decide to take it mainstream with other languages beyond Python.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is the source code, also this was my first real dive into Python, beyond just toying with the interpreter (I love it!!!1!)&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import wsgiref.handlers&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;from google.appengine.ext import webapp&lt;br /&gt;#url fetching&lt;br /&gt;from google.appengine.api import urlfetch&lt;br /&gt;from datetime import datetime&lt;br /&gt;#use the simplejson library, lucky it was in django&lt;br /&gt;from django.utils import simplejson&lt;br /&gt;import time&lt;br /&gt;&lt;br /&gt;#Output the html ick, but it's just a example&lt;br /&gt;output = '&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;'&lt;br /&gt;output += '&amp;lt;h1&amp;gt;Twitter Trends&amp;lt;/h1&amp;gt;'&lt;br /&gt;output += '&amp;lt;ul&amp;gt;'&lt;br /&gt;&lt;br /&gt;# Make the API call to twitter&lt;br /&gt;url = "http://search.twitter.com/trends.json"&lt;br /&gt;result = urlfetch.fetch(url)&lt;br /&gt;&lt;br /&gt;#Status code ok?&lt;br /&gt;if result.status_code == 200:&lt;br /&gt;json = simplejson.loads(result.content)&lt;br /&gt;#Loop through the trends list&lt;br /&gt;for i in json['trends']:&lt;br /&gt;output += '&amp;lt;li&amp;gt;'&lt;br /&gt;output += '&amp;lt;a href="' + i['url'] + '"&amp;gt;'&lt;br /&gt;output += i['name']&lt;br /&gt;output += '&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;'&lt;br /&gt;&lt;br /&gt;#Finish out the request&lt;br /&gt;output += '&amp;lt;/ul&amp;gt;'&lt;br /&gt;output += '&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;'&lt;br /&gt;&lt;br /&gt;#The primary handler, just outputs output&lt;br /&gt;class MainHandler(webapp.RequestHandler):&lt;br /&gt;def get(self):&lt;br /&gt;self.response.out.write(output)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#Defines the calls through the application&lt;br /&gt;def main():&lt;br /&gt;application = webapp.WSGIApplication([('/', MainHandler)],&lt;br /&gt;                                  debug=True)&lt;br /&gt;wsgiref.handlers.CGIHandler().run(application)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;main()&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-3450281514689659841?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/3450281514689659841/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=3450281514689659841" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/3450281514689659841?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/3450281514689659841?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/XQs8GIGC14Y/intro-to-google-app-engine-displaying.html" title="Intro to Google App Engine: Displaying Twitter Trends" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dotcodedump.com/2009/02/intro-to-google-app-engine-displaying.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQERn45eSp7ImA9WxVWEEw.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-7126800119446879051</id><published>2009-02-18T19:25:00.000-08:00</published><updated>2009-02-18T19:31:47.021-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-18T19:31:47.021-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>Twitter and it's addictive properties</title><content type="html">&lt;img src="http://www.blogsdna.com/wp-content/uploads/2008/05/bird.gif" style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 250px; height: 173px;" border="0" alt="" /&gt;After signing up for Twitter I think I am starting to at least understand the whole idea behind microblogging.  My general theory of the internet still applies though, it's really just a way for people to post small links of pictures of cats.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think the most interesting thing is the whole openess of their service, and the ability to integrate it with other services.  Hint look for this post on Twitter&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-7126800119446879051?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/7126800119446879051/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=7126800119446879051" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/7126800119446879051?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/7126800119446879051?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/uv-Um4uOzaM/twitter-and-its-addictive-properties.html" title="Twitter and it's addictive properties" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2009/02/twitter-and-its-addictive-properties.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MMQn8_fip7ImA9WxVXGE0.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-6891550963390575283</id><published>2009-02-15T20:32:00.000-08:00</published><updated>2009-02-16T08:24:43.146-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-16T08:24:43.146-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Creating a simple Twitter AJAX widget using Google Feeds API</title><content type="html">I was doing some research into making API calls to &lt;a href="http://twitter.com/ianlintner"&gt;Twitter&lt;/a&gt; using JavaScript.  The one problem I ran into was calling remote domains.  One quick solution I found was to use the Google Feed API. Google provides a really easy and simple interface for accessing feeds via JavaScript.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A quick how to&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;To start out you must import the api using your &lt;a href="http://code.google.com/apis/maps/signup.html"&gt;Google API key&lt;/a&gt;.&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&amp;lt;script src="http://www.google.com/jsapi?key=[Your Google API Key]"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This is script was taking from the &lt;a href="http://code.google.com/apis/ajax/playground/#load_feed"&gt;Google AJAX API Playground&lt;/a&gt;, I just added in the call for Twitter, the full script is below.&lt;br /&gt;&lt;br /&gt;First the Google feed object is instantiated with the call to the &lt;a href="http://apiwiki.twitter.com/REST+API+Documentation"&gt;Twitter API&lt;/a&gt; via RSS.&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;var feed = new google.feeds.Feed("http://twitter.com/statuses/user_timeline/ianlintner.rss");&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The Google feed API is great way to access and work with remote feeds, and APIs using just JavaScript.  This also an asynchronous call, so it should play well with other AJAX solutions.&lt;br /&gt;&lt;br /&gt;The full listing, with my changes.&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&amp;lt;!--&lt;br /&gt;Copyright (c) 2008 Google Inc.&lt;br /&gt;&lt;br /&gt;You are free to copy and use this sample.&lt;br /&gt;License can be found here: http://code.google.com/apis/ajaxsearch/faq/#license&lt;br /&gt;--&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="content-type" content="text/html; charset=utf-8"/&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Google AJAX Search API Sample&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;script src="http://www.google.com/jsapi?key=[Google Key]"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;/*&lt;br /&gt;*  How to load a feed via the Feeds API.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;google.load("feeds", "1");&lt;br /&gt;&lt;br /&gt;// Our callback function, for when a feed is loaded.&lt;br /&gt;function feedLoaded(result) {&lt;br /&gt;  if (!result.error) {&lt;br /&gt;    // Grab the container we will put the results into&lt;br /&gt;    var container = document.getElementById("content");&lt;br /&gt;    container.innerHTML = '';&lt;br /&gt;&lt;br /&gt;    // Loop through the feeds, putting the titles onto the page.&lt;br /&gt;    // Check out the result object for a list of properties returned in each entry.&lt;br /&gt;    // http://code.google.com/apis/ajaxfeeds/documentation/reference.html#JSON&lt;br /&gt;    for (var i = 0; i &amp;lt; result.feed.entries.length; i++) {&lt;br /&gt;      var entry = result.feed.entries[i];&lt;br /&gt;      var div = document.createElement("div");&lt;br /&gt;      div.appendChild(document.createTextNode(entry.title));&lt;br /&gt;      container.appendChild(div);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function OnLoad() {&lt;br /&gt;  // Create a feed instance that will grab twitter&lt;br /&gt;  var feed = new google.feeds.Feed("http://twitter.com/statuses/user_timeline/ianlintner.rss");&lt;br /&gt;&lt;br /&gt;  // Calling load sends the request off.  It requires a callback function.&lt;br /&gt;  feed.load(feedLoaded);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;google.setOnLoadCallback(OnLoad);&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body style="font-family: Arial;border: 0 none;"&amp;gt;&lt;br /&gt;&amp;lt;div id="content"&amp;gt;Loading...&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-6891550963390575283?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/6891550963390575283/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=6891550963390575283" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/6891550963390575283?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/6891550963390575283?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/pBNfdYJhTXc/creating-simpletwitter-ajax-widget.html" title="Creating a simple Twitter AJAX widget using Google Feeds API" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2009/02/creating-simpletwitter-ajax-widget.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cBQHc5eSp7ImA9WxVWGUs.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-427210019968078725</id><published>2009-01-25T20:02:00.000-08:00</published><updated>2009-03-01T19:37:31.921-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-01T19:37:31.921-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="guidelines" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Defensive Coding</title><content type="html">&lt;div&gt;Inputs, and Data&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Defensive coding produces code that accepts the fact that, inputs are going to be invalid, other code is probably not going to work right, and the data is bad.   In other words real world coding.  Sometimes as programmers we get caught in our own little bubbles where data is perfect, and nothing ever returns a null, but that is a pipe dream.  In the real world things change, and people make mistakes, and coding defensively is way to deal with this fact.&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;To code defensively you must understand the following:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Don't make assumptions&lt;/li&gt;&lt;li&gt;You can't control user input.&lt;/li&gt;&lt;li&gt;You can't trust the data.&lt;/li&gt;&lt;li&gt;You can't trust other code.&lt;/li&gt;&lt;li&gt;The requirements will change.&lt;/li&gt;&lt;li&gt;It always takes longer than you thought.&lt;/li&gt;&lt;li&gt;You can do it right now, or do it right again later.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Defensively coding is necessary when confidence levels in technical, or other aspects of software project are low.  Defensive coding is not a solution, but a compensenatory technique for producing high quality code when coditions do not foster it.  Some people might say that defensive coding smells, and it's not ideal, but I believe it to be acceptable when rewriting a project, or reworking other aspects of the project are not a viable option.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Examples of defensive coding using VB.NET&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Example 1. Null check from a database call.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Dim myDbObject as DbObject&lt;/div&gt;&lt;div&gt;Dim myValue as string&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;myDbObject = DbLayer.GetDbObject()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If myDbObject IsNot Nothing  then&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;myValue = &lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;myDbObject.Property&lt;br /&gt;&lt;/div&gt;&lt;div&gt;End If&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Example 2. Checking input data&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Public Sub GetInput(ByVal Input as DateTime)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;If Input &gt; DateTime.MinValue AndAlso Input &lt;&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;DbLayer.SaveDate(Input)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Else&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;DbLayer.SaveDate(DateTime.MinValue)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;End If&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;End Sub&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In example one, the basic premise is that we define our variable rather than just using the object value straight from the database, and check if it's null before using it.  This is basic common sense, but this pattern can be extrapolated out, and inplementing these checks will never serve you wrong. In the second example before passing data back to the database we check to see if the date values are within range.  This is a basic check, but it is likely to cause errors when dealing with date inputs.  It is always a good idea to use a basic check to see if your data is at least in a general range.  It will save you headaches later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These were very rudimentary examples, but this is the fundamental of coding defensively.  This all can be distilled down to the idea that you can only control data once it is inside of your application, and everthing else will probably be corrupt, invalid, or buggy at some point, so deal with it.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To be continued&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-427210019968078725?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/427210019968078725/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=427210019968078725" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/427210019968078725?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/427210019968078725?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/tkqe9amfS-o/defensive-coding.html" title="Defensive Coding" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dotcodedump.com/2009/01/defensive-coding.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUHQno_fSp7ImA9WxVSE04.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-1263459441638319843</id><published>2009-01-07T04:51:00.000-08:00</published><updated>2009-01-07T05:50:33.445-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-07T05:50:33.445-08:00</app:edited><title>On the Value of Application Documentation</title><content type="html">Documentation is not something that comes naturally to programmers, we are more concerned about creating, problem solving, and of course developing software.  I came upon a personal revelation: document important items, and taking notes make you a better developer.  I advocate documenting, only what's important for you, what's important for other team members, and what would be important for some one inheriting the project. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oJ89RnXa3zM/SWSzCUMzwsI/AAAAAAAAASk/cU2dl5EAKHM/s1600-h/dilbert2005071744002.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 140px;" src="http://3.bp.blogspot.com/_oJ89RnXa3zM/SWSzCUMzwsI/AAAAAAAAASk/cU2dl5EAKHM/s400/dilbert2005071744002.gif" alt="" id="BLOGGER_PHOTO_ID_5288548714803348162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;My personal preference is for using a wiki rather than some sort of specialized documentation.  A wiki can be shared, community editable, and open enough it can support almost any teams needs.  The disclaimer is Personally I think wikis are about the best thing since sliced bread.&lt;br /&gt;&lt;br /&gt;Once you choose a documentation implementation, whether it be a wiki, text file, or other solution.  You have to start using it.  Starting documentation is generally an easy affair.  You go through the application you are working on, document things like servers ips, logins, connection strings, deployment processes, how tos, faqs, and general notes.  This is your bare bones documentation.&lt;br /&gt;&lt;br /&gt;The hard part of documentation is to keep it going.  Keep a log of important meetings, decisions and events that occur, this allows you to go back 3 weeks later and look up what color the save button should be, or who should receive the emails from the contact us form.  Keeping a historical log will also let you go back, and review the painful parts, and the successes.  A fun benefit is you can go back and see why something was done, and blame it on that person.&lt;br /&gt;&lt;br /&gt;Keeping updated notes and documentation on any software project can only help a project be successful, but if you don't have the documentation and you do need it you can be up a creek.  To put it in geeky terms it is a pseudo pascals wager.&lt;br /&gt;&lt;br /&gt;Documentation is worth the effort, because the process of keeping notes makes you more aware of the ins and outs of the project, and by keeping a project document it helps you truly understand a project, and how all the pieces work together. Personally I have found keeping documentation a great boon, and I can only recommend it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-1263459441638319843?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/1263459441638319843/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=1263459441638319843" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/1263459441638319843?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/1263459441638319843?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/NEmQ1QNvDmA/on-value-of-application-documentation.html" title="On the Value of Application Documentation" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_oJ89RnXa3zM/SWSzCUMzwsI/AAAAAAAAASk/cU2dl5EAKHM/s72-c/dilbert2005071744002.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2009/01/on-value-of-application-documentation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AHRHg7eip7ImA9WxVTEUk.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-2532706256960759896</id><published>2008-12-24T10:31:00.000-08:00</published><updated>2008-12-24T11:08:55.602-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-24T11:08:55.602-08:00</app:edited><title>The Importance of the Contact Us Page</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oJ89RnXa3zM/SVJ9Pg4Bd6I/AAAAAAAAASE/V5AeCmIXlLg/s1600-h/itunessupport.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 387px;" src="http://4.bp.blogspot.com/_oJ89RnXa3zM/SVJ9Pg4Bd6I/AAAAAAAAASE/V5AeCmIXlLg/s400/itunessupport.jpg" alt="" id="BLOGGER_PHOTO_ID_5283423018335434658" border="0" /&gt;&lt;/a&gt;The ubiquitous contact us form.  This was my introduction to web development, and something that is a part of almost every single web application. Developing a contact us form is a task almost every web developer has had to tackle.  The contact us form is so common, because it embodies the fundamental purpose of the web: Communication.  One question I ask myself is "Why are contact us forms so different?", I think this is because many companies, and organization want to customize the communication experience.  A custom contact us form reflects who the organization is, and how they communicate.&lt;br /&gt;&lt;br /&gt;To delve into the idea further, you can ascertain a lot of knowledge based on the presence or absence of a contact us forms, how you navigate to the form, and what it looks like.  The contact us form can also communicate information such as organizational structure, culture, titles, naming conventions, and company jargon.  Many times the form is going to emulate communicating with company over the phone, or in person.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oJ89RnXa3zM/SVKBimGs4OI/AAAAAAAAASU/QNdbUv3dE8Y/s1600-h/Basecamp.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 328px; height: 400px;" src="http://3.bp.blogspot.com/_oJ89RnXa3zM/SVKBimGs4OI/AAAAAAAAASU/QNdbUv3dE8Y/s400/Basecamp.jpg" alt="" id="BLOGGER_PHOTO_ID_5283427744203202786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If we look into the history of sending emails via web pages.  Many times in the earlier days of the web many companies would just post a mailing address, and maybe a phone number if anything.  Then this graduated to maybe including an email link, and if the webmaster knew enough the email address would be hot linked with the mailto: attribute. The whole evolution finally it all culminated with the modern contact us form where users would just enter a message, and were able to submit the form directly from the companies web page.&lt;br /&gt;&lt;br /&gt;The modern contact us form comes in many varities, but still do the same thing as the original contact us forms.  Custom things you will see is fields custom to products or services a company offers, custom geographical or census type information, or areas to select which person or department receives the email.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;AT&amp;amp;T Complex Contact Us Navigation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oJ89RnXa3zM/SVJ8ZavdC2I/AAAAAAAAARk/BK8dhaPnwHs/s1600-h/attcontact.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 268px; height: 400px;" src="http://3.bp.blogspot.com/_oJ89RnXa3zM/SVJ8ZavdC2I/AAAAAAAAARk/BK8dhaPnwHs/s400/attcontact.jpg" alt="" id="BLOGGER_PHOTO_ID_5283422088975944546" border="0" /&gt;&lt;/a&gt;When desiging a contact us form the developer must first understand the organization that they are working with.  The need to understand what information they require, how they communicate, who does the communicating.&lt;br /&gt;&lt;br /&gt;Some organizations want the users to be able send an email directly to certain individuals, and some want all communication to be funneled through one location and be dissemenated through the chain.  Many organizations like to divide communication into functional areas such as sales, support, marketing, and employment.  Some organizations prioritize the contact us section of their sites, while others it is an after thought.  Whatever the organization style they probably have opinions on how it should be done.&lt;br /&gt;&lt;br /&gt;The contact us form may seem like a simple endevour, but many times buisness requirements may conflict with good design, and functionality.  The form may have 20 fields, and the requirements state that every field is required, my guess is many times this form will be abandoned, or on the other end of the spectrum requiring to little information may lead to messages that say "I am interested in buying" and no contact information.  Make the contact form to difficult to find, and you will never get any messages at all.&lt;br /&gt;&lt;br /&gt;The contact us form is integral part of many company websites.  Understanding how a company works, and how it communicates will lead to many cues on how to design a contact us form.  The contact us form is just as important as designing how a company handles standard communication.  If the user has a bad experience communicating with a company electronically, it can be just as bad as having a bad experience on the phone, and a good experience ensures there are no roadblocks between you and your users.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;--&lt;br /&gt;&lt;br /&gt;Links&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For Contact Form Design Ideas&lt;br /&gt;&lt;a href="http://www.smashingmagazine.com/2008/04/17/web-form-design-modern-solutions-and-creative-ideas/"&gt;Smashing Magazine Web Form Design&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bored? Try and find the contact us forms above at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.att.com/"&gt;Ma Bell (AT&amp;amp;T) Website&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://store.apple.com/us/help"&gt;Apple's Website&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.basecamphq.com/"&gt;Basecamp's Website&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.dotcodedump.com%2f2008%2f12%2fimportance-of-contact-us-page.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.dotcodedump.com%2f2008%2f12%2fimportance-of-contact-us-page.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-2532706256960759896?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/2532706256960759896/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=2532706256960759896" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/2532706256960759896?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/2532706256960759896?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/zLZ15XLYpUI/importance-of-contact-us-page.html" title="The Importance of the Contact Us Page" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_oJ89RnXa3zM/SVJ9Pg4Bd6I/AAAAAAAAASE/V5AeCmIXlLg/s72-c/itunessupport.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/12/importance-of-contact-us-page.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEGQHk8eip7ImA9WxRUFk8.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-8954687374928380573</id><published>2008-11-24T15:24:00.001-08:00</published><updated>2008-11-25T06:17:01.772-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-25T06:17:01.772-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="samurize" /><category scheme="http://www.blogger.com/atom/ns#" term="widget" /><category scheme="http://www.blogger.com/atom/ns#" term="svn" /><title>Subversion Desktop Widget</title><content type="html">I learned about the Serious Samurize desktop customizer from Lifehacker.  I started using it, and it made me started wondering: what technical information would be useful displayed on my desktop.  Subversion (SVN) logs was the first thing that popped into my mind.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oJ89RnXa3zM/SSs64UJeMTI/AAAAAAAAAQU/BbsYnAIYbME/s1600-h/1124.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_oJ89RnXa3zM/SSs64UJeMTI/AAAAAAAAAQU/BbsYnAIYbME/s400/1124.jpg" alt="" id="BLOGGER_PHOTO_ID_5272372527922819378" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Serious Samurize Desktop Example&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This was pretty straightforward to implement in Samurize.&lt;br /&gt;1. Open your Samurize Config Editor.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oJ89RnXa3zM/SSs6WkrJNBI/AAAAAAAAAQE/S4RV2ozpAv8/s1600-h/11243.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_oJ89RnXa3zM/SSs6WkrJNBI/AAAAAAAAAQE/S4RV2ozpAv8/s320/11243.jpg" alt="" id="BLOGGER_PHOTO_ID_5272371948243465234" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;Serious Samurize Config&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;2. Add a new meter, and select console meter (&lt;a href="http://www.samurize.com/modules/sections/index.php?op=viewarticle&amp;amp;artid=3#m3"&gt;tutorial&lt;/a&gt;)&lt;br /&gt;3. In the meter config tool bar on the right, select the source tab.&lt;br /&gt;4. This requires the SVN command line application application installed (&lt;a href="http://subversion.tigris.org/files/documents/15/44095/svn-win32-1.5.4.zip"&gt;available here&lt;/a&gt;)&lt;br /&gt;5. Enter the source to be this command:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;svn log https://nant.svn.sourceforge.net/svnroot/nant -l 10&lt;/span&gt;&lt;/blockquote&gt;This is an example URL from Nhibernate’s SVN Repository &lt;span style="font-style: italic;font-size:85%;" &gt;&lt;br /&gt;Note: You may need provide a path to the svn command.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oJ89RnXa3zM/SSs7DvoI4dI/AAAAAAAAAQc/xdpd0uZa7gU/s1600-h/11242.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 191px;" src="http://4.bp.blogspot.com/_oJ89RnXa3zM/SSs7DvoI4dI/AAAAAAAAAQc/xdpd0uZa7gU/s400/11242.jpg" alt="" id="BLOGGER_PHOTO_ID_5272372724277764562" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;view of the widget&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This will return the last ten entries as a command line entries as a Samurize meter.&lt;br /&gt;Simple way create a cool little desktop control displaying information that is relevant to a developer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Quick Links:&lt;br /&gt;&lt;br /&gt;Serious Samurize&lt;br /&gt;&lt;a href="http://www.samurize.com/"&gt;http://www.samurize.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lifehacker&lt;br /&gt;&lt;a href="http://www.lifehacker.com/"&gt;http://lifehacker.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Subversion&lt;br /&gt;&lt;a href="http://subversion.tigris.org/"&gt;http://subversion.tigris.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-8954687374928380573?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/8954687374928380573/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=8954687374928380573" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/8954687374928380573?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/8954687374928380573?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/sHn1xz9Wsg4/svn-desktop-widget.html" title="Subversion Desktop Widget" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_oJ89RnXa3zM/SSs64UJeMTI/AAAAAAAAAQU/BbsYnAIYbME/s72-c/1124.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/11/svn-desktop-widget.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUARHY5fip7ImA9WxRUFUk.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-6272771929462573273</id><published>2008-11-24T09:16:00.000-08:00</published><updated>2008-11-24T09:20:45.826-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-24T09:20:45.826-08:00</app:edited><title>Creative Process</title><content type="html">This is a video that sounds dirty, but isn't: The meat cannon of Philladelphia.  I saw this posted on &lt;a href="http://gadgets.boingboing.net/"&gt;BoingBoing Gadgets&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;I thought this was good look into the creative process, problem solving, and flying meat.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/aW-ljrm7a6g&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/aW-ljrm7a6g&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-6272771929462573273?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/6272771929462573273/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=6272771929462573273" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/6272771929462573273?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/6272771929462573273?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/xiN491HDkcY/creative-process.html" title="Creative Process" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/11/creative-process.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcARH0_cSp7ImA9WxRWF0o.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-4930471956018757041</id><published>2008-11-03T19:29:00.000-08:00</published><updated>2008-11-03T20:14:05.349-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-03T20:14:05.349-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="quality" /><title>Don't Let Your Quality Slip</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.hulu.com/kitchen-nightmares"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 267px; height: 155px;" src="http://1.bp.blogspot.com/_oJ89RnXa3zM/SQ_LsxNEynI/AAAAAAAAAPc/dJPaAbWlp-w/s320/key_art_kitchen_nightmares.jpg" alt="" id="BLOGGER_PHOTO_ID_5264650459402259058" border="0" /&gt;&lt;/a&gt;Lately I have been watching &lt;a href="http://www.hulu.com/kitchen-nightmares"&gt;Kitchen Nightmares&lt;/a&gt; on &lt;a href="http://www.hulu.com/"&gt;Hulu&lt;/a&gt;.  Being a cooking enthusiast I get into the show.  Chef Ramsay always keeps saying to the chefs and restaurateurs don't let your quality slip.  He would show them how to make a new menu of high quality dishes.  The night would start out well, as the orders came in.  Then orders would start to build up, and the kitchen staff always, let the quality slip to get the orders out on time.  People would then leave, because of the bad food.&lt;br /&gt;&lt;br /&gt;The problem is the kitchen staff sacrificed quality to get the orders out faster.  The strategy that values speed over quality may win in the short term, but lose the war.  Software development is full of stories of making a hack to hit a deadline.  This is part of the culture that values working fast, over working right.&lt;br /&gt;&lt;br /&gt;Fighting for qaulity can be very difficult, because no one in their right mind would ever say "I am against producing quality software."  The best way to make the case for quality is to lead by example.  Quality software will speak for itself, just like quality food speaks for itself.  If the food is really great, you may pay a little more, and wait a little longer, but it is worth it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-4930471956018757041?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/4930471956018757041/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=4930471956018757041" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/4930471956018757041?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/4930471956018757041?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/AIDFf8isbdw/dont-let-your-quality-slip.html" title="Don't Let Your Quality Slip" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_oJ89RnXa3zM/SQ_LsxNEynI/AAAAAAAAAPc/dJPaAbWlp-w/s72-c/key_art_kitchen_nightmares.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/11/dont-let-your-quality-slip.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ACR3kzeCp7ImA9WxRQFkk.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-1157516548856182446</id><published>2008-10-10T04:19:00.000-07:00</published><updated>2008-10-10T05:29:26.780-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-10T05:29:26.780-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="perspective" /><title>You Can't Teach Perspective</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/commons/4/4c/Hogarth-satire-on-false-pespective-1753.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 422px; height: 529px;" src="http://upload.wikimedia.org/wikipedia/commons/4/4c/Hogarth-satire-on-false-pespective-1753.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Perspective (from Latin perspicere, to see through) &lt;br /&gt;-Wikipedia&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Perspective is one of those talents that some programmers have innately.  Experience may hone this ability.  Perspective is a huge part of designing software. It is being able to see what the users want, not, what they say they want.  There are some people who just get it right.&lt;br /&gt;&lt;br /&gt;If the designers of a system do not have the proper perspective you will find many symptoms. Example of this is when working on an application, and you find levels, and levels of detail when only very little of the system is actually used. Too much detail just reeks of over engineering, and you can just hear the developers wheels turning as they try to flush out every edge case.  This is a very dangerous pit, and as developers we must be vary wary of this.&lt;br /&gt;&lt;br /&gt;Many other symptoms of lack of perspective exist. Another common symptom is a very slow system that appear very simple on the outside. Usually this means that either too much planning went into the back end, or very little attention was paid to performance.  On the other hand a system with inconsistent screens, poor usability you, but it performs well, usually means that designing the logic was the important part of the project, and the UI was an after thought.&lt;br /&gt;&lt;br /&gt;All of these are symptoms are caused by lack of perspective, the proverbial forest for the trees.  If you do not see applications as a whole, that are used by users, you will get lost and end up fighting the wrong battles.  You end with over engineered software, or over engineered sections of software, you design the system how you would like it rather than what is needed. This is just one of the reasons software development and I.T. can get a bad name.&lt;br /&gt;&lt;br /&gt;There is a light at the end of the tunnel every one has a little bit of perspective, and intuition, it is just harder to tap into.  If you find yourself in the middle of development, and things are going badly.  Take a step back, ask yourself some questions.  The questions that works for me is the person getting the software going to love it?  If they are going to complain about speed, ease of use, complexity, the you've done something wrong.  Users want what you want, they want to be able to do their job and not worry about their tools.&lt;br /&gt;&lt;br /&gt;My final caveat on this is: All software is used by users, even if indirectly.  &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-1157516548856182446?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/1157516548856182446/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=1157516548856182446" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/1157516548856182446?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/1157516548856182446?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/Ptn72I_Y4AU/you-cant-teach-perspective.html" title="You Can't Teach Perspective" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/10/you-cant-teach-perspective.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcGQHszeip7ImA9WxRRF00.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-7861288712308062413</id><published>2008-09-29T08:35:00.000-07:00</published><updated>2008-09-29T08:43:41.582-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-29T08:43:41.582-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="extension" /><title>HTTP Fox</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://addons.mozilla.org/en-US/firefox/addon/6647"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 131px;" src="https://addons.mozilla.org/en-US/firefox/images/t/18903/1204538233" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/6647"&gt;HTTP Fox&lt;/a&gt; is a pretty neat firefox extension.  It allows you get the details of the http transaction with the web server.  Some of it overlaps the functionality of firebug.  The extension is fast and provides some nitty gritty details that are sorely necessary when debugging web applications.&lt;br /&gt;&lt;br /&gt;It provides a detailed view of the headers, querystring, cookies, post data, and the content.  It also provides the trace functionality, so you can see a detailed view of all the requests made to get the content on a page.  The elevator evaluation is that it is a cool tool which will come in handy when you most need it.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/6647"&gt;Download HTTP Fox&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-7861288712308062413?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/7861288712308062413/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=7861288712308062413" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/7861288712308062413?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/7861288712308062413?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/0M3V12pt4Nc/http-fox.html" title="HTTP Fox" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/09/http-fox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QCRXYycSp7ImA9WxRREU8.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-2359227547218982749</id><published>2008-09-16T08:41:00.000-07:00</published><updated>2008-09-22T15:09:24.899-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-22T15:09:24.899-07:00</app:edited><title>The Change Paradigm</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.decodeunicode.org/data/glyph/196x196/2359.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 127px; height: 127px;" src="http://www.decodeunicode.org/data/glyph/196x196/2359.gif" alt="" border="0" /&gt;&lt;/a&gt;Every system will experience some change, whether by choice, or by accident.   Every organization needs change, or they risk becoming irrelevant.  As stated in the previous article.  Change produces inefficiencies, so how do we manage change, within our code, our projects and our organizations.&lt;br /&gt;&lt;br /&gt;We try to plan for change, and create rules, procedures, and standards to manage the chaotic nature of change.  Try to reduce the number of unknown variables.  Creating standards for adjusting to change.  This comes from the idea change is not predictable, but reactions can be.&lt;br /&gt;&lt;br /&gt;Creating procedures for making changes is a key point to being a succesful programmer.  If you know when to make changes, and how to make changes.  You will be one step ahead of other programmers.  If you know how and when to make the switch to a new set of tools.  The risk of being stuck with a unruly beta can be avoided.  On the other hand if you wait to long you end up using obsolete technology.&lt;br /&gt;&lt;br /&gt;Having policies in place help keep you moving, or keep you from getting cut by the razors edge.  If you can find the sweet spot in making changes, you minimize the loss of efficiencies, by the benefits made from making the change.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Part III Dinosaurs and Lemmings&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-2359227547218982749?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/2359227547218982749/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=2359227547218982749" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/2359227547218982749?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/2359227547218982749?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/O-V-1Rz5OY8/change-paradigm.html" title="The Change Paradigm" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/09/change-paradigm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIHR3c_fSp7ImA9WxRSFU0.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-191396069645033081</id><published>2008-09-15T12:06:00.001-07:00</published><updated>2008-09-15T12:22:16.945-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-15T12:22:16.945-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="efficency" /><category scheme="http://www.blogger.com/atom/ns#" term="change" /><title>Change is the Enemy of Efficency</title><content type="html">Creating a disciplined development process, and environment when change is present is very difficult.  If a new technique, technology, developer, requirement, etc is introduced into a project the project's efficiency will suffer.  If speed and efficiency are goals of the project, than the project must be very rigid.  Change has very LARGE impact on a project. &lt;br /&gt;&lt;br /&gt;I have seen many times that a project I had worked on in the past trending towards a big success, on time, under budget, etc.  Then only to have an element of change introduced to the system... *WHAMO* the project momentum is changed and things start to slip drastically.  Depending on the amount of change this can push a project from success to failure.&lt;br /&gt;&lt;br /&gt;This not only applies to projects, it can be abstracted to larger view, such as teams, and companies.  Many people and groups profess the ability to handle change, but they never talk about the costs associated with it.  If a group or project is under constant change, true efficencies can never be realized. &lt;br /&gt;&lt;br /&gt;To be continued with Part 2 The Change Paradigm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-191396069645033081?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/191396069645033081/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=191396069645033081" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/191396069645033081?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/191396069645033081?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/bPXPQI-pFA8/change-is-enemy-of-efficency.html" title="Change is the Enemy of Efficency" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/09/change-is-enemy-of-efficency.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkINQHsyeCp7ImA9WxRSFEQ.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-4324175407609751679</id><published>2008-09-15T09:20:00.000-07:00</published><updated>2008-09-15T10:09:51.590-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-15T10:09:51.590-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="automated testing" /><category scheme="http://www.blogger.com/atom/ns#" term="faq" /><category scheme="http://www.blogger.com/atom/ns#" term="tdd" /><category scheme="http://www.blogger.com/atom/ns#" term="unit test" /><title>Stack Overflow</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://stackoverflow.com"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px;" src="http://stackoverflow.com/Content/Img/stackoverflow-logo-250.png" alt="" border="0" /&gt;&lt;/a&gt;I am playing with a new programming question and social answer service called stack overflow.&lt;br /&gt;&lt;br /&gt;Here is a question I submitted, and I am going to rely on wisdom of the crowd:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/64333/what-is-the-downside-to-test-driven-development"&gt;What is the downside of test driven development.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/users/8509/wwwdotcodedumpcom"&gt;My Question Feed&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-4324175407609751679?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/4324175407609751679/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=4324175407609751679" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/4324175407609751679?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/4324175407609751679?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/QEWig6xmmqY/stack-overflow.html" title="Stack Overflow" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/09/stack-overflow.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQAQXg-cSp7ImA9WxRTGEQ.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-2217812564701512681</id><published>2008-09-08T11:08:00.000-07:00</published><updated>2008-09-08T11:09:00.659-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-08T11:09:00.659-07:00</app:edited><title>BASIC</title><content type="html">&lt;a href="http://www.marriedtothesea.com/"&gt;&lt;img alt="Married To The Sea" src="http://www.marriedtothesea.com/090608/10-PRINT-SHIT-FUCK-CRAP-20-GOTO-10.gif" width="602" height="650" border=0&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.marriedtothesea.com"&gt;marriedtothesea.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-2217812564701512681?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/2217812564701512681/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=2217812564701512681" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/2217812564701512681?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/2217812564701512681?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/lzaboPSdWGQ/basic.html" title="BASIC" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/09/basic.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QDRX06eyp7ImA9WxRTFU4.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-1924449884820169389</id><published>2008-09-04T07:19:00.000-07:00</published><updated>2008-09-04T07:42:54.313-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-04T07:42:54.313-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="tool" /><category scheme="http://www.blogger.com/atom/ns#" term="extension" /><title>Ubiquity</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://azarask.in/gfx/ubiquity_side.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 157px; height: 223px;" src="http://azarask.in/gfx/ubiquity_side.png" alt="" border="0" /&gt;&lt;/a&gt;Mozilla Labs released a new extension for Firefox called &lt;a href="http://labs.mozilla.com/2008/08/introducing-ubiquity/"&gt;Ubiquity&lt;/a&gt;. Ubiquity is part graphical command line interface, part menu extension.  Since it is an Firefox add-in it becomes a awesome part of the browser environment.  The interface is mostly based on "verbs" that are generally related to a specific web application.  Such as map, is part of google maps, and weather goes to weather underground.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="https://people.mozilla.com/%7Eavarma/ubiquity-0.1.1.xpi"&gt;Download Ubiquity Here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Ubiquity Commands are very simple, if I want to find "Des Moines, IA" in google maps.  I access the command line interface by clicking ctrl-space (from windows).  Once the interface comes up and type: "map Des Moines, IA".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oJ89RnXa3zM/SL_zxflEgRI/AAAAAAAAAN8/lB8QTmUxDjc/s1600-h/ubiquitygraphic.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_oJ89RnXa3zM/SL_zxflEgRI/AAAAAAAAAN8/lB8QTmUxDjc/s320/ubiquitygraphic.jpg" alt="" id="BLOGGER_PHOTO_ID_5242176522898669842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ubiquity could be a really useful tool, it is still in the new toy phase for me.  I am enjoying just playing with it.  I see many possibilities for customizing it with new verbs to create really useful and efficient workflows.  Yet another reason to love Firefox.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-1924449884820169389?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/1924449884820169389/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=1924449884820169389" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/1924449884820169389?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/1924449884820169389?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/LF7IjHhyqbY/ubiquity.html" title="Ubiquity" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_oJ89RnXa3zM/SL_zxflEgRI/AAAAAAAAAN8/lB8QTmUxDjc/s72-c/ubiquitygraphic.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/09/ubiquity.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUDRX46eip7ImA9WxdbFkk.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-3620870732842032781</id><published>2008-08-13T08:04:00.000-07:00</published><updated>2008-08-13T08:11:14.012-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-13T08:11:14.012-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="svn" /><title>Subversion: a Disciplined Development Strategy</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://oreilly.com/catalog/covers/9780596510336_lrg.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 173px; height: 226px;" src="http://oreilly.com/catalog/covers/9780596510336_lrg.jpg" alt="" border="0" /&gt;&lt;/a&gt;Version control is a really important tool that I use every day.  It is not only is a great tool for storing and keeping track of code.  It can make you a efficient developer by forcing you to think about your what changes you are making to your code, because once we think about what we are doing it makes us more focused on the task at hand.&lt;br /&gt;&lt;br /&gt;This strategy is different than many other "development" strategies, because it never defines what you develop, how you develop, or even how you manage a project.  The only focus of this strategy is committing atomic changes, and logging those changes in the commit comments properly, and finally only commit code that builds. Using version control in this fashion produces a usable change log that can be used to track progress between revisions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="overflow: auto; font-weight: bold; float: none; width: 100%;"&gt;The outline of the strategy is:&lt;br /&gt;&lt;ol style="font-weight: bold;"&gt;&lt;li&gt;Commit only one change a time.&lt;/li&gt;&lt;li&gt;Commit only working code.&lt;/li&gt;&lt;li&gt;Comment your changes effectively.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;Commit only one change a time.&lt;/span&gt; We should only commit one atomic feature, fix, update at a time.  If you have 12 bug fixes in the queue, every bug fix should be a commit.  If you have a new feature such as a new management screen, it would need to be broken in to it's basic parts.  New data access code, updated business logic, new ui screen, new ui code, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Commit only working code.&lt;/span&gt; This is a no brainier, commit only code that builds, and does not error when you go to it.  If you need to commit code that breaks, comment it out.  If it's such a major change it will break the build, then you need to branch.  This keeps the integrity of build, and the project's trunk intact.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Comment your changes effectively&lt;/span&gt;.  Commit log comments are not useful unless they communicate something quicker, and more effective than looking at the file log.  I should be able to look at the commit log, and see what sections were touched in less than 15 words.  In earlier posts I outlined a strategy for &lt;a href="http://www.dotcodedump.com/2008/07/usable-subversion-comments.html"&gt;useable subversion comments&lt;/a&gt;, so I won't digress.&lt;br /&gt;&lt;br /&gt;Using this strategy has made me a more effective developer, by addressing some of my weaknesses.  If you are not thinking about source control in terms of development strategy you may be under utilizing the the tool.  Instead of searching for the next new tool, we should look at what we already have, and how to use those more efficiently.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-3620870732842032781?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/3620870732842032781/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=3620870732842032781" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/3620870732842032781?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/3620870732842032781?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/bJ2sTi-Sqn0/subversion-disciplined-development_13.html" title="Subversion: a Disciplined Development Strategy" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/08/subversion-disciplined-development_13.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIEQ345cCp7ImA9WxdbFUo.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-9135497152070554211</id><published>2008-08-12T12:02:00.000-07:00</published><updated>2008-08-12T12:48:22.028-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-12T12:48:22.028-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="deployment" /><category scheme="http://www.blogger.com/atom/ns#" term="action" /><category scheme="http://www.blogger.com/atom/ns#" term="nant" /><category scheme="http://www.blogger.com/atom/ns#" term="killer nant scripting" /><title>Killer NAnt Scripting Template</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oJ89RnXa3zM/SKHo2SseyMI/AAAAAAAAAMo/_-MY7e8XtcA/s1600-h/scaffold.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 305px; height: 229px;" src="http://3.bp.blogspot.com/_oJ89RnXa3zM/SKHo2SseyMI/AAAAAAAAAMo/_-MY7e8XtcA/s320/scaffold.jpg" alt="" id="BLOGGER_PHOTO_ID_5233720261410212034" border="0" /&gt;&lt;/a&gt;I created a NAnt template for developing NAnt scripts.  This template includes global variables, comments, different targets based on the deployment, job, action structure that I have talked about previously.&lt;br /&gt;&lt;br /&gt;I have provided the entire text file listed below, and also a zip file with the template in a NAnt .build file for download.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://dotcodedump.googlepages.com/Killer_NAnt_Template.zip"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 46px; height: 46px;" src="http://4.bp.blogspot.com/_oJ89RnXa3zM/SKHhR-DRwBI/AAAAAAAAAMg/fTpvQVkIEws/s320/ip_icon_03_ButtonDown.png" alt="" id="BLOGGER_PHOTO_ID_5233711940811997202" border="0" /&gt;&lt;/a&gt;&lt;a href="http://dotcodedump.googlepages.com/Killer_NAnt_Template.zip"&gt;&lt;span style="font-size:130%;"&gt;Download&lt;br /&gt;Template&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;span style="font-weight: bold;"&gt;Template code:&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;project name="Killer.NAnt.Template" default="Deploy.Target" basedir="." &amp;gt;&lt;br /&gt;&amp;lt;!-- Ian Lintner --&amp;gt;&lt;br /&gt;&amp;lt;!-- www.dotcodedump.com --&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- GLOBALS SECTION --&amp;gt;&lt;br /&gt;  &amp;lt;property name="Global.Debug" value="false" /&amp;gt;  &lt;br /&gt;  &amp;lt;property name="Global.Project" value="[Project Name]" /&amp;gt;&lt;br /&gt;  &amp;lt;property name="Global.Email.From" value="[Email Address]" /&amp;gt;&lt;br /&gt;  &amp;lt;property name="Global.Email.To" value="[Email Address]" /&amp;gt;&lt;br /&gt;  &amp;lt;property name="Global.Email.Server" value="[Email Server]" /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- DEPLOYMENT SECTION --&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;target name="Deploy.Target" description="A generic deployment target" &amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="* === Begin Deploy Target 1 ===" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="* Time: ${datetime::now()}" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;!--Put Deploy Specific Varaibles Here--&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;!-- Put Jobs Here --&amp;gt;&lt;br /&gt;      &amp;lt;call target="Job.One" /&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;echo message=""/&amp;gt;&lt;br /&gt;      &amp;lt;echo message=""/&amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="* === End Deploy Target 1 ===" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="* Time: ${datetime::now()}" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- JOB SECTION --&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;target name="Job.One" &amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="* -== Begin Task One==-" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="* Time: ${datetime::now()}" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;    &lt;br /&gt;      &amp;lt;!--Put Job Specific Variables Here--&amp;gt;&lt;br /&gt;    &lt;br /&gt;      &amp;lt;!-- Put Actions Here --&amp;gt;&lt;br /&gt;      &amp;lt;call target="Action.One" /&amp;gt;&lt;br /&gt;      &amp;lt;call target="Action.Two" /&amp;gt;&lt;br /&gt;    &lt;br /&gt;      &amp;lt;echo message=""/&amp;gt;&lt;br /&gt;      &amp;lt;echo message=""/&amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="* -== End Task One==- " /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="* Time: ${datetime::now()}" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- ACTION SECTION --&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;target name="Action.One" &amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="* Begin Action One: ${datetime::now()}" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;!-- put tasks here --&amp;gt;&lt;br /&gt;      &amp;lt;echo message="   *** Task One ***"/&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="* End Action One: ${datetime::now()}" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;    &lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;target name="Action.Two" &amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="* Begin Action Two: ${datetime::now()}" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;      &amp;lt;!-- put tasks here --&amp;gt;&lt;br /&gt;      &amp;lt;echo message="   *** Task Two ***"/&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="* End Action Two: ${datetime::now()}" /&amp;gt;&lt;br /&gt;      &amp;lt;echo message="**************************************************************" /&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotcodedump.com/search/label/killer%20nant%20scripting"&gt;View All of the Killer Nant Scripting Articles&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-9135497152070554211?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/9135497152070554211/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=9135497152070554211" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/9135497152070554211?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/9135497152070554211?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/PxaX2SnIk5Q/killer-nant-scripting-template.html" title="Killer NAnt Scripting Template" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_oJ89RnXa3zM/SKHo2SseyMI/AAAAAAAAAMo/_-MY7e8XtcA/s72-c/scaffold.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/08/killer-nant-scripting-template.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QFSX0-fCp7ImA9WxdbEEk.&quot;"><id>tag:blogger.com,1999:blog-8652484614831587374.post-2632710227995466482</id><published>2008-08-06T11:50:00.001-07:00</published><updated>2008-08-06T12:01:58.354-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-06T12:01:58.354-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Vulnerability" /><category scheme="http://www.blogger.com/atom/ns#" term="reverse engineering" /><category scheme="http://www.blogger.com/atom/ns#" term="EFF" /><title>EFF Coder's Rights</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eff.org/files/coders-rights-logo.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px;" src="http://www.eff.org/files/coders-rights-logo.png" alt="" border="0" /&gt;&lt;/a&gt;The Electronic Frontier Foundation has started a new campaign aimed at protecting programmer's rights.  The two main efforts of the program are "Reverse Engineering" and "Vulnerability Reporting".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eff.org/press/archives/2008/08/05-0"&gt;From the EFF Press Release&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;"Coders who explore technology through innovation and research play a vital role in developing and securing the software and hardware we use everyday. Yet this important work can be stymied by bogus legal threats," said EFF Civil Liberties Director Jennifer Granick, who is heading up the project. "EFF's Coders' Rights Project will provide a front-line defense for coders facing legal challenges for legitimate research activities."&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://eff.org/coders"&gt;Campaign Website: http://eff.org/coders&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8652484614831587374-2632710227995466482?l=www.dotcodedump.com'/&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotcodedump.com/feeds/2632710227995466482/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8652484614831587374&amp;postID=2632710227995466482" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/2632710227995466482?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8652484614831587374/posts/default/2632710227995466482?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dotCodeDump/~3/zFoPJMyO4gA/eff-coders-rights.html" title="EFF Coder's Rights" /><author><name>+Ian</name><uri>http://www.blogger.com/profile/17622502085133561203</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14050912138518788845" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotcodedump.com/2008/08/eff-coders-rights.html</feedburner:origLink></entry></feed>
