<?xml version="1.0" encoding="iso-8859-1"?><!-- generator="b2evolution/4.0.3" -->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Enterprise Developer</title>
		<link>http://blogs.lessthandot.com/index.php/EnterpriseDev/</link>
		<atom:link rel="self" type="application/rss+xml" href="http://blogs.lessthandot.com/index.php/EnterpriseDev/?tempskin=_rss2" />
		<description></description>
		<language>en-GB</language>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<admin:generatorAgent rdf:resource="http://b2evolution.net/?v=4.0.3"/>
		<ttl>60</ttl>
				<item>
			<title>Windows Azure Training Kit April 2013 Released</title>
			<link>http://blogs.lessthandot.com/index.php/EnterpriseDev/cloud/azure/windows-azure-training-kit-april</link>
			<pubDate>Mon, 29 Apr 2013 18:28:00 +0000</pubDate>			<dc:creator>SQLDenis</dc:creator>
			<category domain="main">Azure</category>			<guid isPermaLink="false">2187@http://blogs.lessthandot.com/</guid>
						<description>&lt;div class=&quot;image_block&quot;&gt;&lt;a href=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/windows_azure_small.jpg?mtime=1312531635&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/windows_azure_small.jpg?mtime=1312531635&quot; width=&quot;300&quot; height=&quot;169&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Microsoft has released the Windows Azure Training Kit April 2013.&lt;/p&gt;

&lt;p&gt;The Windows Azure Training Kit includes a comprehensive set of technical content designed to help you learn how to use Windows Azure. The kit includes hands-on labs, presentations, demos, and code samples for every aspect of developing applications for Windows Azure. You can use the resources in the training kit to teach yourself or train others.&lt;/p&gt;


&lt;p&gt;There have been a number of improvements in this release alongside the refresh to the Infrastructure Services content including:&lt;/p&gt;

&lt;p&gt;New Presentation: Windows Azure Mobile Services and Android&lt;br /&gt;
New Lab: Windows Azure Mobile Services and Android&lt;br /&gt;
New Lab: Windows Azure Mobile Services and Windows Phone&lt;br /&gt;
New Presentation: Introduction to Windows Azure HDInsight Service&lt;br /&gt;
New Lab: Introduction to Windows Azure HDInsight&lt;br /&gt;
Updated ITPro Content + Agenda&lt;br /&gt;
Updated Presentations for new feature support Windows Azure Overview, Windows Azure Web Sites, Windows Azure Virtual Machines &amp;amp; Windows Azure Mobile Services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hands-on Labs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Windows Azure Service Bus Remoting (VS2012): This hands-on lab walks you through this scenario using a sample application that replicates, albeit in a simplistic manner, the application architecture at Fictional Bank.&lt;/p&gt;

&lt;p&gt;Node.js &amp;amp; Windows Azure Web Sites (OSX): In this hands-on lab, you will learn the basics of the Windows Azure Web Sites service for Node.js applications.&lt;/p&gt;

&lt;p&gt;PHP &amp;amp; Windows Azure Web Sites (OSX): In this hands-on lab, you will explore the basic elements of the Windows Azure Web Sites service by creating a simple PHP application and deploying it using FTP deployment.&lt;/p&gt;

&lt;p&gt;Windows Azure Web Sites Gallery (OSX): In this hands-on lab you will learn how to create a new web site in Windows Azure by using a template from the pre-packaged applications gallery.&lt;/p&gt;

&lt;p&gt;Download it here: &lt;a href=&quot;http://www.windowsazure.com/en-us/develop/net/other-resources/training-kit/&quot;&gt;http://www.windowsazure.com/en-us/develop/net/other-resources/training-kit/&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/EnterpriseDev/cloud/azure/windows-azure-training-kit-april&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<div class="image_block"><a href="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/windows_azure_small.jpg?mtime=1312531635"><img alt="" src="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/windows_azure_small.jpg?mtime=1312531635" width="300" height="169" /></a></div><p>Microsoft has released the Windows Azure Training Kit April 2013.</p>

<p>The Windows Azure Training Kit includes a comprehensive set of technical content designed to help you learn how to use Windows Azure. The kit includes hands-on labs, presentations, demos, and code samples for every aspect of developing applications for Windows Azure. You can use the resources in the training kit to teach yourself or train others.</p>


<p>There have been a number of improvements in this release alongside the refresh to the Infrastructure Services content including:</p>

<p>New Presentation: Windows Azure Mobile Services and Android<br />
New Lab: Windows Azure Mobile Services and Android<br />
New Lab: Windows Azure Mobile Services and Windows Phone<br />
New Presentation: Introduction to Windows Azure HDInsight Service<br />
New Lab: Introduction to Windows Azure HDInsight<br />
Updated ITPro Content + Agenda<br />
Updated Presentations for new feature support Windows Azure Overview, Windows Azure Web Sites, Windows Azure Virtual Machines &amp; Windows Azure Mobile Services.</p>

<p><strong>Hands-on Labs</strong></p>

<p>Windows Azure Service Bus Remoting (VS2012): This hands-on lab walks you through this scenario using a sample application that replicates, albeit in a simplistic manner, the application architecture at Fictional Bank.</p>

<p>Node.js &amp; Windows Azure Web Sites (OSX): In this hands-on lab, you will learn the basics of the Windows Azure Web Sites service for Node.js applications.</p>

<p>PHP &amp; Windows Azure Web Sites (OSX): In this hands-on lab, you will explore the basic elements of the Windows Azure Web Sites service by creating a simple PHP application and deploying it using FTP deployment.</p>

<p>Windows Azure Web Sites Gallery (OSX): In this hands-on lab you will learn how to create a new web site in Windows Azure by using a template from the pre-packaged applications gallery.</p>

<p>Download it here: <a href="http://www.windowsazure.com/en-us/develop/net/other-resources/training-kit/">http://www.windowsazure.com/en-us/develop/net/other-resources/training-kit/</a></p><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/EnterpriseDev/cloud/azure/windows-azure-training-kit-april">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/EnterpriseDev/cloud/azure/windows-azure-training-kit-april#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/EnterpriseDev/?tempskin=_rss2&#38;disp=comments&#38;p=2187</wfw:commentRss>
		</item>
				<item>
			<title>Windows 8 for the Enterprise Event - Tuesday, April 16th</title>
			<link>http://blogs.lessthandot.com/index.php/EnterpriseDev/application-lifecycle-management/windows-8-for-the-enterprise</link>
			<pubDate>Tue, 09 Apr 2013 18:58:00 +0000</pubDate>			<dc:creator>Ted Krueger (onpnt)</dc:creator>
			<category domain="main">Application Lifecycle Management</category>
<category domain="alt">Cloud</category>
<category domain="alt">Enterprise Development</category>
<category domain="alt">Architecture</category>			<guid isPermaLink="false">2176@http://blogs.lessthandot.com/</guid>
						<description>&lt;p&gt;I&amp;#8217;ve had the chance to talk to quite a few people over the last few months about my experiences with Windows 8.&amp;#160; So far, and I can&amp;#8217;t see it changing, I&amp;#8217;ve been very impressed with Windows 8 and the efficiency boost it has provided me in normal, day-to-day operations.&amp;#160; I&amp;#8217;ve cut down the time it takes to manage how I utilize a machine.&amp;#160; This includes even simple operations like Windows management.&lt;/p&gt;
&lt;p&gt;This isn&amp;#8217;t about how much faster Windows 8 can make you though.&amp;#160; Well, in a way it is.&amp;#160; What I wanted to let everyone know about is an upcoming event that BlueMetal and Microsoft together will be providing to anyone that wants to attend &amp;#8211; Windows 8 for the Enterprise &amp;#8211; Demo Day.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bluemetal.com/index.html#now&quot;&gt;BlueMetal in Chicago&lt;/a&gt; is on the front lines of Window 8 development.&amp;#160; Some of the most effective, efficient and promising business-impacting solutions are coming from BlueMetal in the form of Windows 8 development.&amp;#160; This has been around much tablet work as well.&amp;#160; It takes a lot to impress me, given how many applications or systems I&amp;#8217;ve seen that promise to fix the world of computing.&amp;#160; I can honestly say, the Windows 8 development coming from BlueMetal will make businesses function more effectively.&lt;/p&gt;
&lt;p&gt;To find out how this all happens, evolves and is put to work, attend this event.&amp;#160; BTW...It&#039;s FREE and all are welcome!&lt;/p&gt;
&lt;p&gt;Below is the link to register and the event details - click the image to register.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032548665&amp;amp;Culture=en-US&quot;&gt;&lt;img src=&quot;data:image/png;base64,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&quot; alt=&quot;&quot; align=&quot;middle&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/EnterpriseDev/application-lifecycle-management/windows-8-for-the-enterprise&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/EnterpriseDev/application-lifecycle-management/windows-8-for-the-enterprise">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/EnterpriseDev/application-lifecycle-management/windows-8-for-the-enterprise#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/EnterpriseDev/?tempskin=_rss2&#38;disp=comments&#38;p=2176</wfw:commentRss>
		</item>
				<item>
			<title>Windows Azure Training Kit available</title>
			<link>http://blogs.lessthandot.com/index.php/EnterpriseDev/cloud/windows-azure-training-kit-available</link>
			<pubDate>Mon, 25 Feb 2013 23:39:00 +0000</pubDate>			<dc:creator>SQLDenis</dc:creator>
			<category domain="main">Cloud</category>
<category domain="alt">Azure</category>			<guid isPermaLink="false">2124@http://blogs.lessthandot.com/</guid>
						<description>&lt;div class=&quot;image_block&quot;&gt;&lt;img src=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev//windows_azure_small.jpg&quot; alt=&quot;&quot; title=&quot;&quot; width=&quot;300&quot; height=&quot;169&quot; /&gt;&lt;/div&gt;

&lt;p&gt;Microsoft has made available the Windows Azure Training Kit&lt;/p&gt;

&lt;p&gt;The Windows Azure Training Kit includes hands-on labs, presentations, and samples to help you understand how to build applications that use Windows Azure.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://windowsazure-trainingkit.github.com/labs.htm&quot;&gt;Hands-on labs&lt;/a&gt;&lt;/strong&gt; are sets of step-by-step guides that are designed to help you learn how to use key Windows Azure services and features. Each Lab provides instructions to guide you through the process of developing a complete application. The cool thing is that you can contribute to any of these hands-on labs by forking their repositories on GitHub and make changes to the content. Once you&#039;ve made your changes, share them back with the community by sending a pull request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://windowsazure-trainingkit.github.com/demos.htm&quot;&gt;Demos&lt;/a&gt; &lt;/strong&gt;are sets of step-by-step guides that are designed to demonstrate how to use key Windows Azure services and features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://windowsazure-trainingkit.github.com/presentations.htm&quot;&gt;Presentations&lt;/a&gt; &lt;/strong&gt;are a set of resources you can use for learning Windows Azure capabilities or to present Windows Azure features to an audience at a conference.&lt;/p&gt;


&lt;p&gt;You can get all the goodies here: &lt;a href=&quot;http://windowsazure-trainingkit.github.com/index.htm&quot;&gt;http://windowsazure-trainingkit.github.com/index.htm&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/EnterpriseDev/cloud/windows-azure-training-kit-available&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<div class="image_block"><img src="http://blogs.lessthandot.com/media/blogs/EnterpriseDev//windows_azure_small.jpg" alt="" title="" width="300" height="169" /></div>

<p>Microsoft has made available the Windows Azure Training Kit</p>

<p>The Windows Azure Training Kit includes hands-on labs, presentations, and samples to help you understand how to build applications that use Windows Azure.</p>



<p><strong><a href="http://windowsazure-trainingkit.github.com/labs.htm">Hands-on labs</a></strong> are sets of step-by-step guides that are designed to help you learn how to use key Windows Azure services and features. Each Lab provides instructions to guide you through the process of developing a complete application. The cool thing is that you can contribute to any of these hands-on labs by forking their repositories on GitHub and make changes to the content. Once you've made your changes, share them back with the community by sending a pull request.</p>

<p><strong><a href="http://windowsazure-trainingkit.github.com/demos.htm">Demos</a> </strong>are sets of step-by-step guides that are designed to demonstrate how to use key Windows Azure services and features.</p>

<p><strong><a href="http://windowsazure-trainingkit.github.com/presentations.htm">Presentations</a> </strong>are a set of resources you can use for learning Windows Azure capabilities or to present Windows Azure features to an audience at a conference.</p>


<p>You can get all the goodies here: <a href="http://windowsazure-trainingkit.github.com/index.htm">http://windowsazure-trainingkit.github.com/index.htm</a></p><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/EnterpriseDev/cloud/windows-azure-training-kit-available">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/EnterpriseDev/cloud/windows-azure-training-kit-available#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/EnterpriseDev/?tempskin=_rss2&#38;disp=comments&#38;p=2124</wfw:commentRss>
		</item>
				<item>
			<title>Displaying .Net Build Warnings in TeamCity</title>
			<link>http://blogs.lessthandot.com/index.php/EnterpriseDev/application-lifecycle-management/displaying-net-build-warnings-in</link>
			<pubDate>Tue, 15 Jan 2013 13:41:00 +0000</pubDate>			<dc:creator>Eli Weinstock-Herman (tarwn)</dc:creator>
			<category domain="main">Application Lifecycle Management</category>			<guid isPermaLink="false">2023@http://blogs.lessthandot.com/</guid>
						<description>&lt;p&gt;I like it when I kick off a build and there aren&#039;t any warnings. Unfortunately I&#039;m forgetful and it&#039;s always easier to edit the code now then it is 3 months later (when I remember to look at the warnings). When I put together &lt;a href=&quot;http://wiki.lessthandot.com/index.php/Eli%27s_Continuous_Delivery_Project&quot; title=&quot;Wiki writeup on my Continuous Delivery project&quot;&gt;my sample Continuous Delivery project&lt;/a&gt;, I was using Jenkins, which provided plugins for capturing warnings. It was nice to have visual feedback when I added a new warning, see how many were outstanding, have a list of outstanding warnings available on demand, and when I had a few minutes and fixed some of them, positive feedback by watching the warning chart slowly go down.&lt;/p&gt;

&lt;p&gt;When I switch modes and work in &lt;a href=&quot;http://www.jetbrains.com/teamcity/&quot; title=&quot;TeamCity by JetBrains&quot;&gt;TeamCity&lt;/a&gt;, I miss having that information available, with no extra steps from me. Despite several searches, though, I was never able to find a plugin that duplicated that behavior I liked in the Jenkins plugin. Turns out that TeamCity makes it pretty easy to roll your own, with just a little bit of powershell and some built-in features.&lt;/p&gt;

&lt;p&gt;In this post I am going to cover capturing the warnings from an MSBuild build step, adding that warning count to the main dashboard, adding a statistics chart for the warning count over time, adding a condensed list to the end of the build log, adding the formatted list as a build artifact, and adding a custom report tab to report the warnings for each build. &lt;/p&gt;

&lt;p&gt;Because who doesn&#039;t need five different ways to see their warnings?&lt;/p&gt;

&lt;h2&gt;Capturing the Build Warnings&lt;/h2&gt;
&lt;p&gt;Since I am using MSBuild, the build warnings have a consistent pattern and MSBuild itself has an option to log out to a logger. We can add this attribute in either the build step or the Build Parameters. My preference is using the parameters of the build step in case I have multiple MSBuild calls in the build.&lt;/p&gt;

&lt;p&gt;Parameter to add to MSBuild: &lt;code class=&quot;codespan&quot;&gt;/l:FileLogger,Microsoft.Build.Engine;logfile=%BuildLogFilename%&lt;/code&gt;&lt;/p&gt;


&lt;div style=&quot;text-align: center; font-size: 90%; color: #666666; margin: .5em&quot;&gt;
&lt;img src=&quot;http://tiernok.com/LTDBlog/TeamCityBuildWarnings/MSBuildParameter.png&quot; alt=&quot;Adding the MS Build Parameter&quot; style=&quot;border: 1px solid #666666;&quot; /&gt;&lt;br /&gt;
Adding the MS Build Parameter
&lt;/div&gt;

&lt;p&gt;Each time MSBuild runs, it will log it&#039;s output to the specified file. We can use powershell to extract the warnings from the output, like so:&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;powershell&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;powershell&quot; id=&quot;cb26744&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;Param(&lt;br /&gt;&amp;nbsp; &amp;nbsp; [parameter(Mandatory=$true)]&lt;br /&gt;&amp;nbsp; &amp;nbsp; [alias(&amp;quot;f&amp;quot;)]&lt;br /&gt;&amp;nbsp; &amp;nbsp; $FilePath&lt;br /&gt;)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;$warnings = @(Get-Content -ErrorAction Stop $FilePath | &amp;nbsp; &amp;nbsp; &amp;nbsp; # Get the file content&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Where {$_ -match &#039;^.*warning CS.*$&#039;} | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Extract lines that match warnings&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %{ $_.trim() -replace &amp;quot;^\s*\d+&amp;gt;&amp;quot;,&amp;quot;&amp;quot; &amp;nbsp;} | &amp;nbsp; &amp;nbsp; &amp;nbsp;# Strip out any project number and caret prefixes&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sort-object | Get-Unique -asString) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # remove duplicates by sorting and filtering for unique strings&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb49805&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Once we have the warnings extracted, we can move on to decide how we want them delivered. &lt;/p&gt;

&lt;p&gt;&lt;i&gt;Each section below will continue to add on to this script until it contains all the pieces we need to meet the display goals at the beginning.&lt;/i&gt;&lt;/p&gt;

&lt;h2&gt;Condensed Warning List in Build Log&lt;/h2&gt;
&lt;p&gt;The powershell script that is extracting warnings will need to run as a build step in the appropriate build configuration. This means that displaying a formatted list of warnings at the end of the build log is as simple as outputting that list from the powershell script we are building.&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;powershell&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;powershell&quot; id=&quot;cb93272&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;$count = $warnings.Count&lt;br /&gt;Write-Host &amp;quot;MSBuild Warnings - $count warnings ===================================================&amp;quot;&lt;br /&gt;$warnings | % { Write-Host &amp;quot; * $_&amp;quot; }&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb47823&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will output a section at the bottom of the build log that contains our warnings, like so:&lt;/p&gt;

&lt;div style=&quot;text-align: center; font-size: 90%; color: #666666; margin: .5em&quot;&gt;
&lt;img src=&quot;http://tiernok.com/LTDBlog/TeamCityBuildWarnings/LogOutput.png&quot; alt=&quot;Warnings in the Bottom of a Build Log&quot; style=&quot;border: 1px solid #666666;&quot; /&gt;&lt;br /&gt;
Warnings in the Bottom of a Build Log
&lt;/div&gt;

&lt;p&gt;Which I suppose is fine, but doesn&#039;t really add that much value over the ones listed further up the log by MSBuild itself.&lt;/p&gt;

&lt;h2&gt;Condensed Warning List in Archived Text File&lt;/h2&gt;
&lt;p&gt;Now that I have formatted warnings, it&#039;s pretty easy to create a file with those warnings and archive it. First I&#039;ll update the script to take an output parameter and add some file output:&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;powershell&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;powershell&quot; id=&quot;cb34858&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;Param(&lt;br /&gt;&amp;nbsp; &amp;nbsp; [parameter(Mandatory=$true)]&lt;br /&gt;&amp;nbsp; &amp;nbsp; [alias(&amp;quot;f&amp;quot;)]&lt;br /&gt;&amp;nbsp; &amp;nbsp; $FilePath,&lt;br /&gt;&amp;nbsp; &amp;nbsp; [parameter()]&lt;br /&gt;&amp;nbsp; &amp;nbsp; [alias(&amp;quot;o&amp;quot;)]&lt;br /&gt;&amp;nbsp; &amp;nbsp; $RawOutputPath,&lt;br /&gt;)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;# ...&lt;br /&gt;&amp;nbsp;&lt;br /&gt;# file output&lt;br /&gt;if($RawOutputPath){&lt;br /&gt;&amp;nbsp; &amp;nbsp; $stream = [System.IO.StreamWriter] $RawOutputPath&lt;br /&gt;&amp;nbsp; &amp;nbsp; $stream.WriteLine(&amp;quot;Build Warnings&amp;quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; $stream.WriteLine(&amp;quot;====================================&amp;quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; $stream.WriteLine(&amp;quot;&amp;quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; $warnings | % { $stream.WriteLine(&amp;quot; * $_&amp;quot;) }&lt;br /&gt;&amp;nbsp; &amp;nbsp; $stream.Close()&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb77757&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then I&#039;ll configure the project to capture that output file as an artifact:&lt;/p&gt;

&lt;div style=&quot;text-align: center; font-size: 90%; color: #666666; margin: .5em&quot;&gt;
&lt;img src=&quot;http://tiernok.com/LTDBlog/TeamCityBuildWarnings/ArtifactConfig_RawOutput.png&quot; alt=&quot;Artifact Configuration&quot; style=&quot;border: 1px solid #666666;&quot; /&gt;&lt;br /&gt;
Artifact Configuration
&lt;/div&gt;

&lt;p&gt;Et voila, the file shows up in my archived items:&lt;/p&gt;

&lt;div style=&quot;text-align: center; font-size: 90%; color: #666666; margin: .5em&quot;&gt;
&lt;img src=&quot;http://tiernok.com/LTDBlog/TeamCityBuildWarnings/Artifact_Display.png&quot; alt=&quot;List of archived items from a run&quot; style=&quot;border: 1px solid #666666;&quot; /&gt;&lt;br /&gt;
List of archived items from a run
&lt;/div&gt;

&lt;p&gt;And I have a clean, archived list of my warnings:&lt;/p&gt;

&lt;div style=&quot;text-align: center; font-size: 90%; color: #666666; margin: .5em&quot;&gt;
&lt;img src=&quot;http://tiernok.com/LTDBlog/TeamCityBuildWarnings/Artifact_File.png&quot; alt=&quot;Display of archived text file&quot; style=&quot;border: 1px solid #666666;&quot; /&gt;&lt;br /&gt;
Display of archived text file
&lt;/div&gt;

&lt;p&gt;But, really, we can do better.&lt;/p&gt;

&lt;h2&gt;Warning count in build status&lt;/h2&gt;
&lt;p&gt;Part of the goal was to be able to see the warning count change with no extra work, the best place I can think of to meet this is the final build status on each build.&lt;/p&gt;

&lt;p&gt;Before:&lt;/p&gt;

&lt;div style=&quot;text-align: center; font-size: 90%; color: #666666; margin: .5em&quot;&gt;
&lt;img src=&quot;http://tiernok.com/LTDBlog/TeamCityBuildWarnings/BuildStatusBefore.png&quot; alt=&quot;Build status on dashboard&quot; style=&quot;border: 1px solid #666666;&quot; /&gt;&lt;br /&gt;
Build status on dashboard
&lt;/div&gt;

&lt;p&gt;TeamCity provides support for &lt;a href=&quot;http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ReportingBuildStatus&quot; title=&quot;TeamCity documentation for Build Script Interaction&quot;&gt;setting the build status from a build script&lt;/a&gt;. By adding some output to the powershell script, like so:&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;powershell&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;powershell&quot; id=&quot;cb95240&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;#TeamCity output&lt;br /&gt;Write-Host &amp;quot;##teamcity[buildStatus text=&#039;{build.status.text}, Build warnings: $count&#039;]&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb45871&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Each successful build will also display the number of warnings that were captured.&lt;/p&gt;

&lt;div style=&quot;text-align: center; font-size: 90%; color: #666666; margin: .5em&quot;&gt;
&lt;img src=&quot;http://tiernok.com/LTDBlog/TeamCityBuildWarnings/BuildStatusAfter.png&quot; alt=&quot;Build status on dashboard, with warnings&quot; style=&quot;border: 1px solid #666666;&quot; /&gt;&lt;br /&gt;
Build status on dashboard, with warnings
&lt;/div&gt;

&lt;p&gt;Better, but what about historical values? And I still don&#039;t like that text file artifact.&lt;/p&gt;

&lt;h2&gt;Warning Count as a Custom Chart&lt;/h2&gt;
&lt;p&gt;TeamCity also provides the ability to add custom charts based on either built-in or &lt;a href=&quot;http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ReportingBuildStatistics&quot; title=&quot;TeamCity documentation - reporting custom statistics&quot;&gt;custom statistics&lt;/a&gt;. Custom statistics are reported similar to the build status output above:&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;powershell&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;powershell&quot; id=&quot;cb6924&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;Write-Host &amp;quot;##teamcity[buildStatisticValue key=&#039;buildWarnings&#039; value=&#039;$count&#039;]&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb74027&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Adding a &lt;a href=&quot;http://confluence.jetbrains.net/display/TCD7/Custom+Chart&quot; title=&quot;TeamCity documentation - Custom Statistics Charts&quot;&gt;custom chart&lt;/a&gt; requires us to dig into the configurations of TeamCity. I&#039;m going to add a chart that will be displayed for any build that provides the warning count number above, so I&#039;ll open the &lt;code class=&quot;codespan&quot;&gt;[teamCity data dir]/config/main-config.xml&lt;/code&gt; file and add the following section:&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;powershell&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;powershell&quot; id=&quot;cb12402&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&amp;lt;graph title=&amp;quot;Build Warnings&amp;quot; hideFilters=&amp;quot;showFailed&amp;quot; seriesTitle=&amp;quot;Warning&amp;quot; format=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;valueType key=&amp;quot;buildWarnings&amp;quot; title=&amp;quot;Warnings&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/graph&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb35915&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will add a chart to the Statistics tab of the build. After a few builds this is what I have:&lt;/p&gt;

&lt;div style=&quot;text-align: center; font-size: 90%; color: #666666; margin: .5em&quot;&gt;
&lt;img src=&quot;http://tiernok.com/LTDBlog/TeamCityBuildWarnings/WarningChart.png&quot; alt=&quot;Build Warning Statistics&quot; style=&quot;border: 1px solid #666666;&quot; /&gt;&lt;br /&gt;
Build Warning Statistics
&lt;/div&gt;

&lt;p&gt;It probably would look better if I hadn&#039;t built with the same number of warnings each time, but you get the point. The mouse hover works just like the built-in charts, linking to the run status for the individual point.&lt;/p&gt;

&lt;p&gt;Ok, getting better, but I think we can take it one step further. &lt;/p&gt;

&lt;h2&gt;Adding a Custom Build Warnings Tab&lt;/h2&gt;
&lt;p&gt;So far we have improved methods of seeing the warning count and watching how it changes over time, but the actual list still leaves something to be desired. Luckily, TeamCity supports &lt;a href=&quot;http://confluence.jetbrains.net/display/TCD3/Including+Third-Party+Reports+in+the+Build+Results#IncludingThird-PartyReportsintheBuildResults-Tabs&quot; title=&quot;TeamCity documentation: Including third-party reports as the build-results tabs&quot;&gt;custom report tabs&lt;/a&gt; in the Build Results. This gives us an easily accessible place to put the warnings and, since it uses HTML, better formatting options than the text file.&lt;/p&gt;

&lt;p&gt;First I need to update the powershell script to output the HTML file. TeamCity will be picking up an entire folder for the report tab, so I could add some external CSS or image files for my report, but I&#039;ll leave that for another day.&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;powershell&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;powershell&quot; id=&quot;cb10702&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;# html report output&lt;br /&gt;$check = Test-Path -PathType Container BuildWarningReport&lt;br /&gt;if($check -eq $false){&lt;br /&gt;&amp;nbsp; &amp;nbsp; New-Item &#039;BuildWarningReport&#039; -type Directory&lt;br /&gt;}&lt;br /&gt;$stream = [System.IO.StreamWriter] &amp;quot;BuildWarningReport/index.html&amp;quot;&lt;br /&gt;$stream.WriteLine(&amp;quot;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;$count Build Warnings&amp;lt;/h1&amp;gt;&amp;quot;)&lt;br /&gt;$stream.WriteLine(&amp;quot;&amp;lt;ul&amp;gt;&amp;quot;)&lt;br /&gt;$warnings | % { $stream.WriteLine(&amp;quot;&amp;lt;li&amp;gt;$_&amp;lt;/li&amp;gt;&amp;quot;) }&lt;br /&gt;$stream.WriteLine(&amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;)&lt;br /&gt;$stream.WriteLine(&amp;quot;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;)&lt;br /&gt;$stream.Close()&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb41891&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I&#039;ve added HTML output to the script with a hardcoded output location that ensures the report directory exists before writing the index.html page. I&#039;ve hardcoded this value to reduce the amount of thinking &#039;ll need to do as I add this to other projects (keeps it consistent from output name to artifact setting to report tab configuration).&lt;/p&gt;

&lt;p&gt;The next step is to configure the project to capture the folder as an artifact:&lt;/p&gt;

&lt;div style=&quot;text-align: center; font-size: 90%; color: #666666; margin: .5em&quot;&gt;
&lt;img src=&quot;http://tiernok.com/LTDBlog/TeamCityBuildWarnings/ArtifactConfig_Report.png&quot; alt=&quot;Artifact configuration&quot; style=&quot;border: 1px solid #666666;&quot; /&gt;&lt;br /&gt;
Artifact configuration
&lt;/div&gt;

&lt;p&gt;Then the last step is to modify the TeamCity configuration to recognize that when I output archives like that, I want to treat them as a report. To do this I add the following chunk of XML to my &lt;code class=&quot;codespan&quot;&gt;[TeamCity data directory]/config/main-config.xml&lt;/code&gt; file (per the documentation link above):&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;xml&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;xml&quot; id=&quot;cb47391&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;report-tab&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;title&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Build Warnings&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;basePath&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;BuildWarningReport&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;startPage&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;index.html&amp;quot;&lt;/span&gt; &lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb11992&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And there we go, the custom report tab is available in the build results:&lt;/p&gt;

&lt;div style=&quot;text-align: center; font-size: 90%; color: #666666; margin: .5em&quot;&gt;
&lt;img src=&quot;http://tiernok.com/LTDBlog/TeamCityBuildWarnings/WarningsTab.png&quot; alt=&quot;Build Warnings tab in Run Results&quot; style=&quot;border: 1px solid #666666;&quot; /&gt;&lt;br /&gt;
Build Warnings tab in Run Results
&lt;/div&gt;

&lt;p&gt;Which takes us from no visibility into our warnings, to five different methods of viewing the information.&lt;/p&gt;

&lt;h2&gt;Wrap-up&lt;/h2&gt;
&lt;p&gt;From having to Ctrl+F through the build log all the way to plugin-level output in a few easy steps. After setting this up one time, the only pieces that needed to be repeated for additional builds are the addition of the /logger parameter for MSBuild and the powershell build step to extract the results, and capturing the artifact for the HTML page. All of the output is either built in to the script or applies to the whole server and is displayed whenever the statistics or archive are present in a build.&lt;/p&gt;

&lt;p&gt;Here is the finished script:&lt;/p&gt;
&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;powershell&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;powershell&quot; id=&quot;cb20504&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;Param(&lt;br /&gt;&amp;nbsp; &amp;nbsp; [parameter(Mandatory=$true)]&lt;br /&gt;&amp;nbsp; &amp;nbsp; [alias(&amp;quot;f&amp;quot;)]&lt;br /&gt;&amp;nbsp; &amp;nbsp; $FilePath,&lt;br /&gt;&amp;nbsp; &amp;nbsp; [parameter()]&lt;br /&gt;&amp;nbsp; &amp;nbsp; [alias(&amp;quot;o&amp;quot;)]&lt;br /&gt;&amp;nbsp; &amp;nbsp; $RawOutputPath&lt;br /&gt;)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;$warnings = @(Get-Content -ErrorAction Stop $FilePath | &amp;nbsp; &amp;nbsp; &amp;nbsp; # Get the file content&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Where {$_ -match &#039;^.*warning CS.*$&#039;} | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Extract lines that match warnings&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %{ $_.trim() -replace &amp;quot;^\s*\d+&amp;gt;&amp;quot;,&amp;quot;&amp;quot; &amp;nbsp;} | &amp;nbsp; &amp;nbsp; &amp;nbsp;# Strip out any project number and caret prefixes&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sort-object | Get-Unique -asString) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # remove duplicates by sorting and filtering for unique strings&lt;br /&gt;&amp;nbsp;&lt;br /&gt;$count = $warnings.Count&lt;br /&gt;&amp;nbsp;&lt;br /&gt;# raw output&lt;br /&gt;Write-Host &amp;quot;MSBuild Warnings - $count warnings ===================================================&amp;quot;&lt;br /&gt;$warnings | % { Write-Host &amp;quot; * $_&amp;quot; }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;#TeamCity output&lt;br /&gt;Write-Host &amp;quot;##teamcity[buildStatus text=&#039;{build.status.text}, Build warnings: $count&#039;]&amp;quot;&lt;br /&gt;Write-Host &amp;quot;##teamcity[buildStatisticValue key=&#039;buildWarnings&#039; value=&#039;$count&#039;]&amp;quot;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;# file output&lt;br /&gt;if($RawOutputPath){&lt;br /&gt;&amp;nbsp; &amp;nbsp; $stream = [System.IO.StreamWriter] $RawOutputPath&lt;br /&gt;&amp;nbsp; &amp;nbsp; $stream.WriteLine(&amp;quot;Build Warnings&amp;quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; $stream.WriteLine(&amp;quot;====================================&amp;quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; $stream.WriteLine(&amp;quot;&amp;quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; $warnings | % { $stream.WriteLine(&amp;quot; * $_&amp;quot;) }&lt;br /&gt;&amp;nbsp; &amp;nbsp; $stream.Close()&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;# html report output&lt;br /&gt;$check = Test-Path -PathType Container BuildWarningReport&lt;br /&gt;if($check -eq $false){&lt;br /&gt;&amp;nbsp; &amp;nbsp; New-Item &#039;BuildWarningReport&#039; -type Directory&lt;br /&gt;}&lt;br /&gt;$stream = [System.IO.StreamWriter] &amp;quot;BuildWarningReport/index.html&amp;quot;&lt;br /&gt;$stream.WriteLine(&amp;quot;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;$count Build Warnings&amp;lt;/h1&amp;gt;&amp;quot;)&lt;br /&gt;$stream.WriteLine(&amp;quot;&amp;lt;ul&amp;gt;&amp;quot;)&lt;br /&gt;$warnings | % { $stream.WriteLine(&amp;quot;&amp;lt;li&amp;gt;$_&amp;lt;/li&amp;gt;&amp;quot;) }&lt;br /&gt;$stream.WriteLine(&amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;)&lt;br /&gt;$stream.WriteLine(&amp;quot;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;)&lt;br /&gt;$stream.Close()&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb66287&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To recap, we started with some warning messages randomly scattered across the build log. We ended with the warning count automatically showing in the build status on the dashboard, a nice chart of the number over time, and three different ways to view the detailed list. I hope this proves useful to others as well, now I have to go and fix the sample warnings I added before I forget about them. &lt;img src=&quot;http://blogs.lessthandot.com/rsc/smilies/icon_smile.gif&quot; title=&quot;:)&quot; alt=&quot;:)&quot; class=&quot;middle&quot; width=&quot;15&quot; height=&quot;15&quot; /&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/EnterpriseDev/application-lifecycle-management/displaying-net-build-warnings-in&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>I like it when I kick off a build and there aren't any warnings. Unfortunately I'm forgetful and it's always easier to edit the code now then it is 3 months later (when I remember to look at the warnings). When I put together <a href="http://wiki.lessthandot.com/index.php/Eli%27s_Continuous_Delivery_Project" title="Wiki writeup on my Continuous Delivery project">my sample Continuous Delivery project</a>, I was using Jenkins, which provided plugins for capturing warnings. It was nice to have visual feedback when I added a new warning, see how many were outstanding, have a list of outstanding warnings available on demand, and when I had a few minutes and fixed some of them, positive feedback by watching the warning chart slowly go down.</p>

<p>When I switch modes and work in <a href="http://www.jetbrains.com/teamcity/" title="TeamCity by JetBrains">TeamCity</a>, I miss having that information available, with no extra steps from me. Despite several searches, though, I was never able to find a plugin that duplicated that behavior I liked in the Jenkins plugin. Turns out that TeamCity makes it pretty easy to roll your own, with just a little bit of powershell and some built-in features.</p>

<p>In this post I am going to cover capturing the warnings from an MSBuild build step, adding that warning count to the main dashboard, adding a statistics chart for the warning count over time, adding a condensed list to the end of the build log, adding the formatted list as a build artifact, and adding a custom report tab to report the warnings for each build. </p>

<p>Because who doesn't need five different ways to see their warnings?</p>

<h2>Capturing the Build Warnings</h2>
<p>Since I am using MSBuild, the build warnings have a consistent pattern and MSBuild itself has an option to log out to a logger. We can add this attribute in either the build step or the Build Parameters. My preference is using the parameters of the build step in case I have multiple MSBuild calls in the build.</p>

<p>Parameter to add to MSBuild: <code class="codespan">/l:FileLogger,Microsoft.Build.Engine;logfile=%BuildLogFilename%</code></p>


<div style="text-align: center; font-size: 90%; color: #666666; margin: .5em">
<img src="http://tiernok.com/LTDBlog/TeamCityBuildWarnings/MSBuildParameter.png" alt="Adding the MS Build Parameter" style="border: 1px solid #666666;" /><br />
Adding the MS Build Parameter
</div>

<p>Each time MSBuild runs, it will log it's output to the specified file. We can use powershell to extract the warnings from the output, like so:</p>

<div class="codebox"><div class="codeheader"><span>powershell</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb67078'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb67078','cb41246'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="powershell" id="cb67078" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">Param(</li><li style="" class="li2">&nbsp; &nbsp; [parameter(Mandatory=$true)]</li><li style="" class="li1">&nbsp; &nbsp; [alias(&quot;f&quot;)]</li><li style="" class="li2">&nbsp; &nbsp; $FilePath</li><li style="" class="li1">)</li><li style="" class="li2">&nbsp;</li><li style="" class="li1">$warnings = @(Get-Content -ErrorAction Stop $FilePath | &nbsp; &nbsp; &nbsp; # Get the file content</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Where {$_ -match '^.*warning CS.*$'} | &nbsp; &nbsp; &nbsp; &nbsp;# Extract lines that match warnings</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; %{ $_.trim() -replace &quot;^\s*\d+&gt;&quot;,&quot;&quot; &nbsp;} | &nbsp; &nbsp; &nbsp;# Strip out any project number and caret prefixes</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sort-object | Get-Unique -asString) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # remove duplicates by sorting and filtering for unique strings</li></ol></div><div id="cb41246" style="display: none; color: red;"></div></div></div>

<p>Once we have the warnings extracted, we can move on to decide how we want them delivered. </p>

<p><i>Each section below will continue to add on to this script until it contains all the pieces we need to meet the display goals at the beginning.</i></p>

<h2>Condensed Warning List in Build Log</h2>
<p>The powershell script that is extracting warnings will need to run as a build step in the appropriate build configuration. This means that displaying a formatted list of warnings at the end of the build log is as simple as outputting that list from the powershell script we are building.</p>

<div class="codebox"><div class="codeheader"><span>powershell</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb20903'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb20903','cb2321'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="powershell" id="cb20903" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">$count = $warnings.Count</li><li style="" class="li2">Write-Host &quot;MSBuild Warnings - $count warnings ===================================================&quot;</li><li style="" class="li1">$warnings | % { Write-Host &quot; * $_&quot; }</li></ol></div><div id="cb2321" style="display: none; color: red;"></div></div></div>

<p>This will output a section at the bottom of the build log that contains our warnings, like so:</p>

<div style="text-align: center; font-size: 90%; color: #666666; margin: .5em">
<img src="http://tiernok.com/LTDBlog/TeamCityBuildWarnings/LogOutput.png" alt="Warnings in the Bottom of a Build Log" style="border: 1px solid #666666;" /><br />
Warnings in the Bottom of a Build Log
</div>

<p>Which I suppose is fine, but doesn't really add that much value over the ones listed further up the log by MSBuild itself.</p>

<h2>Condensed Warning List in Archived Text File</h2>
<p>Now that I have formatted warnings, it's pretty easy to create a file with those warnings and archive it. First I'll update the script to take an output parameter and add some file output:</p>

<div class="codebox"><div class="codeheader"><span>powershell</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb32223'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb32223','cb54419'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="powershell" id="cb32223" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">Param(</li><li style="" class="li2">&nbsp; &nbsp; [parameter(Mandatory=$true)]</li><li style="" class="li1">&nbsp; &nbsp; [alias(&quot;f&quot;)]</li><li style="" class="li2">&nbsp; &nbsp; $FilePath,</li><li style="" class="li1">&nbsp; &nbsp; [parameter()]</li><li style="" class="li2">&nbsp; &nbsp; [alias(&quot;o&quot;)]</li><li style="" class="li1">&nbsp; &nbsp; $RawOutputPath,</li><li style="" class="li2">)</li><li style="" class="li1">&nbsp;</li><li style="" class="li2"># ...</li><li style="" class="li1">&nbsp;</li><li style="" class="li2"># file output</li><li style="" class="li1">if($RawOutputPath){</li><li style="" class="li2">&nbsp; &nbsp; $stream = [System.IO.StreamWriter] $RawOutputPath</li><li style="" class="li1">&nbsp; &nbsp; $stream.WriteLine(&quot;Build Warnings&quot;)</li><li style="" class="li2">&nbsp; &nbsp; $stream.WriteLine(&quot;====================================&quot;)</li><li style="" class="li1">&nbsp; &nbsp; $stream.WriteLine(&quot;&quot;)</li><li style="" class="li2">&nbsp; &nbsp; $warnings | % { $stream.WriteLine(&quot; * $_&quot;) }</li><li style="" class="li1">&nbsp; &nbsp; $stream.Close()</li><li style="" class="li2">}</li></ol></div><div id="cb54419" style="display: none; color: red;"></div></div></div>

<p>Then I'll configure the project to capture that output file as an artifact:</p>

<div style="text-align: center; font-size: 90%; color: #666666; margin: .5em">
<img src="http://tiernok.com/LTDBlog/TeamCityBuildWarnings/ArtifactConfig_RawOutput.png" alt="Artifact Configuration" style="border: 1px solid #666666;" /><br />
Artifact Configuration
</div>

<p>Et voila, the file shows up in my archived items:</p>

<div style="text-align: center; font-size: 90%; color: #666666; margin: .5em">
<img src="http://tiernok.com/LTDBlog/TeamCityBuildWarnings/Artifact_Display.png" alt="List of archived items from a run" style="border: 1px solid #666666;" /><br />
List of archived items from a run
</div>

<p>And I have a clean, archived list of my warnings:</p>

<div style="text-align: center; font-size: 90%; color: #666666; margin: .5em">
<img src="http://tiernok.com/LTDBlog/TeamCityBuildWarnings/Artifact_File.png" alt="Display of archived text file" style="border: 1px solid #666666;" /><br />
Display of archived text file
</div>

<p>But, really, we can do better.</p>

<h2>Warning count in build status</h2>
<p>Part of the goal was to be able to see the warning count change with no extra work, the best place I can think of to meet this is the final build status on each build.</p>

<p>Before:</p>

<div style="text-align: center; font-size: 90%; color: #666666; margin: .5em">
<img src="http://tiernok.com/LTDBlog/TeamCityBuildWarnings/BuildStatusBefore.png" alt="Build status on dashboard" style="border: 1px solid #666666;" /><br />
Build status on dashboard
</div>

<p>TeamCity provides support for <a href="http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ReportingBuildStatus" title="TeamCity documentation for Build Script Interaction">setting the build status from a build script</a>. By adding some output to the powershell script, like so:</p>

<div class="codebox"><div class="codeheader"><span>powershell</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb27531'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb27531','cb6255'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="powershell" id="cb27531" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">#TeamCity output</li><li style="" class="li2">Write-Host &quot;##teamcity[buildStatus text='{build.status.text}, Build warnings: $count']&quot;</li></ol></div><div id="cb6255" style="display: none; color: red;"></div></div></div>

<p>Each successful build will also display the number of warnings that were captured.</p>

<div style="text-align: center; font-size: 90%; color: #666666; margin: .5em">
<img src="http://tiernok.com/LTDBlog/TeamCityBuildWarnings/BuildStatusAfter.png" alt="Build status on dashboard, with warnings" style="border: 1px solid #666666;" /><br />
Build status on dashboard, with warnings
</div>

<p>Better, but what about historical values? And I still don't like that text file artifact.</p>

<h2>Warning Count as a Custom Chart</h2>
<p>TeamCity also provides the ability to add custom charts based on either built-in or <a href="http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ReportingBuildStatistics" title="TeamCity documentation - reporting custom statistics">custom statistics</a>. Custom statistics are reported similar to the build status output above:</p>

<div class="codebox"><div class="codeheader"><span>powershell</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb22733'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb22733','cb34867'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="powershell" id="cb22733" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">Write-Host &quot;##teamcity[buildStatisticValue key='buildWarnings' value='$count']&quot;</li></ol></div><div id="cb34867" style="display: none; color: red;"></div></div></div>

<p>Adding a <a href="http://confluence.jetbrains.net/display/TCD7/Custom+Chart" title="TeamCity documentation - Custom Statistics Charts">custom chart</a> requires us to dig into the configurations of TeamCity. I'm going to add a chart that will be displayed for any build that provides the warning count number above, so I'll open the <code class="codespan">[teamCity data dir]/config/main-config.xml</code> file and add the following section:</p>

<div class="codebox"><div class="codeheader"><span>powershell</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb27795'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb27795','cb5714'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="powershell" id="cb27795" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">&lt;graph title=&quot;Build Warnings&quot; hideFilters=&quot;showFailed&quot; seriesTitle=&quot;Warning&quot; format=&quot;&quot;&gt;</li><li style="" class="li2">&nbsp; &nbsp; &lt;valueType key=&quot;buildWarnings&quot; title=&quot;Warnings&quot;/&gt;</li><li style="" class="li1">&lt;/graph&gt;</li></ol></div><div id="cb5714" style="display: none; color: red;"></div></div></div>

<p>This will add a chart to the Statistics tab of the build. After a few builds this is what I have:</p>

<div style="text-align: center; font-size: 90%; color: #666666; margin: .5em">
<img src="http://tiernok.com/LTDBlog/TeamCityBuildWarnings/WarningChart.png" alt="Build Warning Statistics" style="border: 1px solid #666666;" /><br />
Build Warning Statistics
</div>

<p>It probably would look better if I hadn't built with the same number of warnings each time, but you get the point. The mouse hover works just like the built-in charts, linking to the run status for the individual point.</p>

<p>Ok, getting better, but I think we can take it one step further. </p>

<h2>Adding a Custom Build Warnings Tab</h2>
<p>So far we have improved methods of seeing the warning count and watching how it changes over time, but the actual list still leaves something to be desired. Luckily, TeamCity supports <a href="http://confluence.jetbrains.net/display/TCD3/Including+Third-Party+Reports+in+the+Build+Results#IncludingThird-PartyReportsintheBuildResults-Tabs" title="TeamCity documentation: Including third-party reports as the build-results tabs">custom report tabs</a> in the Build Results. This gives us an easily accessible place to put the warnings and, since it uses HTML, better formatting options than the text file.</p>

<p>First I need to update the powershell script to output the HTML file. TeamCity will be picking up an entire folder for the report tab, so I could add some external CSS or image files for my report, but I'll leave that for another day.</p>

<div class="codebox"><div class="codeheader"><span>powershell</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb23304'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb23304','cb4114'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="powershell" id="cb23304" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"># html report output</li><li style="" class="li2">$check = Test-Path -PathType Container BuildWarningReport</li><li style="" class="li1">if($check -eq $false){</li><li style="" class="li2">&nbsp; &nbsp; New-Item 'BuildWarningReport' -type Directory</li><li style="" class="li1">}</li><li style="" class="li2">$stream = [System.IO.StreamWriter] &quot;BuildWarningReport/index.html&quot;</li><li style="" class="li1">$stream.WriteLine(&quot;&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;$count Build Warnings&lt;/h1&gt;&quot;)</li><li style="" class="li2">$stream.WriteLine(&quot;&lt;ul&gt;&quot;)</li><li style="" class="li1">$warnings | % { $stream.WriteLine(&quot;&lt;li&gt;$_&lt;/li&gt;&quot;) }</li><li style="" class="li2">$stream.WriteLine(&quot;&lt;/ul&gt;&quot;)</li><li style="" class="li1">$stream.WriteLine(&quot;&lt;/body&gt;&lt;/html&gt;&quot;)</li><li style="" class="li2">$stream.Close()</li></ol></div><div id="cb4114" style="display: none; color: red;"></div></div></div>

<p>I've added HTML output to the script with a hardcoded output location that ensures the report directory exists before writing the index.html page. I've hardcoded this value to reduce the amount of thinking 'll need to do as I add this to other projects (keeps it consistent from output name to artifact setting to report tab configuration).</p>

<p>The next step is to configure the project to capture the folder as an artifact:</p>

<div style="text-align: center; font-size: 90%; color: #666666; margin: .5em">
<img src="http://tiernok.com/LTDBlog/TeamCityBuildWarnings/ArtifactConfig_Report.png" alt="Artifact configuration" style="border: 1px solid #666666;" /><br />
Artifact configuration
</div>

<p>Then the last step is to modify the TeamCity configuration to recognize that when I output archives like that, I want to treat them as a report. To do this I add the following chunk of XML to my <code class="codespan">[TeamCity data directory]/config/main-config.xml</code> file (per the documentation link above):</p>

<div class="codebox"><div class="codeheader"><span>xml</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb46329'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb46329','cb74417'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="xml" id="cb46329" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;report-tab</span> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">&quot;Build Warnings&quot;</span> <span style="color: #000066;">basePath</span>=<span style="color: #ff0000;">&quot;BuildWarningReport&quot;</span> <span style="color: #000066;">startPage</span>=<span style="color: #ff0000;">&quot;index.html&quot;</span> <span style="font-weight: bold; color: black;">/&gt;</span></span></li></ol></div><div id="cb74417" style="display: none; color: red;"></div></div></div>

<p>And there we go, the custom report tab is available in the build results:</p>

<div style="text-align: center; font-size: 90%; color: #666666; margin: .5em">
<img src="http://tiernok.com/LTDBlog/TeamCityBuildWarnings/WarningsTab.png" alt="Build Warnings tab in Run Results" style="border: 1px solid #666666;" /><br />
Build Warnings tab in Run Results
</div>

<p>Which takes us from no visibility into our warnings, to five different methods of viewing the information.</p>

<h2>Wrap-up</h2>
<p>From having to Ctrl+F through the build log all the way to plugin-level output in a few easy steps. After setting this up one time, the only pieces that needed to be repeated for additional builds are the addition of the /logger parameter for MSBuild and the powershell build step to extract the results, and capturing the artifact for the HTML page. All of the output is either built in to the script or applies to the whole server and is displayed whenever the statistics or archive are present in a build.</p>

<p>Here is the finished script:</p>
<div class="codebox"><div class="codeheader"><span>powershell</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb82208'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb82208','cb42017'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="powershell" id="cb82208" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">Param(</li><li style="" class="li2">&nbsp; &nbsp; [parameter(Mandatory=$true)]</li><li style="" class="li1">&nbsp; &nbsp; [alias(&quot;f&quot;)]</li><li style="" class="li2">&nbsp; &nbsp; $FilePath,</li><li style="" class="li1">&nbsp; &nbsp; [parameter()]</li><li style="" class="li2">&nbsp; &nbsp; [alias(&quot;o&quot;)]</li><li style="" class="li1">&nbsp; &nbsp; $RawOutputPath</li><li style="" class="li2">)</li><li style="" class="li1">&nbsp;</li><li style="" class="li2">$warnings = @(Get-Content -ErrorAction Stop $FilePath | &nbsp; &nbsp; &nbsp; # Get the file content</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Where {$_ -match '^.*warning CS.*$'} | &nbsp; &nbsp; &nbsp; &nbsp;# Extract lines that match warnings</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; %{ $_.trim() -replace &quot;^\s*\d+&gt;&quot;,&quot;&quot; &nbsp;} | &nbsp; &nbsp; &nbsp;# Strip out any project number and caret prefixes</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sort-object | Get-Unique -asString) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # remove duplicates by sorting and filtering for unique strings</li><li style="" class="li2">&nbsp;</li><li style="" class="li1">$count = $warnings.Count</li><li style="" class="li2">&nbsp;</li><li style="" class="li1"># raw output</li><li style="" class="li2">Write-Host &quot;MSBuild Warnings - $count warnings ===================================================&quot;</li><li style="" class="li1">$warnings | % { Write-Host &quot; * $_&quot; }</li><li style="" class="li2">&nbsp;</li><li style="" class="li1">#TeamCity output</li><li style="" class="li2">Write-Host &quot;##teamcity[buildStatus text='{build.status.text}, Build warnings: $count']&quot;</li><li style="" class="li1">Write-Host &quot;##teamcity[buildStatisticValue key='buildWarnings' value='$count']&quot;</li><li style="" class="li2">&nbsp;</li><li style="" class="li1"># file output</li><li style="" class="li2">if($RawOutputPath){</li><li style="" class="li1">&nbsp; &nbsp; $stream = [System.IO.StreamWriter] $RawOutputPath</li><li style="" class="li2">&nbsp; &nbsp; $stream.WriteLine(&quot;Build Warnings&quot;)</li><li style="" class="li1">&nbsp; &nbsp; $stream.WriteLine(&quot;====================================&quot;)</li><li style="" class="li2">&nbsp; &nbsp; $stream.WriteLine(&quot;&quot;)</li><li style="" class="li1">&nbsp; &nbsp; $warnings | % { $stream.WriteLine(&quot; * $_&quot;) }</li><li style="" class="li2">&nbsp; &nbsp; $stream.Close()</li><li style="" class="li1">}</li><li style="" class="li2">&nbsp;</li><li style="" class="li1"># html report output</li><li style="" class="li2">$check = Test-Path -PathType Container BuildWarningReport</li><li style="" class="li1">if($check -eq $false){</li><li style="" class="li2">&nbsp; &nbsp; New-Item 'BuildWarningReport' -type Directory</li><li style="" class="li1">}</li><li style="" class="li2">$stream = [System.IO.StreamWriter] &quot;BuildWarningReport/index.html&quot;</li><li style="" class="li1">$stream.WriteLine(&quot;&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;$count Build Warnings&lt;/h1&gt;&quot;)</li><li style="" class="li2">$stream.WriteLine(&quot;&lt;ul&gt;&quot;)</li><li style="" class="li1">$warnings | % { $stream.WriteLine(&quot;&lt;li&gt;$_&lt;/li&gt;&quot;) }</li><li style="" class="li2">$stream.WriteLine(&quot;&lt;/ul&gt;&quot;)</li><li style="" class="li1">$stream.WriteLine(&quot;&lt;/body&gt;&lt;/html&gt;&quot;)</li><li style="" class="li2">$stream.Close()</li></ol></div><div id="cb42017" style="display: none; color: red;"></div></div></div>

<p>To recap, we started with some warning messages randomly scattered across the build log. We ended with the warning count automatically showing in the build status on the dashboard, a nice chart of the number over time, and three different ways to view the detailed list. I hope this proves useful to others as well, now I have to go and fix the sample warnings I added before I forget about them. <img src="http://blogs.lessthandot.com/rsc/smilies/icon_smile.gif" title=":)" alt=":)" class="middle" width="15" height="15" /></p><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/EnterpriseDev/application-lifecycle-management/displaying-net-build-warnings-in">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/EnterpriseDev/application-lifecycle-management/displaying-net-build-warnings-in#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/EnterpriseDev/?tempskin=_rss2&#38;disp=comments&#38;p=2023</wfw:commentRss>
		</item>
				<item>
			<title>Scala: The difference between val and var</title>
			<link>http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/scala-the-difference-between-val</link>
			<pubDate>Sat, 12 Jan 2013 10:25:00 +0000</pubDate>			<dc:creator>SQLDenis</dc:creator>
			<category domain="main">Java EE</category>
<category domain="alt">Application Lifecycle Management</category>			<guid isPermaLink="false">2020@http://blogs.lessthandot.com/</guid>
						<description>&lt;p&gt;This is a short Scala post to explain what the difference is between val and var. I was showing some Scala code to a co-worker this past week and he was asking what the difference was between val and var. It is quite simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;val&lt;/strong&gt; defines a fixed value, it is a read only variable&lt;br /&gt;
&lt;strong&gt;var&lt;/strong&gt; defines a mutable variable, this variable can be modified&lt;/p&gt;

&lt;p&gt;In Java you would use final to create a variable which would be read only, this is the same as val in Scala. &lt;/p&gt;

&lt;p&gt;Let&#039;s look at some very simple Scala code.&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;scala&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;scala&quot; id=&quot;cb61760&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;object&lt;/span&gt;&lt;/a&gt; Test &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;def&lt;/span&gt;&lt;/a&gt; main&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;args: Array&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#91;&lt;/span&gt;String&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt; = println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;done with main&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;var&lt;/span&gt;&lt;/a&gt; Test1 =&lt;span style=&quot;color: #F78811;&quot;&gt;5&lt;/span&gt;&lt;br /&gt;println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;Test1 &amp;quot;&lt;/span&gt; + Test1&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;Test1 = &lt;span style=&quot;color: #F78811;&quot;&gt;6&lt;/span&gt;&lt;br /&gt;println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;Test1 &amp;quot;&lt;/span&gt; + Test1&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb78434&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Running the code above will give the following output&lt;br /&gt;
Test1 5&lt;br /&gt;
Test1 6&lt;br /&gt;
done with main&lt;/p&gt;


&lt;p&gt;If you are trying to use val, you will get an error, change var to val and see if you can compile the code&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;scala&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;scala&quot; id=&quot;cb95779&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;object&lt;/span&gt;&lt;/a&gt; Test &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;def&lt;/span&gt;&lt;/a&gt; main&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;args: Array&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#91;&lt;/span&gt;String&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt; = println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;done with main&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;val&lt;/span&gt;&lt;/a&gt; Test1 =&lt;span style=&quot;color: #F78811;&quot;&gt;5&lt;/span&gt;&lt;br /&gt;println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;Test1 &amp;quot;&lt;/span&gt; + Test1&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;Test1 = &lt;span style=&quot;color: #F78811;&quot;&gt;6&lt;/span&gt;&lt;br /&gt;println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;Test1 &amp;quot;&lt;/span&gt; + Test1&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb66128&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Here is the error, the code won&#039;t even compile&lt;/p&gt;
&lt;pre&gt;Description		Resource	Path		Location	Type
reassignment to val	Test.scala	/ScalaTemp/src	line 8		Scala Problem
&lt;/pre&gt;

&lt;p&gt;So as you can see, val is read only, while with var you can modify the variable.&lt;/p&gt;

&lt;p&gt;If you want to play around with Scala, take a look at &lt;a href=&quot;http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/installing-scala-2-10-on&quot;&gt;Installing Scala 2.10 on Eclipse Juno&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/scala-the-difference-between-val&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>This is a short Scala post to explain what the difference is between val and var. I was showing some Scala code to a co-worker this past week and he was asking what the difference was between val and var. It is quite simple:</p>

<p><strong>val</strong> defines a fixed value, it is a read only variable<br />
<strong>var</strong> defines a mutable variable, this variable can be modified</p>

<p>In Java you would use final to create a variable which would be read only, this is the same as val in Scala. </p>

<p>Let's look at some very simple Scala code.</p>

<div class="codebox"><div class="codeheader"><span>scala</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb42748'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb42748','cb13979'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="scala" id="cb42748" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"><a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">object</span></a> Test <span style="color: #F78811;">&#123;</span></li><li style="" class="li2">&nbsp;</li><li style="" class="li1">&nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">def</span></a> main<span style="color: #F78811;">&#40;</span>args: Array<span style="color: #F78811;">&#91;</span>String<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#41;</span> = println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;done with main&quot;</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp; </li><li style="" class="li1"><a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">var</span></a> Test1 =<span style="color: #F78811;">5</span></li><li style="" class="li2">println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;Test1 &quot;</span> + Test1<span style="color: #F78811;">&#41;</span></li><li style="" class="li1">&nbsp; </li><li style="" class="li2">Test1 = <span style="color: #F78811;">6</span></li><li style="" class="li1">println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;Test1 &quot;</span> + Test1<span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp;</li><li style="" class="li1"><span style="color: #F78811;">&#125;</span></li></ol></div><div id="cb13979" style="display: none; color: red;"></div></div></div>

<p>Running the code above will give the following output<br />
Test1 5<br />
Test1 6<br />
done with main</p>


<p>If you are trying to use val, you will get an error, change var to val and see if you can compile the code</p>

<div class="codebox"><div class="codeheader"><span>scala</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb38499'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb38499','cb23856'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="scala" id="cb38499" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"><a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">object</span></a> Test <span style="color: #F78811;">&#123;</span></li><li style="" class="li2">&nbsp;</li><li style="" class="li1">&nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">def</span></a> main<span style="color: #F78811;">&#40;</span>args: Array<span style="color: #F78811;">&#91;</span>String<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#41;</span> = println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;done with main&quot;</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp; </li><li style="" class="li1"><a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">val</span></a> Test1 =<span style="color: #F78811;">5</span></li><li style="" class="li2">println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;Test1 &quot;</span> + Test1<span style="color: #F78811;">&#41;</span></li><li style="" class="li1">&nbsp; </li><li style="" class="li2">Test1 = <span style="color: #F78811;">6</span></li><li style="" class="li1">println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;Test1 &quot;</span> + Test1<span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp;</li><li style="" class="li1"><span style="color: #F78811;">&#125;</span></li></ol></div><div id="cb23856" style="display: none; color: red;"></div></div></div>

<p>Here is the error, the code won't even compile</p>
<pre>Description		Resource	Path		Location	Type
reassignment to val	Test.scala	/ScalaTemp/src	line 8		Scala Problem
</pre>

<p>So as you can see, val is read only, while with var you can modify the variable.</p>

<p>If you want to play around with Scala, take a look at <a href="http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/installing-scala-2-10-on">Installing Scala 2.10 on Eclipse Juno</a></p><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/scala-the-difference-between-val">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/scala-the-difference-between-val#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/EnterpriseDev/?tempskin=_rss2&#38;disp=comments&#38;p=2020</wfw:commentRss>
		</item>
				<item>
			<title>Review of The Well-Grounded Java Developer</title>
			<link>http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/review-of-the-well-grounded</link>
			<pubDate>Wed, 09 Jan 2013 15:12:00 +0000</pubDate>			<dc:creator>SQLDenis</dc:creator>
			<category domain="main">Java EE</category>
<category domain="alt">Application Lifecycle Management</category>			<guid isPermaLink="false">2018@http://blogs.lessthandot.com/</guid>
						<description>&lt;p&gt;This is a review of &lt;a href=&quot;http://www.amazon.com/gp/product/1617290068/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=sql08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1617290068&quot;&gt;The Well-Grounded Java Developer, Vital techniques of Java 7 and polyglot programming&lt;/a&gt;. Written by Benjamin J. Evans and Martijn Verburg. The book was published in July, 2012 and it contains 496 pages&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/evans_cover150.jpg?mtime=1357748948&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/evans_cover150.jpg?mtime=1357748948&quot; width=&quot;150&quot; height=&quot;188&quot; style=&quot;float:left;margin:0 5px 0 0;&quot; /&gt;&lt;/a&gt;Right from the start I want to say that this is an excellent book and I highly recommend it. One thing you do need to be aware about is that in order to use this book you need to know Java. If you don&#039;t know Java then this is not the book for you. This book is all about bringing you to the next level as a Java developer by showing you how to do continuous integration, dependency injection, testing, performance tuning, and more.  &lt;br /&gt;
This book even shows you how to use different languages that run on the JVM. The book is written in a easy and concise style, everything is very clear. I also love the annotations which are sprinkled throughout the book, they give some nice background information. While the chapters on Groovy, Scala and Clojure are not a complete reference for the language, they do provide enough material to form a nice foundation, now you can further explore the language on your own.&lt;/p&gt;

&lt;p&gt;The book is split up in four parts, I will list each part with the chapters within that part and will give a brief summary what the part is about&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 1 Developing with Java 7&lt;/strong&gt;&lt;br /&gt;
Chapter 1 Introducing Java 7&lt;br /&gt;
Chapter 2 New I/O&lt;/p&gt;

&lt;p&gt;This section shows you what was added in Java 7, for example you can now use strings in switch statements, try-with-resources(similar to a using statement in c#, it frees up the resources after it is done). The Java IO stuff has been rewritten and much easier to use, where you had to write a whole bunch of code before, you can now do the same in much less code. Some things that did not exist in Java in terms of IO but now does exist are explained as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 2 Vital techniques&lt;/strong&gt;&lt;br /&gt;
Chapter 3 Dependency Injection&lt;br /&gt;
Chapter 4 Modern concurrency&lt;br /&gt;
Chapter 5 Class files and bytecode&lt;br /&gt;
Chapter 6 Understanding performance tuning&lt;/p&gt;

&lt;p&gt;This part has a lot of stuff and as a Java developer you should really know how this stuff works if you want to get to the next level. Dependency Injection(DI) and inversion of control (IoC) are covered, Guice 3, the reference implementation for DI in Java is also covered. Concurrency before Java 5 and concurrency now is covered. Concurrency will be a must now that we have multi-CPU and multi-core everywhere, you better get your wits around it. There is a whole chapter on the class files itself and how they are loaded as well as what they compile into. These are fun details and will show you exactly what happens when you compile and execute a class. Evereybody&#039;s favorite subject performance tuning is covered in this part of the book as well.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Part 3 Polyglot programming on the JVM&lt;/strong&gt;&lt;br /&gt;
Chapter 7 Alternative JVM languages&lt;br /&gt;
Chapter 8 Groovy: Java&amp;#8217;s dynamic friend&lt;br /&gt;
Chapter 9 Scala: powerful and concise&lt;br /&gt;
Chapter 10 Clojure: safer programming&lt;/p&gt;

&lt;p&gt;This is a very interesting part of the book and I would suggest not to skip it. There are 3 type of languages covered in this part:&lt;br /&gt;
Groovy, a dynamic language&lt;br /&gt;
Scala, a functional language&lt;br /&gt;
Clojure, a Lisp for functional programming&lt;/p&gt;

&lt;p&gt;Take a look at these languages and you will be amazed how much Java boilerplate code you can eliminate by using these languages instead. Some of the functional is a little bit of a paradigm shift and you might need some time adjusting. You will also see how you can interoperate between these languages and Java.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 4 Crafting the polyglot project&lt;/strong&gt;&lt;br /&gt;
Chapter 11 Test-driven development&lt;br /&gt;
Chapter 12 Build and continuous integration&lt;br /&gt;
Chapter 13 Rapid web development&lt;br /&gt;
Chapter 14 Staying well-grounded&lt;/p&gt;

&lt;p&gt;The last part is all about automation and making your life easier. If you are a developer who still deploys stuff by using FTP to move JAR, EAR and WAR files, pay attention. Maven is covered as the build automation tool, Jenkins is the  continuous integration tool. In the Rapid web development chapter Grails is explored.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Let me just repeat again that I think this is an awesome book and as a Java developer you have to check it out. The one thing that is missing from the book is ORM, it is covered a little in the testing chapter but if you want to know about ORM, you will need to pick out some other book just for that.&lt;/p&gt;


&lt;p&gt;You can download the following chapters to get a feel for the book&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.manning.com/evans/TWGJD_sample_ch01.pdf&quot;&gt;Sample chapter 1&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.manning.com/evans/TWGJD_sample_ch04.pdf&quot;&gt;Sample chapter 4&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Head on over to Amazon for other reviews of &lt;a href=&quot;http://www.amazon.com/gp/product/1617290068/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=sql08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1617290068&quot;&gt;The Well-Grounded Java Developer, Vital techniques of Java 7 and polyglot programming&lt;/a&gt;&lt;br /&gt;
The site for the book can be found here: &lt;a href=&quot;http://www.manning.com/evans/&quot;&gt;http://www.manning.com/evans/&lt;/a&gt; &lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;Below is the complete table of contents so that you have a little more details about each chapter.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Part 1 Developing with Java 7&lt;br /&gt;
Chapter 1 Introducing Java 7&lt;br /&gt;
&lt;/strong&gt;The language and the platform&lt;br /&gt;
Small is beautiful&amp;#8212;Project Coin&lt;br /&gt;
The changes in Project Coin&lt;br /&gt;
Summary&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chapter 2 New I/O&lt;/strong&gt;&lt;br /&gt;
Java I/O&amp;#8212;a history&lt;br /&gt;
Path&amp;#8212;a foundation of file-based I/O&lt;br /&gt;
Dealing with directories and directory trees&lt;br /&gt;
Filesystem I/O with NIO.2&lt;br /&gt;
Asynchronous I/O operations&lt;br /&gt;
Tidying up Socket-Channel functionality&lt;br /&gt;
Summary&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Part 2 Vital techniques&lt;br /&gt;
Chapter 3 Dependency Injection&lt;/strong&gt;&lt;br /&gt;
Inject some knowledge&amp;#8212;understanding IoC and DI&lt;br /&gt;
Standardized DI in Java&lt;br /&gt;
Guice 3&amp;#8212;the reference implementation for DI in Java&lt;br /&gt;
Summary&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chapter 4 Modern concurrency&lt;/strong&gt;&lt;br /&gt;
Concurrency theory&amp;#8212;a primer&lt;br /&gt;
Block-structured concurrency (pre-Java 5)&lt;br /&gt;
Building blocks for modern concurrent applications&lt;br /&gt;
Controlling execution&lt;br /&gt;
The fork/join framework&lt;br /&gt;
The Java Memory Model (JMM)&lt;br /&gt;
Summary&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chapter 5 Class files and bytecode&lt;/strong&gt;&lt;br /&gt;
Classloading and class objects&lt;br /&gt;
Using method handles&lt;br /&gt;
Examining class files&lt;br /&gt;
Bytecode&lt;br /&gt;
Invokedynamic&lt;br /&gt;
Summary&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chapter 6 Understanding performance tuning&lt;/strong&gt;&lt;br /&gt;
Performance terminology&amp;#8212;some basic definitions&lt;br /&gt;
A pragmatic approach to performance analysis&lt;br /&gt;
What went wrong? Why we have to care&lt;br /&gt;
A question of time&amp;#8212;from the hardware up&lt;br /&gt;
Garbage collection&lt;br /&gt;
JIT compilation with HotSpot&lt;br /&gt;
Summary&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Part 3 Polyglot programming on the JVM&lt;br /&gt;
Chapter 7 Alternative JVM languages&lt;br /&gt;
&lt;/strong&gt;Java too clumsy? Them&amp;#8217;s fighting words!&lt;br /&gt;
Language zoology&lt;br /&gt;
Polyglot programming on the JVM&lt;br /&gt;
How to choose a non-Java language for your project&lt;br /&gt;
How the JVM supports alternative languages&lt;br /&gt;
Summary&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chapter 8 Groovy: Java&amp;#8217;s dynamic friend&lt;/strong&gt;&lt;br /&gt;
Getting started with Groovy&lt;br /&gt;
Groovy 101&amp;#8212;syntax and semantics&lt;br /&gt;
Differences from Java&amp;#8212;traps for new players&lt;br /&gt;
Groovy features not (yet) in Java&lt;br /&gt;
Interoperating between Groovy and Java&lt;br /&gt;
Summary&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chapter 9 Scala: powerful and concise&lt;/strong&gt;&lt;br /&gt;
A quick tour of Scala&lt;br /&gt;
Is Scala right for my project?&lt;br /&gt;
Making code beautiful again with Scala&lt;br /&gt;
Scala&amp;#8217;s object model&amp;#8212;similar but different&lt;br /&gt;
Data structures and collections&lt;br /&gt;
Introduction to actors&lt;br /&gt;
Summary&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chapter 10 Clojure: safer programming&lt;/strong&gt;&lt;br /&gt;
Introducing Clojure&lt;br /&gt;
Looking for Clojure&amp;#8212;syntax and semantics&lt;br /&gt;
Working with functions and loops in Clojure&lt;br /&gt;
Introducing Clojure sequences&lt;br /&gt;
Interoperating between Clojure and Java&lt;br /&gt;
Concurrent Clojure&lt;br /&gt;
Summary&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 4 Crafting the polyglot project&lt;br /&gt;
Chapter 11 Test-driven development&lt;br /&gt;
&lt;/strong&gt;TDD in a nutshell&lt;br /&gt;
Test doubles&lt;br /&gt;
Introducing ScalaTest&lt;br /&gt;
Summary&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chapter 12 Build and continuous integration&lt;/strong&gt;&lt;br /&gt;
Getting started with Maven 3&lt;br /&gt;
Maven 3&amp;#8212;a quick-start project&lt;br /&gt;
Maven 3&amp;#8212;the Java7developer build&lt;br /&gt;
Jenkins&amp;#8212;serving your CI needs&lt;br /&gt;
Code metrics with Maven and Jenkins&lt;br /&gt;
Leiningen&lt;br /&gt;
Summary&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chapter 13 Rapid web development&lt;/strong&gt;&lt;br /&gt;
The problem with Java-based web frameworks&lt;br /&gt;
Criteria in selecting a web framework&lt;br /&gt;
Getting started with Grails&lt;br /&gt;
Grails quick-start project&lt;br /&gt;
Further Grails exploration&lt;br /&gt;
Getting started with Compojure&lt;br /&gt;
A sample Compojure project&amp;#8212;&amp;#8220;Am I an Otter or Not?&amp;#8221;&lt;br /&gt;
Summary&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chapter 14 Staying well-grounded&lt;/strong&gt;&lt;br /&gt;
What to expect in Java 8&lt;br /&gt;
Polyglot programming&lt;br /&gt;
Future concurrency trends&lt;br /&gt;
New directions in the JVM&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/review-of-the-well-grounded&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>This is a review of <a href="http://www.amazon.com/gp/product/1617290068/ref=as_li_ss_tl?ie=UTF8&amp;tag=sql08-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1617290068">The Well-Grounded Java Developer, Vital techniques of Java 7 and polyglot programming</a>. Written by Benjamin J. Evans and Martijn Verburg. The book was published in July, 2012 and it contains 496 pages</p>

<p><a href="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/evans_cover150.jpg?mtime=1357748948"><img alt="" src="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/evans_cover150.jpg?mtime=1357748948" width="150" height="188" style="float:left;margin:0 5px 0 0;" /></a>Right from the start I want to say that this is an excellent book and I highly recommend it. One thing you do need to be aware about is that in order to use this book you need to know Java. If you don't know Java then this is not the book for you. This book is all about bringing you to the next level as a Java developer by showing you how to do continuous integration, dependency injection, testing, performance tuning, and more.  <br />
This book even shows you how to use different languages that run on the JVM. The book is written in a easy and concise style, everything is very clear. I also love the annotations which are sprinkled throughout the book, they give some nice background information. While the chapters on Groovy, Scala and Clojure are not a complete reference for the language, they do provide enough material to form a nice foundation, now you can further explore the language on your own.</p>

<p>The book is split up in four parts, I will list each part with the chapters within that part and will give a brief summary what the part is about</p>

<p><strong>Part 1 Developing with Java 7</strong><br />
Chapter 1 Introducing Java 7<br />
Chapter 2 New I/O</p>

<p>This section shows you what was added in Java 7, for example you can now use strings in switch statements, try-with-resources(similar to a using statement in c#, it frees up the resources after it is done). The Java IO stuff has been rewritten and much easier to use, where you had to write a whole bunch of code before, you can now do the same in much less code. Some things that did not exist in Java in terms of IO but now does exist are explained as well.</p>

<p><strong>Part 2 Vital techniques</strong><br />
Chapter 3 Dependency Injection<br />
Chapter 4 Modern concurrency<br />
Chapter 5 Class files and bytecode<br />
Chapter 6 Understanding performance tuning</p>

<p>This part has a lot of stuff and as a Java developer you should really know how this stuff works if you want to get to the next level. Dependency Injection(DI) and inversion of control (IoC) are covered, Guice 3, the reference implementation for DI in Java is also covered. Concurrency before Java 5 and concurrency now is covered. Concurrency will be a must now that we have multi-CPU and multi-core everywhere, you better get your wits around it. There is a whole chapter on the class files itself and how they are loaded as well as what they compile into. These are fun details and will show you exactly what happens when you compile and execute a class. Evereybody's favorite subject performance tuning is covered in this part of the book as well.</p>


<p><strong>Part 3 Polyglot programming on the JVM</strong><br />
Chapter 7 Alternative JVM languages<br />
Chapter 8 Groovy: Java&#8217;s dynamic friend<br />
Chapter 9 Scala: powerful and concise<br />
Chapter 10 Clojure: safer programming</p>

<p>This is a very interesting part of the book and I would suggest not to skip it. There are 3 type of languages covered in this part:<br />
Groovy, a dynamic language<br />
Scala, a functional language<br />
Clojure, a Lisp for functional programming</p>

<p>Take a look at these languages and you will be amazed how much Java boilerplate code you can eliminate by using these languages instead. Some of the functional is a little bit of a paradigm shift and you might need some time adjusting. You will also see how you can interoperate between these languages and Java.</p>

<p><strong>Part 4 Crafting the polyglot project</strong><br />
Chapter 11 Test-driven development<br />
Chapter 12 Build and continuous integration<br />
Chapter 13 Rapid web development<br />
Chapter 14 Staying well-grounded</p>

<p>The last part is all about automation and making your life easier. If you are a developer who still deploys stuff by using FTP to move JAR, EAR and WAR files, pay attention. Maven is covered as the build automation tool, Jenkins is the  continuous integration tool. In the Rapid web development chapter Grails is explored.</p>
<hr />
<p>Let me just repeat again that I think this is an awesome book and as a Java developer you have to check it out. The one thing that is missing from the book is ORM, it is covered a little in the testing chapter but if you want to know about ORM, you will need to pick out some other book just for that.</p>


<p>You can download the following chapters to get a feel for the book</p>

<p><a href="http://www.manning.com/evans/TWGJD_sample_ch01.pdf">Sample chapter 1</a><br />
<a href="http://www.manning.com/evans/TWGJD_sample_ch04.pdf">Sample chapter 4</a></p>


<p>Head on over to Amazon for other reviews of <a href="http://www.amazon.com/gp/product/1617290068/ref=as_li_ss_tl?ie=UTF8&amp;tag=sql08-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1617290068">The Well-Grounded Java Developer, Vital techniques of Java 7 and polyglot programming</a><br />
The site for the book can be found here: <a href="http://www.manning.com/evans/">http://www.manning.com/evans/</a> </p>

<hr />
<p>Below is the complete table of contents so that you have a little more details about each chapter.</p>


<p><strong>Part 1 Developing with Java 7<br />
Chapter 1 Introducing Java 7<br />
</strong>The language and the platform<br />
Small is beautiful&#8212;Project Coin<br />
The changes in Project Coin<br />
Summary</p>

<p><strong>Chapter 2 New I/O</strong><br />
Java I/O&#8212;a history<br />
Path&#8212;a foundation of file-based I/O<br />
Dealing with directories and directory trees<br />
Filesystem I/O with NIO.2<br />
Asynchronous I/O operations<br />
Tidying up Socket-Channel functionality<br />
Summary</p>


<p><strong>Part 2 Vital techniques<br />
Chapter 3 Dependency Injection</strong><br />
Inject some knowledge&#8212;understanding IoC and DI<br />
Standardized DI in Java<br />
Guice 3&#8212;the reference implementation for DI in Java<br />
Summary</p>

<p><strong>Chapter 4 Modern concurrency</strong><br />
Concurrency theory&#8212;a primer<br />
Block-structured concurrency (pre-Java 5)<br />
Building blocks for modern concurrent applications<br />
Controlling execution<br />
The fork/join framework<br />
The Java Memory Model (JMM)<br />
Summary</p>

<p><strong>Chapter 5 Class files and bytecode</strong><br />
Classloading and class objects<br />
Using method handles<br />
Examining class files<br />
Bytecode<br />
Invokedynamic<br />
Summary</p>

<p><strong>Chapter 6 Understanding performance tuning</strong><br />
Performance terminology&#8212;some basic definitions<br />
A pragmatic approach to performance analysis<br />
What went wrong? Why we have to care<br />
A question of time&#8212;from the hardware up<br />
Garbage collection<br />
JIT compilation with HotSpot<br />
Summary</p>


<p><strong>Part 3 Polyglot programming on the JVM<br />
Chapter 7 Alternative JVM languages<br />
</strong>Java too clumsy? Them&#8217;s fighting words!<br />
Language zoology<br />
Polyglot programming on the JVM<br />
How to choose a non-Java language for your project<br />
How the JVM supports alternative languages<br />
Summary</p>

<p><strong>Chapter 8 Groovy: Java&#8217;s dynamic friend</strong><br />
Getting started with Groovy<br />
Groovy 101&#8212;syntax and semantics<br />
Differences from Java&#8212;traps for new players<br />
Groovy features not (yet) in Java<br />
Interoperating between Groovy and Java<br />
Summary</p>

<p><strong>Chapter 9 Scala: powerful and concise</strong><br />
A quick tour of Scala<br />
Is Scala right for my project?<br />
Making code beautiful again with Scala<br />
Scala&#8217;s object model&#8212;similar but different<br />
Data structures and collections<br />
Introduction to actors<br />
Summary</p>

<p><strong>Chapter 10 Clojure: safer programming</strong><br />
Introducing Clojure<br />
Looking for Clojure&#8212;syntax and semantics<br />
Working with functions and loops in Clojure<br />
Introducing Clojure sequences<br />
Interoperating between Clojure and Java<br />
Concurrent Clojure<br />
Summary</p>

<p><strong>Part 4 Crafting the polyglot project<br />
Chapter 11 Test-driven development<br />
</strong>TDD in a nutshell<br />
Test doubles<br />
Introducing ScalaTest<br />
Summary</p>

<p><strong>Chapter 12 Build and continuous integration</strong><br />
Getting started with Maven 3<br />
Maven 3&#8212;a quick-start project<br />
Maven 3&#8212;the Java7developer build<br />
Jenkins&#8212;serving your CI needs<br />
Code metrics with Maven and Jenkins<br />
Leiningen<br />
Summary</p>

<p><strong>Chapter 13 Rapid web development</strong><br />
The problem with Java-based web frameworks<br />
Criteria in selecting a web framework<br />
Getting started with Grails<br />
Grails quick-start project<br />
Further Grails exploration<br />
Getting started with Compojure<br />
A sample Compojure project&#8212;&#8220;Am I an Otter or Not?&#8221;<br />
Summary</p>

<p><strong>Chapter 14 Staying well-grounded</strong><br />
What to expect in Java 8<br />
Polyglot programming<br />
Future concurrency trends<br />
New directions in the JVM</p><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/review-of-the-well-grounded">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/review-of-the-well-grounded#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/EnterpriseDev/?tempskin=_rss2&#38;disp=comments&#38;p=2018</wfw:commentRss>
		</item>
				<item>
			<title>Installing Scala 2.10 on Eclipse Juno</title>
			<link>http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/installing-scala-2-10-on</link>
			<pubDate>Sat, 05 Jan 2013 13:46:00 +0000</pubDate>			<dc:creator>SQLDenis</dc:creator>
			<category domain="main">Java EE</category>
<category domain="alt">Application Lifecycle Management</category>			<guid isPermaLink="false">2007@http://blogs.lessthandot.com/</guid>
						<description>&lt;p&gt;As part of my &lt;a href=&quot;http://blogs.lessthandot.com/index.php/ITProfessionals/ProfessionalDevelopment/ah-yes-those-pesky-resolutions&quot;&gt;resolutions for the year&lt;/a&gt; I said I would write more blog posts and also get into different technology. I decided to take a look at Scala. Well it turns out Scala 2.10 was released yesterday. But first what is Scala anyway? From the Scala site:  &lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Scala is a general purpose programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages, enabling Java and other programmers to be more productive. Code sizes are typically reduced by a factor of two to three when compared to an equivalent Java application.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Scala is an object oriented, functional, statically typed language. You could probably compare it to F# if you are a .NET programmer.&lt;/p&gt;

&lt;p&gt;The first thing you have to do is downloading version 2.10 of Scala, you can download that version here: &lt;a href=&quot;http://www.scala-lang.org/downloads&quot;&gt;http://www.scala-lang.org/downloads&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After it is downloaded and installed, it is time to get the Eclipse plugin for Scala 2.10&lt;/p&gt;

&lt;p&gt;The way you do this is you click on Help followed by Install New Software... from the menu in Eclipse&lt;/p&gt;


&lt;div class=&quot;image_block&quot;&gt;&lt;a href=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno2.PNG?mtime=1357398056&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno2.PNG?mtime=1357398056&quot; width=&quot;552&quot; height=&quot;169&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Click on the Add button&lt;/p&gt;

&lt;div class=&quot;image_block&quot;&gt;&lt;a href=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno3.PNG?mtime=1357398065&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno3.PNG?mtime=1357398065&quot; width=&quot;476&quot; height=&quot;177&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;For Eclipse Juno you need to use the following URL in the location box &lt;a href=&quot;http://download.scala-ide.org/sdk/e38/scala210/dev/site/&quot;&gt;http://download.scala-ide.org/sdk/e38/scala210/dev/site/&lt;/a&gt; &lt;br /&gt;
For Eclipse Indigo use the following URL &lt;a href=&quot;http://download.scala-ide.org/sdk/e37/scala210/dev/site/&quot;&gt;http://download.scala-ide.org/sdk/e37/scala210/dev/site/&lt;/a&gt;  &lt;br /&gt;
Give a name for the repository, I named mine Scala 10 for Eclipse Juno. Hit Ok&lt;/p&gt;



&lt;div class=&quot;image_block&quot;&gt;&lt;a href=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno4.PNG?mtime=1357398076&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno4.PNG?mtime=1357398076&quot; width=&quot;300&quot; height=&quot;165&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Hit next&lt;/p&gt;

&lt;p&gt;On the Install Details form you will see Scala IDE for Eclipse&lt;br /&gt;
You can expand it to reveal the following&lt;/p&gt;

&lt;div class=&quot;image_block&quot;&gt;&lt;a href=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno5.PNG?mtime=1357398089&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno5.PNG?mtime=1357398089&quot; width=&quot;352&quot; height=&quot;152&quot; /&gt;&lt;/a&gt;&lt;/div&gt;


&lt;p&gt;Hit next to accept the license, hit finish.&lt;/p&gt;

&lt;p&gt;Now Eclipse will ask you to restart. After Eclipse is restarted it is time to create our first Scala application&lt;br /&gt;
From the menu go to File and then select New Project. Navigate to Scala Wizards and select Scala Project&lt;/p&gt;

&lt;div class=&quot;image_block&quot;&gt;&lt;a href=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno6.PNG?mtime=1357398099&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno6.PNG?mtime=1357398099&quot; width=&quot;562&quot; height=&quot;361&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Now that the project is created let&#039;s create a simple object&lt;/p&gt;



&lt;p&gt;Right click on the Scala Project from the package Explorer and select New--&gt; Scala Object&lt;/p&gt;

&lt;div class=&quot;image_block&quot;&gt;&lt;a href=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno7.PNG?mtime=1357398110&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno7.PNG?mtime=1357398110&quot; width=&quot;510&quot; height=&quot;573&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Give it a name and check &lt;em&gt;public static void main&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You should have something like this&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;scala&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;scala&quot; id=&quot;cb79086&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;object&lt;/span&gt;&lt;/a&gt; Test2 &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;def&lt;/span&gt;&lt;/a&gt; main&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;args: Array&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#91;&lt;/span&gt;String&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;: Unit = &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb72091&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Let&#039;s make it more interesting by generating some output&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;scala&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;scala&quot; id=&quot;cb46899&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;object&lt;/span&gt;&lt;/a&gt; Test2 &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;def&lt;/span&gt;&lt;/a&gt; main&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;args: Array&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#91;&lt;/span&gt;String&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;: Unit = &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;val&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;name, site, role&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt; = getSomeInfo&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;Name is &amp;quot;&lt;/span&gt; + name&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;Site is &amp;quot;&lt;/span&gt; + site&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;Role is &amp;quot;&lt;/span&gt; + role&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;def&lt;/span&gt;&lt;/a&gt; getSomeInfo&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt; = &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;SQLDenis&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;LessThanDot&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;blogger&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb5669&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Run it by selecting Run As--&gt; Scala Application from the Run as button&lt;/p&gt;
&lt;div class=&quot;image_block&quot;&gt;&lt;a href=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno10.PNG?mtime=1357399576&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno10.PNG?mtime=1357399576&quot; width=&quot;455&quot; height=&quot;48&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Your output should be the following&lt;br /&gt;
Name is SQLDenis&lt;br /&gt;
Site is LessThanDot&lt;br /&gt;
Role is blogger&lt;/p&gt;


&lt;p&gt;Why don&#039;t we add a simple loop to our code? Here is what needs to be added&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;scala&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;scala&quot; id=&quot;cb92350&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;i &amp;lt;- &lt;span style=&quot;color: #F78811;&quot;&gt;1&lt;/span&gt; to &lt;span style=&quot;color: #F78811;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;i + &lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot; Testing 1,2,3.....&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb39890&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Here is the whole code&lt;/p&gt;
&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;scala&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;scala&quot; id=&quot;cb8640&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;object&lt;/span&gt;&lt;/a&gt; Test2 &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;def&lt;/span&gt;&lt;/a&gt; main&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;args: Array&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#91;&lt;/span&gt;String&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;: Unit = &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;val&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;name, site, role&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt; = getSomeInfo&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;Name is &amp;quot;&lt;/span&gt; + name&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;Site is &amp;quot;&lt;/span&gt; + site&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;Role is &amp;quot;&lt;/span&gt; + role&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;i &amp;lt;- &lt;span style=&quot;color: #F78811;&quot;&gt;1&lt;/span&gt; to &lt;span style=&quot;color: #F78811;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;i + &lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot; Testing 1,2,3.....&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;def&lt;/span&gt;&lt;/a&gt; getSomeInfo&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt; = &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;SQLDenis&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;LessThanDot&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;blogger&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb39616&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Run it again, here is what the output should be&lt;/p&gt;

&lt;p&gt;Name is SQLDenis&lt;br /&gt;
Site is LessThanDot&lt;br /&gt;
Role is blogger&lt;br /&gt;
1,2,3, Testing 1,2,3.....&lt;br /&gt;
Here is what my Eclipse window looks like&lt;/p&gt;

&lt;div class=&quot;image_block&quot;&gt;&lt;a href=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno9.PNG?mtime=1357398314&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno9.PNG?mtime=1357398314&quot; width=&quot;595&quot; height=&quot;523&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;In case you are interested in all the new stuff in Scala 2.10, take a look at the stuff below.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;The Scala 2.10.0 codebase includes the following new features and changes:&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Value Classes&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;A class may now extend &lt;code&gt;AnyVal&lt;/code&gt; to make it behave like a struct type (restrictions apply).&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;http://docs.scala-lang.org/overviews/core/value-classes.html&quot;&gt;http://docs.scala-lang.org/overviews/core/value-classes.html&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Implicit Classes&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;The implicit modifier now also applies to class definitions to reduce the boilerplate of implicit wrappers.&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;http://docs.scala-lang.org/sips/pending/implicit-classes.html&quot;&gt;http://docs.scala-lang.org/sips/pending/implicit-classes.html&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;String Interpolation&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;code&gt;val what = &amp;quot;awesome&amp;quot;; println(s&amp;quot;string interpolation is ${what.toUpperCase}!&amp;quot;)&lt;/code&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;http://docs.scala-lang.org/overviews/core/string-interpolation.html&quot;&gt;http://docs.scala-lang.org/overviews/core/string-interpolation.html&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Futures and Promises&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;Asynchronously get some JSON: &lt;code&gt;for (req &amp;lt;- WS.url(restApiUrl).get()) yield (req.json \ &amp;quot;users&amp;quot;).as[List[User]]&lt;/code&gt; (uses play!)&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;http://docs.scala-lang.org/overviews/core/futures.html&quot;&gt;http://docs.scala-lang.org/overviews/core/futures.html&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Dynamic and applyDynamic&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;code&gt;x.foo&lt;/code&gt; becomes &lt;code&gt;x.applyDynamic(&amp;quot;foo&amp;quot;)&lt;/code&gt; if &lt;code&gt;x&lt;/code&gt;&#039;s type does not define a &lt;code&gt;foo&lt;/code&gt;, but is a subtype of &lt;code&gt;Dynamic&lt;/code&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;http://docs.scala-lang.org/sips/pending/type-dynamic.html&quot;&gt;http://docs.scala-lang.org/sips/pending/type-dynamic.html&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Dependent method types:&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;code&gt;def identity(x: AnyRef): x.type = x&lt;/code&gt; // the return type says we return exactly what we got&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;New ByteCode emitter based on ASM&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;Can target JDK 1.5, 1.6 and 1.7&lt;/li&gt;
        &lt;li&gt;Emits 1.6 bytecode by default&lt;/li&gt;
        &lt;li&gt;Old 1.5 backend is deprecated&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;A new Pattern Matcher&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;rewritten from scratch to generate more robust code (no more &lt;a href=&quot;https://issues.scala-lang.org/browse/SI-1133&quot;&gt;exponential blow-up&lt;/a&gt;!)&lt;/li&gt;
        &lt;li&gt;code generation and analyses are now independent (the latter can be turned off with &lt;code&gt;-Xno-patmat-analysis&lt;/code&gt;)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Scaladoc Improvements&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;Implicits (-implicits flag)&lt;/li&gt;
        &lt;li&gt;Diagrams (-diagrams flag, requires graphviz)&lt;/li&gt;
        &lt;li&gt;Groups (-groups)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Modularized Language features&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;Get on top of the advanced Scala features used in your codebase by explicitly importing them.&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;http://docs.scala-lang.org/sips/pending/modularizing-language-features.html&quot;&gt;http://docs.scala-lang.org/sips/pending/modularizing-language-features.html&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Parallel Collections are now configurable with custom thread pools&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;a href=&quot;http://docs.scala-lang.org/overviews/parallel-collections/overview.html&quot;&gt;http://docs.scala-lang.org/overviews/parallel-collections/overview.html&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Akka Actors now part of the distribution&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;The original Scala actors are now deprecated.&lt;/li&gt;
        &lt;li&gt;See the &lt;a href=&quot;http://docs.scala-lang.org/actors-migration/&quot;&gt;actors migration project&lt;/a&gt; for more information.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Performance Improvements&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;Faster inliner&lt;/li&gt;
        &lt;li&gt;`Range#sum is now O(1)&lt;/li&gt;
        &lt;li&gt;Update of ForkJoin library&lt;/li&gt;
        &lt;li&gt;Fixes in immutable &lt;code&gt;TreeSet&lt;/code&gt;/&lt;code&gt;TreeMap&lt;/code&gt;&lt;/li&gt;
        &lt;li&gt;Improvements to PartialFunctions&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Addition of &lt;code&gt;???&lt;/code&gt; and &lt;code&gt;NotImplementedError&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;Addition of &lt;code&gt;IsTraversableOnce&lt;/code&gt; + &lt;code&gt;IsTraversableLike&lt;/code&gt; type classes for extension methods&lt;/li&gt;
    &lt;li&gt;Deprecations and cleanup&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;Floating point and octal literal syntax deprecation&lt;/li&gt;
        &lt;li&gt;Removed scala.dbc&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Experimentalfeatures&quot;&gt;Experimental features&lt;/h3&gt;
&lt;p&gt;The following exciting -- experimental -- features are part of 2.10.0:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Scala Reflection&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;a href=&quot;https://docs.google.com/document/d/1Z1VhhNPplbUpaZPIYdc0_EUv5RiGQ2X4oqp0i-vz1qw/edit#heading=h.pqwdkl&quot;&gt;https://docs.google.com/document/d/1Z1VhhNPplbUpaZPIYdc0_EUv5RiGQ2X4oqp0i-vz1qw/edit#heading=h.pqwdkl&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Macros&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;a href=&quot;http://docs.scala-lang.org/overviews/macros/overview.html&quot;&gt;http://docs.scala-lang.org/overviews/macros/overview.html&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr /&gt;
&lt;p&gt;That is all for this post, Scala is just one of the languages I will explore in my quest to be more of a polyglot this year. Have you looked at Scala or some other functional language like F#?&lt;/p&gt;

&lt;p&gt;Edit.......&lt;/p&gt;

&lt;p&gt;And I played a little more with this and decided to do one of our &lt;a href=&quot;http://forum.lessthandot.com/viewtopic.php?f=102&amp;amp;t=1608&quot;&gt;Friday the Thirteenths&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a solution that someone posted in Java&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;java&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;java&quot; id=&quot;cb122&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: #a1a100;&quot;&gt;import java.text.DateFormat;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #a1a100;&quot;&gt;import java.text.SimpleDateFormat;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #a1a100;&quot;&gt;import java.util.Calendar;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #a1a100;&quot;&gt;import java.util.GregorianCalendar;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; Test&lt;br /&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3ADateFormat+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;DateFormat&lt;/span&gt;&lt;/a&gt; format = &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3ASimpleDateFormat+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;SimpleDateFormat&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;EEE MMM dd yyyy&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #993333;&quot;&gt;void&lt;/span&gt; main&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3AString+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;String&lt;/span&gt;&lt;/a&gt;... &lt;span style=&quot;color: #006600;&quot;&gt;args&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3AGregorianCalendar+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;GregorianCalendar&lt;/span&gt;&lt;/a&gt; cal = &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3AGregorianCalendar+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;GregorianCalendar&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3AGregorianCalendar+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;GregorianCalendar&lt;/span&gt;&lt;/a&gt; stopDate = &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3AGregorianCalendar+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;GregorianCalendar&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; stopDate.&lt;span style=&quot;color: #006600;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3ACalendar+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;Calendar&lt;/span&gt;&lt;/a&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;YEAR&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// Move ahead to the next Friday&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;cal.&lt;span style=&quot;color: #006600;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3ACalendar+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;Calendar&lt;/span&gt;&lt;/a&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;DAY_OF_WEEK&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; != &lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; cal.&lt;span style=&quot;color: #006600;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3ACalendar+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;Calendar&lt;/span&gt;&lt;/a&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;DATE&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;cal.&lt;span style=&quot;color: #006600;&quot;&gt;before&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;stopDate&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;cal.&lt;span style=&quot;color: #006600;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3ACalendar+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;Calendar&lt;/span&gt;&lt;/a&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;DAY_OF_MONTH&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; == &lt;span style=&quot;color: #cc66cc;&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3ASystem+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;format.&lt;span style=&quot;color: #006600;&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;cal.&lt;span style=&quot;color: #006600;&quot;&gt;getTime&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cal.&lt;span style=&quot;color: #006600;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3ACalendar+java.sun.com&amp;amp;btnI=I%27m%20Feeling%20Lucky&quot;&gt;&lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;Calendar&lt;/span&gt;&lt;/a&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;DATE&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb31784&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In Scala you don&#039;t have to change that much, you can leave or take out the semicolons, here is the code&lt;/p&gt;
&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;scala&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;scala&quot; id=&quot;cb6322&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;object&lt;/span&gt;&lt;/a&gt; Test2 &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;import&lt;/span&gt;&lt;/a&gt; java.&lt;span style=&quot;color: #000000;&quot;&gt;text&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;DateFormat&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;import&lt;/span&gt;&lt;/a&gt; java.&lt;span style=&quot;color: #000000;&quot;&gt;text&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;SimpleDateFormat&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;import&lt;/span&gt;&lt;/a&gt; java.&lt;span style=&quot;color: #000000;&quot;&gt;util&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;Calendar&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;import&lt;/span&gt;&lt;/a&gt; java.&lt;span style=&quot;color: #000000;&quot;&gt;util&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;GregorianCalendar&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;def&lt;/span&gt;&lt;/a&gt; main&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;args: Array&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#91;&lt;/span&gt;String&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;: Unit = &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;val&lt;/span&gt;&lt;/a&gt; DateFormat &amp;nbsp;= &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; SimpleDateFormat&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6666FF;&quot;&gt;&amp;quot;EEE MMM dd yyyy&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;val&lt;/span&gt;&lt;/a&gt; cal = &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; GregorianCalendar&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;val&lt;/span&gt;&lt;/a&gt; stopDate = &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; GregorianCalendar&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; stopDate.&lt;span style=&quot;color: #000000;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;Calendar.&lt;span style=&quot;color: #000000;&quot;&gt;YEAR&lt;/span&gt;, &lt;span style=&quot;color: #F78811;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;cal.&lt;span style=&quot;color: #000000;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;Calendar.&lt;span style=&quot;color: #000000;&quot;&gt;DAY_OF_WEEK&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt; != &lt;span style=&quot;color: #F78811;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt; cal.&lt;span style=&quot;color: #000000;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;Calendar.&lt;span style=&quot;color: #000000;&quot;&gt;DATE&lt;/span&gt;, &lt;span style=&quot;color: #F78811;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;cal.&lt;span style=&quot;color: #000000;&quot;&gt;before&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;stopDate&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://scala-lang.org&quot;&gt;&lt;span style=&quot;color: #0000ff; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;cal.&lt;span style=&quot;color: #000000;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;Calendar.&lt;span style=&quot;color: #000000;&quot;&gt;DAY_OF_MONTH&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt; == &lt;span style=&quot;color: #F78811;&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; println&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;DateFormat.&lt;span style=&quot;color: #000000;&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;cal.&lt;span style=&quot;color: #000000;&quot;&gt;getTime&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cal.&lt;span style=&quot;color: #000000;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#40;&lt;/span&gt;Calendar.&lt;span style=&quot;color: #000000;&quot;&gt;DATE&lt;/span&gt;, &lt;span style=&quot;color: #F78811;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;span style=&quot;color: #F78811;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb90176&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And here is the output&lt;/p&gt;

&lt;p&gt;Fri Sep 13 2013&lt;br /&gt;
Fri Dec 13 2013&lt;br /&gt;
Fri Jun 13 2014&lt;br /&gt;
Fri Feb 13 2015&lt;br /&gt;
Fri Mar 13 2015&lt;br /&gt;
Fri Nov 13 2015&lt;br /&gt;
Fri May 13 2016&lt;br /&gt;
Fri Jan 13 2017&lt;br /&gt;
Fri Oct 13 2017&lt;br /&gt;
Fri Apr 13 2018&lt;br /&gt;
Fri Jul 13 2018&lt;br /&gt;
Fri Sep 13 2019&lt;br /&gt;
Fri Dec 13 2019&lt;br /&gt;
Fri Mar 13 2020&lt;br /&gt;
Fri Nov 13 2020&lt;br /&gt;
Fri Aug 13 2021&lt;br /&gt;
Fri May 13 2022&lt;/p&gt;

&lt;p&gt;With SQL Server, you can just use a number table&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;tsql&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;tsql&quot; id=&quot;cb76740&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: #0000FF;&quot;&gt;SELECT&lt;/span&gt; &lt;span style=&quot;color: #FF00FF;&quot;&gt;DATEADD&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;#40;&lt;/span&gt;m, number,&lt;span style=&quot;color: #FF0000;&quot;&gt;&#039;1998-01-13&#039;&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style=&quot;color: #0000FF;&quot;&gt;FROM&lt;/span&gt; &amp;nbsp;master..&lt;span style=&quot;color: #202020;&quot;&gt;spt_values&lt;/span&gt; &lt;span style=&quot;color: #0000FF;&quot;&gt;WHERE&lt;/span&gt; &lt;span style=&quot;color: #0000FF;&quot;&gt;type&lt;/span&gt; = &lt;span style=&quot;color: #FF0000;&quot;&gt;&#039;P&#039;&lt;/span&gt;&lt;br /&gt;and &lt;span style=&quot;color: #FF00FF;&quot;&gt;DATENAME&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;#40;&lt;/span&gt;dw,&lt;span style=&quot;color: #FF00FF;&quot;&gt;DATEADD&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;#40;&lt;/span&gt;m, number,&lt;span style=&quot;color: #FF0000;&quot;&gt;&#039;1998-01-13&#039;&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&amp;#41;&lt;/span&gt; = &lt;span style=&quot;color: #FF0000;&quot;&gt;&#039;friday&#039;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb52840&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That is really it for this post...&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/installing-scala-2-10-on&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>As part of my <a href="http://blogs.lessthandot.com/index.php/ITProfessionals/ProfessionalDevelopment/ah-yes-those-pesky-resolutions">resolutions for the year</a> I said I would write more blog posts and also get into different technology. I decided to take a look at Scala. Well it turns out Scala 2.10 was released yesterday. But first what is Scala anyway? From the Scala site:  </p>

<blockquote><p>Scala is a general purpose programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages, enabling Java and other programmers to be more productive. Code sizes are typically reduced by a factor of two to three when compared to an equivalent Java application.</p></blockquote>

<p>Scala is an object oriented, functional, statically typed language. You could probably compare it to F# if you are a .NET programmer.</p>

<p>The first thing you have to do is downloading version 2.10 of Scala, you can download that version here: <a href="http://www.scala-lang.org/downloads">http://www.scala-lang.org/downloads</a></p>

<p>After it is downloaded and installed, it is time to get the Eclipse plugin for Scala 2.10</p>

<p>The way you do this is you click on Help followed by Install New Software... from the menu in Eclipse</p>


<div class="image_block"><a href="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno2.PNG?mtime=1357398056"><img alt="" src="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno2.PNG?mtime=1357398056" width="552" height="169" /></a></div>

<p>Click on the Add button</p>

<div class="image_block"><a href="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno3.PNG?mtime=1357398065"><img alt="" src="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno3.PNG?mtime=1357398065" width="476" height="177" /></a></div>

<p>For Eclipse Juno you need to use the following URL in the location box <a href="http://download.scala-ide.org/sdk/e38/scala210/dev/site/">http://download.scala-ide.org/sdk/e38/scala210/dev/site/</a> <br />
For Eclipse Indigo use the following URL <a href="http://download.scala-ide.org/sdk/e37/scala210/dev/site/">http://download.scala-ide.org/sdk/e37/scala210/dev/site/</a>  <br />
Give a name for the repository, I named mine Scala 10 for Eclipse Juno. Hit Ok</p>



<div class="image_block"><a href="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno4.PNG?mtime=1357398076"><img alt="" src="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno4.PNG?mtime=1357398076" width="300" height="165" /></a></div>

<p>Hit next</p>

<p>On the Install Details form you will see Scala IDE for Eclipse<br />
You can expand it to reveal the following</p>

<div class="image_block"><a href="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno5.PNG?mtime=1357398089"><img alt="" src="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno5.PNG?mtime=1357398089" width="352" height="152" /></a></div>


<p>Hit next to accept the license, hit finish.</p>

<p>Now Eclipse will ask you to restart. After Eclipse is restarted it is time to create our first Scala application<br />
From the menu go to File and then select New Project. Navigate to Scala Wizards and select Scala Project</p>

<div class="image_block"><a href="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno6.PNG?mtime=1357398099"><img alt="" src="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno6.PNG?mtime=1357398099" width="562" height="361" /></a></div>

<p>Now that the project is created let's create a simple object</p>



<p>Right click on the Scala Project from the package Explorer and select New--> Scala Object</p>

<div class="image_block"><a href="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno7.PNG?mtime=1357398110"><img alt="" src="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno7.PNG?mtime=1357398110" width="510" height="573" /></a></div>

<p>Give it a name and check <em>public static void main</em></p>

<p>You should have something like this</p>

<div class="codebox"><div class="codeheader"><span>scala</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb76822'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb76822','cb80403'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="scala" id="cb76822" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"><a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">object</span></a> Test2 <span style="color: #F78811;">&#123;</span></li><li style="" class="li2">&nbsp;</li><li style="" class="li1">&nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">def</span></a> main<span style="color: #F78811;">&#40;</span>args: Array<span style="color: #F78811;">&#91;</span>String<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#41;</span>: Unit = <span style="color: #F78811;">&#123;</span><span style="color: #F78811;">&#125;</span></li><li style="" class="li2">&nbsp;</li><li style="" class="li1"><span style="color: #F78811;">&#125;</span></li></ol></div><div id="cb80403" style="display: none; color: red;"></div></div></div>

<p>Let's make it more interesting by generating some output</p>

<div class="codebox"><div class="codeheader"><span>scala</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb16018'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb16018','cb79568'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="scala" id="cb16018" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"><a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">object</span></a> Test2 <span style="color: #F78811;">&#123;</span></li><li style="" class="li2">&nbsp;</li><li style="" class="li1">&nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">def</span></a> main<span style="color: #F78811;">&#40;</span>args: Array<span style="color: #F78811;">&#91;</span>String<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#41;</span>: Unit = <span style="color: #F78811;">&#123;</span><span style="color: #F78811;">&#125;</span></li><li style="" class="li2">&nbsp;</li><li style="" class="li1">&nbsp; &nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">val</span></a> <span style="color: #F78811;">&#40;</span>name, site, role<span style="color: #F78811;">&#41;</span> = getSomeInfo<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;Name is &quot;</span> + name<span style="color: #F78811;">&#41;</span></li><li style="" class="li1">&nbsp; &nbsp; println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;Site is &quot;</span> + site<span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;Role is &quot;</span> + role<span style="color: #F78811;">&#41;</span></li><li style="" class="li1">&nbsp;</li><li style="" class="li2">&nbsp; &nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">def</span></a> getSomeInfo<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span> = <span style="color: #F78811;">&#123;</span></li><li style="" class="li1">&nbsp; &nbsp; <span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;SQLDenis&quot;</span>, <span style="color: #6666FF;">&quot;LessThanDot&quot;</span>, <span style="color: #6666FF;">&quot;blogger&quot;</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; <span style="color: #F78811;">&#125;</span></li><li style="" class="li1"><span style="color: #F78811;">&#125;</span></li></ol></div><div id="cb79568" style="display: none; color: red;"></div></div></div>

<p>Run it by selecting Run As--> Scala Application from the Run as button</p>
<div class="image_block"><a href="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno10.PNG?mtime=1357399576"><img alt="" src="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno10.PNG?mtime=1357399576" width="455" height="48" /></a></div>

<p>Your output should be the following<br />
Name is SQLDenis<br />
Site is LessThanDot<br />
Role is blogger</p>


<p>Why don't we add a simple loop to our code? Here is what needs to be added</p>

<div class="codebox"><div class="codeheader"><span>scala</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb35714'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb35714','cb29434'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="scala" id="cb35714" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"><a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">for</span></a> <span style="color: #F78811;">&#40;</span>i &lt;- <span style="color: #F78811;">1</span> to <span style="color: #F78811;">3</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; print<span style="color: #F78811;">&#40;</span>i + <span style="color: #6666FF;">&quot;,&quot;</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li1">&nbsp; &nbsp; <span style="color: #F78811;">&#125;</span></li><li style="" class="li2">&nbsp; &nbsp; println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot; Testing 1,2,3.....&quot;</span><span style="color: #F78811;">&#41;</span></li></ol></div><div id="cb29434" style="display: none; color: red;"></div></div></div>

<p>Here is the whole code</p>
<div class="codebox"><div class="codeheader"><span>scala</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb87228'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb87228','cb73649'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="scala" id="cb87228" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"><a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">object</span></a> Test2 <span style="color: #F78811;">&#123;</span></li><li style="" class="li2">&nbsp;</li><li style="" class="li1">&nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">def</span></a> main<span style="color: #F78811;">&#40;</span>args: Array<span style="color: #F78811;">&#91;</span>String<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#41;</span>: Unit = <span style="color: #F78811;">&#123;</span><span style="color: #F78811;">&#125;</span></li><li style="" class="li2">&nbsp;</li><li style="" class="li1">&nbsp; &nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">val</span></a> <span style="color: #F78811;">&#40;</span>name, site, role<span style="color: #F78811;">&#41;</span> = getSomeInfo<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;Name is &quot;</span> + name<span style="color: #F78811;">&#41;</span></li><li style="" class="li1">&nbsp; &nbsp; println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;Site is &quot;</span> + site<span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;Role is &quot;</span> + role<span style="color: #F78811;">&#41;</span></li><li style="" class="li1">&nbsp; &nbsp; </li><li style="" class="li2">&nbsp; &nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">for</span></a> <span style="color: #F78811;">&#40;</span>i &lt;- <span style="color: #F78811;">1</span> to <span style="color: #F78811;">3</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; print<span style="color: #F78811;">&#40;</span>i + <span style="color: #6666FF;">&quot;,&quot;</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; <span style="color: #F78811;">&#125;</span></li><li style="" class="li1">&nbsp; &nbsp; println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot; Testing 1,2,3.....&quot;</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp;</li><li style="" class="li1">&nbsp; &nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">def</span></a> getSomeInfo<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span> = <span style="color: #F78811;">&#123;</span></li><li style="" class="li2">&nbsp; &nbsp; <span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;SQLDenis&quot;</span>, <span style="color: #6666FF;">&quot;LessThanDot&quot;</span>, <span style="color: #6666FF;">&quot;blogger&quot;</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li1">&nbsp; &nbsp; <span style="color: #F78811;">&#125;</span></li><li style="" class="li2"><span style="color: #F78811;">&#125;</span></li></ol></div><div id="cb73649" style="display: none; color: red;"></div></div></div>

<p>Run it again, here is what the output should be</p>

<p>Name is SQLDenis<br />
Site is LessThanDot<br />
Role is blogger<br />
1,2,3, Testing 1,2,3.....<br />
Here is what my Eclipse window looks like</p>

<div class="image_block"><a href="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno9.PNG?mtime=1357398314"><img alt="" src="http://blogs.lessthandot.com/media/blogs/EnterpriseDev/Denis/juno9.PNG?mtime=1357398314" width="595" height="523" /></a></div>

<p>In case you are interested in all the new stuff in Scala 2.10, take a look at the stuff below.</p>

<hr />

<p>The Scala 2.10.0 codebase includes the following new features and changes:&nbsp;</p>
<ul>
    <li>Value Classes<br />
    <ul>
        <li>A class may now extend <code>AnyVal</code> to make it behave like a struct type (restrictions apply).</li>
        <li><a href="http://docs.scala-lang.org/overviews/core/value-classes.html">http://docs.scala-lang.org/overviews/core/value-classes.html</a></li>
    </ul>
    </li>
    <li>Implicit Classes<br />
    <ul>
        <li>The implicit modifier now also applies to class definitions to reduce the boilerplate of implicit wrappers.</li>
        <li><a href="http://docs.scala-lang.org/sips/pending/implicit-classes.html">http://docs.scala-lang.org/sips/pending/implicit-classes.html</a></li>
    </ul>
    </li>
    <li>String Interpolation<br />
    <ul>
        <li><code>val what = &quot;awesome&quot;; println(s&quot;string interpolation is ${what.toUpperCase}!&quot;)</code></li>
        <li><a href="http://docs.scala-lang.org/overviews/core/string-interpolation.html">http://docs.scala-lang.org/overviews/core/string-interpolation.html</a></li>
    </ul>
    </li>
    <li>Futures and Promises<br />
    <ul>
        <li>Asynchronously get some JSON: <code>for (req &lt;- WS.url(restApiUrl).get()) yield (req.json \ &quot;users&quot;).as[List[User]]</code> (uses play!)</li>
        <li><a href="http://docs.scala-lang.org/overviews/core/futures.html">http://docs.scala-lang.org/overviews/core/futures.html</a></li>
    </ul>
    </li>
    <li>Dynamic and applyDynamic<br />
    <ul>
        <li><code>x.foo</code> becomes <code>x.applyDynamic(&quot;foo&quot;)</code> if <code>x</code>'s type does not define a <code>foo</code>, but is a subtype of <code>Dynamic</code></li>
        <li><a href="http://docs.scala-lang.org/sips/pending/type-dynamic.html">http://docs.scala-lang.org/sips/pending/type-dynamic.html</a></li>
    </ul>
    </li>
    <li>Dependent method types:<br />
    <ul>
        <li><code>def identity(x: AnyRef): x.type = x</code> // the return type says we return exactly what we got</li>
    </ul>
    </li>
    <li>New ByteCode emitter based on ASM<br />
    <ul>
        <li>Can target JDK 1.5, 1.6 and 1.7</li>
        <li>Emits 1.6 bytecode by default</li>
        <li>Old 1.5 backend is deprecated</li>
    </ul>
    </li>
    <li>A new Pattern Matcher<br />
    <ul>
        <li>rewritten from scratch to generate more robust code (no more <a href="https://issues.scala-lang.org/browse/SI-1133">exponential blow-up</a>!)</li>
        <li>code generation and analyses are now independent (the latter can be turned off with <code>-Xno-patmat-analysis</code>)</li>
    </ul>
    </li>
    <li>Scaladoc Improvements<br />
    <ul>
        <li>Implicits (-implicits flag)</li>
        <li>Diagrams (-diagrams flag, requires graphviz)</li>
        <li>Groups (-groups)</li>
    </ul>
    </li>
    <li>Modularized Language features<br />
    <ul>
        <li>Get on top of the advanced Scala features used in your codebase by explicitly importing them.</li>
        <li><a href="http://docs.scala-lang.org/sips/pending/modularizing-language-features.html">http://docs.scala-lang.org/sips/pending/modularizing-language-features.html</a></li>
    </ul>
    </li>
    <li>Parallel Collections are now configurable with custom thread pools<br />
    <ul>
        <li><a href="http://docs.scala-lang.org/overviews/parallel-collections/overview.html">http://docs.scala-lang.org/overviews/parallel-collections/overview.html</a></li>
    </ul>
    </li>
    <li>Akka Actors now part of the distribution<br />
    <ul>
        <li>The original Scala actors are now deprecated.</li>
        <li>See the <a href="http://docs.scala-lang.org/actors-migration/">actors migration project</a> for more information.</li>
    </ul>
    </li>
    <li>Performance Improvements<br />
    <ul>
        <li>Faster inliner</li>
        <li>`Range#sum is now O(1)</li>
        <li>Update of ForkJoin library</li>
        <li>Fixes in immutable <code>TreeSet</code>/<code>TreeMap</code></li>
        <li>Improvements to PartialFunctions</li>
    </ul>
    </li>
    <li>Addition of <code>???</code> and <code>NotImplementedError</code></li>
    <li>Addition of <code>IsTraversableOnce</code> + <code>IsTraversableLike</code> type classes for extension methods</li>
    <li>Deprecations and cleanup<br />
    <ul>
        <li>Floating point and octal literal syntax deprecation</li>
        <li>Removed scala.dbc</li>
    </ul>
    </li>
</ul>
<h3 id="Experimentalfeatures">Experimental features</h3>
<p>The following exciting -- experimental -- features are part of 2.10.0:</p>
<ul>
    <li>Scala Reflection<br />
    <ul>
        <li><a href="https://docs.google.com/document/d/1Z1VhhNPplbUpaZPIYdc0_EUv5RiGQ2X4oqp0i-vz1qw/edit#heading=h.pqwdkl">https://docs.google.com/document/d/1Z1VhhNPplbUpaZPIYdc0_EUv5RiGQ2X4oqp0i-vz1qw/edit#heading=h.pqwdkl</a></li>
    </ul>
    </li>
    <li>Macros<br />
    <ul>
        <li><a href="http://docs.scala-lang.org/overviews/macros/overview.html">http://docs.scala-lang.org/overviews/macros/overview.html</a></li>
    </ul>
    </li>
</ul>

<p><br /></p><hr />
<p>That is all for this post, Scala is just one of the languages I will explore in my quest to be more of a polyglot this year. Have you looked at Scala or some other functional language like F#?</p>

<p>Edit.......</p>

<p>And I played a little more with this and decided to do one of our <a href="http://forum.lessthandot.com/viewtopic.php?f=102&amp;t=1608">Friday the Thirteenths</a></p>

<p>Here is a solution that someone posted in Java</p>

<div class="codebox"><div class="codeheader"><span>java</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb77359'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb77359','cb28184'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="java" id="cb77359" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"><span style="color: #a1a100;">import java.text.DateFormat;</span></li><li style="" class="li2"><span style="color: #a1a100;">import java.text.SimpleDateFormat;</span></li><li style="" class="li1"><span style="color: #a1a100;">import java.util.Calendar;</span></li><li style="" class="li2"><span style="color: #a1a100;">import java.util.GregorianCalendar;</span></li><li style="" class="li1">&nbsp;</li><li style="" class="li2"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Test</li><li style="" class="li1"><span style="color: #66cc66;">&#123;</span></li><li style="" class="li2">&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ADateFormat+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">DateFormat</span></a> format = <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASimpleDateFormat+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">SimpleDateFormat</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;EEE MMM dd yyyy&quot;</span><span style="color: #66cc66;">&#41;</span>;</li><li style="" class="li1">&nbsp; &nbsp;</li><li style="" class="li2">&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #993333;">void</span> main<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">String</span></a>... <span style="color: #006600;">args</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGregorianCalendar+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">GregorianCalendar</span></a> cal = <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGregorianCalendar+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">GregorianCalendar</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGregorianCalendar+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">GregorianCalendar</span></a> stopDate = <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGregorianCalendar+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">GregorianCalendar</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; stopDate.<span style="color: #006600;">add</span><span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ACalendar+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">Calendar</span></a>.<span style="color: #006600;">YEAR</span>, <span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span>;</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp;</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// Move ahead to the next Friday</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span>cal.<span style="color: #006600;">get</span><span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ACalendar+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">Calendar</span></a>.<span style="color: #006600;">DAY_OF_WEEK</span><span style="color: #66cc66;">&#41;</span> != <span style="color: #cc66cc;">6</span><span style="color: #66cc66;">&#41;</span> cal.<span style="color: #006600;">add</span><span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ACalendar+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">Calendar</span></a>.<span style="color: #006600;">DATE</span>, <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp;</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span>cal.<span style="color: #006600;">before</span><span style="color: #66cc66;">&#40;</span>stopDate<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>cal.<span style="color: #006600;">get</span><span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ACalendar+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">Calendar</span></a>.<span style="color: #006600;">DAY_OF_MONTH</span><span style="color: #66cc66;">&#41;</span> == <span style="color: #cc66cc;">13</span><span style="color: #66cc66;">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span>format.<span style="color: #006600;">format</span><span style="color: #66cc66;">&#40;</span>cal.<span style="color: #006600;">getTime</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cal.<span style="color: #006600;">add</span><span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ACalendar+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #aaaadd; font-weight: bold;">Calendar</span></a>.<span style="color: #006600;">DATE</span>, <span style="color: #cc66cc;">7</span><span style="color: #66cc66;">&#41;</span>;</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></li><li style="" class="li2">&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></li><li style="" class="li1"><span style="color: #66cc66;">&#125;</span></li></ol></div><div id="cb28184" style="display: none; color: red;"></div></div></div>

<p>In Scala you don't have to change that much, you can leave or take out the semicolons, here is the code</p>
<div class="codebox"><div class="codeheader"><span>scala</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb68590'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb68590','cb23084'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="scala" id="cb68590" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"><a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">object</span></a> Test2 <span style="color: #F78811;">&#123;</span></li><li style="" class="li2">&nbsp; </li><li style="" class="li1"><a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">import</span></a> java.<span style="color: #000000;">text</span>.<span style="color: #000000;">DateFormat</span></li><li style="" class="li2"><a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">import</span></a> java.<span style="color: #000000;">text</span>.<span style="color: #000000;">SimpleDateFormat</span></li><li style="" class="li1"><a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">import</span></a> java.<span style="color: #000000;">util</span>.<span style="color: #000000;">Calendar</span></li><li style="" class="li2"><a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">import</span></a> java.<span style="color: #000000;">util</span>.<span style="color: #000000;">GregorianCalendar</span></li><li style="" class="li1">&nbsp;</li><li style="" class="li2">&nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">def</span></a> main<span style="color: #F78811;">&#40;</span>args: Array<span style="color: #F78811;">&#91;</span>String<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#41;</span>: Unit = <span style="color: #F78811;">&#123;</span><span style="color: #F78811;">&#125;</span></li><li style="" class="li1">&nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">val</span></a> DateFormat &nbsp;= <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">new</span></a> SimpleDateFormat<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;EEE MMM dd yyyy&quot;</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp; </li><li style="" class="li1">&nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">val</span></a> cal = <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">new</span></a> GregorianCalendar<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">val</span></a> stopDate = <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">new</span></a> GregorianCalendar<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li1">&nbsp; stopDate.<span style="color: #000000;">add</span><span style="color: #F78811;">&#40;</span>Calendar.<span style="color: #000000;">YEAR</span>, <span style="color: #F78811;">10</span><span style="color: #F78811;">&#41;</span>;</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; </li><li style="" class="li1">&nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">while</span></a> <span style="color: #F78811;">&#40;</span>cal.<span style="color: #000000;">get</span><span style="color: #F78811;">&#40;</span>Calendar.<span style="color: #000000;">DAY_OF_WEEK</span><span style="color: #F78811;">&#41;</span> != <span style="color: #F78811;">6</span><span style="color: #F78811;">&#41;</span> cal.<span style="color: #000000;">add</span><span style="color: #F78811;">&#40;</span>Calendar.<span style="color: #000000;">DATE</span>, <span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp;</li><li style="" class="li1">&nbsp; <a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">while</span></a> <span style="color: #F78811;">&#40;</span>cal.<span style="color: #000000;">before</span><span style="color: #F78811;">&#40;</span>stopDate<span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://scala-lang.org"><span style="color: #0000ff; font-weight: bold;">if</span></a> <span style="color: #F78811;">&#40;</span>cal.<span style="color: #000000;">get</span><span style="color: #F78811;">&#40;</span>Calendar.<span style="color: #000000;">DAY_OF_MONTH</span><span style="color: #F78811;">&#41;</span> == <span style="color: #F78811;">13</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; println<span style="color: #F78811;">&#40;</span>DateFormat.<span style="color: #000000;">format</span><span style="color: #F78811;">&#40;</span>cal.<span style="color: #000000;">getTime</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cal.<span style="color: #000000;">add</span><span style="color: #F78811;">&#40;</span>Calendar.<span style="color: #000000;">DATE</span>, <span style="color: #F78811;">7</span><span style="color: #F78811;">&#41;</span>;</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; </li><li style="" class="li2">&nbsp; &nbsp;<span style="color: #F78811;">&#125;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; </li><li style="" class="li2"><span style="color: #F78811;">&#125;</span></li></ol></div><div id="cb23084" style="display: none; color: red;"></div></div></div>

<p>And here is the output</p>

<p>Fri Sep 13 2013<br />
Fri Dec 13 2013<br />
Fri Jun 13 2014<br />
Fri Feb 13 2015<br />
Fri Mar 13 2015<br />
Fri Nov 13 2015<br />
Fri May 13 2016<br />
Fri Jan 13 2017<br />
Fri Oct 13 2017<br />
Fri Apr 13 2018<br />
Fri Jul 13 2018<br />
Fri Sep 13 2019<br />
Fri Dec 13 2019<br />
Fri Mar 13 2020<br />
Fri Nov 13 2020<br />
Fri Aug 13 2021<br />
Fri May 13 2022</p>

<p>With SQL Server, you can just use a number table</p>

<div class="codebox"><div class="codeheader"><span>tsql</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb84779'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb84779','cb31345'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="tsql" id="cb84779" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"><span style="color: #0000FF;">SELECT</span> <span style="color: #FF00FF;">DATEADD</span><span style="color: #808080;">&#40;</span>m, number,<span style="color: #FF0000;">'1998-01-13'</span><span style="color: #808080;">&#41;</span></li><li style="" class="li2">&nbsp;<span style="color: #0000FF;">FROM</span> &nbsp;master..<span style="color: #202020;">spt_values</span> <span style="color: #0000FF;">WHERE</span> <span style="color: #0000FF;">type</span> = <span style="color: #FF0000;">'P'</span></li><li style="" class="li1">and <span style="color: #FF00FF;">DATENAME</span><span style="color: #808080;">&#40;</span>dw,<span style="color: #FF00FF;">DATEADD</span><span style="color: #808080;">&#40;</span>m, number,<span style="color: #FF0000;">'1998-01-13'</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> = <span style="color: #FF0000;">'friday'</span></li></ol></div><div id="cb31345" style="display: none; color: red;"></div></div></div>

<p>That is really it for this post...</p><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/installing-scala-2-10-on">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/installing-scala-2-10-on#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/EnterpriseDev/?tempskin=_rss2&#38;disp=comments&#38;p=2007</wfw:commentRss>
		</item>
				<item>
			<title>Auto-Verifying Moqs</title>
			<link>http://blogs.lessthandot.com/index.php/EnterpriseDev/UnitTest/auto-verifying-moqs</link>
			<pubDate>Thu, 20 Dec 2012 14:06:00 +0000</pubDate>			<dc:creator>Alex Ullrich</dc:creator>
			<category domain="main">Unit Testing</category>			<guid isPermaLink="false">1982@http://blogs.lessthandot.com/</guid>
						<description>&lt;p&gt;After years of only being familiar with Rhino mocks, I have been using Moq for the last 10 months or so.  For the most part, I like it better.  The syntax seems easier to get people up to speed on, and there are situations where it really cuts down on the amount of test code you have to write.  This is about one of the situations where it doesn&#039;t.&lt;/p&gt;

&lt;p&gt;One of the things I always liked about Rhino Mocks was the idea of the mock repository, and the fact that when disposing of a mock repository all of your setups get verified automagically.  I have a lot of trouble remembering to add calls to VerifyAll when I&#039;m adding functionality to existing tests because I got so used to this behavior in the past.  When I noticed some tests where I had unnecessary mocks setup today I decided to do something about it.  Its not really anything special but figued I&#039;d share since I haven&#039;t posted for a while.&lt;/p&gt;

&lt;p&gt;Basically I added a base test fixture to the project that provides a means to create tracked mocks (similar to the MockRepository concept in Rhino).  It provides a method for mock creation, and adds all created mocks to a list that is then verified in the teardown method.  Pretty simple stuff but I found it handy.&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;csharp&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;csharp&quot; id=&quot;cb26247&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: #0600FF;&quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #0000FF;&quot;&gt;Collections&lt;/span&gt;.&lt;span style=&quot;color: #0000FF;&quot;&gt;Generic&lt;/span&gt;;&lt;br /&gt;&lt;span style=&quot;color: #0600FF;&quot;&gt;using&lt;/span&gt; Moq;&lt;br /&gt;&lt;span style=&quot;color: #0600FF;&quot;&gt;using&lt;/span&gt; NUnit.&lt;span style=&quot;color: #0000FF;&quot;&gt;Framework&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;color: #0600FF;&quot;&gt;namespace&lt;/span&gt; Project.&lt;span style=&quot;color: #0000FF;&quot;&gt;Tests&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0600FF;&quot;&gt;public&lt;/span&gt; abstract &lt;span style=&quot;color: #FF0000;&quot;&gt;class&lt;/span&gt; MockVerifyingTest&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0600FF;&quot;&gt;readonly&lt;/span&gt; List&amp;lt;Mock&amp;gt; _trackedMocks = &lt;a href=&quot;http://www.google.com/search?q=new+msdn.microsoft.com&quot;&gt;&lt;span style=&quot;color: #008000;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; List&amp;lt;Mock&amp;gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0600FF;&quot;&gt;protected&lt;/span&gt; Mock&amp;lt;T&amp;gt; GenerateTrackedMock&amp;lt;T&amp;gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;MockBehavior mockBehavior = MockBehavior.&lt;span style=&quot;color: #0600FF;&quot;&gt;Default&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt; where T : &lt;span style=&quot;color: #FF0000;&quot;&gt;class&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var mock = &lt;a href=&quot;http://www.google.com/search?q=new+msdn.microsoft.com&quot;&gt;&lt;span style=&quot;color: #008000;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; Mock&amp;lt;T&amp;gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;mockBehavior&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _trackedMocks.&lt;span style=&quot;color: #0000FF;&quot;&gt;Add&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;mock&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0600FF;&quot;&gt;return&lt;/span&gt; mock;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#91;&lt;/span&gt;TearDown&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0600FF;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;virtual&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;void&lt;/span&gt; TearDown&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0600FF;&quot;&gt;try&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0600FF;&quot;&gt;foreach&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;var mock &lt;span style=&quot;color: #0600FF;&quot;&gt;in&lt;/span&gt; _trackedMocks&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mock.&lt;span style=&quot;color: #0000FF;&quot;&gt;VerifyAll&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0600FF;&quot;&gt;finally&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _trackedMocks.&lt;span style=&quot;color: #0000FF;&quot;&gt;Clear&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb98263&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So now instead of something like this:&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;csharp&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;csharp&quot; id=&quot;cb50013&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#91;&lt;/span&gt;Test&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #0600FF;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;void&lt;/span&gt; ATest&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; var foo = &lt;a href=&quot;http://www.google.com/search?q=new+msdn.microsoft.com&quot;&gt;&lt;span style=&quot;color: #008000;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; Mock&amp;lt;IFoo&amp;gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;MockBehavior.&lt;span style=&quot;color: #0000FF;&quot;&gt;Strict&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; foo.&lt;span style=&quot;color: #0000FF;&quot;&gt;Setup&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;f =&amp;gt; f.&lt;span style=&quot;color: #0000FF;&quot;&gt;GetSomething&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #0000FF;&quot;&gt;Returns&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.google.com/search?q=new+msdn.microsoft.com&quot;&gt;&lt;span style=&quot;color: #008000;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; Something&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; var bar = &lt;a href=&quot;http://www.google.com/search?q=new+msdn.microsoft.com&quot;&gt;&lt;span style=&quot;color: #008000;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; Bar&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;foo&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; bar.&lt;span style=&quot;color: #0000FF;&quot;&gt;CodeUnderTest&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; foo.&lt;span style=&quot;color: #0000FF;&quot;&gt;VerifyAll&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb61664&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I can have my fixture inherit from MockVerifyingTest and write it like this:&lt;/p&gt;


&lt;p&gt;&lt;&lt;/p&gt;&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;csharp&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;csharp&quot; id=&quot;cb18481&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#91;&lt;/span&gt;Test&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #0600FF;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;void&lt;/span&gt; ATest&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; var foo = GenerateTrackedMock&amp;lt;IFoo&amp;gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;MockBehavior.&lt;span style=&quot;color: #0000FF;&quot;&gt;Strict&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; foo.&lt;span style=&quot;color: #0000FF;&quot;&gt;Setup&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;f =&amp;gt; f.&lt;span style=&quot;color: #0000FF;&quot;&gt;GetSomething&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #0000FF;&quot;&gt;Returns&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.google.com/search?q=new+msdn.microsoft.com&quot;&gt;&lt;span style=&quot;color: #008000;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; Something&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; var bar = &lt;a href=&quot;http://www.google.com/search?q=new+msdn.microsoft.com&quot;&gt;&lt;span style=&quot;color: #008000;&quot;&gt;new&lt;/span&gt;&lt;/a&gt; Bar&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;foo&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; bar.&lt;span style=&quot;color: #0000FF;&quot;&gt;CodeUnderTest&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb43835&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It only saves one line of test code in this example, but it can add up when dealing with tests that have several mocks.  I realize having this many mocks in play for a test is just asking for trouble, but I am dealing with a legacy system without any test coverage, so working in test coverage without any sweeping refactorings is imperative at this point.  We can make those changes later once we&#039;ve gotten through a release or two with the code that is now under test &lt;img src=&quot;http://blogs.lessthandot.com/rsc/smilies/icon_smile.gif&quot; title=&quot;:)&quot; alt=&quot;:)&quot; class=&quot;middle&quot; width=&quot;15&quot; height=&quot;15&quot; /&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/EnterpriseDev/UnitTest/auto-verifying-moqs&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>After years of only being familiar with Rhino mocks, I have been using Moq for the last 10 months or so.  For the most part, I like it better.  The syntax seems easier to get people up to speed on, and there are situations where it really cuts down on the amount of test code you have to write.  This is about one of the situations where it doesn't.</p>

<p>One of the things I always liked about Rhino Mocks was the idea of the mock repository, and the fact that when disposing of a mock repository all of your setups get verified automagically.  I have a lot of trouble remembering to add calls to VerifyAll when I'm adding functionality to existing tests because I got so used to this behavior in the past.  When I noticed some tests where I had unnecessary mocks setup today I decided to do something about it.  Its not really anything special but figued I'd share since I haven't posted for a while.</p>

<p>Basically I added a base test fixture to the project that provides a means to create tracked mocks (similar to the MockRepository concept in Rhino).  It provides a method for mock creation, and adds all created mocks to a list that is then verified in the teardown method.  Pretty simple stuff but I found it handy.</p>

<div class="codebox"><div class="codeheader"><span>csharp</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb50822'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb50822','cb13835'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="csharp" id="cb50822" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"><span style="color: #0600FF;">using</span> <span style="color: #000000;">System</span>.<span style="color: #0000FF;">Collections</span>.<span style="color: #0000FF;">Generic</span>;</li><li style="" class="li2"><span style="color: #0600FF;">using</span> Moq;</li><li style="" class="li1"><span style="color: #0600FF;">using</span> NUnit.<span style="color: #0000FF;">Framework</span>;</li><li style="" class="li2">&nbsp;</li><li style="" class="li1"><span style="color: #0600FF;">namespace</span> Project.<span style="color: #0000FF;">Tests</span></li><li style="" class="li2"><span style="color: #000000;">&#123;</span></li><li style="" class="li1">&nbsp; &nbsp; <span style="color: #0600FF;">public</span> abstract <span style="color: #FF0000;">class</span> MockVerifyingTest</li><li style="" class="li2">&nbsp; &nbsp; <span style="color: #000000;">&#123;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">readonly</span> List&lt;Mock&gt; _trackedMocks = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> List&lt;Mock&gt;<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</li><li style="" class="li2">&nbsp;</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">protected</span> Mock&lt;T&gt; GenerateTrackedMock&lt;T&gt;<span style="color: #000000;">&#40;</span>MockBehavior mockBehavior = MockBehavior.<span style="color: #0600FF;">Default</span><span style="color: #000000;">&#41;</span> where T : <span style="color: #FF0000;">class</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var mock = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Mock&lt;T&gt;<span style="color: #000000;">&#40;</span>mockBehavior<span style="color: #000000;">&#41;</span>;</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _trackedMocks.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>mock<span style="color: #000000;">&#41;</span>;</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">return</span> mock;</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></li><li style="" class="li1">&nbsp;</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#91;</span>TearDown<span style="color: #000000;">&#93;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">virtual</span> <span style="color: #0600FF;">void</span> TearDown<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">try</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>var mock <span style="color: #0600FF;">in</span> _trackedMocks<span style="color: #000000;">&#41;</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mock.<span style="color: #0000FF;">VerifyAll</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">finally</span></li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _trackedMocks.<span style="color: #0000FF;">Clear</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</li><li style="" class="li1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></li><li style="" class="li2">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span></li><li style="" class="li1">&nbsp; &nbsp; <span style="color: #000000;">&#125;</span></li><li style="" class="li2"><span style="color: #000000;">&#125;</span></li></ol></div><div id="cb13835" style="display: none; color: red;"></div></div></div>

<p>So now instead of something like this:</p>

<div class="codebox"><div class="codeheader"><span>csharp</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb51149'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb51149','cb12528'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="csharp" id="cb51149" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"><span style="color: #000000;">&#91;</span>Test<span style="color: #000000;">&#93;</span></li><li style="" class="li2"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> ATest<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> </li><li style="" class="li1"><span style="color: #000000;">&#123;</span></li><li style="" class="li2">&nbsp; &nbsp; var foo = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Mock&lt;IFoo&gt;<span style="color: #000000;">&#40;</span>MockBehavior.<span style="color: #0000FF;">Strict</span><span style="color: #000000;">&#41;</span>;</li><li style="" class="li1">&nbsp;</li><li style="" class="li2">&nbsp; &nbsp; foo.<span style="color: #0000FF;">Setup</span><span style="color: #000000;">&#40;</span>f =&gt; f.<span style="color: #0000FF;">GetSomething</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Returns</span><span style="color: #000000;">&#40;</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Something<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;</li><li style="" class="li1">&nbsp;</li><li style="" class="li2">&nbsp; &nbsp; var bar = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Bar<span style="color: #000000;">&#40;</span>foo<span style="color: #000000;">&#41;</span>;</li><li style="" class="li1">&nbsp;</li><li style="" class="li2">&nbsp; &nbsp; bar.<span style="color: #0000FF;">CodeUnderTest</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</li><li style="" class="li1">&nbsp;</li><li style="" class="li2">&nbsp; &nbsp; foo.<span style="color: #0000FF;">VerifyAll</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</li><li style="" class="li1"><span style="color: #000000;">&#125;</span></li></ol></div><div id="cb12528" style="display: none; color: red;"></div></div></div>

<p>I can have my fixture inherit from MockVerifyingTest and write it like this:</p>


<p><</p><div class="codebox"><div class="codeheader"><span>csharp</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb50147'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb50147','cb39592'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="csharp" id="cb50147" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1"><span style="color: #000000;">&#91;</span>Test<span style="color: #000000;">&#93;</span></li><li style="" class="li2"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> ATest<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> </li><li style="" class="li1"><span style="color: #000000;">&#123;</span></li><li style="" class="li2">&nbsp; &nbsp; var foo = GenerateTrackedMock&lt;IFoo&gt;<span style="color: #000000;">&#40;</span>MockBehavior.<span style="color: #0000FF;">Strict</span><span style="color: #000000;">&#41;</span>;</li><li style="" class="li1">&nbsp;</li><li style="" class="li2">&nbsp; &nbsp; foo.<span style="color: #0000FF;">Setup</span><span style="color: #000000;">&#40;</span>f =&gt; f.<span style="color: #0000FF;">GetSomething</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Returns</span><span style="color: #000000;">&#40;</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Something<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;</li><li style="" class="li1">&nbsp;</li><li style="" class="li2">&nbsp; &nbsp; var bar = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Bar<span style="color: #000000;">&#40;</span>foo<span style="color: #000000;">&#41;</span>;</li><li style="" class="li1">&nbsp;</li><li style="" class="li2">&nbsp; &nbsp; bar.<span style="color: #0000FF;">CodeUnderTest</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</li><li style="" class="li1"><span style="color: #000000;">&#125;</span></li></ol></div><div id="cb39592" style="display: none; color: red;"></div></div></div>

<p>It only saves one line of test code in this example, but it can add up when dealing with tests that have several mocks.  I realize having this many mocks in play for a test is just asking for trouble, but I am dealing with a legacy system without any test coverage, so working in test coverage without any sweeping refactorings is imperative at this point.  We can make those changes later once we've gotten through a release or two with the code that is now under test <img src="http://blogs.lessthandot.com/rsc/smilies/icon_smile.gif" title=":)" alt=":)" class="middle" width="15" height="15" /></p><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/EnterpriseDev/UnitTest/auto-verifying-moqs">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/EnterpriseDev/UnitTest/auto-verifying-moqs#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/EnterpriseDev/?tempskin=_rss2&#38;disp=comments&#38;p=1982</wfw:commentRss>
		</item>
				<item>
			<title>Java Training Day 5</title>
			<link>http://blogs.lessthandot.com/index.php/EnterpriseDev/application-lifecycle-management/java-training-day-5</link>
			<pubDate>Sat, 01 Dec 2012 00:41:00 +0000</pubDate>			<dc:creator>SQLDenis</dc:creator>
			<category domain="main">Application Lifecycle Management</category>			<guid isPermaLink="false">1922@http://blogs.lessthandot.com/</guid>
						<description>&lt;p&gt;Last day of the training and I am glad it is over...this stuff is draining&lt;/p&gt;

&lt;p&gt;Here is what was covered today&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network Programming&lt;/strong&gt;&lt;br /&gt;
Low Level TCP/IP Protocols&lt;br /&gt;
IPv4 and IPv6&lt;br /&gt;
UDP Multicast&lt;br /&gt;
TCP/IP&lt;/p&gt;

&lt;p&gt;Message Based protocols&lt;br /&gt;
HTTP&lt;br /&gt;
Connections framework using URL (Unified Resource Locator)&lt;/p&gt;

&lt;p&gt;Remote Objects&lt;br /&gt;
RMI (Remote Method Invocation)&lt;br /&gt;
CORBA (Common Object Request Broker Architecture)&lt;/p&gt;

&lt;p&gt;Optional packages supporting additional protocols&lt;br /&gt;
SOAP, Mail etc etc&lt;/p&gt;

&lt;p&gt;We talked about port numbers, here are some common ones that you might know&lt;/p&gt;

&lt;p&gt;20 &amp;amp; 21: File Transfer Protocol (FTP)&lt;br /&gt;
22: Secure Shell (SSH)&lt;br /&gt;
23: Telnet remote login service&lt;br /&gt;
25: Simple Mail Transfer Protocol (SMTP)&lt;br /&gt;
53: Domain Name System (DNS) service&lt;br /&gt;
80: Hypertext Transfer Protocol (HTTP)&lt;br /&gt;
110: Post Office Protocol (POP3)&lt;br /&gt;
119: Network News Transfer Protocol (NNTP)&lt;br /&gt;
143: Internet Message Access Protocol (IMAP)&lt;br /&gt;
161: Simple Network Management Protocol (SNMP)&lt;br /&gt;
443: HTTP Secure (HTTPS)&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Threads&lt;/strong&gt;&lt;br /&gt;
In an operating process, each running program is basically a process&lt;br /&gt;
The operating system schedules processes for execution&lt;br /&gt;
Each process has its own (virtual) address space&lt;br /&gt;
Communications between processes is hampered by context switching&lt;/p&gt;

&lt;p&gt;A thread is a flow of execution within a java process&lt;br /&gt;
The JVM schedules therads for execution&lt;br /&gt;
Threads share access to java objects&lt;br /&gt;
Communication between threads is quick&lt;/p&gt;

&lt;p&gt;On multi-CPU/multi-core machines, several threads can execute at the same time&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Executing with threads&lt;/strong&gt;&lt;br /&gt;
One thread is started automatically to execute main()&lt;br /&gt;
The main() method may start additional threads&lt;br /&gt;
Single threaded applications run until main() terminates&lt;br /&gt;
Multi threaded applications run until all threads have terminated or if one of the threads calls System.exit()&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Static methods manipulate the current thread&lt;/strong&gt;&lt;br /&gt;
currentThread() returns a refernce to the thread that is currently executing&lt;br /&gt;
yield() pauses the currently executing thread&lt;br /&gt;
sleep(int ms) blocks the currently executing thread for a specific milliseconds&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instance methods that manipulate a particular thread&lt;/strong&gt;&lt;br /&gt;
start() starts thread execution&lt;br /&gt;
getName() gets the name of the thread&lt;br /&gt;
interrupt() throws an exception or sets the interrupt status&lt;br /&gt;
join() waits for the thread to die&lt;br /&gt;
setPriority set the priority for a thread &lt;/p&gt;

&lt;p&gt;The run() method will hold the code to be executed by a thread&lt;/p&gt;


&lt;p&gt;The stop(), suspend() and resume() methods are deprecated&lt;/p&gt;

&lt;p&gt;Local variables are never shared between threads, threads can share memory on the heap like static variables, instance variables and members of arrays&lt;br /&gt;
We covered synchronization, thread scheduling&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;JDBC&lt;/strong&gt;&lt;br /&gt;
WE covered the regular DB related stuff, how to connect to a DB, explanation what the 4 type of jdbc drivers are, executing, statements, prepared statements and stored procedures&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Web programming&lt;/strong&gt;&lt;br /&gt;
We covered servlets, JSP, javabeans, struts, mvc...pretty much similar stuff I was doing in 2001 but now we have many more frameworks to makes things easier&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/EnterpriseDev/application-lifecycle-management/java-training-day-5&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>Last day of the training and I am glad it is over...this stuff is draining</p>

<p>Here is what was covered today</p>

<p><strong>Network Programming</strong><br />
Low Level TCP/IP Protocols<br />
IPv4 and IPv6<br />
UDP Multicast<br />
TCP/IP</p>

<p>Message Based protocols<br />
HTTP<br />
Connections framework using URL (Unified Resource Locator)</p>

<p>Remote Objects<br />
RMI (Remote Method Invocation)<br />
CORBA (Common Object Request Broker Architecture)</p>

<p>Optional packages supporting additional protocols<br />
SOAP, Mail etc etc</p>

<p>We talked about port numbers, here are some common ones that you might know</p>

<p>20 &amp; 21: File Transfer Protocol (FTP)<br />
22: Secure Shell (SSH)<br />
23: Telnet remote login service<br />
25: Simple Mail Transfer Protocol (SMTP)<br />
53: Domain Name System (DNS) service<br />
80: Hypertext Transfer Protocol (HTTP)<br />
110: Post Office Protocol (POP3)<br />
119: Network News Transfer Protocol (NNTP)<br />
143: Internet Message Access Protocol (IMAP)<br />
161: Simple Network Management Protocol (SNMP)<br />
443: HTTP Secure (HTTPS)</p>



<p><strong>Threads</strong><br />
In an operating process, each running program is basically a process<br />
The operating system schedules processes for execution<br />
Each process has its own (virtual) address space<br />
Communications between processes is hampered by context switching</p>

<p>A thread is a flow of execution within a java process<br />
The JVM schedules therads for execution<br />
Threads share access to java objects<br />
Communication between threads is quick</p>

<p>On multi-CPU/multi-core machines, several threads can execute at the same time</p>

<p><strong>Executing with threads</strong><br />
One thread is started automatically to execute main()<br />
The main() method may start additional threads<br />
Single threaded applications run until main() terminates<br />
Multi threaded applications run until all threads have terminated or if one of the threads calls System.exit()</p>

<p><strong>Static methods manipulate the current thread</strong><br />
currentThread() returns a refernce to the thread that is currently executing<br />
yield() pauses the currently executing thread<br />
sleep(int ms) blocks the currently executing thread for a specific milliseconds</p>

<p><strong>Instance methods that manipulate a particular thread</strong><br />
start() starts thread execution<br />
getName() gets the name of the thread<br />
interrupt() throws an exception or sets the interrupt status<br />
join() waits for the thread to die<br />
setPriority set the priority for a thread </p>

<p>The run() method will hold the code to be executed by a thread</p>


<p>The stop(), suspend() and resume() methods are deprecated</p>

<p>Local variables are never shared between threads, threads can share memory on the heap like static variables, instance variables and members of arrays<br />
We covered synchronization, thread scheduling</p>



<p><strong>JDBC</strong><br />
WE covered the regular DB related stuff, how to connect to a DB, explanation what the 4 type of jdbc drivers are, executing, statements, prepared statements and stored procedures</p>


<p><strong>Web programming</strong><br />
We covered servlets, JSP, javabeans, struts, mvc...pretty much similar stuff I was doing in 2001 but now we have many more frameworks to makes things easier</p><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/EnterpriseDev/application-lifecycle-management/java-training-day-5">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/EnterpriseDev/application-lifecycle-management/java-training-day-5#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/EnterpriseDev/?tempskin=_rss2&#38;disp=comments&#38;p=1922</wfw:commentRss>
		</item>
				<item>
			<title>Java Training Day 4</title>
			<link>http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/java-training-day-4</link>
			<pubDate>Thu, 29 Nov 2012 18:55:00 +0000</pubDate>			<dc:creator>SQLDenis</dc:creator>
			<category domain="alt">Application Server</category>
<category domain="main">Java EE</category>
<category domain="alt">Application Lifecycle Management</category>			<guid isPermaLink="false">1917@http://blogs.lessthandot.com/</guid>
						<description>&lt;p&gt;Today was day four of our Java training, we looked at generics, collection and IO today, here is what was covered&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Collections Framework&lt;/strong&gt;&lt;br /&gt;
Legacy Container Classes&lt;br /&gt;
A container is an object that holds a collection of other objects&lt;br /&gt;
An array is a simple container. Arrays have a couple of limitations&lt;br /&gt;
. The size is fixed&lt;br /&gt;
. All the members of the array must be of the same type&lt;br /&gt;
. You can&#039;t add methods and attributes to an array&lt;/p&gt;

&lt;p&gt;The java.util package has two container classes as well as an supporting interface&lt;/p&gt;

&lt;p&gt;Vector class&lt;br /&gt;
Has add() and remove() methods, the elementAt() method let&#039;s you retrieve an element at a specified index&lt;br /&gt;
The Stack subclass provides the push() and pop() methods, this will support a LIFO stack&lt;/p&gt;


&lt;p&gt;Hashtable class&lt;br /&gt;
This is an expandable associative array&lt;br /&gt;
The entries are stored as key/value pairs, no dups allowed&lt;br /&gt;
The Properties subclass will hold the name/value pairs&lt;/p&gt;

&lt;p&gt;The Enumeration interface can be used to traverse either the vector or the hashtable objects. Enumeration  has hasMoreElements() and nextElements() methods&lt;/p&gt;

&lt;p&gt;Legacy Container Classes Disadvantages&lt;br /&gt;
It is not type safe, the containers can hold any kind of objects&lt;br /&gt;
The references must be downcast explicitly if you want to access the objects&lt;br /&gt;
They are synchronized, performance hit&lt;br /&gt;
Code needs to be rewritten if you want to replace one container with a container from another type&lt;/p&gt;


&lt;p&gt;Vector,  Hashtable and the Enumeration interface in Java SE 5+&lt;br /&gt;
Vector,  Hashtable and the Enumeration interface have been redefined as generics&lt;br /&gt;
Vector is now Vector&amp;lt;E&amp;gt; and it implements the List&amp;lt;E&amp;gt;&amp;gt; interface&lt;br /&gt;
Hashtable  is now Hashtable &amp;lt;K,V&amp;gt; and implements the Map&amp;lt;K ,V&amp;gt; interface&lt;br /&gt;
Enumeration  is now Enumeration &amp;lt;E&amp;gt;.&lt;br /&gt;
Enumeration   has been superseded by the Iterator interface&lt;/p&gt;

&lt;p&gt;The enhanced for loop (or for each loop) works automatically with the generic versions of the containers&lt;/p&gt;


&lt;p&gt;Collections Framework&lt;br /&gt;
The Collections Framework is a unified framework fo manipulating collections of objects&lt;br /&gt;
Programmers can choose from a variety of structures&lt;/p&gt;

&lt;p&gt;The collections framework consists of:&lt;/p&gt;
&lt;ul&gt;

  &lt;li&gt;Collection Interfaces - Represent different types of collections, such as sets, lists and maps. These interfaces form the basis of the framework.&lt;/li&gt;

  &lt;li&gt;General-purpose Implementations - Primary implementations of the collection interfaces.&lt;/li&gt;

  &lt;li&gt;Legacy Implementations - The collection classes from earlier releases, Vector and Hashtable, have been retrofitted to implement the collection interfaces.&lt;/li&gt;

  &lt;li&gt;Special-purpose Implementations - Implementations designed for use in special situations. These implementations display nonstandard performance characteristics, usage restrictions, or behavior.&lt;/li&gt;

  &lt;li&gt;Concurrent Implementations - Implementations designed for highly concurrent use.&lt;br /&gt;
Wrapper Implementations - Add functionality, such as synchronization, to other implementations.&lt;/li&gt;

  &lt;li&gt;Convenience Implementations - High-performance &quot;mini-implementations&quot; of the collection interfaces.&lt;/li&gt;

  &lt;li&gt;Abstract Implementations - Partial implementations of the collection interfaces to facilitate custom implementations.&lt;/li&gt;

  &lt;li&gt;Algorithms - Static methods that perform useful functions on collections, such as sorting a list.&lt;/li&gt;

  &lt;li&gt;Infrastructure - Interfaces that provide essential support for the collection interfaces.&lt;/li&gt;

  &lt;li&gt;Array Utilities - Utility functions for arrays of primitives and reference objects. Not, strictly speaking, a part of the Collections Framework, this functionality was added to the Java platform at the same time and relies on some of the same infrastructure.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Collection Implementations&lt;br /&gt;
The general purpose implementations are summarized in the table below:&lt;/p&gt;
&lt;div class=&quot;tables&quot;&gt;&lt;table border=&quot;0&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th colspan=&quot;2&quot; rowspan=&quot;2&quot; align=&quot;center&quot; border=&quot;0&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th colspan=&quot;5&quot;&gt;&lt;font size=&quot;+1&quot;&gt;Implementations&lt;/font&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Hash Table&lt;/th&gt;
&lt;th&gt;Resizable Array&lt;/th&gt;
&lt;th&gt;Balanced Tree&lt;/th&gt;
&lt;th&gt;Linked List&lt;/th&gt;
&lt;th&gt;Hash Table + Linked List&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th rowspan=&quot;4&quot;&gt;&lt;font size=&quot;+1&quot;&gt;Interfaces&lt;/font&gt;&lt;/th&gt;
&lt;th&gt;Set&lt;/th&gt;
&lt;td&gt;&lt;a href=
&quot;http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html&quot;&gt;&lt;tt&gt;HashSet&lt;/tt&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href=
&quot;http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/TreeSet.html&quot;&gt;&lt;tt&gt;TreeSet&lt;/tt&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href=
&quot;http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html&quot;&gt;&lt;tt&gt;LinkedHashSet&lt;/tt&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;List&lt;/th&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href=
&quot;http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html&quot;&gt;&lt;tt&gt;ArrayList&lt;/tt&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href=
&quot;http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html&quot;&gt;&lt;tt&gt;LinkedList&lt;/tt&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Deque&lt;/th&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href=
&quot;http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/ArrayDeque.html&quot;&gt;&lt;tt&gt;ArrayDeque&lt;/tt&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href=
&quot;http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html&quot;&gt;&lt;tt&gt;LinkedList&lt;/tt&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Map&lt;/th&gt;
&lt;td&gt;&lt;a href=
&quot;http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html&quot;&gt;&lt;tt&gt;HashMap&lt;/tt&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href=
&quot;http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html&quot;&gt;&lt;tt&gt;TreeMap&lt;/tt&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;a href=
&quot;http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html&quot;&gt;&lt;tt&gt;LinkedHashMap&lt;/tt&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Code to the interface, not to the class, you can now change the container without having to make code changes&lt;/p&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;java&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;java&quot; id=&quot;cb14569&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;ArrayList&amp;lt;Integer&amp;gt; &amp;nbsp; list &amp;nbsp;= &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; ArrayList&amp;lt;Integer&amp;gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;LinkedList&amp;lt;Integer&amp;gt; &amp;nbsp;list = &amp;nbsp;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; LinkedList&amp;lt;Integer&amp;gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb91562&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;codebox&quot;&gt;&lt;div class=&quot;codeheader&quot;&gt;Code: &lt;span&gt;java&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;codeholder&quot;&gt;&lt;div class=&quot;java&quot; id=&quot;cb6032&quot; style=&quot;display: block; color: rgb(0, 0, 0);&quot;&gt;List&amp;lt;Integer&amp;gt; list &amp;nbsp;= &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; ArrayList&amp;lt;Integer&amp;gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;List&amp;lt;Integer&amp;gt; list = &amp;nbsp;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; LinkedList&amp;lt;Integer&amp;gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;cb18273&quot; style=&quot;display: none; color: red;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;



&lt;p&gt;There is a tutorial availabe on the Oracle website here: &lt;a href=&quot;http://docs.oracle.com/javase/tutorial/collections/index.html&quot;&gt;http://docs.oracle.com/javase/tutorial/collections/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exceptions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Traditional&lt;br /&gt;
Inefficient, checks must be done even if stuff doesn&#039;t blow up&lt;br /&gt;
Difficult to maintain&lt;br /&gt;
Using a return value as both an output value and an error status is confusing&lt;br /&gt;
Compiler does not enforce error checking&lt;/p&gt;

&lt;p&gt;Using Exceptions&lt;br /&gt;
Compiler can enforce proper exception handling&lt;br /&gt;
Exception is caught by a block designed to handle the exception&lt;br /&gt;
Errors cause by constructors, initializers and other code that doesn&#039;t return a return value&lt;/p&gt;


&lt;p&gt;All exceptions objects are subclasses of java.lang.Throwable and they inherit its methods&lt;br /&gt;
Error, Exception and RuntimeException are treated differently by the compiler&lt;br /&gt;
Error, this mean as major system-level error occured&lt;br /&gt;
RuntimeException , logic or data validateion error that should have been found and fixed during development&lt;br /&gt;
Exception, run-time problems like a file that can&#039;t be found or a network problem&lt;br /&gt;
 &lt;/p&gt;


&lt;p&gt;A program can catch exceptions by using a combination of the try, catch, and finally blocks.&lt;/p&gt;

&lt;p&gt;The try block identifies a block of code in which an exception can occur.&lt;br /&gt;
The catch block identifies a block of code, known as an exception handler, that can handle a particular type of exception.&lt;br /&gt;
The finally block identifies a block of code that is guaranteed to execute, and is the right place to close files, recover resources, and otherwise clean up after the code enclosed in the try block.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Assert&lt;/strong&gt;&lt;br /&gt;
This was added in Java 1.4, it is a simple way to check run-time conditions and throw exceptions when you are debugging code&lt;br /&gt;
It can be enabled or disabled at runtime, by default they are disabled, use the -ea switch from the command line to enable it. Since Java doesn&#039;t have a preprocessor this would be a way to do testing without having to modify the code&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Input/Output&lt;/strong&gt;&lt;br /&gt;
We looked at IO and the different IO classes to work with files, streams sockets etc etc&lt;/p&gt;

&lt;p&gt;Here is a list of the I/O Streams&lt;/p&gt;

&lt;p&gt;Byte Streams &lt;br /&gt;
handle I/O of raw binary data.&lt;/p&gt;

&lt;p&gt;Character Streams &lt;br /&gt;
handle I/O of character data, automatically handling translation to and from the local character set.&lt;/p&gt;

&lt;p&gt;Buffered Streams &lt;br /&gt;
optimize input and output by reducing the number of calls to the native API.&lt;/p&gt;

&lt;p&gt;Scanning and Formatting &lt;br /&gt;
allows a program to read and write formatted text.&lt;/p&gt;

&lt;p&gt;I/O from the Command Line &lt;br /&gt;
describes the Standard Streams and the Console object.&lt;/p&gt;

&lt;p&gt;Data Streams &lt;br /&gt;
handle binary I/O of primitive data type and String values.&lt;/p&gt;

&lt;p&gt;Object Streams &lt;br /&gt;
handle binary I/O of objects.&lt;/p&gt;

&lt;p&gt;That is all for today&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/java-training-day-4&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://lessthandot.com/&quot;&gt;LessThanDot&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>Today was day four of our Java training, we looked at generics, collection and IO today, here is what was covered</p>

<p><strong>The Collections Framework</strong><br />
Legacy Container Classes<br />
A container is an object that holds a collection of other objects<br />
An array is a simple container. Arrays have a couple of limitations<br />
. The size is fixed<br />
. All the members of the array must be of the same type<br />
. You can't add methods and attributes to an array</p>

<p>The java.util package has two container classes as well as an supporting interface</p>

<p>Vector class<br />
Has add() and remove() methods, the elementAt() method let's you retrieve an element at a specified index<br />
The Stack subclass provides the push() and pop() methods, this will support a LIFO stack</p>


<p>Hashtable class<br />
This is an expandable associative array<br />
The entries are stored as key/value pairs, no dups allowed<br />
The Properties subclass will hold the name/value pairs</p>

<p>The Enumeration interface can be used to traverse either the vector or the hashtable objects. Enumeration  has hasMoreElements() and nextElements() methods</p>

<p>Legacy Container Classes Disadvantages<br />
It is not type safe, the containers can hold any kind of objects<br />
The references must be downcast explicitly if you want to access the objects<br />
They are synchronized, performance hit<br />
Code needs to be rewritten if you want to replace one container with a container from another type</p>


<p>Vector,  Hashtable and the Enumeration interface in Java SE 5+<br />
Vector,  Hashtable and the Enumeration interface have been redefined as generics<br />
Vector is now Vector&lt;E&gt; and it implements the List&lt;E&gt;&gt; interface<br />
Hashtable  is now Hashtable &lt;K,V&gt; and implements the Map&lt;K ,V&gt; interface<br />
Enumeration  is now Enumeration &lt;E&gt;.<br />
Enumeration   has been superseded by the Iterator interface</p>

<p>The enhanced for loop (or for each loop) works automatically with the generic versions of the containers</p>


<p>Collections Framework<br />
The Collections Framework is a unified framework fo manipulating collections of objects<br />
Programmers can choose from a variety of structures</p>

<p>The collections framework consists of:</p>
<ul>

  <li>Collection Interfaces - Represent different types of collections, such as sets, lists and maps. These interfaces form the basis of the framework.</li>

  <li>General-purpose Implementations - Primary implementations of the collection interfaces.</li>

  <li>Legacy Implementations - The collection classes from earlier releases, Vector and Hashtable, have been retrofitted to implement the collection interfaces.</li>

  <li>Special-purpose Implementations - Implementations designed for use in special situations. These implementations display nonstandard performance characteristics, usage restrictions, or behavior.</li>

  <li>Concurrent Implementations - Implementations designed for highly concurrent use.<br />
Wrapper Implementations - Add functionality, such as synchronization, to other implementations.</li>

  <li>Convenience Implementations - High-performance "mini-implementations" of the collection interfaces.</li>

  <li>Abstract Implementations - Partial implementations of the collection interfaces to facilitate custom implementations.</li>

  <li>Algorithms - Static methods that perform useful functions on collections, such as sorting a list.</li>

  <li>Infrastructure - Interfaces that provide essential support for the collection interfaces.</li>

  <li>Array Utilities - Utility functions for arrays of primitives and reference objects. Not, strictly speaking, a part of the Collections Framework, this functionality was added to the Java platform at the same time and relies on some of the same infrastructure.</li>
</ul>



<p>Collection Implementations<br />
The general purpose implementations are summarized in the table below:</p>
<div class="tables"><table border="0">
<thead>
<tr>
<th colspan="2" rowspan="2" align="center" border="0">&nbsp;</th>
<th colspan="5"><font size="+1">Implementations</font></th>
</tr>
<tr>
<th>Hash Table</th>
<th>Resizable Array</th>
<th>Balanced Tree</th>
<th>Linked List</th>
<th>Hash Table + Linked List</th>
</tr>
<tr>
<th rowspan="4"><font size="+1">Interfaces</font></th>
<th>Set</th>
<td><a href=
"http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html"><tt>HashSet</tt></a></td>
<td>&nbsp;</td>
<td><a href=
"http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/TreeSet.html"><tt>TreeSet</tt></a></td>
<td>&nbsp;</td>
<td><a href=
"http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html"><tt>LinkedHashSet</tt></a></td>
</tr>
<tr>
<th>List</th>
<td>&nbsp;</td>
<td><a href=
"http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html"><tt>ArrayList</tt></a></td>
<td>&nbsp;</td>
<td><a href=
"http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html"><tt>LinkedList</tt></a></td>
<td>&nbsp;</td>
</tr>
<tr>
<th>Deque</th>
<td>&nbsp;</td>
<td><a href=
"http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/ArrayDeque.html"><tt>ArrayDeque</tt></a></td>
<td>&nbsp;</td>
<td><a href=
"http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html"><tt>LinkedList</tt></a></td>
<td>&nbsp;</td>
</tr>
<tr>
<th>Map</th>
<td><a href=
"http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html"><tt>HashMap</tt></a></td>
<td>&nbsp;</td>
<td><a href=
"http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html"><tt>TreeMap</tt></a></td>
<td>&nbsp;</td>
<td><a href=
"http://docs.oracle.com/javase/6/docs/api/java/utilhttp://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html"><tt>LinkedHashMap</tt></a></td>
</tr>
</thead>
</table></div>




<p>Code to the interface, not to the class, you can now change the container without having to make code changes</p>

<div class="codebox"><div class="codeheader"><span>java</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb93220'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb93220','cb37968'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="java" id="cb93220" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">ArrayList&lt;Integer&gt; &nbsp; list &nbsp;= <span style="color: #000000; font-weight: bold;">new</span> ArrayList&lt;Integer&gt;<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</li><li style="" class="li2">LinkedList&lt;Integer&gt; &nbsp;list = &nbsp;<span style="color: #000000; font-weight: bold;">new</span> LinkedList&lt;Integer&gt;<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</li></ol></div><div id="cb37968" style="display: none; color: red;"></div></div></div>

<div class="codebox"><div class="codeheader"><span>java</span><div class="codebox_javascript_links"><a href="http://blogs.lessthandot.com" onclick="linenumberOnOff('cb32005'); return false;">Line number Off</a> | <a href="http://blogs.lessthandot.com#" onclick="expandCode('cb32005','cb88884'); return false;">Hide</a> | <a href="http://blogs.lessthandot.com#" onclick="selectCode(this); return false;">Select all</a></div></div><!-- we need this dummy div to fix a firefox bug when selecting code lines --><div class="codeholder"><div class="java" id="cb32005" style="display: block; color: rgb(0, 0, 0);"><ol><li style="" class="li1">List&lt;Integer&gt; list &nbsp;= <span style="color: #000000; font-weight: bold;">new</span> ArrayList&lt;Integer&gt;<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</li><li style="" class="li2">List&lt;Integer&gt; list = &nbsp;<span style="color: #000000; font-weight: bold;">new</span> LinkedList&lt;Integer&gt;<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</li></ol></div><div id="cb88884" style="display: none; color: red;"></div></div></div>



<p>There is a tutorial availabe on the Oracle website here: <a href="http://docs.oracle.com/javase/tutorial/collections/index.html">http://docs.oracle.com/javase/tutorial/collections/index.html</a></p>

<p><strong>Exceptions</strong></p>

<p>Traditional<br />
Inefficient, checks must be done even if stuff doesn't blow up<br />
Difficult to maintain<br />
Using a return value as both an output value and an error status is confusing<br />
Compiler does not enforce error checking</p>

<p>Using Exceptions<br />
Compiler can enforce proper exception handling<br />
Exception is caught by a block designed to handle the exception<br />
Errors cause by constructors, initializers and other code that doesn't return a return value</p>


<p>All exceptions objects are subclasses of java.lang.Throwable and they inherit its methods<br />
Error, Exception and RuntimeException are treated differently by the compiler<br />
Error, this mean as major system-level error occured<br />
RuntimeException , logic or data validateion error that should have been found and fixed during development<br />
Exception, run-time problems like a file that can't be found or a network problem<br />
 </p>


<p>A program can catch exceptions by using a combination of the try, catch, and finally blocks.</p>

<p>The try block identifies a block of code in which an exception can occur.<br />
The catch block identifies a block of code, known as an exception handler, that can handle a particular type of exception.<br />
The finally block identifies a block of code that is guaranteed to execute, and is the right place to close files, recover resources, and otherwise clean up after the code enclosed in the try block.</p>



<p><strong>Assert</strong><br />
This was added in Java 1.4, it is a simple way to check run-time conditions and throw exceptions when you are debugging code<br />
It can be enabled or disabled at runtime, by default they are disabled, use the -ea switch from the command line to enable it. Since Java doesn't have a preprocessor this would be a way to do testing without having to modify the code</p>


<p><strong>Input/Output</strong><br />
We looked at IO and the different IO classes to work with files, streams sockets etc etc</p>

<p>Here is a list of the I/O Streams</p>

<p>Byte Streams <br />
handle I/O of raw binary data.</p>

<p>Character Streams <br />
handle I/O of character data, automatically handling translation to and from the local character set.</p>

<p>Buffered Streams <br />
optimize input and output by reducing the number of calls to the native API.</p>

<p>Scanning and Formatting <br />
allows a program to read and write formatted text.</p>

<p>I/O from the Command Line <br />
describes the Standard Streams and the Console object.</p>

<p>Data Streams <br />
handle binary I/O of primitive data type and String values.</p>

<p>Object Streams <br />
handle binary I/O of objects.</p>

<p>That is all for today</p><div class="item_footer"><p><small><a href="http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/java-training-day-4">Original post</a> blogged on <a href="http://lessthandot.com/">LessThanDot</a>.</small></p></div>]]></content:encoded>
								<comments>http://blogs.lessthandot.com/index.php/EnterpriseDev/AppServer/JEE/java-training-day-4#comments</comments>
			<wfw:commentRss>http://blogs.lessthandot.com/index.php/EnterpriseDev/?tempskin=_rss2&#38;disp=comments&#38;p=1917</wfw:commentRss>
		</item>
			</channel>
</rss>
