Chime isn’t that Charming

I have been using GotoMeeting, Webex, Hangout, and Skype for group conferencing.  So when Amazon comes out with a video conferencing tool, I am excited to try…. until I see the pricing and features.

The pros include skipping of PIN and use of different devices (mobile / desktop) for the meeting.


Chime is available in three editions:

  • Amazon Chime Basic allows you make 1:1 voice and video calls, and to use chat and chat rooms, on all your devices
  • Amazon Chime Plus adds the ability for you to share your screen during meetings, and enables integration with your company directory
  • Amazon Chime Pro offers the full set of features for online meetings, including scheduling and hosting meetings, recording meetings, and personalized meeting URLs, for up to 100 people.

The basic edition should be FREE.  But it offers 1:1? no screen sharing?

Sorry, that kind of video conferencing solution may attract big corporation, but it is not charming any new budget users.

Dynamics CRM 2016 Installation within Hyper-V virtual machine

When I tried to install it, I kept getting SQL Server logical consistency I/O error.

The solution:

  1. Uninstall Dynamics CRM 2016. 
  2. Delete the MSCRM databases.
  3. Install Dynamics CRM 2016 again.  This time, there should be no logical consistency I/O errors.


I think the logical consistency I/O errors are caused by the virtual hard disk being a dynamic growing one instead of a fixed one or a pass-through one.

In fact, it is better to create a fixed size virtual hard disk for SCSI controller.  It is better for SQL hard drive performance.

Asp.Net MVC Multiple types were found that match the controller named ‘xxxx’


I received the following error after I created a new project with a different name NewProject (with the the codes) and deployed to the same web site.


Multiple types were found that match the controller named ‘xxxx’. This can happen if the route that services this request (‘{id}’) does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the ‘MapRoute’ method that takes a ‘namespaces’ parameter.
The request for ‘xxxx’ has found the following matching controllers:



If you rename your web app project and deploy, you may get the same error.


It occurred because OldProject.WebApp.dll files still exist in the deploy folder “bin”.  Once I delete those old project dll files, no more errors.

ASP.NET MVC Route–If {controller} does not exist, uses a different route

Often we have a default route like the following in RouteConfig.cs:

   1: routes.MapRoute(

   2:   name: "Default",

   3:   url: "{controller}/{action}/{id}",

   4:   defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

   5: );

If you don’t have anything route before and after this, then pretty much any url will match this default route.  For example, “


However, even though the route matches, the controller may not exist and a 404 error result.  In other words, “id888” is not a controller.  Let’s say id888 is {id}.

Now you can handle the missing controller error in code.  The catchall route does not really apply because this is not an unmatched route problem.


You can do something more flexible, like specifying an alternative route to use if the controller is missing.

   1: // using ICP.CustomRouting extension  MapReplaceableRoute() and AlternativeRoute

   2: // The route is replaceable in the sense that if the controller does not exist, it will use specified AlternativeRoute

   3: var defaultRoute = routes.MapReplaceableRoute(

   4:     name: "Default",

   5:     url: "{controller}/{action}/{id}",

   6:     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

   7: );



  10: // must come before the Default Map Route

  11: var shortUrlRoute = routes.MapRoute(

  12:     name: "Short Url",

  13:     url: "{id}",

  14:     defaults: new { controller = "L", action = "Index" }

  15: );


  17: // specify the alternative route to use if the matched route's controller does not exist

  18: defaultRoute.AlternativeRoute = shortUrlRoute;

In summary,

  1. Downloaded the source code project
  2. Referenced it in the web app project
  3. RouteConfig.cs: add “using ICP.CustomRouting;” and code like above.

Now my controller L action Index will handle the string “id888” argument.

Also, nuget routedebugger is a great way to troubleshoot MVC routes.


Read Siyamand’s blog post for details and code.

ASP.NET MVC The provided anti-forgery token was meant for a different claims-based user …



  1. Navigate to Login page.
  2. Login as user A
  3. Press browser’s Back button to navigate to Login page ahead.
  4. Login as user B

“the provided anti-forgery token was meant for a different claims-based user” error.



One simple solution that works for me is to disable the caching of the login page.

   1: //

   2: // GET: /Account/Login

   3: [AllowAnonymous]

   4: // disable caching on login page to avoid "the provided anti-forgery token was meant for a different claims-based user"

   5: [OutputCache(NoStore = true, Location = OutputCacheLocation.None)]

   6: public ActionResult Login(string returnUrl)

   7: {



How to Have a Good Day Tip #1: How to Handle Bad News/Emails


  • “Reading just one negative email could lead you to report having a bad day hours later”
  • “Even if you have one good and one bad [email], the bad always seem more powerful,”
  • “The same goes with reading stressful or negative news”


  • Minimize the time spent on reading news. 
  • Focus on the uplifting stories.  Skip the bad ones by reading headlines only and not reading the details.
  • Take two minutes to draft a positive email to someone in your social support network.  For example, thank a friend/family member or praise a colleague on their recent work.


Install Fresh Windows 10 Pro on Yoga 910


If you want to do a clean install of Windows 10 Professional edition on your Yoga 910, you need to be aware of a few things.  In my case, I am using an iso image from MSDN.

  1. I use Rufus to create a bootable USB flash drive with the Windows 10 Professional iso image. 
  2. I used MBR partition schem for UEFI
  3. I picked File system FAT32
  4. After the USB drive is ready, I created a txt file ei.cfg to USB drive “sources” folder.  ei.cfg has the following content.  This file allows to me to install Professional edition instead of the default choice of Home edition.
  5.    1: [EditionID]

       2: Professional

       3: [Channel]

       4: Retail

  6. I downloaded the storage driver.  I need the driver to see the ssd drive.
  7. Download the  Once unzipped, you should see the following files:
    • iaAHCIC.inf
    • iaStorAC.inf
    • iaStorA.sys
    • iaStorF.sys
  8. I copy these files to the USB drive root folder.
  9. Note: Lenovo support site links to the SetupRST.exe version, which is not what we need.
  10. Then press the tiny Novo button, go to boot menu, select the USB drive to boot.
  11. During the Windows setup, I “Load driver” and choose the storage driver at the USB root folder.

Special thanks to Brad’s hacks guide for the tips.  For me, the Media Creation Tool did not work.  So I used Rufus with my own iso image.

If you create a recovery drive (e.g. USB), you should also put the storage drivers onto it.  You won’t see the drive until you do a work around.  You need to choose the option restore from a system image, which will allow you to load a driver.  Pick iaStoreAC.inf.  Then cancel, now you can recover using the recovery drive.  In my case, it wiped everything.  It did not have the installed windows update nor installed Office 2016.