<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Dave Crook's Dev Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/dave_crooks_dev_blog/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/dave_crooks_dev_blog/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:20:58 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Microsoft R Open Training Series</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_crooks_dev_blog/microsoft-r-open-training-series</link>
      <pubDate>Sun, 05 Jun 2016 18:02:06 GMT</pubDate>
      <dc:creator><![CDATA[Dave Crook]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_crooks_dev_blog/?p=475</guid>
      <description><![CDATA[Hello World!

This is another pull from my primary develpment blog, located here.
Ever wonder the...]]></description>
      <content:encoded><![CDATA[Hello World!

This is another pull from my primary develpment blog, located here.
Ever wonder the difference between R and Microsoft R?  Considering learning R as a programming language?  You should probably watch this video.  It is the first in a 4 part series to give you the jump start you need to becoming a professional data scientist with R.

<a href="https://dacrook.com/introduction-to-microsoft-r-open/">Part 1: Introduction to Microsoft R Open.</a>

<a href="https://dacrook.com/intro-to-r-data-structures/">Part 2: Introduction to R Data Structures</a>

<a href="https://dacrook.com/intro-to-data-manipulation-with-r/">Part 3: Data Manipulation with R</a>

<a href="https://dacrook.com/r-jump-start-beautiful-data-visualizations/">Part 4: Beautiful Visualizations with R</a>

<!--more-->
<iframe src="https://channel9.msdn.com/Shows/SupervisionNotRequired/2/player?format=html5" width="1280" height="720" frameborder="0" allowfullscreen="allowfullscreen"></iframe>]]></content:encoded>
    </item>
    <item>
      <title>Sigmoid Classifiers Decoded</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_crooks_dev_blog/sigmoid-classifiers-decoded</link>
      <pubDate>Sun, 05 Jun 2016 17:54:08 GMT</pubDate>
      <dc:creator><![CDATA[Dave Crook]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_crooks_dev_blog/?p=465</guid>
      <description><![CDATA[Hello World,

Another pull from my primary dev blog.
Sigmoid really isn't that complicated (once...]]></description>
      <content:encoded><![CDATA[Hello World,

Another pull from my primary<a href="https://dacrook.com/sigmoid-for-classifiers-decoded/"> dev blog</a>.
Sigmoid really isn't that complicated (once your understand it of course).  Some back knowledge in case you are coming at this totally fresh is that the Sigmoid function is used in machine learning primarily as a hypothesis function for classifiers.  What is interesting is that this same function is used for binary classifiers, multi-class classifiers and is the backbone of modern neural networks.

Here is the sigmoid function:    <span style="line-height: 1.5">$latex \frac{ 1 }{ 1 + e^{-z}} $</span>

<!--more-->
<h2>Bounded Function</h2>
So lets think about this for a minute.  It is used for a variety of classifiers.  Sigmoid is basically a bounded function.  The output of sigmoid is a value that is between 0 and 1.  In the case of binary classifiers, this is straight forward.
<h2>Sigmoid's Output</h2>
If sigmoid outputs .75, you translate this as there is a 75% probability that this thing is 1 and a 25% probability that this thing is 0.  In this scenario we would tell the user "this thing is a 1 with 75% probability".  In the case of multi-class classifiers, you use the one-vs-all methodology and pick the highest.  So lets say you have classes A, B, C and D.  The first call would be "is it A or not", the second would be "is it B or not" etc.  You would get back an answer that looks like this: [ .02, .01, .94, .03].  Where .94 is representative of C.  We would then return to the user "this thing is a C with 94% probability".
<h2>So how does it work?</h2>
Well sigmoid is a "trained" function just like our linear regression, so first, be aware of that.  If we take a look at the sigmoid function $latex \frac{ 1 }{ 1 + e^{-z}} $ you will notice this z thing.  This is the magic parameter.  This is z is actually the vector of prediction parameters times the vector of theta values times - 1 or $latex X * \theta * -1 $

What does this mean?  Well same as everything else, you are calculating a contribution by defining a polynomial function, some weights and fitting in the values of the sample.  So to create a basic linear decision boundary, with 2 parameters, you could do: $latex y = \theta_{x1} * x_1 + \theta_{x2} * x_2 + \theta_b $ you could also define more complex polynomial functions to create more complex decision boundaries or account for potential acceleration between combinations of parameters.

<a href="https://dacrook.com/wp-content/uploads/2016/06/decisionBoundary.png"><img class="alignnone size-medium wp-image-9930" src="https://dacrook.com/wp-content/uploads/2016/06/decisionBoundary-300x223.png" alt="decisionBoundary" width="300" height="223" /></a>

As you can see here, the blue line divides two classes of data.
<h2>What about the 1 or 0 thing?</h2>
Thats what the sigmoid function does.  So now that we have our "linear regression".  We compress that term such that it can only output values between 1 and 0.  Take note $latex \frac{ 1 }{ 1 + e^{-z}} $ since the entire function is 1 / something, the largest it can ever get is 1.  the larger z gets, the closer to zero the term goes, the smaller z gets the closer to 1 the result goes.
<h2>So where do the magic parameters come from?</h2>
I'll do an article later on generating complex polynomials on the fly, but for now, just think "combinations of parameters that can possibly be circular and have other funny curves".  so $latex y = \theta_{x1} * x_1 + \theta_{x2} * x_2 + \theta_{x12} * x_1 * x_2 + \theta_{x1-2} * x_1^2 + \theta_{x2-2} * x_2^2 $ is a great example, but looking at your data is crucial, and also remember overfitting can become problematic, so use regularization.

Finally the last part is, <a href="https://dacrook.com/basic-gradient-descent/">gradient descent</a> is used for training those magic theta values.]]></content:encoded>
    </item>
    <item>
      <title>Getting Linear with it</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_crooks_dev_blog/getting-linear-with-it</link>
      <pubDate>Sun, 05 Jun 2016 17:52:54 GMT</pubDate>
      <dc:creator><![CDATA[Dave Crook]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_crooks_dev_blog/?p=455</guid>
      <description><![CDATA[Hello World!

This is a pull from my primary dev blog: www.dacrook.com.  This article is Linear...]]></description>
      <content:encoded><![CDATA[Hello World!

This is a pull from my primary dev blog: www.dacrook.com.  This article is Linear Regression Cost Functions with Linear Algebra :).

So I wrote an article earlier <a href="https://dacrook.com/linear-regression-from-scratch/">"Linear Regression From Scratch"</a>.  Many folks have pointed out that this is in fact not the optimal approach.  Now being the perfectionist I decided to re-implement.  Not to mention it works great in my own libraries.  The following article discussing converting the original code into code that uses linear algebra.  Beyond this, it still works in PCL for xamarin,  Hoo-Rah Xamarin!

<!--more-->

Before we get started, note that you will need to install the nuget packages <a href="https://numerics.mathdotnet.com/">MathNumerics and MathNumerics.FSharp</a>.  If you are not compiling to <a href="https://danrigby.com/2014/05/14/supported-pcl-profiles-xamarin-for-visual-studio-2/">PCL for Xamarin</a>, you should probably just install the entire<a href="https://fslab.org/"> fslab package</a>, as it has a ton of great stuff for data science and machine learning.

So lets take another look at the original Sum of Squares function...
<pre class="brush:py">let SumSquaredError (predictionModel:IPredictionModel) (trainingData:UnivariateDataPoint seq) =
trainingData
|&gt; Seq.map(fun point -&gt; point.X
|&gt; predictionModel.PredictValue
|&gt; subtract point.Y
|&gt; square
)
|&gt; Seq.sumBy(fun point -&gt; point)
</pre>
Here are the issues with this solution:
1. We need this prediction model thing. (more code)
2. Our training data is this data point type. (more code)
3. Seq.map is essentially a for loop going through every object in the sequence and performing the manipulation (slow)
4. We still do this sum thing. (slow)
5. I forgot to divide by the length of the sequence.
6. We can't take advantage of a GPU or massive parallelization

Lets see what I have transformed this into.
<pre class="brush:py">let SumSquares (theta:Vector&lt;float&gt;) (y:Vector&lt;float&gt;) (trainingData:Matrix&lt;float&gt;) =
let m = trainingData.RowCount |&gt; float
(trainingData * theta)
|&gt; subtract y
|&gt; square
|&gt; divideBy m
</pre>
Here are the immediate advantages
1. Cleaner and easier to read
2. Maps more closely to mathematical notation
3. Uses the MathNumerics optimizations for Linear Algebra.
4. Deals with polynomials fine without extra code overhead.

Lets take a look at the test data
<pre class="brush:py"> let tData = matrix [[ 1.0; 2.0]
[1.0; 3.0]
[1.0; 3.0]
[1.0; 4.0]]
let yVals = vector [ 5.0; 6.0; 7.0; 11.0]
let theta = vector [1.0; 0.2]
tData |&gt; SumSquares theta yVals
</pre>
Ok, so this is different from the other examples usage for sure. We have to extract our features and transform them into these matrix and array things that most folks probably aren't familiar with.

So, how in the world did we essentially remove 2 for loops by doing this?  Lets dive line by line starting with our example data.

<strong>The Set Up Data</strong>

tData is what is considered a 4x2 matrix.  It has 4 rows and 2 columns.  This is indicative of a polynomial of the form y = mx + b (or the function of a line).  This is a standard univariate polynomial.  Or in lamest terms, you have one predictor variable such as the square footage of a house predicts the price.

Now wait a second, what do you mean one variable?  There are two there!  Yes, Price = m*squarefootage + 1*yaxismodifier.  Where m is how much the square footage affects the price and the yaxismodifier is a boost to get to minimum home size.  In all linear regressions, you will at a minimum have this extra 1.  So when you extract your data points from the data frame, you will need to append a column of ones.

Ok, thats cool, now what about yVals?  This is a Vector, which can be thought of as a 1xn matrix.  There is 1 row and n columns.  yVals are simply the known values of our observed data set.  In this instance if you oriented (or transposed) yVals to be a column with 5,6,7,11 and appended it as a column to the end of tData, you would have the actual for each observation.

Finally, theta is another vector or 1 x n matrix.  This is our list of values, or our weights for how much to affect something.  These are the m and b in the equation y = mx + b

<strong>The Equation</strong>
<pre class="brush:py">let SumSquares (theta:Vector&lt;float&gt;) (y:Vector&lt;float&gt;) (trainingData:Matrix&lt;float&gt;) =
let m = trainingData.RowCount |&gt; float
(trainingData * theta)
|&gt; subtract y
|&gt; square
|&gt; divideBy m</pre>
Lets step through this.  First, what is the goal.  Well previously we multiplied every sample within training data by the correct theta values, subtracted y, squared them and divided by m.  Here we are taking advantage of how Matrix multiplication and subtraction works.  In matrix multiplication, you need to multiply 2 matrices of sizes A x B and B x C.  trainingData is 4 x 2 and theta is 1 x 2.  Or theta, as it is defined as a Vector is a special case of a "ColumnMatrix", which is in fact a 2 x 1.  This will produce a 4 x 1 matrix.

Ok Ok, thats too much flipping math for my simple brain, what in the world are we really doing here?  I tried to explain it, but that didn't work, here is a picture.

<a href="https://dacrook.com/wp-content/uploads/2016/05/vectorMatrixMult.png"><img class="alignnone wp-image-9890" src="https://dacrook.com/wp-content/uploads/2016/05/vectorMatrixMult-300x130.png" alt="vectorMatrixMult" width="567" height="246" /></a>

As you can see above, the way you can think of applying theta to each row of tData, which produces the equation to the right and executes it.  This does all of that in one blast shot.  This is the type of thing GPUs are amazing at by the way.  So as you can see we easily replaced a "for i in 0 .. 3" loop with that single mathematical operation.  The resulting data type is a vector.  The library we are using takes care of converting vectors into column matrices and then back to vectors again for us when multiplying a matrix by a vector.  MathNumerics is built quite well for this construction and deconstruction of matrices.

Next up, subtract y.  Now remember y is a vector and the out put of tData * theta is also a vector.  It simply subtracts from each cell the corresponding y value.  Sweet, that part of the for loop replaced.

What about square?  Well we are giving it a 1 x 4 and a 1 x 4.  Again another special case of Matrix multiplication, Vector multiplication, our library takes care of that for us.  It does the same thing as before, giving us cell1 * cell1 + cell2 * cell2 + cell3 * cell3 + cell4 * cell4.  Hrm, looks like we are squaring, then summing.  What do you know?  That's pretty nifty.  That completes the whole summation portion of the equation without doing a single for loop.  Finally we just divide by the total number of data points to get an average error, producing our sum of squares as a total cost function.

Next post I will cover gradient descent and we will be using this linear algebra approach from here on out.  At some other time I'll address the big data problem, it should be understood that this approach will only work for data up to a certain size.  In most cases though you won't have to worry about it.

&nbsp;

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Intro to Gradient Descent</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_crooks_dev_blog/intro-to-gradient-descent</link>
      <pubDate>Sun, 05 Jun 2016 17:51:18 GMT</pubDate>
      <dc:creator><![CDATA[Dave Crook]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_crooks_dev_blog/?p=445</guid>
      <description><![CDATA[Hello World!

This is a pull from my privately owned blog: www.dacrook.com -&gt; to find latest...]]></description>
      <content:encoded><![CDATA[Hello World!

This is a pull from my privately owned blog: www.dacrook.com -&gt; to find latest and greatest, thats a great place to head.

In this article we are going to cover a simple version of Gradient Descent. It is important to note that this version of gradient descent is using Sum of Squares as its cost function to reduce. This implementation utilizes vectorized algorithms. Lets start off with...
<h2>What is Gradient Descent</h2>
<!--more-->

There are a ton of confusing explanations, including wikipedia. Lets just keep it simple. Gradient descent is simply a method to minimize the output of a particular function by taking baby steps in the downward sloping direction.  These steps reduce the slope until it reaches a local minimum or the slope becomes zero.  This is more easily visualized with the below graphic.

<a href="https://dacrook.com/wp-content/uploads/2016/05/decreasing-slopes.png"><img class="alignnone size-medium wp-image-9908" src="https://dacrook.com/wp-content/uploads/2016/05/decreasing-slopes-300x86.png" alt="decreasing slopes" width="300" height="86" /></a>

You can see here at step 1 we have a very steep slope.  We take a big step, overshoot a bit, but at least we are closer, the slope is reduced, take another step, overshoot again, but again we are closer and finally in step 4, we have reached the local minimum of that function, where our slope is zero.
<h2>What does slope have to do with the minimum of a function?</h2>
Above is a parabolic equation $latex y = x^2 $ the minimum of this function is when x = 0.  You can think of step 1 being x = -100, step 2 x = +50, and step 3, x = -25.  Each of these steps the slope reduces as x becomes closer to the minimum, which is x = 0.  Basically the slope tells us how big of a step we need to take in order to get closer to our minimum as well as in what direction.  In step 1, we need to increase x, in step 2 we need to decrease x, and in step 3 we need to again increase it.  At step 4, we are just right.
<h2>Awesome, so how do we determine slope?</h2>
Well now thats a tricky question isn't it?  Basically it boils down to remembering your calculus 2 classes from college (or high school).  I will cover derivatives and partial derivatives in depth in a seperate article, but the jist of it is that a derivative is the rate of change.  In this example, the rate of change for step 1 is very high, while the rate of change for step 2 is lower, step 3 it is lower and step 4 is is zero.  Derivatives is a way to understand the rate of change in a localized context for immediately near neighbors.  Here is a <a href="https://en.wikipedia.org/wiki/Derivative">great article</a> on the topic for now.

So lets cut to the chase, derivatives basically have a series of rules and you can read all about them on wikipedia or by taking a calculus class.  A great rule though is that if your equation is y = (ANYTHING)^2 (like sum squares), your derivative is y = 2 * (ANYTHING).
<h2>Ok, but I have a bunch of variables and weights</h2>
Yup, so you need to use "Partial Derivatives", basically partial derivatives allow you to see to what extent and individual component is contributing to the entirety of the slope.  See the below graphic for a representation.

<a href="https://dacrook.com/wp-content/uploads/2016/05/PartialDerivatives.png"><img class="alignnone size-medium wp-image-9910" src="https://dacrook.com/wp-content/uploads/2016/05/PartialDerivatives-300x200.png" alt="PartialDerivatives" width="300" height="200" /></a>

The above figure is an excerpt from a <a href="https://en.wikipedia.org/wiki/Contour_line">"contour plot"</a>.  Basically it allows us to display 3 dimensional information on a 2 dimensional plot, in the instance we have an equation such as $latex y = \theta_1 \cdot x + \theta_2 \cdot z + \theta_3 $ think of $latex \theta_1 $ as green and $latex \theta_2 $ as blue.  So to attain the full derivative, which is pictured in red, we can simply take the sum of the 2 partials displayed in green and blue.  This gives us the contribution that each component has in the whole.  By doing this, we can seperate out each weight and move it into the correct direction an appropriate amount.  Partial derivatives give us the power to do this with any <a href="https://en.wikipedia.org/wiki/Polynomial">polynomial</a>.

Ok, thats great, what does it mean for sum of squares?  Basically we take the partial derivative with respect to each theta value.  The rule here is that you take the anything theta is multiplied with and multiply the entire equation by that as well.  So you really end up with this equation for each theta of J.
$latex \frac{ \sum_i^m \left(H_{\theta}\left(x\right) - y\right) \cdot x_j } { m } $

where the original sum of squares equation is

$latex \frac{ \sum_i^m \left(H_{\theta}\left(x\right) - y\right)^2 } { m } $
You can look up the <a href="https://en.wikipedia.org/wiki/Partial_derivative">rules here</a>.  It gets hairy quick.
<h2>So what does the code look like?</h2>
Great question!  First I want to mention all code samples in this article are in F# (I will have a python version at a later date for folks).  Feel free to read <a href="https://dacrook.com/battle-of-the-programming-languages/">this article</a> on why F# as well as go<a href="https://www.tryfsharp.org/"> here</a> to check out the language.  Here is the original sum of squares.  Notice we are using linear algebra to vectorize our equation.  This is an optimization step we are taking.  Read more about <a href="https://dacrook.com/linear-regression-from-scratch-using-linear-algebra/">vectorizing here.</a>
<pre class="brush:py">let SumSquares (theta:Vector&lt;float&gt;) (y:Vector&lt;float&gt;) (trainingData:Matrix&lt;float&gt;) =
let m = trainingData.RowCount |&gt; float
(trainingData |&gt; LinearRegressionPredict theta)
|&gt; subtract y
|&gt; square
|&gt; divideBy m</pre>
Here is the new optimization equation
<pre class="brush:py">let StepThetas (y:Vector&lt;float&gt;) (initTheta:Vector&lt;float&gt;) (alpha:float) (predict:Prediction) (trainingData:Matrix&lt;float&gt;) =
let m = trainingData.RowCount |&gt; float
let err = trainingData
|&gt; predict initTheta
|&gt; subtract y
let nT = (trainingData * err)
|&gt; divideVecBy m
|&gt; multiply alpha
initTheta |&gt; subtract nT</pre>
<h2>Woah, thats way more stuff...</h2>
Sure does.  That's because this is the "theta optimization" equation and not simply the partial derivative.  That is the code implementation of this mathematical equation:
$latex \theta_j = \theta_j - \alpha \cdot \frac{ \sum_i^m \left(H_{\theta}\left(x\right) - y\right) \cdot x_j } { m } $

Notice the partial derivative of sum of squares is right in there.  But we have this $latex \alpha $ thing in there and this $latex \theta_j $ thing too.
<blockquote>This is the core of gradient descent</blockquote>
The optimization portion is the meat and potatoes of it.  Lets review what we have here.  We have a partial derivative, the equation that says "Here is my contribution to the total error for this particular theta".  We then multiply by an arbitrary $latex \alpha $ value.  This is basically a scaling term that lets us make baby steps towards our goal.  Ill speak more deeply about $latex \alpha $ (alpha) later.  We then subtract our original theta by this.

Lets think about this, subtraction is basically addition of the inverse.  <strong>So in essence we are adding to our weight the inverse of its contribution to error, thereby reducing it.</strong>  We multiply by alpha to help ensure the step is of appropriate magnitude.
<h2>To Gradient Descent</h2>
Here is the final wrapping code.
<pre class="brush:py">let GradientDescent (y:Vector&lt;float&gt;) (initTheta:Vector&lt;float&gt;) (alpha:float) (maxIters:int) (H:HypoEquation) (trainingData:Matrix&lt;float&gt;) =
let m = trainingData.RowCount |&gt; float
let mutable nThetas = initTheta
for i = 0 to maxIters do
let r = trainingData
|&gt; StepThetas y nThetas alpha H
nThetas &lt;- r
nThetas</pre>
So you can see have a rather naive' implementation of gradient descent.  It simply iterates some number, optimizes the weights and returns the trained weights.  I do want to call attention to one neat detail in this implementation.  Notice the parameter H, HypoEquation.  This is the hypothesis equation, or the prediction equation.  For linear regression it is:
<pre class="brush:py">let LinearRegressionPredict : HypoEquation =
fun(theta:Vector&lt;float&gt;) (trainingData:Matrix&lt;float&gt;) -&gt;
(trainingData * theta)</pre>
Simple vectorized equation.  Whats interesting here is that HypoEquation is defined as a typed function that takes a Vector and a Matrix and produces a Vector.  As long as something adheres to this (which most prediction equations do), our gradient descent will deal with it perfectly fine.  This means our implementation of gradient descent for Linear Regression also will work for logistic regression and a variety of others.

Sweet, so now we can pump our gradient descent with all sorts of brains such as automatic alpha setting, <a href="https://dacrook.com/feature-scaling-machine-learning/">data normalization</a> etc etc and it will just simply work.
<h2>So How do we Test it?</h2>
Well lets start with some test data...
<pre class="brush:py">let tData = matrix [[ 1.0; 2.0; 5.0]
[1.0; 3.0; 6.0]
[1.0; 3.0; 7.0]]
let yVals = vector [ 5.0; 6.0; 7.0]</pre>
Basically, we have a bi-nomial of the form:

$latex y = \theta_1 \cdot x + \theta_2 \cdot z + \theta_3 $

We appended our Matrix with a column-vector of 1's to be our third theta.  The yVals is our actual values.  We also need a set of initial theta values...
<pre class="brush:py">let theta = vector [0.0; 0.0; 0.0]</pre>
We could probably have picked better initials, but meh, Gradient Descent will optimize anything.  Ok, so to the test, lets see it do some work...
<pre class="brush:py">let weights =
tData
|&gt; GradientDescent yVals theta 0.001 2000 LinearRegressionPredict
tData
|&gt; SumSquares weights yVals</pre>
We create a variable "weights" pass the training data to Gradient Descent, the yvals, the initial theta values.  We want an alpha of .001, we want 2000 training steps and pass it the LinearRegressionPrediction function.  Finally we want to see how much error our weights have against the fake training data by passing tData to SumSquares, the trained weights (instead of theta) and the actual yVals.  Feel free to try various numbers of training steps and watch your errors drop as gradient descent optimizes your values.
<h2>Summary</h2>
Well this ended up a larger article than I had anticipated, but I think we covered a fair number of key topics.
<ol>
<li>Functional Languages Rock for ML.  I personally like <a href="https://www.tryfsharp.org/">F#.</a></li>
<li>Derivatives &amp; Partial Derivatives</li>
<li>Cost function vs Optimization Function</li>
<li>Gradient Descent</li>
<li>Implementation</li>
</ol>
&nbsp;

I hope this was useful and please feel free to leave comments, questions, requests.]]></content:encoded>
    </item>
    <item>
      <title>Pi For Brains Robot - Part 1 Setup</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_crooks_dev_blog/pi-for-brains-robot-part-1-setup</link>
      <pubDate>Thu, 21 May 2015 12:01:39 GMT</pubDate>
      <dc:creator><![CDATA[Dave Crook]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_crooks_dev_blog/2015/05/21/pi-for-brains-robot-part-1-setup/</guid>
      <description><![CDATA[This is a pull from my blog: www.indiedevspot.com&nbsp;The other parts will be published there prior...]]></description>
      <content:encoded><![CDATA[<p class="title entry-title">This is a pull from my blog: <a href="https://www.indiedevspot.com">www.indiedevspot.com</a>&nbsp;The other parts will be published there prior to making it here.</p>
<h1 class="title entry-title">Pi for Brains Robot &ndash; Part 1 &ndash; Setup</h1>
<div class="content clear">
<p>Hello World!</p>
<p>Welcome to my blog&rsquo;s version of the <a href="https://channel9.msdn.com/Blogs/idevthis">#IDevThis</a>&nbsp;project that will be coming out.&nbsp; This full series will be made available on <a href="https://www.instructables.com/">instructables </a>and <a href="https://channel9.msdn.com/">channel9</a> once it has been completed as a full unit.</p>
<h3><strong>Pi for Brains Robot (aka Danger-Bot)</strong></h3>
<p>These days it seems like I&rsquo;m always dealing with a robot, they are on the phone, in my car, at the grocery store, just about everywhere.&nbsp; It also seems like every single one of them had Pie for brains, because it just couldn&rsquo;t do what I told it to.&nbsp; This project is going to build a robot that ACTUALLY has PI for brains!&nbsp; Get out your breadboards, your Raspberry Pis and follow along.&nbsp;We will use a high performance&nbsp;cross platform robotics framework, <a href="https://cylonjs.com/">Cylon</a>, Raspberry Pi, and an Arduino Robotics Kit to build this internet connected robot.</p>
<p>&nbsp;</p>
<h4><strong>About Part 1</strong></h4>
<p>We start from a freshly unboxed Raspberry Pi v1 B+, set up the OS, connect Wifi, enable SSH, setup permissions, install the latest node + npm, enable node to have pin access, and of course it wouldn&rsquo;t be complete if we didn&rsquo;t blink an led.</p>
<a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/PiwithLED.jpg" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/PiwithLED-300x244.jpg" alt="PiwithLED" width="300" height="244" /></a>
<p>All of these steps should be done exactly in order.&nbsp; Doing these steps out of order may have different results. If you are encountering an issue not addressed, please leave a comment.</p>
<h2><strong>What you need for Part 1</strong></h2>
<ol>
<li><a href="https://www.vilros.com/raspberry-pi-2-model-b-1gb-ultimate-starter-kit-includes-200-page-user-guide-over-40-components-raspberry-pi-b-plus-wifi-dongle-8gb-kingston-micro-sd-card-adapter-case-power-supply-and-many-more.html">Raspberry Pi B+ or v2 Ultimate Starter Kit (cheapest option)</a></li>
<li>USB Mouse, USB Keyboard, Monitor (HDMI) + Associated Cables</li>
<li><a href="https://www.amazon.com/Female-Jumper-Cables-Shield-random/dp/B00ALQI12M/ref=sr_1_9?s=electronics&amp;ie=UTF8&amp;qid=1432210183&amp;sr=1-9&amp;keywords=female+jumper+wire">Female Jumper Wires </a><ol>
<li>You can hack something together with regular wires, wire strippers, and insulated connectors.</li>
</ol></li>
<li>Wifi Network for your Raspberry Pi</li>
<li>Patience</li>
</ol>
<h2><strong>Setup the Pi and Update</strong></h2>
<h3>Connecting it all up</h3>
<ol>
<li>Insert your Pi into the protective case</li>
<li>Connect the USB of your mouse and keyboard into any USB slots on the Pi.</li>
<li>Connect the USB Wifi (came with the Ultimate Starter Kit)&nbsp;into any USB slot</li>
<li>Connect your Monitor to the HDMI slot on the Pi</li>
<li>Insert the Mini SD Card (came with the Ultimate Starter Kit)&nbsp;into the mini SD Card&nbsp;Slot</li>
<li>Plug the mini USB power supply into the mini&nbsp;USB slot<ol>
<li>Your Pi should power on at this point and take you to an OS selection page.</li>
</ol></li>
</ol><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/PiConnectedFAndB.png" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/PiConnectedFAndB-267x300.png" alt="PiConnectedFAndB" width="267" height="300" /></a>
<h3>Installing Raspbian</h3>
<ol>
<li>Using your mouse, choose Raspbian from the list<ol>
<li>Ensure no other options are selected</li>
</ol></li>
<li>Ensure your keyboard layout is US (or your layout)</li>
<li>Click Install</li>
<li>Click yes on the dangerous looking message</li>
<li>Wait patiently&hellip;</li>
<li>When it is done, click OK<ol>
<li>a console will appear and text will fly, just wait some more&hellip;</li>
</ol></li>
</ol><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/InstallOS.jpg" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/InstallOS-300x202.jpg" alt="InstallOS" width="300" height="202" /></a>
<h3>Basic Configuration</h3>
<p>You can always get back to this menu later by typing: &ldquo;sudo raspi-config&rdquo; at a command terminal.&nbsp; From this menu, you can only use arrow input from your keyboard. Up and Down flow there the vertical Menu, while LEFT and RIGHT move between cancel and finish.&nbsp; Enter selects the current highlighted item.&nbsp; Any time you type a command, you must execute the command by pressing the enter key.</p>
<a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/RaspiConfig.jpg" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/RaspiConfig-300x169.jpg" alt="RaspiConfig" width="300" height="169" /></a><ol>
<li>Select Change User&nbsp;Password<ol>
<li>a prompt will appear indicating you are about to enter a password, press enter to dismiss it</li>
<li>at the bottom you will be prompted in a cmd window for the password and to confirm it.</li>
</ol></li>
<li>Enter your new password (I use david1234 for non commercial applications)<ol>
<li>Press Enter</li>
</ol></li>
<li>Enter your password again for confirmation.<ol>
<li>Press Enter</li>
<li>A prompt will appear indicating success, press enter.</li>
</ol></li>
<li>Select Advanced Options</li>
<li>Select HostName (this is the name of your raspberry pi)<ol>
<li>a prompt will appear indicating you have to use normal letters and numbers for a name.&nbsp; Press enter to dismiss</li>
<li>a view will appear, use the delete key to delete the old name and enter your own. a-z and 0-9 only.<ol>
<li>My Pi&rsquo;s name is dangerbot</li>
</ol></li>
<li>use the arrow keys to go to OK and press enter on OK.<ol>
<li>You are brought to the first menu again.</li>
</ol></li>
</ol></li>
<li>Select Advanced Options</li>
<li>Select SSH<ol>
<li>Select Enable SSH</li>
<li>Select OK</li>
</ol></li>
<li>Use the right arrow key to navigate to Finish</li>
<li>Select Yes, you would like to reboot now.</li>
<li>Wait some more&hellip;</li>
<li>A cmd promp will appear asking you to log in.<ol>
<li>dangerbot Login:<ol>
<li>type &ldquo;pi&rdquo; here &ndash; just pi, no quotes.</li>
<li>pi is your user name</li>
</ol></li>
<li>Password:<ol>
<li>type the password you configured, I typed: david1234</li>
<li>note that it will not show the letters or even *s</li>
</ol></li>
</ol></li>
<li>SUCCESS, you are logged in at the Raspberry Pi&rsquo;s cmd prompt!</li>
<li>type the command: startx<ol>
<li>this will launch the Raspberry Pi&rsquo;s Desktop Mode, which is very similar to old Windows.</li>
<li>We will do some configuration in desktop mode</li>
</ol></li>
</ol><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/RaspiDesktop.jpg" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/RaspiDesktop-300x169.jpg" alt="RaspiDesktop" width="300" height="169" /></a>
<h3>Configure Wifi</h3>
<p>We will be doing a lot with wifi in this project, for now we need it to download various software packages, but later we will be connecting it to Twitter, Azure, who knows?&nbsp; Nothing is better than a tiny computer backed by a warehouse of servers.</p>
<ol>
<li>On the desktop, there is an Icon, &ldquo;Wifi Config&rdquo;, Click on that.<ol>
<li>You should see an adapter wlan &lt;some number&gt; show up</li>
<li>Network should be empty</li>
</ol></li>
<li><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/configwifi1.jpg" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/configwifi1-294x300.jpg" alt="configwifi1" width="294" height="300" /></a></li>
<li>On the bottom right, click Scan</li>
<li>A new mostly empty window will show up.</li>
<li>On the bottom right here, click Scan as well.</li>
<li>You should see a few networks pop up</li>
<li><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/configwifi2.jpg" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/configwifi2-300x227.jpg" alt="configwifi2" width="300" height="227" /></a></li>
<li>Double Click on your network, Mine is Version-29&hellip;<ol>
<li>This should be the same network your laptop is on if you plan to connect to the pi from your laptop.</li>
</ol></li>
<li>A new window will appear<ol>
<li>If you know what these settings are, verify and ensure they are right</li>
<li>If you do not, just keep the defaults for the first try.&nbsp; If that doesn&rsquo;t work, try various combinations.</li>
<li>The default settings for me were <em>correct</em>.</li>
</ol></li>
<li>In the PSK field, type your network password.<ol>
<li>I&rsquo;m not telling mine, as this is my real wifi I travel with.</li>
</ol></li>
<li><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/configwifi3.jpg" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/configwifi3-263x300.jpg" alt="configwifi3" width="263" height="300" /></a></li>
<li>Click Add</li>
<li>Wait for a while&hellip;<ol>
<li>It may say complete, but it is not done until an IP address appears</li>
<li>If it seems to take a while, try clicking connect again.</li>
</ol></li>
<li><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/configwifi4.jpg" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/configwifi4-300x238.jpg" alt="configwifi4" width="300" height="238" /></a></li>
<li><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/configwifi5.jpg" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/configwifi5-300x254.jpg" alt="configwifi5" width="300" height="254" /></a></li>
<li>Verify connection&hellip;<ol>
<li>On the desktop, on the left is an Icon: LXTerminal</li>
<li>Double click this, you will be brought to a cmd prompt</li>
<li>type: ifconfig</li>
<li>look for your ip address</li>
</ol></li>
<li><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/configwifi6.jpg" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/configwifi6-300x184.jpg" alt="configwifi6" width="300" height="184" /></a></li>
<li>Close the wifi configuration panel.</li>
</ol>
<h2>Updating the Pi</h2>
<h3>Update your firmware</h3>
<ol>
<li>If you still have the cmd prompt open from checking your ip address, you may use that, otherwise, open a new one.</li>
<li>type the command: sudo rpi-update<ol>
<li>If this doesn&rsquo;t do anything, your Raspberry Pi&rsquo;s firmware is already up to date.</li>
</ol></li>
<li>Go get coffee, this might take a while&hellip;</li>
<li>When it is done, type the command: sudo reboot</li>
</ol>
<h3>Update your OS</h3>
<ol>
<li>if you had to reboot, login again.<ol>
<li>Login: pi</li>
<li>Password: &lt;yourpassword&gt;</li>
<li>You don&rsquo;t need to go to the desktop.</li>
</ol></li>
<li>from the cmd prompt, type: sudo apt-get update<ol>
<li>Go get some more coffee, this might take a while.</li>
</ol></li>
<li>from the cmd prompt, type: sudo apt-get upgrade<ol>
<li>Accept the prompts by typing: y<ol>
<li>follow y with the enter key</li>
</ol></li>
<li>Go get some more coffee, this <em>will</em> take a while.</li>
</ol></li>
<li>from the cmd prompt, type: sudo reboot</li>
</ol>
<p>SUCCESS!&nbsp; Your Raspberry pi is running the latest firmware with the latest version of Raspbian!&nbsp; If you just wanted to know how to set up a Pi, you can end here.&nbsp; If you are interested in building robots using JavaScript and Raspberry Pis, I highly suggest you read on, as this is where things get complicated.</p>
<h2>Install and Configure Node</h2>
<p>Node is a JavaScript framework that CylonJS (a robotics framework) is installed from.&nbsp; NPM is a Node Package Manager for getting the packages we need for dealing with our robot.</p>
<h3>download/install node</h3>
<ol>
<li>Login to the Pi</li>
<li>Get to a command prompt if you are not already on one.</li>
<li>type the command: sudo mkdir /opt/node</li>
<li>Find the latest version of node from: https://nodejs.org/dist/ with the ending -Linux-arm-pi.tar.gz<ol>
<li>There is currently no easy way to do this.&nbsp; You literally have to look at the dates each folder was updated and attempt to find the latest version for pi.</li>
<li>the pi versions are kept behind the regular branches.</li>
<li>Cylon and Node both recommend that for the Pi you use the pre-compiled versions.</li>
<li>The latest version today is v0.10.28<ol>
<li>v0.10.28 is in fact newer than v0.10.4 (it should be v0.10.04)</li>
<li>if you find a newer version, replace references to 0.10.28 with your version.</li>
<li>double check<a href="https://cylonjs.com/documentation/platforms/raspberry-pi/"> cylon&rsquo;s site</a> for a version of node if you need to.</li>
</ol></li>
</ol></li>
<li>type the command: sudo mkdir /opt/node</li>
<li>type the command: wget https://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-arm-pi.tar.gz</li>
<li>type the command: tar xvzf node-v0.10.28-linux-arm-pi.tar.gz</li>
<li>type the command: sudo cp -r node-v0.10.28-linux-arm-pi/* /opt/node</li>
</ol>
<h3>add node and npm to your path</h3>
<p>Adding node to your path will make executing node programs much easier.&nbsp; But also once we ditch some of the fake security, we can do it easily with sudo as well.</p>
<ol>
<li>type the command: cd ~</li>
<li>type the command: sudo nano .bash_profile ..bash_profile</li>
<li>Add the code:
<div>
<div id="highlighter_131256" class="syntaxhighlighter  shell">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="shell plain">PATH=$PATH:</code><code class="shell plain">/opt/node/bin</code></div>
<div class="line number2 index1 alt1"><code class="shell functions">export</code> <code class="shell plain">PATH</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>Hold ctrl, then push x.</li>
<li>type y</li>
<li>click enter<ol>
<li>if you are still in the file&hellip;<ol>
<li>hold ctrl, then push x</li>
<li>type n if it asks you to save</li>
</ol></li>
</ol></li>
<li>type the command: source ~/.bash_profile</li>
<li>Test the pathing<ol>
<li>Type the command: node -v<ol>
<li>you should see a version number</li>
</ol></li>
<li>Type the command: npm -v<ol>
<li>you should see a version number</li>
</ol></li>
</ol></li>
</ol>
<h3>Ditch Security</h3>
<p>The only danger posed to us here is the npm install process and 3rd party libraries we use, but we are going to need to give most of these modules low level access anyways.&nbsp; Lets just go ahead and ditch security and make some robots.&nbsp; This will make executing commands much easier.&nbsp; If you are worried about the packages you are installing and the 3rd party libraries you are using doing something malicious, you should probably stop using that library and pick a different one, or write your own.</p>
<ol>
<li>type the command: sudo chown pi ~/ &ndash;recursive</li>
<li>type the command: sudo nano /etc/sudoers<ol>
<li>At the end of the Defaults section, add the line: Defaults !secure_path<ol>
<li>This allows sudo to use the default path variables (we just set up node and npm)</li>
</ol></li>
</ol></li>
<li><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/notsecurepath.png" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/notsecurepath-300x193.png" alt="notsecurepath" width="300" height="193" /></a></li>
<li>hold ctrl, then push x</li>
<li>type: y</li>
<li>hold ctrl, then push x</li>
<li>type: n</li>
<li>You should be back at the cmd prompt</li>
<li>Test<ol>
<li>Type: sudo node -v<ol>
<li>you should see a version number</li>
</ol></li>
<li>Type: sudo npm -v<ol>
<li>you should see a version number.</li>
</ol></li>
</ol></li>
<li>type the command: sudo usermod -G gpio pi</li>
<li>type the command: sudo nano /etc/udev/rules.d/91-gpio.rules<ol>
<li>type the following code in</li>
<li>
<div>
<div id="highlighter_932082" class="syntaxhighlighter  shell">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="shell plain">SUBSYSTEM==</code><code class="shell string">"gpio"</code><code class="shell plain">, KERNEL==</code><code class="shell string">"gpiochip*"</code><code class="shell plain">, ACTION==</code><code class="shell string">"add"</code><code class="shell plain">, PROGRAM=</code><code class="shell string">"/bin/sh -c 'chown root:gpio /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'"</code></div>
<div class="line number2 index1 alt1"><code class="shell plain">SUBSYSTEM==</code><code class="shell string">"gpio"</code><code class="shell plain">, KERNEL==</code><code class="shell string">"gpio*"</code><code class="shell plain">, ACTION==</code><code class="shell string">"add"</code><code class="shell plain">, PROGRAM=</code><code class="shell string">"/bin/sh -c 'chown root:gpio /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'"</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>It might be easier to ssh and copy/paste this in (do this if you are an advanced user)</li>
<li>This must be EXACT</li>
</ol></li>
<li>hold ctrl, then push x.&nbsp; Type y , then enter.&nbsp; This saves the file</li>
<li>type the command: sudo nano/etc/modules</li>
<li>add the following lines<ol>
<li>i2c-bcm2708</li>
<li>i2c-dev</li>
</ol></li>
<li><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/modules.png" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/modules-300x92.png" alt="modules" width="300" height="92" /></a></li>
<li>hold ctrl, then push x.&nbsp; Type y , then enter.&nbsp; This saves the file</li>
<li>type the command: sudo nano /etc/modprobe.d/raspi-blacklist.conf</li>
<li>comment out all lines by add # to the beginning<ol>
<li><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/blacklist.png" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/blacklist-300x187.png" alt="blacklist" width="300" height="187" /></a></li>
</ol></li>
<li>type the command: sudo nano /boot/config.txt</li>
<li>add the lines:<ol>
<li>dtparam=i2c1=on</li>
<li>dtparam=i2c_arm=on</li>
<li><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/bootconfig.png" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/bootconfig-300x187.png" alt="bootconfig" width="300" height="187" /></a></li>
</ol></li>
<li>hold ctrl, then push x.&nbsp; Type y , then enter.&nbsp; This saves the file</li>
<li>type the command: sudo addgroup i2c</li>
<li>type the command: sudo usermod -G i2c pi</li>
<li>type the command: sudo reboot</li>
</ol>
<p>There really isn&rsquo;t much testing we can do here yet.&nbsp; We just have to have faith that it all worked and keep going.&nbsp; But you have effectively removed all the extra security garbage that would ordinarily prevent pi and cylon from doing what it needs to such that we can build robots!</p>
<h2>Write Some Code Already!</h2>
<h3>Create Folders and Install Packages for Coding</h3>
<p>Alright, lets get set up for coding&hellip;we are going to start by building out the folder structure, installing necessary packages and testing out the cylon framework.</p>
<ol>
<li>Login using pi and your password</li>
<li>Get to your cmd window if you are not there already.</li>
<li>type the command: sudo mkdir Programs</li>
<li>type the command: cd Programs</li>
<li>type the command: sudo mkdir HelloPi</li>
<li>type the command: cd HelloPi</li>
<li>type the command: sudo chown pi ~/ &ndash;recursive</li>
<li>type the command: sudo chown pi ~/Programs &ndash;recursive<ol>
<li>this is just for good measure</li>
</ol></li>
<li>sudo reboot<ol>
<li>this too is just for good measure</li>
</ol></li>
<li>login again</li>
<li>type the command: npm install cylon cylon-raspi<ol>
<li>note that it does not say sudo.&nbsp; If you use sudo, it will not work.</li>
<li>This takes a while, wait and go get some coffee&hellip;</li>
</ol></li>
<li>type the command: npm install cylon-gpio cylon-i2c</li>
</ol>
<h3><strong>Simple Console Output</strong></h3>
<ol>
<li>type nano app.js<ol>
<li>Type the code:</li>
<li>
<div>
<div id="highlighter_328417" class="syntaxhighlighter  js">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="js keyword">var</code> <code class="js plain">Cylon = require(</code><code class="js string">"cylon"</code><code class="js plain">);</code></div>
<div class="line number2 index1 alt1">&nbsp;</div>
<div class="line number3 index2 alt2"><code class="js plain">Cylon.robot({</code></div>
<div class="line number4 index3 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">connections: {</code></div>
<div class="line number5 index4 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">raspi: { adaptor: </code><code class="js string">'raspi'</code> <code class="js plain">}</code></div>
<div class="line number6 index5 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">},</code></div>
<div class="line number7 index6 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">work: </code><code class="js keyword">function</code> <code class="js plain">(my) {</code></div>
<div class="line number8 index7 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">every((1).second(), </code><code class="js keyword">function</code> <code class="js plain">() {</code></div>
<div class="line number9 index8 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">console.log(</code><code class="js string">"led toggle"</code><code class="js plain">);</code></div>
<div class="line number10 index9 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">});</code></div>
<div class="line number11 index10 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">}</code></div>
<div class="line number12 index11 alt1"><code class="js plain">}).start();</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
</ol></li>
<li>&nbsp;hold ctrl, then push x.&nbsp; Push y then enter, this saves the file.</li>
<li>type the command: sudo node app.js</li>
<li>you should see the following output:</li>
<li><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/cylonworking.png" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/cylonworking-300x111.png" alt="cylonworking" width="300" height="111" /></a></li>
<li>hold ctrl, then push c to stop execution.</li>
</ol>
<p>SUCCESS!!!&nbsp; You have not only node working, but also cylon executing.&nbsp; Now we can wire up our LED and instead of writing led toggle to the output, lets actually toggle an led</p>
<h3>Wiring the Pi</h3>
<p>Ensure your pi does not have power attached to it before you begin wiring.</p>
<a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/piWiring.png" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/piWiring-300x226.png" alt="piWiring" width="300" height="226" /></a>
<p>The pi is a bit confusing to wire.&nbsp; I think of the pins as physical vs logical.&nbsp; Physical pins on the top are even, while physical pins on the bottom are odd.&nbsp; The counting is based left to right with the pi oriented in the fashion I have shown in the diagram above.&nbsp; In this instance, the wire going to the + side of the LED is physical pin 7.&nbsp; This maps to a different logical pin, but because we use cylon, we don&rsquo;t care :).&nbsp; The ground is connected to physical pin 39.&nbsp; The best site so far that explains the pins can be found here: https://pi.gadgetoid.com/pinout the numbers on this site correlate to physical pins.&nbsp; You always can just count left to right acknowledging even/odd.</p>
<h3>Blinking an LED with Code.</h3>
<ol>
<li>login again</li>
<li>type the command: cd Programs/HelloPi</li>
<li>type the command: nano app.js</li>
<li>replace the current code with the following code:</li>
<li>
<div>
<div id="highlighter_115634" class="syntaxhighlighter  js">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="js comments">//make sure we have cylon as a dependency</code></div>
<div class="line number2 index1 alt1"><code class="js keyword">var</code> <code class="js plain">Cylon = require(</code><code class="js string">"cylon"</code><code class="js plain">);</code></div>
<div class="line number3 index2 alt2">&nbsp;</div>
<div class="line number4 index3 alt1"><code class="js plain">Cylon.robot({ name: </code><code class="js string">'HelloPi'</code> <code class="js plain">})</code></div>
<div class="line number5 index4 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js comments">//setup connection</code></div>
<div class="line number6 index5 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">.connection(</code><code class="js string">'pi'</code><code class="js plain">, { adaptor: </code><code class="js string">'raspi'</code> <code class="js plain">})</code></div>
<div class="line number7 index6 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">.device(</code><code class="js string">'led'</code><code class="js plain">, { driver: </code><code class="js string">'led'</code><code class="js plain">, pin: 7 })</code></div>
<div class="line number8 index7 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">.on(</code><code class="js string">'ready'</code><code class="js plain">, </code><code class="js keyword">function</code> <code class="js plain">(dangerbot) {</code></div>
<div class="line number9 index8 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">every((1).second(), </code><code class="js keyword">function</code> <code class="js plain">() {</code></div>
<div class="line number10 index9 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js comments">//toggle LED on or off</code></div>
<div class="line number11 index10 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">dangerbot.led.toggle();</code></div>
<div class="line number12 index11 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">console.log(</code><code class="js string">"led toggle"</code><code class="js plain">);</code></div>
<div class="line number13 index12 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">});</code></div>
<div class="line number14 index13 alt1"><code class="js plain">}).start();</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>&nbsp;hold ctrl, push x, type y followed by enter to save the file.</li>
<li>type the command: sudo node app.js<ol>
<li>Watch your pi light up!</li>
<li><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/PiLEDOff.jpg" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/PiLEDOff-300x169.jpg" alt="PiLEDOff" width="300" height="169" /></a></li>
<li><a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/PiLEDOn.jpg" rel="post-6731"><img src="https://indiedevspot.com/wp-content/uploads/2015/05/PiLEDOn-300x169.jpg" alt="PiLEDOn" width="300" height="169" /></a></li>
</ol></li>
</ol>
<p>AND THATS IT!&nbsp; You have a Raspberry Pi, with Cylon and GPIO access.</p>
<h2>Common Linux Commands</h2>
<ul>
<li>sudo: preceding a command with sudo gives root access</li>
<li>mkdir: makes a directory</li>
<li>man &lt;cmd&gt;: tells you how to use a specific command</li>
<li>chown: changes the owner for a specified directory</li>
<li>cd: changes a directory</li>
<li>ls: lists the contents of the current directory</li>
<li>wget: downloads a files to the current location</li>
<li>tar: unzips a file</li>
<li>nano: is a very crude text editor</li>
<li>usermod: modifies properties of a user.</li>
<li>node: (not linux specific)executes a node runtime, you can write code directly from here, or&nbsp; execute javascript files.</li>
<li>npm: (not linux specific) installs or uninstalls node packages.</li>
</ul>
<h2>Why use Raspberry Pi and CylonJS</h2>
<p>Raspberry Pi can be acquired very cheaply and is a great general purpose computer as well as tinkering platform.&nbsp; It really has a lot of nice components to it for a beginner.&nbsp; I would recommend starting with a Raspberry Pi and then upgrading to an Intel Edison.&nbsp; Why CylonJS?&nbsp; Cylon is JavaScript, has a really nice coding interface for it and is multiplatform.&nbsp; With simple changes, I can move my code written for Raspberry Pi over to an Edison.&nbsp; Beyond just the robotics, Node and JavaScript are skills that will serve you in web as well as database programming.&nbsp; This makes CylonJS an ideal language for learning to program.&nbsp; Raspberry Pi between being affordable and the fact that we were able to do all of this without using a traditional computer at all makes it an ideal educational platform.&nbsp; Not to mention the Raspberry Pi v2 can run Windows 10, which will make programming for it easier.</p>
<h2>Summary</h2>
<p>So there you have it, we have covered a TON of material in this article.&nbsp; We have covered, Getting started with a brand new Raspberry Pi, how to update the firmware, how to update the Operating System, how to configure wifi.&nbsp; We have covered how to install and configure NodeJS as well as NPM allowing them to access the low level hardware of the device by removing many of the security components that prevent this.&nbsp; We have covered basics of wiring to the pins of a Raspberry Pi and executing node scripts that leverage CylonJS as their robotics platform.&nbsp; We also covered why you would even want to use Cylon and Raspberry Pi specifically.&nbsp; I hope you enjoyed this article.&nbsp; Please leave comments, feedback and questions in the comments section below.</p>
</div>]]></content:encoded>
    </item>
    <item>
      <title>How to Datamine Zillow</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_crooks_dev_blog/how-to-datamine-zillow</link>
      <pubDate>Tue, 12 May 2015 06:02:43 GMT</pubDate>
      <dc:creator><![CDATA[Dave Crook]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_crooks_dev_blog/2015/05/12/how-to-datamine-zillow/</guid>
      <description><![CDATA[This is a pull from my blog: www.indiedevspot.com&nbsp;There is a slight delta between this and...]]></description>
      <content:encoded><![CDATA[<p>This is a pull from my blog: <a href="https://www.indiedevspot.com">www.indiedevspot.com</a>&nbsp;There is a slight delta between this and indiedevspot, where indiedevspot has more content.&nbsp; I also post all of my presentation slide decks at: <a href="https://indiedevspot.com/category/events/">https://indiedevspot.com/category/events/</a>&nbsp;NOTE: the formatting may be nicer on <a href="https://www.indiedevspot.com">www.indiedevspot.com</a></p>
<p>So on with the article!</p>
<p>&nbsp;</p>
<div class="content clear">
<p>Hello World,</p>
<p>As many of you may know at this point, I am relocating to South Florida.&nbsp; Final location to be determined, but will probably be renting around Pompano Beach or Fort Lauderdale while working out of Venture Hive and the Microsoft Fort Lauderdale Offices.&nbsp; So what does this have to do with Zillow?&nbsp; Well, It has EVERYTHING to do with Zillow.&nbsp; What I&rsquo;ve found while searching for homes is that between Realtors, Zillow and Trulia, they really just don&rsquo;t have a predictive analytics solution that works for me.&nbsp; So I decided to give a shot at AzureML to mash together a few datasets to send me notifications more to my liking than is currently being sent.&nbsp; So step 1 in this plan is to data mine Zillow.&nbsp; Luckily, Zillow has an api for that.&nbsp; Or if you are feeling particularly frisky, Zillow gets their data from ArcGIS (<a href="https://maps.raleighnc.gov/arcgis/rest/services/Parcels/MapServer/0/">example for Raleigh</a>).&nbsp; So lets get cracking&hellip;</p>
<p>&nbsp;</p>
<h3>Tools for the Job</h3>
<ol>
<li><strong>Azure</strong>:&nbsp; There are literally hundreds of millions of properties for sale.&nbsp; There is no way I&rsquo;m going to get this done in a timely fashion without millions of computers at my finger tips.&nbsp; Add in the fact that I can right click publish cloud services with 100 nodes&hellip;Hell yeah, that&rsquo;s what I&rsquo;m talking about&hellip; https://azure.microsoft.com/en-us/</li>
<li><strong>F#:&nbsp;</strong> F# just is a wonderful tool.&nbsp; The type providers are excellent and seems well suited for this job.&nbsp; I think it might have been overkill for this sample, but the XML Type provider ended up being really useful.&nbsp; F# is my go-to web scraping tool from here on out. https://fsharp.org/</li>
<li><strong>C#:</strong>&nbsp; Until F# gets some better tooling dealing with things like SQL Azure (EF support in C# is way better) and ease of publishing Cloud Services, I just am stuck with it.&nbsp; C# just has better libraries and support.&nbsp; Good note is that C# is supposedly getting some new F# features like pattern matching :).</li>
<li><strong>Visual Studio 2013 Community</strong>:&nbsp; Free version of Visual Studio: https://www.visualstudio.com/en-us/news/vs2013-community-vs.aspx All of my future development however will be on 2015, it is now acting pretty stable for a beta build and has a host of really awesome new features like performance diagnostics while debugging displayed right next to each stepped over line of code.</li>
</ol>
<h3>Project Structure Breakdown</h3>
<p><strong>Note:&nbsp;</strong> The project will <em>NOT</em> compile fresh out of the repository.&nbsp; <strong>See AnalyzeZillow.Brains breakdown</strong>.</p>
<p>I&rsquo;m used to writing production grade software, so I always break my project apart in a way to make my code highly maintainable and extensible.&nbsp; There are 5 projects in this solution, built in dependency order, and that may seem like a lot, but once you get used to breaking problems apart in this fashion, it seems pretty straight forward.&nbsp; Before looking too deeply here, you might want to download the code from here: https://github.com/drcrook1/ZillowAnalysis</p>
<ol>
<li><strong>AnalyzeZillow.Core:</strong> This is the core basic project with repositories and types.&nbsp; This project has no dependency requirements within the solution.&nbsp; To Create this project from scratch, from VS 2013 Community, you simply Click File -&gt; New Project -&gt; C# Library.</li>
<li><strong>AnalyzeZillow.Brains:&nbsp;</strong> This project requires just the types from the Core solution.&nbsp; Working with F#, C# and web has taught me that though you get a performance gain working with F# types, to provide ease of system integration, those types should be C# types.&nbsp; The Brains project simply provides a function that parses the Zillow api response&nbsp;into C# types.&nbsp; To create this project from scratch, from VS 2013 Community File -&gt; New Project -&gt; Other Languages -&gt; F# Library.&nbsp; You will need to install the nugget packages for F# Core and FSharp.Data.&nbsp; Installing the F# Powertools extensions makes life easier as well.</li>
<li><strong>AnalyzeZillow.Host.Role:&nbsp;</strong> This is the project that orchestrates using the Brains and the Core Repositories to store data retrieved from the brains and stored into SQL Azure.&nbsp; Role is also responsible for figuring out which instance of the service it is and providing the orchestration of ensuring duplicate data is not retrieved.&nbsp; <em>This gets generated when creating AnalyzeZillow.Host.</em></li>
<li><strong>AnalyzeZillow.Host:&nbsp;</strong> This project simply defines the Azure Cloud Service.&nbsp; It points to the Host.Role and has configuration for number and size of instances.&nbsp; You can see from the config here that we only have 2 instances.&nbsp; To create this project from scratch, from VS 2013 Ensure you have the <a href="https://azure.microsoft.com/en-us/downloads/">Azure SDK installed for VS 2013</a>.&nbsp; File -&gt; New Project -&gt; Cloud Service.&nbsp; Name the cloud service what you want, add a worker role (Make sure you edit the name here to Host.Role)</li>
<li><strong>AnalyzeZillow.DB:&nbsp;</strong> This project is the SQL Project defining the database structure we will be using for the project.&nbsp; To create this from Scratch File -&gt; New Project -&gt; Other Languages -&gt; SQL Server Database Project.</li>
</ol>
<h3>Lets look at some code already!</h3>
<p>So now that we have the project structure and dependencies laid out, we can start looking at some code.&nbsp; I am going to skip the DB project, as that is a visual editor, and I think you can figure it out.&nbsp; If not, I&rsquo;m working on a separate article (release pending) where we deep dive into those.</p>
<h3>AnalyzeZillow.Core</h3>
<p>In this project, there is a folder &ldquo;SQL&rdquo;.&nbsp; The files under here are auto-generated by code-first from Database.&nbsp; It generates the Entity Framework Context and mappings automatically for you based on the <em><span style="text-decoration: underline;">deployed</span> </em>database.&nbsp; You can generate these by right clicking SQL, Add new item, go to the Data section.&nbsp; Notice the &ldquo;Context&rdquo; class.&nbsp; This means in the app.config, you will need to replace the connection string with your own.&nbsp; You are probably thinking the app.config for this project, but NO!&nbsp; You need to replace the connection string in the app.config in AnalyzeZillow.Host.Role, as that is the end project being deployed.&nbsp; This is simply a library project.&nbsp; You more or less forget this app.config even exists.</p>
<div>
<div id="highlighter_377566" class="syntaxhighlighter  csharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp keyword">namespace</code> <code class="csharp plain">AnalyzeZillow.Core.SQL</code></div>
<div class="line number2 index1 alt1"><code class="csharp plain">{</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">using</code> <code class="csharp plain">System;</code></div>
<div class="line number4 index3 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">using</code> <code class="csharp plain">System.Data.Entity;</code></div>
<div class="line number5 index4 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">using</code> <code class="csharp plain">System.ComponentModel.DataAnnotations.Schema;</code></div>
<div class="line number6 index5 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">using</code> <code class="csharp plain">System.Linq;</code></div>
<div class="line number7 index6 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number8 index7 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Entity Framework Generated Code.&nbsp; You will need to search in the app.config </code></div>
<div class="line number9 index8 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// for ZillowDataContext to find the connection string and replace with your own.</code></div>
<div class="line number10 index9 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number11 index10 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">partial</code> <code class="csharp keyword">class</code> <code class="csharp plain">ZillowDataContext : DbContext</code></div>
<div class="line number12 index11 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number13 index12 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp plain">ZillowDataContext()</code></div>
<div class="line number14 index13 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">: </code><code class="csharp keyword">base</code><code class="csharp plain">(</code><code class="csharp string">"name=ZillowDataContext"</code><code class="csharp plain">)</code></div>
<div class="line number15 index14 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number16 index15 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number17 index16 alt2">&nbsp;</div>
<div class="line number18 index17 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">virtual</code> <code class="csharp plain">DbSet&lt;Home&gt; Homes { </code><code class="csharp keyword">get</code><code class="csharp plain">; </code><code class="csharp keyword">set</code><code class="csharp plain">; }</code></div>
<div class="line number19 index18 alt2">&nbsp;</div>
<div class="line number20 index19 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">protected</code> <code class="csharp keyword">override</code> <code class="csharp keyword">void</code> <code class="csharp plain">OnModelCreating(DbModelBuilder modelBuilder)</code></div>
<div class="line number21 index20 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number22 index21 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">modelBuilder.Entity&lt;Home&gt;()</code></div>
<div class="line number23 index22 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">.Property(e =&gt; e.State)</code></div>
<div class="line number24 index23 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">.IsFixedLength();</code></div>
<div class="line number25 index24 alt2">&nbsp;</div>
<div class="line number26 index25 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">modelBuilder.Entity&lt;Home&gt;()</code></div>
<div class="line number27 index26 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">.Property(e =&gt; e.Latitude)</code></div>
<div class="line number28 index27 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">.HasPrecision(18, 0);</code></div>
<div class="line number29 index28 alt2">&nbsp;</div>
<div class="line number30 index29 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">modelBuilder.Entity&lt;Home&gt;()</code></div>
<div class="line number31 index30 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">.Property(e =&gt; e.Longitude)</code></div>
<div class="line number32 index31 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">.HasPrecision(18, 0);</code></div>
<div class="line number33 index32 alt2">&nbsp;</div>
<div class="line number34 index33 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">modelBuilder.Entity&lt;Home&gt;()</code></div>
<div class="line number35 index34 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">.Property(e =&gt; e.TaxAssessment)</code></div>
<div class="line number36 index35 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">.HasPrecision(18, 0);</code></div>
<div class="line number37 index36 alt2">&nbsp;</div>
<div class="line number38 index37 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">modelBuilder.Entity&lt;Home&gt;()</code></div>
<div class="line number39 index38 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">.Property(e =&gt; e.NumBathrooms)</code></div>
<div class="line number40 index39 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">.HasPrecision(18, 0);</code></div>
<div class="line number41 index40 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number42 index41 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number43 index42 alt2"><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>So how about some non generated code?&nbsp; Well there is IZillowDataRepository and ZillowDataRepository.&nbsp; Using an interface allows me the ability to swap out implementations without worries and I <em>should</em> be using a dependency injection framework, but oh well, this is quick.&nbsp; The only code really being leveraged here is &ldquo;SaveSingle&rdquo;.</p>
<div>
<div id="highlighter_575853" class="syntaxhighlighter  csharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>
<div class="line number56 index55 alt1">56</div>
<div class="line number57 index56 alt2">57</div>
<div class="line number58 index57 alt1">58</div>
<div class="line number59 index58 alt2">59</div>
<div class="line number60 index59 alt1">60</div>
<div class="line number61 index60 alt2">61</div>
<div class="line number62 index61 alt1">62</div>
<div class="line number63 index62 alt2">63</div>
<div class="line number64 index63 alt1">64</div>
<div class="line number65 index64 alt2">65</div>
<div class="line number66 index65 alt1">66</div>
<div class="line number67 index66 alt2">67</div>
<div class="line number68 index67 alt1">68</div>
<div class="line number69 index68 alt2">69</div>
<div class="line number70 index69 alt1">70</div>
<div class="line number71 index70 alt2">71</div>
<div class="line number72 index71 alt1">72</div>
<div class="line number73 index72 alt2">73</div>
<div class="line number74 index73 alt1">74</div>
<div class="line number75 index74 alt2">75</div>
<div class="line number76 index75 alt1">76</div>
<div class="line number77 index76 alt2">77</div>
<div class="line number78 index77 alt1">78</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">AnalyzeZillow.Core.SQL;</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">using</code> <code class="csharp plain">System;</code></div>
<div class="line number3 index2 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">System.Collections.Generic;</code></div>
<div class="line number4 index3 alt1"><code class="csharp keyword">using</code> <code class="csharp plain">System.Linq;</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">System.Text;</code></div>
<div class="line number6 index5 alt1"><code class="csharp keyword">using</code> <code class="csharp plain">System.Threading.Tasks;</code></div>
<div class="line number7 index6 alt2">&nbsp;</div>
<div class="line number8 index7 alt1"><code class="csharp keyword">namespace</code> <code class="csharp plain">AnalyzeZillow.Core</code></div>
<div class="line number9 index8 alt2"><code class="csharp plain">{</code></div>
<div class="line number10 index9 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">class</code> <code class="csharp plain">ZillowDataRepository : IZillowDataRepository</code></div>
<div class="line number11 index10 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number12 index11 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp plain">ZillowDataContext dbContext { </code><code class="csharp keyword">get</code><code class="csharp plain">; </code><code class="csharp keyword">set</code><code class="csharp plain">; }</code></div>
<div class="line number13 index12 alt2">&nbsp;</div>
<div class="line number14 index13 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp plain">ZillowDataRepository()</code></div>
<div class="line number15 index14 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number16 index15 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">dbContext = </code><code class="csharp keyword">new</code> <code class="csharp plain">ZillowDataContext();</code></div>
<div class="line number17 index16 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number18 index17 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number19 index18 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Notice that this is NOT IZillowDataRepository.SaveSingle,</code></div>
<div class="line number20 index19 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Doing so would force a private member here.</code></div>
<div class="line number21 index20 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number22 index21 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;param name="home"&gt;&lt;/param&gt;</code></div>
<div class="line number23 index22 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;returns&gt;&lt;/returns&gt;</code></div>
<div class="line number24 index23 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp plain">async Task&lt;</code><code class="csharp keyword">bool</code><code class="csharp plain">&gt; SaveSingle(Home home)</code></div>
<div class="line number25 index24 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number26 index25 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">try</code></div>
<div class="line number27 index26 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number28 index27 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">dbContext.Homes.Add(home);</code></div>
<div class="line number29 index28 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">await dbContext.SaveChangesAsync();</code></div>
<div class="line number30 index29 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp keyword">true</code><code class="csharp plain">;</code></div>
<div class="line number31 index30 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number32 index31 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">catch</code><code class="csharp plain">(Exception e)</code></div>
<div class="line number33 index32 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number34 index33 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//if something goes wrong, we can't save the changes,</code></div>
<div class="line number35 index34 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//but chances are it is still in the context.</code></div>
<div class="line number36 index35 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//next time we attempt a save, it will still be there</code></div>
<div class="line number37 index36 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//causing another exception.</code></div>
<div class="line number38 index37 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//we must remove the bad home (probably a key duplicate)</code></div>
<div class="line number39 index38 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//otherwise our program will constantly be failing with a growing </code></div>
<div class="line number40 index39 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//in memory list of homes to add</code></div>
<div class="line number41 index40 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">dbContext.Homes.Remove(home);</code></div>
<div class="line number42 index41 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp keyword">false</code><code class="csharp plain">;</code></div>
<div class="line number43 index42 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number44 index43 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number45 index44 alt2">&nbsp;</div>
<div class="line number46 index45 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp plain">async Task&lt;</code><code class="csharp keyword">bool</code><code class="csharp plain">&gt; SaveBatch(ICollection&lt;Home&gt; homes)</code></div>
<div class="line number47 index46 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number48 index47 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">foreach</code><code class="csharp plain">(Home home </code><code class="csharp keyword">in</code> <code class="csharp plain">homes)</code></div>
<div class="line number49 index48 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number50 index49 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Add a bunch of homes here</code></div>
<div class="line number51 index50 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">dbContext.Homes.Add(home);</code></div>
<div class="line number52 index51 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number53 index52 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">try</code></div>
<div class="line number54 index53 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number55 index54 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//save all of them as a batch</code></div>
<div class="line number56 index55 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//this is a HUGE performance gain.</code></div>
<div class="line number57 index56 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//I've seen upwards of multiples of minutes </code></div>
<div class="line number58 index57 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//performance increase for larger inserts</code></div>
<div class="line number59 index58 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">await dbContext.SaveChangesAsync();</code></div>
<div class="line number60 index59 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp keyword">true</code><code class="csharp plain">;</code></div>
<div class="line number61 index60 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number62 index61 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">catch</code><code class="csharp plain">(Exception e)</code></div>
<div class="line number63 index62 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number64 index63 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp keyword">false</code><code class="csharp plain">;</code></div>
<div class="line number65 index64 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number66 index65 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number67 index66 alt2">&nbsp;</div>
<div class="line number68 index67 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">ICollection&lt;SQL.Home&gt; IZillowDataRepository.GetHomes()</code></div>
<div class="line number69 index68 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number70 index69 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">throw</code> <code class="csharp keyword">new</code> <code class="csharp plain">NotImplementedException();</code></div>
<div class="line number71 index70 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number72 index71 alt1">&nbsp;</div>
<div class="line number73 index72 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">SQL.Home IZillowDataRepository.GetSingleHome(</code><code class="csharp keyword">int</code> <code class="csharp plain">zId)</code></div>
<div class="line number74 index73 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number75 index74 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">throw</code> <code class="csharp keyword">new</code> <code class="csharp plain">NotImplementedException();</code></div>
<div class="line number76 index75 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number77 index76 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number78 index77 alt1"><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>This repository allows the ability to get and save data.&nbsp; In our instance as of now, we are JUST saving data and therefor we do not need implementations for any of the getters.&nbsp; Entity Framework is really awesome and extremely performant.&nbsp; I highly recommend learning this if you don&rsquo;t know it yet.&nbsp; It makes dealing with SQL super easy.&nbsp; This repository is what is used by our Host.Role to save data retrieved by our F# Brains.</p>
<p>That&rsquo;s really it for the Core, on to the Brains!</p>
<h3>AnalyzeZillow.Brains</h3>
<p>There are really only&nbsp;two files here that matter; Brains.fs and Script.fsx.&nbsp; You will probably notice that when you bring the project down it fails to compile.&nbsp; It fails to compile because I am using the FSharp.Data XML Type provider.&nbsp; <strong>It can&rsquo;t compile, because the xml coming back has a single element &ldquo;Message&rdquo;, which says &ldquo;Where the heck is your api key dummy!?&rdquo;.</strong>&nbsp; Find the following lines of code at the top of the Brains.fs file and replce the {YOURKEY} with your very own Zillow api key.&nbsp; You will see it works.</p>
<div>
<div id="highlighter_395395" class="syntaxhighlighter  csharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp plain">module Brains =</code></div>
<div class="line number2 index1 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">[&lt;Literal&gt;]</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">zillowBasicSample = </code><code class="csharp string">"https://www.zillow.com/webservice/GetUpdatedPropertyDetails.htm?zws-id={YOURKEY}&amp;zpid=48749425"</code></div>
<div class="line number4 index3 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">zillowBasicUrl = </code><code class="csharp string">"https://www.zillow.com/webservice/GetUpdatedPropertyDetails.htm?zws-id={YOURKEY}&amp;zpid="</code></div>
<div class="line number5 index4 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">[&lt;Literal&gt;]</code></div>
<div class="line number6 index5 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">zillowDeepSample = </code><code class="csharp string">"https://www.zillow.com/webservice/GetDeepSearchResults.htm?zws-id={YOURKEY}&amp;address=2114+Bigelow+Ave&amp;citystatezip=Seattle%2C+WA"</code></div>
<div class="line number7 index6 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">zillowDeepsUrl = </code><code class="csharp string">"https://www.zillow.com/webservice/GetDeepSearchResults.htm?zws-id={YOURKEY}"</code></div>
<div class="line number8 index7 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">type ZillowBasic = XmlProvider&lt;zillowBasicSample&gt;</code></div>
<div class="line number9 index8 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">type ZillowDeep = XmlProvider&lt;zillowDeepSample&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>The type providers are really awesome.&nbsp; There are type providers for all sorts of different things.&nbsp; What it does is builds a dynamic type &ldquo;ZillowBasic&rdquo; and &ldquo;ZillowDeep&rdquo; from the xml returned by the samples.&nbsp; The Url&rsquo;s are the base url&rsquo;s for better readability for formulating a request.&nbsp; You will notice that what I do here is a terrible habit (Rats, you caught me).&nbsp; I should pull the XML ahead of time and set a string in another file for it to read the sample from&nbsp;and pass that sample into the provider.&nbsp; This would actually prevent compilation problems as well.&nbsp; Oh well, in this instance, just get your very own api key, put it here, and the code should compile fine.</p>
<p>Ok, so now the project compiles, lets talk about each of the files, Brains.fs and Script.fsx.&nbsp; Script.fsx is not actually&nbsp;compiled, it is a script file that you can use for data exploration and testing.&nbsp; Super awesome to have something like this in the .net run time!&nbsp; Since F# is compatible with C#, you can test out C# stuff like this too (but you have to do it from F#).&nbsp; Highlight the code you want and push ALT+Enter and it will execute in the F# Interactive window.&nbsp; This is how I figured out which calls from Zillow had the data returned that I wanted and could compose the second more complicated request easily and test it real time.&nbsp; Brains.fs is simply the resulting compiled form of what the experimentation led me to.</p>
<div>
<div id="highlighter_974969" class="syntaxhighlighter  csharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>
<div class="line number56 index55 alt1">56</div>
<div class="line number57 index56 alt2">57</div>
<div class="line number58 index57 alt1">58</div>
<div class="line number59 index58 alt2">59</div>
<div class="line number60 index59 alt1">60</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp keyword">namespace</code> <code class="csharp plain">AnalyzeZillow.Brains</code></div>
<div class="line number2 index1 alt1">&nbsp;</div>
<div class="line number3 index2 alt2"><code class="csharp plain">open FSharp.Data</code></div>
<div class="line number4 index3 alt1"><code class="csharp plain">open AnalyzeZillow.Core.SQL</code></div>
<div class="line number5 index4 alt2"><code class="csharp plain">open System.Xml.Linq</code></div>
<div class="line number6 index5 alt1">&nbsp;</div>
<div class="line number7 index6 alt2"><code class="csharp plain">module Brains =</code></div>
<div class="line number8 index7 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">[&lt;Literal&gt;]</code></div>
<div class="line number9 index8 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">zillowBasicSample = </code><code class="csharp string">"https://www.zillow.com/webservice/GetUpdatedPropertyDetails.htm?zws-id={YOURKEY}&amp;zpid=48749425"</code></div>
<div class="line number10 index9 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">zillowBasicUrl = </code><code class="csharp string">"https://www.zillow.com/webservice/GetUpdatedPropertyDetails.htm?zws-id={YOURKEY}&amp;zpid="</code></div>
<div class="line number11 index10 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">[&lt;Literal&gt;]</code></div>
<div class="line number12 index11 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">zillowDeepSample = </code><code class="csharp string">"https://www.zillow.com/webservice/GetDeepSearchResults.htm?zws-id={YOURKEY}&amp;address=2114+Bigelow+Ave&amp;citystatezip=Seattle%2C+WA"</code></div>
<div class="line number13 index12 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">zillowDeepsUrl = </code><code class="csharp string">"https://www.zillow.com/webservice/GetDeepSearchResults.htm?zws-id={YOURKEY}"</code></div>
<div class="line number14 index13 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">type ZillowBasic = XmlProvider&lt;zillowBasicSample&gt;</code></div>
<div class="line number15 index14 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">type ZillowDeep = XmlProvider&lt;zillowDeepSample&gt;</code></div>
<div class="line number16 index15 alt1">&nbsp;</div>
<div class="line number17 index16 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">GetHome (id:</code><code class="csharp keyword">int</code><code class="csharp plain">, zillowApiKey:</code><code class="csharp keyword">string</code><code class="csharp plain">) = </code></div>
<div class="line number18 index17 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">idString = id.ToString()</code></div>
<div class="line number19 index18 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">zBasic = ZillowBasic.Load(zillowBasicUrl + idString)</code></div>
<div class="line number20 index19 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">address = zBasic.Response.Address.Street.Replace(</code><code class="csharp string">" "</code><code class="csharp plain">, </code><code class="csharp string">"+"</code><code class="csharp plain">)</code></div>
<div class="line number21 index20 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">citystatezip = zBasic.Response.Address.City + </code><code class="csharp string">@"%2C+"</code> <code class="csharp plain">+ zBasic.Response.Address.State</code></div>
<div class="line number22 index21 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">deepUrl = zillowDeepsUrl + </code><code class="csharp string">"&amp;address="</code> <code class="csharp plain">+ address + </code><code class="csharp string">"citystatezip="</code> <code class="csharp plain">+ citystatezip</code></div>
<div class="line number23 index22 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">zFull = ZillowDeep.Load(zillowDeepsUrl + </code><code class="csharp string">"&amp;address="</code> <code class="csharp plain">+ address + </code><code class="csharp string">"&amp;citystatezip="</code> <code class="csharp plain">+ citystatezip)</code></div>
<div class="line number24 index23 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">home = </code><code class="csharp keyword">new</code> <code class="csharp plain">Home();</code></div>
<div class="line number25 index24 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.City &lt;- zFull.Response.Result.Address.City</code></div>
<div class="line number26 index25 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.FIPSCounty &lt;- zFull.Response.Result.FipScounty</code></div>
<div class="line number27 index26 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.HomeSize &lt;- zFull.Response.Result.FinishedSqFt</code></div>
<div class="line number28 index27 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.HomeType &lt;- zFull.Response.Result.UseCode</code></div>
<div class="line number29 index28 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.Latitude &lt;- zFull.Response.Result.Address.Latitude</code></div>
<div class="line number30 index29 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.Longitude &lt;- zFull.Response.Result.Address.Longitude</code></div>
<div class="line number31 index30 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.NumBedrooms &lt;- zFull.Response.Result.Bedrooms</code></div>
<div class="line number32 index31 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.State &lt;- zFull.Response.Result.Address.State</code></div>
<div class="line number33 index32 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.Street &lt;- zFull.Response.Result.Address.Street</code></div>
<div class="line number34 index33 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.TaxAssesmentYear &lt;- zFull.Response.Result.TaxAssessmentYear</code></div>
<div class="line number35 index34 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.TaxAssessment &lt;- zFull.Response.Result.TaxAssessment</code></div>
<div class="line number36 index35 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.YearBuild &lt;- zFull.Response.Result.YearBuilt</code></div>
<div class="line number37 index36 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.zId &lt;- id</code></div>
<div class="line number38 index37 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">try</code></div>
<div class="line number39 index38 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.NumBathrooms &lt;- zFull.Response.Result.Bathrooms</code></div>
<div class="line number40 index39 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">with </code></div>
<div class="line number41 index40 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">| :? System.Exception -&gt; home.NumBathrooms &lt;- 0.1m</code></div>
<div class="line number42 index41 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">try</code></div>
<div class="line number43 index42 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.LotSize &lt;- zFull.Response.Result.LotSizeSqFt</code></div>
<div class="line number44 index43 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">with </code></div>
<div class="line number45 index44 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">| :? System.Exception -&gt; home.LotSize &lt;- 0</code></div>
<div class="line number46 index45 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">try</code></div>
<div class="line number47 index46 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.ZillowEstimate &lt;- </code><code class="csharp keyword">float</code><code class="csharp plain">(zFull.Response.Result.Zestimate.Amount.Value)</code></div>
<div class="line number48 index47 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.ZillowHighEstimate &lt;- </code><code class="csharp keyword">float</code><code class="csharp plain">(zFull.Response.Result.Zestimate.ValuationRange.High.Value)</code></div>
<div class="line number49 index48 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.ZillowLowEstimate &lt;- </code><code class="csharp keyword">float</code><code class="csharp plain">(zFull.Response.Result.Zestimate.ValuationRange.Low.Value)</code></div>
<div class="line number50 index49 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">with </code></div>
<div class="line number51 index50 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">| :? System.Exception -&gt; </code></div>
<div class="line number52 index51 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.ZillowEstimate &lt;- </code><code class="csharp keyword">float</code><code class="csharp plain">(0)</code></div>
<div class="line number53 index52 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.ZillowHighEstimate &lt;- </code><code class="csharp keyword">float</code><code class="csharp plain">(0)</code></div>
<div class="line number54 index53 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home.ZillowLowEstimate &lt;- </code><code class="csharp keyword">float</code><code class="csharp plain">(0)</code></div>
<div class="line number55 index54 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">home</code></div>
<div class="line number56 index55 alt1">&nbsp;</div>
<div class="line number57 index56 alt2">&nbsp;</div>
<div class="line number58 index57 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">GetData (something:</code><code class="csharp keyword">int</code><code class="csharp plain">) =</code></div>
<div class="line number59 index58 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">let</code> <code class="csharp plain">data = 1</code></div>
<div class="line number60 index59 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">0</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Now I admit, this is not really &ldquo;functional&rdquo; coding, but I really just wanted access to the REPL and Type providers F# provides&nbsp;for this.&nbsp; There was no real need for me to put together a series of compose-able functions, that would have been just an academic exercise.&nbsp; I will end up using more F# features during my exploration and analysis post collection.&nbsp; You will notice a fair number of try/catch blocks.&nbsp; One of the biggest things you will find is that very rarely does data come back the way it is promised.&nbsp; Even Zillow has issues.</p>
<p>Some properties have the same id&rsquo;s, some properties are missing estimates, some properties they just didn&rsquo;t bother to put any data in at all.&nbsp; So the try/catch go independently around various properties that I noticed had a substantial number of issues so I can hopefully get a substantial amount of data back.&nbsp; Even doing this, it appears there are issues with approximately 80% of the data I parsed through.&nbsp; So some extra effort needs to go into checking that out.&nbsp; Some of the results just simply said &ldquo;I have no data for this, sorry&rdquo;.&nbsp; That was actually a fairly large portion of the 80% that had issues (no statistics on what was bad with the 80%).</p>
<h3>AnalyzeZillow.Host.Role</h3>
<p>So in this instance of our cloud services, I planned to use only 2 cloud services, so I only needed to distribute the workload across even requests and odd requests.&nbsp; I simply determine which node is running the code&nbsp;(0 or 1) and set them infinitely querying Zillow starting at property 1 or 2 and incrementing the request by 2.&nbsp; Notice there is a fair amount of generated code, I just left it there, our code really doesn&rsquo;t need any of that mess, but I just hate deleting generated code some times, because its tough to tell what it is <em>really</em> doing.</p>
<div>
<div id="highlighter_650532" class="syntaxhighlighter  csharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>
<div class="line number56 index55 alt1">56</div>
<div class="line number57 index56 alt2">57</div>
<div class="line number58 index57 alt1">58</div>
<div class="line number59 index58 alt2">59</div>
<div class="line number60 index59 alt1">60</div>
<div class="line number61 index60 alt2">61</div>
<div class="line number62 index61 alt1">62</div>
<div class="line number63 index62 alt2">63</div>
<div class="line number64 index63 alt1">64</div>
<div class="line number65 index64 alt2">65</div>
<div class="line number66 index65 alt1">66</div>
<div class="line number67 index66 alt2">67</div>
<div class="line number68 index67 alt1">68</div>
<div class="line number69 index68 alt2">69</div>
<div class="line number70 index69 alt1">70</div>
<div class="line number71 index70 alt2">71</div>
<div class="line number72 index71 alt1">72</div>
<div class="line number73 index72 alt2">73</div>
<div class="line number74 index73 alt1">74</div>
<div class="line number75 index74 alt2">75</div>
<div class="line number76 index75 alt1">76</div>
<div class="line number77 index76 alt2">77</div>
<div class="line number78 index77 alt1">78</div>
<div class="line number79 index78 alt2">79</div>
<div class="line number80 index79 alt1">80</div>
<div class="line number81 index80 alt2">81</div>
<div class="line number82 index81 alt1">82</div>
<div class="line number83 index82 alt2">83</div>
<div class="line number84 index83 alt1">84</div>
<div class="line number85 index84 alt2">85</div>
<div class="line number86 index85 alt1">86</div>
<div class="line number87 index86 alt2">87</div>
<div class="line number88 index87 alt1">88</div>
<div class="line number89 index88 alt2">89</div>
<div class="line number90 index89 alt1">90</div>
<div class="line number91 index90 alt2">91</div>
<div class="line number92 index91 alt1">92</div>
<div class="line number93 index92 alt2">93</div>
<div class="line number94 index93 alt1">94</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">System;</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">using</code> <code class="csharp plain">System.Collections.Generic;</code></div>
<div class="line number3 index2 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">System.Diagnostics;</code></div>
<div class="line number4 index3 alt1"><code class="csharp keyword">using</code> <code class="csharp plain">System.Linq;</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">System.Net;</code></div>
<div class="line number6 index5 alt1"><code class="csharp keyword">using</code> <code class="csharp plain">System.Threading;</code></div>
<div class="line number7 index6 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">System.Threading.Tasks;</code></div>
<div class="line number8 index7 alt1"><code class="csharp keyword">using</code> <code class="csharp plain">Microsoft.WindowsAzure;</code></div>
<div class="line number9 index8 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">Microsoft.WindowsAzure.Diagnostics;</code></div>
<div class="line number10 index9 alt1"><code class="csharp keyword">using</code> <code class="csharp plain">Microsoft.WindowsAzure.ServiceRuntime;</code></div>
<div class="line number11 index10 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">Microsoft.WindowsAzure.Storage;</code></div>
<div class="line number12 index11 alt1"><code class="csharp keyword">using</code> <code class="csharp plain">AnalyzeZillow.Core.SQL;</code></div>
<div class="line number13 index12 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">AnalyzeZillow.Core;</code></div>
<div class="line number14 index13 alt1">&nbsp;</div>
<div class="line number15 index14 alt2"><code class="csharp keyword">namespace</code> <code class="csharp plain">AnalyzeZillow.Host.Role</code></div>
<div class="line number16 index15 alt1"><code class="csharp plain">{</code></div>
<div class="line number17 index16 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">class</code> <code class="csharp plain">WorkerRole : RoleEntryPoint</code></div>
<div class="line number18 index17 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number19 index18 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Generated Code</code></div>
<div class="line number20 index19 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">private</code> <code class="csharp keyword">readonly</code> <code class="csharp plain">CancellationTokenSource cancellationTokenSource = </code><code class="csharp keyword">new</code> <code class="csharp plain">CancellationTokenSource();</code></div>
<div class="line number21 index20 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">private</code> <code class="csharp keyword">readonly</code> <code class="csharp plain">ManualResetEvent runCompleteEvent = </code><code class="csharp keyword">new</code> <code class="csharp plain">ManualResetEvent(</code><code class="csharp keyword">false</code><code class="csharp plain">);</code></div>
<div class="line number22 index21 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div>
<div class="line number23 index22 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">override</code> <code class="csharp keyword">void</code> <code class="csharp plain">Run()</code></div>
<div class="line number24 index23 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number25 index24 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Trace.TraceInformation(</code><code class="csharp string">"AnalyzeZillow.Host.Role is running"</code><code class="csharp plain">);</code></div>
<div class="line number26 index25 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Trace.TraceInformation(</code><code class="csharp string">"Working"</code><code class="csharp plain">);</code></div>
<div class="line number27 index26 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//DO Work</code></div>
<div class="line number28 index27 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">var</code> <code class="csharp plain">instanceIdSplit = RoleEnvironment.CurrentRoleInstance.Id.Split(</code><code class="csharp string">'_'</code><code class="csharp plain">);</code></div>
<div class="line number29 index28 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//last token in the id is the integer id of the role _00 - _99</code></div>
<div class="line number30 index29 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">var</code> <code class="csharp plain">roleNumberString = instanceIdSplit[instanceIdSplit.Length - 1];</code></div>
<div class="line number31 index30 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">int</code> <code class="csharp plain">roleNumber;</code></div>
<div class="line number32 index31 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">int</code><code class="csharp plain">.TryParse(roleNumberString, </code><code class="csharp keyword">out</code> <code class="csharp plain">roleNumber);</code></div>
<div class="line number33 index32 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//82300179 &lt;- Home in Pompano Beach</code></div>
<div class="line number34 index33 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">if</code><code class="csharp plain">(roleNumber == 0)</code></div>
<div class="line number35 index34 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number36 index35 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">WorkerRole.DoWork(82300178);</code></div>
<div class="line number37 index36 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number38 index37 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">else</code></div>
<div class="line number39 index38 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number40 index39 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">WorkerRole.DoWork(82300179);</code></div>
<div class="line number41 index40 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number42 index41 alt1">&nbsp;</div>
<div class="line number43 index42 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number44 index43 alt1">&nbsp;</div>
<div class="line number45 index44 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">static</code> <code class="csharp plain">async </code><code class="csharp keyword">void</code> <code class="csharp plain">DoWork(</code><code class="csharp keyword">int</code> <code class="csharp plain">i)</code></div>
<div class="line number46 index45 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number47 index46 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div>
<div class="line number48 index47 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">bool</code> <code class="csharp plain">done = </code><code class="csharp keyword">false</code><code class="csharp plain">;</code></div>
<div class="line number49 index48 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">ZillowDataRepository zRepo = </code><code class="csharp keyword">new</code> <code class="csharp plain">ZillowDataRepository();</code></div>
<div class="line number50 index49 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">while</code> <code class="csharp plain">(!done)</code></div>
<div class="line number51 index50 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number52 index51 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">try</code></div>
<div class="line number53 index52 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number54 index53 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Home h = Brains.Brains.GetHome(i);</code></div>
<div class="line number55 index54 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">await zRepo.SaveSingle(h);</code></div>
<div class="line number56 index55 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">i += 2;</code></div>
<div class="line number57 index56 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number58 index57 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">catch</code> <code class="csharp plain">(Exception e)</code></div>
<div class="line number59 index58 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number60 index59 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//done = true;</code></div>
<div class="line number61 index60 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">i += 2;</code></div>
<div class="line number62 index61 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number63 index62 alt2">&nbsp;</div>
<div class="line number64 index63 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number65 index64 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number66 index65 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Generated Code</code></div>
<div class="line number67 index66 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">override</code> <code class="csharp keyword">bool</code> <code class="csharp plain">OnStart()</code></div>
<div class="line number68 index67 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number69 index68 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">// Set the maximum number of concurrent connections</code></div>
<div class="line number70 index69 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">ServicePointManager.DefaultConnectionLimit = 12;</code></div>
<div class="line number71 index70 alt2">&nbsp;</div>
<div class="line number72 index71 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">// For information on handling configuration changes</code></div>
<div class="line number73 index72 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">// see the MSDN topic at https://go.microsoft.com/fwlink/?LinkId=166357.</code></div>
<div class="line number74 index73 alt1">&nbsp;</div>
<div class="line number75 index74 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">bool</code> <code class="csharp plain">result = </code><code class="csharp keyword">base</code><code class="csharp plain">.OnStart();</code></div>
<div class="line number76 index75 alt1">&nbsp;</div>
<div class="line number77 index76 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Trace.TraceInformation(</code><code class="csharp string">"AnalyzeZillow.Host.Role has been started"</code><code class="csharp plain">);</code></div>
<div class="line number78 index77 alt1">&nbsp;</div>
<div class="line number79 index78 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp plain">result;</code></div>
<div class="line number80 index79 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number81 index80 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Generated Code</code></div>
<div class="line number82 index81 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">override</code> <code class="csharp keyword">void</code> <code class="csharp plain">OnStop()</code></div>
<div class="line number83 index82 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number84 index83 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Trace.TraceInformation(</code><code class="csharp string">"AnalyzeZillow.Host.Role is stopping"</code><code class="csharp plain">);</code></div>
<div class="line number85 index84 alt2">&nbsp;</div>
<div class="line number86 index85 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">this</code><code class="csharp plain">.cancellationTokenSource.Cancel();</code></div>
<div class="line number87 index86 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">this</code><code class="csharp plain">.runCompleteEvent.WaitOne();</code></div>
<div class="line number88 index87 alt1">&nbsp;</div>
<div class="line number89 index88 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">base</code><code class="csharp plain">.OnStop();</code></div>
<div class="line number90 index89 alt1">&nbsp;</div>
<div class="line number91 index90 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Trace.TraceInformation(</code><code class="csharp string">"AnalyzeZillow.Host.Role has stopped"</code><code class="csharp plain">);</code></div>
<div class="line number92 index91 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number93 index92 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number94 index93 alt1"><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Also, remember, this is the project, where we need to add the database connection string that case sensitively matches our context in our AnalyzeZillow.Core project.&nbsp; The connection string needs to be set in app.config.</p>
<h3>Debugging the project</h3>
<p>As the project has 2 cloud service instances, you will need to use the full emulator.&nbsp; To specify the full emulator to use.&nbsp; Right click AnalyzeZillow.Host and select properties.&nbsp; From the properties, on the left tab, click &ldquo;Web&rdquo;.&nbsp; This will change the primary view, where you can select the option &ldquo;Use Full Emulator&rdquo;.&nbsp; This will simulate multiple instances of cloud services.</p>
<a class="fancybox" title="" href="https://indiedevspot.com/wp-content/uploads/2015/05/FullCloudServiceEmulator.png"><img class="responsive wp-image-5991" src="https://indiedevspot.com/wp-content/themes/themeforest-1739143-website-responsive-wordpress-theme/website/data/php/timthumb.php?src=wp-content/uploads/2015/05/FullCloudServiceEmulator.png&amp;q=90&amp;w=298" alt="FullCloudServiceEmulator" data-src="wp-content/uploads/2015/05/FullCloudServiceEmulator.png" /></a>
<p>Close Visual Studio, and start it again in admin mode.&nbsp; Right click AnalyzeZillow.Host -&gt; Debug -&gt; Start new Instance.&nbsp; Verify everything works, you are putting data in the database etc etc.</p>
<h3>Publishing the solution</h3>
<p>This is super easy.&nbsp; Right click AnalyzeZillow.Host -&gt; Publish -&gt; New Cloud Service.&nbsp; Enter in your credentials, hit OK and you are off!</p>
<h3>Summary</h3>
<p>We covered Datamining Zillow through their api using Azure Cloud Services, SQL Azure, C#, F# and Visual Studio!&nbsp; I hope this was useful to you.&nbsp; I use these same techniques for pretty much all data mining activities.&nbsp; The complexity of this is a bit lower than most, which makes it a great starter project.</p>
</div>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Intro to Angular, Web API and Azure</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_crooks_dev_blog/intro-to-angular-web-api-and-azure</link>
      <pubDate>Mon, 27 Apr 2015 18:27:17 GMT</pubDate>
      <dc:creator><![CDATA[Dave Crook]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_crooks_dev_blog/2015/04/27/intro-to-angular-web-api-and-azure/</guid>
      <description><![CDATA[Intro to Angular, Web API and Azure

Hello World,
So I thought it would be beneficial to discuss...]]></description>
      <content:encoded><![CDATA[<p>Intro to Angular, Web API and Azure</p>
<div class="content clear">
<p>Hello World,</p>
<p>So I thought it would be beneficial to discuss Angular, Web API and Azure in some form of depth as well as provide an entire set of functioning code.&nbsp; I will start by addressing a few things, What is Angular, What is Web API, and what is Azure?&nbsp; Followed by the code and explanation of the code.&nbsp; The code itself provides a simple website, which has restful routing, requests for processing and lists out data from a database acquired from said processing.</p>
<p>&nbsp;This is a pull from my website: <a href="https://www.indiedevspot.com">www.indiedevspot.com</a> Check out my other articles!</p>
<p><strong>What is Angular?</strong></p>
<p>Angular is a client side Model, View, Controller or MVC framework.&nbsp; A model being the data in which you wish to show, the view being the format in which you wish to show the data, and the controller facilitates the dynamic aspects of the page.&nbsp; Angular is one of the most popular frameworks out there.&nbsp; It has a bit of magic to it, but is much better to deal with than raw HTML and JavaScript.&nbsp; It provides a framework for dependency management, html injection and dynamic pages.&nbsp; This framework seems to be at the heart of the Single Page App movement.&nbsp; It also works within the context of Cordova, making it a great client framework to learn and understand.&nbsp; That said, in my experience it appears to perform very slowly on semi complex renders, but the speed of modern computers appears to more or less keep it within the bounds of an acceptable performance threshold.</p>
<p><strong>What is Web API?</strong></p>
<p>Web API is an ASP.Net (or .net) framework for providing restful services to clients.&nbsp; These services are easily data mined and therefor very conducive to search engine optimization.&nbsp; Not only that, but they are easily repackaged and sold.&nbsp; Beyond THAT they are also cross platform and follow a standard that most client developers understand.&nbsp; Finally it provides all of the security and goodliness that classic MVC provides.&nbsp; So in short, Web API is just pure awesomeness for a server side developer who wishes to ship product to the world in a timely fashion.</p>
<p><strong>What is Azure?</strong></p>
<p>Azure is the Microsoft Cloud Platform.&nbsp; I have tons of slide decks on my site regarding intro to Azure, Azure Architecture, How to &ndash; Azure etc.&nbsp; Go to the Events section and just download nearly any events slide deck and you will find something regarding Azure.&nbsp; In the instance of what we are discussing today, Azure provides the hosting platform for the website as well as the compute space for our web job which scrapes git hub, synchronizing the scale of both together.&nbsp; Azure supports a plethora of technologies and languages on its &ldquo;Web Apps&rdquo; platform, which is what we primarily intend to take advantage of.&nbsp; Beyond the Web Apps platform, this solution takes advantage of SQL Azure and Azure Storage.&nbsp; You will notice that all three technologies are within the PaaS world.&nbsp; This is purposeful as PaaS enables me as a developer to push out quality product faster.&nbsp; If there is enough interest, I will post an article about PaaS vs SaaS vs IaaS.</p>
<p><strong>ONTO THE CODE!</strong></p>
<p>The code is located here: https://github.com/drcrook1/Nerds4Hire As of the time of this writing, it is 8:33pm EST on 4/27/2015.&nbsp; Look through the check-in history for that specifically if you see significant changes, as this is a living demo/project.</p>
<p>You should notice in the Solution, three different projects.</p>
<ol>
<li>NerdsForHire.Services:&nbsp; This is the C# Web API, AngularJS, HTML etc.&nbsp; This comprises the primary components of the Client and Client-Server interaction of the App.&nbsp; This essentially IS the app from a user&rsquo;s perspective.</li>
<li>NerdsForHire.SQL:&nbsp; This is the SQL code that you need to deploy to your SQL Azure database for use in the Services Project.</li>
<li>NerdsForHire-GitHubScraper:&nbsp; This is the Web Job we deploy along side our app which scrapes GitHub for users data.&nbsp; It uses one of my favorite languages, F# :).</li>
</ol>
<p><strong>To Start, We should Deploy this solution to your own Azure Account.</strong></p>
<p>Always deploy your database first.&nbsp; This is as simple as going to www.azure.com, signing into your account (or creating a new one) and finding the Databases tab on the left and choosing to create a new one.&nbsp; After which, you can right click the NerdsForHire.SQL project and publish.&nbsp; There will be a series of boxes that you must fill out for this.&nbsp; I&rsquo;m going to assume that you can figure this out.&nbsp; If you struggle here, you should tweet me @DavidCrook1988 for assistance and I will not only assist you, but also update this blog with more specific steps.</p>
<p>You will also need to create a storage account with a queue.&nbsp; The name of the queue will need to be all lowercase.&nbsp; You will need to change the Web API code and the Scraper code to reflect the name change of this queue.</p>
<p>After the Database, let Deploy the App itself.&nbsp; This is SUPER simple!&nbsp; Right click the .Services project, click publish, and select &ldquo;Azure Websites&rdquo;.&nbsp; It will prompt for you to login, do so, and then elect to create a new website with whatever name you feel like.&nbsp; Note, you will need to modify the web.config within the project to point to your database specifically.&nbsp; Change the connection string to point to YOUR SQL Database (mine might not still be around).</p>
<p>Finally, Deploy the Web Job.&nbsp; Again, super simple, right click publish, select the previously created web site.&nbsp; You are golden!&nbsp; Note, on this, you may need to install several F# extensions or plugins.&nbsp; Tweet me @DavidCrook1988 if you run into trouble, or see the following article: https://indiedevspot.azurewebsites.net/2015/02/18/deploying-f-web-job-to-azure/</p>
<p><strong>Explaining the Code</strong></p>
<p>We will only focus on NerdsForHire.Services as the other two are pure Web Job and SQL Script, which is not the core focus of this article.</p>
<p><strong>AngularJS</strong></p>
<p>Within the NerdsForHire.Services Project, you will see a folder called &ldquo;Scripts&rdquo;.&nbsp; This is where all of our Angular magic happens.&nbsp; Vendor contains all of the logic provided by third parties.&nbsp; These are dependencies that our client takes on to provide the experience that it does.&nbsp; App.module.js contains all of the core setup and initialization logic, including our routing.&nbsp; You will notice as you click on links you get mywebsite.com/#/routeOne.&nbsp; This is set up by the routing.&nbsp; Controllers contain the logic which is injected into the views and Views contains the actual views for our code.</p>
<p>There is only one view, which is not a .html page, and this is a result of the current ASP.Net templates defaulting to requiring a HomeController and needing an index to route to.&nbsp; This page is basically an html page, which provides the initial landing of our app and you can begin to experience how databinding occurs in Angular.</p>
<div>
<div id="highlighter_774353" class="syntaxhighlighter  js">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="js plain">@*&lt;!DOCTYPE html&gt;</code></div>
<div class="line number2 index1 alt1"><code class="js plain">&lt;html ng-app=</code><code class="js string">"app"</code><code class="js plain">&gt;</code></div>
<div class="line number3 index2 alt2">&nbsp;</div>
<div class="line number4 index3 alt1"><code class="js plain">&lt;head&gt;</code></div>
<div class="line number5 index4 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;title&gt;FSharp Web Kit&lt;/title&gt;</code></div>
<div class="line number6 index5 alt1"><code class="js plain">&lt;/head&gt;</code></div>
<div class="line number7 index6 alt2"><code class="js plain">&lt;body&gt;*@</code></div>
<div class="line number8 index7 alt1"><code class="js plain">&lt;div ng-app=</code><code class="js string">"app"</code><code class="js plain">&gt;</code></div>
<div class="line number9 index8 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;div ng-controller=</code><code class="js string">"HomePageController as HomePage"</code><code class="js plain">&gt;</code></div>
<div class="line number10 index9 alt1">&nbsp;</div>
<div class="line number11 index10 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;h1&gt;{{HomePage.Title}}&lt;/h1&gt;</code></div>
<div class="line number12 index11 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;ul&gt;</code></div>
<div class="line number13 index12 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;li&gt;&lt;a ui-sref=</code><code class="js string">"routeOne"</code><code class="js plain">&gt;Route One&lt;/a&gt;&lt;/li&gt;</code></div>
<div class="line number14 index13 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;li&gt;&lt;a ui-sref=</code><code class="js string">"routeTwo"</code><code class="js plain">&gt;Route Two&lt;/a&gt;&lt;/li&gt;</code></div>
<div class="line number15 index14 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;li&gt;&lt;a ui-sref=</code><code class="js string">"routeThree"</code><code class="js plain">&gt;Route Three&lt;/a&gt;&lt;/li&gt;</code></div>
<div class="line number16 index15 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;/ul&gt;</code></div>
<div class="line number17 index16 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">@*&lt;ul&gt;</code></div>
<div class="line number18 index17 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;li&gt;&lt;a href=</code><code class="js string">"/#/login"</code><code class="js plain">&gt;Login&lt;/a&gt;&lt;/li&gt;</code></div>
<div class="line number19 index18 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;li&gt;&lt;a href=</code><code class="js string">"/#/register"</code><code class="js plain">&gt;Register&lt;/a&gt;&lt;/li&gt;</code></div>
<div class="line number20 index19 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;/ul&gt;*@</code></div>
<div class="line number21 index20 alt2">&nbsp;</div>
<div class="line number22 index21 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;!-- ANGULAR CONTENT--&gt;</code></div>
<div class="line number23 index22 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;textarea id=</code><code class="js string">"btn_GitHubName"</code><code class="js plain">&gt;&lt;/textarea&gt; &lt;!--Create fnction </code><code class="js keyword">in</code> <code class="js plain">controller </code><code class="js keyword">for</code> <code class="js plain">displaying github user name--&gt;</code></div>
<div class="line number24 index23 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;button id=</code><code class="js string">"btn_submit"</code> <code class="js plain">ng-click=</code><code class="js string">"scrapeGitHub()"</code><code class="js plain">&gt;</code></div>
<div class="line number25 index24 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">{{HomePage.GitHubID}}</code></div>
<div class="line number26 index25 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;/button&gt;</code></div>
<div class="line number27 index26 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;div ui-view&gt;</code></div>
<div class="line number28 index27 alt1">&nbsp;</div>
<div class="line number29 index28 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;/div&gt;</code></div>
<div class="line number30 index29 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">&lt;/div&gt;</code></div>
<div class="line number31 index30 alt2"><code class="js plain">&lt;/div&gt;</code></div>
<div class="line number32 index31 alt1"><code class="js plain">@*&lt;/body&gt;</code></div>
<div class="line number33 index32 alt2"><code class="js plain">&lt;/html&gt;*@</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Above follows John Papa&rsquo;s Angular Style guide.&nbsp; This particular HTML is considered the View in the MVC model.&nbsp; To see the C or, controller, take a look at the code below from the controllers folder.</p>
<div>
<div id="highlighter_923316" class="syntaxhighlighter  js">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="js plain">(</code><code class="js keyword">function</code> <code class="js plain">() {</code></div>
<div class="line number2 index1 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js string">'use strict'</code><code class="js plain">;</code></div>
<div class="line number3 index2 alt2">&nbsp;</div>
<div class="line number4 index3 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">angular.module(</code><code class="js string">'app'</code><code class="js plain">)</code></div>
<div class="line number5 index4 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">.controller(</code><code class="js string">'HomePageController'</code><code class="js plain">, [</code><code class="js string">'$scope'</code><code class="js plain">, </code><code class="js string">'$http'</code><code class="js plain">, </code><code class="js keyword">function</code> <code class="js plain">($scope, $http) {</code></div>
<div class="line number6 index5 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js keyword">var</code> <code class="js plain">vm = </code><code class="js keyword">this</code><code class="js plain">;</code></div>
<div class="line number7 index6 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">vm.Title = </code><code class="js string">"FSharp Web Kit"</code><code class="js plain">;</code></div>
<div class="line number8 index7 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">vm.GitHubID = </code><code class="js string">"GitHubID"</code><code class="js plain">;</code></div>
<div class="line number9 index8 alt2">&nbsp;</div>
<div class="line number10 index9 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">$scope.scrapeGitHub = </code><code class="js keyword">function</code> <code class="js plain">() {</code></div>
<div class="line number11 index10 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">alert(</code><code class="js string">"Attempting to Scrape!"</code><code class="js plain">);</code></div>
<div class="line number12 index11 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js keyword">var</code> <code class="js plain">gitId = document.getElementById(</code><code class="js string">"btn_GitHubName"</code><code class="js plain">).value;</code></div>
<div class="line number13 index12 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js keyword">var</code> <code class="js plain">data = {</code></div>
<div class="line number14 index13 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js string">"Id"</code><code class="js plain">: 0,</code></div>
<div class="line number15 index14 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js string">"FirstName"</code><code class="js plain">: </code><code class="js string">"David"</code><code class="js plain">,</code></div>
<div class="line number16 index15 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js string">"LastName"</code><code class="js plain">: </code><code class="js string">"Crook"</code><code class="js plain">,</code></div>
<div class="line number17 index16 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js string">"Specialty"</code><code class="js plain">: 0,</code></div>
<div class="line number18 index17 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js string">"TagList"</code><code class="js plain">: </code><code class="js keyword">null</code><code class="js plain">,</code></div>
<div class="line number19 index18 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js string">"githubId"</code><code class="js plain">: gitId,</code></div>
<div class="line number20 index19 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js string">"Jobs"</code><code class="js plain">: [],</code></div>
<div class="line number21 index20 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js string">"Specialty1"</code><code class="js plain">: </code><code class="js keyword">null</code><code class="js plain">,</code></div>
<div class="line number22 index21 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js string">"NerdSpecialtyRefs"</code><code class="js plain">: []</code></div>
<div class="line number23 index22 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">}</code></div>
<div class="line number24 index23 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">$http.post(</code><code class="js string">"/api/Nerd/Scrape/"</code><code class="js plain">, data);</code></div>
<div class="line number25 index24 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">};</code></div>
<div class="line number26 index25 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">}]);</code></div>
<div class="line number27 index26 alt2"><code class="js plain">})(); </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>This page shows hooking up a function to a button press.&nbsp; In this instance, on the push of the button with tag ng-click we fire off the scrapeGitHub function, which posts out this data to our Web API, which then in turn pushes an item on Azure Queue storage, which is picked up by our webjob, processed and pushed into SQL Azure.&nbsp; Bad Ass!</p>
<p><strong>Lets take a quick look at the code that does this&hellip;</strong></p>
<div>
<div id="highlighter_828481" class="syntaxhighlighter  csharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp plain">[ResponseType(</code><code class="csharp keyword">typeof</code><code class="csharp plain">(</code><code class="csharp keyword">bool</code><code class="csharp plain">))]</code></div>
<div class="line number2 index1 alt1"><code class="csharp plain">[HttpPost]</code></div>
<div class="line number3 index2 alt2"><code class="csharp keyword">public</code> <code class="csharp plain">async Task&lt;IHttpActionResult&gt; Scrape(Nerd nerd)</code></div>
<div class="line number4 index3 alt1"><code class="csharp plain">{</code></div>
<div class="line number5 index4 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">try</code></div>
<div class="line number6 index5 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number7 index6 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">CloudStorageAccount storageAccount = CloudStorageAccount.Parse(</code><code class="csharp string">@"DefaultEndpointsProtocol=https;AccountName=nerdsforhirestorage;AccountKey=iqFlEAh3ZkXbU6AMbbtgH11o0PHyNslMFWbNqRQ4jD7OqK7lVClZ7RLJgTaA1TL9v/t/w2W0FoeEIpUBUmHZVw=="</code><code class="csharp plain">);</code></div>
<div class="line number8 index7 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();</code></div>
<div class="line number9 index8 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">// Retrieve a reference to a queue</code></div>
<div class="line number10 index9 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">CloudQueue queue = queueClient.GetQueueReference(</code><code class="csharp string">"githubscrapeinput"</code><code class="csharp plain">);</code></div>
<div class="line number11 index10 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">// Create the queue if it doesn't already exist</code></div>
<div class="line number12 index11 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">queue.CreateIfNotExists();</code></div>
<div class="line number13 index12 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">// Create a message and add it to the queue.</code></div>
<div class="line number14 index13 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">CloudQueueMessage message = </code><code class="csharp keyword">new</code> <code class="csharp plain">CloudQueueMessage(nerd.githubId);</code></div>
<div class="line number15 index14 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">await queue.AddMessageAsync(message);</code></div>
<div class="line number16 index15 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//new</code></div>
<div class="line number17 index16 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number18 index17 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">catch</code><code class="csharp plain">(Exception e)</code></div>
<div class="line number19 index18 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number20 index19 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp plain">Ok(</code><code class="csharp keyword">false</code><code class="csharp plain">);</code></div>
<div class="line number21 index20 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number22 index21 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp plain">Ok(</code><code class="csharp keyword">true</code><code class="csharp plain">);</code></div>
<div class="line number23 index22 alt2"><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Pretty straightforward, we receive a moderate sized packet, and we really only need the githubId portion of that and push it onto the queue.&nbsp; The web job actually then does something with that.&nbsp; Lets go ahead and peek at that then.&nbsp; Note that this code lives in the project: NerdsForHire-GitHubScraper.&nbsp; I am only pasting the code regarding receiving the message and not the actual HTML parsing.&nbsp; You can look at the rest of the program.fs file for that information if you wish, which is located here: https://github.com/drcrook1/Nerds4Hire/blob/master/NerdsForHire/NerdsForHire-GitHubScraper/Program.fs</p>
<div>
<div id="highlighter_864687" class="syntaxhighlighter  scala">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="scala plain">let ScrapeGitHub([&lt;QueueTrigger(</code><code class="scala string">"githubScrapeInput"</code><code class="scala plain">)&gt;]message </code><code class="scala keyword">:</code> <code class="scala plain">string) </code><code class="scala keyword">=</code></div>
<div class="line number2 index1 alt1"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">let repositories </code><code class="scala keyword">=</code> <code class="scala plain">scrapePage(message)</code></div>
<div class="line number3 index2 alt2"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">let dataContext </code><code class="scala keyword">=</code> <code class="scala plain">sqlContext.GetDataContext()</code></div>
<div class="line number4 index3 alt1"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">repositories |&gt; Seq.iter(fun r -&gt;</code></div>
<div class="line number5 index4 alt2"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">dataContext.``[dbo].[GitRepository]``.Create(r.Description, r.Link, r.Stars, r.Title) |&gt; ignore</code></div>
<div class="line number6 index5 alt1"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">)</code></div>
<div class="line number7 index6 alt2"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">dataContext.SubmitUpdates()</code></div>
<div class="line number8 index7 alt1">&nbsp;</div>
<div class="line number9 index8 alt2"><code class="scala plain">[&lt;EntryPoint&gt;]</code></div>
<div class="line number10 index9 alt1"><code class="scala plain">let main argv </code><code class="scala keyword">=</code></div>
<div class="line number11 index10 alt2"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">let </code><code class="scala keyword">_</code><code class="scala plain">dashboardConn </code><code class="scala keyword">=</code> <code class="scala keyword">@</code><code class="scala string">"DefaultEndpointsProtocol=https;AccountName=nerdsforhirestorage;AccountKey=iqFlEAh3ZkXbU6AMbbtgH11o0PHyNslMFWbNqRQ4jD7OqK7lVClZ7RLJgTaA1TL9v/t/w2W0FoeEIpUBUmHZVw=="</code></div>
<div class="line number12 index11 alt1"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">let </code><code class="scala keyword">_</code><code class="scala plain">storageConn </code><code class="scala keyword">=</code> <code class="scala keyword">@</code><code class="scala string">"DefaultEndpointsProtocol=https;AccountName=nerdsforhirestorage;AccountKey=iqFlEAh3ZkXbU6AMbbtgH11o0PHyNslMFWbNqRQ4jD7OqK7lVClZ7RLJgTaA1TL9v/t/w2W0FoeEIpUBUmHZVw=="</code></div>
<div class="line number13 index12 alt2"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">let config </code><code class="scala keyword">=</code> <code class="scala keyword">new</code> <code class="scala plain">JobHostConfiguration()</code></div>
<div class="line number14 index13 alt1"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">config.DashboardConnectionString &lt;- </code><code class="scala keyword">_</code><code class="scala plain">dashboardConn</code></div>
<div class="line number15 index14 alt2"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">config.StorageConnectionString &lt;- </code><code class="scala keyword">_</code><code class="scala plain">storageConn</code></div>
<div class="line number16 index15 alt1"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">printf </code><code class="scala string">"%s"</code> <code class="scala plain">config.DashboardConnectionString</code></div>
<div class="line number17 index16 alt2"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">let host </code><code class="scala keyword">=</code> <code class="scala keyword">new</code> <code class="scala plain">JobHost(config) </code></div>
<div class="line number18 index17 alt1"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala comments">//let host = new JobHost()</code></div>
<div class="line number19 index18 alt2"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala plain">host.RunAndBlock()</code></div>
<div class="line number20 index19 alt1"><code class="scala spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="scala value">0</code> <code class="scala comments">// return an integer exit code</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>So as you can see here, we make a little bit further use of our Azure Storage account for monitoring and storage of queued messages.&nbsp; This is a requirement of queue storage.&nbsp; Also notice the function with the annotation: [&lt;QueueTrigger("githubScrapeInput")&gt;].&nbsp; This indicates we are listening to incoming messages on the queue &ldquo;githubscrapeinput&rdquo;.&nbsp; It is camel cased here, but F# takes care of reducing this to lowercase for us.&nbsp; Typically this should be all lower case.</p>
<p>Wow, we are making some serious progress here.&nbsp; Lets talk a little further about displaying this data.&nbsp; routeTwo is where we go to make the call for all github repositories we have stored in our database.&nbsp; So once the webjob finishes, it puts the data into the SQL Database for us, and routeTwo makes a web api call out to go get the data from the database.&nbsp; It has two way databinding to display that data on the routeTwo injected HTML.</p>
<p><strong>Lets look at the HTML first.</strong></p>
<div>
<div id="highlighter_296101" class="syntaxhighlighter  xml">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="xml plain">&lt;</code><code class="xml keyword">div</code> <code class="xml color1">ng-controller</code><code class="xml plain">=</code><code class="xml string">"RouteTwoController as RouteTwo"</code><code class="xml plain">&gt;</code></div>
<div class="line number2 index1 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">RouteTWO! YAYAYAYAYAY!</code></div>
<div class="line number3 index2 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">ul</code><code class="xml plain">&gt;</code></div>
<div class="line number4 index3 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">li</code> <code class="xml color1">ng-repeat</code><code class="xml plain">=</code><code class="xml string">"repo in RouteTwo.Repositories"</code><code class="xml plain">&gt;</code></div>
<div class="line number5 index4 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">h2</code><code class="xml plain">&gt;Repository&lt;/</code><code class="xml keyword">h2</code><code class="xml plain">&gt;</code></div>
<div class="line number6 index5 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">span</code><code class="xml plain">&gt;Title: {{repo.Title}}&lt;/</code><code class="xml keyword">span</code><code class="xml plain">&gt;</code></div>
<div class="line number7 index6 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">br</code> <code class="xml plain">/&gt;</code></div>
<div class="line number8 index7 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">span</code><code class="xml plain">&gt;Stars: {{repo.Stars}}&lt;/</code><code class="xml keyword">span</code><code class="xml plain">&gt;</code></div>
<div class="line number9 index8 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">br</code> <code class="xml plain">/&gt;</code></div>
<div class="line number10 index9 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">span</code><code class="xml plain">&gt;Location: {{repo.Location}}&lt;/</code><code class="xml keyword">span</code><code class="xml plain">&gt;</code></div>
<div class="line number11 index10 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">br</code> <code class="xml plain">/&gt;</code></div>
<div class="line number12 index11 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">p</code><code class="xml plain">&gt;Description: {{repo.Description}}&lt;/</code><code class="xml keyword">p</code><code class="xml plain">&gt;</code></div>
<div class="line number13 index12 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;</code><code class="xml keyword">h2</code><code class="xml plain">&gt;-----------------&lt;/</code><code class="xml keyword">h2</code><code class="xml plain">&gt;</code></div>
<div class="line number14 index13 alt1"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;/</code><code class="xml keyword">li</code><code class="xml plain">&gt;</code></div>
<div class="line number15 index14 alt2"><code class="xml spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="xml plain">&lt;/</code><code class="xml keyword">ul</code><code class="xml plain">&gt;</code></div>
<div class="line number16 index15 alt1"><code class="xml plain">&lt;/</code><code class="xml keyword">div</code><code class="xml plain">&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>You can see we define our controller as RouteTwoController.&nbsp; This controller must be defined within the context of our app prior to this html being loaded.&nbsp; Also we rename the controller to RouteTwo, so we can refer to objects within it.&nbsp; We then have a &ldquo;foreach&rdquo; in which each repository is named repo and we list out the title, how many stars and the description of each repository.</p>
<p><strong>Lets now look at the Controller powering this.</strong></p>
<div>
<div id="highlighter_728102" class="syntaxhighlighter  js">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="js plain">(</code><code class="js keyword">function</code> <code class="js plain">() {</code></div>
<div class="line number2 index1 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js string">'use strict'</code><code class="js plain">;</code></div>
<div class="line number3 index2 alt2">&nbsp;</div>
<div class="line number4 index3 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">angular.module(</code><code class="js string">'app'</code><code class="js plain">)</code></div>
<div class="line number5 index4 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">.controller(</code><code class="js string">'RouteTwoController'</code><code class="js plain">, [</code><code class="js string">'$scope'</code><code class="js plain">, </code><code class="js string">'$http'</code><code class="js plain">, </code><code class="js keyword">function</code> <code class="js plain">($scope, $http) {</code></div>
<div class="line number6 index5 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js keyword">var</code> <code class="js plain">vm = </code><code class="js keyword">this</code><code class="js plain">;</code></div>
<div class="line number7 index6 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">vm.Repositories = [{}, {}];</code></div>
<div class="line number8 index7 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">$http.get(</code><code class="js string">"api/GitRepositories"</code><code class="js plain">).success(</code><code class="js keyword">function</code> <code class="js plain">(data) {</code></div>
<div class="line number9 index8 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">vm.Repositories = data;</code></div>
<div class="line number10 index9 alt1"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">});</code></div>
<div class="line number11 index10 alt2"><code class="js spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="js plain">}]);</code></div>
<div class="line number12 index11 alt1"><code class="js plain">})();</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Wow, this is a nice short one.&nbsp; We have a self executing function (per John Papa Styling), in which we define an empty repositories variable, and make a get call out to get ALL repositories from our API.&nbsp; We then assign the resulting data from that api call to our repositories.&nbsp; Due to the Angular two way data binding, we do not have to raise any events.&nbsp; Its all taken care of for us.&nbsp; On loading the page, give it about 10 seconds and it will load (due to being on free tier websites and free tier sql).</p>
<p><strong>So what does the Web API for this look like?</strong></p>
<div>
<div id="highlighter_728010" class="syntaxhighlighter  csharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp keyword">public</code> <code class="csharp keyword">class</code> <code class="csharp plain">GitRepositoriesController : ApiController</code></div>
<div class="line number2 index1 alt1"><code class="csharp plain">{</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">private</code> <code class="csharp plain">NForHire db = </code><code class="csharp keyword">new</code> <code class="csharp plain">NForHire();</code></div>
<div class="line number4 index3 alt1">&nbsp;</div>
<div class="line number5 index4 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">// GET: api/GitRepositories</code></div>
<div class="line number6 index5 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp plain">IQueryable&lt;GitRepository&gt; GetGitRepositories()</code></div>
<div class="line number7 index6 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number8 index7 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp plain">db.GitRepositories;</code></div>
<div class="line number9 index8 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>My goodness do I like Entity Framework right about now.&nbsp; Because that kicks so much ass!&nbsp; That&rsquo;s it folks, that gets all the repositories from our database.&nbsp; Of course we can use OData options to restrict this back to a page by page result set, but that is for you to look up :).</p>
<p><strong>Summary</strong></p>
<p>We covered AngularJS basics, Web API basics and some Azure.&nbsp; I know this is a ton of info to take in as we covered the whole stack plus web jobs.&nbsp; Tweet me: @DavidCrook1988 for any assistance and I will gladly help you get this rolled out.</p>
</div>]]></content:encoded>
    </item>
    <item>
      <title>So you want to be an Analytics Developer?</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_crooks_dev_blog/so-you-want-to-be-an-analytics-developer</link>
      <pubDate>Thu, 23 Apr 2015 09:41:38 GMT</pubDate>
      <dc:creator><![CDATA[Dave Crook]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_crooks_dev_blog/2015/04/23/so-you-want-to-be-an-analytics-developer/</guid>
      <description><![CDATA[Hello World!
I get a series of questions all the time.

How do I switch careers to be a...]]></description>
      <content:encoded><![CDATA[<p>Hello World!</p>
<p>I get a series of questions all the time.</p>
<ol>
<li>How do I switch careers to be a developer?</li>
<li>How do I become a data scientist?</li>
<li>How do I add intelligence to my code?</li>
<li>How do I get a job in distributed computing?</li>
<li>How do I code more analytically?</li>
</ol>
<p>The answer to these questions are pretty much all the same.&nbsp; Step 1, learn about it and build one piece of software focused on that goal.&nbsp; Step 2, go for it, just do it.&nbsp; So that said, Microsoft has a fantastic resource, Microsoft Virtual Academy, which provides free training around various topics from entry level to advanced.&nbsp; This article focuses on a <strong>learning plan</strong> with MVA to attain the goal of becoming an Analytics Developer.</p>
<p>&nbsp;This article is a pull from my website: <a href="https://www.indiedevspot.com">www.indiedevspot.com</a> I pull some articles from there and repost on my msdn blog for better visibility.</p>
<h3><strong>What is an Analytics Developer?</strong></h3>
<p>An analytics developer is a developer who focuses on answering deeper questions with software.&nbsp; In traditional development shops, I often see basic CRUD operations, or the extent of the analytics is &ldquo;Who are the top 5 paying customers&rdquo;.&nbsp; That&rsquo;s fine, but that is not adding real analytics to a software product.</p>
<p>An analytics developer aims to take a product from its basic components into &ldquo;We know what drives our top paying customers, lets deliver the experience to all customers based on criteria focused on them&rdquo;.&nbsp; Or perhaps it is predicting what the new hot commodity is for your website so you can market it first.&nbsp; Perhaps it is realizing that based on statistics a particular customer has a 90% chance of having poor eyesight and we default an experience with larger font.</p>
<p>An analytics developer is a traditional full stack developer who takes their development skills to the next level to produce meaningful value specific to each and every user, be that user an admin, a customer, or even another developer.&nbsp; Beyond the mindset change for an Analytics Developer, you will need a variety of skills.</p>
<h3><strong>So what is the learning plan?</strong></h3>
<h4><strong>The Baseline</strong></h4>
<p>As an analytics developer, you will spend 99% of your time working on backend systems.&nbsp; Therefor there are 2 key programming languages you need.</p>
<p>You need C#.&nbsp; The two below courses should be a good beginner as well as intermediary exposure to the core language you will use when interacting with most api&rsquo;s.&nbsp; C# will be used primarily to define data types, interact with architectural components and most data access.</p>
<ol>
<li>https://www.microsoftvirtualacademy.com/training-courses/c-fundamentals-for-absolute-beginners</li>
<li>https://www.microsoftvirtualacademy.com/training-courses/developer-training-with-programming-in-c</li>
</ol>
<p>You will need F#.&nbsp; F# will be used for data crunching, analysis and distributed computing.&nbsp; It will be your language for writing the core libraries used for the actual intelligence.</p>
<ol>
<li>https://www.tryfsharp.org/Learn</li>
</ol>
<p>You will definitely need to understand SQL and Entity Framework for data storage and Access.&nbsp; These are the core technologies I use.&nbsp; SQL can support upwards of low TB, and Entity Framework is a great way to get access to that data quickly.</p>
<ol>
<li>https://www.microsoftvirtualacademy.com/training-courses/implementing-entity-framework-with-mvc</li>
<li>https://www.microsoftvirtualacademy.com/training-courses/database-fundamentals</li>
<li>https://www.microsoftvirtualacademy.com/training-courses/querying-with-transact-sql</li>
</ol>
<p>You will need to understand a few important Azure Concepts.&nbsp; Azure is my hosting platform of choice, it also has various PaaS capabilities that are crucial to Analytics Developers.</p>
<ol>
<li>https://www.microsoftvirtualacademy.com/training-courses/getting-started-with-microsoft-azure-machine-learning</li>
<li>https://www.microsoftvirtualacademy.com/training-courses/microsoft-azure-fundamentals-storage-and-data</li>
<li>https://www.microsoftvirtualacademy.com/training-courses/microsoft-azure-fundamentals-websites</li>
</ol>
<p>You will need data exploration tools as well.&nbsp; These tools are invaluable in that they help you prove your concepts prior to coding them into production systems.</p>
<ol>
<li>https://www.microsoftvirtualacademy.com/training-courses/from-data-to-insight-and-impact-the-bi-revolution</li>
<li>https://www.microsoftvirtualacademy.com/training-courses/excel-2013-power-bi-fundamentals</li>
</ol>
<h4><strong>Taking it to the next level</strong></h4>
<p>These are what I consider the advanced or specialist topics.&nbsp; They are in this section as they will be needed for specific examples, or can be used to really differentiate yourself as an Analytics Developer.&nbsp; These primarily focus around scaling your solutions or increasing performance.</p>
<p>When your data is too big to handle.</p>
<ol>
<li>https://www.microsoftvirtualacademy.com/training-courses/implementing-big-data-analysis</li>
<li>https://www.microsoftvirtualacademy.com/training-courses/big-data-with-the-microsoft-analytics-platform-system</li>
</ol>
<p>When you need to worry about on premise resources.&nbsp; These may be more IT Pro, but an understanding of where your data works and lives is crucial to high performance analytics.</p>
<ol>
<li>https://www.microsoftvirtualacademy.com/training-courses/microsoft-azure-site-to-site-vpn</li>
<li>https://www.microsoftvirtualacademy.com/training-courses/hybrid-cloud-workloads-sql</li>
</ol>
<p>Everybody needs to know a little about performance</p>
<ol>
<li>https://www.microsoftvirtualacademy.com/training-courses/sql-server-2014-security-optimizer-and-columnstore-index-enhancements</li>
<li>https://www.microsoftvirtualacademy.com/training-courses/mission-critical-performance-with-sql-server-2014-jump-start</li>
<li>https://www.microsoftvirtualacademy.com/training-courses/querying-with-transact-sql</li>
</ol>
<h3><strong>Summary</strong></h3>
<p>That is a TON of information.&nbsp; Likely that you already know a fair amount of it, but if you are looking to jump into software engineering, my favorite place is definitely as an Analytics Developer.&nbsp; There is something about answering questions that provide value that I just really like.&nbsp; If you are comfortable with the material in at minimum the baseline training section, you should be successful in your endeavors.&nbsp; Real Time analysis and Big data are my next favorite place in taking it to the next step.&nbsp; Good luck!</p>]]></content:encoded>
    </item>
    <item>
      <title>Intro to C# and Analyzing Government Data</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_crooks_dev_blog/intro-to-c-and-analyzing-government-data</link>
      <pubDate>Mon, 20 Apr 2015 16:32:00 GMT</pubDate>
      <dc:creator><![CDATA[Dave Crook]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_crooks_dev_blog/2015/04/20/intro-to-c-and-analyzing-government-data/</guid>
      <description><![CDATA[Hello World!
I have recently been informed that many of my articles may be a bit advanced for...]]></description>
      <content:encoded><![CDATA[<p>Hello World!</p>
<p>I have recently been informed that many of my articles may be a bit advanced for folks, so I am going to kick off a series of C# articles dedicated to the Beginner to programming.&nbsp; I have no idea how long this series is going to be, I&rsquo;ll just keep adding to it as requests come in for various topics.&nbsp; This series is meant to take the absolute beginner to a level in which they can possibly derive value from my other articles.&nbsp;</p>
<p>&nbsp;This is a pull from my personal blog at: <a href="https://www.indiedevspot.com">www.indiedevspot.com</a></p>
<h3>Tools</h3>
<p>Lets start off with some tools.&nbsp; For the purposes of this article, there is really only one tool that you need.&nbsp; Visual Studio.&nbsp; As of today Visual Studio 2015 is currently in preview, so in the heart of all that is beta, we will start with that immediately.&nbsp; I imagine Visual Studio 2015 Community to be coming to general availability soon, but no idea when.</p>
<p>The download for Visual Studio is here: https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx</p>
<h3>References</h3>
<p>These are the places that I go when I need help figuring something out, but also places you can go to learn.</p>
<ol>
<li>https://www.microsoftvirtualacademy.com/training-courses/c-fundamentals-for-absolute-beginners</li>
<li>https://stackoverflow.com/</li>
<li>https://msdn.microsoft.com/library</li>
<li>https://github.com/</li>
</ol>
<h3>Terminology</h3>
<p>These are some common terms you will hear in the development world.&nbsp; I want to address some of these right away.</p>
<ul>
<li><strong>Full Stack Developer:</strong>&nbsp; A developer who can code from database to web services to client on a single tech stack</li>
<li><strong>Tech Stack</strong>: Usually this is .Net, Node, Open Source.&nbsp; Its the series of technologies that you use to accomplish data storage, web services and UI</li>
<li>.<strong>Net</strong>:&nbsp; Series of development languages and technologies developed by Microsoft.&nbsp; C# is a language part of the .Net family, as is F# and VB.&nbsp; They run in the &ldquo;CLR&rdquo;, which is the common language run time or code execution environment these languages run in, which is common across them.</li>
<li><strong>Data Storage</strong>: This is typically in reference to long term data storage or databases, such as SQL.</li>
<li><strong>SQL</strong>: A relational database developed by Microsoft for storing tabular data with relationships between the tables.</li>
<li><strong>Web Services</strong>:&nbsp; Endpoints on the web that can be accessed that complete tasks and return results.&nbsp; Typically Restful.</li>
<li><strong>Endpoint</strong>:&nbsp; Typically a globally accessible or resolvable address on the internet, such as https://www.mywebsite.com/api/Cars</li>
<li><strong>Restful</strong>:&nbsp; Type of internet calls for endpoints.&nbsp; These are typically Get, Post, Delete.&nbsp; A series of known verbs control this.&nbsp; It is typically manifested in a url as: https://www.mywebsite.com/api/Cars/Black/1 (would get a black car with an id of 1 if following normal conventions).</li>
<li><strong>Object Oriented</strong>: A paradigm of coding in which objects are the primary feature of the language.</li>
<li><strong>Object</strong>: A section of code that contains data as well as methods to manipulate data.&nbsp; Manifested as pieces of memory that can be instantiated in your code.&nbsp; Objects are common in structure, but differ in mutable types.</li>
<li><strong>Mutable type</strong>:&nbsp; Data that can be changed that lives in memory, typically in the context of an object.</li>
<li><strong>Logic</strong>:&nbsp; The intelligence to your code that manipulates data to produce a desired result.</li>
</ul>
<h3>Getting Started</h3>
<p>Start by opening Visual Studio 2015.</p>
<p>On the top left, you should see a series of buttons, click File -&gt; New -&gt; Project</p>
<p>Expand Templates, click on Visual C# and select ConsoleApplication.&nbsp; Name the application as seen below.</p>
<p><a class="fancybox" title="" href="https://indiedevspot.azurewebsites.net/wp-content/uploads/2015/04/NewConsoleApp.png"><img class="responsive wp-image-5531" src="https://indiedevspot.azurewebsites.net/wp-content/themes/themeforest-1739143-website-responsive-wordpress-theme/website/data/php/timthumb.php?src=wp-content/uploads/2015/04/NewConsoleApp.png&amp;q=90&amp;w=298.1" alt="NewConsoleApp" data-src="wp-content/uploads/2015/04/NewConsoleApp.png" /></a></p>
<p>Click OK.</p>
<p>You should now have a view like below&hellip;</p>
<p><a class="fancybox" title="" href="https://indiedevspot.azurewebsites.net/wp-content/uploads/2015/04/emptyApp.png"><img class="responsive wp-image-5541" src="https://indiedevspot.azurewebsites.net/wp-content/themes/themeforest-1739143-website-responsive-wordpress-theme/website/data/php/timthumb.php?src=wp-content/uploads/2015/04/emptyApp.png&amp;q=90&amp;w=298.1" alt="emptyApp" data-src="wp-content/uploads/2015/04/emptyApp.png" /></a></p>
<p>Lets take a minute to talk about this.</p>
<p>I will explain concepts in need to order.</p>
<ol>
<li>namespace Tutorial: This defines that code within these curly brackets ({ }) will be referenced by the name Tutorial.</li>
<li>using System; : System is a namespace, we are using the namespace System, such that we can have access to objects within it.</li>
<li>class Program: This is the default class built for us, other code will reference this via Tutorial.Program</li>
<li>static void Main(string[] args): this is the &ldquo;entry point&rdquo; of the application.&nbsp; This is where everything starts.</li>
</ol>
<p>Now lets start with the super simple &ldquo;Hello World&rdquo; before we jump into something way more interesting.</p>
<div>
<div id="highlighter_10092" class="syntaxhighlighter  csharp ie">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp keyword">namespace</code> <code class="csharp plain">Tutorial</code></div>
<div class="line number2 index1 alt1"><code class="csharp plain">{</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">class</code> <code class="csharp plain">Program</code></div>
<div class="line number4 index3 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number5 index4 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">static</code> <code class="csharp keyword">void</code> <code class="csharp plain">Main(</code><code class="csharp keyword">string</code><code class="csharp plain">[] args)</code></div>
<div class="line number6 index5 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number7 index6 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Console.WriteLine(</code><code class="csharp string">"Hello World!"</code><code class="csharp plain">);</code></div>
<div class="line number8 index7 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Console.ReadKey();</code></div>
<div class="line number9 index8 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number10 index9 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number11 index10 alt2"><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Change your code to reflect above (keep your using statements).&nbsp; This simply will write to the console &ldquo;Hello World!&rdquo; and then wait for you to push any key before moving on.</p>
<p>To run the program, on the very top bar in Visual Studio is a &ldquo;Debug Button&rdquo;.&nbsp; Click this to execute your code. It is identifiable by being a green Arrow |&gt; pointing to the right with Start next to it.</p>
<p><a class="fancybox" title="" href="https://indiedevspot.azurewebsites.net/wp-content/uploads/2015/04/debugbutton.png"><img class="responsive wp-image-5551" src="https://indiedevspot.azurewebsites.net/wp-content/themes/themeforest-1739143-website-responsive-wordpress-theme/website/data/php/timthumb.php?src=wp-content/uploads/2015/04/debugbutton.png&amp;q=90&amp;w=298.1" alt="debugbutton" data-src="wp-content/uploads/2015/04/debugbutton.png" /></a></p>
<p>You will see a console pop up and state &ldquo;Hello World&rdquo;, you can push a button and it will go away.</p>
<h3>Doing something Real now.</h3>
<p>So now lets do something interesting, like figure out the best and worst place to live in the United States based on the open data on data.gov :)</p>
<p>Download the data from here: https://onedrive.live.com/redir?resid=478A64BC5718DA47!300&amp;authkey=!AP7WdDyZ_Inbfas&amp;ithint=file%2cxls</p>
<p>This is real data pulled from data.gov.</p>
<p>First, we need to bring in a library that helps us parse Excel files.</p>
<h3>Open Solution Explorer</h3>
<p>On the right hand side of the screen is Solution Explorer, if you don&rsquo;t have it there, it can be found at the top button bar View -&gt; Solution Explorer.</p>
<p>Add the Excel Nuget Package.&nbsp; Right Click the .csproj file or Tutorial, highlighted in blue here</p>
<p><a class="fancybox" title="" href="https://indiedevspot.azurewebsites.net/wp-content/uploads/2015/04/project-File.png"><img class="responsive wp-image-5561" src="https://indiedevspot.azurewebsites.net/wp-content/themes/themeforest-1739143-website-responsive-wordpress-theme/website/data/php/timthumb.php?src=wp-content/uploads/2015/04/project-File.png&amp;q=90&amp;w=208.1" alt="project File" data-src="wp-content/uploads/2015/04/project-File.png" /></a></p>
<p>After right clicking Tutorial, a submenu will pop up, click &ldquo;Manage Nuget Packages&rdquo;.&nbsp; A new dialogue will fill the screen.&nbsp; In the search text box, type &ldquo;Excel&rdquo;.</p>
<p>Click on ExcelDataReader and click Install.</p>
<p><a class="fancybox" title="" href="https://indiedevspot.azurewebsites.net/wp-content/uploads/2015/04/ExcelDataReaderNuget.png"><img class="responsive wp-image-5571" src="https://indiedevspot.azurewebsites.net/wp-content/themes/themeforest-1739143-website-responsive-wordpress-theme/website/data/php/timthumb.php?src=wp-content/uploads/2015/04/ExcelDataReaderNuget.png&amp;q=90&amp;w=298.1" alt="ExcelDataReaderNuget" data-src="wp-content/uploads/2015/04/ExcelDataReaderNuget.png" /></a></p>
<p>Close that tab.</p>
<h3>Now we are ready to do something useful!</h3>
<p>Lets start by adding new using statements that we need to the top of the file:</p>
<div>
<div id="highlighter_614005" class="syntaxhighlighter  csharp ie">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">Excel;</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">using</code> <code class="csharp plain">System;</code></div>
<div class="line number3 index2 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">System.Collections.Generic;</code></div>
<div class="line number4 index3 alt1"><code class="csharp keyword">using</code> <code class="csharp plain">System.Data;</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">System.IO;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Lets build a few types&hellip;</p>
<p>Within the Tutorial namespace, add the following code:</p>
<div>
<div id="highlighter_873585" class="syntaxhighlighter  csharp ie">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">//Enum Type</code></div>
<div class="line number2 index1 alt1"><code class="csharp comments">//These are actually integer values, but can be named.</code></div>
<div class="line number3 index2 alt2"><code class="csharp comments">//Useful for switch statements.</code></div>
<div class="line number4 index3 alt1"><code class="csharp keyword">public</code> <code class="csharp keyword">enum</code> <code class="csharp plain">Stats</code></div>
<div class="line number5 index4 alt2"><code class="csharp plain">{</code></div>
<div class="line number6 index5 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Employed,</code></div>
<div class="line number7 index6 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Unemployed,</code></div>
<div class="line number8 index7 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">MedianIncome,</code></div>
<div class="line number9 index8 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">LaborForce,</code></div>
<div class="line number10 index9 alt1"><code class="csharp plain">}</code></div>
<div class="line number11 index10 alt2"><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number12 index11 alt1"><code class="csharp color1">/// Data Class that we can use for holding data.</code></div>
<div class="line number13 index12 alt2"><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number14 index13 alt1"><code class="csharp keyword">public</code> <code class="csharp keyword">class</code> <code class="csharp plain">AreaStatistic</code></div>
<div class="line number15 index14 alt2"><code class="csharp plain">{</code></div>
<div class="line number16 index15 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number17 index16 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Data property of type string, holds the state this area is in.</code></div>
<div class="line number18 index17 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number19 index18 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">string</code> <code class="csharp plain">State { </code><code class="csharp keyword">get</code><code class="csharp plain">; </code><code class="csharp keyword">set</code><code class="csharp plain">; }</code></div>
<div class="line number20 index19 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number21 index20 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Name of the area within the state.</code></div>
<div class="line number22 index21 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number23 index22 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">string</code> <code class="csharp plain">AreaName { </code><code class="csharp keyword">get</code><code class="csharp plain">; </code><code class="csharp keyword">set</code><code class="csharp plain">; }</code></div>
<div class="line number24 index23 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number25 index24 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// List of statistics for each year of this particular area.</code></div>
<div class="line number26 index25 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// It is a List of a Tuple, which is a pair of objects, in which the first</code></div>
<div class="line number27 index26 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// object is an integer and the second object is a tuple.</code></div>
<div class="line number28 index27 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// The second Tuple is a pair of objects in which the first is a Stat enum and the second is</code></div>
<div class="line number29 index28 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// a float?&nbsp; a float? is a nullable floating point number</code></div>
<div class="line number30 index29 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number31 index30 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp plain">List&lt;Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;&gt; YearlyStats { </code><code class="csharp keyword">get</code><code class="csharp plain">; </code><code class="csharp keyword">set</code><code class="csharp plain">; }</code></div>
<div class="line number32 index31 alt1">&nbsp;</div>
<div class="line number33 index32 alt2"><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>This code defines the data types we will be using for our analysis.&nbsp; The AreaStatistic defines a class, which, when instantiated is an object.</p>
<p>Lets now write out our code for getting the statistics for a year.</p>
<div>
<div id="highlighter_124385" class="syntaxhighlighter  csharp ie">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>
<div class="line number56 index55 alt1">56</div>
<div class="line number57 index56 alt2">57</div>
<div class="line number58 index57 alt1">58</div>
<div class="line number59 index58 alt2">59</div>
<div class="line number60 index59 alt1">60</div>
<div class="line number61 index60 alt2">61</div>
<div class="line number62 index61 alt1">62</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number2 index1 alt1"><code class="csharp color1">/// Gets stats for a particular year.</code></div>
<div class="line number3 index2 alt2"><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number4 index3 alt1"><code class="csharp color1">/// &lt;param name="r"&gt;Data Row you want to get stats for for that year&lt;/param&gt;</code></div>
<div class="line number5 index4 alt2"><code class="csharp color1">/// &lt;param name="year"&gt;Year you want to have data for&lt;/param&gt;</code></div>
<div class="line number6 index5 alt1"><code class="csharp color1">/// &lt;param name="i"&gt;index starting point for that year.&lt;/param&gt;</code></div>
<div class="line number7 index6 alt2"><code class="csharp color1">/// &lt;returns&gt;&lt;/returns&gt;</code></div>
<div class="line number8 index7 alt1"><code class="csharp keyword">public</code> <code class="csharp keyword">static</code> <code class="csharp plain">List&lt;Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;&gt; GetStatsForYear(DataRow r, </code><code class="csharp keyword">int</code> <code class="csharp plain">year, </code><code class="csharp keyword">int</code> <code class="csharp plain">i)</code></div>
<div class="line number9 index8 alt2"><code class="csharp plain">{</code></div>
<div class="line number10 index9 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Create the empty object which holds the stats.</code></div>
<div class="line number11 index10 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">List&lt;Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;&gt; stats = </code><code class="csharp keyword">new</code> <code class="csharp plain">List&lt;Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;&gt;();</code></div>
<div class="line number12 index11 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Begin big region for making sure we deal with empty or null data.</code></div>
<div class="line number13 index12 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">string</code> <code class="csharp plain">s = r.ItemArray[i].ToString();</code></div>
<div class="line number14 index13 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">string</code> <code class="csharp plain">s1 = r.ItemArray[i + 1].ToString();</code></div>
<div class="line number15 index14 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">string</code> <code class="csharp plain">s2 = r.ItemArray[i + 2].ToString();</code></div>
<div class="line number16 index15 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">float</code><code class="csharp plain">? f;</code></div>
<div class="line number17 index16 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">float</code><code class="csharp plain">? f1;</code></div>
<div class="line number18 index17 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">float</code><code class="csharp plain">? f2;</code></div>
<div class="line number19 index18 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">if</code> <code class="csharp plain">(</code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrEmpty(s) || </code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrWhiteSpace(s))</code></div>
<div class="line number20 index19 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number21 index20 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f = </code><code class="csharp keyword">null</code><code class="csharp plain">;</code></div>
<div class="line number22 index21 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number23 index22 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">else</code></div>
<div class="line number24 index23 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number25 index24 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f = </code><code class="csharp keyword">float</code><code class="csharp plain">.Parse(s);</code></div>
<div class="line number26 index25 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number27 index26 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">if</code> <code class="csharp plain">(</code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrEmpty(s1) || </code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrWhiteSpace(s1))</code></div>
<div class="line number28 index27 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number29 index28 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f1 = </code><code class="csharp keyword">null</code><code class="csharp plain">;</code></div>
<div class="line number30 index29 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number31 index30 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">else</code></div>
<div class="line number32 index31 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number33 index32 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f1 = </code><code class="csharp keyword">float</code><code class="csharp plain">.Parse(s1);</code></div>
<div class="line number34 index33 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number35 index34 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">if</code> <code class="csharp plain">(</code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrEmpty(s2) || </code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrWhiteSpace(s2))</code></div>
<div class="line number36 index35 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number37 index36 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f2 = </code><code class="csharp keyword">null</code><code class="csharp plain">;</code></div>
<div class="line number38 index37 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number39 index38 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">else</code></div>
<div class="line number40 index39 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number41 index40 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f2 = </code><code class="csharp keyword">float</code><code class="csharp plain">.Parse(s2);</code></div>
<div class="line number42 index41 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number43 index42 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//End big area of checking for bad data.</code></div>
<div class="line number44 index43 alt1">&nbsp;</div>
<div class="line number45 index44 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//get data for LaborForce this year</code></div>
<div class="line number46 index45 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stats.Add(</code></div>
<div class="line number47 index46 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;</code></div>
<div class="line number48 index47 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(year, </code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;</code></div>
<div class="line number49 index48 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(Stats.LaborForce, f)));</code></div>
<div class="line number50 index49 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//get data for # employed this year.</code></div>
<div class="line number51 index50 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stats.Add(</code></div>
<div class="line number52 index51 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;</code></div>
<div class="line number53 index52 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(year, </code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;</code></div>
<div class="line number54 index53 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(Stats.Employed, f1)));</code></div>
<div class="line number55 index54 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//get data for # unemployed this year.</code></div>
<div class="line number56 index55 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stats.Add(</code></div>
<div class="line number57 index56 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;</code></div>
<div class="line number58 index57 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(year, </code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;</code></div>
<div class="line number59 index58 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(Stats.Unemployed, f2)));</code></div>
<div class="line number60 index59 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//return the yearly stats.</code></div>
<div class="line number61 index60 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp plain">stats;</code></div>
<div class="line number62 index61 alt1"><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Wow!&nbsp; That is a TON of code!&nbsp; Most of it is error checking, man I am missing F# pattern matching right now&hellip;The rest simply gets sections out of the row and adds it to a stats type.&nbsp; So what calls this code?</p>
<div>
<div id="highlighter_685100" class="syntaxhighlighter  csharp ie">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number2 index1 alt1"><code class="csharp color1">/// Converts a single row into the AreaStatistic Type.</code></div>
<div class="line number3 index2 alt2"><code class="csharp color1">/// Note, this is based on the format of the file being known.</code></div>
<div class="line number4 index3 alt1"><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number5 index4 alt2"><code class="csharp color1">/// &lt;param name="r"&gt;Data Row&lt;/param&gt;</code></div>
<div class="line number6 index5 alt1"><code class="csharp color1">/// &lt;returns&gt;AreaStatistic&lt;/returns&gt;</code></div>
<div class="line number7 index6 alt2"><code class="csharp keyword">public</code> <code class="csharp keyword">static</code> <code class="csharp plain">AreaStatistic ConvertRowToStat(DataRow r)</code></div>
<div class="line number8 index7 alt1"><code class="csharp plain">{</code></div>
<div class="line number9 index8 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//create an empty stat object we can populate</code></div>
<div class="line number10 index9 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">AreaStatistic stat = </code><code class="csharp keyword">new</code> <code class="csharp plain">AreaStatistic();</code></div>
<div class="line number11 index10 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Get the state code from the data row.</code></div>
<div class="line number12 index11 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stat.State = r.ItemArray[1].ToString();</code></div>
<div class="line number13 index12 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//if the state code is not of length 2, it is not a data row.</code></div>
<div class="line number14 index13 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">if</code><code class="csharp plain">(stat.State.Length != 2)</code></div>
<div class="line number15 index14 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number16 index15 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Throw an exception so the code stops here and doesn't continue.</code></div>
<div class="line number17 index16 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//An exception will be printed to the console due to the line of code that</code></div>
<div class="line number18 index17 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//wraps this.</code></div>
<div class="line number19 index18 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">throw</code> <code class="csharp keyword">new</code> <code class="csharp plain">Exception(</code><code class="csharp string">"Not data row"</code><code class="csharp plain">);</code></div>
<div class="line number20 index19 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number21 index20 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//get the area name.</code></div>
<div class="line number22 index21 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stat.AreaName = r.ItemArray[2].ToString();</code></div>
<div class="line number23 index22 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Build an empty object for the yearly stats.</code></div>
<div class="line number24 index23 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stat.YearlyStats = </code><code class="csharp keyword">new</code> <code class="csharp plain">List&lt;Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;&gt;();</code></div>
<div class="line number25 index24 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Stat years are 2000-2013.&nbsp; The columns start at column 9,</code></div>
<div class="line number26 index25 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//There are three rows of data and 1 skipped row.</code></div>
<div class="line number27 index26 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Therefor we do 9 (for year 2000 and add 4 * the current iteration to that)</code></div>
<div class="line number28 index27 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">for</code> <code class="csharp plain">(</code><code class="csharp keyword">int</code> <code class="csharp plain">i = 0; i &lt; 14; i++)</code></div>
<div class="line number29 index28 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number30 index29 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Add to the list of stats the stats for this year, total of 13 stats.</code></div>
<div class="line number31 index30 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stat.YearlyStats.AddRange(Program.GetStatsForYear(r, 2000 + i, 9 + (i * 4)));</code></div>
<div class="line number32 index31 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number33 index32 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//row 65 has income data.</code></div>
<div class="line number34 index33 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">string</code> <code class="csharp plain">s = r.ItemArray[65].ToString();</code></div>
<div class="line number35 index34 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">float</code><code class="csharp plain">? f;</code></div>
<div class="line number36 index35 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//sometimes data is blank, we need to deal with that.</code></div>
<div class="line number37 index36 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">if</code> <code class="csharp plain">(</code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrEmpty(s) || </code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrWhiteSpace(s))</code></div>
<div class="line number38 index37 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number39 index38 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//representation of no data.</code></div>
<div class="line number40 index39 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f = </code><code class="csharp keyword">null</code><code class="csharp plain">;</code></div>
<div class="line number41 index40 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number42 index41 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">else</code></div>
<div class="line number43 index42 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number44 index43 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//we should be good to parse this.</code></div>
<div class="line number45 index44 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f = </code><code class="csharp keyword">float</code><code class="csharp plain">.Parse(s);</code></div>
<div class="line number46 index45 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number47 index46 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//add the data.</code></div>
<div class="line number48 index47 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stat.YearlyStats.Add(</code></div>
<div class="line number49 index48 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;</code></div>
<div class="line number50 index49 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(2013, </code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;</code></div>
<div class="line number51 index50 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(Stats.MedianIncome, f)));</code></div>
<div class="line number52 index51 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Return the stats for this area.</code></div>
<div class="line number53 index52 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp plain">stat;</code></div>
<div class="line number54 index53 alt1"><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Wow, a bunch more code!&nbsp; Again, notice that 99% of this code is dealing with poorly formed data and also comments.&nbsp; Notice the amount of code re-use we get out of the GetStatsForYear method.&nbsp; This is great, always try to extract methods out like this that you can use.&nbsp; So Finally, we get into the reading of the data in.&nbsp; This also has been extracted out, so readers can simply download the .xls file, put it where they want, and point the code to where it is on your laptop.</p>
<div>
<div id="highlighter_932237" class="syntaxhighlighter  csharp ie">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number2 index1 alt1"><code class="csharp color1">/// Method we define that allows our Main function to look cleaner.&nbsp; This reads in the data and returns</code></div>
<div class="line number3 index2 alt2"><code class="csharp color1">/// a list of statistics</code></div>
<div class="line number4 index3 alt1"><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number5 index4 alt2"><code class="csharp color1">/// &lt;param name="url"&gt;location on our drive where the file is.&lt;/param&gt;</code></div>
<div class="line number6 index5 alt1"><code class="csharp color1">/// &lt;returns&gt;List of statistics for each area.&lt;/returns&gt;</code></div>
<div class="line number7 index6 alt2"><code class="csharp keyword">public</code> <code class="csharp keyword">static</code> <code class="csharp plain">List&lt;AreaStatistic&gt; ReadInData(</code><code class="csharp keyword">string</code> <code class="csharp plain">url)</code></div>
<div class="line number8 index7 alt1"><code class="csharp plain">{</code></div>
<div class="line number9 index8 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Initialize the stats object as a new list that holds objects of type AreaStatistics</code></div>
<div class="line number10 index9 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">List&lt;AreaStatistic&gt; stats = </code><code class="csharp keyword">new</code> <code class="csharp plain">List&lt;AreaStatistic&gt;();</code></div>
<div class="line number11 index10 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Using ensures that the reader is disposed of from memory when we are done with it.</code></div>
<div class="line number12 index11 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">using</code> <code class="csharp plain">(StreamReader reader = </code><code class="csharp keyword">new</code> <code class="csharp plain">StreamReader(url))</code></div>
<div class="line number13 index12 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number14 index13 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//This is from the ExcelData library we brought in, that parses the excel data for us.</code></div>
<div class="line number15 index14 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(reader.BaseStream);</code></div>
<div class="line number16 index15 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Converts the stream into a dataset type.</code></div>
<div class="line number17 index16 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">DataSet d = excelReader.AsDataSet();</code></div>
<div class="line number18 index17 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//There is only 1 table, but we iterate as if there were multiples anyways.</code></div>
<div class="line number19 index18 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">foreach</code> <code class="csharp plain">(DataTable dt </code><code class="csharp keyword">in</code> <code class="csharp plain">d.Tables)</code></div>
<div class="line number20 index19 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number21 index20 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Iterate each row in the table.</code></div>
<div class="line number22 index21 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">foreach</code> <code class="csharp plain">(DataRow r </code><code class="csharp keyword">in</code> <code class="csharp plain">dt.Rows)</code></div>
<div class="line number23 index22 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number24 index23 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">try</code></div>
<div class="line number25 index24 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number26 index25 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//add to our stats list the statistic after we convert it.</code></div>
<div class="line number27 index26 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stats.Add(Program.ConvertRowToStat(r));</code></div>
<div class="line number28 index27 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number29 index28 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">catch</code><code class="csharp plain">(Exception e)</code></div>
<div class="line number30 index29 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number31 index30 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//if something goes wrong, write it to the console.</code></div>
<div class="line number32 index31 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//tell me what happened.</code></div>
<div class="line number33 index32 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Console.WriteLine(e.Message);</code></div>
<div class="line number34 index33 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number35 index34 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number36 index35 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number37 index36 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number38 index37 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//return the list of stats</code></div>
<div class="line number39 index38 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp plain">stats;</code></div>
<div class="line number40 index39 alt1"><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>This doesn&rsquo;t seem so bad.&nbsp; You can see the catching of the exception, this is where if any transient missed exceptions get thrown will be caught such that our program won&rsquo;t just up and crash on us.&nbsp; The downside is that if an exception is thrown due to bad data, that row will not be added to our stats, and instead the console will write out the message of what happened.</p>
<p>Finally, we take a look at our code entry point:</p>
<div>
<div id="highlighter_736619" class="syntaxhighlighter  csharp ie">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number2 index1 alt1"><code class="csharp color1">/// Entry point to the program.</code></div>
<div class="line number3 index2 alt2"><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number4 index3 alt1"><code class="csharp color1">/// &lt;param name="args"&gt;Command line arguments passed in.&lt;/param&gt;</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">static</code> <code class="csharp keyword">void</code> <code class="csharp plain">Main(</code><code class="csharp keyword">string</code><code class="csharp plain">[] args)</code></div>
<div class="line number6 index5 alt1"><code class="csharp plain">{</code></div>
<div class="line number7 index6 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//We populate the type "stats" with data we read from the .xls file.</code></div>
<div class="line number8 index7 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">List&lt;AreaStatistic&gt; stats = Program.ReadInData(</code><code class="csharp string">"C:\\Unemployment.xls"</code><code class="csharp plain">);</code></div>
<div class="line number9 index8 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//just lets us see some output.</code></div>
<div class="line number10 index9 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Console.ReadKey();</code></div>
<div class="line number11 index10 alt2"><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>From here, you can see our high level task, we wanted to read in the statistics into this &ldquo;stats&rdquo; object.&nbsp; We now have a list of &ldquo;stats&rdquo; that we can do some real analysis with :).</p>
<p>The next article will focus on doing interesting things with this data for more insights into it.&nbsp; Maybe we can see if we can verify the claims about unemployment rates.&nbsp; Maybe there are interesting insights from this data we can see from a collection standpoint, or growth rates in total labor vs employed vs unemployed vs income.</p>
<p>Please use the comments section for any questions you might have.&nbsp; I know this might be a bit more advanced than I intended.&nbsp; The full code is pasted below&hellip;</p>
<h3>Summary</h3>
<p>We have covered some C# basics, as well as our first dive into analyzing government data.</p>
<div>
<div id="highlighter_777269" class="syntaxhighlighter  csharp ie">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>
<div class="line number56 index55 alt1">56</div>
<div class="line number57 index56 alt2">57</div>
<div class="line number58 index57 alt1">58</div>
<div class="line number59 index58 alt2">59</div>
<div class="line number60 index59 alt1">60</div>
<div class="line number61 index60 alt2">61</div>
<div class="line number62 index61 alt1">62</div>
<div class="line number63 index62 alt2">63</div>
<div class="line number64 index63 alt1">64</div>
<div class="line number65 index64 alt2">65</div>
<div class="line number66 index65 alt1">66</div>
<div class="line number67 index66 alt2">67</div>
<div class="line number68 index67 alt1">68</div>
<div class="line number69 index68 alt2">69</div>
<div class="line number70 index69 alt1">70</div>
<div class="line number71 index70 alt2">71</div>
<div class="line number72 index71 alt1">72</div>
<div class="line number73 index72 alt2">73</div>
<div class="line number74 index73 alt1">74</div>
<div class="line number75 index74 alt2">75</div>
<div class="line number76 index75 alt1">76</div>
<div class="line number77 index76 alt2">77</div>
<div class="line number78 index77 alt1">78</div>
<div class="line number79 index78 alt2">79</div>
<div class="line number80 index79 alt1">80</div>
<div class="line number81 index80 alt2">81</div>
<div class="line number82 index81 alt1">82</div>
<div class="line number83 index82 alt2">83</div>
<div class="line number84 index83 alt1">84</div>
<div class="line number85 index84 alt2">85</div>
<div class="line number86 index85 alt1">86</div>
<div class="line number87 index86 alt2">87</div>
<div class="line number88 index87 alt1">88</div>
<div class="line number89 index88 alt2">89</div>
<div class="line number90 index89 alt1">90</div>
<div class="line number91 index90 alt2">91</div>
<div class="line number92 index91 alt1">92</div>
<div class="line number93 index92 alt2">93</div>
<div class="line number94 index93 alt1">94</div>
<div class="line number95 index94 alt2">95</div>
<div class="line number96 index95 alt1">96</div>
<div class="line number97 index96 alt2">97</div>
<div class="line number98 index97 alt1">98</div>
<div class="line number99 index98 alt2">99</div>
<div class="line number100 index99 alt1">100</div>
<div class="line number101 index100 alt2">101</div>
<div class="line number102 index101 alt1">102</div>
<div class="line number103 index102 alt2">103</div>
<div class="line number104 index103 alt1">104</div>
<div class="line number105 index104 alt2">105</div>
<div class="line number106 index105 alt1">106</div>
<div class="line number107 index106 alt2">107</div>
<div class="line number108 index107 alt1">108</div>
<div class="line number109 index108 alt2">109</div>
<div class="line number110 index109 alt1">110</div>
<div class="line number111 index110 alt2">111</div>
<div class="line number112 index111 alt1">112</div>
<div class="line number113 index112 alt2">113</div>
<div class="line number114 index113 alt1">114</div>
<div class="line number115 index114 alt2">115</div>
<div class="line number116 index115 alt1">116</div>
<div class="line number117 index116 alt2">117</div>
<div class="line number118 index117 alt1">118</div>
<div class="line number119 index118 alt2">119</div>
<div class="line number120 index119 alt1">120</div>
<div class="line number121 index120 alt2">121</div>
<div class="line number122 index121 alt1">122</div>
<div class="line number123 index122 alt2">123</div>
<div class="line number124 index123 alt1">124</div>
<div class="line number125 index124 alt2">125</div>
<div class="line number126 index125 alt1">126</div>
<div class="line number127 index126 alt2">127</div>
<div class="line number128 index127 alt1">128</div>
<div class="line number129 index128 alt2">129</div>
<div class="line number130 index129 alt1">130</div>
<div class="line number131 index130 alt2">131</div>
<div class="line number132 index131 alt1">132</div>
<div class="line number133 index132 alt2">133</div>
<div class="line number134 index133 alt1">134</div>
<div class="line number135 index134 alt2">135</div>
<div class="line number136 index135 alt1">136</div>
<div class="line number137 index136 alt2">137</div>
<div class="line number138 index137 alt1">138</div>
<div class="line number139 index138 alt2">139</div>
<div class="line number140 index139 alt1">140</div>
<div class="line number141 index140 alt2">141</div>
<div class="line number142 index141 alt1">142</div>
<div class="line number143 index142 alt2">143</div>
<div class="line number144 index143 alt1">144</div>
<div class="line number145 index144 alt2">145</div>
<div class="line number146 index145 alt1">146</div>
<div class="line number147 index146 alt2">147</div>
<div class="line number148 index147 alt1">148</div>
<div class="line number149 index148 alt2">149</div>
<div class="line number150 index149 alt1">150</div>
<div class="line number151 index150 alt2">151</div>
<div class="line number152 index151 alt1">152</div>
<div class="line number153 index152 alt2">153</div>
<div class="line number154 index153 alt1">154</div>
<div class="line number155 index154 alt2">155</div>
<div class="line number156 index155 alt1">156</div>
<div class="line number157 index156 alt2">157</div>
<div class="line number158 index157 alt1">158</div>
<div class="line number159 index158 alt2">159</div>
<div class="line number160 index159 alt1">160</div>
<div class="line number161 index160 alt2">161</div>
<div class="line number162 index161 alt1">162</div>
<div class="line number163 index162 alt2">163</div>
<div class="line number164 index163 alt1">164</div>
<div class="line number165 index164 alt2">165</div>
<div class="line number166 index165 alt1">166</div>
<div class="line number167 index166 alt2">167</div>
<div class="line number168 index167 alt1">168</div>
<div class="line number169 index168 alt2">169</div>
<div class="line number170 index169 alt1">170</div>
<div class="line number171 index170 alt2">171</div>
<div class="line number172 index171 alt1">172</div>
<div class="line number173 index172 alt2">173</div>
<div class="line number174 index173 alt1">174</div>
<div class="line number175 index174 alt2">175</div>
<div class="line number176 index175 alt1">176</div>
<div class="line number177 index176 alt2">177</div>
<div class="line number178 index177 alt1">178</div>
<div class="line number179 index178 alt2">179</div>
<div class="line number180 index179 alt1">180</div>
<div class="line number181 index180 alt2">181</div>
<div class="line number182 index181 alt1">182</div>
<div class="line number183 index182 alt2">183</div>
<div class="line number184 index183 alt1">184</div>
<div class="line number185 index184 alt2">185</div>
<div class="line number186 index185 alt1">186</div>
<div class="line number187 index186 alt2">187</div>
<div class="line number188 index187 alt1">188</div>
<div class="line number189 index188 alt2">189</div>
<div class="line number190 index189 alt1">190</div>
<div class="line number191 index190 alt2">191</div>
<div class="line number192 index191 alt1">192</div>
<div class="line number193 index192 alt2">193</div>
<div class="line number194 index193 alt1">194</div>
<div class="line number195 index194 alt2">195</div>
<div class="line number196 index195 alt1">196</div>
<div class="line number197 index196 alt2">197</div>
<div class="line number198 index197 alt1">198</div>
<div class="line number199 index198 alt2">199</div>
<div class="line number200 index199 alt1">200</div>
<div class="line number201 index200 alt2">201</div>
<div class="line number202 index201 alt1">202</div>
<div class="line number203 index202 alt2">203</div>
<div class="line number204 index203 alt1">204</div>
<div class="line number205 index204 alt2">205</div>
<div class="line number206 index205 alt1">206</div>
<div class="line number207 index206 alt2">207</div>
<div class="line number208 index207 alt1">208</div>
<div class="line number209 index208 alt2">209</div>
<div class="line number210 index209 alt1">210</div>
<div class="line number211 index210 alt2">211</div>
<div class="line number212 index211 alt1">212</div>
<div class="line number213 index212 alt2">213</div>
<div class="line number214 index213 alt1">214</div>
<div class="line number215 index214 alt2">215</div>
<div class="line number216 index215 alt1">216</div>
<div class="line number217 index216 alt2">217</div>
<div class="line number218 index217 alt1">218</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">Excel;</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">using</code> <code class="csharp plain">System;</code></div>
<div class="line number3 index2 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">System.Collections.Generic;</code></div>
<div class="line number4 index3 alt1"><code class="csharp keyword">using</code> <code class="csharp plain">System.Data;</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">using</code> <code class="csharp plain">System.IO;</code></div>
<div class="line number6 index5 alt1">&nbsp;</div>
<div class="line number7 index6 alt2"><code class="csharp keyword">namespace</code> <code class="csharp plain">Tutorial</code></div>
<div class="line number8 index7 alt1"><code class="csharp plain">{</code></div>
<div class="line number9 index8 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Enum Type</code></div>
<div class="line number10 index9 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//These are actually integer values, but can be named.</code></div>
<div class="line number11 index10 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Useful for switch statements.</code></div>
<div class="line number12 index11 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">enum</code> <code class="csharp plain">Stats</code></div>
<div class="line number13 index12 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number14 index13 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Employed,</code></div>
<div class="line number15 index14 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Unemployed,</code></div>
<div class="line number16 index15 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">MedianIncome,</code></div>
<div class="line number17 index16 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">LaborForce,</code></div>
<div class="line number18 index17 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number19 index18 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number20 index19 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Data Class that we can use for holding data.</code></div>
<div class="line number21 index20 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number22 index21 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">class</code> <code class="csharp plain">AreaStatistic</code></div>
<div class="line number23 index22 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number24 index23 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number25 index24 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Data property of type string, holds the state this area is in.</code></div>
<div class="line number26 index25 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number27 index26 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">string</code> <code class="csharp plain">State { </code><code class="csharp keyword">get</code><code class="csharp plain">; </code><code class="csharp keyword">set</code><code class="csharp plain">; }</code></div>
<div class="line number28 index27 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number29 index28 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Name of the area within the state.</code></div>
<div class="line number30 index29 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number31 index30 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">string</code> <code class="csharp plain">AreaName { </code><code class="csharp keyword">get</code><code class="csharp plain">; </code><code class="csharp keyword">set</code><code class="csharp plain">; }</code></div>
<div class="line number32 index31 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number33 index32 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// List of statistics for each year of this particular area.</code></div>
<div class="line number34 index33 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// It is a List of a Tuple, which is a pair of objects, in which the first</code></div>
<div class="line number35 index34 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// object is an integer and the second object is a tuple.</code></div>
<div class="line number36 index35 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// The second Tuple is a pair of objects in which the first is a Stat enum and the second is</code></div>
<div class="line number37 index36 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// a float?&nbsp; a float? is a nullable floating point number</code></div>
<div class="line number38 index37 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number39 index38 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp plain">List&lt;Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;&gt; YearlyStats { </code><code class="csharp keyword">get</code><code class="csharp plain">; </code><code class="csharp keyword">set</code><code class="csharp plain">; }</code></div>
<div class="line number40 index39 alt1">&nbsp;</div>
<div class="line number41 index40 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number42 index41 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number43 index42 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Primary program that lets us do stuff.</code></div>
<div class="line number44 index43 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number45 index44 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">class</code> <code class="csharp plain">Program</code></div>
<div class="line number46 index45 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number47 index46 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number48 index47 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Entry point to the program.</code></div>
<div class="line number49 index48 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number50 index49 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;param name="args"&gt;Command line arguments passed in.&lt;/param&gt;</code></div>
<div class="line number51 index50 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">static</code> <code class="csharp keyword">void</code> <code class="csharp plain">Main(</code><code class="csharp keyword">string</code><code class="csharp plain">[] args)</code></div>
<div class="line number52 index51 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number53 index52 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//We populate the type "stats" with data we read from the .xls file.</code></div>
<div class="line number54 index53 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">List&lt;AreaStatistic&gt; stats = Program.ReadInData(</code><code class="csharp string">"C:\\Unemployment.xls"</code><code class="csharp plain">);</code></div>
<div class="line number55 index54 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//just lets us see some output.</code></div>
<div class="line number56 index55 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Console.ReadKey();</code></div>
<div class="line number57 index56 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number58 index57 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number59 index58 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Method we define that allows our Main function to look cleaner.&nbsp; This reads in the data and returns</code></div>
<div class="line number60 index59 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// a list of statistics</code></div>
<div class="line number61 index60 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number62 index61 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;param name="url"&gt;location on our drive where the file is.&lt;/param&gt;</code></div>
<div class="line number63 index62 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;returns&gt;List of statistics for each area.&lt;/returns&gt;</code></div>
<div class="line number64 index63 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">static</code> <code class="csharp plain">List&lt;AreaStatistic&gt; ReadInData(</code><code class="csharp keyword">string</code> <code class="csharp plain">url)</code></div>
<div class="line number65 index64 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number66 index65 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Initialize the stats object as a new list that holds objects of type AreaStatistics</code></div>
<div class="line number67 index66 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">List&lt;AreaStatistic&gt; stats = </code><code class="csharp keyword">new</code> <code class="csharp plain">List&lt;AreaStatistic&gt;();</code></div>
<div class="line number68 index67 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Using ensures that the reader is disposed of from memory when we are done with it.</code></div>
<div class="line number69 index68 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">using</code> <code class="csharp plain">(StreamReader reader = </code><code class="csharp keyword">new</code> <code class="csharp plain">StreamReader(url))</code></div>
<div class="line number70 index69 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number71 index70 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//This is from the ExcelData library we brought in, that parses the excel data for us.</code></div>
<div class="line number72 index71 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(reader.BaseStream);</code></div>
<div class="line number73 index72 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Converts the stream into a dataset type.</code></div>
<div class="line number74 index73 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">DataSet d = excelReader.AsDataSet();</code></div>
<div class="line number75 index74 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//There is only 1 table, but we iterate as if there were multiples anyways.</code></div>
<div class="line number76 index75 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">foreach</code> <code class="csharp plain">(DataTable dt </code><code class="csharp keyword">in</code> <code class="csharp plain">d.Tables)</code></div>
<div class="line number77 index76 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number78 index77 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Iterate each row in the table.</code></div>
<div class="line number79 index78 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">foreach</code> <code class="csharp plain">(DataRow r </code><code class="csharp keyword">in</code> <code class="csharp plain">dt.Rows)</code></div>
<div class="line number80 index79 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number81 index80 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">try</code></div>
<div class="line number82 index81 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number83 index82 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//add to our stats list the statistic after we convert it.</code></div>
<div class="line number84 index83 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stats.Add(Program.ConvertRowToStat(r));</code></div>
<div class="line number85 index84 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number86 index85 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">catch</code><code class="csharp plain">(Exception e)</code></div>
<div class="line number87 index86 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number88 index87 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//if something goes wrong, write it to the console.</code></div>
<div class="line number89 index88 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//tell me what happened.</code></div>
<div class="line number90 index89 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Console.WriteLine(e.Message);</code></div>
<div class="line number91 index90 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number92 index91 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number93 index92 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number94 index93 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number95 index94 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//return the list of stats</code></div>
<div class="line number96 index95 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp plain">stats;</code></div>
<div class="line number97 index96 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number98 index97 alt1">&nbsp;</div>
<div class="line number99 index98 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number100 index99 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Converts a single row into the AreaStatistic Type.</code></div>
<div class="line number101 index100 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Note, this is based on the format of the file being known.</code></div>
<div class="line number102 index101 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number103 index102 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;param name="r"&gt;Data Row&lt;/param&gt;</code></div>
<div class="line number104 index103 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;returns&gt;AreaStatistic&lt;/returns&gt;</code></div>
<div class="line number105 index104 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">static</code> <code class="csharp plain">AreaStatistic ConvertRowToStat(DataRow r)</code></div>
<div class="line number106 index105 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number107 index106 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//create an empty stat object we can populate</code></div>
<div class="line number108 index107 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">AreaStatistic stat = </code><code class="csharp keyword">new</code> <code class="csharp plain">AreaStatistic();</code></div>
<div class="line number109 index108 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Get the state code from the data row.</code></div>
<div class="line number110 index109 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stat.State = r.ItemArray[1].ToString();</code></div>
<div class="line number111 index110 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//if the state code is not of length 2, it is not a data row.</code></div>
<div class="line number112 index111 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">if</code><code class="csharp plain">(stat.State.Length != 2)</code></div>
<div class="line number113 index112 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number114 index113 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Throw an exception so the code stops here and doesn't continue.</code></div>
<div class="line number115 index114 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//An exception will be printed to the console due to the line of code that</code></div>
<div class="line number116 index115 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//wraps this.</code></div>
<div class="line number117 index116 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">throw</code> <code class="csharp keyword">new</code> <code class="csharp plain">Exception(</code><code class="csharp string">"Not data row"</code><code class="csharp plain">);</code></div>
<div class="line number118 index117 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number119 index118 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//get the area name.</code></div>
<div class="line number120 index119 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stat.AreaName = r.ItemArray[2].ToString();</code></div>
<div class="line number121 index120 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Build an empty object for the yearly stats.</code></div>
<div class="line number122 index121 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stat.YearlyStats = </code><code class="csharp keyword">new</code> <code class="csharp plain">List&lt;Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;&gt;();</code></div>
<div class="line number123 index122 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Stat years are 2000-2013.&nbsp; The columns start at column 9,</code></div>
<div class="line number124 index123 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//There are three rows of data and 1 skipped row.</code></div>
<div class="line number125 index124 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Therefor we do 9 (for year 2000 and add 4 * the current iteration to that)</code></div>
<div class="line number126 index125 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">for</code> <code class="csharp plain">(</code><code class="csharp keyword">int</code> <code class="csharp plain">i = 0; i &lt; 14; i++)</code></div>
<div class="line number127 index126 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number128 index127 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Add to the list of stats the stats for this year, total of 13 stats.</code></div>
<div class="line number129 index128 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stat.YearlyStats.AddRange(Program.GetStatsForYear(r, 2000 + i, 9 + (i * 4)));</code></div>
<div class="line number130 index129 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number131 index130 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//row 65 has income data.</code></div>
<div class="line number132 index131 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">string</code> <code class="csharp plain">s = r.ItemArray[65].ToString();</code></div>
<div class="line number133 index132 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">float</code><code class="csharp plain">? f;</code></div>
<div class="line number134 index133 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//sometimes data is blank, we need to deal with that.</code></div>
<div class="line number135 index134 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">if</code> <code class="csharp plain">(</code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrEmpty(s) || </code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrWhiteSpace(s))</code></div>
<div class="line number136 index135 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number137 index136 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//representation of no data.</code></div>
<div class="line number138 index137 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f = </code><code class="csharp keyword">null</code><code class="csharp plain">;</code></div>
<div class="line number139 index138 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number140 index139 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">else</code></div>
<div class="line number141 index140 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number142 index141 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//we should be good to parse this.</code></div>
<div class="line number143 index142 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f = </code><code class="csharp keyword">float</code><code class="csharp plain">.Parse(s);</code></div>
<div class="line number144 index143 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number145 index144 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//add the data.</code></div>
<div class="line number146 index145 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stat.YearlyStats.Add(</code></div>
<div class="line number147 index146 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;</code></div>
<div class="line number148 index147 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(2013, </code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;</code></div>
<div class="line number149 index148 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(Stats.MedianIncome, f)));</code></div>
<div class="line number150 index149 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Return the stats for this area.</code></div>
<div class="line number151 index150 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp plain">stat;</code></div>
<div class="line number152 index151 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number153 index152 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;summary&gt;</code></div>
<div class="line number154 index153 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// Gets stats for a particular year.</code></div>
<div class="line number155 index154 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;/summary&gt;</code></div>
<div class="line number156 index155 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;param name="r"&gt;Data Row you want to get stats for for that year&lt;/param&gt;</code></div>
<div class="line number157 index156 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;param name="year"&gt;Year you want to have data for&lt;/param&gt;</code></div>
<div class="line number158 index157 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;param name="i"&gt;index starting point for that year.&lt;/param&gt;</code></div>
<div class="line number159 index158 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// &lt;returns&gt;&lt;/returns&gt;</code></div>
<div class="line number160 index159 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">public</code> <code class="csharp keyword">static</code> <code class="csharp plain">List&lt;Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;&gt; GetStatsForYear(DataRow r, </code><code class="csharp keyword">int</code> <code class="csharp plain">year, </code><code class="csharp keyword">int</code> <code class="csharp plain">i)</code></div>
<div class="line number161 index160 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number162 index161 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Create the empty object which holds the stats.</code></div>
<div class="line number163 index162 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">List&lt;Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;&gt; stats = </code><code class="csharp keyword">new</code> <code class="csharp plain">List&lt;Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;&gt;();</code></div>
<div class="line number164 index163 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//Begin big region for making sure we deal with empty or null data.</code></div>
<div class="line number165 index164 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">string</code> <code class="csharp plain">s = r.ItemArray[i].ToString();</code></div>
<div class="line number166 index165 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">string</code> <code class="csharp plain">s1 = r.ItemArray[i + 1].ToString();</code></div>
<div class="line number167 index166 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">string</code> <code class="csharp plain">s2 = r.ItemArray[i + 2].ToString();</code></div>
<div class="line number168 index167 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">float</code><code class="csharp plain">? f;</code></div>
<div class="line number169 index168 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">float</code><code class="csharp plain">? f1;</code></div>
<div class="line number170 index169 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">float</code><code class="csharp plain">? f2;</code></div>
<div class="line number171 index170 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">if</code> <code class="csharp plain">(</code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrEmpty(s) || </code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrWhiteSpace(s))</code></div>
<div class="line number172 index171 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number173 index172 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f = </code><code class="csharp keyword">null</code><code class="csharp plain">;</code></div>
<div class="line number174 index173 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number175 index174 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">else</code></div>
<div class="line number176 index175 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number177 index176 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f = </code><code class="csharp keyword">float</code><code class="csharp plain">.Parse(s);</code></div>
<div class="line number178 index177 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number179 index178 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">if</code> <code class="csharp plain">(</code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrEmpty(s1) || </code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrWhiteSpace(s1))</code></div>
<div class="line number180 index179 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number181 index180 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f1 = </code><code class="csharp keyword">null</code><code class="csharp plain">;</code></div>
<div class="line number182 index181 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number183 index182 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">else</code></div>
<div class="line number184 index183 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number185 index184 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f1 = </code><code class="csharp keyword">float</code><code class="csharp plain">.Parse(s1);</code></div>
<div class="line number186 index185 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number187 index186 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">if</code> <code class="csharp plain">(</code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrEmpty(s2) || </code><code class="csharp keyword">string</code><code class="csharp plain">.IsNullOrWhiteSpace(s2))</code></div>
<div class="line number188 index187 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number189 index188 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f2 = </code><code class="csharp keyword">null</code><code class="csharp plain">;</code></div>
<div class="line number190 index189 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number191 index190 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">else</code></div>
<div class="line number192 index191 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{</code></div>
<div class="line number193 index192 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">f2 = </code><code class="csharp keyword">float</code><code class="csharp plain">.Parse(s2);</code></div>
<div class="line number194 index193 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number195 index194 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//End big area of checking for bad data.</code></div>
<div class="line number196 index195 alt1">&nbsp;</div>
<div class="line number197 index196 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//get data for LaborForce this year</code></div>
<div class="line number198 index197 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stats.Add(</code></div>
<div class="line number199 index198 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;</code></div>
<div class="line number200 index199 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(year, </code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;</code></div>
<div class="line number201 index200 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(Stats.LaborForce, f)));</code></div>
<div class="line number202 index201 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//get data for # employed this year.</code></div>
<div class="line number203 index202 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stats.Add(</code></div>
<div class="line number204 index203 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;</code></div>
<div class="line number205 index204 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(year, </code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;</code></div>
<div class="line number206 index205 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(Stats.Employed, f1)));</code></div>
<div class="line number207 index206 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//get data for # unemployed this year.</code></div>
<div class="line number208 index207 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">stats.Add(</code></div>
<div class="line number209 index208 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;</code><code class="csharp keyword">int</code><code class="csharp plain">, Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;&gt;</code></div>
<div class="line number210 index209 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(year, </code><code class="csharp keyword">new</code> <code class="csharp plain">Tuple&lt;Stats, </code><code class="csharp keyword">float</code><code class="csharp plain">?&gt;</code></div>
<div class="line number211 index210 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">(Stats.Unemployed, f2)));</code></div>
<div class="line number212 index211 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp comments">//return the yearly stats.</code></div>
<div class="line number213 index212 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">return</code> <code class="csharp plain">stats;</code></div>
<div class="line number214 index213 alt1"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number215 index214 alt2">&nbsp;</div>
<div class="line number216 index215 alt1">&nbsp;</div>
<div class="line number217 index216 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}</code></div>
<div class="line number218 index217 alt1"><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Deploying F# Web Job to Azure</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_crooks_dev_blog/deploying-f-web-job-to-azure</link>
      <pubDate>Wed, 18 Feb 2015 13:52:57 GMT</pubDate>
      <dc:creator><![CDATA[Dave Crook]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_crooks_dev_blog/2015/02/18/deploying-f-web-job-to-azure/</guid>
      <description><![CDATA[Hi All,
This is another pull from my blog over at: www.indiedevspot.com

This article is one of...]]></description>
      <content:encoded><![CDATA[<p>Hi All,</p>
<p>This is another pull from my blog over at: <a href="https://www.indiedevspot.com">www.indiedevspot.com</a></p>
<div class="content clear">
<p>This article is one of those that is going to help remind me how to do this deployment, as it can be a bit tricky.&nbsp; If you are working with F# for web jobs, like I have started doing, there are a few steps.</p>
<ol>
<li>Create a new console application</li>
<li>Add proper nuget packages</li>
<li><strong>Manually</strong> add a .dll reference and copy said .dll to output</li>
<li>Zip up and deploy entire output folder.</li>
</ol>
<p>&nbsp;</p>
<h2><strong>Create new Console Application</strong></h2>
<p>This is easy.&nbsp; See picture.</p>
<a class="fancybox" title="" href="https://indiedevspot.azurewebsites.net/wp-content/uploads/2015/02/newConsoleApp.png"><img class="responsive wp-image-4991" src="https://indiedevspot.azurewebsites.net/wp-content/themes/themeforest-1739143-website-responsive-wordpress-theme/website/data/php/timthumb.php?src=wp-content/uploads/2015/02/newConsoleApp.png&amp;q=90&amp;w=298" alt="newConsoleApp" data-src="wp-content/uploads/2015/02/newConsoleApp.png" /></a>
<h2><strong>Add Proper Nuget Packages</strong></h2>
<ol>
<li>Microsoft.Azure.WebJobs.Core</li>
<li>Microsoft.Azure.WebJobs</li>
</ol><a class="fancybox" title="" href="https://indiedevspot.azurewebsites.net/wp-content/uploads/2015/02/nugetpackages.png"><img class="responsive wp-image-5001" src="https://indiedevspot.azurewebsites.net/wp-content/themes/themeforest-1739143-website-responsive-wordpress-theme/website/data/php/timthumb.php?src=wp-content/uploads/2015/02/nugetpackages.png&amp;q=90&amp;w=298" alt="nugetpackages" data-src="wp-content/uploads/2015/02/nugetpackages.png" /></a>
<p>These packages contain the framework for Azure Web Jobs.</p>
<h2><strong>Add Proper References</strong></h2>
<p>So I discovered that I needed FSharp.Core in my solution.&nbsp; I got the craziest errors that seemed to have nothing to do with this, until I added a printf statement to see what my connection string was.&nbsp; Anyways, you need to manually add a reference to FSharp.Core v4.3.1 .&nbsp; You also need to copy this to the output directory of your solution, as setting the properties to copy currently does not actually copy this library as expected.</p>
<a class="fancybox" title="" href="https://indiedevspot.azurewebsites.net/wp-content/uploads/2015/02/output.png"><img class="responsive wp-image-5011" src="https://indiedevspot.azurewebsites.net/wp-content/themes/themeforest-1739143-website-responsive-wordpress-theme/website/data/php/timthumb.php?src=wp-content/uploads/2015/02/output.png&amp;q=90&amp;w=298" alt="output" data-src="wp-content/uploads/2015/02/output.png" /></a>
<h2><strong>Zip Up Entire Folder and Deploy</strong></h2>
<p>This should be straight forward.&nbsp; Using any other article out there in the world, you can deploy, but I will walk through here as well.</p>
<ol>
<li>Go to your Azure Portal https://azure.microsoft.com/en-us/</li>
<li>Navigate to the website you wish to deploy this webjob with</li>
<li>Click on the WebJobs section</li>
<li><a class="fancybox" title="" href="https://indiedevspot.azurewebsites.net/wp-content/uploads/2015/02/azurewebjobportal.png"><img class="responsive wp-image-4971" src="https://indiedevspot.azurewebsites.net/wp-content/themes/themeforest-1739143-website-responsive-wordpress-theme/website/data/php/timthumb.php?src=wp-content/uploads/2015/02/azurewebjobportal.png&amp;q=90&amp;w=298" alt="azurewebjobportal" data-src="wp-content/uploads/2015/02/azurewebjobportal.png" /></a></li>
<li>Click the Add button</li>
<li>Name your web job</li>
<li>Select your zipped up output folder</li>
<li>Set your job per type you want (I use continuously as I link to queues mostly)</li>
<li><a class="fancybox" title="" href="https://indiedevspot.azurewebsites.net/wp-content/uploads/2015/02/webjobsettings.png"><img class="responsive wp-image-4981" src="https://indiedevspot.azurewebsites.net/wp-content/themes/themeforest-1739143-website-responsive-wordpress-theme/website/data/php/timthumb.php?src=wp-content/uploads/2015/02/webjobsettings.png&amp;q=90&amp;w=298" alt="webjobsettings" data-src="wp-content/uploads/2015/02/webjobsettings.png" /></a></li>
<li>Click the check mark</li>
<li>If it stays on &ldquo;Running&rdquo; everything went well.</li>
</ol>
<h2><strong>Summary</strong></h2>
<p>That&rsquo;s it!&nbsp; If you want, you can navigate to this repository, which has a functional web job you can try out: https://github.com/drcrook1/Nerds4Hire Note that you will need to go through all of these steps with this same project.</p>
</div>]]></content:encoded>
    </item>
  </channel>
</rss>