<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3655873319906185096</id><updated>2012-01-04T22:34:37.451-08:00</updated><title type='text'>The life of a .NET Developer</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>85</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-4938098633233963908</id><published>2012-01-04T22:34:00.000-08:00</published><updated>2012-01-04T22:34:37.463-08:00</updated><title type='text'>Functional Programming Topics Have Moved</title><content type='html'>From here on out all functional programming related posts can be found over at &lt;a href="http://thelastexpression.blogspot.com/"&gt;The Last Expression&lt;/a&gt;&lt;br /&gt;Go check it out! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-4938098633233963908?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/4938098633233963908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2012/01/functional-programming-topics-have.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4938098633233963908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4938098633233963908'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2012/01/functional-programming-topics-have.html' title='Functional Programming Topics Have Moved'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-5310278126649817631</id><published>2011-08-02T17:00:00.000-07:00</published><updated>2011-08-02T17:00:20.749-07:00</updated><title type='text'>Bringing F# to the Microsoft Surface Table</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-z6nFYv9o9oU/TjiAK-LSsMI/AAAAAAAAAdE/4Ex9r7vYmjI/s1600/surface_fun.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-z6nFYv9o9oU/TjiAK-LSsMI/AAAAAAAAAdE/4Ex9r7vYmjI/s1600/surface_fun.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Within the last month or so Microsoft has dropped some really cool&lt;br /&gt;SDK's&amp;nbsp;for the public to try out. One of them is the Microsoft -&lt;br /&gt;Surface 2.0 SDK &amp;amp;&amp;nbsp;Runtime&amp;nbsp;available &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=26716"&gt;here&lt;/a&gt;. Once you download&lt;br /&gt;and install the tools and runtime you'll notice a few new applications&lt;br /&gt;in your start menu. &lt;b&gt;Input Simulator&lt;/b&gt; and &lt;b&gt;Input Visualizer&lt;/b&gt;. These two&lt;br /&gt;apps are designed to help you interact with your custom surface&lt;br /&gt;application if your dev box is not touch enabled. Now that we&lt;br /&gt;have the basics its a good time to figure out what you're going to build&lt;br /&gt;to get familiar with the surface API's. Luckily, we have a few things&lt;br /&gt;to help us get started. Existing WPF/Silverlight skills and a little sample&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ff727811.aspx"&gt;documentation&lt;/a&gt;. Anytime I start hacking against a new API I always look&lt;br /&gt;for some sample code or quick start to get me going. Unfortunately, the&lt;br /&gt;sample code at the link above has no support for F#. However we know&lt;br /&gt;better. We know that anything C# or VB can do F# can do better. :-)&lt;br /&gt;So let's fire up VS2010 and create an new F# console application using&lt;br /&gt;the console application template. Once you've done that you'll need to&lt;br /&gt;add the following references to your project. These references will make&lt;br /&gt;the console application wpf &amp;amp; surface enabled.&lt;br /&gt;&lt;br /&gt;System&lt;br /&gt;System.Xaml&lt;br /&gt;Microsoft.Surface&lt;br /&gt;Microsoft.Surface.Core&lt;br /&gt;Microsoft.Surface.Presentation&lt;br /&gt;PresentationCore&lt;br /&gt;PresentationFramework&lt;br /&gt;WindowsBase&lt;br /&gt;&lt;br /&gt;Now to tip our toes in the Surface SDK water. We'll start by creating a&lt;br /&gt;simple&amp;nbsp;Scatter View application which basically scatters a bunch of&lt;br /&gt;images on the screen&amp;nbsp;for&amp;nbsp;the user to interact with. This is also the&lt;br /&gt;recommended "first application" in the&amp;nbsp;above documentation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt; System&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt; System.IO&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt; System.Windows.Media.Imaging&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt;&amp;nbsp;System.Windows&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt;&amp;nbsp;System.Windows.Controls&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Microsoft.Surface&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Microsoft.Surface.Presentation.Controls&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; app = &lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt; Application()&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; window =&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt; SurfaceWindow(Title= &lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;"F# ScatterView Surface Demo"&lt;/b&gt;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AutoOrientsOnStartup = &lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;true&lt;/b&gt;&lt;/span&gt;)&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* scatter view control bound to windows folder - my pictures*)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; path = &lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;@"C:\Users\Public\Pictures\Sample Pictures"&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; scatter = &lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt; ScatterView()&lt;br /&gt;scatter.ItemsSource &amp;lt;-&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; seq {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/span&gt; f &lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;in&lt;/b&gt;&lt;/span&gt; Directory.GetFiles(path,&lt;span class="Apple-style-span" style="color: #38761d;"&gt; &lt;b&gt;"*.jpg"&lt;/b&gt;&lt;/span&gt;) &lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;yield&lt;/b&gt; &lt;b&gt;new&lt;/b&gt;&lt;/span&gt; Image(Source=&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt; BitmapImage(Uri(f, UriKind.Relative)))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;window.Content &amp;lt;- scatter&lt;br /&gt;[&lt;stathread&gt;] ignore &amp;lt;| (app).Run window&lt;/stathread&gt;&lt;br /&gt;&lt;br /&gt;As you can see from the code above the API is very similar to&lt;br /&gt;WPF/Silverlight, their is however a gotcha that I experienced when&lt;br /&gt;playing around with the API (which you may be able to see).&lt;br /&gt;&lt;br /&gt;When creating a SurfaceWindow you must have an application instance&lt;br /&gt;already created otherwise you can not create an instance of a&lt;br /&gt;Surface Window. :-(&lt;br /&gt;Other than that it is really just a matter of new'ing up controls specific&lt;br /&gt;to surface and placing them on the window or user control as normal.&lt;br /&gt;Also, it's worth mentioning that you can do all this in Xaml and still have&lt;br /&gt;your logic in F#. :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-Sample screen shot-&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-UI2jannk46k/TjiPQQQyKwI/AAAAAAAAAdI/Gzcmnw8ljcA/s1600/sample_surface_screen_shot.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="204" src="http://3.bp.blogspot.com/-UI2jannk46k/TjiPQQQyKwI/AAAAAAAAAdI/Gzcmnw8ljcA/s320/sample_surface_screen_shot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Until next time...&lt;br /&gt;-Develop with passion&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-5310278126649817631?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/5310278126649817631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2011/08/bringing-f-to-microsoft-surface-table.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/5310278126649817631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/5310278126649817631'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2011/08/bringing-f-to-microsoft-surface-table.html' title='Bringing F# to the Microsoft Surface Table'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-z6nFYv9o9oU/TjiAK-LSsMI/AAAAAAAAAdE/4Ex9r7vYmjI/s72-c/surface_fun.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-4792337609900221323</id><published>2011-06-13T10:31:00.000-07:00</published><updated>2011-06-13T10:31:08.148-07:00</updated><title type='text'>The Lonely WAIF Project</title><content type='html'>The lonely waif project is a animation library written entirely in F#.&lt;br /&gt;I'll just take a brief moment to explain the name. If you look up waif&lt;br /&gt;on &lt;a href="http://en.wikipedia.org/wiki/Waif"&gt;Wikipedia&lt;/a&gt; you'll find &amp;nbsp;that it's more or less defined as such:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px;"&gt;A&amp;nbsp;&lt;b&gt;waif&lt;/b&gt;&amp;nbsp;(from the Old French&amp;nbsp;&lt;i&gt;guaif&lt;/i&gt;, stray beast)&lt;sup class="reference" id="cite_ref-autogenerated1_0-0" style="font-style: normal; font-weight: normal; line-height: 1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Waif#cite_note-autogenerated1-0" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none; white-space: nowrap;"&gt;[1]&lt;/a&gt;&lt;/sup&gt;&amp;nbsp;is a living creature removed,&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px;"&gt;by hardship, loss or other helpless circumstance, from his original surroundings.&lt;/span&gt;&lt;br /&gt;I like to think of this projects original surroundings as the C# version&lt;br /&gt;and well, its lonely because I'm currently the only contributor and user. :)&lt;br /&gt;&lt;br /&gt;At this point you're probably wondering a few things...&lt;br /&gt;&lt;b&gt;a) Why an animation library in F#?&lt;/b&gt;&lt;br /&gt;&lt;b&gt;b) Why not just use the C# library from F#?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Well, I already use the library in my C#/F# polyglot project at work.&lt;br /&gt;It's nice and all, but I'm trying to reduce my code footprint.&lt;br /&gt;And unfortunately this mixed support is not helping very much.&lt;br /&gt;Besides, I'm working on a really clean and simple visualization&lt;br /&gt;component&amp;nbsp;which will allow me to visualize time series, having a way&lt;br /&gt;to animate the interactivity of that time series would be even nicer.&lt;br /&gt;Which brings us to the main reason why I'm doing it in F#.&lt;br /&gt;Trying off the shelf reporting controls is nice until you want that&lt;br /&gt;extra level of sophistication only to find yourself stuck. I really&lt;br /&gt;want that google charting level of sophistication but I know I will&lt;br /&gt;not come close to getting it with componentone charting controls.&lt;br /&gt;After all, google is not using off the shelf charting controls. :)&lt;br /&gt;&lt;br /&gt;Now that we understand the name of this library and the&lt;br /&gt;motivation behind it, let's take a look at it.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://code.google.com/p/the-lonely-waif-project/" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="108" src="http://4.bp.blogspot.com/-y9L2hrMqo8g/TfWl-cv3fdI/AAAAAAAAAY4/JG_V3yXRiw0/s400/project_img.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you head over to google code where the project is hosted you'll&lt;br /&gt;find two F# projects.&lt;br /&gt;&lt;b&gt;1) The animation library&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2) WPF test application which uses the library&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Let's take a look at one of the sample snippets.&lt;br /&gt;&lt;br /&gt;- Say you have a window with a simple rectangle shape on it&lt;br /&gt;and you want to animate the rotation of the angle.&lt;br /&gt;- Or maybe you want to simply move it across the screen.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Here's what the code might look like :&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; uri = &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;new&lt;/span&gt;&lt;/b&gt; System.Uri(&lt;span class="Apple-style-span" style="color: #38761d;"&gt;"/AnimationTest;component/MainView.xaml"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;UriKind.Relative)&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; window = &amp;nbsp;Application.LoadComponent(uri) :?&amp;gt; Window&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; animator = &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;new&lt;/span&gt;&lt;/b&gt; Animator() // animation time!&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* Grab UIElements *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; rect = window.FindName(&lt;span class="Apple-style-span" style="color: #38761d;"&gt;"rectangle"&lt;/span&gt;) :?&amp;gt; Rectangle&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* ===== Rotate Rectangle ===== *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; rtf = castAs&lt;transformgroup&gt;(rect.RenderTransform).Children.[2] :?&amp;gt; RotateTransform&lt;/transformgroup&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;(* Angle *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* DependencyObject - rotate transform *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;animator.AnimateDouble(rtf,&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* DependencyProperty *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; RotateTransform.AngleProperty,&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* EventHandler - callback function *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;null&lt;/span&gt;&lt;/b&gt;,&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* Duration - in milliseconds *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; 250.0,&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* Acceleration *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;None,&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* Deceleration *)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;None,&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* From *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;None,&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* To *)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Some(90.0)) |&amp;gt; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;ignore&lt;/span&gt;&lt;/b&gt;)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* ===== Translate Rectangle ===== *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; ttf = castAs&lt;transformgroup&gt;(rect.RenderTransform).Children.[0] :?&amp;gt; TranslateTransform&lt;/transformgroup&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* Y Axis *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;animator.AnimateDouble(ttf,&lt;br /&gt;&amp;nbsp; &amp;nbsp;TranslateTransform.YProperty,&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;null&lt;/span&gt;&lt;/b&gt;,250.0,None,None,None,Some(90.0)) |&amp;gt; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;ignore&lt;/span&gt;&lt;/b&gt;)&lt;br /&gt;&lt;br /&gt;There are a few more samples in the sample application but that's really&lt;br /&gt;all there is to it. I use the C# library all the time for creating custom&lt;br /&gt;controls&amp;nbsp;and widgets to use in my WPF applications.&lt;br /&gt;Now I get to use it in F#!&amp;nbsp;Over time I'll be adding more to the library&lt;br /&gt;so it has total parity with the C# library.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-4792337609900221323?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/4792337609900221323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2011/06/lonely-waif-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4792337609900221323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4792337609900221323'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2011/06/lonely-waif-project.html' title='The Lonely WAIF Project'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-y9L2hrMqo8g/TfWl-cv3fdI/AAAAAAAAAY4/JG_V3yXRiw0/s72-c/project_img.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-6089631887382418473</id><published>2011-06-07T22:07:00.000-07:00</published><updated>2011-06-07T22:17:51.289-07:00</updated><title type='text'>Simple Data Visualization using F# &amp; WPF/Silverlight</title><content type='html'>For several weeks now I've been getting back into Data Visualization&lt;br /&gt;projects (on the weekends).&amp;nbsp;I've also gone back to basics by re-reading&lt;br /&gt;&lt;a href="http://benfry.com/"&gt;Ben Fry's Visualizing Data&lt;/a&gt;&amp;nbsp;while sketching in &lt;a href="http://processing.org/"&gt;Processing&lt;/a&gt;.&amp;nbsp;Re-gaining the&lt;br /&gt;data visualization perspective has helped me out recently in my WPF&lt;br /&gt;application that&amp;nbsp;I'm working on (day job). The scenario was quite simple&lt;br /&gt;and I could have used any standard WPF&amp;nbsp;control to solve the problem&lt;br /&gt;but I wanted to do something that convey'd the data in a&amp;nbsp;more obvious&lt;br /&gt;way. So I went looking around the web for&amp;nbsp;inspiration and came across&lt;br /&gt;the following&amp;nbsp;flowing data post.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://flowingdata.com/2011/04/01/in-land-of-youtube-dislikes-justin-bieber-rules/" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="258" src="http://3.bp.blogspot.com/-T2AxoNrlV4A/Te6tPDjPyrI/AAAAAAAAAYo/Nqec9V_Itos/s320/youtube-dislikes_small.png" width="320" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: none; color: black;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The visualization above is (in my opinion) a great way to compare two&lt;br /&gt;values of information to one another with out using standard controls.&lt;br /&gt;In the above situation the two values are &lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;likes&lt;/span&gt;&lt;/b&gt; vs &lt;b&gt;&lt;span class="Apple-style-span" style="color: #990000;"&gt;dislikes&lt;/span&gt;. &lt;/b&gt;Straight&lt;br /&gt;away we can get a sense (as a end user) of how many people like a&lt;br /&gt;video&amp;nbsp;vs dislike a video based on color. In my WPF application I&lt;br /&gt;need to do&amp;nbsp;something similar. I need to show how many 3D geometric&lt;br /&gt;objects&amp;nbsp;on a particular 3D Model&amp;nbsp;are being used in other parts&lt;br /&gt;of the&amp;nbsp;system vs how many 3D objects are not being used at all in other&lt;br /&gt;parts of the system. So I thought to myself, how might I be able to pull&lt;br /&gt;off the above visualization in WPF? I fired up blend and&amp;nbsp;started sketching.&lt;br /&gt;After about thirty minutes I came up with a similar yet&amp;nbsp;simpler visualization.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-_yqXTHhXmkE/Te7O3uhk3dI/AAAAAAAAAY0/rMYdYLuuL_Y/s1600/blend1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://4.bp.blogspot.com/-_yqXTHhXmkE/Te7O3uhk3dI/AAAAAAAAAY0/rMYdYLuuL_Y/s320/blend1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-XFL1XHxWa7k/Te7J3WAsUvI/AAAAAAAAAYw/QsOKF_5mRSM/s1600/blend2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="291" src="http://4.bp.blogspot.com/-XFL1XHxWa7k/Te7J3WAsUvI/AAAAAAAAAYw/QsOKF_5mRSM/s320/blend2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can probably tell from the blend screen shots above&lt;br /&gt;that we can use a simple gradient color to represent the&lt;br /&gt;two values that we need to visualize for the user to&lt;br /&gt;compare. So I tried creating a border with a large corner&lt;br /&gt;radius of about 90 to get a circle that I can apply a border&lt;br /&gt;gradient color to. Unfortunately I wasn't able to get the&lt;br /&gt;effect that I wanted so I tried something simpler below&lt;br /&gt;the border. I created a simple rectangle and applied the&lt;br /&gt;gradient color to the fill of the rectangle. This allowed me&lt;br /&gt;to visually pull off the similar effect in the flowing data post!&lt;br /&gt;Now that I have a visual way to do this I just need to apply&lt;br /&gt;the data so that the rectangle gradient changes dynamically.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;#I&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;"path to assemblies below (here)"&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;#r&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;"PresentationFramework.dll"&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;#r&lt;/b&gt;&lt;/span&gt; &lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;"WindowsBase.dll"&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;#r&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;"PresentationCore.dll"&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;open&lt;/span&gt;&lt;/b&gt; System&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;open&lt;/span&gt;&lt;/b&gt; System.Windows&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;open&lt;/span&gt;&lt;/b&gt; System.Windows.Shapes&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;open&lt;/span&gt;&lt;/b&gt; System.Windows.Media&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;open&lt;/span&gt;&lt;/b&gt; System.Windows.Controls&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; r = &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;new&lt;/span&gt;&lt;/b&gt; Random()&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; total_count_of_all_objects = 4556&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* Helper functions - remember the (: byte) &amp;amp; (: float)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp;is just annotation for the return type of the function *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; to_byte (v: int) : byte = Convert.ToByte(v)&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; to_float (v: int) : float = Convert.ToDouble(v)&lt;br /&gt;&lt;br /&gt;let to_color (r: int) (g: int) (b: int) : Color =&lt;br /&gt;&amp;nbsp; &amp;nbsp; Color.FromRgb(r |&amp;gt; to_byte, g |&amp;gt; to_byte, b |&amp;gt; to_byte)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* Tuple to hold total number of objects used in the 3D Model&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(random) and total number of objects in the 3D Model *&lt;/span&gt;&lt;/b&gt;)&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; used_total = (r.Next(2000,4556),total_count_of_all_objects)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* Calculate the number of objects used relative to the total *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; simulation_result (used_total: int * int): float =&lt;br /&gt;&amp;nbsp; &amp;nbsp; let used,total = used_total&lt;br /&gt;&amp;nbsp; &amp;nbsp; used * 100 / total |&amp;gt; to_float&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; construct_visualization (used_total: int * int): Grid =&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(* Get simulation result and convert to value between 0 and 1&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for the gradient stops to&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&amp;nbsp;understand *)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; v = simulation_result used_total / 100.0&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; actual_color = &amp;nbsp;to_color 3 129 51&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; total_color = &amp;nbsp;to_color 255 5 5&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; start_point = &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;new&lt;/span&gt;&lt;/b&gt; Point(0.0, -0.925) &lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;//gradient start point&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; end_point = &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;new&lt;/span&gt;&lt;/b&gt; Point(1.0, - 0.893) &lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;// gradient end point&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; brush = &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;new&lt;/span&gt;&lt;/b&gt; LinearGradientBrush(actual_color, total_color, start_point, end_point)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; gradientStopColor1 = &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;new&lt;/span&gt;&lt;/b&gt; GradientStop(actual_color, v)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; gradientStopColor2 = &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;new&lt;/span&gt;&lt;/b&gt; GradientStop(total_color, v)&lt;br /&gt;&amp;nbsp; &amp;nbsp; brush.GradientStops.Add gradientStopColor1&lt;br /&gt;&amp;nbsp; &amp;nbsp; brush.GradientStops.Add gradientStopColor2&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; rect = &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;new&lt;/span&gt;&lt;/b&gt; Rectangle(Fill=brush)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; grd = &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;new&lt;/span&gt;&lt;/b&gt; Grid(Width=260.0, Height=30.0,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HorizontalAlignment=HorizontalAlignment.Center,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VerticalAlignment=VerticalAlignment.Center)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; grd.Children.Add rect |&amp;gt; ignore&lt;br /&gt;&amp;nbsp; &amp;nbsp; grd&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; shell = &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;new&lt;/span&gt;&lt;/b&gt; Window(Width=300.0,Height=300.0)&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; viz = construct_visualization used_total&lt;br /&gt;shell.Content &amp;lt;- viz&lt;br /&gt;&lt;br /&gt;[&lt;stathread&gt;&lt;stathread&gt;] ignore &amp;lt;| (&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;new&lt;/span&gt;&lt;/b&gt; Application()).Run shell&lt;/stathread&gt;&lt;/stathread&gt;&lt;br /&gt;&lt;stathread&gt;&lt;br /&gt;&lt;/stathread&gt;&lt;br /&gt;&lt;stathread&gt;It's worth noting that even though this was shown as a WPF sample it&lt;/stathread&gt;&lt;br /&gt;&lt;stathread&gt;could easily be applied to Silverlight, which is why I included it in the title&lt;/stathread&gt;&lt;br /&gt;&lt;stathread&gt;of the post. =)&lt;/stathread&gt;&lt;br /&gt;&lt;stathread&gt;&lt;br /&gt;&lt;/stathread&gt;&lt;br /&gt;&lt;stathread&gt;&lt;b&gt;F# is great for prototyping and executing ideas!&amp;nbsp;&lt;/b&gt;&lt;/stathread&gt;&lt;br /&gt;&lt;stathread&gt;&lt;b&gt;Just seeing something&amp;nbsp;&lt;/b&gt;&lt;/stathread&gt;&lt;b&gt;on the web and hopping right&lt;/b&gt;&lt;br /&gt;&lt;b&gt;into Blend/VS2010 to execute an idea&amp;nbsp;&lt;/b&gt;&lt;b&gt;in about an&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;hour is why I love this language on top of this platform.&lt;/b&gt;&lt;br /&gt;&lt;stathread&gt;&lt;br /&gt;&lt;/stathread&gt;&lt;br /&gt;Until next time...&lt;br /&gt;-Develop with passion&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-6089631887382418473?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/6089631887382418473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2011/06/simple-data-visualization-using-f.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6089631887382418473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6089631887382418473'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2011/06/simple-data-visualization-using-f.html' title='Simple Data Visualization using F# &amp; WPF/Silverlight'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-T2AxoNrlV4A/Te6tPDjPyrI/AAAAAAAAAYo/Nqec9V_Itos/s72-c/youtube-dislikes_small.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-6696899970406542942</id><published>2011-05-28T15:41:00.000-07:00</published><updated>2011-05-28T15:41:56.091-07:00</updated><title type='text'>F#'n like a MLer</title><content type='html'>Dear reader, for those of you who have been following my tweets know&lt;br /&gt;that I've been doing quite a bit of&amp;nbsp;functional programming research&lt;br /&gt;mainly in the ML family of functional languages, specifically Ocaml.&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-q_dp8i3_mvk/TeFZa6glljI/AAAAAAAAAYg/KweaMgaZ0k8/s1600/Morrisett.JPG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-q_dp8i3_mvk/TeFZa6glljI/AAAAAAAAAYg/KweaMgaZ0k8/s200/Morrisett.JPG" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Greg Morriset&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I've been learning a great deal about how to think and write like a functional programmer. So far the experience has been non-stop excitement and a lot of fun. In this post I want to take a break from the normal stuff related to how to do something in F# and share with you what I think is a more meaningful topic that I've recently learned from&lt;br /&gt;Professor &lt;a href="http://www.eecs.harvard.edu/~greg/"&gt;Greg Morrisett&lt;/a&gt;.&lt;br /&gt;&lt;b&gt;"How to Engineer a Function in ML"&lt;/b&gt;&lt;br /&gt;It's worth noting that Greg has done an amazing job adapting this technique to ML from &lt;b&gt;Matthias Felleisen &lt;/b&gt;who outlined this same technique in Scheme &amp;amp; Rackett which can be found in the classic book&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--bKKfi_VXN8/TeFcyy9pLsI/AAAAAAAAAYk/K0IADWNTsys/s1600/htdp-cover.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/--bKKfi_VXN8/TeFcyy9pLsI/AAAAAAAAAYk/K0IADWNTsys/s200/htdp-cover.gif" width="150" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.htdp.org/"&gt;How To Design Programs&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Even though the topic says ML I can tell you that it directly applies to F#. As I discover ML like techniques I quickly move from the &lt;a href="http://caml.inria.fr/download.en.html"&gt;top level&lt;/a&gt; (Ocaml REPL) to FSI to ensure that it works and makes sense.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The formula or&amp;nbsp;recipe for how to engineer a function is&amp;nbsp;actually not that difficult... "It's almost brainless"&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Let's take an example from Greg's lecture to help illustrate this technique:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Given a list of pairs of integers, produce the list of products of the pairs.&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;e.g., Given [ (2,3); (4,7);(5,2) ] return [6;28;10]&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The formula consists of the following 4 steps :&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;i&gt;Note: In plain&amp;nbsp;English&amp;nbsp;write down the input data and the output data of the function.&amp;nbsp;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;1)&lt;/b&gt; "&lt;b&gt;Write down the types" or the function signature&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;This can be done a couple of ways in F#&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;a) &amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt; &lt;span class="Apple-style-span" style="color: orange;"&gt;rec&lt;/span&gt; prods ( l : (int * int) &amp;nbsp;list ) =&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;(*explicit - type after the : is the return type of the function*)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;b) &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let&lt;/span&gt; &lt;span class="Apple-style-span" style="color: orange;"&gt;rec&lt;/span&gt; prods ( l: (int * int) list ) : int list =&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;2)&lt;/b&gt; &lt;b&gt;"Examine the inputs of the function and start tearing them apart."&lt;/b&gt;&lt;br /&gt;"Decompose the problem in to sub problems (usually by matching)"&lt;br /&gt;From our example above how do we tear apart a list?&lt;br /&gt;In general its the same two ways a list&amp;nbsp;is constructed.&lt;br /&gt;Empty List [ ] or Cons : :&amp;nbsp;"So we get two patterns - which is automatic"&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Note: pattern matches can nest which is what allows us&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;to tear apart the tuple on the&amp;nbsp;&lt;/i&gt;&lt;i&gt;head : : tail pattern match&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let rec&lt;/span&gt;&lt;/b&gt; prods &lt;b&gt;( l: (int * int) list ) : int list&lt;/b&gt; =&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;match&lt;/span&gt;&lt;/b&gt; &lt;b&gt;l&lt;/b&gt; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;with&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; | &lt;b&gt;[ ]&lt;/b&gt; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;-&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; | &lt;b&gt;(x,y) : : tail &lt;span class="Apple-style-span" style="color: orange;"&gt;-&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It's worth noting here that the above code is &lt;b&gt;completely type directed&lt;/b&gt;.&lt;br /&gt;Meaning - we can look at the types&amp;nbsp;and know exactly how to write&lt;br /&gt;the implementation of the function which is to satisfy the two cases.&lt;br /&gt;We know that the return type is a list so that really narrows our&lt;br /&gt;search space for what the&amp;nbsp;possible code will be.&lt;br /&gt;We can almost tell right away that one of these cases is going to involve&lt;br /&gt;an empty list&amp;nbsp;and the other a cons.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let rec&lt;/span&gt;&lt;/b&gt; prods&amp;nbsp;&lt;b&gt;( l: (int * int) list ) : int list&lt;/b&gt;&amp;nbsp;=&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp; &amp;nbsp; match&amp;nbsp;&lt;b&gt;l&lt;/b&gt;&amp;nbsp;with&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp; &amp;nbsp; |&amp;nbsp;&lt;b&gt;[ ]&lt;/b&gt;&amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;-&amp;gt;&lt;/span&gt;&lt;/b&gt; [ ]&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp; &amp;nbsp; |&amp;nbsp;&lt;b&gt;(x,y) : : tail&amp;nbsp;&lt;span class="Apple-style-span" style="color: orange;"&gt;-&amp;gt;&lt;/span&gt;&lt;/b&gt; &amp;nbsp;? 1 : : ? 2&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Again, by looking at the types we're able to determine that we need integers to satisfy the return type.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;So for the head we need a way to take the pair and produce an int.&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Likewise for the tail we need a&amp;nbsp;way to produce an int list.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;"We need something that can give us an int list - which is prods".&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;3) Reconstruct the types relative to the output or return type of the function.&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;let rec&lt;/span&gt;&lt;/b&gt; prods&amp;nbsp;&lt;b&gt;( l: (int * int) list ) : int list&lt;/b&gt;&amp;nbsp;=&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;match&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;b&gt;l&lt;/b&gt;&amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;with&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp; &amp;nbsp; |&amp;nbsp;&lt;b&gt;[ ]&lt;/b&gt;&amp;nbsp;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;-&amp;gt;&lt;/span&gt;&lt;/b&gt; [ ]&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp; &amp;nbsp; |&amp;nbsp;&lt;b&gt;(x,y) : : tail&amp;nbsp;&lt;/b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;-&amp;gt;&lt;/b&gt;&lt;/span&gt; &amp;nbsp;(x * y) : : prods tail&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;4) Finally, test the function to determine correctness.&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;i&gt;Note: Don't forget to test the empty list case. This is&amp;nbsp;analogous to writing a failing test in TDD.&lt;/i&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;That's it! I've found this technique to be very pragmatic.&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Greg put it perfectly when he said that&amp;nbsp;"Looking at the types&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;and thinking in terms of types really narrows your search space&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;for what code&amp;nbsp;you need to write, that power makes it easier&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;to write functions".&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;To all the F# and ML hakers out there...&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;-Develop with Passion&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-6696899970406542942?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/6696899970406542942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2011/05/fn-like-mler.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6696899970406542942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6696899970406542942'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2011/05/fn-like-mler.html' title='F#&apos;n like a MLer'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-q_dp8i3_mvk/TeFZa6glljI/AAAAAAAAAYg/KweaMgaZ0k8/s72-c/Morrisett.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3880077546363475354</id><published>2011-04-20T15:22:00.000-07:00</published><updated>2011-04-20T15:22:25.725-07:00</updated><title type='text'>Controlling Your Tunes In F#</title><content type='html'>Every so often I find myself in the interactive window while listening to iTunes in the background. Today I thought to myself "It would be really cool to change the track, mute the sound, or even rewind the track of a song in FSI." Conveniently enough iTunes allows us to generate a typed library out of the executable. There's a couple of ways to get at this library, you could use the visual studio command prompt and generate a typed library to store in some known location or you can let visual studio do it for you. I'm lazy so I opted for the latter. =)&lt;br /&gt;&lt;br /&gt;To generate an iTunes library for consumption in F# using visual studio simply do the following:&lt;br /&gt;&lt;b&gt;1)&lt;/b&gt; create a new F# console application.&lt;br /&gt;&lt;b&gt;2)&lt;/b&gt; right + click references and add a new reference off the COM tab. We want the iTunes Type Library. I happen to have version 1.13 but you may have a newer version which is fine, go ahead an add the type library.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-A1d8ScyW1Hg/Ta9SZZb_cGI/AAAAAAAAAYQ/gAqtRx8VHeY/s1600/com_reference.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="259" src="http://2.bp.blogspot.com/-A1d8ScyW1Hg/Ta9SZZb_cGI/AAAAAAAAAYQ/gAqtRx8VHeY/s400/com_reference.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-HIGs3ZCQjgA/Ta9UiBQX5XI/AAAAAAAAAYY/Gat1TphPd4M/s1600/project_reference.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="140" src="http://1.bp.blogspot.com/-HIGs3ZCQjgA/Ta9UiBQX5XI/AAAAAAAAAYY/Gat1TphPd4M/s400/project_reference.png" width="225" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;3)&lt;/b&gt;&amp;nbsp;You can see from the screen shot above that the reference got added&lt;br /&gt;and generated a typed library&amp;nbsp;for us in the project bin or obj directory.&lt;br /&gt;The name of the generated library is &lt;b&gt;Interop.iTunesLib.dll&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Now the fun begins, we can open a new F# script file&lt;br /&gt;and dot into this library to see what it offers.&lt;br /&gt;Below is the F# script file that I came up with.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;#i&lt;/span&gt; @"path-to-dll-here"&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;#r&lt;/span&gt; "Interop.iTunesLib.dll"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt; iTunesLib&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Grab a handle to iTunes ***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; appcls = new iTunesAppClass()&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Play the current playlist ***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;appcls.Play()&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Shuffle the current playlist ***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt; appcls.CurrentPlaylist.Shuffle &amp;lt;- true&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Next Track &amp;nbsp;***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt; applcs.NextTrack()&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Previous Track &amp;nbsp;***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt; applcs.PreviousTrack()&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Back Track (Go back to the beginning of the track &amp;nbsp;***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt; appcls.BackTrack()&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Sound Volume ***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt; appcls.SoundVolume &amp;lt;-75&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Pause ***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt; appcls.Pause()&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Rewind ***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt; appcls.Rewind()&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** FastFoward ***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt; appcls.FastFoward()&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Co-worker interruption ***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt; appcls.Mute &amp;lt;- true&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;//Lets have some fun with tracks&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Helper function to play a track ***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; play (track: IITTrack) = track.Play()&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Print out All tracks in current playlist ***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/span&gt; item: IITTrack &lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;in&lt;/b&gt;&lt;/span&gt; appcls.CurrentPlaylist.Tracks &lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf &lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;"%s \n"&lt;/b&gt;&lt;/span&gt; item.Name&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Retrieve track by name &amp;amp; play it ***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;do&lt;/span&gt; appcls.CurrentPlaylist.Tracks.ItemByName &lt;span class="Apple-style-span" style="color: #38761d;"&gt;"Too Much"&lt;/span&gt; |&amp;gt; play&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** Just found out about a new FP Podcast ***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt; appcls.SubscribeToPodcast("url-of-podcast-here")&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;b&gt;(*** What's New on iTunes!? ***)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt; appcls.GotoMusicStoreHomePage()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A couple of things worth noting here.&lt;br /&gt;&lt;b&gt;1) &lt;/b&gt;iTunes needs to be open and running before you can manipulate it.&lt;br /&gt;&lt;b&gt;2) &lt;/b&gt;The above script just scratches the surface of what's possible with communicating with iTunes.&lt;br /&gt;You can also convert files, &amp;nbsp;tap into the browser and other operations&lt;br /&gt;that you'd normally have to&amp;nbsp;use the UI to do.&lt;br /&gt;Personally I like staying in the fsharp interactive window. =)&lt;br /&gt;&lt;br /&gt;-Develop with passion&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3880077546363475354?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/3880077546363475354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2011/04/controlling-your-tunes-in-f.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3880077546363475354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3880077546363475354'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2011/04/controlling-your-tunes-in-f.html' title='Controlling Your Tunes In F#'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-A1d8ScyW1Hg/Ta9SZZb_cGI/AAAAAAAAAYQ/gAqtRx8VHeY/s72-c/com_reference.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-2299931598887899941</id><published>2011-04-03T22:31:00.000-07:00</published><updated>2011-04-03T22:31:46.023-07:00</updated><title type='text'>Exploring MongoHQ with F#</title><content type='html'>Recently, I've been working on a Silverlight 4 project which will hopefully go live soon.&lt;br /&gt;This project started off nice and light as all green field projects do, and then the unavoidable requirement came up... storage. A few customers utter'd access. After I finished &amp;nbsp;laughing I thought to myself- maybe SQL?&lt;br /&gt;So I turned to my data structure and immediately realized that its not structured for SQL. I've played around with a few object databases... db4o, ravendb, etc. Then I remembered Mongodb, over the past several years this object database has received quite a bit of attention. I must admit I haven't paid much attention to it, so I decided to give it a world. Headed over to the &lt;a href="http://www.mongodb.org/"&gt;spot&lt;/a&gt;,&amp;nbsp;read through some of the &lt;a href="http://www.mongodb.org/display/DOCS/CSharp+Language+Center"&gt;docs&lt;/a&gt;&amp;nbsp;and realized I need essentially two dll's.&lt;br /&gt;1) MongoDB.Bson.dll&lt;br /&gt;2) MongoDB.Driver.dll&lt;br /&gt;&lt;br /&gt;So I downloaded it and ran through the &lt;a href="http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-Introduction"&gt;introduction tutorial&lt;/a&gt;.&lt;br /&gt;After I got the Mongod server up and running on my local box I was able to store and retrieve some mock data (using the mongo client) with ease. &amp;nbsp;Now it was finally time to write some code and see it in action.&lt;br /&gt;So, I fired up FSI and produced the simple F# script.&lt;br /&gt;&lt;br /&gt;#I @"D:\ODev Solutions\MongoDb\CSharpDriver"&lt;br /&gt;#r "MongoDB.Bson.dll"&lt;br /&gt;#r "MongoDB.Driver"&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;open MongoDB.Bson&lt;/div&gt;open MongoDB.Bson.Serialization&lt;br /&gt;open MongoDB.Driver&lt;br /&gt;open MongoDB.Bson.IO&lt;br /&gt;&lt;br /&gt;&lt;b&gt;// helper func insert name_value in Bson document&lt;/b&gt;&lt;br /&gt;let Bson_NameValue (name,value) =&lt;br /&gt;&amp;nbsp;new BsonElement(name,BsonValue.Create value)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;// helper func get all keys in a Bson document&lt;/b&gt;&lt;br /&gt;let getkeys (document: BsonDocument) =&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;document.Names&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(* Connect to Mongo Server *)&lt;/b&gt;&lt;br /&gt;let connectionString = "mongodb://localhost"&lt;br /&gt;let server = MongoServer.Create connectionString&lt;br /&gt;server.Connect&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(* Get Database - if it does not exists then one is created. *)&lt;/b&gt;&lt;br /&gt;let test = server.GetDatabase "test"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(* Store usernames and passwords *)&lt;/b&gt;&lt;br /&gt;let profilescollection = test.GetCollection "mockprofiles"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(* Create the mock structure that will store a single user profile *)&lt;/b&gt;&lt;br /&gt;type profile = {UserName : string; Password : string; }&lt;br /&gt;let p = { UserName = "someuser@somedomain.com"; Password = "password"; }&lt;br /&gt;&lt;br /&gt;let convert_profile_to_BsonDocument (p: profile) =&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; let d = new BsonDocument()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;d.Add(Bson_NameValue("UserName",p.UserName)) |&amp;gt; ignore&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;d.Add(Bson_NameValue("Password",p.Password)) |&amp;gt; ignore&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;d&lt;br /&gt;let profilebson = convert_profile_to_BsonDocument p&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(* Insert the mock profile into the newly created profiles collection *)&lt;/b&gt;&lt;br /&gt;profilescollection.Insert profilebson&lt;br /&gt;&lt;br /&gt;&lt;b&gt;*Retrieve mock profile*&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(* Mongodb Query Document - can think of it as a where clause *)&lt;/b&gt;&lt;br /&gt;let qd = new QueryDocument(Bson_NameValue("UserName","someuser@somedomain.com"))&lt;br /&gt;&lt;br /&gt;let mockprofile = profilescollection.FindOne(qd)&lt;br /&gt;printf &amp;nbsp;"UserName: %s &amp;nbsp; Password: %s" mockprofile.UserName mockprofile.Password&lt;br /&gt;&lt;br /&gt;Okay, all good right? Wait... if I'm going to use this as production solution how do I even go about deploying something like Mongodb? Do I look for a hosting account that knows about monogo? Do I look for a hosting account that will give me full access to the box so that I can run mongo and manage it myself? After some searching around I found &lt;a href="https://mongohq.com/home"&gt;MongoHQ&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-kcFkhgPTaIk/TZlUzyV8hgI/AAAAAAAAAYI/qucbqlUo3B4/s1600/mhq_header_logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="91" src="http://2.bp.blogspot.com/-kcFkhgPTaIk/TZlUzyV8hgI/AAAAAAAAAYI/qucbqlUo3B4/s320/mhq_header_logo.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-IkCPHFc4rkg/TZlU62bzy0I/AAAAAAAAAYM/Te5pEcOHJNY/s1600/mhq_fade_screenshot.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="79" src="http://2.bp.blogspot.com/-IkCPHFc4rkg/TZlU62bzy0I/AAAAAAAAAYM/Te5pEcOHJNY/s320/mhq_fade_screenshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The guys over at monogohq make it super simple to setup a production object database.&lt;br /&gt;They charge monthly or annually based on the disk space you use. Starting at &lt;b&gt;free&lt;/b&gt; accounts up to 16mb and then progressively goes up from there. I like this solution a lot because I don't have to think about the maintenance and they provide an admin portal so I can manage the database and get reports from their web interface. As for the code changes there was only one. the connection string. =)&lt;br /&gt;&lt;br /&gt;example: mongodb://username:password@flame.mongohq.com:portnumber/databasename&lt;br /&gt;&lt;br /&gt;If you're considering a project with an object database check out Mongodb and MongoHQ.&lt;br /&gt;Really slick!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-2299931598887899941?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/2299931598887899941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2011/04/exploring-mongohq-with-f.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2299931598887899941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2299931598887899941'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2011/04/exploring-mongohq-with-f.html' title='Exploring MongoHQ with F#'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-kcFkhgPTaIk/TZlUzyV8hgI/AAAAAAAAAYI/qucbqlUo3B4/s72-c/mhq_header_logo.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-2000421333265181976</id><published>2011-02-28T16:05:00.000-08:00</published><updated>2011-02-28T16:05:34.034-08:00</updated><title type='text'>WPF using only F# and Xaml Part 2</title><content type='html'>This final part of the 2 parts is to try to show how to get all the benefits of Part 1 with out deploying the xaml file along with the binaries.&lt;br /&gt;&lt;br /&gt;There are two main things that you need to change.&lt;br /&gt;&lt;br /&gt;1) Build Action &amp;amp; Copy to Output Directory&lt;br /&gt;&lt;b&gt;Build Action&lt;/b&gt; = Resource&lt;br /&gt;&lt;b&gt;Copy to Output Directory&lt;/b&gt; = Do not copy&lt;br /&gt;&lt;br /&gt;2) Is of course the code in program.fs.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;open System&lt;br /&gt;open System.IO&lt;br /&gt;open System.Windows&lt;br /&gt;open System.Windows.Controls&lt;br /&gt;open System.Windows.Markup&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//again do not include the tick marks below in sta-thread attribute.&lt;br /&gt;['&amp;lt;'STAThread'&amp;gt;']&lt;br /&gt;do()&lt;br /&gt;&lt;br /&gt;&lt;b&gt;let uri = new System.Uri("/WPF_with_Xaml;component/MainView.xaml", UriKind.Relative)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;let window = &amp;nbsp;Application.LoadComponent(uri) :?&amp;gt; Window&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;(* Hook into xaml elements here *)&lt;br /&gt;let why = window.FindName("Why") :?&amp;gt; Button&lt;br /&gt;let answer = window.FindName("answer") :?&amp;gt; TextBlock&lt;br /&gt;(* Handle click event on Why button *)&lt;br /&gt;do why.Click.Add( fun _ -&amp;gt; answer.Text &amp;lt;- "Because F# works with Xaml!!" )&lt;br /&gt;&lt;br /&gt;ignore &amp;lt;| (new Application()).Run window&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A few things to note when implementing this way.&lt;br /&gt;1) The performance is much slower because the framework has to convert the xaml to baml first.&lt;br /&gt;One way around that would be to obviously have the baml&amp;nbsp;ready to go.&lt;br /&gt;2) If the slightly slow startup is not an issue for you then you get the added benefit of not having to deploy&lt;br /&gt;the xaml file. :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Until next time...&lt;br /&gt;Develop with passion&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-2000421333265181976?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/2000421333265181976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2011/02/wpf-using-only-f-and-xaml-part-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2000421333265181976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2000421333265181976'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2011/02/wpf-using-only-f-and-xaml-part-2.html' title='WPF using only F# and Xaml Part 2'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-2263990809642066510</id><published>2011-02-28T10:49:00.000-08:00</published><updated>2011-02-28T10:51:44.538-08:00</updated><title type='text'>WPF using only F# and Xaml Part 1</title><content type='html'>In my early days of researching F# I spent quite a bit of time looking for code to read or download.&lt;br /&gt;Early on I came across two really clean ways of interacting with Xaml from F#. The first and simplest way&lt;br /&gt;is what I'll focus on in this post. So first things first - lets fire up VS2010 or VS2008 and create a new F# project.&amp;nbsp;I started with the WPF template which is available in the VS gallery in VS2010, but if you don't have the template it's no big deal. Just create an F# console application and under the project type change it to windows application and you should be good to go.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="https://lh6.googleusercontent.com/-wywKHuP5G-Q/TWvhgutAfYI/AAAAAAAAAX0/dy4xIFIM4SA/s1600/Project_type.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="118" src="https://lh6.googleusercontent.com/-wywKHuP5G-Q/TWvhgutAfYI/AAAAAAAAAX0/dy4xIFIM4SA/s400/Project_type.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Next thing you want to do is add a new item to the project. You will not see an option to add a .xaml file&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;so you will have to type it in. For the sake of this blog post just name the item MainView.xaml and add to the project.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-dt1HuDpCCtE/TWvlzlfl60I/AAAAAAAAAX4/T9Z-PGjFUEI/s1600/MainView_xaml_create.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="195" src="https://lh3.googleusercontent.com/-dt1HuDpCCtE/TWvlzlfl60I/AAAAAAAAAX4/T9Z-PGjFUEI/s400/MainView_xaml_create.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Initially, visual studio knows about the xaml file so it tries to display the designer. The problem you'll see&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;is the designer shows warnings, which basically means that their is no xaml to display. So at this point all you need to do is copy and paste either a block of xaml which represents a window or a user control.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;For this post I'll use some xaml that I generated from expression blend 4.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="https://lh3.googleusercontent.com/-HxQMMyaTjF8/TWvoABjDvFI/AAAAAAAAAYA/1C8V1ebse8A/s1600/xaml.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="151" src="https://lh3.googleusercontent.com/-HxQMMyaTjF8/TWvoABjDvFI/AAAAAAAAAYA/1C8V1ebse8A/s400/xaml.png" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;You'll notice in the circled area that there is no x:Class attribute which indicates the code behind file.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;This removes some complexity with getting F# to see the block of xaml. I'll cover that in part 2.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The next part is to right click on the xaml file in the project and&amp;nbsp;click on Properties&amp;nbsp;set two properties on the file itself.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;1) Set &amp;nbsp;&lt;b&gt;Build Action&lt;/b&gt; = None&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;2) &lt;b&gt;Copy to output directory&lt;/b&gt; = Copy if newer&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-rtoNIhJqS5c/TWvpZ384XxI/AAAAAAAAAYE/4Px8riY0gPg/s1600/xaml_as_nonresource.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="196" src="https://lh3.googleusercontent.com/-rtoNIhJqS5c/TWvpZ384XxI/AAAAAAAAAYE/4Px8riY0gPg/s400/xaml_as_nonresource.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Now we should be ready to add the necessary assemblies to the project and starting writing some code.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The assemblies that you'll need are the follow...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;- PresentationCore&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;- PresentationFramework&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;- System&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;- System.Xaml&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;- System.Xml&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;- UIAutomationTypes&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;- WindowsBase&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Now the code... in the program.fs file just add the following code below.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;open System&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;open System.IO&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;open System.Windows&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;open System.Windows.Controls&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;open System.Windows.Markup&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(* Special thanks to Luke Hoban for providing the twitter app sample (From TechEd 2010)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp;&amp;nbsp; which demonstrates this technique *)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(* http://blogs.msdn.com/b/lukeh/ *)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;//the tick marks are just for this blog post (do not include these in the actual code) :-)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;['&amp;lt;'STAThread'&amp;gt;']&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;do()&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;let window = XamlReader.Load(File.OpenRead("MainView.xaml")) :?&amp;gt; Window&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(* Hook into xaml elements here *)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;let why = window.FindName("Why") :?&amp;gt; Button&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;let answer = window.FindName("answer") :?&amp;gt; TextBlock&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(* Handle click event on Why button *)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;do why.Click.Add( fun _ -&amp;gt; answer.Text &amp;lt;- "Because F# works with Xaml!!" )&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;ignore &amp;lt;| (new Application()).Run window&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;That's essentially all that is needed to code an even quicker wpf application in F#. Again, this is not the only&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;way to do this but it is a simple and clean way to do it for a quick view or app.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Until next time...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;-Develop with passion&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-2263990809642066510?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/2263990809642066510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2011/02/wpf-using-only-f-and-xaml-part-1.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2263990809642066510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2263990809642066510'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2011/02/wpf-using-only-f-and-xaml-part-1.html' title='WPF using only F# and Xaml Part 1'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-wywKHuP5G-Q/TWvhgutAfYI/AAAAAAAAAX0/dy4xIFIM4SA/s72-c/Project_type.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-2940761787352574988</id><published>2010-12-15T16:59:00.000-08:00</published><updated>2010-12-15T16:59:53.215-08:00</updated><title type='text'>What Protovis might look like through an F# Lens</title><content type='html'>Recently, the development team received the ComponentOne Studio for WPF control suite.&lt;div&gt;Since I love F# and data visualizations I thought to myself that it might be cool to&amp;nbsp;have a &lt;a href="http://vis.stanford.edu/protovis/"&gt;Protovis&lt;/a&gt;&amp;nbsp;style API for the Charting controls. So I started hacking and surprisingly came up with the following &amp;nbsp;F# Script :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;#r @"C:\Program Files (x86)\ComponentOne\Studio for WPF\bin\Design\C1.WPF.C1Chart.dll"&lt;/div&gt;&lt;div&gt;#r @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.dll"&lt;/div&gt;&lt;div&gt;#r @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll"&lt;/div&gt;&lt;div&gt;#r @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll"&lt;/div&gt;&lt;div&gt;open System&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(* ==== Charting references ==== *)&lt;/div&gt;&lt;div&gt;open System.Windows&lt;/div&gt;&lt;div&gt;open System.Windows.Controls&lt;/div&gt;&lt;div&gt;open C1.WPF.C1Chart&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(* create a panel (or blank charting control) *)&lt;/div&gt;&lt;div&gt;let Panel = new C1Chart()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(* Panel Width *)&lt;/div&gt;&lt;div&gt;let width (w: float) (p: C1Chart) =&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p.Width &amp;lt;- w&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(* Panel Height *)&lt;/div&gt;&lt;div&gt;let height (h: float) (p: C1Chart) &amp;nbsp;=&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p.Height &amp;lt;- h&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(* Chart Type *)&lt;/div&gt;&lt;div&gt;let add &amp;nbsp;(ct: ChartType) (p: C1Chart) =&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p.ChartType &amp;lt;- ct&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(* Data *)&lt;/div&gt;&lt;div&gt;let data &amp;nbsp;(d: List&lt;float&gt;) (p: C1Chart) =&lt;/float&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;let ds = new DataSeries()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ds.Values &amp;lt;- new Media.DoubleCollection(Seq.ofList d)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p.Data.Children.Add ds&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;p&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(* Render *)&lt;/div&gt;&lt;div&gt;let render (c: C1Chart) =&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;let content = c&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;let grd = new Grid()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;grd.Children.Add(content) |&amp;gt; ignore&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;new Window(Title = "Protovis Via F#", Content = grd)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;let vis =&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Panel&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;gt; width 150.0&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;gt; height 150.0&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;gt; add ChartType.Column&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;gt; data [1.0; 1.2; 1.7; 1.5; 0.7; 0.3]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;gt; render&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;[&lt;stathread&gt;] ignore &amp;lt;| (new Application()).Run vis&lt;/stathread&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As you can see from the above script, it really isn't all that difficult to get the same style API.&lt;/div&gt;&lt;div&gt;I just replaced the . or (Dot) function from the Protovis API with the standard F# pipeline operator / function.&lt;/div&gt;&lt;div&gt;Below is a screen shot of the above script which is the first sample in the "Getting Started" section on the Protovis site.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_TrCLe1DA8mM/TQli0DYTLBI/AAAAAAAAAXE/nvpbPrP_izM/s1600/Protovis_sample.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/TQli0DYTLBI/AAAAAAAAAXE/nvpbPrP_izM/s1600/Protovis_sample.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-2940761787352574988?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/2940761787352574988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2010/12/what-protovis-might-look-like-through-f.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2940761787352574988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2940761787352574988'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2010/12/what-protovis-might-look-like-through-f.html' title='What Protovis might look like through an F# Lens'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQli0DYTLBI/AAAAAAAAAXE/nvpbPrP_izM/s72-c/Protovis_sample.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-334950984297809209</id><published>2010-11-15T11:42:00.000-08:00</published><updated>2010-11-15T11:42:12.992-08:00</updated><title type='text'>Consuming OData Feed from F#</title><content type='html'>Sadly, there is no tooling around generating an OData service proxy in F# (that I know of).&lt;br /&gt;In order to work around it I created a new C# class library project and used C# to generate a service proxy to any OData&amp;nbsp;feed. I decided to use Netflix.com and Nerd Dinner.com as examples. Once I had the proxies&lt;br /&gt;in C# I built an ODataServiceProxies.dll and referenced it in a F# script file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#r @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.ServiceModel.dll"&lt;br /&gt;#r @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.Services.dll"&lt;br /&gt;#r @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.Services.Client.dll"&lt;br /&gt;#r @"D:\ODev Solutions\ODataServices\ODataServiceProxies\bin\Debug\ODataServiceProxies.dll"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;open System&lt;br /&gt;open System&lt;br /&gt;open System.Linq&lt;br /&gt;open System.Reflection&lt;br /&gt;open System.Collections&lt;br /&gt;open System.ServiceModel&lt;br /&gt;open System.ServiceModel.Syndication&lt;br /&gt;open System.Xml&lt;br /&gt;open System.Collections.Generic&lt;br /&gt;open System.Data.Services&lt;br /&gt;open ODataServiceProxies.NerdDinner&lt;br /&gt;open ODataServiceProxies.NetflixCatalog&lt;br /&gt;open System.ServiceModel.Activation&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;let netflix = new NetflixCatalog(new Uri("http://odata.netflix.com/v1/Catalog/"))&lt;br /&gt;(*Showing some movie titles from netflix feed*)&lt;br /&gt;netflix.Titles.AsQueryable()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;|&amp;gt; Seq.iter(fun t -&amp;gt; printfn "%s" t.Name)&lt;br /&gt;&lt;br /&gt;(*Showing some nerd dinners from NerdDinner.com feed*)&lt;br /&gt;let nerddinner = new NerdDinnerEntities(new Uri("http://www.nerddinner.com/Services/OData.svc/"))&lt;br /&gt;nerddinner.Dinners.AsQueryable()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;|&amp;gt; Seq.iter(fun d -&amp;gt; printfn "%s" d.Description)&lt;br /&gt;&lt;br /&gt;Very Cool!! I love F#!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-334950984297809209?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/334950984297809209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2010/11/consuming-odata-feed-from-f.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/334950984297809209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/334950984297809209'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2010/11/consuming-odata-feed-from-f.html' title='Consuming OData Feed from F#'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-7267149781397315869</id><published>2010-11-15T11:00:00.000-08:00</published><updated>2010-11-15T11:06:25.963-08:00</updated><title type='text'>More F# Findings</title><content type='html'>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I spend quite a bit of time reading other F# related content mainly from experts of the field.&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;It's definitely a great way to learn, but sometimes I get really annoyed when people put out some really great F# code only to visualize it with a sad presentation framework like Windows Forms. People... it's 2010 soon to be 2011! We need to start educating everyone on better presentation. I've decided to side track the&amp;nbsp;MATLAB series and just start posting some random findings of mine through playing around in scripts with WPF and Silverlight.&amp;nbsp;The hope is that someone will see something and get something out of it. If not, then at least I can contribute to more F# with WPF and Silverlight content out in the inner webs.&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;This first discovery is Silverlight related. I'm working on a side project and came across a need to draw a path.&amp;nbsp;So I turned to the following&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc721604.aspx"&gt;article&lt;/a&gt;&amp;nbsp;and decided to re-think and re-do it in F#.&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Special thanks to Tomas Petricek for the Utils module logic to lookup Xaml elements in F#.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;( Utils.fs )&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;module Utils&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;open System.Windows.Controls&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;let (?) (this : Control) (prop : string) : 'T =&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;this.FindName(prop) :?&amp;gt; 'T&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;( Main.fs )&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;namespace DrawingAPath&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;open Utils&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;open System&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;open System.Windows&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;open System.Windows.Controls&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;open System.Windows.Ink&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;open System.Windows.Input&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;open System.Windows.Media&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;type MainView() as this =&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;inherit UserControl()&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;let uri = new System.Uri("/DrawingAPath;component/MainView.xaml", UriKind.Relative)&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;do Application.LoadComponent(this, uri)&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;let mutable s = new Stroke()&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;let inkP: InkPresenter = this?inkP&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;let pv: ListBox = this?PointsViewer&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;let AddPoints (pX: float, pY: float, device: StylusDevice) =&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;s.StylusPoints.Add(device.GetStylusPoints(this?inkP))&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;let DefineInkStroke (ev: MouseButtonEventArgs) =&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;inkP.CaptureMouse() |&amp;gt; ignore&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;s = new Stroke() |&amp;gt; ignore&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;s.StylusPoints.Add(ev.StylusDevice.GetStylusPoints(inkP))&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;s.DrawingAttributes.Color = Colors.White |&amp;gt; ignore&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;inkP.Strokes.Add(s)&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;let DisplayPointsForPath (ev: MouseButtonEventArgs) =&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;let points =&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;s.StylusPoints&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;gt; Seq.map(fun sp -&amp;gt; String.Format("X: {0} Y:{0}",sp.X,sp.Y))&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pv.ItemsSource &amp;lt;- points&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;s &amp;lt;- null&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;do&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;inkP.MouseLeftButtonDown.Add(fun ev -&amp;gt; DefineInkStroke ev)&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;do&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;inkP.MouseLeftButtonUp.Add(fun ev -&amp;gt; DisplayPointsForPath ev ) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;do&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;inkP.MouseMove&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;gt; Event.map(fun me -&amp;gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;let pos = me.GetPosition(this?LayoutRoot)&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pos.X, pos.Y, me.StylusDevice)&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;gt; Event.filter( fun (pX , pY, sd) -&amp;gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pX &amp;gt; 0.0 &amp;amp;&amp;amp; pX &amp;lt; 300.0 &amp;amp;&amp;amp; pY &amp;gt; 0.0 &amp;amp;&amp;amp; pY &amp;lt; 195.0)&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;gt; Event.add(AddPoints)&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-7267149781397315869?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/7267149781397315869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2010/11/more-f-findings.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7267149781397315869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7267149781397315869'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2010/11/more-f-findings.html' title='More F# Findings'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3837478969945869423</id><published>2010-09-16T22:23:00.000-07:00</published><updated>2010-09-16T22:23:27.243-07:00</updated><title type='text'>MATLAB to F# Part 1</title><content type='html'>So I bought the book and brought it home. I couldn't wait to get started but life came into the picture so I had to help make dinner with the wife and kids and then eat dinner. After getting the kids into bed and watching the first five minutes of the wife's favorite T.V. show with her I finally got a chance to come down stairs and get into this a little bit. So, not having any experience with MATLAB I decided to start from the beginning of the &lt;a href="http://www.amazon.com/gp/product/0750687622/ref=s9_simh_gw_p14_d4_i1?pf_rd_m=ATVPDKIKX0DER&amp;amp;pf_rd_s=center-2&amp;amp;pf_rd_r=03AA5TR8X5Z07W3V37RQ&amp;amp;pf_rd_t=101&amp;amp;pf_rd_p=470938631&amp;amp;pf_rd_i=507846"&gt;book&lt;/a&gt; and work my way forward. Since this is MATLAB we need to familiarize ourselves with a few core data structures that will be used heavily through out MATLAB. Vectors &amp;amp;&amp;nbsp;Matrices. In MATLAB vectors are just a simple list in F# and Matrices are essentially tables of vectors also known as list of list in F#. &amp;nbsp;Let start with a few simple examples from chapter 1 of the book.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;1.5.1 Creating Row Vectors&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;There are several ways to create row vector variables. The most direct way is to put the values that you want&lt;/div&gt;&lt;div&gt;in the vector in square brackets, separated by either spaces or commas.&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;gt;&amp;gt; v &amp;nbsp;= [1 2 3 4]&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;v &amp;nbsp;=&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;1 &amp;nbsp; 2 &amp;nbsp; 3 &amp;nbsp; 4&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;1.5.2 Creating Column Vectors&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;One way to create a column vector is by explicitly putting values in square brackets, separated by semicolons:&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;gt;&amp;gt; c &amp;nbsp;= [1; 2; 3; 4]&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;c =&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;1&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;2&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;3&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;4&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;1.5.2 Creating Matrix Variables&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Creating a matrix variable is really just a generalization of creating row and column vector variables.&lt;/div&gt;&lt;div&gt;The matrix variable mat is created by explicitly typing the values.&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;gt;&amp;gt; mat &amp;nbsp;= [4 3 1; 2 5 6]&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;mat &amp;nbsp;=&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; 4 &amp;nbsp; 3 &amp;nbsp; 1&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; 2 &amp;nbsp; 5 &amp;nbsp; 6&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;These core data structures are built in to F#, well the F# Powerpack.&amp;nbsp;&lt;/div&gt;&lt;div&gt;So you can find the F# powerpack at &lt;a href="http://fsharppowerpack.codeplex.com/"&gt;codeplex&lt;/a&gt;. Once you download it you can easily open up a script file&lt;/div&gt;&lt;div&gt;and start creating your own vectors and matrices.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;#r&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #990000;"&gt;@"C:\Program Files (x86)\FSharpPowerPack-1.9.9.9\bin\FSharp.PowerPack.dll"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;open&lt;/span&gt; Microsoft.FSharp.Math&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;Creating Row Vectors (in F#)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;let &lt;/span&gt;rowvector &amp;nbsp;= &amp;nbsp;[1.0; 2.0; 3.0; 4.0]&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black; font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;Creating Column Vectors (in F#)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black; font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;let &lt;/span&gt;onecolumnvector &amp;nbsp;=&amp;nbsp;Matrix.ofList [[1.0];[2.0];[3.0];[4.0]]&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black; font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black; font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: orange;"&gt;Creating a Matrix (in F#)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;let&lt;/span&gt; matrix = Matrix.ofList [[4.0;3.0;1.0]; [2.0;5.0;6.0]]&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With the simple stuff out of the way I wanted to go a little deeper... so on to chapter 2 (Graphical Displays).&lt;br /&gt;Now that we know how to create the data let's do something interesting with it... e.g. visualize it!&lt;br /&gt;One way to visualize the data is to display it on a standard 2D chart with X and Y coordinates. In MATLAB you'd typically use the "built in" Plot function which (by definition thus far) can plot a single x,y coordinate or optionally two vectors of coordinates representing x and y. &amp;nbsp;So in MATLAB will create a couple of vectors representing x and y. To do this we lay down the following expression :&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;gt; x &amp;nbsp;= &amp;nbsp;1:6;&lt;br /&gt;&amp;gt;&amp;gt; y &amp;nbsp;= &amp;nbsp;[1 &amp;nbsp;5 &amp;nbsp;3 &amp;nbsp;9 &amp;nbsp;11 &amp;nbsp;8]&lt;br /&gt;The x vector above may look a little strange but basically what were doing is creating a vector from 1 to 6 with a step of 1. So the x and y column vectors above would look like this in the MATLAB command window.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;x , y&lt;br /&gt;(1 , 1)&lt;br /&gt;(2, 5)&lt;br /&gt;(3, 3)&lt;br /&gt;(4, 9)&lt;br /&gt;(5, 11)&lt;br /&gt;(6, 8)&lt;br /&gt;&lt;br /&gt;Finally, we'd plot the vectors with the following expression :&lt;br /&gt;&amp;gt;&amp;gt; plot (x , y)&lt;br /&gt;&lt;br /&gt;It's worth noting that under the covers MATLAB is actually creating a 2D chart, plotting all the points or coordinates in both vectors, and then displays the 2D chart in a new window.&lt;br /&gt;&lt;br /&gt;Here is the following MATLAB output.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_TrCLe1DA8mM/TJGYVyqBPuI/AAAAAAAAAWY/-AChd65Suos/s1600/MATLAB_plot_function_output.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="371" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/TJGYVyqBPuI/AAAAAAAAAWY/-AChd65Suos/s400/MATLAB_plot_function_output.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Not to shabby, of course we could accomplish the same thing in .NET using F# and WPF.&lt;br /&gt;So I thought about it and decided I did not want to write my own charting component just for the&lt;br /&gt;blog post series. Especially since I've had the first build (and free release) of &lt;a href="http://www.visifire.com/"&gt;Visifire&lt;/a&gt; for WPF &amp;amp; Silverlight still laying around on my hard drive. :-)&lt;br /&gt;&lt;br /&gt;So with the decision made to leverage visifire I produced the following F# code below :&lt;br /&gt;&lt;br /&gt;&lt;div style="color: black; overflow: auto; width: 99.5%;"&gt;&lt;pre style="margin: 0em;"&gt;&lt;span style="color: blue;"&gt;#r&lt;/span&gt;&lt;span style="color: black;"&gt;  &lt;span style="color: #a31515;"&gt;@"C:\\Users\\cfrederick\\Documents\\Visual Studio 2010\\Projects\\MATLAB Discoveries\\lib\\visifire\\WPFVisifire.Charts.dll"&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;span style="color: blue;"&gt;#r&lt;/span&gt;&lt;span style="color: black;"&gt;  &lt;span style="color: #a31515;"&gt;@"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\v3.0\\PresentationFramework.dll"&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;span style="color: blue;"&gt;#r&lt;/span&gt;&lt;span style="color: black;"&gt;  &lt;span style="color: #a31515;"&gt;@"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\v3.0\\WindowsBase.dll"&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;span style="color: blue;"&gt;#r&lt;/span&gt;&lt;span style="color: black;"&gt;  &lt;span style="color: #a31515;"&gt;@"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\v3.0\\PresentationCore.dll"&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;span class="Apple-style-span" style="color: green; font-family: monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;span class="Apple-style-span" style="color: green; font-family: monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt; &lt;span class="Apple-style-span" style="color: black;"&gt;System&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;span class="Apple-style-span" style="color: green;"&gt;(*Charting references*)&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt; Visifire.Charts&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt; System.Windows&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt; System.Windows.Controls&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;span class="Apple-style-span" style="color: green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; font-weight: normal; white-space: normal;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="margin-bottom: 0em; margin-left: 0em; margin-right: 0em; margin-top: 0em;"&gt;&lt;span class="Apple-style-span" style="color: green;"&gt;//Plot function, used to plot a single data point&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; plot x y =&lt;br /&gt;    &lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; dp = &lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt; DataPoint()&lt;br /&gt;    dp.XValue &amp;lt;- x&lt;br /&gt;    dp.YValue &amp;lt;- y&lt;br /&gt;    dp&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; font-weight: normal; white-space: normal;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="margin-bottom: 0em; margin-left: 0em; margin-right: 0em; margin-top: 0em;"&gt;&lt;span class="Apple-style-span" style="color: green;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; createChart xs ys =&lt;br /&gt;  &lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; chart = &lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;new&lt;/span&gt;&lt;/b&gt; Chart()&lt;br /&gt;  &lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; title = &lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt; Title()&lt;br /&gt;  title.Text &amp;lt;- &lt;span class="Apple-style-span" style="color: #990000;"&gt;"MATLAB Sample Plotting Chart"&lt;/span&gt;&lt;br /&gt;  chart.Titles.Add title&lt;br /&gt;  chart.Watermark &amp;lt;- &lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;false&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; data =&lt;span class="Apple-style-span" style="color: #6aa84f;"&gt;&lt;br /&gt;&lt;/span&gt;   &lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;let&lt;/span&gt;&lt;/b&gt; dataseries = &lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt; DataSeries()&lt;br /&gt;   dataseries.RenderAs &amp;lt;- RenderAs.Line &lt;br /&gt;    List.zip xs ys&lt;br /&gt;     |&amp;gt; List.map(&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;fun&lt;/span&gt;&lt;/b&gt; (x,y) &lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;-&amp;gt;&lt;/span&gt;&lt;/b&gt; plot x y)&lt;br /&gt;     |&amp;gt; List.iter(&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;fun&lt;/b&gt;&lt;/span&gt; dp &lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;-&amp;gt;&lt;/b&gt;&lt;/span&gt; dataseries.DataPoints.Add dp)&lt;br /&gt;    dataseries&lt;br /&gt;    chart.Series.Add data&lt;br /&gt;   chart&lt;br /&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;let&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; content =&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;createChart [1.0..6.0] [1.0;5.0;3.0;9.0;11.0;8.0] &lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; window = &lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/span&gt; Window(Title = &lt;span class="Apple-style-span" style="color: #990000;"&gt;"Fun plotting like MATLAB"&lt;/span&gt;, Content = content)&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;[&lt;stathread&gt;] ignore &amp;lt;| (new Application()).Run window&lt;/stathread&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;stathread&gt;&lt;br /&gt;&lt;/stathread&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;stathread&gt;And here is the final output from FSI and VS2010.&lt;/stathread&gt;&lt;/pre&gt;&lt;pre style="margin: 0em;"&gt;&lt;stathread&gt;&lt;br /&gt;&lt;/stathread&gt;&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_TrCLe1DA8mM/TJL6S3Li41I/AAAAAAAAAWc/y1oN19IhWqU/s1600/WPF_plot_function_output.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="230" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/TJL6S3Li41I/AAAAAAAAAWc/y1oN19IhWqU/s400/WPF_plot_function_output.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin: 0em;"&gt;&lt;stathread&gt;&lt;br /&gt;&lt;/stathread&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3837478969945869423?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/3837478969945869423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2010/09/matlab-to-f-part-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3837478969945869423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3837478969945869423'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2010/09/matlab-to-f-part-1.html' title='MATLAB to F# Part 1'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TrCLe1DA8mM/TJGYVyqBPuI/AAAAAAAAAWY/-AChd65Suos/s72-c/MATLAB_plot_function_output.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-1694639325191225178</id><published>2010-09-09T20:35:00.000-07:00</published><updated>2010-09-09T20:35:43.457-07:00</updated><title type='text'>Introducing MATLAB  -&gt; ( F# &amp; WPF ) Series</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_TrCLe1DA8mM/TImehZqAlEI/AAAAAAAAAWM/DkSkC4eU8i0/s1600/matlab.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/TImehZqAlEI/AAAAAAAAAWM/DkSkC4eU8i0/s1600/matlab.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My latest purchase a few days ago was at Borders book store. I went in the store looking for a specific WPF charting book which covers visualizing&amp;nbsp;mathematical formulas. No such luck. However, after turning my attention to the core computer science section, I found the following book on MATLAB (short for" matrix laboratory"). I was never really strong in math and this book seems to be a nice self guided introduction which works up to some advanced data analysis/visualizations. Since I'm constantly looking for core computer science type approaches from a functional perspective I figured this is a good choice. My plan is to obviously teach myself MATLAB but also translate the MATLAB functions over to F# and move the graphical stuff over to WPF. For the last 8 years I've been doing hardcore imperative programming using mainstream languages. More and more every day I wish I where doing functional programming using (F# of course) or something like ML,OCaml, or dare I say Haskell. My long term plan is to teach myself core functional programming so that I can get a job which safely transitions into the functional programming world. My dream job would be to write core functional programs while having the freedom to visualize them using a great presentation framework like WPF. &amp;nbsp;As the title says, I will be going through the chapters &amp;amp; exercises and presenting them here. I will take as much time as I can to produce good quality posts on this topic. You can expect the format to be something like the following: MATLAB source and screen shots( if any), followed by F# source, followed by WPF screen shots. Any way, I'm looking forward to learning MATLAB and sharing my discoveries here on my blog.&lt;br /&gt;&lt;br /&gt;-Stay tuned and keep on dev'n&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-1694639325191225178?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/1694639325191225178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2010/09/introducing-matlab-f-wpf-series.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1694639325191225178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1694639325191225178'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2010/09/introducing-matlab-f-wpf-series.html' title='Introducing MATLAB  -&gt; ( F# &amp; WPF ) Series'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TrCLe1DA8mM/TImehZqAlEI/AAAAAAAAAWM/DkSkC4eU8i0/s72-c/matlab.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-8811333715635806950</id><published>2010-07-31T01:21:00.000-07:00</published><updated>2011-04-09T09:38:13.261-07:00</updated><title type='text'>My F# awareness is improving</title><content type='html'>So today I read an article that linked to a site called language references. It's basically a site like code keep, it has some snippets of code for common programming tasks or problems. I noticed that there is a section on F# so I decided to check it out. I started scrolling through the list and came to a snippet of code for reversing a string. This coding example is near and dear to me because it's one of those interview questions programmers tend to get... much like fizbuzz. However, after reviewing the implementation which was simple Array.Reverse on a character array I decided to create an account so that I could contribute my version of reversing a string in F#. If you go to the following url:&lt;a href="http://langref.org/fsharp"&gt; &lt;/a&gt;&lt;a href="http://langref.org/fsharp/strings/reversing-a-string/reverse-characters"&gt;http://langref.org/fsharp/strings/reversing-a-string/reverse-characters&lt;/a&gt;&amp;nbsp; you'll see my implementation which is also below.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: f#"&gt;let word = "reverse me"&lt;br /&gt;//reverse the word&lt;br /&gt;let reversedword = &lt;br /&gt;   word.ToCharArray()&lt;br /&gt;   |&gt; Array.fold(fun acc x -&amp;gt; List.Cons(x,acc)) []&lt;br /&gt;&lt;/pre&gt;I'm basically using a simple fold with an empty list as the accumulator or the element that's being threaded through. I picked up that tip from a functional programming video I saw on videos.google.com. The topic was Map Reduce. I then went on to the section of the site where they have a list of problems that have not been solved yet. So I decided to tackle one of those. I came across the following and immediately thought it would be rather simple to implement and I could use a simple fold again. :-)&lt;br /&gt;&lt;br /&gt;Here's the problem: &lt;a href="http://langref.org/fsharp/xml/parsing/xml-parse"&gt;http://langref.org/fsharp/xml/parsing/xml-parse&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So I came up with the following implementation: (which you will also see on the website)&lt;br /&gt;&lt;pre class="brush: f#"&gt;#r @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll"&lt;br /&gt;&lt;br /&gt;open System&lt;br /&gt;open System.Xml.Linq&lt;br /&gt;//XElement Helper&lt;br /&gt;let xname sname = XName.Get sname &lt;br /&gt;&lt;br /&gt;&amp;nbsp;let xmlsnippet = &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; let snippet = new XElement(xname "shopping")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //create bread&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; let bread = new XElement(xname "item")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bread.SetAttributeValue(xname "name","bread")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bread.SetAttributeValue(xname "quantity",3)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bread.SetAttributeValue(xname "price",2.50)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //add bread to snippet&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; snippet.Add(bread)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //create milk&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; let milk = new XElement(xname "item")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; milk.SetAttributeValue(xname "name","milk")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; milk.SetAttributeValue(xname "quantity",2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; milk.SetAttributeValue(xname "price",3.50)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //add milk to snippet&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; snippet.Add(milk)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; snippet&lt;br /&gt;&lt;br /&gt;let totalprice (xe: XElement) =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xe.Descendants(xname "item")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; Seq.map(fun i -&amp;gt; Double.Parse(i.Attribute(xname "price").Value))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; Seq.fold(fun acc x -&amp;gt; acc + x) 0.0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;F# is awesome!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-8811333715635806950?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/8811333715635806950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2010/07/my-f-awareness-is-improving.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/8811333715635806950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/8811333715635806950'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2010/07/my-f-awareness-is-improving.html' title='My F# awareness is improving'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-7810590507297180287</id><published>2010-05-26T00:49:00.000-07:00</published><updated>2010-05-26T00:49:53.258-07:00</updated><title type='text'>Another late night learning more about F#</title><content type='html'>Just thought I'd share a few minor things I'm working on in my spare time. The first little project is a visualization project that I'm doing for my wife.&amp;nbsp; She's collecting some information from a large group of schools in the district and compiling it all in an excel file. So I thought I'd write some F# to scrape the data from the excel file and perform some analysis on it and then visualize it in Silverlight.&lt;br /&gt;The silverlight part hasn't started quite yet, but I should get to that tonight or tomorrow. Below is a screen shot of the excel document in the early stages of compiling the data manually.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_TrCLe1DA8mM/S_rCGjDuJ8I/AAAAAAAAAVY/slCU2MxFAC4/s1600/Research.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="205" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/S_rCGjDuJ8I/AAAAAAAAAVY/slCU2MxFAC4/s400/Research.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The data is basically about competed teams at a state competition  over the past 5 years broken out&lt;br /&gt;by category. My job is to pull  all this information and display by teams size (which is the red, green,  and yellow on the right hand side of the document). Below is some of  the F# I've come up with so far.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #38761d;"&gt;#r @"C:\Windows\assembly\GAC\Microsoft.Office.Interop.Excel\12.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll"&lt;/div&gt;&lt;div style="color: #38761d;"&gt;#r @"C:\Windows\assembly\GAC\Office\12.0.0.0__71e9bce111e9429c\Office.dll"&lt;/div&gt;&lt;br /&gt;&lt;span style="color: orange;"&gt;open&lt;/span&gt; Microsoft.Office.Interop.Excel&lt;br /&gt;&lt;span style="color: orange;"&gt;open&lt;/span&gt; System&lt;br /&gt;&lt;span style="color: orange;"&gt;open&lt;/span&gt; System.Runtime.InteropServices&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #38761d;"&gt;// Create new Excel.Application&lt;/div&gt;&lt;span style="color: orange;"&gt;let&lt;/span&gt; app = new ApplicationClass(Visible = &lt;span style="color: orange;"&gt;true&lt;/span&gt;) &lt;br /&gt;&lt;div style="color: #38761d;"&gt;//Create the workbook path&lt;/div&gt;&lt;span style="color: orange;"&gt;let&lt;/span&gt; workbookPath = @"C:\Research.xlsx"&lt;br /&gt;&lt;div style="color: #38761d;"&gt;// Open the workbook from the workbook path&lt;/div&gt;&lt;span style="color: orange;"&gt;let&lt;/span&gt; workbook = app.Workbooks.Open(workbookPath)&lt;br /&gt;&lt;div style="color: #38761d;"&gt;// Get the worksheets collection&lt;/div&gt;&lt;span style="color: orange;"&gt;let&lt;/span&gt; sheets = workbook.Worksheets &lt;br /&gt;&lt;div style="color: #38761d;"&gt;// Grab the worksheet we need to pull data from &lt;/div&gt;&lt;span style="color: orange;"&gt;let&lt;/span&gt; worksheet = (sheets.[box 1] :?&amp;gt; _Worksheet) &lt;br /&gt;&lt;span style="color: orange;"&gt;let&lt;/span&gt; TeamSizeByCategory (category: int) (startColumn: string) (endColumn: string) = &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #38761d;"&gt;// Pull the data from each row and yield it into a list of obj[Dance,Military,Hip Hop,Kick,Pom,Show]&lt;/span&gt;&lt;br /&gt;&lt;div style="color: #38761d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // I-N (2006) P-U (2007) W-AB (2008) AD-AI (2009) AK-AP (2010)&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;let&lt;/span&gt; data = [ &lt;span style="color: orange;"&gt;for&lt;/span&gt; i=5 &lt;span style="color: orange;"&gt;to&lt;/span&gt; 80 &lt;span style="color: orange;"&gt;do&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;let&lt;/span&gt; row = (worksheet.Range(String.Format("{0}{1}",startColumn,i) , String.Format("&amp;nbsp; {0}{1}",endColumn,i)).Value2 :?&amp;gt; obj[,])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;yield&lt;/span&gt; [row.GetValue(1,1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row.GetValue(1,2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row.GetValue(1,3)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row.GetValue(1,4)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row.GetValue(1,5)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row.GetValue(1,6)]]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;let&lt;/span&gt; CategoryFolks = &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; List.filter( &lt;span style="color: orange;"&gt;fun&lt;/span&gt; i &lt;span style="color: orange;"&gt;-&amp;gt;&lt;/span&gt; i.[category] &amp;lt;&amp;gt; &lt;span style="color: orange;"&gt;null&lt;/span&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;let&lt;/span&gt; CategoryFolksSmall =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CategoryFolks&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; List.filter( &lt;span style="color: orange;"&gt;fun&lt;/span&gt; item &lt;span style="color: orange;"&gt;-&amp;gt;&lt;/span&gt; (item.[category] :?&amp;gt; double) &amp;lt;= 15.0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: orange;"&gt; let&lt;/span&gt; CategoryFolksMedium =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CategoryFolks&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; List.filter(&lt;span style="color: orange;"&gt; fun&lt;/span&gt; item &lt;span style="color: orange;"&gt;-&amp;gt;&lt;/span&gt; (item.[category] :?&amp;gt; double) &amp;gt;= 16.0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; List.filter( &lt;span style="color: orange;"&gt;fun&lt;/span&gt; item &lt;span style="color: orange;"&gt;-&amp;gt;&lt;/span&gt; (item.[category] :?&amp;gt; double) &amp;lt;= 29.0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: orange;"&gt; let&lt;/span&gt; CategoryFolksLarge =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CategoryFolks&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; List.filter(&lt;span style="color: orange;"&gt; fun&lt;/span&gt; item &lt;span style="color: orange;"&gt;-&amp;gt;&lt;/span&gt; (item.[category] :?&amp;gt; double) &amp;gt;= 30.0)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: orange;"&gt;seq&lt;/span&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;if&lt;/span&gt; CategoryFolks.Length &amp;gt; 0 &amp;amp;&amp;amp; CategoryFolksSmall.Length &amp;gt; 0 &lt;span style="color: orange;"&gt;then&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;yield&lt;/span&gt;&lt;span style="color: #38761d;"&gt; "Small"&lt;/span&gt;, Math.Abs(float CategoryFolksSmall.Length / float CategoryFolks.Length) * 100.0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;if&lt;/span&gt; CategoryFolks.Length &amp;gt; 0 &amp;amp;&amp;amp; CategoryFolksMedium.Length &amp;gt; 0&lt;span style="color: orange;"&gt; then&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;yield&lt;/span&gt; &lt;span style="color: #38761d;"&gt;"Medium"&lt;/span&gt;, Math.Abs(float CategoryFolksMedium.Length / float CategoryFolks.Length) * 100.0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: orange;"&gt; if&lt;/span&gt; CategoryFolks.Length &amp;gt; 0 &amp;amp;&amp;amp; CategoryFolksLarge.Length &amp;gt; 0&amp;nbsp;&lt;span style="color: orange;"&gt; then&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;yield&lt;/span&gt;&lt;span style="color: #38761d;"&gt; "Large"&lt;/span&gt;, Math.Abs(float CategoryFolksLarge.Length / float CategoryFolks.Length) * 100.0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #38761d;"&gt;//Simple type to encapsulate a single year of data for all categories&lt;/span&gt;&lt;br /&gt;&lt;span style="color: orange;"&gt;type&lt;/span&gt; AnnualStatistic(year,data) =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;member&lt;/span&gt; x.Year = year&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: orange;"&gt; member&lt;/span&gt; x.Data = data&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #38761d;"&gt;//I really want the ability to persist the data from the excel file into a Db40 object database, which is something I've blogged about before. &lt;/span&gt;&lt;br style="color: #38761d;" /&gt;&lt;span style="color: orange;"&gt;let&lt;/span&gt; dbpath = &lt;span style="color: #38761d;"&gt;"C:\Users\cfrederick\Documents\Visual Studio 2010\Projects\ResearchVisualization\db"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: orange;"&gt;let&lt;/span&gt; persist (year: string) startColumn endColumn =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;let&lt;/span&gt; data = [ &lt;span style="color: orange;"&gt;for&lt;/span&gt; i=5 &lt;span style="color: orange;"&gt;to&lt;/span&gt; 80 &lt;span style="color: orange;"&gt;do&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;span style="color: orange;"&gt;let&lt;/span&gt; row =  (worksheet.Range(String.Format("{0}{1}",startColumn,i) ,  String.Format("&amp;nbsp; {0}{1}",endColumn,i)).Value2 :?&amp;gt; obj[,])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;span style="color: orange;"&gt;yield&lt;/span&gt; [row.GetValue(1,1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  row.GetValue(1,2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row.GetValue(1,3)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  row.GetValue(1,4)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row.GetValue(1,5)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  row.GetValue(1,6)]]&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #38761d;"&gt;/// Db40 Implementation to persists historical data from excel&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #38761d;"&gt;//the use keyword is synonymous to using in c# &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: orange;"&gt; use&lt;/span&gt; container = Db4oFactory.OpenFile(Path.Combine(dbpath, "Researchdb.yap"));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Store(new AnnualStatistic(year,data))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.Close&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;span style="color: #38761d;"&gt;//Finally a helper function to retrieve a given years worth of data for all categories from the Db4o database.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: orange;"&gt;let&lt;/span&gt; AnnualStatistic year = &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;use&lt;/span&gt; container = Db4oFactory.OpenFile(Path.Combine(dbpath, "Researchdb.yap"));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;let&lt;/span&gt; results = &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;seq&lt;/span&gt; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: orange;"&gt; let&lt;/span&gt; r = container.Cast&lt;annualstatistic&gt;().Select(&lt;span style="color: orange;"&gt;fun&lt;/span&gt; i &lt;span style="color: orange;"&gt;-&amp;gt;&lt;/span&gt; i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;for&lt;/span&gt; i &lt;span style="color: orange;"&gt;in&lt;/span&gt; r &lt;span style="color: orange;"&gt;do&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: orange;"&gt;yield&lt;/span&gt; i&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; Seq.filter(&lt;span style="color: orange;"&gt;fun&lt;/span&gt; item &lt;span style="color: orange;"&gt;-&amp;gt;&lt;/span&gt; item.Year = year)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;gt; Seq.head&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; results &lt;/annualstatistic&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The more I use F# the more I love it. :-)&lt;br /&gt;-Develop with Passion&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-7810590507297180287?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/7810590507297180287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2010/05/another-late-night-learning-more-about.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7810590507297180287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7810590507297180287'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2010/05/another-late-night-learning-more-about.html' title='Another late night learning more about F#'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/S_rCGjDuJ8I/AAAAAAAAAVY/slCU2MxFAC4/s72-c/Research.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3780939503700955196</id><published>2010-05-02T20:00:00.000-07:00</published><updated>2010-05-02T20:00:08.328-07:00</updated><title type='text'>New path for possible career opportunity</title><content type='html'>Lately, functional programming is all I think about. Sometimes I get a little down about writing C#.&amp;nbsp; :-(&lt;br /&gt;Gasp!&amp;nbsp; I never thought in a million years that I'd ever think that let alone write it. Anyway, at the present time I find myself continuing to make a difference for my current employer. Introducing them to modern solutions and technology to help them have a leg up on the competition. However, I'm constantly reminded&amp;nbsp; that I'm not in an environment where I'm learning from my co-workers. So I have to seek external conferences, blogs, camps, user groups, etc to make up for it. For the last five years I've always kept an eye on Google. Lately, I've seen more opportunities pop up... even some with .NET development. I'm thinking that over next two years I'm going to ramp up my skills on F#, Python, and Ruby. From what I've seen and heard so far those languages are core prerequisites.&amp;nbsp; There will be a lot to learn including Google App framework, but the payoff could be totally worth it. We'll see what happens, but that's the thought for now. :-)&lt;br /&gt;&lt;br /&gt;-Develop with Passion&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3780939503700955196?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/3780939503700955196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2010/05/new-path-for-possible-career.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3780939503700955196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3780939503700955196'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2010/05/new-path-for-possible-career.html' title='New path for possible career opportunity'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3436282453488288028</id><published>2010-04-03T13:42:00.000-07:00</published><updated>2010-04-03T13:42:40.091-07:00</updated><title type='text'>The road to F#</title><content type='html'>Yesterday I got called to a meeting to talk about a prototype which I can't speak of.&lt;br /&gt;However, I can talk about one requirement which is to read information from a ms project file. Things like tasks and resources. I've never parsed a ms project file before but I figured it would be similar to any other office object model using yucky COM underneath. So I fired up VS2010 and did a file -&amp;gt; new project on the F# node and started down the normal path of adding a reference to the ms project library blah blah blah.&lt;br /&gt;Then I had to launch ms project 2007 and load a project file, and then I could go back to FSI and start to write some code. After about 2 min of hacking, here's what I got&lt;br /&gt;&lt;br /&gt;#r @"C:\Windows\assembly\GAC\Microsoft.Office.Interop.MSProject\12.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.MSProject.dll"&lt;br /&gt;&lt;br /&gt;&lt;b style="color: orange;"&gt;open&lt;/b&gt; Microsoft.Office.Interop.MSProject&lt;br /&gt;&lt;br /&gt;&lt;b style="color: orange;"&gt;let&lt;/b&gt; projectapp = new ApplicationClass()&lt;br /&gt;&lt;b style="color: orange;"&gt;let&lt;/b&gt; project = projectapp.ActiveProject&lt;br /&gt;for t in project.Tasks do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printfn "%A" t.Name &lt;br /&gt;&lt;br /&gt;Not to shabby. However, I did have to open project and load a .mpp file (which is the project file format).&lt;br /&gt;This is not a big deal since the app requires it, but I thought to myself... what if it did not require it?&lt;br /&gt;So I started searching around for a library or just information the file format itself to see if I could build something to parse it directly. After about 10 min I found &lt;a href="http://mpxj.sourceforge.net/getting-started.html"&gt;mpxj&lt;/a&gt;, this library is originally written in Java and then they wrote a .NET library on top of it. So .NET interops with this library. Best part is... you can work with many versions of MS project and you don't need to have it installed. You can point to the file load it up and pull out almost any data you wish. I thought it might sound to good to be true, so I downloaded it and tried to use it in F#. After 20 min of hacking and reading the documentation... I came up with this.&lt;br /&gt;&lt;br /&gt;#r @"local path to this file -&amp;gt;\mpxj.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\IKVM.OpenJDK.Core.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\IKVM.OpenJDK.Util.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\IKVM.OpenJDK.Beans.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\IKVM.OpenJDK.Charsets.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\IKVM.OpenJDK.jdbc.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\IKVM.OpenJDK.Misc.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\IKVM.OpenJDK.Security.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\IKVM.OpenJDK.SwingAWT.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\IKVM.OpenJDK.Text.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\IKVM.OpenJDK.XML.API.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\IKVM.OpenJDK.XML.Bind.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\IKVM.OpenJDK.XML.Parse.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\IKVM.Runtime.dll"&lt;br /&gt;#r @"local path to this file -&amp;gt;\poi-3.6-20091214.dll"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: orange;"&gt;open&lt;/b&gt; System&lt;br /&gt;&lt;b style="color: orange;"&gt;open&lt;/b&gt; net.sf.mpxj&lt;br /&gt;&lt;b style="color: orange;"&gt;open&lt;/b&gt; net.sf.mpxj.reader&lt;br /&gt;&lt;b style="color: orange;"&gt;open&lt;/b&gt; net.sf.mpxj.writer&lt;br /&gt;&lt;br /&gt;&lt;b style="color: orange;"&gt;let&lt;/b&gt; filepath = "b4ubuild_sample_07.mpp"&lt;br /&gt;&lt;b style="color: orange;"&gt;let&lt;/b&gt; preader = ProjectReaderUtility.getProjectReader(filepath)&lt;br /&gt;&lt;b style="color: orange;"&gt;let&lt;/b&gt; pfile = preader.read(filepath)&lt;br /&gt;&lt;b style="color: orange;"&gt;let&lt;/b&gt; ta = pfile.getAllTasks()&lt;br /&gt;&lt;b style="color: orange;"&gt;let&lt;/b&gt; resources = pfile.getAllResources()&lt;br /&gt;&lt;br /&gt;for i = 0 to ta.size() do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; t = (ta.get(i) :?&amp;gt; Task)&lt;span style="color: lime;"&gt; //down casting in F# (taking an obj and casting it to typeof(Task))&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: orange;"&gt;let&lt;/span&gt;&lt;/b&gt; taskName = t.getName()&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(taskName)&lt;br /&gt;&lt;br /&gt;for i = 0 to resources.size() do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: orange;"&gt;let&lt;/b&gt; r = (resources.get(i) :?&amp;gt; Resource) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: orange;"&gt;let&lt;/b&gt; rname = r.getName()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(rname)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now that's more like it. I've officially decided to invest in F#.&amp;nbsp; The last time I made a big investment like this was around 2005 when I first started playing with WPF. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3436282453488288028?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/3436282453488288028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2010/04/road-to-f.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3436282453488288028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3436282453488288028'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2010/04/road-to-f.html' title='The road to F#'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-6818906835876590103</id><published>2010-03-19T08:33:00.000-07:00</published><updated>2010-03-19T08:59:48.526-07:00</updated><title type='text'>The functional programming journey</title><content type='html'>For the last year and half I've been playing around with F#. Accomplishing little task like simple File I/O, Winform UI Development, standard calculations, etc. Doing all of this because I have a F# book and a few web resources.  So I figured that I would finally break down and do what the experts say I should do... which is to learn another functional programming language. A few weeks ago I went looking on I Tunes-U for some functional programming lectures. To my surprise I found quite a bit of lectures. UC Berkley &amp;amp; Stanford lectures stood out the most so I tried the Stanford lectures. Programming Paradigms by Jerry Cain is a great series of lectures covering C/C++/Java/LISP/Python/networking and more. I chose to jump into the LISP section of the series. After reviewing the lectures it gave me a fresh perspective on F#, and suddenly F# made a lot more sense in my head. Now I'm able to do thing like interface with WPF from F#, I wrote my own F# library and leveraged it in a C# project I'm working on, and the more I learn about core functional fundamentals the more I learn about F#. I guess I just needed a deeper understanding in order to wrap my mind around F# and functional programming in general. And I must say, the more I realize what the F# compiler is doing behind the scenes the more I appreciate it. Just yesterday I was writing some c# code in a project and thought to&lt;br /&gt;myself "I wish I was in F# right now, because I'd be done with this task if I was". :-)&lt;br /&gt;What does that mean exactly... should I make the transition to functional programming? Sometimes I think I could. I'd just need to beef up on my math skills, and I'd be all set.  I'll save that topic for another day. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-6818906835876590103?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/6818906835876590103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2010/03/functional-programming-journey.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6818906835876590103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6818906835876590103'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2010/03/functional-programming-journey.html' title='The functional programming journey'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-4877417020201770984</id><published>2009-04-14T20:11:00.000-07:00</published><updated>2009-04-14T20:39:30.950-07:00</updated><title type='text'>Brilliant!!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/SeVQrsG-u5I/AAAAAAAAAVM/S8_KICk7RZE/s1600-h/UdiDahan.jpg"&gt;&lt;img style="cursor: pointer; width: 64px; height: 100px;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/SeVQrsG-u5I/AAAAAAAAAVM/S8_KICk7RZE/s400/UdiDahan.jpg" alt="" id="BLOGGER_PHOTO_ID_5324750845940513682" border="0" /&gt;&lt;/a&gt;  (&lt;a href="http://www.udidahan.com/"&gt;Udi Dahan&lt;/a&gt;) Make Roles Explicit!!!&lt;br /&gt;I happen to catch &lt;a href="http://www.infoq.com/presentations/Making-Roles-Explicit-Udi-Dahan"&gt;this&lt;/a&gt; talk on my lunch break today. And it's simply brilliant. For some it may seem obvious, but for me... the light bulb definitely went off. Lately, I've been going through the design pattern books again... even took out Refactoring by Martin Fowler for review. Even though they make sense I've always had trouble implementing it in a brown field project. I'm currently faced with a few projects at work right now. One is a major project that I'm maintaining, and the other is actually a green field project that I'm also working on. It's exciting because it's a WPF application that hosts a 3D Model viewer made by the folks over at Autodesk.&lt;br /&gt;It's COM but it's still cool. My job is to parse the 3D model for data and surface it in WPF.&lt;br /&gt;Their are a lot of moving parts... such as... XLinq,Xceed Datagrid, LINQ2SQL, SQL, custom DWF parser (to parse DWF files), 3rd party COM API (Autodesk), Log4net, IOC, MVP, etc.&lt;br /&gt;So it certainly can get quite confusing quite quickly. Having an over arching strategy to help manage complexity is key. After watching the video, it became clear and now I'm continuing the green field project in this specific manner. Make Roles Explicit!!!!&lt;br /&gt;&lt;br /&gt;Thanks Udi,&lt;br /&gt;-Develop with passion&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-4877417020201770984?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/4877417020201770984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2009/04/brilliant.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4877417020201770984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4877417020201770984'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2009/04/brilliant.html' title='Brilliant!!!!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/SeVQrsG-u5I/AAAAAAAAAVM/S8_KICk7RZE/s72-c/UdiDahan.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-4157059831838526625</id><published>2009-03-16T15:09:00.000-07:00</published><updated>2009-03-16T15:32:22.385-07:00</updated><title type='text'>Functional Programming Is In Me!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/Sb7On6_m0oI/AAAAAAAAAVE/-Dy-gBV1Bjg/s1600-h/f%23_cover.jpg"&gt;&lt;img style="cursor: pointer; width: 240px; height: 240px;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/Sb7On6_m0oI/AAAAAAAAAVE/-Dy-gBV1Bjg/s400/f%23_cover.jpg" alt="" id="BLOGGER_PHOTO_ID_5313911795590025858" border="0" /&gt;&lt;/a&gt;The next book I'm going to buy will be Don Syme's Expert F#.&lt;br /&gt;This guy is like the Anders Hejlsberg of C#. He even brought generics to C#, and since he created F# in MSR (Microsoft Research in Cambridge) I figured he's the best person to learn from.&lt;br /&gt;&lt;br /&gt;This past weekend was supposed to be the weekend to brush up on the latest version of the Micro Framework (3.0) so that I can finally start building the medical device/application for monitoring my heart levels, and Download the latest CTP of F# and start writing some basic applications with it. Unfortunately, the wife wanted to go to IKEA and buy some hard wood flooring for her office/ballet studio. Since we consider ourselves to be fairly savy IKEA DIY people... we decided to give it a try. Man did I under estimate that project... not only did it take all weekend, but I had to buy new power tools at the local Home Depot. It took all day and night on Saturday plus Sunday morning to complete the room. I'm never doing that again. However, the floor turned out great and the wife is happy to dance on hardwood instead of carpet. :-)&lt;br /&gt;&lt;br /&gt;Unfortunately, it wasn't until 2am on Sunday before I was able to get to the Micro Framework updates. Still the same though, some API changes but mostly the same. I just need to find a wearable device that I can port the framework too. At the moment I'm simulating as much as I can through the emulator... so far that's been a good experience and it's very similar to the compact framework stuff.  As for F#.... well... after I saw this &lt;a href="http://channel9.msdn.com/pdc2008/TL11/"&gt;video&lt;/a&gt; I had to immediately download the bits and start playing around.  I have to say... that I'm digging F#. It's worth playing with it just for the interactive window in VS2008 alone.  To be able to write code, highlight it, and run it with out building or compiling is cool!&lt;br /&gt;&lt;br /&gt;I need to run down to B&amp;amp;N after I get off work and pick up the book for more in depth fun. :-)&lt;br /&gt;&lt;br /&gt;-Develop with Passion&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-4157059831838526625?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/4157059831838526625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2009/03/functional-programming-is-in-me.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4157059831838526625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4157059831838526625'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2009/03/functional-programming-is-in-me.html' title='Functional Programming Is In Me!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TrCLe1DA8mM/Sb7On6_m0oI/AAAAAAAAAVE/-Dy-gBV1Bjg/s72-c/f%23_cover.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-5554638386325362369</id><published>2009-02-11T18:58:00.000-08:00</published><updated>2009-02-11T19:48:48.468-08:00</updated><title type='text'>Object Databases in .NET</title><content type='html'>I'm probably going to get a lot of push back on this... especially from DB guys I know( Douglas, Thom, Glenn, you know who you are). :-)&lt;br /&gt;Anyway, I've recently discovered &lt;a href="http://www.db4o.com/"&gt;db4.0&lt;/a&gt;... this is a really good object database implementation.&lt;br /&gt;So good... that is supports T-SQL and LINQ. It's file based but the speed is impressive. Now... I'm not saying that this is finally the end of databases, but it's a good start for any small apps like mine that don't need the overhead of a powerful db platform like SQL/Oracle. I think it's wise to use a technology like this for small persistence scenarios... for instance, in my day job I deal with lots of calculations, estimating, etc. Quite a few of the calculations are calculated on the fly which initially takes a while depending on the state that the user left the application. So instead of dismissing persistence in this scenario and paying the cost for calculating rows and rows of data, I can store it all in a light weight, 1 .dll, 1 file, database of calculated values.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Below is an attempt to give you a better idea with out having to download the free stuff. :-)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;using&lt;/span&gt; System.IO;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;using&lt;/span&gt; Db4objects.Db4o.Query;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;using&lt;/span&gt; Db4objects.Db4o.Tutorial;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;namespace&lt;/span&gt; Db40Examples&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;public class&lt;/span&gt; Example1&lt;br /&gt;    {   &lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;public static void&lt;/span&gt; Main(string[] args)&lt;br /&gt;        {&lt;br /&gt;            IObjectContainer db = Db4oFactory.OpenFile(&lt;span style="color: rgb(0, 102, 0);"&gt;"Path to filename here"&lt;/span&gt;);&lt;br /&gt;            &lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                StoreFirstPilot(db); &lt;span style="color: rgb(0, 102, 0);"&gt; //create&lt;/span&gt;&lt;br /&gt;                StoreSecondPilot(db); &lt;span style="color: rgb(0, 102, 0);"&gt; //create&lt;/span&gt;&lt;br /&gt;                RetrieveAllPilots(db);&lt;span style="color: rgb(0, 102, 0);"&gt; //read&lt;/span&gt;&lt;br /&gt;                RetrievePilotByName(db); &lt;span style="color: rgb(0, 102, 0);"&gt; //read&lt;br /&gt;&lt;/span&gt;                RetrievePilotByExactPoints(db); &lt;span style="color: rgb(0, 102, 0);"&gt; //read&lt;/span&gt;&lt;br /&gt;                UpdatePilot(db); &lt;span style="color: rgb(0, 102, 0);"&gt;//update&lt;/span&gt;&lt;br /&gt;                DeleteFirstPilotByName(db); &lt;span style="color: rgb(0, 102, 0);"&gt;//delete&lt;/span&gt;&lt;br /&gt;                DeleteSecondPilotByName(db); &lt;span style="color: rgb(0, 102, 0);"&gt;//delete&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;            finally&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                db.Close();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;        &lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;public static void&lt;/span&gt; AccessDb4o()&lt;br /&gt;        {&lt;br /&gt;            IObjectContainer db = Db4oFactory.OpenFile(&lt;span style="color: rgb(0, 102, 0);"&gt;"Path to filename here"&lt;/span&gt;);&lt;br /&gt;            &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: rgb(0, 102, 0);"&gt;// do something with db4o&lt;/span&gt;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;finally&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                db.Close();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;public static void&lt;/span&gt; StoreFirstPilot(IObjectContainer db)&lt;br /&gt;        {&lt;br /&gt;            Pilot pilot1 = &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;new&lt;/span&gt; Pilot(&lt;span style="color: rgb(0, 102, 0);"&gt;"Michael Schumacher"&lt;/span&gt;,&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt; 100&lt;/span&gt;);&lt;br /&gt;            db.Store(pilot1);&lt;br /&gt;            Console.WriteLine(&lt;span style="color: rgb(0, 102, 0);"&gt;"Stored {0}"&lt;/span&gt;, pilot1);&lt;br /&gt;        }&lt;br /&gt;   &lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;public static void&lt;/span&gt; StoreSecondPilot(IObjectContainer db)&lt;br /&gt;        {&lt;br /&gt;            Pilot pilot2 = &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;new&lt;/span&gt; Pilot(&lt;span style="color: rgb(0, 102, 0);"&gt;"Rubens Barrichello"&lt;/span&gt;,&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt; 99&lt;/span&gt;);&lt;br /&gt;            db.Store(pilot2);&lt;br /&gt;            Console.WriteLine(&lt;span style="color: rgb(0, 102, 0);"&gt;"Stored {0}"&lt;/span&gt;, pilot2);&lt;br /&gt;        }&lt;br /&gt;   &lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;public static void &lt;/span&gt;RetrieveAllPilotQBE(IObjectContainer db)&lt;br /&gt;        {&lt;br /&gt;            Pilot proto = &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;new&lt;/span&gt; Pilot(null,&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt; 0&lt;/span&gt;);&lt;br /&gt;            IObjectSet result = db.QueryByExample(proto);&lt;br /&gt;            ListResult(result);&lt;br /&gt;        }&lt;br /&gt;   &lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;public static void&lt;/span&gt; RetrieveAllPilots(IObjectContainer db)&lt;br /&gt;        {&lt;br /&gt;            IObjectSet result = db.QueryByExample(&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;typeof&lt;/span&gt;(Pilot));&lt;br /&gt;            ListResult(result);&lt;br /&gt;        }&lt;br /&gt;   &lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;public static void&lt;/span&gt; RetrievePilotByName(IObjectContainer db)&lt;br /&gt;        {&lt;br /&gt;            Pilot proto = &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;new&lt;/span&gt; Pilot(&lt;span style="color: rgb(0, 102, 0);"&gt;"Michael Schumacher"&lt;/span&gt;, &lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;0&lt;/span&gt;);&lt;br /&gt;            IObjectSet result = db.QueryByExample(proto);&lt;br /&gt;            ListResult(result);&lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;public static void&lt;/span&gt; RetrievePilotByExactPoints(IObjectContainer db)&lt;br /&gt;        {&lt;br /&gt;            Pilot proto = &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;new&lt;/span&gt; Pilot(null, &lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;100&lt;/span&gt;);&lt;br /&gt;            IObjectSet result = db.QueryByExample(proto);&lt;br /&gt;            ListResult(result);&lt;br /&gt;        }&lt;br /&gt;   &lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;public static void&lt;/span&gt; UpdatePilot(IObjectContainer db)&lt;br /&gt;        {&lt;br /&gt;            IObjectSet result = db.QueryByExample(&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;new&lt;/span&gt; Pilot(&lt;span style="color: rgb(0, 102, 0);"&gt;"Michael Schumacher"&lt;/span&gt;, &lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;0&lt;/span&gt;));&lt;br /&gt;            Pilot found = (Pilot)result.Next();&lt;br /&gt;            found.AddPoints(&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;11&lt;/span&gt;);&lt;br /&gt;            db.Store(found);&lt;br /&gt;            Console.WriteLine(&lt;span style="color: rgb(0, 102, 0);"&gt;"Added 11 points for {0}"&lt;/span&gt;, found);&lt;br /&gt;            RetrieveAllPilots(db);&lt;br /&gt;        }&lt;br /&gt;   &lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;public static void&lt;/span&gt; DeleteFirstPilotByName(IObjectContainer db)&lt;br /&gt;        {&lt;br /&gt;            IObjectSet result = db.QueryByExample(&lt;span style="font-weight: bold;"&gt;new&lt;/span&gt; Pilot(&lt;span style="color: rgb(0, 102, 0);"&gt;"Michael Schumacher"&lt;/span&gt;, &lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;0&lt;/span&gt;));&lt;br /&gt;            Pilot found = (Pilot)result.Next();&lt;br /&gt;            db.Delete(found);&lt;br /&gt;            Console.WriteLine(&lt;span style="color: rgb(0, 102, 0);"&gt;"Deleted {0}"&lt;/span&gt;, found);&lt;br /&gt;            RetrieveAllPilots(db);&lt;br /&gt;        }&lt;br /&gt;   &lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;public static void&lt;/span&gt; DeleteSecondPilotByName(IObjectContainer db)&lt;br /&gt;        {&lt;br /&gt;            IObjectSet result = db.QueryByExample(&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;new&lt;/span&gt; Pilot(&lt;span style="color: rgb(0, 102, 0);"&gt;"Rubens Barrichello"&lt;/span&gt;, &lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt;0&lt;/span&gt;));&lt;br /&gt;            Pilot found = (Pilot)result.Next();&lt;br /&gt;            db.Delete(found);&lt;br /&gt;            Console.WriteLine(&lt;span style="color: rgb(0, 102, 0);"&gt;"Deleted {0}"&lt;/span&gt;, found);&lt;br /&gt;            RetrieveAllPilots(db);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Of course no example would be complete with out LINQ....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;         &lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;public static void&lt;/span&gt; StoreObjects(IObjectContainer db)&lt;br /&gt;        {&lt;br /&gt;            db.Store(&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;new&lt;/span&gt; Car(&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;"Ferrari"&lt;/span&gt;, (&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;new&lt;/span&gt; Pilot(&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;"Michael Schumacher"&lt;/span&gt;,&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt; 100&lt;/span&gt;))));&lt;br /&gt;            db.Store(&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;new&lt;/span&gt; Car(&lt;span style="font-weight: bold; color: rgb(0, 102, 0);"&gt;"BMW"&lt;/span&gt;, (&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;new&lt;/span&gt; Pilot(&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;"Rubens Barrichello"&lt;/span&gt;, &lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt;99&lt;/span&gt;))));&lt;br /&gt;        }&lt;br /&gt;   &lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;public static void&lt;/span&gt; RetrievePilot(IObjectContainer db)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;IEnumerable&lt;/span&gt;&lt;pilot&gt; result = &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;from&lt;/span&gt; Pilot p in db&lt;br /&gt;                                        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;where&lt;/span&gt; p.Name.StartsWith(&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;"Michael"&lt;/span&gt;)&lt;br /&gt;                                        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;select&lt;/span&gt; p;&lt;br /&gt;            ListResult(result);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;public static void&lt;/span&gt; RetrievePilotByCars(IObjectContainer db)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;IEnumerable&lt;/span&gt;&lt;pilot&gt; result = &lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt;from&lt;/span&gt; Car c in db&lt;br /&gt;                                        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;where&lt;/span&gt; c.Model.StartsWith(&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;"F"&lt;/span&gt;)&lt;br /&gt;                                        &amp;amp;&amp;amp; (c.Pilot.Points &gt; &lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;99&lt;/span&gt; &amp;amp;&amp;amp; c.Pilot.Points &lt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt;150&lt;/span&gt;)&lt;br /&gt;                                        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;select&lt;/span&gt; c.Pilot;&lt;br /&gt;            ListResult(result);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;public static void&lt;/span&gt; RetrievePilotUnoptimized(IObjectContainer db)&lt;br /&gt;        {&lt;br /&gt;           &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt; IEnumerable&lt;/span&gt;&lt;pilot&gt; result =&lt;span style="color: rgb(0, 0, 102); font-weight: bold;"&gt; from&lt;/span&gt; Pilot p in db&lt;br /&gt;                                        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;where&lt;/span&gt; (p.Points - &lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;81&lt;/span&gt;) == p.Name.Length&lt;br /&gt;                                        &lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;select&lt;/span&gt; p;&lt;br /&gt;            ListResult(result);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So far it's proven to be a quick way to get persistence up and going in my app with out all the worrying about "is my schema right?" kind of questions in my head. It's definitely going to be something I'll try to incorporate in to my unit tests in the future.&lt;br /&gt;&lt;br /&gt;-Develop With Passion&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-5554638386325362369?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/5554638386325362369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2009/02/object-databases-in-net.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/5554638386325362369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/5554638386325362369'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2009/02/object-databases-in-net.html' title='Object Databases in .NET'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-7935727698622464477</id><published>2009-02-11T18:40:00.000-08:00</published><updated>2009-02-11T18:58:09.374-08:00</updated><title type='text'>Gearing up for Mix09</title><content type='html'>It's official!!!  I'm heading to &lt;a href="http://2009.visitmix.com"&gt;Mix09&lt;/a&gt; in Las Vegas next month. Luckily, I was invited by a blue badger. Since this is my first Microsoft Conference ever (outside the road shows and free msdn events) I'm definitely going to live it up. Get swag, get some questions answered and come back to Seattle with some new tricks and better approaches. Since I've been heavily involved with Silverlight2 and WPF I've been getting the old designer/animator bug in me again. :-)&lt;br /&gt;It's nice to break out my old 3D stuff and Flash stuff and refresh the skills enough to reuse them in a .net application. I honestly never thought I'd type that, but it's true. The latest application that I'm working on is for a High School in Eastern Washington(as I mentioned in a previous post). The app is entirely silverlight2 and c# and is heavy on the animation side. I wanted to build an IPhone like experience for the application. Since it needs to appeal to teenagers, I figure eye candy like that had to be done. So far it's working out(for the most part). I'm constantly second guessing myself on the transitions from one screen to the next. I want full control over this, so that I can ease in and out anyway I want. Thus far I've been using &lt;a href="http://www.nikhilk.net/Silverlight-Effects-Transitions.aspx"&gt;Nikhil&lt;/a&gt; code base as a guide, but I still think there should be a better way. So hopefully I'll learn something about that at mix.&lt;br /&gt;Also... the backend story of the application is not traditional by any means. I'll speak more on this in a later post, but the concept of object databases (at least in my mind)has taken on a whole new meaning.&lt;br /&gt;&lt;br /&gt;-Develop With Passion&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-7935727698622464477?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/7935727698622464477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2009/02/gearing-up-for-mix09.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7935727698622464477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7935727698622464477'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2009/02/gearing-up-for-mix09.html' title='Gearing up for Mix09'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-2938775689024055970</id><published>2009-01-19T14:27:00.000-08:00</published><updated>2009-01-19T14:54:41.890-08:00</updated><title type='text'>What's up with this economy?</title><content type='html'>The economic issues have certainly had an effect on me. I've been dev'n like there's no tomorrow. I've done many projects both small and large lately(Silverlight2 &amp;amp; WPF) that have had a tremendous impact on my career and family. In keeping with the last post I'm still very much in full swing to getting my business off the ground. I've changed the name which reflects more of what services I offer and less on products that I've built (classic rookie mistake), and I've used quite a bit of earnings to put back in to the business ( productivity tools, frameworks, and new hardware).&lt;br /&gt;&lt;br /&gt;Currently, I've scaled way back on projects due to a new gig I recently received last year.&lt;br /&gt;It's a great company so far... I've been loaded with a new &lt;a href="http://www.dell.com/content/products/superview.aspx?c=us&amp;amp;cs=04&amp;amp;l=en&amp;amp;s=bsd&amp;amp;xdb=Z2xvYmFsOnByb2R1Y3RzOnByZWNuOmZsYXNoOndvcmtzdGF0aW9uLXByZWNpc2lvbi1tNjQwMCNyZWdpb24="&gt;Dell Precision m6400 quad core/8 gigs of ram&lt;/a&gt; notebook.  I've been brought on to lead them in to the next generation of end 2 end construction project estimation software.  I'll be leading yet another port/re-write of a 2.0 Winform in to a 3.5 WPF application . This one is already turning into a whopper of project. The design is out of wac in a lot places, there's  a massive amount of coupling due to the developer building the app as if it's one big API.  It sort of resembles the old View/Mediator pattern which is so opposite to the way things are designed now.   Sigh...&lt;br /&gt;&lt;br /&gt;On the flip side of that I'm building a online training module for a friend of the family.&lt;br /&gt;She's on a board of directors for a high school in eastern Washington, so the module needs to appeal to teens. Of course it's going to be in Silverlight2. :-)&lt;br /&gt;&lt;br /&gt;Hopefully that will lead to funding which will allow me to market it to other schools (hopefully).&lt;br /&gt;First things first though... I gotta get a killer UI for it. That will come from a &lt;a href="http://www.worktankseattle.com/"&gt;kick ass design studio&lt;/a&gt; I found(and worked a silverlight gig for) in Seattle. They will build the UI and I will make it come to life. :-)&lt;br /&gt;&lt;br /&gt;Until next time (not two months from now)&lt;br /&gt;-Develop with passion&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-2938775689024055970?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/2938775689024055970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2009/01/whats-up-with-this-economy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2938775689024055970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2938775689024055970'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2009/01/whats-up-with-this-economy.html' title='What&apos;s up with this economy?'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-6910663543539666195</id><published>2008-11-09T09:29:00.000-08:00</published><updated>2008-11-09T10:22:46.716-08:00</updated><title type='text'>Change!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/SRcfHQvb1GI/AAAAAAAAAUI/-b12_ZJhKls/s1600-h/obama.png"&gt;&lt;img style="cursor: pointer; width: 389px; height: 400px;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/SRcfHQvb1GI/AAAAAAAAAUI/-b12_ZJhKls/s400/obama.png" alt="" id="BLOGGER_PHOTO_ID_5266712498846553186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(November 4, 2008)&lt;/span&gt; America embarks on a journey for change.&lt;br /&gt;For years and years I've been on a journey for change... trying to change my destiny into something that I want it to be. So far it's been one of up's and down's, but overall it's been&lt;br /&gt;successful. I've had many small wins throughout my journey some of which have made their&lt;br /&gt;way here on this blog. Determining and fulfilling your own destiny is no easy task, but if you believe in it, work at it, and never give up on it, then it can surely happen. Looking back it was such an amazing day from the time I woke up in the morning to go vote, until the time I got home from work to find out we had a new president elect. Once the news hit my family and I... we were immediately stunned followed by tears of joy. That night and following morning I did a lot of thinking about how different things are now compared to the way it was growing up. A lot of different thoughts came to my mind, but the one that still hits home even to this day is how my father tried to start his own business making cookies, and for a several reasons(economy, funds, 4 children to raise, etc) wasn't able to see it all the way through to fruition. So he did what any decent husband/father would do... he got a job that would support his family.  Twenty five years later I find myself in the same boat... I have my own business which get's very little attention because of my day job which(praise god) more than supports my family. However,&lt;br /&gt;I feel as though its my destiny to see my own business all the way through to fruition. For my father and all the Frederick's/Wallace's that have walked before us who had their own dreams and ambitions to have their own businesses. I feel as though their is no better time than now to start that journey of change... from this moment on I will flip things around and make the leap to support my family on my own business. To quote our 44th president - &lt;span style="font-weight: bold;"&gt;"The time for change is now!"&lt;/span&gt; With god by my side and the love and support from my family I know ODev Solutions will be a success. ;-)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;" class="body"&gt;"Change will not come if we wait for some other person or some other time. We are the ones we've been waiting for. We are the change that we seek.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; "&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Barack Obama&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-6910663543539666195?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/6910663543539666195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/11/change.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6910663543539666195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6910663543539666195'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/11/change.html' title='Change!!!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TrCLe1DA8mM/SRcfHQvb1GI/AAAAAAAAAUI/-b12_ZJhKls/s72-c/obama.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-4188716208986284233</id><published>2008-10-12T11:24:00.001-07:00</published><updated>2008-10-12T11:42:08.097-07:00</updated><title type='text'>Update (Brush Maestro Spotlight)</title><content type='html'>It's been a while and I've been busy as usual.  The Photoshop integration project is finally coming to a close, and I'm excited to move on to something else. ;-)&lt;br /&gt;&lt;br /&gt;I'm really proud of this WPF application, I've delivered exactly what was spec'd out to me.&lt;br /&gt;If it were n't for WPF I would have never been able to pull it off.  Below are some screenshots of the application in use.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(Product) in List Mode&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/SPJBooKnhTI/AAAAAAAAATg/2kwHRpUO9gQ/s1600-h/list_mode.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/SPJBooKnhTI/AAAAAAAAATg/2kwHRpUO9gQ/s400/list_mode.png" alt="" id="BLOGGER_PHOTO_ID_5256335881327314226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(Product) in Thumbnail Mode&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/SPJB74zclaI/AAAAAAAAATo/HBq_IZ77qYc/s1600-h/thumbnail_mode.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/SPJB74zclaI/AAAAAAAAATo/HBq_IZ77qYc/s400/thumbnail_mode.png" alt="" id="BLOGGER_PHOTO_ID_5256336212211045794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(Product) List Mode re-ordering a single brush in the list&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/SPJCKWjyQoI/AAAAAAAAATw/9qkqIwExuYc/s1600-h/list_reorder.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/SPJCKWjyQoI/AAAAAAAAATw/9qkqIwExuYc/s400/list_reorder.png" alt="" id="BLOGGER_PHOTO_ID_5256336460716589698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(Product) Thumbnail Mode re-ordering a single brush in the list&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/SPJCgipeM7I/AAAAAAAAAT4/sgYeAH0PFe4/s1600-h/thumbnail_reorder.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/SPJCgipeM7I/AAAAAAAAAT4/sgYeAH0PFe4/s400/thumbnail_reorder.png" alt="" id="BLOGGER_PHOTO_ID_5256336841918788530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(Product) Resizing the brushes using slider at the top of screen &amp;amp; selecting a single brush for edit.&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/SPJCzyrrwEI/AAAAAAAAAUA/52FpR2uaNKg/s1600-h/resize_selection.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/SPJCzyrrwEI/AAAAAAAAAUA/52FpR2uaNKg/s400/resize_selection.png" alt="" id="BLOGGER_PHOTO_ID_5256337172640546882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This project was a lot of fun... and I really learned a lot more about WPF in the process. ;-)&lt;br /&gt;On a side note, I'm still pressing forward with the other two side projects focused on silverlight and the day job which I get to use &lt;a href="http://jquery.com"&gt;JQuery &lt;/a&gt;,&lt;a href="http://ui.jquery.com"&gt;JQueryUI&lt;/a&gt;, and my personal favorite right now....&lt;br /&gt;&lt;a href="http://blendables.com/labs/Desklighter/"&gt;Desklighter&lt;/a&gt; silverlight in a desktop application.  To give you a better comparison it's the equivalent of exporting flash content to an executable. ;-)&lt;br /&gt;&lt;br /&gt;Until next time...&lt;br /&gt;-Develop with Passion&lt;br /&gt;Jean Paul S. Boodhoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-4188716208986284233?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/4188716208986284233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/10/update-brush-maestro-spotlight.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4188716208986284233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4188716208986284233'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/10/update-brush-maestro-spotlight.html' title='Update (Brush Maestro Spotlight)'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TrCLe1DA8mM/SPJBooKnhTI/AAAAAAAAATg/2kwHRpUO9gQ/s72-c/list_mode.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-4304483275685671742</id><published>2008-09-14T22:45:00.000-07:00</published><updated>2008-09-14T23:10:06.513-07:00</updated><title type='text'>Yet Another Deep .NET Web Dev Reference</title><content type='html'>So for the last few weeks I've been working on several projects.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Project 1) &lt;/strong&gt;WPF Application that integrates with Creative Suite v 2&amp;amp;3 specifically... Photoshop.&lt;br /&gt;It's essentially a Brush Manager application that allows designers to manage(create/edit) Photoshop Brushset files... otherwise known as .ABR files. This project has been smooth sailing until the requirement came in to support earlier versions of Photoshop... which means I have to reverse engineer the binary file that makes up a .ABR File. Calling all devs that can reverse engineer a binary file!!! I need to know the structure of this file so I can re-create it with my own set of brushes. I've been in a hex editor for the last 3 weeks and all I can do is load it in photoshop with out getting errors. ;-)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Project 2)&lt;/strong&gt; Silverlight 2 application that is a Wizard style application which will be used by many people. It will be service oriented... I'm still debating whether or not it will be WCF or pure REST with HTTP(S) calls, this will depend entirely on the load test results. Anyhow I'm using Windows WorkFlow to drive it which will be nice... and I have a lot good code to read from a codeplex project I found which goes by the name of &lt;a href="http://www.codeplex.com/dropthings"&gt;Drop Things&lt;/a&gt;. This is an AJAX web portal which is built on ASP.NET 3.5 and it also uses WorkFlow. The creator &lt;a href="http://msmvps.com/blogs/omar/"&gt;Omar Zabir&lt;/a&gt; is one of the brightest devs I've come across (that doesn't work for MS) in a long time. He's got a ton of articles and code samples on how to do a lot of advanced stuff in ASP.NET... lots of great topics such as CDN(Content Delivery Networks), Performance Tips, AJAX Performance Tips, Proper Browser Caching, etc. The code that he posted on codeplex above is very good code as well... I'll definitely be using some of his helper classes for windows workflow in my project. ;-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Project 3) &lt;/strong&gt;Day Job- I'm in the second sprint which end on the 30th of this month. So far it's been a lot of refactoring, and performance improvements to an existing asp.net 2.o web site. I'm adding a light weight inversion of control container and using MVP on a few pages to speed up performance as well as bring clarity to the logic, also I'm adding quite a bit of LINQ to SQL, and LINQ to XML. The team is in complete aww of the techniques that I'm bringing in. After the sprint we move to silverlight 2 and that's when the fun starts. ;-)&lt;br /&gt;&lt;br /&gt;Very busy right now, but fun busy. This week I start my first day working from home... which will be nice.&lt;br /&gt;&lt;br /&gt;-Develop with Passion&lt;br /&gt;Jean Paul S. Boodhoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-4304483275685671742?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/4304483275685671742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/09/yet-another-deep-net-web-dev-reference.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4304483275685671742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4304483275685671742'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/09/yet-another-deep-net-web-dev-reference.html' title='Yet Another Deep .NET Web Dev Reference'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3202149889825410709</id><published>2008-08-27T15:42:00.000-07:00</published><updated>2008-08-27T16:14:44.668-07:00</updated><title type='text'>Say so long to HTML,CSS, and Javascript</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/SLXdIGR5xVI/AAAAAAAAANg/icYeGda38r8/s1600-h/VWG.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/SLXdIGR5xVI/AAAAAAAAANg/icYeGda38r8/s320/VWG.png" alt="" id="BLOGGER_PHOTO_ID_5239336872709834066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So lately, I've been really busy with the new gig, the two side projects, and of course the family.&lt;br /&gt;The new gig is getting better, I've been writing lots of LINQ with respect to xml, and sql. Also, they want to leverage my xaml skills with respect to silverlight. Luckily, I've been working with WPF for the last 3 years and silverlight for the last 6 months. Their will be quite a few new modules that will be added to the suite of online products, but with the help of a new found framework that's built on top of ASP.NET... it should make development a little smoother and quicker. Recently I was searching around codeplex for a lightweight, secure, modular, dnn like portal which allowed me to plug in my own feature set relatively quickly. I need something like this for one of the side projects as well as the day job. After some searching around I found several really cool frameworks that met the above requirements, but they all required knowledge of HTML,CSS, Javascript, etc. Now don't get me wrong... I like working with these technologies, it's just sometimes the debugging experience can be a nightmare. So I found &lt;a href="http://www.visualwebgui.com/"&gt;VisualWebGUI&lt;/a&gt;... this product gives you a winform like development experience but in the end it's a ASP.NET web application. Imagine a stateful web experience, no data exposed to the client, and everything runs on the server with an AJAX engine underneath to handle client to server communication. This is way to cool not to look at... the best part about it is it's recent support for silverlight as a view engine. With major players like(NetworkD and SAP)already having their own case studies it's sure to get swallowed up by Microsoft very soon.  So get this free open sourced framework while it's not a bazillion dollars and discover for yourself what web application development could be like with out client side scripting.  ;-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Develop with Passion&lt;br /&gt;-Jean Paul S. Boodhoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3202149889825410709?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/3202149889825410709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/08/say-so-long-to-htmlcss-and-javascript.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3202149889825410709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3202149889825410709'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/08/say-so-long-to-htmlcss-and-javascript.html' title='Say so long to HTML,CSS, and Javascript'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TrCLe1DA8mM/SLXdIGR5xVI/AAAAAAAAANg/icYeGda38r8/s72-c/VWG.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-4970611940743411111</id><published>2008-08-13T20:38:00.000-07:00</published><updated>2008-08-13T21:18:25.904-07:00</updated><title type='text'>Wrox Does It Again!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/SKOpbFlAMLI/AAAAAAAAANY/RsS2z25GS_k/s1600-h/ASPNET35.bmp"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/SKOpbFlAMLI/AAAAAAAAANY/RsS2z25GS_k/s320/ASPNET35.bmp" alt="" id="BLOGGER_PHOTO_ID_5234213474753589426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This one rocks... er... Wrox!&lt;br /&gt;&lt;br /&gt;Bill, Scott, and Devin really did a great job pulling together key topics in ASP.NET 3.5.&lt;br /&gt;This book is huge... weighting in at 1,584 pages not counting the online resources and index.&lt;br /&gt;It basically covers everything any developer would want to brush up on or learn completely from scratch. I was only looking to learn about caching for scaling issues( and it was a great chapter 23), but I learned about so much more.  I recently got a new job as a Lead ASP.NET developer and the site I have to fix is a poorly written asp.net 2.0 site with lots of table adapter code, custom role management based on a nasty switch statement, custom logging based on a file and poor threading synchronization, etc. It's bad... not to mention all the ASMX stuff. :-(&lt;br /&gt;Anyway, every time I flipped to a new section of the book it had a solution to the problem I was facing with the nasty 2.0 site. For instance, I can use LINQ to SQL to get rid of the table adapter code, role based management is obvious and should have been leveraged from the beginning, custom logging is cool because now I can leverage &lt;span style="font-weight: bold;"&gt;System.Web.Management.EventLogWebEventProvider&lt;/span&gt; which handles writing to the eventlog and database at the same time... for free!  Not to mention &lt;span style="font-weight: bold;"&gt;System.Web.Management.SimpleMailWebEventProvider &lt;/span&gt;which handles emailing me about any warnings or errors. A few more chapters in the book that I really like are IIS7, Membership and Role Management (might as well be under the hood), and of course... LINQ.&lt;br /&gt;LINQ to Objects, LINQ to XML, and LINQ to SQL.  The book even ends with a chapter on Silverlight. Awesome stuff!&lt;br /&gt;&lt;br /&gt;Theirs so much in this book that I couldn't possibly due it justice by listing it all here in this blog post. All I can say is go pick it up if you're a Dev... or at least thumb through it the next time your in the book store.  :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Develop With Passion&lt;br /&gt;-Jean Paul S. Boodhoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-4970611940743411111?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/4970611940743411111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/08/wrox-does-it-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4970611940743411111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4970611940743411111'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/08/wrox-does-it-again.html' title='Wrox Does It Again!!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TrCLe1DA8mM/SKOpbFlAMLI/AAAAAAAAANY/RsS2z25GS_k/s72-c/ASPNET35.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-1980460032613474159</id><published>2008-08-06T18:49:00.000-07:00</published><updated>2008-08-07T09:04:20.551-07:00</updated><title type='text'>How I Got Started In Software Development</title><content type='html'>&lt;strong&gt;&lt;span style="font-size:130%;"&gt;How Old Were You When You Started Programming?&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;Have I even started really programming yet? I guess I got my first taste when I was around fifteen, The year of Windows 95. This was the birth of Windows Explorer... the predecessor to FileManager. My programming experience back then was fairly basic. I mostly spent a lot of time creating 3D virtual environments in 3DSR4 before it was 3D studio max, and Lightwave 3d v5. I also wrote simple scripts in the 3D environment simply because it was another way of creating models on a more precise scale.&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;How Did You Get Started In Programming?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;My good friend Tom Zymescal (Tom... Tom... Tommmm) He taught me everything from the dark side of chatting in ICQ/Message Boards/IRC, downloading/uploading online, and of course my first OOP language.VB5. Even then, the programs I wrote were not “real world” programs, but simple applications that automated some tasks in windows. In high school I took a C++ class my senior year, but didn't really learn anything significant. After that I went to college for a single semester majoring in computer science and deciding that it was not for me. So I picked up my life and headed some where different where no one knew me or could judge me. I headed to a place were the Windows logo that I grew up with (since 1988 when I got my first computer) was born... Microsoft land (Seattle,WA) It wasn't till after arriving that I realized the playing field was much rougher and more competitive than Houston, TX. So I went to school at night while raising a family to learn C# in The .NET Framework. It was then that I got a rude awaking about how much I needed to learn to be any good... so after school it was time to get a J-O-B! It was then that I learned how to really program. And it was a rough start, writing the most knotty coupled code that was very low in cohesion. It wasn't till I discovered free seminars, meeting expert Microsoft Developers, blogging, and continuing to learn that I realized that I was finally becoming a good developer. ;-)&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;What Was Your First Language?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;My first programming language was LScript for LightWave3D . My first professional language was C# My first Object Oriented language was VB5.&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;What Was The First Real Program You Wrote?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Man, I can barely remember that far back. It was when I was working in a call center while going to school at night. I built a C# windows application to help Customer Service Representatives manage their callers better! This got me noticed in the company's software developer department. They still use the code that I wrote to this day. ;)&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;What Languages Have You Used Since You Started Programming?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;What is this? Some sort of interview? The programming languages I’ve used professionally are: C#, C++/CLI,JAVA,Javascript,VB.NET, IronRuby, IronPython.&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;What Was Your First Programming Gig?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;internetadvancement.com... a small Internet hosting company were I spent many hours building web sites and managing hosting accounts. They're actually still around. ;)&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;If You Knew Then What You Know Now, Would You Have Started Programming?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Well I definitely would have finished my computer science major, but yes, absolutely! I love to write code and write about code.&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;If There is One Thing You Learned Along the Way That You Would Tell New Developers, What Would It Be?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Learn to write and communicate well. Software development is mainly about ideas and being able to communicate your ideas well. It will definitely get you places. Also, compromise your ego. When you have an open mind and can come to grips with the fact that you don't know everything you actually open yourself up to learn more.&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;What's the Most Fun You've Ever Had ... Programming?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;My work on the Media Center product during my days at Microsoft. And building prototypes for start up companies looking to get their ideas out on the market. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-1980460032613474159?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/1980460032613474159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/08/how-i-got-started-in-software.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1980460032613474159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1980460032613474159'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/08/how-i-got-started-in-software.html' title='How I Got Started In Software Development'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-965254328387027833</id><published>2008-07-03T22:38:00.000-07:00</published><updated>2008-07-03T23:14:38.728-07:00</updated><title type='text'>Update</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/SG29sxjhAeI/AAAAAAAAANI/KZ99IplQFRE/s1600-h/head_first.png"&gt;&lt;img style="cursor: pointer; width: 218px; height: 226px;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/SG29sxjhAeI/AAAAAAAAANI/KZ99IplQFRE/s400/head_first.png" alt="" id="BLOGGER_PHOTO_ID_5219036120106467810" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/SG2-EDia3hI/AAAAAAAAANQ/gYo9AWNb_Qg/s1600-h/chumby.png"&gt;        &lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/SG2-EDia3hI/AAAAAAAAANQ/gYo9AWNb_Qg/s320/chumby.png" alt="" id="BLOGGER_PHOTO_ID_5219036520070700562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well... tomorrow is the 4th of July and as I type this my new neighbors are popping fireworks because they spent way to much money on them and can't possibly pop them all in one night. ;)&lt;br /&gt;Anyway, so much is happening it's difficult to find time to blog. The day job has me busy with developing a program to generate an excel report which sucks because I don't have VSTO. The target machines that will ultimately run the app are completely locked down and can't be modified, so I have to deploy an executable and dlls that just work. Which means dropping down to Type Library Import... yuck. A side from that I finished my POC (proof of concept) for a future client and they loved it. I built a WPF application that parses Photoshop brush sets and displays all the brushes with in the brush set in a nice Wrap Panel which can be resized, dragged around, etc. Prior to this week long project I had no previous experience with programming against Photoshop's SDK so it was excititng and fun to build something that works with Photoshop 5 - CS3. Also, I bought a &lt;a href="http://www.chumby.com/"&gt;Chumby&lt;/a&gt;, and &lt;a href="http://books.google.com/books?id=LjJcCnNf92kC&amp;amp;dq=Head+First+Design+Patterns"&gt;Head First Design Patterns&lt;/a&gt;. The chumby is going to replace my alarm clock that I've had since high school... so no more loud beeping sound when I wake up. From now on it's the local weather display for the day while the jazz music plays in the background. ;) As for the design patterns book... I literally have not been able to put it down. It's so amusing yet insightful... I love learning about patterns this way, it's actually starting to stick. So far I've only gotten through the first couple of chapters with covering Strategy and Observer, but man... now I think I know them well enough to be able to recognize when to use them. I've already marked a few places in a couple of projects that need to be refactored. One other thing that I'm excited about is hearing about what people where talking about at TechEd 2008 this year.  I didn't attend, but what I did hear is that LINQ to Objects is supported in .NET 2.0 SP1 via &lt;a href="http://www.albahari.com/nutshell/linqbridge.html"&gt;LinqBridge.dll&lt;/a&gt;.  Looks like I have more refactoring to do on Monday when I get back to work. ;)&lt;br /&gt;&lt;br /&gt;Develop With Passion&lt;br /&gt;-Jean Paul S. BoodHoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-965254328387027833?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/965254328387027833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/07/update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/965254328387027833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/965254328387027833'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/07/update.html' title='Update'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/SG29sxjhAeI/AAAAAAAAANI/KZ99IplQFRE/s72-c/head_first.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3671251209814439570</id><published>2008-06-05T21:16:00.000-07:00</published><updated>2008-06-05T21:37:56.454-07:00</updated><title type='text'>Revisiting The Castle Project (Specifically... Active Record)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.infoq.com/presentations/eini-verissimo-castle-active-record"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/SEi6Z72PulI/AAAAAAAAAM4/FxOBi4UfTuU/s400/active_record.png" alt="" id="BLOGGER_PHOTO_ID_5208617923778689618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A few years ago at my last job an x/co-worker (now friend of mine) introduced me to the &lt;a href="http://www.castleproject.org/"&gt;castle project&lt;/a&gt;. I remember taking a look at it and feeling really stupid because I didn't understand it or it's pieces.  Well... fast forward a few years and several development projects later. I came across it again on &lt;a href="http://www.blogger.com/www.infoq.com"&gt;InfoQ&lt;/a&gt;. I'm happy to report that it was better understood this time around... I even found myself guessing(correctly) how a feature would be implemented as the presenter was explaining it. :-) &lt;br /&gt;&lt;br /&gt;I really like Active Record because it's built on top of &lt;a href="http://www.hibernate.org/343.html"&gt;NHibernate&lt;/a&gt; a port of the java's  &lt;a href="http://www.hibernate.org/344.html"&gt;Hibernate Core&lt;/a&gt;. NHibernate even has it's own query syntax known as HQL which is expressed like the sample below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/SEi9pkBhuiI/AAAAAAAAANA/wBP79suF_MA/s1600-h/HQL.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/SEi9pkBhuiI/AAAAAAAAANA/wBP79suF_MA/s400/HQL.png" alt="" id="BLOGGER_PHOTO_ID_5208621490796345890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Since Active Record is built on top of NHibernate it does a really good job of abstracting away the complexity of NHibernate... leaving you with less to worry about and more power to leverage.&lt;br /&gt;Needless to say I'll be spending a few hours this weekend playing around with Active Record now that I actually understand it. :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Develop with Passion&lt;br /&gt;-Jean Paul S. Boodhoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3671251209814439570?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/3671251209814439570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/06/revisiting-castle-project-specifically.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3671251209814439570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3671251209814439570'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/06/revisiting-castle-project-specifically.html' title='Revisiting The Castle Project (Specifically... Active Record)'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TrCLe1DA8mM/SEi6Z72PulI/AAAAAAAAAM4/FxOBi4UfTuU/s72-c/active_record.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-1190438421748927621</id><published>2008-06-03T21:26:00.000-07:00</published><updated>2008-06-03T21:36:42.776-07:00</updated><title type='text'>Solving Application/System Wide Issues With Sysinternal Tools</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_TrCLe1DA8mM/SEYaOVkb61I/AAAAAAAAAMw/xdHyNP8bh6Y/s1600-h/unexplained.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207878852711017298" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/SEYaOVkb61I/AAAAAAAAAMw/xdHyNP8bh6Y/s320/unexplained.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Last night I came across the following link which led me to a great video on how troubleshooting&lt;/div&gt;&lt;div&gt;MS Windows problems as well as application problems can become much easier. :-)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=722"&gt;http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=722&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Mark Russinovich(The presenter in the picture above) is a god when it comes to solving deep Windows issues. If you've ever wanted to go deeper in to the OS and figure out what really goes  on during system crashes, hangs, and blue screens... check out the video above. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-1190438421748927621?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/1190438421748927621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/06/solving-applicationsystem-wide-issues.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1190438421748927621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1190438421748927621'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/06/solving-applicationsystem-wide-issues.html' title='Solving Application/System Wide Issues With Sysinternal Tools'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TrCLe1DA8mM/SEYaOVkb61I/AAAAAAAAAMw/xdHyNP8bh6Y/s72-c/unexplained.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-6808517621736305087</id><published>2008-05-27T20:12:00.000-07:00</published><updated>2008-05-27T20:28:04.410-07:00</updated><title type='text'>Keeping code DRY by using your .NET Umbrella</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_TrCLe1DA8mM/SDzN2lkb60I/AAAAAAAAAMo/TNZb4jOguEY/s1600-h/nventive_Banner.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5205261607015017282" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/SDzN2lkb60I/AAAAAAAAAMo/TNZb4jOguEY/s400/nventive_Banner.png" border="0" /&gt;&lt;/a&gt; (&lt;a href="http://www.nventive.net/dnn/Guidance/tabid/64/Default.aspx"&gt;nVentive&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Some days the day job is like getting caught in a Seattle rain/thunderstorm without an umbrella. We've all found ourselves writting plumbing code just to get data flowing in the right direction... just so that we can get the product working so that we can move on to the next product/project. Recently I came across the open source project above (which is now on &lt;a href="http://www.codeplex.com/umbrella"&gt;codeplex&lt;/a&gt;) and have discovered some really cool additional API's that can be used with the .NET Framework. :-)  Some of their API's actually help prevent developers like myself from having to write plumbing code. Everyone always says to keep your code DRY (Don't Repeat Yourself). By using free open source API's like this one... we can give new meaning to the term DRY by leveraging the Umbrella project. :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-Develop With Passion&lt;br /&gt;Jean Paul S. Boodhoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-6808517621736305087?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/6808517621736305087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/05/keeping-code-dry-by-using-your-net.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6808517621736305087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6808517621736305087'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/05/keeping-code-dry-by-using-your-net.html' title='Keeping code DRY by using your .NET Umbrella'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/SDzN2lkb60I/AAAAAAAAAMo/TNZb4jOguEY/s72-c/nventive_Banner.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-1272684294949869255</id><published>2008-05-26T10:10:00.000-07:00</published><updated>2008-05-26T10:19:27.102-07:00</updated><title type='text'>More on My 08 Pilot!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/SDrv61kb6vI/AAAAAAAAAMA/WXB5yO0cWbk/s1600-h/DSC02556.JPG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/SDrv61kb6vI/AAAAAAAAAMA/WXB5yO0cWbk/s400/DSC02556.JPG" alt="" id="BLOGGER_PHOTO_ID_5204736113471384306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/SDrwD1kb6wI/AAAAAAAAAMI/9Uux8cqAn4o/s1600-h/DSC02559.JPG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/SDrwD1kb6wI/AAAAAAAAAMI/9Uux8cqAn4o/s400/DSC02559.JPG" alt="" id="BLOGGER_PHOTO_ID_5204736268090206978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/SDrwMlkb6xI/AAAAAAAAAMQ/61TkBjcm1NA/s1600-h/DSC02561.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/SDrwMlkb6xI/AAAAAAAAAMQ/61TkBjcm1NA/s400/DSC02561.JPG" alt="" id="BLOGGER_PHOTO_ID_5204736418414062354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/SDrwX1kb6yI/AAAAAAAAAMY/Z5TKo-SYwLg/s1600-h/DSC02562.JPG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/SDrwX1kb6yI/AAAAAAAAAMY/Z5TKo-SYwLg/s400/DSC02562.JPG" alt="" id="BLOGGER_PHOTO_ID_5204736611687590690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/SDrwglkb6zI/AAAAAAAAAMg/4jJXk--y0DM/s1600-h/DSC02564.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/SDrwglkb6zI/AAAAAAAAAMg/4jJXk--y0DM/s400/DSC02564.JPG" alt="" id="BLOGGER_PHOTO_ID_5204736762011446066" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-1272684294949869255?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/1272684294949869255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/05/more-on-my-08-pilot.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1272684294949869255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1272684294949869255'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/05/more-on-my-08-pilot.html' title='More on My 08 Pilot!!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TrCLe1DA8mM/SDrv61kb6vI/AAAAAAAAAMA/WXB5yO0cWbk/s72-c/DSC02556.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-1109292133739539655</id><published>2008-05-26T08:44:00.000-07:00</published><updated>2008-05-26T09:17:49.939-07:00</updated><title type='text'>The House That .NET Built (Complete!!)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/SDrblVkb6uI/AAAAAAAAAL4/sdRxTZ5FB54/s1600-h/DSC02552.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/SDrblVkb6uI/AAAAAAAAAL4/sdRxTZ5FB54/s400/DSC02552.JPG" alt="" id="BLOGGER_PHOTO_ID_5204713753871641314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This completes the series of posts on the new house.&lt;br /&gt;It has been a unique and rewarding experience building my first home... I'd definitely recommend this approach to anyone who's interested in building a home.&lt;br /&gt;&lt;br /&gt;Now that it's complete, the real fun can start.  Well... sort of.... the lawn is my first attempt a mowing with a push mower, all apart of going green where ever I can. :-)&lt;br /&gt;And in case your wondering... yes... that is my new 2008 Honda Pilot. As I look back on my experiences I realize that I've come along way from that small town outside of Houston,TX.&lt;br /&gt;&lt;br /&gt;My passion and devotion to software and .NET has really paid off... which is why I'll continue to push myself to develop faster, higher level,  compact code. :-)&lt;br /&gt;&lt;br /&gt;-Develop with Passion&lt;br /&gt;Jean Paul S. Boodhoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-1109292133739539655?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/1109292133739539655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/05/house-that-net-built-complete.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1109292133739539655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1109292133739539655'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/05/house-that-net-built-complete.html' title='The House That .NET Built (Complete!!)'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TrCLe1DA8mM/SDrblVkb6uI/AAAAAAAAAL4/sdRxTZ5FB54/s72-c/DSC02552.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-1110553992516033516</id><published>2008-04-27T22:05:00.000-07:00</published><updated>2008-04-27T22:06:37.291-07:00</updated><title type='text'>I'm on codebetter.com!!</title><content type='html'>&lt;a href="http://codebetter.com/blogs/gregyoung/archive/2008/04/26/altdotnet-spec-session.aspx"&gt;http://codebetter.com/blogs/gregyoung/archive/2008/04/26/altdotnet-spec-session.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-1110553992516033516?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/1110553992516033516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/04/im-on-codebettercom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1110553992516033516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1110553992516033516'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/04/im-on-codebettercom.html' title='I&apos;m on codebetter.com!!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-34791802746948795</id><published>2008-04-22T20:45:00.000-07:00</published><updated>2008-04-22T21:17:53.205-07:00</updated><title type='text'>ALT.NET Wrap-up</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/SA6xHt5VkYI/AAAAAAAAALY/7WC07DzP_GQ/s1600-h/altnet_thumb.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/SA6xHt5VkYI/AAAAAAAAALY/7WC07DzP_GQ/s320/altnet_thumb.png" alt="" id="BLOGGER_PHOTO_ID_5192282166542045570" border="0" /&gt;&lt;/a&gt; The last day of ALT.NET was just as good as the first and second.&lt;br /&gt;More sessions... more learning.... more experiences.... etc.  It was one of the best developer experiences I've had thus far in my career. I managed to sneak a couple of pictures (below)from some of the guys Flickr sites. :-)&lt;br /&gt;&lt;br /&gt;Here is day one... kick off meeting.... Sitting right in front of me are a few guys on the &lt;a href="http://www.mono-project.com/Main_Page"&gt;Mono&lt;/a&gt; team, and just off to the left of them is &lt;a href="http://blogs.msdn.com/brada/default.aspx"&gt;Brad Abrams&lt;/a&gt;(Brown Jacket)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/SA63c95VkbI/AAAAAAAAALw/wESUEejCAoY/s1600-h/2425519317_6cdb4ce39e.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/SA63c95VkbI/AAAAAAAAALw/wESUEejCAoY/s400/2425519317_6cdb4ce39e.jpg" alt="" id="BLOGGER_PHOTO_ID_5192289128684032434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here I am (lower left corner)listening in on &lt;a href="http://haacked.com/Default.aspx"&gt;Phil Haack's &lt;/a&gt;(Upper right corner) discussion on ASP.NET MVC.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/SA6yVd5VkZI/AAAAAAAAALg/Y3tKq68Ecgo/s1600-h/2431633637_a7f19150a5.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/SA6yVd5VkZI/AAAAAAAAALg/Y3tKq68Ecgo/s400/2431633637_a7f19150a5.jpg" alt="" id="BLOGGER_PHOTO_ID_5192283502276874642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Since ALT.NET is one of those conferences where the agenda isn't decided until the first day...&lt;br /&gt;I thought it'd be cool to show my signature on one of the sessions (Distributed Domain Driven Design) that was finally decided on by the entire attendee list.  Mine is the big C.F.  :-)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/SA6y_d5VkaI/AAAAAAAAALo/lea6-Nm2v5c/s1600-h/DDDD2_thumb.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/SA6y_d5VkaI/AAAAAAAAALo/lea6-Nm2v5c/s400/DDDD2_thumb.jpg" alt="" id="BLOGGER_PHOTO_ID_5192284223831380386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Always good to be a fly on the wall in these kinds of conferences... can't wait until the next one.&lt;br /&gt;&lt;br /&gt;Develop with Passion&lt;br /&gt;-Jean Paul S. Boodhoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-34791802746948795?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/34791802746948795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/04/altnet-wrap-up.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/34791802746948795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/34791802746948795'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/04/altnet-wrap-up.html' title='ALT.NET Wrap-up'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/SA6xHt5VkYI/AAAAAAAAALY/7WC07DzP_GQ/s72-c/altnet_thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-4564664436643362994</id><published>2008-04-19T20:49:00.001-07:00</published><updated>2008-04-20T13:18:22.947-07:00</updated><title type='text'>ALT.NET End of Day 2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/SAq9eF7-n9I/AAAAAAAAALQ/o4vKbmFeTXI/s1600-h/altnet_thumb.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/SAq9eF7-n9I/AAAAAAAAALQ/o4vKbmFeTXI/s320/altnet_thumb.png" alt="" id="BLOGGER_PHOTO_ID_5191169845185388498" border="0" /&gt;&lt;/a&gt;This symbol means so much more than I ever thought it could mean. End of day one I left feeling empowered, inspired, and in total awe. Mainly this was due to culture shock... everywhere I looked there was a familiar face and almost every voice that I'd hear would be a familiar one. I guess this is what you expect when you're sitting in a room with all of the developers who's blogs represent your entire Google reader list. :-)&lt;br /&gt;&lt;br /&gt;Still, it's the end of day one... so I get home and brush up on the topics that I will learn about today. End of day two (as the title of this post reads) was an amazing experience to say the least. 10:30am first session of the day I kick off with &lt;a href="http://www.ironruby.net/"&gt;Iron Ruby&lt;/a&gt; (talk given by &lt;a href="http://www.iunknown.com/"&gt;John Lam&lt;/a&gt;), Then it was on to the next session... a new tool (&lt;a href="http://research.microsoft.com/specsharp/"&gt;Spec#&lt;/a&gt;)I haven't heard of before today.  So listening to the guys who wrote it and having a chance to interact with them was very cool... I left the talk feeling the same way as everyone else who attended it. We all have high hopes that spec# will find it's way into C# 4.0. After that we broke for lunch and then back to the sessions. When I returned to the sessions I decided to go hang out and listen to a discussion about &lt;a href="http://asp.net/mvc/"&gt;ASP.NET MVC&lt;/a&gt; with Scott Gu, Phil Haack, and Brad Abrams to name a few. It was a good talk, and I certainly gained more insight than I previously had about the framework itself.... however, I wanted to change topics... so I went to a different hall and discovered a topic on DSL's or Domain Specific Languages. This was one of the better talks of the day since it was facilitated by &lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt;. Quite a few issues were brought up and addressed on the subject which made for an interesting discussion... with guys like &lt;a href="http://ayende.com/blog/"&gt;Oren Eini&lt;/a&gt; (creator of Rhino Mocks),&lt;a href="http://weblogs.asp.net/rosherove/"&gt; Roy Osherove&lt;/a&gt;(who did not bring his guitar), and &lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/a&gt;. After that I caught Scott Bellware's talk on BDD(Behavior Driven Development) which was very insightful.  Finally I finished up the day chatting with one of the  Mono Framework team members about the pain points I've experienced with getting .NET applications to run on the MAC, and &lt;a href="http://www.charliepoole.org/cp.php"&gt;Charlie Pool&lt;/a&gt; creator of the NUnit testing framework.  Whew! Quite a day... can't wait for the final wrap up day tomorrow.&lt;br /&gt;&lt;br /&gt;Develop with Passion&lt;br /&gt;-Jean Paul S. Boodhoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-4564664436643362994?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/4564664436643362994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/04/altnet-end-of-day-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4564664436643362994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4564664436643362994'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/04/altnet-end-of-day-2.html' title='ALT.NET End of Day 2'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TrCLe1DA8mM/SAq9eF7-n9I/AAAAAAAAALQ/o4vKbmFeTXI/s72-c/altnet_thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-7488966377638136301</id><published>2008-04-08T21:11:00.000-07:00</published><updated>2008-04-08T21:57:02.391-07:00</updated><title type='text'>Civil Engineering or Virtual Bridge Builder</title><content type='html'>In my continued experience I've been challenged time and time again to interop, integrate, or simply bridge to and from the .NET Framework.  Whether its Web Services in Java/systinet  or Managed code(C#) to Native code(C++) through C++/CLI... the fact still remains that the .NET Framework is so powerful in so many ways. Which is why... dear reader... I present to you my third and probably most difficult challenge to date. C# on Unix/Linux platforms.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/R_xFZ5Id48I/AAAAAAAAALA/hQy0ZjQ5XRI/s1600-h/mono_logo.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/R_xFZ5Id48I/AAAAAAAAALA/hQy0ZjQ5XRI/s320/mono_logo.png" alt="" id="BLOGGER_PHOTO_ID_5187097181959349186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R_xF0pId49I/AAAAAAAAALI/ABiUFXl6v5A/s1600-h/mono_ide.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R_xF0pId49I/AAAAAAAAALI/ABiUFXl6v5A/s320/mono_ide.png" alt="" id="BLOGGER_PHOTO_ID_5187097641520849874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That's right dear reader... Another challenge that I will once again rise to.  There is a .net application that makes network calls to a database that resides on a Linux box. It's an old&lt;br /&gt;application since it's written in .NET 1.1 and is problematic due to strange code and network issues. The Linux box is from what I hear... an 8 proc box. That's right... 8 processors. I'm thinking right away that I can use .NET 3.5 parallel libraries to make use of those 8 processors.&lt;br /&gt;I just need to get it working first. :-)&lt;br /&gt;&lt;br /&gt;So... there are a couple of ways to accomplish this, and they are as follows:&lt;br /&gt;&lt;br /&gt;1) Install an Add-In to VS2005/VS2008 which will allow the C# compiler to adjust for Mono.&lt;br /&gt;2) Use the IDE above and leverage the mono compiler that way.&lt;br /&gt;&lt;br /&gt;Either way I look at it... I have to compile down to Mono so that the Mono Runtime can execute the application. That's basically how it works... so as a comparison... Windows loads mscorlib along with the .NET framework and it's corresponding version during application launch.&lt;br /&gt;However, in a Linux/Unix environment... Mono loads and launches the .NET application.&lt;br /&gt;So first things first, I have to install the Mono runtime just like I'd have to install .NET on windows. My first attempt is on a Unix platform since I have a powerful Mac machine at my disposal. :-) The runtime installs smoothly... so far so good. Now the development environment above... install worked great, but when I went to run it I got a mono runtime error. It gave me a mozilla error... something about  MOZILLA_FIVE_HOME path not set to mozilla install directory. After searching around I found two things... one...that mozilla is a direct dependency on  the IDE above and must be installed  in order to do development. two... the  environment variable must be set which I could not figure it out in the 20min of playing around with it while my five year old daughter kept harassing me to get off and let her play games.  Ahhhhhh!!! Well, needless to say it has begun and I will ultimately rise to the challenge... even if that means falling back to VS to do development. :-)&lt;br /&gt;&lt;br /&gt;-Develop with Passion&lt;br /&gt;Jean Paul S. Boodhoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-7488966377638136301?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/7488966377638136301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/04/civil-engineering-or-virtual-bridge.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7488966377638136301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7488966377638136301'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/04/civil-engineering-or-virtual-bridge.html' title='Civil Engineering or Virtual Bridge Builder'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TrCLe1DA8mM/R_xFZ5Id48I/AAAAAAAAALA/hQy0ZjQ5XRI/s72-c/mono_logo.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-7581040698237905750</id><published>2008-03-28T18:29:00.000-07:00</published><updated>2008-03-28T19:41:01.459-07:00</updated><title type='text'>I AM  ALT.NET</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R-2bs2EPfcI/AAAAAAAAAKs/cfkHQk4yyL4/s1600-h/altnet_thumb.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R-2bs2EPfcI/AAAAAAAAAKs/cfkHQk4yyL4/s320/altnet_thumb.png" alt="" id="BLOGGER_PHOTO_ID_5182969940903165378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(&lt;a href="http://altnetpedia.com/Default.aspx?AspxAutoDetectCookieSupport=1"&gt;AltNetPedia&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;A week or so ago I listened to Scott's weekly &lt;a href="http://www.hanselminutes.com/"&gt;podcast&lt;/a&gt; as I do every week, and the topic was ALT.NET.  After listening to it... I went over to altnetpedia(the link above) to learn more.&lt;br /&gt;It is so refreshing to learn that a lot of what I'm doing and what I'm striving to do actually has a name and meaning.  As I gear up for the conference next month I'll be going over the major principles and practices that I try to incorporate in my daily development efforts. It'll just be a review, but again I want to be sure I'm covering as much as I can.&lt;br /&gt;&lt;br /&gt;Practices and Principles like the following: (&lt;a href="http://www.amazon.com/Principles-Patterns-Practices-Robert-Martin/dp/0131857258/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1206755491&amp;amp;sr=8-1"&gt;These will be referenced from Agile Principles Patterns and Practices in C#&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;1) Single Responsibility (SRP)&lt;br /&gt;2) Open-Closed (OCP)&lt;br /&gt;3) Liskov Substitution (LSP)&lt;br /&gt;4) Interface Segregation (ISP)&lt;br /&gt;5) Strategy&lt;br /&gt;6) Facade and Mediator&lt;br /&gt;7) Singleton and Monostate&lt;br /&gt;&lt;br /&gt;In addition to the list above... I'll also be digging around in Spring.NET a little more since I got the hang of the IoC container. That along with daily development efforts should be enough to find myself ready for the event.&lt;br /&gt;&lt;br /&gt;So what does all this mean?  What does it mean to be ALT.NET? On a daily basis I find myself being a little frustrated at the fact that I'm apart of a large organization and yet... I'm the only one in my group who is employing fresh, innovative design ideas. As a contractor I came in and built a bridge between existing legacy C++  and Modern .NET with the help of CLI. I had no previous C++ skills.... the only thing I had at the time was passion, confidence, and the will to make the .NET platform play a key role in enhancing the legacy code base. This got me noticed, and so I became a part of the team full time.  Even though I'm apart of the team, the fact still remains... I'm the only one implementing TDD, BDD, MVP,IoC, SRP,ISP, etc. I mean I've even tried to employ XP style approaches to some of the projects that I'm working on. Nothing formal, just some basic techniques like index cards for user stories, breaking up two weeks worth of work into two iterations.  Even though I'm doing all this... it's completely going unnoticed.... mainly because no one knows about this stuff at all. Sigh... what does it all mean?&lt;br /&gt;&lt;br /&gt;I'll continue to push myself and the .NET platform to the edge... because that's what's made me the developer that I am today.  A lot of great development coming with emphasis on home automation, Micro Framework(embedded devices), integration with Media Center (Vista Ultimate) ,  Windows Home Server (mControl  add-in), etc. &lt;br /&gt;&lt;br /&gt;The way things are going I've decided to give it a little more time to see how it goes. They're finally making plans to migrate some legacy C++ code over to C#, and seeing as how I've got experience in Migration, Porting, and Total Re-Writes... I'd say it's right up my alley.  :-)&lt;br /&gt;&lt;br /&gt;Anyway, I'm gearing up for ALT.NET!!  (A little over two weeks to go)&lt;br /&gt;&lt;br /&gt;-Develop with Passion&lt;br /&gt;Jean Paul S. Boodhoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-7581040698237905750?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/7581040698237905750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/i-am-altnet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7581040698237905750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7581040698237905750'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/i-am-altnet.html' title='I AM  ALT.NET'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TrCLe1DA8mM/R-2bs2EPfcI/AAAAAAAAAKs/cfkHQk4yyL4/s72-c/altnet_thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-5120423484440139798</id><published>2008-03-25T21:01:00.000-07:00</published><updated>2008-03-26T10:48:47.252-07:00</updated><title type='text'>The House That .NET Built (Part 5)</title><content type='html'>Well... were almost home. The .NET service oriented, solar powered, wind powered, technology driven, automated home is almost complete. This will be the last post until it is completely done.&lt;br /&gt;Below are a few pictures of the outside completed... minus the landscaping. Below the pictures are a few videos of the inside of the home insulated and dry walled.&lt;br /&gt;&lt;br /&gt;All in all... it was a good Easter Sunday. :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R-nK3mEPfZI/AAAAAAAAAKU/GQ0-t8VzV-Y/s1600-h/1.24.easterhouse+043.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5181895902726421906" style="CURSOR: pointer" alt="" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/R-nK3mEPfZI/AAAAAAAAAKU/GQ0-t8VzV-Y/s320/1.24.easterhouse+043.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R-nK9mEPfaI/AAAAAAAAAKc/LNI-RXwFRO0/s1600-h/1.24.easterhouse+042.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5181896005805637026" style="CURSOR: pointer" alt="" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/R-nK9mEPfaI/AAAAAAAAAKc/LNI-RXwFRO0/s320/1.24.easterhouse+042.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/R-nLGGEPfbI/AAAAAAAAAKk/BuGKaj-ZIQE/s1600-h/1.24.easterhouse+040.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5181896151834525106" style="CURSOR: pointer" alt="" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/R-nLGGEPfbI/AAAAAAAAAKk/BuGKaj-ZIQE/s320/1.24.easterhouse+040.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(Up-stairs) 2nd floor&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-64a4dc1cdd7d6f9d" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v15.nonxt5.googlevideo.com/videoplayback?id%3D64a4dc1cdd7d6f9d%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D77DC0F0DD1221AB96B89F87FDE14C9323F7C4A70.20FCF05EC81DB563C1CDDE8F151D0BDC2A471057%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D64a4dc1cdd7d6f9d%26offsetms%3D5000%26itag%3Dw160%26sigh%3DgG374EpUH5TTb128E1vL_ViIBKI&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v15.nonxt5.googlevideo.com/videoplayback?id%3D64a4dc1cdd7d6f9d%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D77DC0F0DD1221AB96B89F87FDE14C9323F7C4A70.20FCF05EC81DB563C1CDDE8F151D0BDC2A471057%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D64a4dc1cdd7d6f9d%26offsetms%3D5000%26itag%3Dw160%26sigh%3DgG374EpUH5TTb128E1vL_ViIBKI&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;(Down-stairs) 1st floor&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-24c99988e5e2600" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v10.nonxt1.googlevideo.com/videoplayback?id%3D024c99988e5e2600%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3DA575629ACC0B9590D1C21C8A9D7B4939D3A69BA.58D61093F342C4C7F9BFF83CBF37C41C58DA4F2A%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D24c99988e5e2600%26offsetms%3D5000%26itag%3Dw160%26sigh%3D7KRoI-GkKw1l-TwpiHcNtfNiYQk&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v10.nonxt1.googlevideo.com/videoplayback?id%3D024c99988e5e2600%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3DA575629ACC0B9590D1C21C8A9D7B4939D3A69BA.58D61093F342C4C7F9BFF83CBF37C41C58DA4F2A%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D24c99988e5e2600%26offsetms%3D5000%26itag%3Dw160%26sigh%3D7KRoI-GkKw1l-TwpiHcNtfNiYQk&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;(Garage/Front) Outside&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-da3285d7e5c03819" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v12.nonxt6.googlevideo.com/videoplayback?id%3Dda3285d7e5c03819%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D1A6B81773A1DE0952BB2648B67CF0C52E34651F3.3F2B197C01499D0D2018377FF27624A0AD66A599%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dda3285d7e5c03819%26offsetms%3D5000%26itag%3Dw160%26sigh%3DQgdUf9yq3TQmxIppBv1_mGcz4DE&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v12.nonxt6.googlevideo.com/videoplayback?id%3Dda3285d7e5c03819%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D1A6B81773A1DE0952BB2648B67CF0C52E34651F3.3F2B197C01499D0D2018377FF27624A0AD66A599%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dda3285d7e5c03819%26offsetms%3D5000%26itag%3Dw160%26sigh%3DQgdUf9yq3TQmxIppBv1_mGcz4DE&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-5120423484440139798?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=24c99988e5e2600&amp;type=video%2Fmp4' length='0'/><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=64a4dc1cdd7d6f9d&amp;type=video%2Fmp4' length='0'/><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=da3285d7e5c03819&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/5120423484440139798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/house-that-net-built-part-5.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/5120423484440139798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/5120423484440139798'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/house-that-net-built-part-5.html' title='The House That .NET Built (Part 5)'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TrCLe1DA8mM/R-nK3mEPfZI/AAAAAAAAAKU/GQ0-t8VzV-Y/s72-c/1.24.easterhouse+043.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3313712722075902313</id><published>2008-03-16T19:07:00.000-07:00</published><updated>2008-03-16T19:28:05.103-07:00</updated><title type='text'>Becoming a better Developer</title><content type='html'>In my quest to become a better developer I went out &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;Friday&lt;/span&gt; night (after a movie with the family) to Barnes and Noble and planned on picking up Patterns of Enterprise Application Architecture by Martin Fowler. Instead I picked up Applying Domain-Driven Design and Patterns which is shown below. This book captures everything that Martin Fowler's book covers except it has a .NET flavor instead of the Java flavor that is expressed in Martin's book. &lt;div&gt;&lt;br /&gt;&lt;div&gt;I'm already through the first three chapters... it's nice to read a book that I can relate to because of my development efforts. Anyway, with comments from Scott &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Bellware&lt;/span&gt;, and forwards from Martin Fowler and Eric Evans.... this book certainly lives up to it's expectations so far. :-)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_TrCLe1DA8mM/R93WP_ZxMkI/AAAAAAAAAJ0/4CqxLxGVkJc/s1600-h/DSC01822.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5178530716751835714" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/R93WP_ZxMkI/AAAAAAAAAJ0/4CqxLxGVkJc/s320/DSC01822.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R93UyPZxMiI/AAAAAAAAAJk/3QTslkHSZ9Y/s1600-h/DSC01822.JPG"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3313712722075902313?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/3313712722075902313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/becoming-better-developer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3313712722075902313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3313712722075902313'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/becoming-better-developer.html' title='Becoming a better Developer'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/R93WP_ZxMkI/AAAAAAAAAJ0/4CqxLxGVkJc/s72-c/DSC01822.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-8381186448241942693</id><published>2008-03-08T20:58:00.000-08:00</published><updated>2008-03-08T21:26:18.550-08:00</updated><title type='text'>The House That .NET Built (Part 4)</title><content type='html'>Moving right along.... with one week to go before our first official walk through... we are very excited to see all the little things starting to go in to place.  Tyvek House Wrapping, Roof, Windows, Sliding Glass Door, Furnace, Pex tubing run up to copper, and Tank less Water Heater rough-in.&lt;br /&gt;&lt;br /&gt;I'm definitely making notes along the way for devices to be strategically placed in certain areas to monitor climate, watts, water, etc. :-)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R9Nyf_ZxMcI/AAAAAAAAAI0/JhBk4RMt7EY/s1600-h/DSC01672_modified.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R9Nyf_ZxMcI/AAAAAAAAAI0/JhBk4RMt7EY/s320/DSC01672_modified.jpg" alt="" id="BLOGGER_PHOTO_ID_5175606290699858370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R9NyvvZxMdI/AAAAAAAAAI8/_kILFJ80bn0/s1600-h/DSC01671_modified.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/R9NyvvZxMdI/AAAAAAAAAI8/_kILFJ80bn0/s320/DSC01671_modified.jpg" alt="" id="BLOGGER_PHOTO_ID_5175606561282798034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R9Nzu_ZxMgI/AAAAAAAAAJU/BydqEyZUbT4/s1600-h/DSC01678_modified.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R9Nzu_ZxMgI/AAAAAAAAAJU/BydqEyZUbT4/s320/DSC01678_modified.jpg" alt="" id="BLOGGER_PHOTO_ID_5175607647909523970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R9NzD_ZxMeI/AAAAAAAAAJE/b1lmpaDnSto/s1600-h/DSC01728_modified.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R9NzD_ZxMeI/AAAAAAAAAJE/b1lmpaDnSto/s320/DSC01728_modified.jpg" alt="" id="BLOGGER_PHOTO_ID_5175606909175149026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R9NzZ_ZxMfI/AAAAAAAAAJM/DiIlutIeoXk/s1600-h/DSC01739_modified.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R9NzZ_ZxMfI/AAAAAAAAAJM/DiIlutIeoXk/s320/DSC01739_modified.jpg" alt="" id="BLOGGER_PHOTO_ID_5175607287132271090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/R9N0YfZxMhI/AAAAAAAAAJc/lkw8s9oHE1w/s1600-h/DSC01741.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/R9N0YfZxMhI/AAAAAAAAAJc/lkw8s9oHE1w/s320/DSC01741.JPG" alt="" id="BLOGGER_PHOTO_ID_5175608360874095122" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-8381186448241942693?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/8381186448241942693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/house-that-net-built-part-4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/8381186448241942693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/8381186448241942693'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/house-that-net-built-part-4.html' title='The House That .NET Built (Part 4)'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TrCLe1DA8mM/R9Nyf_ZxMcI/AAAAAAAAAI0/JhBk4RMt7EY/s72-c/DSC01672_modified.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-8366754435621632299</id><published>2008-03-08T20:41:00.000-08:00</published><updated>2008-03-08T20:56:26.340-08:00</updated><title type='text'>The Winner Is... Spring.NET!!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R9Nru_ZxMbI/AAAAAAAAAIs/MCEEW7gCfjQ/s1600-h/logo_spring.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R9Nru_ZxMbI/AAAAAAAAAIs/MCEEW7gCfjQ/s400/logo_spring.png" alt="" id="BLOGGER_PHOTO_ID_5175598851816501682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After playing around with a few different Inversion of Control Containers I've come to the conclusion that the Spring.NET framework is definitely the way to go.&lt;br /&gt;&lt;br /&gt;Not only does if give me a mature (IoC), but it has so much more....&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;a href="http://www.springframework.net/doc-latest/reference/html/objects.html"&gt;&lt;span style="font-weight: bold;"&gt;Spring.Core&lt;/span&gt;&lt;/a&gt; – Use this module to configure your application using Dependency Injection.&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt; &lt;/span&gt;&lt;/p&gt;                            &lt;p class="MsoNormal"&gt;&lt;a href="http://www.springframework.net/doc-latest/reference/html/aop.html"&gt;&lt;span style="font-weight: bold;"&gt;Spring.Aop&lt;/span&gt;&lt;/a&gt; – Use this module to perform Aspect-Oriented Programming (AOP).&lt;span style=""&gt;  &lt;/span&gt;AOP centralizes common functionality that can then be declaratively applied across your application in a targeted manner.&lt;span style=""&gt;   &lt;/span&gt;An             &lt;a href="http://www.springframework.net/doc-latest/reference/html/aop-aspect-library.html"&gt;aspect library&lt;/a&gt; provides predefined easy to use aspects for transactions, logging, performance monitoring, caching, method retry, and exception handling.&lt;/p&gt;                            &lt;p class="MsoNormal"&gt;&lt;a href="http://www.springframework.net/doc-latest/reference/html/index-middle-tier.html"&gt;&lt;span style="font-weight: bold;"&gt;Spring.Data&lt;/span&gt;&lt;/a&gt; – Use this module to achieve greater efficiency and consistency in writing data access functionality in ADO.NET and to perform declarative transaction management.&lt;/p&gt;                            &lt;p class="MsoNormal"&gt;&lt;a href="http://www.springframework.net/doc-latest/reference/html/orm.html"&gt;&lt;span style="font-weight: bold;"&gt;Spring.Data.NHibernate&lt;/span&gt;&lt;/a&gt; – Use this module to integrate NHibernate with Spring’s declarative transaction management functionality allowing easy mixing of ADO.NET and NHibernate operations within the same transaction.&lt;span style=""&gt; &lt;/span&gt;NHibernate 1.0 users will benefit from ease of use APIs to perform data access operations.&lt;/p&gt;                            &lt;p class="MsoNormal"&gt;&lt;a href="http://www.springframework.net/doc-latest/reference/html/web.html"&gt;&lt;span style="font-weight: bold;"&gt;Spring.Web&lt;/span&gt;&lt;/a&gt; – Use this module to raise the level of abstraction when writing ASP.NET web applications allowing you to effectively address common pain-points in ASP.NET such as data binding, validation, and ASP.NET page/control/module/provider configuration.&lt;/p&gt;                            &lt;p class="MsoNormal"&gt;&lt;a href="http://www.springframework.net/doc-latest/reference/html/ajax.html"&gt;&lt;span style="font-weight: bold;"&gt;Spring.Web.Extensions&lt;/span&gt;&lt;/a&gt; – Use this module to easily expose a plain .NET object (PONO), that is one that doesn't have any attributes or special base classes, as a web service, configured via dependency injection, 'decorated' by applying AOP, and then exposed to client side java script.&lt;/p&gt;                            &lt;p class="MsoNormal"&gt;&lt;a href="http://www.springframework.net/doc-latest/reference/html/index-services.html"&gt;&lt;span style="font-weight: bold;"&gt;Spring.Services&lt;/span&gt;&lt;/a&gt; – Use this module to adapt plain .NET objects so they can be used with a specific distributed communication technology, such as .NET Remoting, Enterprise Services, and ASMX Web Services.&lt;span style=""&gt;  &lt;/span&gt;These services can be configured via dependency injection and ‘decorated’ by applying AOP.&lt;/p&gt;                            &lt;p class="MsoNormal"&gt;&lt;a style="font-weight: bold;" href="http://www.springframework.net/doc-latest/reference/html/testing.html"&gt;Spring.Testing.NUnit&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;- Use this module to perform integration testing with NUnit.&lt;/p&gt;With the all the modules above I can take baby steps with integration testing... once complete I can just add a DLL and I'm good to go.  I also feel especially good about this framework because it's a direct port of Java's Spring Framework, which has been around for a while and very successful in major industries... including Financing. :-)&lt;br /&gt;&lt;br /&gt;I'll be sure to post some example uses of the Spring.Core assembly which offers the Dependency Injection stuff.  :-)&lt;br /&gt;&lt;br /&gt;-Develop With Passion&lt;br /&gt;Jean Paul S. Boodhoo&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-8366754435621632299?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/8366754435621632299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/winner-is-springnet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/8366754435621632299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/8366754435621632299'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/winner-is-springnet.html' title='The Winner Is... Spring.NET!!!!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TrCLe1DA8mM/R9Nru_ZxMbI/AAAAAAAAAIs/MCEEW7gCfjQ/s72-c/logo_spring.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-1675653621542283603</id><published>2008-03-05T22:11:00.000-08:00</published><updated>2008-03-05T22:40:30.743-08:00</updated><title type='text'>Which (IoC) Should I Use?</title><content type='html'>Today it became clear. I'm writing a Windows Forms Application using MVP(supervising controller) "Test First"... and the presenter is taking on the responsibility of calling in to other domains such as Services Layer, Persistence Layer, etc. The presenter is communicating entirely through interfaces which makes it nice and generic... I'm abstracting away the implementation details. So there's about six different contracts(Interfaces) that the presenter needs to get access to. Currently I'm using poor mans dependency injection via Constructor Injection... this is the act of constructor chaining where the overloaded constructor takes on the responsibility of wiring up the concrete types to the abstractions. While this works... it's kind of messy and code is beginning to smell. So I need to implement a Inversion Of Control Container... their are so many to choose from... with choices like... Spring.NET, Structure Map,Object Builder, and Unity... it's very difficult to make the choice of which to use. Since I've learned about Object Builder at the recent code camp... it's kind of fresh in mind, however Unity builds on top of Object Builder, and it has a seamless configuration option which allows a nice clean and easy to read mapping of types to Interfaces. Once the setup is complete... I can just use the container to call the abstraction methods.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sample of poor mans dependency injection&lt;br /&gt;-----------------------------------------------------&lt;br /&gt;&lt;br /&gt;public class Presenter&lt;br /&gt;{&lt;br /&gt;  IService m_service;&lt;br /&gt;  Presenter()this()  //Constructor Chaining&lt;br /&gt;  {&lt;br /&gt;     //Default Implementation&lt;br /&gt;  }&lt;br /&gt;  Presenter()&lt;br /&gt;  {&lt;br /&gt;          m_service = new Service(); //Constructor Injection&lt;br /&gt;  } &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;VS.  Unity Sample Below&lt;br /&gt;------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;IUnityContainer&lt;/span&gt; container = &lt;span style="color: rgb(255, 128, 0);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;UnityContainer();&lt;/span&gt;  &lt;p style="margin: 0px;"&gt;            container&lt;/p&gt;  &lt;p style="margin: 0px;"&gt;                .Register&lt;&lt;span style="color: rgb(43, 145, 175);"&gt;IService&lt;/span&gt;, &lt;span style="color: rgb(51, 102, 255);"&gt;Service&gt;();&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;IService &lt;/span&gt;service = container.Get&lt;&lt;span style="color: rgb(51, 102, 255);"&gt;IService&lt;/span&gt;&gt;();&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;Unity is a much cleaner approach... unfortunately, not many people would be able to maintain my code if I were to go on vacation with out some major documentation... so I need to do the best I can with making this approach understandable to other developers on the team.&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;Until Next Time.....&lt;/p&gt;&lt;br /&gt;&lt;p style="margin: 0px;"&gt;&lt;br /&gt;&lt;/p&gt;-Develop with Passion&lt;br /&gt;Jean Paul S. Boodhoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-1675653621542283603?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/1675653621542283603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/which-ioc-should-i-use.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1675653621542283603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1675653621542283603'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/which-ioc-should-i-use.html' title='Which (IoC) Should I Use?'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-2365740589620553128</id><published>2008-03-03T18:50:00.000-08:00</published><updated>2008-03-03T19:32:44.114-08:00</updated><title type='text'>The House That .NET Built (Part 3)</title><content type='html'>Wow!  Framing is just about complete... and we can finally get a sense of the floor plan we picked out. As usual here are a some pictures and video at the bottom. My wife took the video this time, but she kept covering up the speaker on the camera, so that's the explanation for that.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R8y5ek9lWeI/AAAAAAAAAHk/UnMJtMscRTk/s1600-h/3.1.lot%282%29+047+-+Copy.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R8y5ek9lWeI/AAAAAAAAAHk/UnMJtMscRTk/s400/3.1.lot%282%29+047+-+Copy.JPG" alt="" id="BLOGGER_PHOTO_ID_5173714006911048162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R8y5rk9lWfI/AAAAAAAAAHs/enEXWleWdP4/s1600-h/3.1.lot%282%29+051.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R8y5rk9lWfI/AAAAAAAAAHs/enEXWleWdP4/s400/3.1.lot%282%29+051.JPG" alt="" id="BLOGGER_PHOTO_ID_5173714230249347570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R8y59k9lWgI/AAAAAAAAAH0/aPudqIEfarw/s1600-h/Back+3.2.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R8y59k9lWgI/AAAAAAAAAH0/aPudqIEfarw/s400/Back+3.2.JPG" alt="" id="BLOGGER_PHOTO_ID_5173714539486992898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R8y6MU9lWhI/AAAAAAAAAH8/qEHuf5AgkZc/s1600-h/dining+nook+3.2.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/R8y6MU9lWhI/AAAAAAAAAH8/qEHuf5AgkZc/s400/dining+nook+3.2.JPG" alt="" id="BLOGGER_PHOTO_ID_5173714792890063378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/R8y6hE9lWiI/AAAAAAAAAIE/Mc3DCu3TndU/s1600-h/media+3.2.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/R8y6hE9lWiI/AAAAAAAAAIE/Mc3DCu3TndU/s400/media+3.2.JPG" alt="" id="BLOGGER_PHOTO_ID_5173715149372348962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/R8y6r09lWjI/AAAAAAAAAIM/5o96NHmLRiI/s1600-h/office+3.2.JPG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/R8y6r09lWjI/AAAAAAAAAIM/5o96NHmLRiI/s400/office+3.2.JPG" alt="" id="BLOGGER_PHOTO_ID_5173715334055942706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R8y69k9lWkI/AAAAAAAAAIU/2q9DiDhomzE/s1600-h/garage+3.2.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R8y69k9lWkI/AAAAAAAAAIU/2q9DiDhomzE/s400/garage+3.2.JPG" alt="" id="BLOGGER_PHOTO_ID_5173715638998620738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R8y7QU9lWlI/AAAAAAAAAIc/GvWOdfVEQEI/s1600-h/up+stairs+3.2.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/R8y7QU9lWlI/AAAAAAAAAIc/GvWOdfVEQEI/s400/up+stairs+3.2.JPG" alt="" id="BLOGGER_PHOTO_ID_5173715961121167954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-52ddb0e7f127ebf1" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v12.nonxt5.googlevideo.com/videoplayback?id%3D52ddb0e7f127ebf1%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D33F9E3EA2E09C6CE5329EBA396AA41A6E458237D.5959A1BF398DE07C26C30B51A82FF932442D6803%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D52ddb0e7f127ebf1%26offsetms%3D5000%26itag%3Dw160%26sigh%3D3yuWrgYRjFL5Opr9dX8otxY7y5I&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v12.nonxt5.googlevideo.com/videoplayback?id%3D52ddb0e7f127ebf1%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D33F9E3EA2E09C6CE5329EBA396AA41A6E458237D.5959A1BF398DE07C26C30B51A82FF932442D6803%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D52ddb0e7f127ebf1%26offsetms%3D5000%26itag%3Dw160%26sigh%3D3yuWrgYRjFL5Opr9dX8otxY7y5I&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-2365740589620553128?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=52ddb0e7f127ebf1&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/2365740589620553128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/house-that-net-built-part-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2365740589620553128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2365740589620553128'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/03/house-that-net-built-part-3.html' title='The House That .NET Built (Part 3)'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TrCLe1DA8mM/R8y5ek9lWeI/AAAAAAAAAHk/UnMJtMscRTk/s72-c/3.1.lot%282%29+047+-+Copy.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3406310780768569828</id><published>2008-02-24T15:43:00.000-08:00</published><updated>2008-02-27T10:17:18.283-08:00</updated><title type='text'>The House That .NET Built (Part 2)</title><content type='html'>We've started the framing stage!!!! The first floor is getting framed and they're preparing for the second floor. Here are a few pictures of the process as it stands right now. I've also thrown in a few videos at the bottom of the post. :-)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R8ICPdtHoFI/AAAAAAAAAG4/dJzb-45Mynk/s1600-h/DSC01511.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5170697786869915730" style="CURSOR: pointer" alt="" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/R8ICPdtHoFI/AAAAAAAAAG4/dJzb-45Mynk/s400/DSC01511.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R8ICettHoGI/AAAAAAAAAHA/k4uxSuUaDvQ/s1600-h/DSC01516.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5170698048862920802" style="CURSOR: pointer" alt="" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R8ICettHoGI/AAAAAAAAAHA/k4uxSuUaDvQ/s400/DSC01516.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/R8ICzNtHoHI/AAAAAAAAAHI/38-HjOJBZ3E/s1600-h/DSC01527.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5170698401050239090" style="CURSOR: pointer" alt="" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/R8ICzNtHoHI/AAAAAAAAAHI/38-HjOJBZ3E/s400/DSC01527.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R8IDBdtHoII/AAAAAAAAAHQ/cG-g_0vvnF8/s1600-h/DSC01530.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5170698645863374978" style="CURSOR: pointer" alt="" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/R8IDBdtHoII/AAAAAAAAAHQ/cG-g_0vvnF8/s400/DSC01530.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/R8IDN9tHoJI/AAAAAAAAAHY/KvwM9cxKqZ8/s1600-h/DSC01532.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5170698860611739794" style="CURSOR: pointer" alt="" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/R8IDN9tHoJI/AAAAAAAAAHY/KvwM9cxKqZ8/s400/DSC01532.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-8f38db31a44f6af5" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v16.nonxt4.googlevideo.com/videoplayback?id%3D8f38db31a44f6af5%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3AFCAE385E0BC7F7D19C2C2671F4F5D0AA5F3879.431C7826BFDA4BC165F15647A9E7ADB2B48D5870%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D8f38db31a44f6af5%26offsetms%3D5000%26itag%3Dw160%26sigh%3DWg1qWXQt85ZCSdJ89MOy1gySvB4&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v16.nonxt4.googlevideo.com/videoplayback?id%3D8f38db31a44f6af5%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3AFCAE385E0BC7F7D19C2C2671F4F5D0AA5F3879.431C7826BFDA4BC165F15647A9E7ADB2B48D5870%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D8f38db31a44f6af5%26offsetms%3D5000%26itag%3Dw160%26sigh%3DWg1qWXQt85ZCSdJ89MOy1gySvB4&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-cba1086a6383d63" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v9.nonxt1.googlevideo.com/videoplayback?id%3D0cba1086a6383d63%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D212AA3F69240D004CC120DEEE89B755AF3576E34.53D97A2EBACDD8AC807715D278691FB135E520B6%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dcba1086a6383d63%26offsetms%3D5000%26itag%3Dw160%26sigh%3DqD2lzAiRHzGqz0sFCj3dDjnX9yQ&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v9.nonxt1.googlevideo.com/videoplayback?id%3D0cba1086a6383d63%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D212AA3F69240D004CC120DEEE89B755AF3576E34.53D97A2EBACDD8AC807715D278691FB135E520B6%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dcba1086a6383d63%26offsetms%3D5000%26itag%3Dw160%26sigh%3DqD2lzAiRHzGqz0sFCj3dDjnX9yQ&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-6959c48a547d4d7" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v9.nonxt3.googlevideo.com/videoplayback?id%3D06959c48a547d4d7%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3EB0FA6FFCA604F5F1AFF99F4078E1E5D58EB4D2.23DEFEFEF6EF9CA12449B7641E97B8C92DBB9CCD%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D6959c48a547d4d7%26offsetms%3D5000%26itag%3Dw160%26sigh%3DZfvm2zkj1SID_43yQUb40qv72iU&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v9.nonxt3.googlevideo.com/videoplayback?id%3D06959c48a547d4d7%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3EB0FA6FFCA604F5F1AFF99F4078E1E5D58EB4D2.23DEFEFEF6EF9CA12449B7641E97B8C92DBB9CCD%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D6959c48a547d4d7%26offsetms%3D5000%26itag%3Dw160%26sigh%3DZfvm2zkj1SID_43yQUb40qv72iU&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3406310780768569828?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=6959c48a547d4d7&amp;type=video%2Fmp4' length='0'/><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=8f38db31a44f6af5&amp;type=video%2Fmp4' length='0'/><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=cba1086a6383d63&amp;type=video%2Fmp4' length='0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3406310780768569828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3406310780768569828'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/house-that-net-built-part-2.html' title='The House That .NET Built (Part 2)'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TrCLe1DA8mM/R8ICPdtHoFI/AAAAAAAAAG4/dJzb-45Mynk/s72-c/DSC01511.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-6895249244583251702</id><published>2008-02-19T22:04:00.000-08:00</published><updated>2008-02-21T15:08:02.738-08:00</updated><title type='text'>Talking directly to Hardware with .NET Micro Framework</title><content type='html'>Awesome!!!! Awesome!!!! Awesome!!! Why oh why am I just now finding out about this.&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;It's been available since November 2006, this is the ultimate technology that will allow me to actually enter the embedded devices and automation industry of Computer Software. My dream is finally coming true. One day I will have a gig in Home Automation for sure. :-)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Ok, so the Micro.NET Framework is very similar to the .NET Compact Framework, but has a much smaller foot print and is deployable to a much wider scope of devices. The platform is esentially an environment that extends the advantages of Microsoft .NET and the toolset in the Microsoft Visual Studio development system into a class of smaller, less expensive, and more resource-constrained devices than have been possible with previous Microsoft embedded offerings. Several Microsoft products use the .NET Micro Framework already, including MSN Direct watches, Microsoft TV Foundation Edition, and Windows Vista SideShow. I just finished watching &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=en-US&amp;amp;EventID=1032343089&amp;amp;CountryCode=US"&gt;this&lt;/a&gt; webcast and bought &lt;a href="http://www.amazon.com/Embedded-Programming-Microsoft-Micro-Framework/dp/0735623651/ref=sr_11_1/104-5509811-3112749?ie=UTF8&amp;amp;qid=1177055927&amp;amp;sr=11-1"&gt;this&lt;/a&gt; book from amazon which ships from WA, so I should be up and running and writing a sample application on an emulator this weekend.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The stack is shown below... &lt;/div&gt;&lt;div&gt;&lt;br /&gt;PAL = Platform Abstraction Layer&lt;br /&gt;HAL = Hardware Abstraction Layer&lt;br /&gt;The OS part is there just in case I want to deploy Micro Framework to a device which has an OS.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_TrCLe1DA8mM/R7vG4ttHoBI/AAAAAAAAAGY/Dp0dRXH31Dk/s1600-h/micro_framework_archtiecture_stack.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5168943674981589010" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/R7vG4ttHoBI/AAAAAAAAAGY/Dp0dRXH31Dk/s400/micro_framework_archtiecture_stack.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some of the things that have been done already...&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_TrCLe1DA8mM/R7vIw9tHoCI/AAAAAAAAAGg/UOWJQFrZKpk/s1600-h/display_device.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5168945740860858402" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/R7vIw9tHoCI/AAAAAAAAAGg/UOWJQFrZKpk/s400/display_device.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_TrCLe1DA8mM/R7vJKttHoDI/AAAAAAAAAGo/CEahIidOOM8/s1600-h/network_device.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5168946183242489906" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/R7vJKttHoDI/AAAAAAAAAGo/CEahIidOOM8/s400/network_device.png" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I'm especially interested in network connections and using the TCP/IP stack so that I can talk to &lt;/div&gt;&lt;div&gt;other devices with in my network via a special device loaded application. In essence... I build the app, test it on the emulator, flash the hardware with the application deployed, and up boots the hardware and then my app is loaded. No OS overhead or any of that. :-)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Below is the book that I bought which I've linked to above.&lt;br /&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R7vKYdtHoEI/AAAAAAAAAGw/yI6ZQtmTDao/s1600-h/book.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5168947518977318978" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R7vKYdtHoEI/AAAAAAAAAGw/yI6ZQtmTDao/s400/book.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Here are some cool inspirational *.wmv videos&lt;/div&gt;&lt;div&gt;&lt;a href="http://msdn.microsoft.com/embedded/media/tutorials/netmf20.wmv"&gt;video1&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://msdn.microsoft.com/embedded/media/tutorials/netmf.wmv"&gt;video2&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-6895249244583251702?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/6895249244583251702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/talking-directly-to-hardware-with-net.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6895249244583251702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6895249244583251702'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/talking-directly-to-hardware-with-net.html' title='Talking directly to Hardware with .NET Micro Framework'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TrCLe1DA8mM/R7vG4ttHoBI/AAAAAAAAAGY/Dp0dRXH31Dk/s72-c/micro_framework_archtiecture_stack.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-7748507094570865531</id><published>2008-02-19T21:46:00.000-08:00</published><updated>2008-02-19T21:59:23.939-08:00</updated><title type='text'>My Next Cell Phone (Sony Ericsson XPERIA X1)</title><content type='html'>Say hello to my next cell phone... it's not out yet, but when it does I'm heading to the first cingular store to get it. I'm already on the waiting list.  : )&lt;br /&gt;&lt;br /&gt;Gotta love these specs.&lt;br /&gt;--------------------------------------------&lt;br /&gt;&lt;br /&gt;Size              -110 x 17 x 53 mm&lt;br /&gt;                    -4.3 x 0.7 x 2.1 inches&lt;br /&gt;--------------------------------------------&lt;br /&gt;Weight       - 45 gr &lt;br /&gt;                    - 5.1 oz&lt;br /&gt;--------------------------------------------&lt;br /&gt;Available colors   &lt;a class="current" id="itemLink1" style="CURSOR: pointer; POSITION: relative" onclick="swapSpecificationImage('/cws/file/1.348991.1202655946/X1_frontandside_black.png', 'itemLink1'); this.blur();" href="javascript:void(null);"&gt;Solid Black&lt;/a&gt;&lt;br /&gt;--------------------------------------------&lt;br /&gt;Screen       - 800 X 480&lt;br /&gt;                   - 65,536 color TFT&lt;br /&gt;--------------------------------------------&lt;br /&gt;Memory    - Up to 400 MB Phone Memory&lt;br /&gt;                   - MicroSD support Actual free memory may vary due to phone pre-configuration&lt;br /&gt;--------------------------------------------&lt;br /&gt;Networks   - GSM 850&lt;br /&gt;                    - GSM 900&lt;br /&gt;                    - GSM 1800&lt;br /&gt;                    - GSM 1900&lt;br /&gt;                    - EDGE&lt;br /&gt;                    - HSDPA&lt;br /&gt;                    - HSUPA&lt;br /&gt;                    - UMTS 850&lt;br /&gt;                    - UMTS 900&lt;br /&gt;                    - UMTS 1700&lt;br /&gt;                    - UMTS 1900&lt;br /&gt;                    - UMTS 2100&lt;br /&gt;--------------------------------------------&lt;br /&gt;Battery performance may vary depending on network and phone usage.&lt;br /&gt; * To be announced.&lt;br /&gt;&lt;br /&gt;more info &lt;a href="http://www.sonyericsson.com/cws/products/mobilephones/overview/x1?cc=us&amp;amp;lc=en"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_TrCLe1DA8mM/R7u_dttHn_I/AAAAAAAAAGI/N0t-L1rGklw/s1600-h/phone+4.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5168935514543726578" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/R7u_dttHn_I/AAAAAAAAAGI/N0t-L1rGklw/s400/phone+4.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_TrCLe1DA8mM/R7u_W9tHn-I/AAAAAAAAAGA/GHROVPrFAvs/s1600-h/phone+3.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5168935398579609570" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/R7u_W9tHn-I/AAAAAAAAAGA/GHROVPrFAvs/s400/phone+3.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R7u_QNtHn9I/AAAAAAAAAF4/0v3LvdJ4y74/s1600-h/phone+2.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5168935282615492562" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/R7u_QNtHn9I/AAAAAAAAAF4/0v3LvdJ4y74/s400/phone+2.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_TrCLe1DA8mM/R7u_F9tHn8I/AAAAAAAAAFw/KlLsdOKTFec/s1600-h/phone+1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5168935106521833410" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/R7u_F9tHn8I/AAAAAAAAAFw/KlLsdOKTFec/s400/phone+1.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-7748507094570865531?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/7748507094570865531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/my-next-cell-phone-sony-ericsson-xperia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7748507094570865531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7748507094570865531'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/my-next-cell-phone-sony-ericsson-xperia.html' title='My Next Cell Phone (Sony Ericsson XPERIA X1)'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TrCLe1DA8mM/R7u_dttHn_I/AAAAAAAAAGI/N0t-L1rGklw/s72-c/phone+4.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3855305583621435915</id><published>2008-02-16T12:41:00.000-08:00</published><updated>2008-02-16T12:49:34.953-08:00</updated><title type='text'>"Works on my machine"?!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R7dKzNtHn3I/AAAAAAAAAFM/pjCWvwJMVH0/s1600-h/BuildsOnMyMachine_small.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/R7dKzNtHn3I/AAAAAAAAAFM/pjCWvwJMVH0/s400/BuildsOnMyMachine_small.jpg" alt="" id="BLOGGER_PHOTO_ID_5167681341143621490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Meet Phyllis, she is certainly some one who does not like it when the builds don't work on her machine.  I can sympathize with this... when someone says "works on my machine" all that means is "everything the source code depends on... resides on that persons machine".&lt;br /&gt;&lt;br /&gt;As I get deeper in to the practice of continuous integration... not breaking the build would be the first practice to employ followed by making sure anyone who needs anything can do a fresh checkout and have everything they need.&lt;br /&gt;&lt;br /&gt;-Develop with Passion&lt;br /&gt;Jean-Paul S. Boodhoo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3855305583621435915?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/3855305583621435915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/works-on-my-machine.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3855305583621435915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3855305583621435915'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/works-on-my-machine.html' title='&quot;Works on my machine&quot;?!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TrCLe1DA8mM/R7dKzNtHn3I/AAAAAAAAAFM/pjCWvwJMVH0/s72-c/BuildsOnMyMachine_small.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-4680095796151689608</id><published>2008-02-12T20:12:00.000-08:00</published><updated>2008-02-12T20:17:16.145-08:00</updated><title type='text'>I'm So There!!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/R7Jui9tHn2I/AAAAAAAAAFE/PhXnEvROQc0/s1600-h/altnet_thumb.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/R7Jui9tHn2I/AAAAAAAAAFE/PhXnEvROQc0/s400/altnet_thumb.png" alt="" id="BLOGGER_PHOTO_ID_5166313269505793890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Seats are going fast... so far everyone's signed up. &lt;br /&gt;Just to name a few....&lt;br /&gt;&lt;br /&gt;1) Scott Hanselman&lt;br /&gt;2) Jean Paul Boodhoo&lt;br /&gt;3) Chris Sells&lt;br /&gt;4) Roy Osherove&lt;br /&gt;&lt;br /&gt;Glad I got my seat... This ought'd be good!!! ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-4680095796151689608?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/4680095796151689608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/im-so-there.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4680095796151689608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4680095796151689608'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/im-so-there.html' title='I&apos;m So There!!!!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TrCLe1DA8mM/R7Jui9tHn2I/AAAAAAAAAFE/PhXnEvROQc0/s72-c/altnet_thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-2250863176431245252</id><published>2008-02-10T11:20:00.000-08:00</published><updated>2008-02-10T11:26:12.578-08:00</updated><title type='text'>More on XP &amp; Agile Approaches</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R69PjNtHn1I/AAAAAAAAAE8/or8uJXiY2tI/s1600-h/infoq.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/R69PjNtHn1I/AAAAAAAAAE8/or8uJXiY2tI/s400/infoq.png" alt="" id="BLOGGER_PHOTO_ID_5165434764010168146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I saw this &lt;a href="http://www.infoq.com/interviews/jeffries-running-tested-features"&gt;video&lt;/a&gt;, and it completely blew my mind. This is exactly what needs to happen at work, and what I need to strive to in my own efforts.&lt;br /&gt;&lt;br /&gt;Enjoy!! ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-2250863176431245252?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/2250863176431245252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/more-on-xp-agile-approaches.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2250863176431245252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2250863176431245252'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/more-on-xp-agile-approaches.html' title='More on XP &amp; Agile Approaches'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TrCLe1DA8mM/R69PjNtHn1I/AAAAAAAAAE8/or8uJXiY2tI/s72-c/infoq.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-814218709197447146</id><published>2008-02-09T18:20:00.000-08:00</published><updated>2008-02-09T20:47:54.301-08:00</updated><title type='text'>Xtreme Programming Saturdays</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/R65h4NtHnyI/AAAAAAAAAEk/ZI94QHjZeb0/s1600-h/extreme+programming.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/R65h4NtHnyI/AAAAAAAAAEk/ZI94QHjZeb0/s400/extreme+programming.jpg" alt="" id="BLOGGER_PHOTO_ID_5165173441020010274" border="0" /&gt;&lt;/a&gt;For the last week or so I've been reading Pro .NET 2.0 Extreme Programming ,and I have to say it's been really difficult for me to put it down.&lt;br /&gt;I didn't go to work last Friday because I have a cold... I didn't want to spread it around so I stayed home. On Friday I  spent quite a bit of time writing acceptance test for DirectorsMate, what's nice about acceptance test is that I don't have to worry about unit testing every little thing.  I mean It's hard enough trying to come up with positive and negative tests.  This way I can verify that the object under test will do what I expect in a timely manner. Now I realize that I should be writing lots of unit tests to cover as much as I can, but I'm not feeling well right now. Most likely I will go back and fill in the gaps when I'm feeling better.  So getting back to the title of the post... I woke up this morning and realized that I need to get my code out of Visual Source Safe 2005. So I went and downloaded the latest subversion, TortoiseSVN, and CCNET .&lt;br /&gt;I got subversion and TortoiseSVN installed and then pulled my source code out of VSS, removed the bindings, and then created a repository NTFS for the source code and then did my inital import.  Ahhh... All is right with the world... I then did some tweaks on the build file and began to build my CCNET build file.  After it was done I could initate a force build to test CCNET and then change the code to test the build that way. Once I finished it all I was really tired but I went over and downloaded the free visual studio add-in for SVN support over at &lt;a href="http://ankhsvn.tigris.org/servlets/ProjectDocumentList?folderID=7315"&gt;Tigris.org&lt;/a&gt;.&lt;br /&gt;This add-in is awesome!!! Alright, I know I've been saying that I'm going to get some videos up here, but I've tried and they just don't come out as good as I'd hoped. So I'm going to try again this time with ZoomIt!!!  Stay tuned...  : )&lt;br /&gt;&lt;br /&gt;Also, some videos that really inspired me to learn more about &amp;amp; practice Xtreme Programming can be found below.  Event though these are Java guys they still inspire me to strive to achieve this type of development in my own software company.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/profile_videos?user=qualinnove"&gt;Xtreme Programming Videos&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="file:///C:/DOCUME%7E1/Cameron/LOCALS%7E1/Temp/moz-screenshot-3.jpg" alt="" /&gt;&lt;img src="file:///C:/DOCUME%7E1/Cameron/LOCALS%7E1/Temp/moz-screenshot-4.jpg" alt="" /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-814218709197447146?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/814218709197447146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/xtreme-programming-saturdays.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/814218709197447146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/814218709197447146'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/xtreme-programming-saturdays.html' title='Xtreme Programming Saturdays'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/R65h4NtHnyI/AAAAAAAAAEk/ZI94QHjZeb0/s72-c/extreme+programming.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-2101104971067597621</id><published>2008-02-07T19:33:00.000-08:00</published><updated>2008-02-07T19:39:55.285-08:00</updated><title type='text'>code.msdn.microsoft.com</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R6vN-toyerI/AAAAAAAAAEc/D2RMSOeQhxQ/s1600-h/code_msdn.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R6vN-toyerI/AAAAAAAAAEc/D2RMSOeQhxQ/s400/code_msdn.jpg" alt="" id="BLOGGER_PHOTO_ID_5164447874996665010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It's finally out... a new code gallery on MSDN.  I highly suggest getting the C# Sample first. ; )&lt;br /&gt;&lt;a href="http://code.msdn.microsoft.com/"&gt;code gallery&lt;/a&gt; (MSDN Code Gallery)&lt;br /&gt;&lt;a href="http://code.msdn.microsoft.com/csharpsamples"&gt;c# samples&lt;/a&gt; (C# VS2008  samples and more...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-2101104971067597621?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/2101104971067597621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/codemsdnmicrosoftcom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2101104971067597621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2101104971067597621'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/codemsdnmicrosoftcom.html' title='code.msdn.microsoft.com'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TrCLe1DA8mM/R6vN-toyerI/AAAAAAAAAEc/D2RMSOeQhxQ/s72-c/code_msdn.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-6296787527169981927</id><published>2008-02-02T22:15:00.000-08:00</published><updated>2008-02-06T09:41:01.556-08:00</updated><title type='text'>The House That .NET Built</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R6VdBNoyenI/AAAAAAAAAD8/lyAcZEaSFPo/s1600-h/2.2.sold+016.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5162634823272135282" style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R6VdBNoyenI/AAAAAAAAAD8/lyAcZEaSFPo/s400/2.2.sold%2B016.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R6VdXNoyeoI/AAAAAAAAAEE/3znLxeCZ8CU/s1600-h/2.2.sold+005.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5162635201229257346" style="WIDTH: 154px; CURSOR: pointer; HEIGHT: 125px" alt="" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R6VdXNoyeoI/AAAAAAAAAEE/3znLxeCZ8CU/s400/2.2.sold%2B005.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold;font-size:180%;" &gt;LOT # 17&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well it's been a long time coming and I have to say I'm very happy to be here. My lot has been released. Meaning all the paperwork, bank docs, and permits have been received and accepted! My first Meeting with my Site superintendent is on the 14th- a great day! I'm told they will have the cement foundation poured and they will be ready to start building!! After that I'm looking at 3 months (54 build days) till we finally close! So April 30th!!!&lt;br /&gt;Also, there is a short video of the empty lot with the family. Don't mind my extra breathing in the video... it was a really cold ground hogs day. It's a cool feeling being able to build my first home. Which means... I'll be able to keep close watch on the build process, take pictures, and because I'm a geek... provide Google &lt;a href="http://sketchup.google.com/"&gt;SketchUp&lt;/a&gt; drawings and images as well. ; )&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/R6Vd0toyepI/AAAAAAAAAEM/7FK-aEgtY3c/s1600-h/2.2.sold+010.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5162635708035398290" style="CURSOR: pointer" alt="" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/R6Vd0toyepI/AAAAAAAAAEM/7FK-aEgtY3c/s400/2.2.sold%2B010.JPG" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R6Vd_9oyeqI/AAAAAAAAAEU/3jVzyhNRWw0/s1600-h/2.2.sold+008.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5162635901308926626" style="CURSOR: pointer" alt="" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/R6Vd_9oyeqI/AAAAAAAAAEU/3jVzyhNRWw0/s400/2.2.sold%2B008.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-8b64b7607f086621" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v15.nonxt5.googlevideo.com/videoplayback?id%3D8b64b7607f086621%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D2DEABF2BE718B3508417FDA567CC595F50D9D460.B1898043F32F6692CB23B93DCB8109D74C0008F%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D8b64b7607f086621%26offsetms%3D5000%26itag%3Dw160%26sigh%3DzE1xZtf_KkWDDDNXIa0yQ2PqLh0&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v15.nonxt5.googlevideo.com/videoplayback?id%3D8b64b7607f086621%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329961624%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D2DEABF2BE718B3508417FDA567CC595F50D9D460.B1898043F32F6692CB23B93DCB8109D74C0008F%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D8b64b7607f086621%26offsetms%3D5000%26itag%3Dw160%26sigh%3DzE1xZtf_KkWDDDNXIa0yQ2PqLh0&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-6296787527169981927?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=8b64b7607f086621&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/6296787527169981927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/house-that-net-built.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6296787527169981927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6296787527169981927'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/02/house-that-net-built.html' title='The House That .NET Built'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TrCLe1DA8mM/R6VdBNoyenI/AAAAAAAAAD8/lyAcZEaSFPo/s72-c/2.2.sold%2B016.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-6390451151172185708</id><published>2008-01-27T13:32:00.001-08:00</published><updated>2008-01-27T14:36:15.711-08:00</updated><title type='text'>Code Camp Debrief</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R5z7QNoyelI/AAAAAAAAADs/eW-PntZy14o/s1600-h/codecamp_1.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/R5z7QNoyelI/AAAAAAAAADs/eW-PntZy14o/s400/codecamp_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5160275529016965714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;My first ever code camp!! It was so worth my time... I learned about all sorts of cool stuff. The talks I attended are above(morning) and below(afternoon).&lt;br /&gt;&lt;br /&gt;Taking a top/down approach I'll start with the &lt;span style="font-weight: bold;"&gt;Castle Project&lt;/span&gt;, this was way cooler than I initially realized discovering it on my own, the presenter point out key components that were being used... I felt so grateful having been there to hear it and to have a more deep understanding of how to implement them in my own applications. He also ran over by thirty five minutes talking about Rhino Mocks which was also really good, because I got an opportunity to see what I'm doing correctly and also what I need to change about the way I do Mocking in my tests. Next was &lt;span style="font-weight: bold;"&gt;Dependency Injection with ObjectBuilder 2.0.. &lt;/span&gt;this was by far the most amazing talk. Not only did &lt;a href="http://bradwilson.typepad.com/"&gt;Brad&lt;/a&gt; open my eyes to Inversion Control Containers (what they are, and how there used) but the implementation in ObjectBuilder2.0 is awesome... &lt;a href="http://www.tavaresstudios.com/Blog/default.aspx"&gt;Chris&lt;/a&gt; also gave a talk on &lt;a href="http://blogs.msdn.com/agile/archive/2008/01/14/diab-is-now-unity.aspx"&gt;Unity&lt;/a&gt; which is another Inversion Control Container product which uses ObjectBuilder 2.0 underneath. The ICC(Inversion Control Container) stems or derives from service locator pattern&lt;br /&gt;again the great  Martin Fowler has great &lt;a href="http://www.martinfowler.com/articles/injection.html"&gt;documentation&lt;/a&gt; on. I've known of DI before the code camp... I just didn't know what problem it aimed to solve and more importantly... how it would be useful to me in my development efforts.  WAMU will definitely be seeing DI in it's code base very soon. ;)&lt;br /&gt;&lt;br /&gt;Soon after that Papa johns arrived and I ate pizza, drank pop, and chatted with Brad, Chris, and company a little more about service locator and DI. Great bunch of guys and brilliant... I had to really think about what I was going to say before I actually said it, but in the end I learned a ton, even found out that ObjectBuilder 1.0 is used underneath eventbroker and other services in CAB Enterprise library stuff... also, System.ComponetModel underneath uses DI to wire up custom componet classes that we as developers write.  This began to make so much more sense. :) Happy Day... I actually understand DI and ICC Pattern.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/R5z7ntoyemI/AAAAAAAAAD0/RndRKo_VPLk/s1600-h/codecamp_2.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/R5z7ntoyemI/AAAAAAAAAD0/RndRKo_VPLk/s400/codecamp_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5160275932743891554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After lunch I walked over to the F# talk, this was way out of my realm and I knew it would be... functional programming is something I've never formally studied, except for the LISP, and TCL courses online that I've watched... other than that it was new and exciting.  I got a chance to discover functional programming on .NET level and was able to see what IL is actually generated from the F# so that was really cool as well. After that I went over to Windows Application Enhancements in VS2008. Even though I work on cutting edge stuff at home and on the weekends, that doesn't mean it's at work as well... so I went to this talk to see what's new since I'm probably 6 months to a year away from getting VS2008 at work.  Finally, I finished up with Rethinking Unit Testing in XUnit. This was also a good talk... not just because Brad gave it, but because it gave me a new perspective on Testing in general. I've been trying so hard to do TDD for the last year and half and I always give up half way through, usually it's because I don't know where to stop with testing the components in the system under test. This leads me back to the white board and I usually end up saying to myself what I want the application to accomplish... more of a BDD style approach and this works great because I can iron out wrinkles that show up right away and then take care of the few edge cases, and then I'm done with the feature. The XUnit talk helped verify that this was ok to do.&lt;br /&gt;I also found great comfort in this &lt;a href="http://video.google.ca/videoplay?docid=8135690990081075324"&gt;ruby&lt;/a&gt; talk as well.  Overall code camp was great!  I can't wait until ALT.NET this spring. I would definitely advise all developers to attend code camps or other inexpensive events to collaborate with the experts and get a since of the code we all should be writing... as &lt;a href="http://www.computerzen.com/"&gt;Scott &lt;/a&gt;says we need to venture out of the echo chamber to discover what's new and to see how we as developers are progressing in our craft.&lt;br /&gt;&lt;br /&gt;-Develop with Passion&lt;br /&gt;(Jean-Paul S. Boodhoo)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-6390451151172185708?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/6390451151172185708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/01/code-camp-debrief.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6390451151172185708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6390451151172185708'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/01/code-camp-debrief.html' title='Code Camp Debrief'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TrCLe1DA8mM/R5z7QNoyelI/AAAAAAAAADs/eW-PntZy14o/s72-c/codecamp_1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3752069993514956017</id><published>2008-01-24T21:34:00.000-08:00</published><updated>2008-01-24T21:43:21.262-08:00</updated><title type='text'>ALT.NET Is Coming To Seattle!!!!</title><content type='html'>&lt;div id="header"&gt;   &lt;h1&gt;ALT.NET Open Spaces, Seattle&lt;/h1&gt;   &lt;h3&gt;Friday, April 18 to Sunday, April 20, 2008&lt;/h3&gt;  &lt;/div&gt;I'm so excited about this one... I really wished I could've been in Austin,TX last year to see &lt;a href="http://www.computerzen.com/"&gt;Scott Hanselman's&lt;/a&gt; talk as well as &lt;a href="http://weblogs.asp.net/scottgu/"&gt;Scott Guthrie&lt;/a&gt; on Dynamic Languages and ASP.NET/MVC to name a few.  However, to my surprise via &lt;a href="http://www.codebetter.com/"&gt;code better&lt;/a&gt; I found out about this one coming in April 08. Check out the details &lt;a href="http://altdotnet.org/events/seattle/"&gt;here.&lt;/a&gt; I guess the first 150 people are free so I'm checking every day to get to go to this one for free.  ; )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3752069993514956017?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/3752069993514956017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/01/altnet-is-coming-to-seattle.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3752069993514956017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3752069993514956017'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/01/altnet-is-coming-to-seattle.html' title='ALT.NET Is Coming To Seattle!!!!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3345349593257233370</id><published>2008-01-20T10:32:00.000-08:00</published><updated>2008-01-20T12:11:58.863-08:00</updated><title type='text'>Subsonic project nightmare with SQL Mobile</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/R5OY4CTvj7I/AAAAAAAAADc/9VnagvXjSd4/s1600-h/subsonic.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/R5OY4CTvj7I/AAAAAAAAADc/9VnagvXjSd4/s400/subsonic.bmp" alt="" id="BLOGGER_PHOTO_ID_5157634086729125810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For those of you who've been struggling to get this great piece of technology working with mobile/lightweight databases also know that it can be quite a struggle. Now don't get me wrong... this is a great product for generating DAL ( Data Access Layers)  for normal db's with sql providers, oracle providers, and even mysql providers.  So after I watched the &lt;a href="http://www.subsonicproject.com/"&gt;SonicCasts&lt;/a&gt; and downloaded the 2.02 product from &lt;a href="http://www.codeplex.com/subsonic/Release/ProjectReleases.aspx?ReleaseId=5177"&gt;codeplex&lt;/a&gt; I immediately got to work with trying to get this thing working with sql mobile... I followed the directions exactly and still no luck, so I hit the forums and checked the latest FAQ up on the site... but there was only a blurb about how some guy got the product to work with SqlLite, so one of the contributors responded to the post by thanking the guy for making his work with sql mobile easier for the next release.  I thought to myself how can I get that guys code today to make my solution work? Then I went to check out the latest subsonic project bits from &lt;a href="http://www.subsonicproject.com/view/getting-at-the-subsonic-svn-%28subversion%29-repository.aspx"&gt;subversion&lt;/a&gt;. This turned out to be a good thing...  sqlce provider was there in the latest bits... so I re-compiled the code and ran all the tests. After all that was complete I then proceeded to generate the code, and I got an error message saying that it could not generate do to the sql mobile database not being created with .NET 3.5.&lt;br /&gt;&lt;br /&gt;I'm going to switch back to my typed datasets and simple sql queries in my original data access layer until they release another version with explicit instructions on how to implement sql mobile. The code is there so it's just a matter of time before they have a sonic cast on the subject.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3345349593257233370?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/3345349593257233370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/01/subsonic-project-nightmare-with-sql.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3345349593257233370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3345349593257233370'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/01/subsonic-project-nightmare-with-sql.html' title='Subsonic project nightmare with SQL Mobile'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TrCLe1DA8mM/R5OY4CTvj7I/AAAAAAAAADc/9VnagvXjSd4/s72-c/subsonic.bmp' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-1478758541183447974</id><published>2008-01-15T20:55:00.000-08:00</published><updated>2008-01-15T21:02:52.941-08:00</updated><title type='text'>Seattle Code Camp!!!</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_TrCLe1DA8mM/RyDkto6Nx2I/AAAAAAAAACs/jESbyS4go_Q/s1600-h/codecamp.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5125347848674461538" style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/RyDkto6Nx2I/AAAAAAAAACs/jESbyS4go_Q/s320/codecamp.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The dates are up!!!&lt;br /&gt;&lt;h2&gt;January 26-27, 2008&lt;/h2&gt;&lt;a href="https://seattle.codecamp.us/default.aspx"&gt;Seattle Code Camp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-1478758541183447974?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/1478758541183447974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2008/01/seattle-code-camp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1478758541183447974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1478758541183447974'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2008/01/seattle-code-camp.html' title='Seattle Code Camp!!!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TrCLe1DA8mM/RyDkto6Nx2I/AAAAAAAAACs/jESbyS4go_Q/s72-c/codecamp.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-9160790478369980163</id><published>2007-12-24T21:09:00.000-08:00</published><updated>2007-12-24T21:33:30.431-08:00</updated><title type='text'>Fred Meyer's To The Rescue</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/R3CVliTvj5I/AAAAAAAAADM/vkVPBaisB-o/s1600-h/DSC00727.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/R3CVliTvj5I/AAAAAAAAADM/vkVPBaisB-o/s400/DSC00727.JPG" alt="" id="BLOGGER_PHOTO_ID_5147778846181789586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In my quest to find a Nintendo Wii for Christmas turned out to not be an easy one. A week before Christmas I decided to get a Wii, after calling around and finding out all different stories about people camping outside of Best Buy, Target,  Toys-R-Us, and the like. I decided to try Fred Meyer since we were in the store shopping for grand parents... so I walked over to the electronics section and asked them if they had any Wii's.  As expected they said they did not have any, however the guy behind the counter said we get shipments in on Wednesdays and Fridays around 6am and the store opens at 7am so get in line early. My eyes glowed as the day was Sunday... I had three whole days before I could attempt at getting my own... so I went back  to work on Monday and mid-afternoon a co-worker of mine said he just picked up a Wii at E-B Games about 10min ago and even had the Wii in his hands to prove it.  Since E-B Games is 5 blocks away I decided to lock my machine and run... After I got to the store I was next in line and asked the worker behind the counter for a Wii... he said to me... "Sorry Sir this is the last one". So I said with a smirk... "Thank you"... and turned around and went back to the office.  Wednesday soon came and I made sure I was going to be at the head of the line, so I arrived at 5:30am and was 2nd in line... I waited until 7am. When 7am came a Fred Meyer employee showed up to open the doors and said to all 20 people in line that they did not  get the shipment in and are very sorry for the inconvenience.  Cold and hungry... I turned around and went straight to work, I figured I would give it one more shot and go back on Friday for one last chance before Christmas... otherwise I would wait until after Christmas.  Friday came and I arrived at 5am this time and I was first in line... then 7am rolled around and the same employee came to open the doors for a line of 30 people or more... this time he said... "Sorry folks we only received 14 Wii Consoles this morning so I can only accept the first 14 people in line". Yay!!!! :)&lt;br /&gt;I walked up to the register and paid for my Wii console... merry Christmas to me!&lt;br /&gt;&lt;br /&gt;For those looking for so called impossible gifts to find around the holidays in the future... don't forget about Fred Meyers.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/R3CVviTvj6I/AAAAAAAAADU/bobK17abz-Q/s1600-h/DSC00736.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/R3CVviTvj6I/AAAAAAAAADU/bobK17abz-Q/s400/DSC00736.JPG" alt="" id="BLOGGER_PHOTO_ID_5147779017980481442" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-9160790478369980163?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/9160790478369980163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/12/dont-forget-about-fred-meyers-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/9160790478369980163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/9160790478369980163'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/12/dont-forget-about-fred-meyers-for.html' title='Fred Meyer&apos;s To The Rescue'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/R3CVliTvj5I/AAAAAAAAADM/vkVPBaisB-o/s72-c/DSC00727.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3192805151667906573</id><published>2007-12-18T09:07:00.000-08:00</published><updated>2007-12-18T09:27:19.636-08:00</updated><title type='text'>Watch Your Memory Spaces when Implementing C++/CLI</title><content type='html'>So for the past 4-5 days I've been trying to figure out why my CLI will not run in one of my CPP files. I figured since it was just a POD(Plain Old DataType) it should behave as expected... not the case... basically the POD is being allocated in seperate memory space than the applications memory space and thus being joined up using the semantics of what's known as a SharedPtr (shared pointer) In my quest to beat or figure out the compiler I was not able to get CLI to play nice inside of a shared pointer class.  I tried every which way under the sun that I could possible think of to get it to work... IJW (/clr, /clr:pure, /clr:safe) I even tried using the old and new style gcroot&lt;typename&gt; and auto_gcroot&lt;typname&gt; wrappers around System::Runtime::InteropServices:Marshal class... still no dice. Every time I went to call a member on the managed type I got a memory corruption runtime error. I searched around and no one I could find had a solid answer so the only thing left to do was pull the logic in to the program memory space and then once the managed work was done I could then Marshal the data to the native world and pass it in the back door of the seperate memory space via a custom accessor I created and voila... it worked! I would love to show some of the code for how I did this but unfortunately it would be against company policy. However, I think the key take away here is that when you're trying to expose functionality that you've invested in years ago to a now modern managed world of applications you really need to have a sense of both worlds as  you write your managed functionality. I on the other hand am learning native as I work with it so there is always little surprises popping up as I code.  : )&lt;br /&gt;&lt;br /&gt;-Develop with Passion&lt;br /&gt;(Jean-Paul S. Boodhoo)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3192805151667906573?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/3192805151667906573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/12/watch-your-memory-spaces-when.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3192805151667906573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3192805151667906573'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/12/watch-your-memory-spaces-when.html' title='Watch Your Memory Spaces when Implementing C++/CLI'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-7124963565034088436</id><published>2007-12-17T11:23:00.000-08:00</published><updated>2007-12-17T11:37:53.065-08:00</updated><title type='text'>Moving back to Web Development in ASP.NET</title><content type='html'>So it's been a little while since I posted about the progress I've been making at WAMU.&lt;br /&gt;Things have been going really well, I moved the entire C++ code base over to 2005 which was a lot of fun... "Not".  And since the rollover I've been adding perf improvements and refactoring some sections of the code base in CLI, throughout the process I've learned more about pointers, STL, containers, memory space, loadlibrary, getprocess, etc... more than I ever wanted to know. ;)&lt;br /&gt;However I've learned what it takes to write native code and how much I appreciate managed code. The company has been going through a rough patch with having to layoff some people which have caused some of our developer contractors to leave there positions. So I'm back on the internal intranet site for now as the lead. I will most likely re-structure all the work that has been done in a way that makes more since for new people that will be coming on board next year.  The intranet site is not that complex which will make it easy for me to restructure it and incorporate a build process using Nant of course as well as adding some acceptance unit test with MBUnit. If there is time I will try to setup CCNet on a machine just for me so that I can monitor stuff that other contractors are doing. Whew! I have a lot of work ahead of me and not much time to do it in... so wish me luck as I enter back in to the world of ASP.NET/AJAX and best of all novice code. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-7124963565034088436?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/7124963565034088436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/12/moving-back-to-web-development-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7124963565034088436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7124963565034088436'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/12/moving-back-to-web-development-in.html' title='Moving back to Web Development in ASP.NET'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-6526302850477938273</id><published>2007-12-06T21:00:00.000-08:00</published><updated>2007-12-06T21:33:10.636-08:00</updated><title type='text'>New VS.NET Settings!!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/R1jTyZlk4II/AAAAAAAAADE/mBR-lMGE8Cg/s1600-h/vssettings.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/R1jTyZlk4II/AAAAAAAAADE/mBR-lMGE8Cg/s400/vssettings.JPG" alt="" id="BLOGGER_PHOTO_ID_5141091837458833538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;VS.NET 2005 Settings  provided by &lt;a href="http://www.computerzen.com/"&gt;Scott Hanselman&lt;/a&gt;...&lt;br /&gt;Download these awesome settings &lt;a href="http://anydiem.com/2007/10/23/my-visual-studio-settings/"&gt;here!&lt;/a&gt;&lt;br /&gt;-Thanks Scott&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-6526302850477938273?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/6526302850477938273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/12/new-vsnet-settings.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6526302850477938273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6526302850477938273'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/12/new-vsnet-settings.html' title='New VS.NET Settings!!!!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/R1jTyZlk4II/AAAAAAAAADE/mBR-lMGE8Cg/s72-c/vssettings.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-2303168059912764700</id><published>2007-11-19T20:44:00.000-08:00</published><updated>2007-11-19T21:05:38.564-08:00</updated><title type='text'>WPF For The Holidays</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TrCLe1DA8mM/R0Jqxg27PoI/AAAAAAAAAC8/rTmNkx9CImg/s1600-h/wpfbootcamp.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 316px; height: 239px;" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/R0Jqxg27PoI/AAAAAAAAAC8/rTmNkx9CImg/s320/wpfbootcamp.png" alt="" id="BLOGGER_PHOTO_ID_5134783924022230658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well it's almost Thanksgiving... and as I sit and think about what I was doing over the last holiday break it hits me. I was working on building a Drill Team Competition Judging Application in Windows Presentation Foundation... This time one year ago it was in beta, and I can honestly say that the technology and my knowledge on it has come a long way.  I've since finished the application above which now needs to be re factored into MVP. However, I've turned my attention to a new application also for Drill Teams... but more of a Team Management software package than anything else.  So for the last few weeks I've had a craving to work on WPF again... much like the craving I get for turkey during the turkey holiday. ; )  So I went poking around Google last night in search of new WPF videos or training to purchase and found some free videos that has already began to change the way I think about all the cool features in WPF.   For those of you looking to learn about things like Data binding, Styles, Templates, Documents, 3D, Media, etc.  Then you need to do what I'm planning on doing this holiday when I'm sitting around pretending to visit with my family.   &lt;a href="http://www.visitmix.com/university/wpf/wpfbootcamp.htm"&gt;WPF BootCamp&lt;/a&gt;, it's a series of videos that start from the basics and works it's way up to advanced topics.  And what's even better is the presenters... folks like Bea Costa (Data binding Genius), Kevin Moore, Dr. Sneath, Celso Gomes(Blend God) and more. Each video is a good length about 45min minimum so the talks are very good an in depth. I haven't seen them all but I certainly will watch each one at least 5 times each to make sure I get the material. ;)&lt;br /&gt;&lt;br /&gt;-Enjoy the Boot Camp-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-2303168059912764700?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/2303168059912764700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/11/wpf-for-holidays.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2303168059912764700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2303168059912764700'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/11/wpf-for-holidays.html' title='WPF For The Holidays'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TrCLe1DA8mM/R0Jqxg27PoI/AAAAAAAAAC8/rTmNkx9CImg/s72-c/wpfbootcamp.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-7457281900981397718</id><published>2007-11-10T10:50:00.000-08:00</published><updated>2007-12-06T21:33:54.037-08:00</updated><title type='text'>Code Camp pushed back</title><content type='html'>It kinda sucks, but the code camp got pushed back and to January and I'm honestly really bummed about it. However  I am going to be doing a few things in the mean time to fill the void.&lt;br /&gt;&lt;br /&gt;1) &lt;a href="http://www.hanselman.com/blog/November8thSeattleRedmondBellevueNerdDinner.aspx"&gt;Nerd Dinner&lt;/a&gt;&lt;br /&gt;2) &lt;a href="http://www.msdnevents.com/"&gt;"Free" in person MSDN event&lt;/a&gt;&lt;br /&gt;3) And possibly buy a few of the new tutorials at &lt;a href="http://www.innerworkings.com/"&gt;innerworkings&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-7457281900981397718?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/7457281900981397718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/11/code-camp-pushed-back.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7457281900981397718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7457281900981397718'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/11/code-camp-pushed-back.html' title='Code Camp pushed back'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-2185245175908803237</id><published>2007-10-25T10:27:00.000-07:00</published><updated>2007-10-25T12:00:24.419-07:00</updated><title type='text'>My First Ever Code Camp!!!</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_TrCLe1DA8mM/RyDkzY6Nx3I/AAAAAAAAAC0/P7jkF140XDo/s1600-h/codecampdate.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5125347947458709362" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/RyDkzY6Nx3I/AAAAAAAAAC0/P7jkF140XDo/s320/codecampdate.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/_TrCLe1DA8mM/RyDkto6Nx2I/AAAAAAAAACs/jESbyS4go_Q/s1600-h/codecamp.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5125347848674461538" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_TrCLe1DA8mM/RyDkto6Nx2I/AAAAAAAAACs/jESbyS4go_Q/s320/codecamp.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Finally a code camp in the seattle area... usually they hold these in places I can't visit like Canada, Oregon, California, etc. Now finally there will be a code camp at the old Nintendo building now Digipen in Redmond. It will surely be a lot of fun and I hope to learn a great deal... especially with the following break out sessions.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:180%;"&gt;&lt;em&gt;&lt;strong&gt;Sessions&lt;/strong&gt; &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Using SubSonic&lt;/span&gt;&lt;/strong&gt; &lt;p&gt;There are a lot of ActiveRecord implementations out there. Come check out SubSonic a lightweight offering on CodePlex.Track: ASP.NETSpeaker: &lt;a href="http://seattle.codecamp.us/Speakers.aspx#Chris"&gt;Chris Kinsman&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Castle - The DVD Extras&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Many people have already heard of the Castle Project [http://castleproject.org] and some of the major subcomponents: Monorail, ActiveRecord, Windsor. Whether you use these things or not, Castle has build up a compelling array of supporting components and libraries that are relatively easy to use from your application - even if you're not using the rest of Castle: Dynamic Proxy, an NVelocity fork, Scheduler, FlexBridge, and other things not directly associated with Castle. In addition, a lot of the Code is so well written, you just feel smarter after having read it. Let's take a look at some of these things, how you can leverage them, and what the code looks like.Track: ASP.NETSpeaker: &lt;a href="http://seattle.codecamp.us/Speakers.aspx#Chris"&gt;Chris Bilson&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Dependency Injection with ObjectBuilder 2.0&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;What is dependency injection? When should I use it (and when not)? This talk will answer those questions and more, plus show off some of the design changes made to ObjectBuilder 2.0 (and sample containers that drove and validated the design).Track: Core .NETSpeaker: &lt;a href="http://seattle.codecamp.us/Speakers.aspx#Brad"&gt;Brad Wilson&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Rethinking Unit Testing: xUnit.net&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The release of NUnit 2.0 was 5 years ago. This version of NUnit was more than just a warmed over port of other frameworks, pioneering the use of aspects to describe tests in .NET. Unit testing began to really catch on in .NET. Five years later, most developers are doing unit testing, and many of them cut their teeth on NUnit. With many unit tests under their belt, Jim Newkirk (the primary NUnit 2.0 author) and Brad Wilson -- with feedback from many friends and co-workers -- have released a new unit testing framework for .NET, xUnit.net. In this talk, Brad will discuss the history of xUnit.net, including their motivations and decisions, as well as show the new framework both for test writers and for those who wish to extend the framework for their own uses.Track: Agile PracticesSpeaker: &lt;a href="http://seattle.codecamp.us/Speakers.aspx#Brad"&gt;Brad Wilson&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Pex – Automated White Box Unit Testing&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Parameterized unit testing is becoming a mainstream feature of most unit test frameworks; MbUnit RowTest (and more), VSTS data tests, xUnit.net Theories, etc... Unfortunately, it is still the responsibility of the developer to figure out relevant parameter values to exercise the code. With Pex, this is no longer true. Pex is a unit test framework addin that can generate relevant parameter values for parameterized unit tests. Pex uses an automated white box analysis (i.e. it monitors the code execution at runtime) to systematically explore every branches in the code. In this talk, Peli will give an overview of the technology behind Pex (with juicy low-level .NET profiling goodness), then quickly jump to exiting live demos.Track: Core .NETSpeaker: &lt;a href="http://seattle.codecamp.us/Speakers.aspx#Peli"&gt;Peli&lt;/a&gt;&lt;br /&gt;Windows Live DevelopmentIn this session, we'll take a look at the Windows Live development platform, which enables 3rd party applications to integrate with Live ID, Contacts, Spaces, Messenger, Alerts, Silverlight Streaming, Virtual Earth, and Expo.Track: ASP.NETSpeaker: &lt;a href="http://seattle.codecamp.us/Speakers.aspx#Ed"&gt;Ed Kaim&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Reflector and Friends: An overview of Lutz Roeder's .Net Reflector and its add-ins&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Do you use Reflector on a daily basis? How about it's addins? Ever want to write your own addin? If so, you will probably find this session of some use and maybe even have something to add. This will be an introduction and overview of Lutz Roeder's .Net Reflector tool and some of the addins the community has developed for it along with a look at developing additional addins of your own. There are two sections to this talk: an introduction and overview of the tools (length depends on the experience of the attendees) and a look at developing Reflector addins or extending existing ones.Track: Core .NETSpeaker: &lt;a href="http://seattle.codecamp.us/Speakers.aspx#Jason"&gt;Jason Haley&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Black Belt DSA, building Duplex Agents&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The Disconnected Service Agent in the Smart Client Software Factory allows you to queue up web service calls to a remote server when disconnected. These calls are played back once the connection returns. This is great for simple message exchange patterns that instantly return a response. However, it does not help you in the case of a long-running operation in which the response is to be returned out-of-band. Come to this session and see how we can tweak the DSA to allow it receive an asynchronous response. We'll utilize a WCF Duplex channel to provide an agent that will make a call and go about it's merry way until it receives a call back from the server. This functionality is beneficial beyond offline scenarios, I'll show you how you can also use this technique to faciliate exchange patterns with multiple responses. For example requesting a large result set of data that is returned in a chunked fashion over multiple successive calls. If you are develeoping with SCSF / CAB, don't miss this session.Track: WCF and WFSpeaker: &lt;a href="http://seattle.codecamp.us/Speakers.aspx#Glenn"&gt;Glenn Block&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Session state injection your way with WCSF&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The StateValue mechanism in Web Client Software Factory provides a nice clean way of injecting values to and from ASP.NET's session state. One of it's big advantages is it provides for testability, allowing the values to be substituted in a unit test. Another big advantage is that it allows a declarative way for values from ASP.NET Session's state to be plugged in. But what happens if you aren't relying on ASP.NET Session and have a custom or third-party mechanism? Are you "up the creek without a paddle"? Actually no. Come to this session and I'll show you to "Have it your way" and make our Session State strategy bow to submission.Track: ASP.NETSpeaker: &lt;a href="http://seattle.codecamp.us/Speakers.aspx#Glenn"&gt;Glenn Block&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Data Enhancements in Visual Studio 2008&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Visual Studio 2008 offers a number of features that make it easier to build both 2-tier and n-tier data applications. This session will cover the following: • Using the new TableAdapterManager to manage updating of related table. No more having to write the code make sure child rows are deleted before parent rows. Now, it’s automatic. • Using ADO.NET Synchronization Services to maintain a local copy of data that doesn’t change often, such as lookup tables, and then synching that data with the server version. • Automatically separate DataSet code from TableAdapter code. Today, you must do this by hand if you want to use the DataSet Designer and build an n-tier application. Or you can have VS 2008 do it for you. • LINQ to SQL classes and the Object Relational Designer. The LINQ to SQL classes provide a way to map a database model to an object model. You can write the code yourself, or you can use the Object Relation Designer and drag and drop tables and stored procedures from the Server Explorer. Track: Core .NETSpeaker: &lt;a href="http://seattle.codecamp.us/Speakers.aspx#Robert"&gt;Robert Green&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Windows Application Enhancements in Visual Studio 2008&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Visual Studio 2008 includes some cool and exciting new features for building Windows client applications. In this session, we will explore two of them: • Client Application Services provide a way for you to add remote login, roles and profiles to client applications. Today, you can log into a Web site such as Amazon and the Web site knows who you are and what your preferences are. They are stored on the server and you are who you are regardless of what computer you use. Client application services gives you the ability to add this same functionality to a Windows application. You will write a service to authenticate users and to determine what roles they have. You can then call that service from any client. You can also write a service to manage settings. So you can store user settings on the server rather than only locally. • Windows Forms and Windows Presentation Foundation Interoperability. WPF is the revolution in user interface we have all been waiting for. Over time, it will increasingly be the way you build client applications. In the meantime, what do you do with all your Windows Forms and user controls? You will want to use them in your WPF applications. And what if you build a neat WPF control? You will want to use it in your Windows Form applications. With Visual Studio 2008, you can and we’ll see how. Track: Core .NETSpeaker: &lt;a href="http://seattle.codecamp.us/Speakers.aspx#Robert"&gt;Robert Green&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;An Introduction to Windows Communication Foundation&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This session will provide an introduction to Windows Communication Foundation. It will answer a number of questions such as: What is WCF? Why was it invented? How does it compare to Web services or .NET Remoting? How is it better than those? What is a service? How do I create one? How do I host one? How do I call one from my applications? What do I need to do to make sure clients and services can communicate? Once we answer these types of questions, you will be able to start creating your own WCF services and have a much better understanding of how to work with this promising new technology. Track: WCF and WFSpeaker: &lt;a href="http://seattle.codecamp.us/Speakers.aspx#Robert"&gt;Robert Green&lt;/a&gt;&lt;/p&gt;&lt;p&gt;For more info head over to the &lt;a href="http://seattle.codecamp.us/default.aspx"&gt;site&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Seya There!!!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-2185245175908803237?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/2185245175908803237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/10/my-first-ever-code-camp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2185245175908803237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2185245175908803237'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/10/my-first-ever-code-camp.html' title='My First Ever Code Camp!!!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TrCLe1DA8mM/RyDkzY6Nx3I/AAAAAAAAAC0/P7jkF140XDo/s72-c/codecampdate.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-5590756520949315896</id><published>2007-10-23T21:09:00.000-07:00</published><updated>2007-10-23T21:31:46.972-07:00</updated><title type='text'>Modifiability: Or is there Design in Agility</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/Rx7HGbDhIXI/AAAAAAAAACU/xvdIvrG_ep0/s1600-h/title.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/Rx7HGbDhIXI/AAAAAAAAACU/xvdIvrG_ep0/s320/title.jpg" alt="" id="BLOGGER_PHOTO_ID_5124752339149857138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is a question that often comes up in Software Engineering. As I follow the blogs and discussion I often run into some wonderful information... and sometimes it's life changing. I happen to catch the following &lt;a href="http://www.infoq.com/presentations/modifiability-fowler"&gt;video&lt;/a&gt; which I encourage all developers to watch which is narrated by none other than &lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt;.&lt;br /&gt;The discussion covers quite a few aspects of software design including things like how to make design decisions, TDD (Test Driven Development), BDD (Behavior Driven Development), encapsulation, and more. The panelists for the discussion are so very gifted and talented at what they do, they are all brilliant in there own way and conveniently enough work at &lt;a href="http://www.thoughtworks.com/"&gt;thoughtworks&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/Rx7JCbDhIZI/AAAAAAAAACk/66wx2wHOIa8/s1600-h/panelists.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/Rx7JCbDhIZI/AAAAAAAAACk/66wx2wHOIa8/s320/panelists.jpg" alt="" id="BLOGGER_PHOTO_ID_5124754469453635986" border="0" /&gt;&lt;/a&gt;Rather than go into each one of these guys web site... I'd rather just point you to &lt;a href="http://www.infoq.com/"&gt;InfoQ&lt;/a&gt;&lt;br /&gt;which is where there web sites, articles, and videos can be found.  If you can... check out each one of them, they all cover so many topics and you will certainly learn a lot. I have... ; )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-5590756520949315896?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/5590756520949315896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/10/modifiability-or-is-there-design-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/5590756520949315896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/5590756520949315896'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/10/modifiability-or-is-there-design-in.html' title='Modifiability: Or is there Design in Agility'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TrCLe1DA8mM/Rx7HGbDhIXI/AAAAAAAAACU/xvdIvrG_ep0/s72-c/title.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-1836572544016277407</id><published>2007-09-15T11:06:00.000-07:00</published><updated>2007-10-01T23:03:19.739-07:00</updated><title type='text'>"Make It Right" Software</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/RuwgxpD_GBI/AAAAAAAAACM/w0wjiNDzBRk/s1600-h/holmesonhomes.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/RuwgxpD_GBI/AAAAAAAAACM/w0wjiNDzBRk/s320/holmesonhomes.jpg" alt="" id="BLOGGER_PHOTO_ID_5110495714366920722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For those of you that know I'm buying my first home soon(&lt;a href="http://www.ryland.com/find-your-new-home/9-dallas/1013-bozman-farms-estates-series/11057-prescott.html"&gt;Prescott&lt;/a&gt;) also know that I'm going to be there during the build to make sure all the necessary additions are made the way they are supposed to be. For the past several months I've been watching Discovery Homes new show... &lt;a href="http://home.discovery.com/fansites/holmesonhomes/holmesonhomes.html"&gt;Holmes on Homes&lt;/a&gt;   Mike Holmes is my definition of a world leader in pure and honest craftsmanship. His approach to building/renovating homes is second to none... he has a clear vision to all projects and fully supports learning and implementing new concepts to make outstanding finished products. I like his approach so much I've decided to use that same approach to building software... when Mike has a problem with implementing the right kind of solution such as removing asbestos... he calls in the pro's  and makes sure it gets done right.  This same principle can be applied to software development... whether it's  security, exception handling, validation, or just pure design its very feasible to look around at what others are doing to help ease the pain in implementing these kinds of important decisions that every developer faces. Speaking from experience... this approach works, you can implement such things as Microsoft application blocks, Design Patterns such as MVP (Model-View-Presenter) to help with certain areas of each application build or re-build. My approach to building software or re-factoring software will always be to "Make It Right" and "Above Code" which can be translated to above standards. This will insure that the software will run and last a long time... the same will be true for my first home.&lt;br /&gt;&lt;br /&gt;-Thanks Mike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-1836572544016277407?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/1836572544016277407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/09/make-it-right-software.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1836572544016277407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1836572544016277407'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/09/make-it-right-software.html' title='&quot;Make It Right&quot; Software'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/RuwgxpD_GBI/AAAAAAAAACM/w0wjiNDzBRk/s72-c/holmesonhomes.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-1713358850609246789</id><published>2007-09-13T20:31:00.001-07:00</published><updated>2007-09-13T20:41:37.721-07:00</updated><title type='text'>"The Meeting"</title><content type='html'>Today I reached a milestone in my life where I heard everything I had been working so hard to hear.&lt;span style="font-weight: bold;"&gt;  "Cameron... we need you to be apart of our team and we're prepared to make you happy to do so."&lt;/span&gt;  Today I got promoted to develop on the C++ team, thanks to all the hard work and research I did on C++/CLI integration with native C++ I was able to bridge the gap between native and managed code and leverage both in a .NET web application.  Anyway they want me to do more of this, especially since I was able to completely erase 6 months of COM work in just a few short weeks of C++/CLI... This promotion is leading to a lot of great opportunities and experience in the financial industry and with the C++ language.  Knowing that I'm only 27 and earning 95k annually is a great feeling... I thank god and my family (Wife... Rachel &amp; Daughter... Katheryn)for supporting me through all the extra time I put in on the weekends and the late nights so that I can learn. Learning is the best thing anyone can do in anything that they do, and I will never stop learning. ; )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-1713358850609246789?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/1713358850609246789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/09/meeting.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1713358850609246789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1713358850609246789'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/09/meeting.html' title='&quot;The Meeting&quot;'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-139831016161002495</id><published>2007-08-17T18:19:00.000-07:00</published><updated>2007-08-17T18:56:40.207-07:00</updated><title type='text'>Developing software in the financial industry</title><content type='html'>The new job is going great only 4 weeks in and already so much has happened.  My first task was to migrate a VS2003 C# Windows application  with 3rd party charting capability to VS2005 C# 2.0. That took about a week seeing as how the application wasn't very big... and since I used the MVP (Model View Presenter (Supervising Controller)) Design pattern the data was flowing very well. Then came the infamous request from my boss that most developers never want to face, but will most likely face at one time or another in there career... "Can you port that windows application in to a web application?"  Luckily my use of the MVP Design pattern helped me to confidently respond "Yep! No problem..." So week two I began the journey of encapsulating the majority of the windows application logic in to ASP.NET 2.0 Web Components. These components would ultimately be used in the departments intranet site... This was looking to be a smooth transition until I got to the new major dependency of the application which was none other than a C++ COM object.  Oh and did I mention the person that created the C++ code and COM object are no longer working for the company. :)  So what's an experience C# developer to do... what any experience developer would do... research.  So the idea is to integrate legacy code in to my modern .NET code, otherwise known as Interoperability. So I looked at my options and it turns out there is a managed C++ language known as C++/CLI and Microsoft has done a significant amount of work to not only aid in Interoperability challenges of COM, but to have the best of both worlds with performance of native(UnManaged) code and Managed code. Week three I read as much as I could on C++/CLI for C# developers by Dean Willis... a great reference to help any .NET developer come up to speed on writing C++, and since I'm new to the language it was even more of a hurdle, so I got a few native C++ books as reference as well. Overall, the main thing I needed to understand was interop between native/managed code. so by the end of&lt;br /&gt;week four and the entire weekend I was able to write my own C++/CLI wrapper around native C++ API's. Awesome stuff, after a while of writing managed C++  begins to feel a lot like C#... so I began to feel right at home... I'm happy to report that I've replaced the COM object which took the guy who wrote it 3 months development time. It took me about a week and half.  :)  My boss was so impressed that he's considering moving me up a step to work on a C++ team. I've only been writing C++ for about three weeks time... thank god for Microsoft's work on C++/CLI.&lt;br /&gt;&lt;br /&gt;Long story short... if you have any interoperability to do with C++  into managed code, seriously consider C++/CLI... there are a lot of options to help with seamlessly integrating with native code.  Oh... and on a side note, no one on the C++ team including my boss even knew about C++/CLI so when I told them about the interop story on the white board they literally where stunned, and I of course looked very good. : )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-139831016161002495?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/139831016161002495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/08/developing-software-in-financial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/139831016161002495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/139831016161002495'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/08/developing-software-in-financial.html' title='Developing software in the financial industry'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-6314579375277800475</id><published>2007-07-05T10:48:00.001-07:00</published><updated>2007-07-05T11:21:18.190-07:00</updated><title type='text'>My New Developer Job!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/Ro0vT3itB7I/AAAAAAAAACE/sBRlatHBCsk/s1600-h/office-space-07.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/Ro0vT3itB7I/AAAAAAAAACE/sBRlatHBCsk/s320/office-space-07.jpg" alt="" id="BLOGGER_PHOTO_ID_5083771572744685490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Alright... taking a break from the home automation projects I was able to focus on job interviews&lt;br /&gt;much like the picture above. Well... maybe not exactly like the picture above, but the job I did land is similar.  I'm now working for a well known banking company that goes by the name "Washington Mutual"... Scott Hanselman eat your heart out.  This is going to be a great move,&lt;br /&gt;I'll get to embark on the world of JAVA and C++  and Oracle 10i on the back end... I'll be sure to give updates as I go along, my start date is 7/16/07!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-6314579375277800475?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/6314579375277800475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/07/my-new-developer-job.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6314579375277800475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6314579375277800475'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/07/my-new-developer-job.html' title='My New Developer Job!'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/Ro0vT3itB7I/AAAAAAAAACE/sBRlatHBCsk/s72-c/office-space-07.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-5459315457423275970</id><published>2007-06-03T20:33:00.000-07:00</published><updated>2007-06-03T21:16:34.001-07:00</updated><title type='text'>Project Morning Weather Channel</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/RmOOMf85dYI/AAAAAAAAABc/lSiV5FVJCgU/s1600-h/tv.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/RmOOMf85dYI/AAAAAAAAABc/lSiV5FVJCgU/s200/tv.jpg" alt="" id="BLOGGER_PHOTO_ID_5072053950735807874" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TrCLe1DA8mM/RmOOTP85dZI/AAAAAAAAABk/JTEnoF8Lqt8/s1600-h/comcast_dvr.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_TrCLe1DA8mM/RmOOTP85dZI/AAAAAAAAABk/JTEnoF8Lqt8/s320/comcast_dvr.jpg" alt="" id="BLOGGER_PHOTO_ID_5072054066699924882" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/RmOOzf85daI/AAAAAAAAABs/0mNLiUbQA78/s1600-h/usb-320.jpg"&gt;&lt;img style="cursor: pointer; width: 208px; height: 164px;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/RmOOzf85daI/AAAAAAAAABs/0mNLiUbQA78/s320/usb-320.jpg" alt="" id="BLOGGER_PHOTO_ID_5072054620750706082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The project has been completed for about a week now... I'm still editing the videos and will post them soon.  For the time being I thought I would at least discuss the products used in the videos in a little more detail.  If you have not read any of the previous post then "shame on you"... and if you have... "thank you". This project surfaced due to my daily struggle of waking up, getting to the living room, turning the t.v. on, and channel surfing to the weather channel to check the daily weather with out waking up my 5 year old daughter or lovely wife.  As if this weren't enough challenges I have to keep a 1 1/2 year old yapping &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;Yorkie&lt;/span&gt; and 9 year old tuxedo cat quiet as well... as you can probably imagine it's a daunting task... so I started looking for a solution. I need a way to automatically turn the t.v. on, navigate to the weather channel and mute the volume prior to my waking up in the morning. Enter the solution... so I will be using an old school 32inch Zenith TV&lt;span style="font-weight: bold;"&gt;(Man I can't wait until I get my house so I can upgrade to plasma) &lt;/span&gt;with a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;comcast&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;DVR&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;reciever&lt;/span&gt;, then I will use a &lt;a href="http://www.irtrans.de/en/shop/usb.php"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;USB&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;IRTrans&lt;/span&gt; transmitter&lt;/a&gt; along with packaged web server which is controlled through a custom .NET application.&lt;br /&gt;At first I implement a console application for simplicity... then I factor out the code into a windows service for a little bit of polish. The videos should shed more light on the implementation and I certainly had a lot of fun doing them.  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-5459315457423275970?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/5459315457423275970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/06/project-morning-weather-channel.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/5459315457423275970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/5459315457423275970'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/06/project-morning-weather-channel.html' title='Project Morning Weather Channel'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/RmOOMf85dYI/AAAAAAAAABc/lSiV5FVJCgU/s72-c/tv.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-7361426337553835036</id><published>2007-05-24T08:35:00.000-07:00</published><updated>2007-05-24T09:12:09.958-07:00</updated><title type='text'>Home Automation Project Series</title><content type='html'>Okay, this is sort of an introductory post of the home automation project series that I will be documenting on video. I'm primarily doing this for a couple of reasons... one... for anyone who is interested in home automation projects along the same lines as mine and also for myself so that I may have something to reference back to years from now. :)&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The following is the current outline:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1) Automate morning television set to weather channel and muted volume&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0); font-weight: bold;"&gt;Note: This will be done in the tiny two bedroom apartment (I'll explain the project on the video)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;*&lt;/span&gt;&lt;/span&gt; Technologies (Infrared Transmitter, USB Interface, .NET SDK/API, Custom C# Windows Service)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2) Automate lights and shades to that of the previous post&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);"&gt;Note: This will be done in my new home so I will have a much bigger canvas(Hopefully (yn))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;*&lt;/span&gt; Technologies (X10,Z-Wave or CM11A, Parallel,Serial or USB, .NET SDK/API, Custom C# Windows Service)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3) Install touch screen monitors in a couple of hallways and home office wall, then test with either windows ce or window tablet pc... most likely windows tablet pc.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4) Build 3.0 WPF application to override scheduled services on demand&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);"&gt;Note: This will have Speech-To-Text capabilities, so the app can be driven by the sweet sound of my voice. :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;*&lt;/span&gt; Technologies (Tablet PC platform, .NET 3.0, Expression Blend C#, WPF, Speech 5.3 SDK)&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;***Future Projects***&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-Install solar panels on roof top and collect solar energy&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);"&gt;Note: (Figure out a way to collect wind energy as well)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once I have collected the energy and safely stored in a known location I want to be able to track&lt;br /&gt;how much I've consumed, and how much I have to sell to the energy company.&lt;br /&gt;Then I can use X10 to communicate with the energy levels and tell me how much energy consumed and available to sell respectively. Once that is complete it will be a matter of hours before I can hook that up to my WPF application and speech enable it. :)&lt;br /&gt;&lt;br /&gt;Whew... that is certainly enough for now... I really could go on and on.&lt;br /&gt;This however is a good stopping point... so with the long memorial holiday I have starting today I think I will get started on the first project... stay tuned... and to all my fellow dev's out there...&lt;br /&gt;have an exception free day!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-7361426337553835036?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/7361426337553835036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/05/home-automation-project-series.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7361426337553835036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/7361426337553835036'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/05/home-automation-project-series.html' title='Home Automation Project Series'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-8765687182509569538</id><published>2007-05-07T12:42:00.000-07:00</published><updated>2007-05-07T13:37:09.385-07:00</updated><title type='text'>Home Automation Part 2</title><content type='html'>Since I have the software side of things nailed down I thought I would take a few moments to talk about the hardware side of things, now since I want screens in a few places through out the house I know I'm going to need to cut some holes in some walls. This is not an issue until we start to think about climate control... how on earth am I supposed to keep all my components cool  if  I'm living in a Dallas,TX.  Hopefully something will surface in my research, until then I 've been able to find quite a few possibilities for the hardware side of things.  Since I will need to have screens in the wall I don't want them to be very big because they need to be mounted and available to touch hence... (Touch-Screen) so I found a couple of options... 1) &lt;a href="http://www.logicsupply.com/product_info.php/cPath/52/products_id/672"&gt;Phylon 7" Wide-Screen VGA TFT Display with Touchscreen&lt;/a&gt; this monitor is just the right size and the right price. Or&lt;br /&gt;2) &lt;a href="http://quataris.com/main/content/view/15/33/"&gt;The new Touch Screen LCD PC from Quataris Technology&lt;/a&gt; this obviously is the right and size and I can run WinXP/Vista/or CE 6.0 on it.  Definitely a front runner at the moment.&lt;br /&gt;&lt;br /&gt;Once I find the right display I will need to figure out wiring through the walls etc. don't worry I will have documented steps on most of this information right here on lifeofadev.blogspot.com&lt;br /&gt;&lt;br /&gt;The plan for phase 1 :&lt;br /&gt;&lt;br /&gt;1) Control lights in living/dinning/master suite/control room(office) /media room&lt;br /&gt;2) Control the blinds in living/Master suite&lt;br /&gt;&lt;br /&gt;For the software I'll be building a custom UI in WPF running on .NET 3.0 leveraging the WinXP SP2 or Vista Platform and it will all be controlled through the new Speech to Text Managed Api's using C# of course. :)&lt;br /&gt;&lt;br /&gt;The goal is to walk in to or out of a room and speak to the lights or blinds via voice command.&lt;br /&gt;I'm currently thinking something along the lines of "Lights On", "Lights 1" = dim lights (25%) , "Lights 2" = dim lights(50%) , "Lights 3" ,"Lights 4" and "Lights Off" respectively. Same kind of thing for the electrical blinds.&lt;br /&gt;&lt;br /&gt;These sorts of applications are spinning up all around us in homes of folks who can afford a team of specialist to come in and install everything, of course leaving a pretty universal remote for all the components. Not me... I'm a dev all the way and with the help of &lt;a href="http://www.phidgets.com/"&gt;Phidgets&lt;/a&gt; and the display possibilities above I'm well on my way. Oh... I forgot to mention Phidgets... well the link is above for the full info, but essentially I came across the company by watching a UWTV Computer science and engineering lecture on the subject and then went over to the website for more info... these guys are electrical engineer grads who build hardware devices for plug-n-play use.&lt;br /&gt;Awesome stuff, more over... Lee Brimelow has already gotten starter with it over at &lt;a href="http://www.contentpresenter.com/"&gt;contentpresenter.com&lt;/a&gt; he controls a 3D model in WPF with several phidgets.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-8765687182509569538?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/8765687182509569538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/05/home-automation-part-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/8765687182509569538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/8765687182509569538'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/05/home-automation-part-2.html' title='Home Automation Part 2'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-9077748081929814199</id><published>2007-05-07T12:21:00.000-07:00</published><updated>2007-05-07T12:41:53.637-07:00</updated><title type='text'>Home Automation Part 1</title><content type='html'>This is one of my favorite topics that resides near and dear to my heart.&lt;br /&gt;So I thought I'd blog about my some of my ideas and plans... I first got into home automation about 3 years ago back in 2003, shortly after my first couple of years in .NET development.&lt;br /&gt;&lt;br /&gt;I started to look in to X10 &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;Technology&lt;/span&gt; which was compliant with .NET and super simple to get setup, soon after that I got busy with work stuff and then eventually found myself back in to r&amp;d. Even though I don't have a home yet, I plan on moving from the small 2 bedroom apartment in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Bellevue&lt;/span&gt;,WA  to a 4/5 Bedroom, 2 living/2 dinning, 3 bathroom,  game room,  2 car garage home in Dallas, TX.  This will make things seem so much more comfortable allowing us to &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;appropriately&lt;/span&gt; welcome our soon to be third addition to the family... with this kind of setup I have a more than &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;adequate&lt;/span&gt; canvas to begin my mission for a smart home.   Of course the home will be running on .NET 2.0/3.0 code and X10 hardware for lighting... mostly simple things that have been done by some of the folks out there in the community, folks like &lt;a href="http://www.northrup.org/"&gt;Tony &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Northup&lt;/span&gt;,&lt;/a&gt; and Chris Walkers &lt;a href="http://www.controlthink.com/"&gt;Z-Wave Technology&lt;/a&gt; which extends X10.  &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;Definitely&lt;/span&gt; some cool things out there in the .NET space of Home Automation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-9077748081929814199?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/9077748081929814199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/05/home-automation-part-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/9077748081929814199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/9077748081929814199'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/05/home-automation-part-1.html' title='Home Automation Part 1'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3498001073834928931</id><published>2007-05-04T12:23:00.000-07:00</published><updated>2007-05-24T20:33:41.903-07:00</updated><title type='text'>The buzz around Silverlight &amp; MIX 07</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.microsoft.com/silverlight"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/RjuKABDG9uI/AAAAAAAAAAs/R04fNrzLy-M/s320/logo_main_sl.gif" alt="" id="BLOGGER_PHOTO_ID_5060790339166992098" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://visitmix.com/"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/RjuK5BDG9xI/AAAAAAAAABE/voCaZGww7Fc/s320/MontageDay3_large_mix.jpg" alt="" id="BLOGGER_PHOTO_ID_5060791318419535634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="file:///C:/DOCUME%7E1/FREDER%7E1/LOCALS%7E1/Temp/moz-screenshot.jpg" alt="" /&gt;Mix 07 is coming to an end... even though I didn't actually attend in Vegas I subscribed to the feed of live footage keynotes and break out sessions... which honestly felt like I was there.&lt;br /&gt;&lt;br /&gt;Silverlight is essentially WPF/E ... a cross platform web based solution for rich UI experiences.&lt;br /&gt;A tiny clr enabling all sorts of technology to run on top of it... everything from Ruby to Python, Javascript, DHTML, AJAX and more. Speaking more on the cross platform it will run in safari on the mac as well as fire fox which I love!&lt;br /&gt;&lt;br /&gt;Now for those of you that know me also know that I don't represent the Web Dev side of development, but I must say that this technology is pulling me back to the web side of things.&lt;br /&gt;Very Cool!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3498001073834928931?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/3498001073834928931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/05/buzz-around-silverlight-mix-07.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3498001073834928931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3498001073834928931'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/05/buzz-around-silverlight-mix-07.html' title='The buzz around Silverlight &amp; MIX 07'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/RjuKABDG9uI/AAAAAAAAAAs/R04fNrzLy-M/s72-c/logo_main_sl.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-1687700295822991740</id><published>2007-04-25T19:28:00.000-07:00</published><updated>2007-04-25T19:45:17.476-07:00</updated><title type='text'>Diagnosed with Hypertrophic Cardiomyopathy (HCM)</title><content type='html'>&lt;span class="contentHead"&gt;For the past month and a half I have been experiencing some weird activity with my normal work out routine. After about 10 minutes of working out I immediately need to vomit.&lt;br /&gt;Not good... so I checked it out and turns out I have HCM.  Which basically means I have a muscle in my heart that thickens(grows bigger) after activity or exertion... this causes abnormal blood flow in the heart and is causing me to vomit.   For a more accurate definition/explanation I have supplied the following information:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What is Hypertrophic Cardiomyopathy (HCM)?&lt;/span&gt;&lt;br /&gt;&lt;img src="http://www.4hcm.org/WCMS/img/leer.gif" alt="" height="3" width="1" /&gt;&lt;br /&gt;&lt;b&gt;Cardiomyopathy&lt;/b&gt; is a condition in which the muscle of the heart is abnormal in the absence of an apparent cause. This terminology is purely descriptive and is based on the Latin deviation. HCM is a primary and usually familial cardiac disorder with heterogeneous expression, unique pathophysiology, and a diverse clinical course, for which several disease causing mutations in the genes encoding proteins of the cardiac sacomere have been reported. While HCM has typically been recognized by its structure ie., hypertrophy, the electrical function of the heart are also adversely affected. There are three types of cardiomyopathy: &lt;b&gt;"hypertrophic"&lt;/b&gt;, &lt;b&gt;"dilated"&lt;/b&gt; and &lt;b&gt;"restrictive"&lt;/b&gt;. The main feature of hypertrophic cardiomyopathy is an excessive thickening of the heart muscle (hypertrophy literally means to thicken). Thickening is seen in the ventricular septal measurement (normal range .08-1.2cm), and in weight. In HCM, septal measurements may be in the range of 1.3cm to 6.0+cm. Heart muscle may also thicken in normal individuals as a result of high blood pressure or prolonged athletic training. Furthermore, there is a fine line between and athletic heart and a heart with HCM. &lt;p&gt;&lt;b&gt;In Hypertrophic Cardiomyopathy (HCM), the muscle thickening occurs without an obvious cause.&lt;/b&gt; In addition, microscopic examination of the heart muscle in HCM is abnormal. The normal alignment of muscle cells is absent and this abnormality is called &lt;b&gt;"myocardial disarray"&lt;/b&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img src="http://www.4hcm.org/WCMS/content/images/2_6_8BO00nm2TU-328x.gif" class="image_img" alt="" border="0" height="132" width="328" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Now in my case I have about a third of the disarray shown above, which is kind of scary. Doctor says there is two ways to treat it. 1) medication to suppress the growing of the muscle or  2) surgery which would essentially be removing part of the muscle.  Of course I opted for the medication to start.&lt;/p&gt;&lt;br /&gt;Being very athletic for 20+ years I figure that my being 27 would not be cause for concern, but when I checked it out the results revealed a little cause for concern. If you ever feel as though your body is not acting normal you should definitely check yourself out... you never know what you might find.&lt;br /&gt;&lt;br /&gt;for more information on HMC visit &lt;a href="http://www.4hcm.org/"&gt;&lt;span style="text-decoration: underline;"&gt;4HMC&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-1687700295822991740?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/1687700295822991740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/04/diagnosed-with-hypertrophic.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1687700295822991740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1687700295822991740'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/04/diagnosed-with-hypertrophic.html' title='Diagnosed with Hypertrophic Cardiomyopathy (HCM)'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-2815621272534078600</id><published>2007-03-27T15:10:00.000-07:00</published><updated>2007-03-27T15:19:05.838-07:00</updated><title type='text'>More On Creative Math</title><content type='html'>Ok, Lately I have been really interested in math again.  It just so happens that I caught one of my weekly Computer Science &amp; Engineering video lectures on &lt;a href="http://www.uwtv.org/"&gt;UWTV&lt;/a&gt;... this week the topic of discussion was &lt;a href="http://sage.math.washington.edu:8100/"&gt;Software For Algebra and Geometry Experimentation&lt;/a&gt; or SAGE.  Very cool lecture from the man that started it all... (&lt;a href="http://modular.math.washington.edu/"&gt;William Stein&lt;/a&gt;) Written mostly in python... this application does some really advanced level interpretations and the contributors to the project use &lt;a href="http://www.controlchaos.com/"&gt;SCRUM&lt;/a&gt; which is also cool.  If you ever wanted to know how to calculate  something or  find the polynomial  or calculate polynomials click on the link above and explore the world of SAGE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-2815621272534078600?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/2815621272534078600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/more-on-creative-math.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2815621272534078600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2815621272534078600'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/more-on-creative-math.html' title='More On Creative Math'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-4852682947775539225</id><published>2007-03-27T15:00:00.000-07:00</published><updated>2007-03-27T15:21:40.635-07:00</updated><title type='text'>C# Math Creativity</title><content type='html'>Alright, after &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;checking&lt;/span&gt; out &lt;a href="http://blogs.msdn.com/karstenj/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Karsten's&lt;/span&gt;&lt;/span&gt; blog&lt;/a&gt; I was immediately inspired... so I ran out to B&amp;amp;N and got the book &lt;a href="http://www.amazon.com/Flash-Math-Creativity-Keith-Peters/dp/1590594290"&gt;Flash Math Creativity&lt;/a&gt;.  Since I have an extensive background in flash I thought I would check it out... turns out it covers quite a bit which really helps me in the C# world.  One of the modules I am working on right now for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;DirectorsMate&lt;/span&gt;&lt;/span&gt; is a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;Formation Helper&lt;/span&gt; module which allows a director or coach to specify how many team &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;members&lt;/span&gt; they have and pick a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;basic&lt;/span&gt; formation shape... for instance if I have 24 members on my team and I want a Circle formation all I have to do is specify 24 and click the circle button.  Behind the scenes I loop 24 times, and each time i create an ellipse shape and position it in a specified location using standard math that I picked up in the book.   If you're ever doing Formulas or Math Calculations in C#... you need to take a look at Flash Math Creativity... it maps to C# seamlessly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-4852682947775539225?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/4852682947775539225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/c-math-creativity.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4852682947775539225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/4852682947775539225'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/c-math-creativity.html' title='C# Math Creativity'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-1386813555885649015</id><published>2007-03-27T09:54:00.000-07:00</published><updated>2007-03-27T10:05:18.057-07:00</updated><title type='text'>Shifting Sands Of The Company Structure</title><content type='html'>At my day job I am basically in a team of two developers... the guy who's been with the company from the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;beginning&lt;/span&gt; and myself.  About a week ago I was informed that the other guy was planning on leaving the company... leaving myself to basically handle his duties and mine. With only being part of the company for a single year and having all of this responsibility kind of dumped on my plate is honestly a bit &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;frightening&lt;/span&gt;.   There are so many good things that can come from this sudden shit of sands... I can streghten my development skills, and project management skills even further.  Although, it is a lot to take on... especially since now I will be potentially in charge of areas such as back-end database, web site, ftp, billing department applications, testing, staging evironments to name a few.&lt;br /&gt;&lt;br /&gt;We'll have to see how it all unfolds over the summer....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-1386813555885649015?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/1386813555885649015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/shifting-sands-of-company-structure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1386813555885649015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1386813555885649015'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/shifting-sands-of-company-structure.html' title='Shifting Sands Of The Company Structure'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-6910095080671758512</id><published>2007-03-21T08:44:00.000-07:00</published><updated>2007-03-21T09:11:20.973-07:00</updated><title type='text'>Understanding EULA and FEULA</title><content type='html'>For those of you out there who are putting together software for your start up know that at some&lt;br /&gt;point you will have to put together a &lt;a href="http://en.wikipedia.org/wiki/EULA"&gt;EULA&lt;/a&gt; (End Users Licenses Agreement) or &lt;a href="http://www.gripewiki.com/index.php/FEULA"&gt;FEULA &lt;/a&gt;(Fair End Users Licenses Agreement).  Having one of these in place protects you from end users who want to basically do harm to your company in court... I have been around and around and have decided to go with the FEULA and tweak it for my needs... thankfully their is a lawyer in the family on my wife's side. If you can gather up the means I highly suggest you have your EULA or FEULA looked over by a lawyer before putting on your install.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-6910095080671758512?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/6910095080671758512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/understanding-eula-and-feula.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6910095080671758512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/6910095080671758512'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/understanding-eula-and-feula.html' title='Understanding EULA and FEULA'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-2600641599833564256</id><published>2007-03-14T11:19:00.000-07:00</published><updated>2007-03-14T11:26:16.001-07:00</updated><title type='text'>Working with Decimals in C#</title><content type='html'>I recently ran in to a bind while working on the ScoreSheet CTP, and once I figured it out I thought I might blog about it... just in case anyone else has similar issues out there.&lt;br /&gt;&lt;br /&gt;ScoreSheet is a try-out system I am building for teams that hold try-outs for a specific event... and inside it resides a calculator engine that I use, and well a requirement came in which needed to be able to get the total score no matter what it is and view it as a percentage.&lt;br /&gt;&lt;br /&gt;I came up with the following procedure which works out quite well...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TrCLe1DA8mM/Rfg-AmyA6qI/AAAAAAAAAAc/BY3l9Q7Fefc/s1600-h/working+with+decimals.PNG"&gt;&lt;img style="cursor: pointer; width: 315px; height: 319px;" src="http://1.bp.blogspot.com/_TrCLe1DA8mM/Rfg-AmyA6qI/AAAAAAAAAAc/BY3l9Q7Fefc/s320/working+with+decimals.PNG" alt="" id="BLOGGER_PHOTO_ID_5041847962972514978" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-2600641599833564256?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/2600641599833564256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/working-with-decimals-in-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2600641599833564256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/2600641599833564256'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/working-with-decimals-in-c.html' title='Working with Decimals in C#'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TrCLe1DA8mM/Rfg-AmyA6qI/AAAAAAAAAAc/BY3l9Q7Fefc/s72-c/working+with+decimals.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-3491215938949835243</id><published>2007-03-09T12:08:00.000-08:00</published><updated>2007-03-14T11:51:42.969-07:00</updated><title type='text'>Converting Collections in .NET 2.0</title><content type='html'>So last night I was having a bit of an issue with getting the values from my &lt;span style="color: rgb(102, 204, 204); font-weight: bold;"&gt;Dictionary&lt;/span&gt;&lt;span style="color: rgb(102, 204, 204);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;string&lt;/span&gt;,&lt;span style="color: rgb(51, 102, 255);"&gt;int&lt;/span&gt;&gt; to a normal generic &lt;span style="color: rgb(102, 204, 204); font-weight: bold;"&gt;List&lt;/span&gt;&lt;&lt;span style="color: rgb(51, 102, 255);"&gt;int&lt;/span&gt;&gt;.&lt;br /&gt;&lt;br /&gt;I figured it out and just knew their had to be a better way, so I asked a co-worker of mine the next morning and got the following result after collaborating with him... of course the results were much better this time around.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TrCLe1DA8mM/RfHAeGyA6pI/AAAAAAAAAAU/TZW-INv4iDY/s1600-h/collection+conversion.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_TrCLe1DA8mM/RfHAeGyA6pI/AAAAAAAAAAU/TZW-INv4iDY/s320/collection+conversion.JPG" alt="" id="BLOGGER_PHOTO_ID_5040021081453292178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see from above I just pass the values from the dictionary to the constructor of the collection I want to convert to.   I am able to do this because the constructor takes &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;IEnumerable&lt;/span&gt; as a parameter... any collection which &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;inherits&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;IEnumerable&lt;/span&gt; can be passed in.&lt;br /&gt;In the future always look for this first, for it may be the solution your looking for when converting collection in .NET 2.0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-3491215938949835243?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/3491215938949835243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/converting-collections-in-net-20.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3491215938949835243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/3491215938949835243'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/converting-collections-in-net-20.html' title='Converting Collections in .NET 2.0'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TrCLe1DA8mM/RfHAeGyA6pI/AAAAAAAAAAU/TZW-INv4iDY/s72-c/collection+conversion.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3655873319906185096.post-1756209418368705994</id><published>2007-03-06T15:07:00.000-08:00</published><updated>2007-03-06T15:18:35.586-08:00</updated><title type='text'>Bouncing back and forth between .NET 1.1,2.0, and 3.0</title><content type='html'>Ok, for those of you out there who can sympathise... you know how frustrating this can be.&lt;br /&gt;A typical day consist of the following 10 steps...&lt;br /&gt;&lt;br /&gt;1) Wake up... go to work... migrate delphi to C# 1.1 and maintain&lt;br /&gt;2) Daily meetings on design ideas for migrating C# 1.1 to 2.0&lt;br /&gt;3) 6pm, can it be already.... get home... fire up Vista... and Continue the Revolutionary C# 3.0 Application which will one day change the world.&lt;br /&gt;4) Work Out/Shower&lt;br /&gt;5) Family Time &amp; Dinner Time&lt;br /&gt;6) Spouse Time &amp;amp; favorite T.V. Shows&lt;br /&gt;7) Tuck the little one in bed.&lt;br /&gt;8) Back to the C# 3.0 Application&lt;br /&gt;9) Read for a little while.&lt;br /&gt;10) Bed Time&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3655873319906185096-1756209418368705994?l=lifeofadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lifeofadev.blogspot.com/feeds/1756209418368705994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/bouncing-back-and-forth-between-net.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1756209418368705994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3655873319906185096/posts/default/1756209418368705994'/><link rel='alternate' type='text/html' href='http://lifeofadev.blogspot.com/2007/03/bouncing-back-and-forth-between-net.html' title='Bouncing back and forth between .NET 1.1,2.0, and 3.0'/><author><name>Frederick Times</name><uri>http://www.blogger.com/profile/10320760330914096921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_TrCLe1DA8mM/TQmaxPRbA7I/AAAAAAAAAXI/Er4daLCG1J8/s1600-R/43f4daa453b2b218f62a4c3533003580.png'/></author><thr:total>0</thr:total></entry></feed>
