Thursday, November 17, 2011

Telerik Work Item Manager for TFS

We played with Telerik Work Item Manager today which interfaces with Team Foundation Server and is free.

World Clock

The default clock on an iPhone has a World Clock feature that will allow you to see what time it is in various cities.

TFS Branches

Working on a branch in Team Foundation Server seems easy enough to do. Open "Source Control" in the Team Explorer Pane to expose the Source Control Explorer pane. Go to the SamplesManagement folder and find the branch. Do a "Get Latest Version" by way of right-clicking on the branch and then pull the code down to a folder somewhere. Close Visual Studio and reopen it by double-clicking the .sln in the new code base you've added.

Wednesday, November 16, 2011

Locks and Arrows: notes from seeing Brian Massey speak at SEO Austin this evening on making landing pages

  • at a shopping cart page, visitors respond well to the symbol of a lock for security
  • having an arrow pointing at the button that a visitor is to ultimately click does not hurt
  • you do want to draw the eye to the button – make the button a color that is not anywhere else on the page – red has some negative connotations, so maybe not red
  • move the value offer into a heading and keep a call to action at the submit button
  • qualify yourself with numbers, numbers of customers, numbers of meals served, etc.
  • make halfway transparent or grey images that might compete with the button
  • put logos of some of your customers on the page to qualify yourself
  • do not put links to your Twitter or Facebook or LinkedIn page on a landing page, these are great at a confirmation page, but you do not want to give persons going to your landing page a reason to leave
  • do not drive ads to a homepage as the goal of a homepage is to move traffic away to other pages (where the goal of a landing page is to keep the visitors there)
  • a sandwich page is an SEO-friendly landing page with a bunch of copy that visitors will want -followed with perhaps a call to action at the base
  • phone numbers are trust builders
  • there are services such a Mongoose Metrics which provide separate phone numbers for different landing pages so that, if you are trying to drive someone to call a number instead of clicking a button, you can track how successful you are
  • it might be wise for a small business to just get a second phone line for their landing pages alone
  • Google Voice and Google Phone and Skype might be good, affordable resources for enumerating phone numbers that are kept specific to landing pages
  • duplicate content traditionally makes for bad SEO, but a guy in the audience asserted that it is OK to have separate mobile and regular web sites
  • do not talk about yourself, tell the visitor what is in it for them
  • B2B and B2C are not that different as business people are people too – do not try to write Styrofoam corporate talk for B2C as this does not work
  • testimonials are good trust builders, but here again, they should be real testimonials, probably long and certainly substantive, as opposed to something fake that a copywriter wrote on behalf of a client and then got approval for
  • unbounce.com is a resource for building landing pages through a third party and it supports A/B variations
  • Welcome is not a very good headline :P
  • Google has a ranking for every page and part of that ranking is defined by load time
  • do not get too attached to your creations in this space

appending a custom attribute

Appending a custom attribute in our app via a data test...

ProgramPlan alpha = new ProgramPlan { CanOrder = true };

alpha.Save();

alpha.NameStaticAttribute.CreateAndAddAvailableValue("Alpha")

   .SelectValueForEntity(alpha.Id);

alpha.Save();

 
 

It's not trivial. Craig had to show me how it's done. The work above, should allow for this to return true however:

Assert.AreEqual("Alpha",

   alpha.NameStaticAttribute.GetSelectedValueWithDefault(alpha.Id).Value);

Tuesday, November 15, 2011

Noop!

Why would anyone want a LinqSpec spec like this?

public static Specification<Foo> Noop()

{

   return new AdHocSpecification<Foo>(f => f != null);

}

 
 

Glad you asked! What if you were approaching a SpecificationBuilder like so:

public override Specification<Foo> BuildSpecs()

{

   var specBuilder = new SpecificationBuilder<Foo>();

   
some if/then logic goes here for building up specs

   if (specBuilder.ToSpecification() == null)

      specBuilder.AddAnd(new AdHocSpecification<Program>(p => p != null));

   return specBuilder.ToSpecification();

}

 
 

Well, if you were doing this you might be wise. Why so? Because it would be disasterous to return a null specification. In such a scenario, you can expect an error when you try to use the specification. If you don't want to do any filtering then you should just have a filter that returns everything.

Is there a downside? Well, I'm glad you asked that question too. If you use the Noop spec with other specs, things break. Why? We haven't figured that out yet. We just see that we are getting NHibernate exceptions and are working to avoid using Noop in tandem with other specs. You pretty much need to craft a method like the one above in which you just slip in the Noop conditionally at the very end. One pain point of late came when we broke filtering into two separate chunks, one for security and one for user-driven filtering. We have found we can end up with a Noop for the security half of things and then append the Noop to the specification for the user-driven half of things. We are going to need to architect anew our approach.

things learned from Emma today