<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.1.1">Jekyll</generator><link href="http://localhost:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://localhost:4000/" rel="alternate" type="text/html" /><updated>2020-08-16T08:26:53-06:00</updated><id>http://localhost:4000/feed.xml</id><title type="html">Eric Will Code for Coffee</title><subtitle>This is the personal blog of Eric Hoff</subtitle><entry><title type="html">Moved to Jekyll</title><link href="http://localhost:4000/docker/2020/08/16/moving-to-jekyll.html" rel="alternate" type="text/html" title="Moved to Jekyll" /><published>2020-08-16T00:00:00-06:00</published><updated>2020-08-16T00:00:00-06:00</updated><id>http://localhost:4000/docker/2020/08/16/moving-to-jekyll</id><content type="html" xml:base="http://localhost:4000/docker/2020/08/16/moving-to-jekyll.html">&lt;p&gt;After getting a little tired of constantly getting hacked I’ve left WordPress for
the Jekyll static site generator. It imported WordPress pretty easily.&lt;/p&gt;

&lt;p&gt;I’ve still got some more stuff to learn but long-term this will be a lot easier to
maintain.&lt;/p&gt;</content><author><name>{&quot;display_name&quot;=&gt;&quot;Eric&quot;, &quot;login&quot;=&gt;&quot;eric&quot;, &quot;email&quot;=&gt;&quot;eric@willcodeforcoffee.com&quot;, &quot;url&quot;=&gt;&quot;&quot;}</name><email>eric@willcodeforcoffee.com</email></author><category term="Docker" /><summary type="html">Tired of having Word</summary></entry><entry><title type="html">ERR_EMPTY_RESPONSE connecting to a Docker container in Chrome</title><link href="http://localhost:4000/docker/2017/12/13/err_empty_response-connecting-to-a-docker-container-in-chrome.html" rel="alternate" type="text/html" title="ERR_EMPTY_RESPONSE connecting to a Docker container in Chrome" /><published>2017-12-13T14:31:26-07:00</published><updated>2017-12-13T14:31:26-07:00</updated><id>http://localhost:4000/docker/2017/12/13/err_empty_response-connecting-to-a-docker-container-in-chrome</id><content type="html" xml:base="http://localhost:4000/docker/2017/12/13/err_empty_response-connecting-to-a-docker-container-in-chrome.html">&lt;p&gt;
  When you get this error it means you've exposed the right port in your
  Dockerfile, but you have to make sure the app within your container is binding
  to 0.0.0.0 instead of localhost or 127.0.0.1.
&lt;/p&gt;
&lt;p&gt;
  I got this error using Angular CLI's &lt;em&gt;ng serve&lt;/em&gt; within a container. I
  had to add &lt;strong&gt;--host=0.0.0.0&lt;/strong&gt; to the ENTRYPOINT arguments. If
  you're using a different framework check for a similar command-line argument,
  configuration parameter or setting.
&lt;/p&gt;</content><author><name>{&quot;display_name&quot;=&gt;&quot;Eric&quot;, &quot;login&quot;=&gt;&quot;eric&quot;, &quot;email&quot;=&gt;&quot;eric@willcodeforcoffee.com&quot;, &quot;url&quot;=&gt;&quot;&quot;}</name><email>eric@willcodeforcoffee.com</email></author><category term="Docker" /><summary type="html">You've exposed the correct port but the app within the container must bind to requests from all IPs using IP address 0.0.0.0 instead of localhost or 127.0.0.1.</summary></entry><entry><title type="html">Dotnet Core Build Error in Docker: Resource file “**/*.resx” cannot be found</title><link href="http://localhost:4000/asp.net/.net/software%20development/docker/2017/09/23/dotnet-core-build-error-resx-cannot-be-found.html" rel="alternate" type="text/html" title="Dotnet Core Build Error in Docker: Resource file “**/*.resx” cannot be found" /><published>2017-09-23T14:47:13-06:00</published><updated>2017-09-23T14:47:13-06:00</updated><id>http://localhost:4000/asp.net/.net/software%20development/docker/2017/09/23/dotnet-core-build-error-resx-cannot-be-found</id><content type="html" xml:base="http://localhost:4000/asp.net/.net/software%20development/docker/2017/09/23/dotnet-core-build-error-resx-cannot-be-found.html">&lt;p&gt;
  While building my
  &lt;a href=&quot;https://github.com/willcodeforcoffee/hapthorn&quot;
    &gt;new .NET Core project&lt;/a
  &gt;
  using Docker I ran into an error with the two stage build:
&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;
    /usr/share/dotnet/sdk/2.0.0/Microsoft.Common.CurrentVersion.targets(2924,5):
    error MSB3552: Resource file &quot;**/*.resx&quot; cannot be found.
    [/Hapthorn.csproj]&lt;br /&gt;
    The command '/bin/sh -c dotnet publish -c Release -o out' returned a
    non-zero code: 1
  &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
  The problem it turned out was that while trying to tune my Dockerfile I'd
  accidentally removed the WORKDIR directive. As a result MSBuild was
  interpreting the *.resx as an absolute path instead of a grouping/collection
  directive.
&lt;/p&gt;
&lt;p&gt;
  To fix it I put back in a WORKDIR /src directive in my
  &lt;a
    href=&quot;https://github.com/willcodeforcoffee/hapthorn/blob/master/Hapthorn/Dockerfile&quot;
    &gt;Dockerfile&lt;/a
  &gt;.
&lt;/p&gt;
&lt;p&gt;Quick and easy!&lt;/p&gt;</content><author><name>{&quot;display_name&quot;=&gt;&quot;Eric&quot;, &quot;login&quot;=&gt;&quot;eric&quot;, &quot;email&quot;=&gt;&quot;eric@willcodeforcoffee.com&quot;, &quot;url&quot;=&gt;&quot;&quot;}</name><email>eric@willcodeforcoffee.com</email></author><category term="ASP.NET" /><category term=".NET" /><category term="Software Development" /><category term="Docker" /><summary type="html">I accidentally deleted the WORKDIR directive from my Dockerfile.</summary></entry><entry><title type="html">What is the difference between NPM and Bower?</title><link href="http://localhost:4000/front-end/2015/10/23/what-is-the-difference-between-npm-and-bower.html" rel="alternate" type="text/html" title="What is the difference between NPM and Bower?" /><published>2015-10-23T23:08:52-06:00</published><updated>2015-10-23T23:08:52-06:00</updated><id>http://localhost:4000/front-end/2015/10/23/what-is-the-difference-between-npm-and-bower</id><content type="html" xml:base="http://localhost:4000/front-end/2015/10/23/what-is-the-difference-between-npm-and-bower.html">&lt;p&gt;
  &lt;a href=&quot;https://www.npmjs.com/&quot; target=&quot;_blank&quot;&gt;NPM&lt;/a&gt; is is a package
  manager for &lt;a href=&quot;https://nodejs.org/&quot; target=&quot;_blank&quot;&gt;NodeJS&lt;/a&gt;. It
  installs packages so that they can be used with Node applications using the
  Node require() keyword. NPM uses a repository of NPM packages, similar to the
  &lt;a href=&quot;https://www.nuget.org/&quot; target=&quot;_blank&quot;&gt;NuGet Gallery&lt;/a&gt; package
  repository.
&lt;/p&gt;
&lt;p&gt;
  &lt;a href=&quot;http://bower.io/&quot; target=&quot;_blank&quot;&gt;Bower,&lt;/a&gt; on the other hand, calls
  itself &quot;A package manager for the web&quot;. Bower installs front-end frameworks
  for your website. Bower doesn't have a repository and can grab packages from
  many places, most notably straight from GitHub!
&lt;/p&gt;
&lt;p&gt;
  &lt;!--more--&gt;Use NPM for installing Node packages, things that will be used on
  the server-side, app building process. Things like:
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Gulp, Grunt, build tools&lt;/li&gt;
  &lt;li&gt;
    CSS Preprocessors (LESS, SASS) Minimization tools, build tool utilities
  &lt;/li&gt;
  &lt;li&gt;Express, web server frameworks&lt;/li&gt;
  &lt;li&gt;Testing frameworks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, Bower is installed using NPM.&lt;/p&gt;
&lt;p&gt;
  Use Bower for installing front-end packages that are actually used within your
  application on the client-side. Things like:
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;jQuery, Underscore, Lodash and other libraries.&lt;/li&gt;
  &lt;li&gt;Angular, Backbone, front-end frameworks&lt;/li&gt;
  &lt;li&gt;Bootstrap, Foundation, Font-AWesome and front-end stylesheets&lt;/li&gt;
&lt;/ul&gt;</content><author><name>{&quot;display_name&quot;=&gt;&quot;Eric&quot;, &quot;login&quot;=&gt;&quot;eric&quot;, &quot;email&quot;=&gt;&quot;eric@willcodeforcoffee.com&quot;, &quot;url&quot;=&gt;&quot;&quot;}</name><email>eric@willcodeforcoffee.com</email></author><category term="Front-end" /><summary type="html">NPM is is a package manager for NodeJS. It installs packages so that they can be used with Node applications using the Node require() keyword. NPM uses a repository of NPM packages, similar to the NuGet Gallery package repository. Bower, on the other hand, calls itself &quot;A package manager for the web&quot;. Bower installs front-end frameworks for your website. Bower doesn't have a repository and can grab packages from many places, most notably straight from GitHub! Use NPM for installing Node packages, things that will be used on the server-side, app building process. Things like: Gulp, Grunt, build tools CSS Preprocessors (LESS, SASS) Minimization tools, build tool utilities Express, web server frameworks Testing frameworks For example, Bower is installed using NPM. Use Bower for installing front-end packages that are actually used within your application on the client-side. Things like: jQuery, Underscore, Lodash and other libraries. Angular, Backbone, front-end frameworks Bootstrap, Foundation, Font-AWesome and front-end stylesheets</summary></entry><entry><title type="html">Advice for .NET Web Developers: Learn the command-line!</title><link href="http://localhost:4000/asp.net/.net/asp.next/html/2015/04/01/advice-for-net-web-developers-learn-the-command-line.html" rel="alternate" type="text/html" title="Advice for .NET Web Developers: Learn the command-line!" /><published>2015-04-01T20:47:48-06:00</published><updated>2015-04-01T20:47:48-06:00</updated><id>http://localhost:4000/asp.net/.net/asp.next/html/2015/04/01/advice-for-net-web-developers-learn-the-command-line</id><content type="html" xml:base="http://localhost:4000/asp.net/.net/asp.next/html/2015/04/01/advice-for-net-web-developers-learn-the-command-line.html">&lt;p&gt;
  Visual Studio has spoiled us .NET developers. In Visual Studio we have a GUI
  that does everything for us: compiling, source-control, editing, you don't
  even have to remember class or method names because of auto-complete and
  parameter guessing! It is all there and it holds your hand and it feels safe
  and easy.
&lt;/p&gt;
&lt;p&gt;
  The next version of ASP.NET is going to use a lot of the web functionality
  that many .NET devs have never seen: &lt;a href=&quot;https://www.npmjs.com/&quot;&gt;NPM&lt;/a&gt;,
  &lt;a href=&quot;http://bower.io/&quot;&gt;Bower&lt;/a&gt;, &lt;a href=&quot;http://gruntjs.com/&quot;&gt;Grunt&lt;/a&gt;,
  and others. Visual Studio will probably cover the front-end of those things,
  but it will be invaluable for you to learn them the way they were meant to be
  used: from the command-line.
&lt;/p&gt;</content><author><name>{&quot;display_name&quot;=&gt;&quot;Eric&quot;, &quot;login&quot;=&gt;&quot;eric&quot;, &quot;email&quot;=&gt;&quot;eric@willcodeforcoffee.com&quot;, &quot;url&quot;=&gt;&quot;&quot;}</name><email>eric@willcodeforcoffee.com</email></author><category term="ASP.NET" /><category term=".NET" /><category term="ASP.Next" /><category term="HTML" /><summary type="html">Visual Studio has spoiled us .NET developers. In Visual Studio we have a GUI that does everything for us: compiling, source-control, editing, you don't even have to remember class or method names because of auto-complete and parameter guessing! It is all there and it holds your hand and it feels safe and easy. The next version of ASP.NET is going to use a lot of the web functionality that many .NET devs have never seen: NPM, Bower, Grunt, and others. Visual Studio will probably cover the front-end of those things, but it will be invaluable for you to learn them the way they were meant to be used: from the command-line.</summary></entry><entry><title type="html">Agile and Unit Testing</title><link href="http://localhost:4000/design%20patterns/architecture/software%20development/2014/09/19/agile-and-unit-testing.html" rel="alternate" type="text/html" title="Agile and Unit Testing" /><published>2014-09-19T15:57:15-06:00</published><updated>2014-09-19T15:57:15-06:00</updated><id>http://localhost:4000/design%20patterns/architecture/software%20development/2014/09/19/agile-and-unit-testing</id><content type="html" xml:base="http://localhost:4000/design%20patterns/architecture/software%20development/2014/09/19/agile-and-unit-testing.html">&lt;p&gt;
  &lt;a href=&quot;http://en.wikipedia.org/wiki/Unit_testing&quot; target=&quot;_blank&quot;
    &gt;Unit Tests&lt;/a
  &gt;
  are the backbone of
  &lt;a
    title=&quot;Agile Principles&quot;
    href=&quot;http://agilemanifesto.org/principles.html&quot;
    target=&quot;_blank&quot;
    &gt;Agile&lt;/a
  &gt;
  development. Unit Tests ensure that you are done making a &quot;unit&quot; of a program,
  that a change or refactoring you have done to a &quot;unit&quot; has not broken the
  program, and they also help to ensure that you are not over-programming -
  creating more than you needed to in the wrong place.
&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;
  I didn't always understand this,
  &lt;a
    href=&quot;http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd&quot;
    target=&quot;_blank&quot;
    &gt;but Uncle Bob&lt;/a
  &gt;
  is probably the best at explaining it when he does
  &lt;a
    href=&quot;http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata&quot;
    target=&quot;_blank&quot;
    &gt;The Bowling Game Kata&lt;/a
  &gt;. You should also read
  &lt;a
    href=&quot;http://www.amazon.ca/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882&quot;
    target=&quot;_blank&quot;
    &gt;Clean Code&lt;/a
  &gt;
  if you haven't already.
&lt;/p&gt;
&lt;p&gt;
  &lt;a
    href=&quot;http://blog.8thlight.com/uncle-bob/2013/09/23/Test-first.html&quot;
    target=&quot;_blank&quot;
    &gt;Read Test First&lt;/a
  &gt;:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Tests are Specs - they define the behavior of the system.&lt;/li&gt;
  &lt;li&gt;
    Tests are part of the system - The definition of the system's behavior (see
    #1) makes the system. You don't have a system without the Tests, and you
    aren't fulfilling the spec without the passing test.
  &lt;/li&gt;
  &lt;li&gt;
    Tests ensure Simple Design - You always write the simplest code to make the
    spec test pass. You aren't &lt;em&gt;allowed&lt;/em&gt; to write more if you're
    following the
    &lt;a
      href=&quot;http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd&quot;
      target=&quot;_blank&quot;
      &gt;&quot;3 Rules of TDD&quot;&lt;/a
    &gt;.
  &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
  Unit Testing isn't a natural thing for me, probably also for you. It is a
  habit that I have to stay in, and that I have to force myself to conform to. I
  start out with the idea in my head. I know what I need. Putting it into the
  form of a test takes extra time I don't have. Or so it seems.
&lt;/p&gt;
&lt;p&gt;
  Once I'm in the habit, and I'm working on a codebase that already makes
  testing easy then the tests get easier to write and the code gets easier to
  maintain. I think Uncle Bob is right: your software will not look like it was
  written by a craftsman until you're writing &lt;em&gt;good&lt;/em&gt; tests.
&lt;/p&gt;</content><author><name>{&quot;display_name&quot;=&gt;&quot;Eric&quot;, &quot;login&quot;=&gt;&quot;eric&quot;, &quot;email&quot;=&gt;&quot;eric@willcodeforcoffee.com&quot;, &quot;url&quot;=&gt;&quot;&quot;}</name><email>eric@willcodeforcoffee.com</email></author><category term="Design Patterns" /><category term="Architecture" /><category term="Software Development" /><summary type="html">Unit Tests are the backbone of Agile development. Unit Tests ensure that you are done making a &quot;unit&quot; of a program, that a change or refactoring you have done to a &quot;unit&quot; has not broken the program, and they also help to ensure that you are not over-programming - creating more than you needed to in the wrong place. I didn't always understand this, but Uncle Bob is probably the best at explaining it when he does The Bowling Game Kata. You should also read Clean Code if you haven't already. Read Test First: Tests are Specs - they define the behavior of the system. Tests are part of the system - The definition of the system's behavior (see #1) makes the system. You don't have a system without the Tests, and you aren't fulfilling the spec without the passing test. Tests ensure Simple Design - You always write the simplest code to make the spec test pass. You aren't allowed to write more if you're following the &quot;3 Rules of TDD&quot;. Unit Testing isn't a natural thing for me, probably also for you. It is a habit that I have to stay in, and that I have to force myself to conform to. I start out with the idea in my head. I know what I need. Putting it into the form of a test takes extra time I don't have. Or so it seems. Once I'm in the habit, and I'm working on a codebase that already makes testing easy then the tests get easier to write and the code gets easier to maintain. I think Uncle Bob is right: your software will not look like it was written by a craftsman until you're writing good tests.</summary></entry><entry><title type="html">64-bit Mobile</title><link href="http://localhost:4000/hardware/mobile/2013/10/23/64-bit-mobile.html" rel="alternate" type="text/html" title="64-bit Mobile" /><published>2013-10-23T14:05:44-06:00</published><updated>2013-10-23T14:05:44-06:00</updated><id>http://localhost:4000/hardware/mobile/2013/10/23/64-bit-mobile</id><content type="html" xml:base="http://localhost:4000/hardware/mobile/2013/10/23/64-bit-mobile.html">&lt;p&gt;
  Probably the least interesting and noticed and talked about feature of the new
  iPhone 5S and iPad is the 64-bit A7 processor.&lt;br /&gt;
  I guess it had to happen eventually but why now? Maybe this is to get Apple
  ready to ditch Intel for desktop and move into A* processors across the board?
&lt;/p&gt;</content><author><name>{&quot;display_name&quot;=&gt;&quot;Eric&quot;, &quot;login&quot;=&gt;&quot;eric&quot;, &quot;email&quot;=&gt;&quot;eric@willcodeforcoffee.com&quot;, &quot;url&quot;=&gt;&quot;&quot;}</name><email>eric@willcodeforcoffee.com</email></author><category term="Hardware" /><category term="Mobile" /><summary type="html">Probably the least interesting and noticed and talked about feature of the new iPhone 5S and iPad is the 64-bit A7 processor. I guess it had to happen eventually but why now? Maybe this is to get Apple ready to ditch Intel for desktop and move into A* processors across the board?</summary></entry><entry><title type="html">What is MVC vs. MVVM Pattern</title><link href="http://localhost:4000/design%20patterns/architecture/software%20development/2013/06/12/what-is-mvc-vs-mvvm-pattern.html" rel="alternate" type="text/html" title="What is MVC vs. MVVM Pattern" /><published>2013-06-12T18:07:46-06:00</published><updated>2013-06-12T18:07:46-06:00</updated><id>http://localhost:4000/design%20patterns/architecture/software%20development/2013/06/12/what-is-mvc-vs-mvvm-pattern</id><content type="html" xml:base="http://localhost:4000/design%20patterns/architecture/software%20development/2013/06/12/what-is-mvc-vs-mvvm-pattern.html">&lt;p&gt;
  How do you compare the
  &lt;a
    title=&quot;MVC in Wikipedia...&quot;
    href=&quot;http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&quot;
    target=&quot;_blank&quot;
    &gt;Model-View-Controller (MVC)&lt;/a
  &gt;
  design pattern with the
  &lt;a
    title=&quot;MVVM in Wikipedia...&quot;
    href=&quot;http://en.wikipedia.org/wiki/Model_View_ViewModel&quot;
    target=&quot;_blank&quot;
    &gt;Model-View-ViewModel (MVVM)&lt;/a
  &gt;
  design pattern? What is the difference between the MVC and MVVM design
  patterns? I'll try to explain here.
&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;
  The most obvious answer, and the most over-simplified answer is that MVC is
  primarily a server-side programming pattern, while MVVM is more often a
  client-side pattern.
&lt;/p&gt;
&lt;p&gt;
  MVVM is concerned with keeping the View up-to-date with the server data in the
  Model and ViewModel. The ViewModel is a special object separate from the Model
  (though not always). In a web app using MVVM the Model usually represents the
  data on a server, while the ViewModel is the data on the client. MVVM often
  also uses the
  &lt;a
    title=&quot;Observer Pattern at Wikipedia...&quot;
    href=&quot;http://en.wikipedia.org/wiki/Observer_pattern&quot;
    target=&quot;_blank&quot;
    &gt;Observer pattern&lt;/a
  &gt;
  to keep the View in sync with the ViewModel data that backs it up, and the
  same for the ViewModel and Model. When a change in the Model or ViewModel data
  is observed the View will refresh itself to show the latest Model data.
  Likewise, when a form is used in the View to update the Model these changes
  can be passed back to the Model on the server immediately.
&lt;/p&gt;
&lt;p&gt;
  MVC is an application structure that is a little more complicated than that.
  MVC uses a Controller to populate a Model and give it to the View for the View
  to display. MVC usually also has a few other components in it like a Router to
  activate different Controllers and Binders to create Models and populate the
  values from a client (like a web browser).
&lt;/p&gt;
&lt;p&gt;
  The obvious difference is the C in MVC: the Controller object which changes
  and manages the Model and View. In MVC the Controller is arguably the smartest
  component of the three, while in MVVM the components are more interlocked
  because changes to one automatically affect the other. The Controller is
  responsible for creating the Model and choosing the View. The View will
  consume the Model data to display. Likewise when returning data (say a POST
  from a web browser form) the Router will pick the Controller to activate and
  create a Model based on the data coming back from the View and give it to the
  Controller to use. The Controller will then do some work.
&lt;/p&gt;
&lt;p&gt;
  Sometimes MVVM and MVC design patterns are used together, MVVM on the client
  and MVC on the server.
&lt;/p&gt;
&lt;p&gt;
  MVC sounds more complicated, but actually in the end we have so many helper
  frameworks that implementing MVC or MVVM becomes almost trivial. I don't think
  either Design Pattern is better than the other, so you should learn them both
  and choose to use the best fit for your technology stack and situation.
&lt;/p&gt;</content><author><name>{&quot;display_name&quot;=&gt;&quot;Eric&quot;, &quot;login&quot;=&gt;&quot;eric&quot;, &quot;email&quot;=&gt;&quot;eric@willcodeforcoffee.com&quot;, &quot;url&quot;=&gt;&quot;&quot;}</name><email>eric@willcodeforcoffee.com</email></author><category term="Design Patterns" /><category term="Architecture" /><category term="Software Development" /><summary type="html">How do you compare the Model-View-Controller (MVC) design pattern with the Model-View-ViewModel (MVVM) design pattern? What is the difference between the MVC and MVVM design patterns? I'll try to explain here. The most obvious answer, and the most over-simplified answer is that MVC is primarily a server-side programming pattern, while MVVM is more often a client-side pattern. MVVM is concerned with keeping the View up-to-date with the server data in the Model and ViewModel. The ViewModel is a special object separate from the Model (though not always). In a web app using MVVM the Model usually represents the data on a server, while the ViewModel is the data on the client. MVVM often also uses the Observer pattern to keep the View in sync with the ViewModel data that backs it up, and the same for the ViewModel and Model. When a change in the Model or ViewModel data is observed the View will refresh itself to show the latest Model data. Likewise, when a form is used in the View to update the Model these changes can be passed back to the Model on the server immediately. MVC is an application structure that is a little more complicated than that. MVC uses a Controller to populate a Model and give it to the View for the View to display. MVC usually also has a few other components in it like a Router to activate different Controllers and Binders to create Models and populate the values from a client (like a web browser). The obvious difference is the C in MVC: the Controller object which changes and manages the Model and View. In MVC the Controller is arguably the smartest component of the three, while in MVVM the components are more interlocked because changes to one automatically affect the other. The Controller is responsible for creating the Model and choosing the View. The View will consume the Model data to display. Likewise when returning data (say a POST from a web browser form) the Router will pick the Controller to activate and create a Model based on the data coming back from the View and give it to the Controller to use. The Controller will then do some work. Sometimes MVVM and MVC design patterns are used together, MVVM on the client and MVC on the server. MVC sounds more complicated, but actually in the end we have so many helper frameworks that implementing MVC or MVVM becomes almost trivial. I don't think either Design Pattern is better than the other, so you should learn them both and choose to use the best fit for your technology stack and situation.</summary></entry><entry><title type="html">The Android Advantage</title><link href="http://localhost:4000/reviews/mobile/2013/06/03/the-android-advantage.html" rel="alternate" type="text/html" title="The Android Advantage" /><published>2013-06-03T19:32:57-06:00</published><updated>2013-06-03T19:32:57-06:00</updated><id>http://localhost:4000/reviews/mobile/2013/06/03/the-android-advantage</id><content type="html" xml:base="http://localhost:4000/reviews/mobile/2013/06/03/the-android-advantage.html">&lt;p&gt;
  Last November I had to trade in my LG Windows Phone 7 phone. Unfortunately I
  was a month early for the new wave of Windows Phone 8 phones, so I ended up
  going the safe route and getting a Samsung Galaxy S3. To me there is one thing
  that sets Android based phones head-and-shoulders above the iPhone and Windows
  Phone competitors.
&lt;/p&gt;
&lt;p&gt;&lt;!--more--&gt;&lt;/p&gt;
&lt;p&gt;That advantage is replaceable on-screen keyboards.&lt;/p&gt;
&lt;p&gt;
  I've used iPhone keyboards, Windows keyboards, stock Android keyboards and
  they all usually suck. They're awful. They guess the wrong words,
  &lt;a href=&quot;http://www.damnyouautocorrect.com/&quot; target=&quot;_blank&quot;
    &gt;&quot;auto-correct&quot; the wrong words&lt;/a
  &gt;, and generally do not make typing on the phone a happy experience.
&lt;/p&gt;
&lt;p&gt;
  But I after using the trial version I bought
  &lt;a href=&quot;http://www.swiftkey.net/en/&quot; target=&quot;_blank&quot;&gt;SwiftKey&lt;/a&gt; and haven't
  looked back since. Its made typing and working possible on my phone. Now I
  can't go back to Windows because of it!
&lt;/p&gt;
&lt;p&gt;
  I hope that in the future Microsoft will allow on-screen keyboard changes for
  both Windows 8 and Windows Phone. It would make all the difference for me. I'd
  love to be able to use a good keyboard with Word and Skydrive on my phone
  again!
&lt;/p&gt;</content><author><name>{&quot;display_name&quot;=&gt;&quot;Eric&quot;, &quot;login&quot;=&gt;&quot;eric&quot;, &quot;email&quot;=&gt;&quot;eric@willcodeforcoffee.com&quot;, &quot;url&quot;=&gt;&quot;&quot;}</name><email>eric@willcodeforcoffee.com</email></author><category term="Reviews" /><category term="Mobile" /><summary type="html">Last November I had to trade in my LG Windows Phone 7 phone. Unfortunately I was a month early for the new wave of Windows Phone 8 phones, so I ended up going the safe route and getting a Samsung Galaxy S3. To me there is one thing that sets Android based phones head-and-shoulders above the iPhone and Windows Phone competitors. That advantage is replaceable on-screen keyboards. I've used iPhone keyboards, Windows keyboards, stock Android keyboards and they all usually suck. They're awful. They guess the wrong words, &quot;auto-correct&quot; the wrong words, and generally do not make typing on the phone a happy experience. But I after using the trial version I bought SwiftKey and haven't looked back since. Its made typing and working possible on my phone. Now I can't go back to Windows because of it! I hope that in the future Microsoft will allow on-screen keyboard changes for both Windows 8 and Windows Phone. It would make all the difference for me. I'd love to be able to use a good keyboard with Word and Skydrive on my phone again!</summary></entry><entry><title type="html">How do I parse HTML in C# using Regular Expressions</title><link href="http://localhost:4000/asp.net/architecture/html/2012/01/18/how-do-i-parse-html-in-c-using-regular-expressions.html" rel="alternate" type="text/html" title="How do I parse HTML in C# using Regular Expressions" /><published>2012-01-18T20:03:51-07:00</published><updated>2012-01-18T20:03:51-07:00</updated><id>http://localhost:4000/asp.net/architecture/html/2012/01/18/how-do-i-parse-html-in-c-using-regular-expressions</id><content type="html" xml:base="http://localhost:4000/asp.net/architecture/html/2012/01/18/how-do-i-parse-html-in-c-using-regular-expressions.html">&lt;p&gt;
  I ran into an interesting problem yesterday. All I wanted to do was some
  simple tokenizing of a partial HTML document, an HTML fragment (it was article
  content from the website I work on) based on certain elements. At first it
  seemed like a really simple string manipulation thing, but quickly blew out of
  proportion into something crazy.
&lt;/p&gt;
&lt;p&gt;
  &lt;!--more--&gt;In short,
  &lt;a
    title=&quot;This really made me laugh&quot;
    href=&quot;http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454&quot;
    target=&quot;_blank&quot;
    &gt;never ever never use Regexes&lt;/a
  &gt;
  or anything else to parse HTML. To do so is to descend into madness. HTML is
  not simple text, it has structure. Even simple fragments have structure to
  them that cannot be identified simply through token parsing.
&lt;/p&gt;
&lt;p&gt;
  Always &lt;strong&gt;always &lt;em&gt;always&lt;/em&gt;&lt;/strong&gt; use an HTML parser, such as the
  &lt;a
    title=&quot;To the CodePlex site...&quot;
    href=&quot;http://htmlagilitypack.codeplex.com/&quot;
    target=&quot;_blank&quot;
    &gt;Html Agility Pack&lt;/a
  &gt;. That is what I did. The parser created the document and tokenized
  everything for me and from there I was able to parse and manipulate the node
  tree to match the requirements we had.
&lt;/p&gt;
&lt;p&gt;Never use anything else if you can avoid it.&lt;/p&gt;</content><author><name>{&quot;display_name&quot;=&gt;&quot;Eric&quot;, &quot;login&quot;=&gt;&quot;eric&quot;, &quot;email&quot;=&gt;&quot;eric@willcodeforcoffee.com&quot;, &quot;url&quot;=&gt;&quot;&quot;}</name><email>eric@willcodeforcoffee.com</email></author><category term="ASP.NET" /><category term="Architecture" /><category term="HTML" /><summary type="html">At first it seemed like a really simple string manipulation thing, but quickly blew out of proportion into something crazy.</summary></entry></feed>