Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

inital blog add

  • Loading branch information...
commit f7f1adb9f39d4a645888d2e908100f8dbcfce451 1 parent 9c00269
MotoWilliams authored
Showing with 292 additions and 411 deletions.
  1. +15 −0 _posts/2010-02-15-Blog.Start.md
  2. +12 −0 _posts/2010-03-08-Unit-Testing-Just-Do-It.md
  3. +13 −0 _posts/2010-03-09-Asp-net-MVC-Session-State-Extension-Method.md
  4. +24 −0 _posts/2010-03-13-Checking-for-special-characters-using-LINQ.md
  5. +23 −0 _posts/2010-03-22-C4MVC-Reason-42-to-Join.md
  6. +40 −0 _posts/2010-03-23-Extension-Methods-Improving-the-quality-of-Life.md
  7. +35 −0 _posts/2010-03-30-Getting-started-with-MVCContrib-Filters.md
  8. +24 −0 _posts/2010-04-01-Stupid-Linq-Tricks-Record-Rollup.md
  9. +45 −0 _posts/2010-04-17-LINQPad-with-Databases.md
  10. +21 −0 _posts/2010-05-06-I-Quit-My-Job-And-We-Are-Moving-Home-To-Montana.md
  11. +9 −0 _posts/2010-06-07-Internet-Explorer-is-like.md
  12. +31 −0 _posts/2012-06-30-Installing-the-Sublime-Text-2-Modific-Plugin.md
  13. +0 −411 _posts/core-samples/2011-12-29-jekyll-introduction.md
  14. BIN  assets/images/GCSLogo.png
  15. BIN  assets/images/LINQPad_ChooseDataContext.png
  16. BIN  assets/images/LINQPad_ChooseDataContext_SQLLite_Driver.png
  17. BIN  assets/images/LINQPad_Choose_a_driver.png
  18. BIN  assets/images/LINQPad_Current_Connections.png
  19. BIN  assets/images/LINQPad_Simple_LINQ_QueryAll.png
  20. BIN  assets/images/LINQPad_Simple_LINQ_Query_With_Where_Clause.png
  21. BIN  assets/images/Sessions.png
  22. BIN  assets/images/SimpleValidationError.png
  23. BIN  assets/images/WhoCanHelpLogo.png
  24. BIN  assets/images/bell.jpg
  25. BIN  assets/images/c4mvclogo.png
  26. BIN  assets/images/checkmark.png
  27. BIN  assets/images/wussy.png
15 _posts/2010-02-15-Blog.Start.md
View
@@ -0,0 +1,15 @@
+---
+layout: post
+image_root: "/assets/images/"
+title: "Blog.Start"
+author: "Eric Williams"
+categories: [musings]
+---
+
+<p>So let's see if this blogging thing will stick.</p>
+
+{% highlight c# %}
+var clever = false;
+Thoughts.ForEach(this.BlogIt);
+{% endhighlight %}
+
12 _posts/2010-03-08-Unit-Testing-Just-Do-It.md
View
@@ -0,0 +1,12 @@
+---
+layout: post
+image_root: "/assets/images/"
+title: "Unit Testing Just Do It"
+author: "Eric Williams"
+categories: [Continuous Improvement, Unit Testing]
+---
+
+<p>I used to be the ConsoleApplication132 type of developer and no big surprise my projects didn't have any unit tests in them, if any at all.&nbsp; To try and remedy this I took a 3 week TestProject1 challenge.&nbsp; Instead of doing quick spikes to a .NET console application to 'try something out' I spun up a Test Project.</p>
+<p><img class="imagefloatleft" title="bell4" alt="bell4" src="{{page.image_root}}bell.jpg" width="150" height="143"></p>
+<p>So where am I now?&nbsp; Well my stuff has tests, but I'm in some bell curve of using Mocks improperly and over specifying my tests.&nbsp; I really like the naming style of BDD but flirted around with class name test method convention is about as deep as I have got into that realm so far.</p>
+<p>... to be continued ... over many years, I'm sure ...</p>
13 _posts/2010-03-09-Asp-net-MVC-Session-State-Extension-Method.md
View
@@ -0,0 +1,13 @@
+---
+layout: post
+image_root: "/assets/images/"
+title: "Asp net MVC Session State Extension Method"
+author: "Eric Williams"
+categories: [Asp.Net MVC, Extension Methods]
+---
+
+<p>There are a few implementations of the conical wizard out there using Asp.net MVC.&nbsp; <a href="http://www.sessions.com/" target="_blank"><img class="imagefloatright" title="Sessions" src="{{page.image_root}}Sessions.png" alt="Sessions" width="189" height="160"></a>I'm working on a project where we are needing one such wizard and we're trying out using session state, not session skate, to keep the models that make up the larger data set persisted for the user until the final submission.</p>
+<p>This will allow the user to go back to any of the stages and edit the information if needed.&nbsp; There are are options but for now we're testing driving this approach.</p>
+<p>Inspired (<em>dang near a complete duplicate</em>) by <a href="http://blog.donnfelker.com/2010/02/25/asp-net-mvc-tempdata-extension-methods/" target="_blank">Donn Felker's <strong>ASP.NET MVC TempData Extension Methods</strong></a> I created one that uses <a href="http://msdn.microsoft.com/en-us/library/system.web.httpsessionstatebase.aspx" target="_blank">HttpSessionStateBase</a>.</p>
+
+<script src="https://gist.github.com/1307681.js"> </script>
24 _posts/2010-03-13-Checking-for-special-characters-using-LINQ.md
View
@@ -0,0 +1,24 @@
+---
+layout: post
+image_root: "/assets/images/"
+title: "Checking for special characters using LINQ"
+author: "Eric Williams"
+categories: []
+---
+
+<p><img class="imagefloatleft" title="wussy" src="{{page.image_root}}wussy.png" alt="wussy" width="240" height="82"></p>
+<p>Why on earth am I posting this?&nbsp; For the simple reason of hoping if I take the time to put it down on "paper" that I will never have a need to use such a thing again.&nbsp; Call it superstition.</p>
+<p>Here is some specific background of why this came about.&nbsp; A scenario came up where I was migrating some test data from one platform to another.&nbsp; Some of the source data was encrypted (even in test system) and for my destination system I didn't care about that data anyway.&nbsp; If I came across any of that encrypted information and would just put blanks in the destination.&nbsp; So in short if a string has special characters, nuke the data and write an empty string.</p>
+<p>For what ever reason I wasn't in a Regex mood and looked at LINQ for a solution.&nbsp; Plus it is migration code so who really cares how optimal it is.</p>
+<p>The first two lines of this extension method are something I read about and thought, "neat and when would I ever use it".&nbsp; Basically <a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx" target="_blank">Enumerable.Range</a> will give you a range of of numbers with a starting number and a count.</p>
+
+<blockquote><p>IEnumerable lowRange = Enumerable.Range(0, 32);</p></blockquote>
+<p>The next albeit messy part takes the input string and converts it to a character array then takes each character and converts it to is ascii code representation.</p>
+
+<blockquote><p>IEnumerable enumerable = value.ToCharArray().Select(x =&gt; Convert.ToInt32(((int)x).ToString()));</p></blockquote>
+
+<p>The last bit was even more obscure than the range bit. <a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.intersect.aspx" target="_blank">Enumerable.Intersect</a> "Produces the set intersection of two sequences."&nbsp; If you have two lists, {1,2,3} and {3,4,5} the resultant list will be 3 with a .Count() of 1.</p>
+
+<script src="https://gist.github.com/1307701.js"> </script>
+
+<p>This was may more of a post than I hoped but hopefully someone will find it useful and I'll will never have to think about it again!</p>
23 _posts/2010-03-22-C4MVC-Reason-42-to-Join.md
View
@@ -0,0 +1,23 @@
+---
+layout: post
+image_root: "/assets/images/"
+title: "C4MVC Reason 42 to Join"
+author: "Eric Williams"
+categories: [Asp.Net MVC, Continuous Improvement]
+---
+
+<p><img class="imagefloatright" src="{{page.image_root}}c4mvclogo.png" alt=""></p>
+<p>What is C4MVC? &nbsp;Well per the about us page it is:</p>
+<blockquote><p>Our Vision is to share knowledge and best practices around using the framework, as well as encourage community contributions that serve the greater good.</p>
+<p>Through interactive sessions, projects, and aggregated blog feeds we hope to provide:</p>
+<ul>
+<li>A way for new developers to use the framework the right way.</li>
+<li>Techniques and tools to allow experienced developers to develop with less friction.</li>
+<li>A self supporting community.</li>
+</ul>
+</blockquote>
+<p>Per my definition:</p>
+<blockquote><p>A virtual user group on&nbsp;Wednesday mornings&nbsp;where I can listen in on the Asp.Net MVC big guns discuss the topic of the framework that I need to learn better.</p></blockquote>
+<p><img class="imagefloatleft" src="http://www.motowilliams.com/wp-content/uploads/2010/03/somegrenade.png" alt=""><br>
+Besides the great free content such as last weeks<a href="http://www.c4mvc.net/Home/Events" target="_blank"> Advanced MVC2</a> topic sometimes, just sometimes, you can win some stuff. &nbsp;In my case, I loves me some 30 day subscription to <a href="http://www.tekpub.com/" target="_blank">TekPub</a> which also happens to have a lengthy&nbsp;<a href="http://www.tekpub.com/preview/aspmvc" target="_blank">Asp.NET MVC series</a>. Now the only problem I have is finding the correct window to pull the pin this content grenade so that I can put together 30 days of <s>face melting&nbsp;guitar&nbsp;solo</s> mind&nbsp;melding&nbsp;content&nbsp;assimilation. &nbsp;Parent of 3 (4 and under) makes that a <a href="http://www.davidco.com/what_is_gtd.php" target="_blank">GTD</a> challenge.</p>
+<p>The C4MVC.NET (google) group is open to anyone to <a href="http://groups.google.com/group/c4mvc" target="_blank">join</a> so come and <a href="http://groups.google.com/group/c4mvc" target="_blank">join</a> the group to get some good nuggets of Asp.net MVC knowledge on! &nbsp;No really, <a href="http://groups.google.com/group/c4mvc" target="_blank">join now</a>!</p>
40 _posts/2010-03-23-Extension-Methods-Improving-the-quality-of-Life.md
View
@@ -0,0 +1,40 @@
+---
+layout: post
+image_root: "/assets/images/"
+title: "Extension Methods Improving the quality of Life"
+author: "Eric Williams"
+categories: [Asp.Net MVC, Continuous Improvement, Extension Methods]
+---
+
+<p><img class="imagefloatright" src="{{page.image_root}}checkmark.png" alt=""><br>
+Extension methods, such a simple idea that can totally make the small things in your application or at least the un-<a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself" target="_blank">DRY</a> portions of it cleaner.</p>
+<h5>AddModelError and Multiple ValidationResults</h5>
+<p>Here is a simple example (taken from a custom model binder):</p>
+
+<script src="https://gist.github.com/1307757.js"> </script>
+
+<p>not too bad, but when working in a block of code where you might have a few instances of it you tend to see the noise a little bit.</p>
+
+<p>How about a little reduction and also centralize some logic so your entire code base can leverage it?</p>
+
+<script src="https://gist.github.com/1307762.js"> </script>
+
+<p>Now that everything you thought was upright in the world is all in question, ok, not really - not even close. In fact we've only saved three lines of code where such things are being used but I would argue if you try to keep small things like this in mind that over time your code base will start to reap the benefits.</p>
+<p>Here is how I implemented the extension method. Your mileage may vary.</p>
+
+<script src="https://gist.github.com/1307763.js"> </script>
+
+<h5>DataAnnotations and the Validator class</h5>
+<p>Another area that might not be Asp.net MVC specific is if you are using the DataAnnotaions directly on your models and you use the static Validator class to validation the model. In this case the TryValidateObject is being used for the bool that is returned from the operation.</p>
+
+<script src="https://gist.github.com/1307765.js"> </script>
+
+<p>I think I prefer this a little more</p>
+
+<script src="https://gist.github.com/1307768.js"> </script>
+
+<p>Where ValidateAnnotations is implemented as follows. Also you if you prefer to change the where this can be used you can change the accessibility or change what this method extends to limit it's exposure.</p>
+
+<script src="https://gist.github.com/1307769.js"> </script>
+
+<p>Hopefully these two little nuggets will help someone out. Both of these are just a means to end, where I think that end is a transformation to a code base even beyond simple changes like this. After all it is all about the journey not the destination.</p>
35 _posts/2010-03-30-Getting-started-with-MVCContrib-Filters.md
View
@@ -0,0 +1,35 @@
+---
+layout: post
+image_root: "/assets/images/"
+title: "Getting started with MVCContrib Filters"
+author: "Eric Williams"
+categories: [ActionFilters, Asp.Net MVC, MVCContrib]
+---
+
+<p>What is MVCContrib?&nbsp; MVCContrib is a open source project was designed to add functionality and ease-of-use to the out of the box experience of the ASP.NET MVC Framework.&nbsp; It kicks in where MVC on its own has left off.&nbsp; MVCContrib is hosted on CodePlex at <a href="http://mvccontrib.codeplex.com">http://mvccontrib.codeplex.com</a> and it also a <a href="http://codeplex.org/Galleries/ASPNETOpenSourceGallery/MVCContrib.aspx" target="_blank">CodePlex Foundation Project</a>.</p>
+<p>In this post I'm going to cover a couple of the Action Filters that are included with MVCContrib, <strong>ModelStateToTempData</strong> and <strong>PassParametersDuringRedirect</strong>.</p>
+<h4>ModelStateToTempData</h4>
+<p>When you have this filter decorating your action method (or at the controller level) you will get a behavior in which that when model state gets created post model binding you might have a state in which you want available to another action method.&nbsp; This happens when you are practicing the <a href="http://en.wikipedia.org/wiki/Post/Redirect/Get" target="_blank">Post-Redirect-Get Pattern (PRG)</a>.</p>
+<p>Let's say you have a CustomerEditModel that coming from a web form.&nbsp; You need a Post Action that takes in a CustomerEditModel and out of the box that DataAnnotations will engage and validate your model.&nbsp; Below is a model with two attributes, Required and DisplayName.&nbsp; <a href="http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html" target="_blank">Required may or may not be what you think it means</a> and DisplayName gives you an opportunity to give your labels a different name than from the reflected property type name when using the <a href="http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html" target="_blank">template helpers (go read Brad's series now).</a></p>
+
+<script src="https://gist.github.com/1307856.js"> </script>
+
+<p>Ok back to the story. When you submitted a nice clean valid model and you flow into the ModelState.IsValid block life is good. When you had some validation issues and you flow to the FixErrors RedirectToAction something particular needs to happen. ModelState has some your validation results that you will want to use to display validation hints back to your end users. The problem is that ModelState isn't carried over, without any intervention to the next Action method being called.</p>
+<h5>Enter the ModelStateToTempData Attribute</h5>
+<p>Add a [ModelStateToTempData] to the action method that the modelstate is being generated from, let's call it the sender, AND the action method that needs to use it, maybe call it the reciever?</p>
+
+<script src="https://gist.github.com/1307859.js"> </script>
+
+<p>What's happening on the sending side with these attributes is when a RedirectToRouteResult is returned from an action (in this case we're using RedirectToAction) any data that is the ModelState dictionary will be copied into TempData - A.U.T.O.M.A.T.I.C.A.L.L.Y. You don't have to manually do it yourself!</p>
+<p><img class="imagefloatleft" src="{{page.image_root}}SimpleValidationError.png"></p>
+<p>What's happening on the receiving side with these attributes is when a ViewResultBase is returned from an action (in this case we're using View) all the data that was previously put into TempData is copied out of TempData and put back into ModelState</p>
+<p>In this case since we're in the FixErrors action the errors that we just got back from the [ModelStateToTempData] attribute will be displayed on the user form. Additionally we're also getting back the values of the "bad submission" from the end user so that for non-trivial (or really any) forms they don't have to re-enter their data.</p>
+<h4>PassParametersDuringRedirect</h4>
+<p>Since we live in a perfect world and our information management is so well done that our users get all the forms filled out perfectly that that always drop into the ModelState.IsValid block every time. Maybe we can just render the view from there ... NO! My post, my rules. Thou shalt not render view from Post Methods. We have to PRG our way out of there. In this case we'd do something interesting with some persistence and then we'll take the user to a 'You Are <a href="http://www.urbandictionary.com/define.php?term=teh" target="_blank">Teh</a> <a href="http://www.tehawesome.net/" target="_blank">Awesome</a>' page.</p>
+<p>Let's take the same controller action methods but add one more attribute to them, [PassParametersDuringRedirect]</p>
+
+<script src="https://gist.github.com/1307864.js"> </script>
+
+<p>I'd like to point out that the difference between the two RedirectToAction call in the CreateCustomer Action Method. The second one, the one that ships with Asp.NET MVC and the first one has the nice expression in there. This is another nugget that comes with MVCContrib. This flavor of the RedirectToAction extension method will take in a an expression and make sure that the destination method will have the correct parameters passed to it.</p>
+<p>The new attribute added to the methods, [PassParametersDuringRedirect] is bringing some more pleasant PRG stuff to the controller. After the valid customer has been 'persisted' we want to show the user a Sucess page. In this case we want to show the model (or maybe another model with additional information) thus the method signature as so <strong>public ActionResult Success(CustomerEditModel customerEditModel)</strong>. This is very similar to the [ModelStateToTempData] behaviour.</p>
+<p>I hope this information has helped. Just until very recently I didn't know these things were in the MVCContrib project and now I have some code to delete from our current code base.</p>
24 _posts/2010-04-01-Stupid-Linq-Tricks-Record-Rollup.md
View
@@ -0,0 +1,24 @@
+---
+layout: post
+image_root: "/assets/images/"
+title: "Stupid Linq Tricks Record Rollup"
+author: "Eric Williams"
+categories: [Linq, So Eric Remembers]
+---
+
+<p>I've been in these situations too many times where I've had to receive a logical document and the "text" has been split across multiple items in a list. Most of the time it occurs with databases but I've had to do the same thing with B2B integrations with Xml too.</p>
+<p>Before Linq I'd end up with the prototypical <em>foreach</em> code but this last time I need to (re)solve such a problem Linq had since been born.</p>
+<p>Here is an example:</p>
+
+<script src="https://gist.github.com/1307866.js"> </script>
+
+<p>Big deal. What if you have a set of data that has multiple comments</p>
+
+<script src="https://gist.github.com/1307867.js"> </script>
+
+<p>Here are the static helper methods I used to kruft up some sample data if you would like to play around with these queries</p>
+
+<script src="https://gist.github.com/1307868.js"> </script>
+
+<p>I do realized that ORM and other database queries have the ability to do these aggregates for you. I was merely trying to point out some Linq tricks for those situations where you are dealing with objects and might not be in a data access situation.</p>
+
45 _posts/2010-04-17-LINQPad-with-Databases.md
View
@@ -0,0 +1,45 @@
+---
+layout: post
+image_root: "/assets/images/"
+title: "LINQPad with Databases"
+author: "Eric Williams"
+categories: [LINQPad, SQLite]
+---
+
+<p><a href="http://www.linqpad.net/">LINQPad</a> is a fantastic free utility from author and C# guru <a href="http://www.albahari.com/">Joesph Albahari</a>. Per the tag line on the LINQPad site "Kiss goodbye to SQL Management Studio!" and I would suggest that if you are a SQL Server Management Studio user and also interested in LINQ that you take the <a href="http://www.linqpad.net/Challenge.aspx">LINQPad Replacement Challenge</a>!</p>
+
+<p>I didn't even know about LINQPad until a few years ago when I got the (then 3.0) <a href="http://www.albahari.com/nutshell/">C# 4.0 in a Nutshell</a> book. It is one of those companion applications that plays a role in the book text and one of the important hooks between the book and the application is that when you registered your copy of the book with the site you received a code that enabled <a href="http://www.linqpad.net/Purchase.aspx">Autocompletion</a>. Not sure if that is still an option or not.</p>
+
+<p>So what the heck is it already? Well LINQPad is many things. It is an application that will allow you to run LINQ queries against a number of things, Objects, LINQ to SQL, Entity Framework, XML, WCF Data Services (OData), SQLite and MySQL as well as a few others. It has the <a href="http://www.sliver.com/dotnet/SnippetCompiler">Snippet Compiler</a> feel where you can write a couple of lines of code and F5 it to see what it does. All around a good LINQ-to-* learning tool.</p>
+
+<p>So show me the code already.</p>
+
+<p>First we need a data store to hook up to LINQPad. Let's have a little taste of <a href="http://www.sqlite.org">SQLite</a> for some sample data. I've download a local copy of SQLite and stubbed up a simple database called <strong>MyDatabase.db</strong>. SQLite has a command line syntax that you can look into. For the point of this post I started SQLite and used the .Read function and supplied a external file name with the contents of the file below.</p>
+
+<script src="https://gist.github.com/1307872.js"> </script>
+
+<p>Now start up LINQPad and click on the standard Add Connection function. Here you'll see a few nonstandard options, at least from the typical items you'd expect when you 'add a connection' from most other windows developer tools.</p>
+
+<p><img title="LINQPad_ChooseDataContext" alt="LINQPad_ChooseDataContext" src="{{page.image_root}}LINQPad_ChooseDataContext.png"></p>
+
+<p>If you click on the 'View more drivers...' button you'll find options for other third party LINQPad drivers. In this case we're looking for the SQlite drivers.</p>
+
+<p><img title="LINQPad_Choose_a_driver" alt="LINQPad_Choose_a_driver" src="{{page.image_root}}LINQPad_Choose_a_driver.png"></p>
+
+<p>The driver install for the SQLite driver was pretty slick and seem less and you'll end up with a third item in 'Build data context automatically' section. Select the IQ driver and the SQLite provider and the location of the SQLite database created earlier.</p>
+
+<p><img title="LINQPad_ChooseDataContext_SQLLite_Driver" alt="LINQPad_ChooseDataContext_SQLLite_Driver" src="{{page.image_root}}LINQPad_ChooseDataContext_SQLLite_Driver.png"></p>
+
+<p>Now you have an available connection to execute queries against. For the Visual Studio inclined this is the Server Explorer idea.</p>
+
+<p><img title="LINQPad_Current_Connections" alt="LINQPad_Current_Connections" src="{{page.image_root}}LINQPad_Current_Connections.png"></p>
+
+<p>Now for a couple of simple queries. The first one if probably the simplest query you could do. Selecting everything. Notice the handy output display it gives you.</p>
+
+<p><img title="LINQPad_Simple_LINQ_QueryAll" alt="LINQPad_Simple_LINQ_QueryAll" src="{{page.image_root}}LINQPad_Simple_LINQ_QueryAll.png"></p>
+
+<p>And this one has a simple filter to show how you can limit the data you want to return. Nothing but the serious folks listed here and also notice the SQL tab is selected to show you the SQL that is being executed against the given database.</p>
+
+<p><img title="LINQPad_Simple_LINQ_Query_With_Where_Clause" alt="LINQPad_Simple_LINQ_Query_With_Where_Clause" src="{{page.image_root}}LINQPad_Simple_LINQ_Query_With_Where_Clause.png"></p>
+
+<p>Hopefully this will give you enough of a taste to want to try it out for yourself.</p>
21 _posts/2010-05-06-I-Quit-My-Job-And-We-Are-Moving-Home-To-Montana.md
View
@@ -0,0 +1,21 @@
+---
+layout: post
+image_root: "/assets/images/"
+title: "I Quit My Job And We Are Moving Home To Montana"
+author: "Eric Williams"
+categories: [musings, tech]
+---
+
+<p>Today I gave my two weeks notice at the place I called home for what would have been 9 years in November. A small natural gas utility in Portland Oregon called NW Natural. Lots of good memories there and I learned at lot from a lot of very smart and talented people there. As a software developer I think I probably should have tried to exist stage right a few years ago but about that time I should have been doing that I met my wife and had three kids. This was the classical enterprise in every sense of the word and my transition to the new company is going to be quite the change for me. I'm going from 'customer' of the contracting firm to the 'contracting' firm itself.</p>
+
+<p><a href="http://intralogix.biz/" target="_blank"></a><a href="http://www.whocanhelp.com/" target="_blank"><img class="imagefloatright" title="Who Can Help" src="{{page.image_root}}WhoCanHelpLogo.png" alt="Who Can Help"></a></p>
+
+<p>With the help of twitter (wow, soak that in for a minute) I've made some networking connections with some folks back home. The single person instrumental in getting my family and I heading due east is Doug Odegaard <a href="http://twitter.com/dodegaard" target="_blank">@dodegaard</a> from <a href="http://intralogix.biz/" target="_blank">intraLogix</a> and <a href="http://www.whocanhelp.com/" target="_blank">Who Can Help</a>.</p>
+
+<p>That all so&nbsp;familiar story of&nbsp;developers getting connected on Twitter that we all know, turned into some Skype calls from time to time and having leads on positions in Montana sent my way. &nbsp;Just like you find your car keys in the last place you look - a recomendation from Doug turned into a first, second, third and fourth interview which left me with accepting a&nbsp;position as a <a href="http://en.wikipedia.org/wiki/Geospatial" target="_blank">Geospatial</a> Developer at <a title="Your Data. Smarter" href="http://www.gcs-research.com/" target="_blank">GCS Research</a> in <a href="http://en.wikipedia.org/wiki/Missoula,_Montana" target="_blank">Missoula Montana</a>.</p>
+
+<p><a title="Your Data. Smarter" href="http://www.gcs-research.com/" target="_blank"><img class="imagefloatleft" title="GCS Research" src="{{page.image_root}}GCSLogo.png" alt="GCS Research"></a></p>
+
+<p>I'm pretty exited about the new adventures ahead of me. Not working on the same systems year in and year out. Mostly greenfield apps and getting all-chips-in on the ESRI .NET stack with some smart, web and mobile clients.</p>
+
+<p>Now onto the small challenge of selling the house, packing up the wife, kids, dog and cat, moving 600 miles, finding a new place to live and ...</p>
9 _posts/2010-06-07-Internet-Explorer-is-like.md
View
@@ -0,0 +1,9 @@
+---
+layout: post
+image_root: "/assets/images/"
+title: "Internet Explorer is like"
+author: "Eric Williams"
+categories: [musings]
+---
+
+<p>Internet Explorer is like Wal-Mart, nobody likes it but it is very difficult to avoid.</p>
31 _posts/2012-06-30-Installing-the-Sublime-Text-2-Modific-Plugin.md
View
@@ -0,0 +1,31 @@
+---
+layout: post
+image_root: "/assets/images/"
+title: "Installing the Sublime Text 2 Modific plugin"
+author: "Eric Williams"
+categories: [code]
+---
+
+There really isn't enough nice things to say about [Sublime Text 2](http://www.sublimetext.com/). It is a nice [cross platform minimalist text editor](http://www.sublimetext.com/2) that seems to get things right. You can even install it Dropboxable aka Portable. So run, don't walk over to Crazy Larry's House of Editors and [get you some editor joy](http://www.sublimetext.com/buy).
+
+Since you are probably working on a [source file or two some of some flavor or another](https://github.com/languages/) you are probably using with source control. This will be the case if the file is important to you but we're not here today to talk about that. For the intent of this post you are using [git](http://git-scm.com/) and you are interesting in some lightweight status of your changes in-flight.
+
+[Oren Farhi (@orizens)](https://twitter.com/orizens) has a nice write up on what the [Modific](https://github.com/gornostal/Modific#readme) [plugin does](http://orizens.com/wp/topics/sublime-text-modific-plugin-changes-since-last-commit/). Go read that for the 'what it gives you' and we will finish up when you get back.
+
+## Install it already ##
+
+Sublime Text 2 and its [Sublime Package Control](http://wbond.net/sublime_packages/package_control) make this very easy.
+
+1. Open subl
+2. Open the Sublime Text 2 console. **View > Show Console** or **Ctrl+&#x60;**
+3. Paste the following (from [Sublime Package Control installation](http://wbond.net/sublime_packages/package_control/installation)):
+
+> import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation'
+
+4. Restart subl
+5. Open the Command Pallete aka package manager by **Tools > Command Palette** or **Ctrl+Shift+P**
+6. Type in **Package Control: Install Package** and press enter. The package list will refresh
+7. Type Modific and press enter
+8. Restart subl
+9. Open a file that is in a git repository
+10. Profit!
411 _posts/core-samples/2011-12-29-jekyll-introduction.md
View
@@ -1,411 +0,0 @@
----
-layout: post
-category : lessons
-tags : [intro, beginner, jekyll, tutorial]
----
-{% include JB/setup %}
-
-This Jekyll introduction will outline specifically what Jekyll is and why you would want to use it.
-Directly following the intro we'll learn exactly _how_ Jekyll does what it does.
-
-## Overview
-
-### What is Jekyll?
-
-Jekyll is a parsing engine bundled as a ruby gem used to build static websites from
-dynamic components such as templates, partials, liquid code, markdown, etc. Jekyll is known as "a simple, blog aware, static site generator".
-
-### Examples
-
-This website is created with Jekyll. [Other Jekyll websites](https://github.com/mojombo/jekyll/wiki/Sites).
-
-
-
-### What does Jekyll Do?
-
-Jekyll is a ruby gem you install on your local system.
-Once there you can call `jekyll --server` on a directory and provided that directory
-is setup in a way jekyll expects, it will do magic stuff like parse markdown/textile files,
-compute categories, tags, permalinks, and construct your pages from layout templates and partials.
-
-Once parsed, Jekyll stores the result in a self-contained static `_site` folder.
-The intention here is that you can serve all contents in this folder statically from a plain static web-server.
-
-You can think of Jekyll as a normalish dynamic blog but rather than parsing content, templates, and tags
-on each request, Jekyll does this once _beforehand_ and caches the _entire website_ in a folder for serving statically.
-
-### Jekyll is Not Blogging Software
-
-**Jekyll is a parsing engine.**
-
-Jekyll does not come with any content nor does it have any templates or design elements.
-This is a common source of confusion when getting started.
-Jekyll does not come with anything you actually use or see on your website - you have to make it.
-
-### Why Should I Care?
-
-Jekyll is very minimalistic and very efficient.
-The most important thing to realize about Jekyll is that it creates a static representation of your website requiring only a static web-server.
-Traditional dynamic blogs like Wordpress require a database and server-side code.
-Heavily trafficked dynamic blogs must employ a caching layer that ultimately performs the same job Jekyll sets out to do; serve static content.
-
-Therefore if you like to keep things simple and you prefer the command-line over an admin panel UI then give Jekyll a try.
-
-**Developers like Jekyll because we can write content like we write code:**
-
-- Ability to write content in markdown or textile in your favorite text-editor.
-- Ability to write and preview your content via localhost.
-- No internet connection required.
-- Ability to publish via git.
-- Ability to host your blog on a static web-server.
-- Ability to host freely on GitHub Pages.
-- No database required.
-
-# How Jekyll Works
-
-The following is a complete but concise outline of exactly how Jekyll works.
-
-Be aware that core concepts are introduced in rapid succession without code examples.
-This information is not intended to specifically teach you how to do anything, rather it
-is intended to give you the _full picture_ relative to what is going on in Jekyll-world.
-
-Learning these core concepts should help you avoid common frustrations and ultimately
-help you better understand the code examples contained throughout Jekyll-Bootstrap.
-
-
-## Initial Setup
-
-After [installing jekyll](/index.html#start-now) you'll need to format your website directory in a way jekyll expects.
-Jekyll-bootstrap conveniently provides the base directory format.
-
-### The Jekyll Application Base Format
-
-Jekyll expects your website directory to be laid out like so:
-
- .
- |-- _config.yml
- |-- _includes
- |-- _layouts
- | |-- default.html
- | |-- post.html
- |-- _posts
- | |-- 20011-10-25-open-source-is-good.markdown
- | |-- 20011-04-26-hello-world.markdown
- |-- _site
- |-- index.html
- |-- assets
- |-- css
- |-- style.css
- |-- javascripts
-
-
-- **\_config.yml**
- Stores configuration data.
-
-- **\_includes**
- This folder is for partial views.
-
-- **\_layouts**
- This folder is for the main templates your content will be inserted into.
- You can have different layouts for different pages or page sections.
-
-- **\_posts**
- This folder contains your dynamic content/posts.
- the naming format is required to be `@YEAR-MONTH-DATE-title.MARKUP@`.
-
-- **\_site**
- This is where the generated site will be placed once Jekyll is done transforming it.
-
-- **assets**
- This folder is not part of the standard jekyll structure.
- The assets folder represents _any generic_ folder you happen to create in your root directory.
- Directories and files not properly formatted for jekyll will be left untouched for you to serve normally.
-
-(read more: <https://github.com/mojombo/jekyll/wiki/Usage>)
-
-
-### Jekyll Configuration
-
-Jekyll supports various configuration options that are fully outlined here:
-<https://github.com/mojombo/jekyll/wiki/Configuration>
-
-
-
-
-## Content in Jekyll
-
-Content in Jekyll is either a post or a page.
-These content "objects" get inserted into one or more templates to build the final output for its respective static-page.
-
-### Posts and Pages
-
-Both posts and pages should be written in markdown, textile, or HTML and may also contain Liquid templating syntax.
-Both posts and pages can have meta-data assigned on a per-page basis such as title, url path, as well as arbitrary custom meta-data.
-
-### Working With Posts
-
-**Creating a Post**
-Posts are created by properly formatting a file and placing it the `_posts` folder.
-
-**Formatting**
-A post must have a valid filename in the form `YEAR-MONTH-DATE-title.MARKUP` and be placed in the `_posts` directory.
-If the data format is invalid Jekyll will not recognize the file as a post. The date and title are automatically parsed from the filename of the post file.
-Additionally, each file must have [YAML Front-Matter](https://github.com/mojombo/jekyll/wiki/YAML-Front-Matter) prepended to its content.
-YAML Front-Matter is a valid YAML syntax specifying meta-data for the given file.
-
-**Order**
-Ordering is an important part of Jekyll but it is hard to specify a custom ordering strategy.
-Only reverse chronological and chronological ordering is supported in Jekyll.
-
-Since the date is hard-coded into the filename format, to change the order, you must change the dates in the filenames.
-
-**Tags**
-Posts can have tags associated with them as part of their meta-data.
-Tags may be placed on posts by providing them in the post's YAML front matter.
-You have access to the post-specific tags in the templates. These tags also get added to the sitewide collection.
-
-**Categories**
-Posts may be categorized by providing one or more categories in the YAML front matter.
-Categories offer more significance over tags in that they can be reflected in the URL path to the given post.
-Note categories in Jekyll work in a specific way.
-If you define more than one category you are defining a category hierarchy "set".
-Example:
-
- ---
- title : Hello World
- categories : [lessons, beginner]
- ---
-
-This defines the category hierarchy "lessons/beginner". Note this is _one category_ node in Jekyll.
-You won't find "lessons" and "beginner" as two separate categories unless you define them elsewhere as singular categories.
-
-### Working With Pages
-
-**Creating a Page**
-Pages are created by properly formatting a file and placing it anywhere in the root directory or subdirectories that do _not_ start with an underscore.
-
-**Formatting**
-In order to register as a Jekyll page the file must contain [YAML Front-Matter](https://github.com/mojombo/jekyll/wiki/YAML-Front-Matter).
-Registering a page means 1) that Jekyll will process the page and 2) that the page object will be available in the `site.pages` array for inclusion into your templates.
-
-**Categories and Tags**
-Pages do not compute categories nor tags so defining them will have no effect.
-
-**Sub-Directories**
-If pages are defined in sub-directories, the path to the page will be reflected in the url.
-Example:
-
- .
- |-- people
- |-- bob
- |-- essay.html
-
-This page will be available at `http://yourdomain.com/people/bob/essay.html`
-
-
-**Recommended Pages**
-
-- **index.html**
- You will always want to define the root index.html page as this will display on your root URL.
-- **404.html**
- Create a root 404.html page and GitHub Pages will serve it as your 404 response.
-- **sitemap.html**
- Generating a sitemap is good practice for SEO.
-- **about.html**
- A nice about page is easy to do and gives the human perspective to your website.
-
-
-## Templates in Jekyll
-
-Templates are used to contain a page's or post's content.
-All templates have access to a global site object variable: `site` as well as a page object variable: `page`.
-The site variable holds all accessible content and metadata relative to the site.
-The page variable holds accessible data for the given page or post being rendered at that point.
-
-**Create a Template**
-Templates are created by properly formatting a file and placing it in the `_layouts` directory.
-
-**Formatting**
-Templates should be coded in HTML and contain YAML Front Matter.
-All templates can contain Liquid code to work with your site's data.
-
-**Rending Page/Post Content in a Template**
-There is a special variable in all templates named : `content`.
-The `content` variable holds the page/post content including any sub-template content previously defined.
-Render the content variable wherever you want your main content to be injected into your template:
-
-{% capture text %}...
-<body>
- <div id="sidebar"> ... </div>
- <div id="main">
- |.{content}.|
- </div>
-</body>
-...{% endcapture %}
-{% include JB/liquid_raw %}
-
-### Sub-Templates
-
-Sub-templates are exactly templates with the only difference being they
-define another "root" layout/template within their YAML Front Matter.
-This essentially means a template will render inside of another template.
-
-### Includes
-In Jekyll you can define include files by placing them in the `_includes` folder.
-Includes are NOT templates, rather they are just code snippets that get included into templates.
-In this way, you can treat the code inside includes as if it was native to the parent template.
-
-Any valid template code may be used in includes.
-
-
-## Using Liquid for Templating
-
-Templating is perhaps the most confusing and frustrating part of Jekyll.
-This is mainly due to the fact that Jekyll templates must use the Liquid Templating Language.
-
-### What is Liquid?
-
-[Liquid](https://github.com/Shopify/liquid) is a secure templating language developed by [Shopify](http://shopify.com).
-Liquid is designed for end-users to be able to execute logic within template files
-without imposing any security risk on the hosting server.
-
-Jekyll uses Liquid to generate the post content within the final page layout structure and as the primary interface for working with
-your site and post/page data.
-
-### Why Do We Have to Use Liquid?
-
-GitHub uses Jekyll to power [GitHub Pages](http://pages.github.com/).
-GitHub cannot afford to run arbitrary code on their servers so they lock developers down via Liquid.
-
-### Liquid is Not Programmer-Friendly.
-
-The short story is liquid is not real code and its not intended to execute real code.
-The point being you can't do jackshit in liquid that hasn't been allowed explicitly by the implementation.
-What's more you can only access data-structures that have been explicitly passed to the template.
-
-In Jekyll's case it is not possible to alter what is passed to Liquid without hacking the gem or running custom plugins.
-Both of which cannot be supported by GitHub Pages.
-
-As a programmer - this is very frustrating.
-
-But rather than look a gift horse in the mouth we are going to
-suck it up and view it as an opportunity to work around limitations and adopt client-side solutions when possible.
-
-**Aside**
-My personal stance is to not invest time trying to hack liquid. It's really unnecessary
-_from a programmer's_ perspective. That is to say if you have the ability to run custom plugins (i.e. run arbitrary ruby code)
-you are better off sticking with ruby. Toward that end I've built [Mustache-with-Jekyll](http://github.com/plusjade/mustache-with-jekyll)
-
-
-## Static Assets
-
-Static assets are any file in the root or non-underscored subfolders that are not pages.
-That is they have no valid YAML Front Matter and are thus not treated as Jekyll Pages.
-
-Static assets should be used for images, css, and javascript files.
-
-
-
-
-## How Jekyll Parses Files
-
-Remember Jekyll is a processing engine. There are two main types of parsing in Jekyll.
-
-- **Content parsing.**
- This is done with textile or markdown.
-- **Template parsing.**
- This is done with the liquid templating language.
-
-And thus there are two main types of file formats needed for this parsing.
-
-- **Post and Page files.**
- All content in Jekyll is either a post or a page so valid posts and pages are parsed with markdown or textile.
-- **Template files.**
- These files go in `_layouts` folder and contain your blogs **templates**. They should be made in HTML with the help of Liquid syntax.
- Since include files are simply injected into templates they are essentially parsed as if they were native to the template.
-
-**Arbitrary files and folders.**
-Files that _are not_ valid pages are treated as static content and pass through
-Jekyll untouched and reside on your blog in the exact structure and format they originally existed in.
-
-### Formatting Files for Parsing.
-
-We've outlined the need for valid formatting using **YAML Front Matter**.
-Templates, posts, and pages all need to provide valid YAML Front Matter even if the Matter is empty.
-This is the only way Jekyll knows you want the file processed.
-
-YAML Front Matter must be prepended to the top of template/post/page files:
-
- ---
- layout: post
- category : pages
- tags : [how-to, jekyll]
- ---
-
- ... contents ...
-
-Three hyphens on a new line start the Front-Matter block and three hyphens on a new line end the block.
-The data inside the block must be valid YAML.
-
-Configuration parameters for YAML Front-Matter is outlined here:
-[A comprehensive explanation of YAML Front Matter](https://github.com/mojombo/jekyll/wiki/YAML-Front-Matter)
-
-#### Defining Layouts for Posts and Templates Parsing.
-
-The `layout` parameter in the YAML Front Matter defines the template file for which the given post or template should be injected into.
-If a template file specifies its own layout, it is effectively being used as a `sub-template.`
-That is to say loading a post file into a template file that refers to another template file with work in the way you'd expect; as a nested sub-template.
-
-
-
-
-
-## How Jekyll Generates the Final Static Files.
-
-Ultimately, Jekyll's job is to generate a static representation of your website.
-The following is an outline of how that's done:
-
-1. **Jekyll collects data.**
- Jekyll scans the posts directory and collects all posts files as post objects. It then scans the layout assets and collects those and finally scans other directories in search of pages.
-
-2. **Jekyll computes data.**
- Jekyll takes these objects, computes metadata (permalinks, tags, categories, titles, dates) from them and constructs one
- big `site` object that holds all the posts, pages, layouts, and respective metadata.
- At this stage your site is one big computed ruby object.
-
-3. **Jekyll liquifies posts and templates.**
- Next jekyll loops through each post file and converts (through markdown or textile) and **liquifies** the post inside of its respective layout(s).
- Once the post is parsed and liquified inside the the proper layout structure, the layout itself is "liquified".
- **Liquification** is defined as follows: Jekyll initiates a Liquid template, and passes a simpler hash representation of the ruby site object as well as a simpler
- hash representation of the ruby post object. These simplified data structures are what you have access to in the templates.
-
-3. **Jekyll generates output.**
- Finally the liquid templates are "rendered", thereby processing any liquid syntax provided in the templates
- and saving the final, static representation of the file.
-
-**Notes.**
-Because Jekyll computes the entire site in one fell swoop, each template is given access to
-a global `site` hash that contains useful data. It is this data that you'll iterate through and format
-using the Liquid tags and filters in order to render it onto a given page.
-
-Remember, in Jekyll you are an end-user. Your API has only two components:
-
-1. The manner in which you setup your directory.
-2. The liquid syntax and variables passed into the liquid templates.
-
-All the data objects available to you in the templates via Liquid are outlined in the **API Section** of Jekyll-Bootstrap.
-You can also read the original documentation here: <https://github.com/mojombo/jekyll/wiki/Template-Data>
-
-## Conclusion
-
-I hope this paints a clearer picture of what Jekyll is doing and why it works the way it does.
-As noted, our main programming constraint is the fact that our API is limited to what is accessible via Liquid and Liquid only.
-
-Jekyll-bootstrap is intended to provide helper methods and strategies aimed at making it more intuitive and easier to work with Jekyll =)
-
-**Thank you** for reading this far.
-
-## Next Steps
-
-Please take a look at [{{ site.categories.api.first.title }}]({{ BASE_PATH }}{{ site.categories.api.first.url }})
-or jump right into [Usage]({{ BASE_PATH }}{{ site.categories.usage.first.url }}) if you'd like.
BIN  assets/images/GCSLogo.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  assets/images/LINQPad_ChooseDataContext.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  assets/images/LINQPad_ChooseDataContext_SQLLite_Driver.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  assets/images/LINQPad_Choose_a_driver.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  assets/images/LINQPad_Current_Connections.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  assets/images/LINQPad_Simple_LINQ_QueryAll.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  assets/images/LINQPad_Simple_LINQ_Query_With_Where_Clause.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  assets/images/Sessions.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  assets/images/SimpleValidationError.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  assets/images/WhoCanHelpLogo.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  assets/images/bell.jpg
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  assets/images/c4mvclogo.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  assets/images/checkmark.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  assets/images/wussy.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Please sign in to comment.
Something went wrong with that request. Please try again.