Wednesday, December 31, 2014

I read an article online about the Great Firewall of China yesterday.

It seems that most of Google is now blocked there (Red China) with only about a fifth of the people being able to access it. This is really hurting business... er, well, at least it's irritating business people and making them cranky. Most of social media is forbidden too. China has its own thing (I can't recall the name) which it pushes people to use in lieu of Facebook and Twitter and China itself censors descent against the government at its own thing. The only social media still allowed is LinkedIn and in order for it to be acceptable it had to work out an arrangement with China wherein it self-censored some content on Tiananmen Square's history.

In attempting to add a plain Jane .html page in Visual Studio, I found the option for .html comically hard to find.

I right-clicked in the Solution Explorer and picked "Add" from the menu that appeared and "New Item..." from the menu that unfolded below that. I found the .html option under "Markup" under "Web" under "Visual C#" and I spent ten seconds searching so that merits spending a minute or three on this blog posting right?

Monday, December 29, 2014

the "Settings" table

I recalled this morning demoing an application for others which had a Settings table with many columns for random things like "what should the SMTP server be?" and one and only one row full of the settings. It was pointed out to be that this was really a goofy design as I'd have to change the table all the time to add new settings and that really a better format might be a table with a different row for each setting. :P

Friday, December 26, 2014

when a name is an adjective

Alright, I've just made it home from seeing the film "The Imitation Game" and some of my confusion regarding the use of Alan Turing's surname as an adjective has been alleviated. It didn't make sense to me for the longest time because it can mean two different things depending upon the context just as the term Boolean which comes from George Boole can mean two different things, namely and/or/not in 3D graphics or true/false in variables in code. I was building my own little theory that Turing meant "of cryptography" but it doesn't mean that at all as it turns out. In the case of a Turing machine, the machine is a computer. It's that simple. Turing machines are not the subset of all machines which are "of cryptography" but instead, more plainly, they are the subset of all machines which are computers. This is stated outright in the end notes of the movie I just saw. The other, different case is one of a Turing test which is a test to see if a subject is a person or a machine based upon interactions with it, the subject. There is some talk of these sorts of tests in the movie and I recalled another movie, Blade Runner, in which Harrison Ford's character gives Sean Young's character such a test and deduces that she is a machine.

Later on in the film, Sean Young, disillusioned, depressed, and realizing that she is a machine, turns around and asks Harrison Ford if he has ever given himself his own test heavily implying something! WAS DECKARD A REPLICANT? Meh, I digress.

Thursday, December 25, 2014

Type "view source" in at the app store at your iPhone and you'll see many tools you may download to view the HTML source at an iPhone's Safari browser.

I've always wondered how easy it would be to see into a Web SQL database at a web clip. I haven't per say found an app that will let me do so yet but it is a little hard to imagine it's impossible to do so.

XML stands for extensible markup language but what is extensible about it?

You can take some of the markup and easily change it up or shove new gunk into it, but you can say that about HTML too. What is extensible about XML that is not extensible about HTML? Perhaps it opens the gateway to extensibility for other stuff in empowering SOAP messaging. Whatever. Merry Christmas.

Saturday, December 20, 2014

disenchantment with Entity Framework 5 Code First stuff

I've rather lazily been tinkering on a GitHub project which uses the Entity Framework 5 code first stuff. I was all in love with this stuff because when you went to populate a database table and the table didn't exist, it just made the table! Well, I've finally gotten around to introducing a second database-hydrated object to my application and it turns out that it is not that simple after all. If you add an object in this manner to an empty database things work great, but if you try to add a second object you'll see an error like so:

Additional information: The model backing the 'CampaignContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

 
 

In my case, my first object was called Person and my second object was called Campaign and the two don't even join to each other in any way, but the presence of a Persons table makes it impossible to add a Campaigns table. This and this touch on the official workarounds and this suggests that if you do things the way you're supposed to that you may have NHibernate-style lazy loading. I ended up just making two separate databases with the two separate objects and then using Red Gate SQL Compare 11 to make a SQL script that I could run to spin up a schema with both objects. That accommodated the creating of both objects, error-free. The whole inherit-from-DbMigration trick (the official workaround) sure looks to me like it breaks the Don't Repeat Yourself rule in that you have to update your class that inherits from DbMigration whenever you also update your objects. An example of this might be adding another field to an object and having to add another column to the database at the class you have inheriting from DbMigration. The first of the links I share in this post also eludes to the need to have a separate console application independent of your real application for spinning up the database. Dirty! What a dream-crushing shutdown.

I sink. I'm crestfallen. I don't know what I'm going to do when I actually bring relational data into my app.

Friday, December 19, 2014

hard and soft controls for adjusting audio at an iPhone

Today's story:

  • Just two days ago I upgraded the iOS on my iPhone 4S to 8.1.2 (12B440) and found that video clips at YouTube (which now must be downloaded separate of default, baked-in apps) and Vine played audio at muted levels.
  • I found the soft control for the audio levels (a slider at "Sounds" under "Settings") and cranked it up, but this still did not return things to full blast (welcome to my world).
  • I convinced myself that there must be a second slider somewhere for video and when I couldn't Google my way into finding it I broke down and went to the Apple store today. It was pointed out to me that the physical volume control at the upper left of my phone was the other, hard control for audio and I was able to "turn things up to ten" by pressing its buttons.
  • I've had my phone for three years now and I had completely forgotten that the physical controls were even there because I never adjust them. If you make the big leap from 5.1.1 (9B206) to 8.1.2 (12B440) like I just did you may find the setting for the physical audio controls reset to a midstream default!

Thursday, December 18, 2014

censorship?

Someone or some organization has hacked Sony and leaked a bunch of gossipy emails about what a pain it is to work with certain celebrities embarrassing executives at Sony. There is analysis to suggest the government of North Korea is behind it all! It's hard to imagine that Sony would be targeted just because North Korea would find the comedic film "The Interview" about a plot to meet Kim Jong-un and...

"Take him out!" so offensive that it merits this sort of orchestration, but the same analysis pointing the finger at North Korea suggests this is the reason behind everything and as a result Sony isn't going to release "The Interview" on Christmas Day because they don't want anyone who attempts to see the movie to get hurt by terrorists retaliating in either a cyber sense or a more sinister way. What is really going on? I think it stinks that a Hollywood film (millions of dollars in production costs) has been shelved. I recall after 9/11 the Arnold Schwarzenegger film "Collateral Damage" (not his best work) was withheld from release for many months as its subject matter was about terrorism. When that awful movie finally was allowed to see the light of day I ran out and saw it and if "The Interview" ever becomes consumable I'll consume it too. What is really going on? Is this just what it appears to be on the surface?

Git Flow

I found this slide from this talk on my phone this morning and now I wish I had shared it earlier.

All of the main line commits in blue are development releases, each with a new version number, paralleled by a development branch in purple. You still check into a development branch before you go home for the day no matter what and hence the development branch is always going to be a little nasty and cowboyesque. The sea green or teal color is a release branch wherein a development branch's code is going spruced up a little bit before it gets merged into the main line where it becomes (ta-da) a versioned release of the software. The red is for a bug fix. In staring at the notes I scribbled down for the talk I can tell that I did not come away from the talk with guidance as to what the green branches are. If memory serves these are tangential development branches off the main (purple) development branch.

Wednesday, December 17, 2014

I suppose any exception that you're gonna hide from the public should be logged.

If you have a web site which attempts to send an email and just tells users that it can't in the event of the catch half of a try/catch wrapping the attempt to send mail being used, you probably should still be doing something with the exception instead of just swallowing it. This is a time to log!

Tuesday, December 16, 2014

Send an email via IMAP from C#! (compatible downwards to the 3.5 Framework, but assuming an Outlook server)

using System.Net;
using Microsoft.Exchange.WebServices.Data;
namespace AdministrableApplication.Email
{
   public class EmailFacilitator
   {
      public void Send()
      {
         ExchangeService service = new ExchangeService();
         service.Credentials = new NetworkCredential("me@example.com", "abc123",
               "outlook.whatever.com");
         service.TraceEnabled = true;
         service.AutodiscoverUrl("me@example.com", RedirectionCallback);
         EmailMessage message = new EmailMessage(service);
         message.Subject = "Can you see this?";
         message.Body = "Please write me back if you got this!";
         message.ToRecipients.Add("tomjaeschke@tomjaeschke.com");
         message.SendAndSaveCopy();
      }
      
      static bool RedirectionCallback(string url)
      {
         return url.ToLower().StartsWith("https://");
      }
   }
}

 
 

The following links helped me figure this out:

 
 

I originally got the project from here for the Microsoft.Exchange.WebServices.Data namespace which I then bolting into an existing solution in Visual Studio, but then I also ended up getting it anew from here when I got this error:

Could not find any resources appropriate for the specified culture or the neutral culture. Make sure \"Microsoft.Exchange.WebServices.Strings.resources\" was correctly embedded or linked into assembly \"Microsoft.Exchange.WebServices.Data\" at compile time, or that all the satellite assemblies required are loadable and fully signed.

 
 

Again, I got the error using the first of the two here links above and I got around the error by using the later. Yet, another error I then hit looked like this:

Autodiscover blocked a potentially insecure redirection to https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml. To allow Autodiscover to follow the redirection, use the AutodiscoverUrl(string, AutodiscoverRedirectionUrlValidationCallback) overload.

 
 

The line which looks like...

service.AutodiscoverUrl("me@example.com", RedirectionCallback);

 
 

...in my above code had to be rewritten to its current shape as it originally looked like so...

service.AutodiscoverUrl("me@example.com");

 
 

...bringing in the static method which also had to be added in. This fix got me around this second pitfall.

Saturday, December 13, 2014

Specify the port when sending an email with an SmtpClient in C#?

SmtpClient smtpAgent = new SmtpClient();
smtpAgent.Host = "smtp.example.com";
smtpAgent.Port = 587;

Friday, December 12, 2014

I saw Jeffrey Palermo speak on "Iteration Zero" at the Austin .NET User Group Monday night.

Iteration zero is, as the name suggests, a leg of work before the first iteration of development on an application. It conceptually has a let's-set-things-up-right theme to it and it's sort of akin to laying down that blanket in a field before you set down everything else in a picnic as if you skip that step and just set food on the ground you may find ants crawling into the jam. There are things you can do upfront to set yourself up for success and if you just skip these things... the bugs get in. Jeffrey touched on the six pillars of Software Configuration Management as suggested in "Configuration Management Best Practices: Practical Methods That Work In The Real World" by Bob Aiello and Leslie Sachs which are:

  1. Source code management
  2. Build engineering
  3. Environment configuration
  4. Change control
  5. Release engineering
  6. Deployment

Only the first half of these really have to do with iteration zero. If you squint your eyes this first half (as a whole) should look like continuous integration to you and perhaps half of the talk focused on continuous integration. Jeffrey name-dropped another book: "Continuous Integration" by Paul M. Duvall ...JetBrains TeamCity is what his company Clear Measure uses for checking to see if a build script needs to be run every sixty seconds and then kicking off builds when GIT repositories have indeed changed and the Psake PowerShell approach to build scripts of James Kovacs is his preferred way of doing what everyone used to do with NAnt. There was a chunk of the presentation where Jeffrey showed off his canned, tweak-me-from-project-to-project Psake script which you can see for yourself here, and there was a chunk of the presentation where Jeffrey spoke to good practices in setting up a folder structure at a GIT repository (put the source code in a "src" folder in the root and not directly in the root itself), and there was a chunk of the presentation where Jeffrey went over the benefits of Onion Architecture. A lot of this is his "greatest hits" stuff covered elsewhere already on this blog. So what did I hear that was new?

  • He suggested that AliaSQL is the new Tarantino Project. It looks like you may get it at NuGet. This touches on what that's all about and why you should care.
  • Entity Framework 7 will not support anything from the prior versions. It will be a completely new animal, and with regards to the Onion Architecture this is a perfect example of why you should decouple your data integration from your core logic. MVC6 is going to be built out on top of the Web API stuff and will abandon the prior MVC architecture leaving no way to upport (making my own word up) the prior versions of MVC to it. This is a great reason to decouple your user interface implementation from your core logic.
  • Trello was suggested to be a good Kanban visualization tool as was JIRA, though JIRA sorta sounded second best.

In circling back to "Iteration Zero" thematically, the things to do upfront before you start writing code for the stories in the first sprint are:

  1. Set up your code base with the Onion Architecture.
  2. Set up source control for your code base.
  3. Set up continuous integration and use a tool like AliaSQL to roll out database changes as a part of that.

Thursday, December 11, 2014

It appears that not all paths through a C# method must return the return type if they instead throw an exception.

This is handy and good to know. You don't have to immediately follow up the line which throws the exception with a silly line that returns something which will never get run.

Wednesday, December 10, 2014

ThreatMetrix

...is a fraud protection service.

Natively compiled stored procedures look the same in SSMS but compile to .dll files on disk and thus take up disk space.

One needs to angst over if one has enough memory when using these. There is a performance payoff to make the worry worth it all.

white-space: pre-wrap;

...when placed on a pre tag will allow the pre tag to be set to a fixed width and force content inside to wrap to the next line. HOWEVER, spaces will still be respected normally within the pre tag.

an example of using a Java Bean

This .jsp page is gonna say: "My dog has fleas."

<%--
   Document : whatmydoghas
   Created on : Dec 10, 2014, 8:03:01 AM
   Author : tjaeschke
--%>
 
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>What My Dog Has</title>
   </head>
   <body>
      <h1>What My Dog Has</h1>
      <jsp:useBean id="lentil" scope="page" class="whatever.Lentil" />
      <jsp:setProperty name="lentil" property="owner" value="dog" />
      <jsp:setProperty name="lentil" property="possessions" value="fleas" />
      <jsp:getProperty name="lentil" property="sentance" />
   </body>
</html>

 
 

It's gonna use this Java Bean to craft the sentance.

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package whatever;
 
/**
 *
 * @author tjaeschke
 */
public class Lentil {
   private String owner;
   private String possessions;
 
   public void setOwner(String owner) {
      this.owner = owner;
   }
 
   public void setPossessions(String possessions) {
      this.possessions = possessions;
   }
 
   public String getSentance(){
      return "My " + owner + " has " + possessions + ".";
   }
}

 
 

If the values are left off of the set tags in the .jsp page, Java will attempt to find request variables of the same names as the variables to set and hand in their values to the Bean. The presence of both a request variable and an inline value seemed to cause Java to blow up when I experimented with it.

Tuesday, December 9, 2014

Setup a passcode at an iPhone 4S.

Per this I went to:

Settings > General > Passcode Lock > Turn Passcode On

 
 

One may turn the passcode feature back off in the same place. My phone has iOS version 5.1.1 (9B206) still I should caution.

Make XML-within-HTML display well in .jsp/Java content.

Inspired by this, I started a .jsp page like so:

<%@page import="org.owasp.encoder.Encode"%>
<%@page import="java.io.StringReader"%>
<%@page import="java.io.StringWriter"%>
<%@page import="javax.xml.transform.OutputKeys"%>
<%@page import="javax.xml.transform.Source"%>
<%@page import="javax.xml.transform.Transformer"%>
<%@page import="javax.xml.transform.TransformerFactory"%>
<%@page import="javax.xml.transform.stream.StreamResult"%>
<%@page import="javax.xml.transform.stream.StreamSource"%>

 
 

I then quickly break into Java at the top of the .jsp page before getting into significant HTML content. Amongst the stuff in Java is this blob of code which takes in an existing string called xml, reshapes it, and assigns it to a request attribute called xml also. The majority of this is shamelessly stolen from this.

Source xmlInput = new StreamSource(new StringReader(xml));
StringWriter stringWriter = new StringWriter();
StreamResult xmlOutput = new StreamResult(stringWriter);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute("indent-number", 5);
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(xmlInput, xmlOutput);
xml = xmlOutput.getWriter().toString();
request.setAttribute("xml", Encode.forHtml(xml));

 
 

I render the request attribute like so and I want to stress that the pre tag is required and without it all the work done so far becomes moot.

<pre>${xml}</pre>

 
 

It turns out that this line...

transformer.transform(xmlInput, xmlOutput);

...has to be wrapped in a try/catch if you implement it in a plain Jane Java class instead of a .jsp page. They may be made like this:

 
 

try
{
   transformer.transform(xmlInput, xmlOutput);
}
catch(Throwable t)
{
   String whatever = t.toString();
}

String foo = Integer.toString(bar);

Is an example of casting an int type to a String type in Java.

BigDecimal in Java

public void whatever(BigDecimal amount) {

When attempting to call a method like this, you will need at the top of your file...

 
 

import java.math.BigDecimal;

...or...

<%@page import="java.math.BigDecimal"%>

 
 

You will find that you will not be able to just hand in a float for a BigDecimal like so:

whatever(13.42);

 
 

Instead, you'll have to do something like this:

whatever(new BigDecimal(13.42));

the SMART acronym for writing requirements

  • Specific
  • Measurable
  • Attainable
  • Relevant
  • Testable

Monday, December 8, 2014

React when a dropdown menu changes with jQuery!

$(function() {
   $("#template").bind("change", function(){
      window.location = "foo.jsp?bar=" + $(this).find(':selected').val();
   });
});

.ToLower() is to C# what .toLowerCase() is to Java.

alright?

A double-slash in a URL is largely harmless.

These two behave the same in that they both work:

 
 

...however I also found a thread here which suggests that a double-slash may confuse Google when it attempts to crawl your website.

desaturate

...in a Photoshop context might mean to drop the color from an image and make it black and white. Any one color on the RGB scale has a saturation level. Unsaturated colors are grey scale colors, but the more saturation a color has the closer it is to a bright, vivid, and unmuddied color.

We can edit and upload Vines now?

That sucks. It kinda ruins it for me. I liked how they were in the moment and of the moment.

Sunday, December 7, 2014

I may need to write some C# code which sends email via IMAP instead of SMTP.

That means an SmtpClient implemenation like this is out and per this there is not a way do the IMAP stuff baked into C# itself. I'll have to use a third party library. Suggestions at the Stack Overflow thread include:

death march

Wikipedia says: "In project management, a death march is a project where the members feel it is destined to fail, or requires a stretch of unsustainable overwork."

Friday, December 5, 2014

the explosion-free way to check to see if a string is not null in Java

if (!(foo.bar() + "").equals("null")) {

String.format in Java!

String foo = "My %s has %s.";
String bar = String.format(foo, "dog", "fleas");

Specify the English culture when casting a decimal to a string and then splitting on the decimal point as there is no decimal point in Spanish counterpart.

public static string CovertPaymentAmountToCardinalCommerceFriendlyString(Decimal
      paymentAmount)
{
   string decimalAsString = Math.Round(paymentAmount, 2).ToString(new
         System.Globalization.CultureInfo("en"));
   if (decimalAsString.Contains("."))
   {
      string[] paymentAmountArray = decimalAsString.Split(".".ToCharArray());
      if (paymentAmountArray[1].Length == 1)
      {
         return paymentAmountArray[0] + paymentAmountArray[1] + "0";
      } else {
         return paymentAmountArray[0] + paymentAmountArray[1].Substring(0, 2);
      }
   } else {
      return decimalAsString + "00";
   }
}

 
 

The Spanish stringification would have a comma in it in lieu of a period. :(

a hack to make sure a missing GET variable doesn't cause an error downstream in Java

String whatever = "" + request.getParameter("whatever");
if (whatever.equals("foo")) {

String whatever = request.getParameter("whatever");

...seems to be the way to fish out both GET and POST variables at a .jsp page.

F7 seems to step into code in NetBeans IDE 8.0.1.

Ctrl-F7 is to step out.

Thursday, December 4, 2014

dummy routing numbers to test ACH stuff with

What follows comes from here.

021272655Citibank FSB
031000053PNC Bank NA
044000804Bank One Trust, NA
121000358Bank of America, NA
121000497Union Bank of California
121042882Wells Fargo and Company
121100782Bank of the West
121122676United States Bank
121140218West America Bank
121181866World Savings Bank, FSB
122000247Wells fargo and Company
122000496Union Bank of California
122000661Bank of America, NA
122101191Wells Fargo and Company
122105278Wells Fargo and Company
122220593Santa Barbara Bank & Trust
122221686Mid-State Bank & Trust
122239982HeritageOaks Bank
123000220US Bank, NA
125000024Bank of America, NA
125200057Wells Fargo Bank Alaska
256074974Navy FCU
321070007California Federal Bank FSB
321075947Chevron Texaco FCU
321171184Citibank FSB
321175261Golden One Credit Union
321176833MeriWest Credit Union
321177706Bay Federal Credit Union
321180379Addison Avenue FCU
321270742Wells Fargo Bank Nevada
322270356Downey Savings & Loan
322270822Coast Hills Federal Credit Union
322271724Citibank FSB
322271779California Federal Bank FSB
322281617San Diego County CU
322282001Orange County Teachers FCU
322282713SESLOC FCU
322271627Washington Mutual Bank
325070760Washington Mutual Bank
021204416Amboy National Bank
261071548Excel Federal Credit Union

oldapps.com seems to be the place get old installers for old versions of Internet Explorer

See: http://www.oldapps.com/internet_explorer.php?old_internet_explorer=27

Use a web page as a ghetto/scrape web service in any of the old web technologies which have been around since the turn of the millennium side by side with jQuery .ajax.

This is example could be a .jsp page:

<%--
   Document : pseudoservice
   Created on : Dec 3, 2014, 9:38:40 AM
   Author : tjaeschke
--%>
<%@page contentType="text/html; charset=UTF-8"%>
<%
   String foo = request.getParameter("foo");
   String bar = request.getParameter("bar");
   String result = foo + bar;
   request.setAttribute("result", result);
%>
${result}

 
 

Talk to it and back like this:

var pseudoServiceData = new Object();
pseudoServiceData.foo = "baz";
pseudoServiceData.bar = "qux";
$.ajax({
   url: "http://www.example.com/pseudoservice.jsp",
   type: "POST",
   data: pseudoServiceData,
   success: function(data) {
      $('#whatever').html(data);
   },
   error: function() {
      $('#whatever').html("Oh no!");
   }
});

The Galaxy 4.4 will allow you to compose text messages verbally.

A coworker told me about this yesterday. Dictation gets "listened to" and then made sense of and cast to English words.

Addendum 5/13/2015: It have learned that running iOS 8.1.3 (12B466) that my iPhone 4S has this capacity too. When one begins to type a text message a microphone icon appears at the lower row of buttons just left of the spacebar.

Wednesday, December 3, 2014

Use .replace to remove a piece of a string in Java!

String uri = request.getScheme() + "://" + request.getServerName();
if(request.getServerPort() != 80) {
   uri = uri + ":" + request.getServerPort();
}
uri = uri + request.getRequestURI();
uri = uri.replace(request.getServletPath(),"");

figure out what is at the URL line in Java

This suggests fishing out what is in the URL line from a .jsp page like so...

String uri = request.getScheme() + "://" + request.getServerName() +
      ":" + request.getServerPort() + request.getRequestURI() + "?" +
      request.getQueryString();

 
 

...and that seems to work really good. If you are wondering what "request" is, it seems to be per this a HttpServletRequest and it seems to just work in a .jsp page. When I attempted to wire it up to work (as suggested in the second stack overflow link in this posting) NetBeans IDE 8.0.1 told me:

variable request is already defined in method mergedScriptlets(HttpServletRequest, HttpSession, ServletContext, JspWriter, ServletConfig, JspContext, Object, PageContext, Throwable)

The green play arrow button in NetBeans IDE 8.0.1 does not let you stop at brake points like you are used to in Visual Studio.

Instead, the NetBeans version of the debugger is run from the icon immediately to the right which looks like a smaller green play arrow next to a torn scrap of paper with the numbers one and three on it. F5 works just like F5 in Visual Studio but F8 steps to the next line instead of F10. I don't yet know how to step into a method call as I might with F11 in Visual Studio.

Content is not allowed in prolog.

This touches on this error message that rears its head when parsing XML in Java. Here "prolog" implies header and the first character of your XML is not going to be a less than sign like it should be. It is something sick, a product of goofy encoding. It may look like a less than sign but its not. Manually replace it.

Monday, December 1, 2014

Sometimes the restart is the fix after all.

I changed a username at a VMware VM and a web site hosted there lost the ability to talk to a database hosted at a different VM even though the application pool for the web site was using my LAN account whose password did not change and which had always been able to access said database. Also, the connection string specified "Integrated Security" in lieu of a username and password so things should have just fallen over to use whatever user was specified at the application pool. I don't get it. Anyways, I restarted the physical machine hosting both VMs and now everything is shipshape. What changed? The error I had been getting was "The target principal name is incorrect. Cannot generate SSPI context." and now it is magically alleviated.

cannot "action" request parameter method

This error rears its head in Java when attempting to talk to a web service as suggested here without having a parameter for "action" on the JSON object handed in.

I'm learning that one does not have to worry about burning two separate MSDN keys when installing a Windows operating system at two separate VMware VMs.

Nothing sanity checks the uniqueness.