How To See Which Windows Updates Are Installed

The company I am working for recently sent out an email asking us to install three updates. They made them available on a file share, but over the VPN, access is hideously slow. So I wanted to see if three service packs were already installed on my computer. I googled this and got nowhere fast. I hate to keep beating a dead horse, but Google is horrible sometimes. Anyway, you just go to Control Panel, select Add or Remove Programs, and then check the “Show Updates” check box.

Add Or Remove Programs

Wireless Broadband — Literally Coding on the Road

With a daughter competing in level 8 gymanstics and a son racing motocross, I’m on the road alot. I recently purchased a Dell Vostro 1500 laptop so I could put some of the travel time (letting the wife drive) to good use coding. If you plan really well, you can code without being connected to the internet. But it’s tough to remember everything you’ll need ahead of time, especially if you you’ve become spoiled to having access to everything all the time or if you need access to a development database that’s not on your machine.

So I finally took the plunge last Friday and signed up for Verizon’s Wireless Broadband. I opted for the USB adapter. My daughter had a gymnastics meet in Austin over the weekend (she got silver all-around!). There’s something incredibly cool about driving down I-10 at 80mph and being connected to the internet at the same time. Not to mention being able to code in between events. If you you’ve never been to a meet, you spend 5-6 hours waiting to see your daughter perform for a total of maybe 10 minutes in four events. So there’s lots of dead time. With the wireless broadband and the laptop I was able to put that time to good use.

Motocross racing is similar. There are usually 16-18 classes. My son’s just been racing in one class so I’m there for 4-7 hours to watch the two motos that my son is in that last maybe 10 minutes each. We’ll see how good the wireless broadband access is in the more remote MX track locations. I tested the connection speed once on 71 south of Bastrop (semi-boonies location) and I was getting 720Kbp which is very adequate.

If you’ve been contemplating getting wireless broadband access, I highly recommend it.

Google Disappoints Again

I’ve written on this topic before — Google’s first link continually disappoints me. I predict that they will either buy another company that has better search technology than they do or they will lose the lead in search in the next 5 years. I hope Wikia can do for search what they did for encyclopedias.

Today, because I was getting bad results searching on standard poodle grooming I thought I would look for a search engine that actually allowed users to rate the results. You can imagine my disappointment when I got Gay-Web-Links.com as the top result for the phrase “search engine rates links.” I’m happy that gays and lesbians have a wonderful site like this. However, I am quite perplexed as to how its the top result for the phrase “search engine rates links.”

I am planning on writing an article on my recent purchase and use of Verizon’s kickass wireless broadband service so I typed in “wireless broadband” and the first link is Welcome to Google TiSP. Google, you are really trying my patience here!!! WTF is that?

Every time I write about this, I become more inclined to think that Google has “jumped the shark” so to speak. C’mon Google, focus on your core business, search. You really do need to make search better or someone else is going to unseat you just as quickly as you became the king of search yourself.

I do have to admit that it is somewhat ironic and hypocritical that I tried using Google to search for a better search engine.

P.S. 02/20/2008: I’m not the only one that thinks Google is losing it.

P.S.S. 03/26/2008: Well, I guess someone at Google is reading my blog. :) If you follow the links above to Google, you’ll find that the Gay Website is no longer the top link. In fact, it’s no longer on the first page. And Verizon is now the first link returned instead of Google’s TiSP (whatever that is).

Generic Methods in Non-Generic Classes in c#

I’ve been using generic classes quite a bit over the last few years. However, I had never used a generic method in a non-generic class until today. I had a web service class that was using declaritive attributes to generate the WSDL. I already had a generic class, WebMethod<R>, that I was using as the base class of all my web methods to encapsulate common functionality such as authentication, logging, etc. There were some things that I needed to in the web service class that I did not want to move to the generic web method class. However, I did not want to duplicate that code in each web method of the web service. Here’s the solution, a generic method in a non-generic class. This code has been simplified for demo purposes:

[WebService(Namespace="http://blah.com/SomeWebServices/",
  Description="Some web service.")]
public class SomeWebService : System.Web.Services.WebService {
	public R Run<R>(WebMethod<R> method) where R : IWebServiceResponse, new() {
		method.UserHostAddress = this.Context.Request.UserHostAddress;
		if (AppConfig.GetSetting("systemFactoryType").ToLower() == "local") {
			method.SystemFactory = new LocalSystemFactory();
		}
		return method.Run();
	}

	[WebMethod(Description = "Take Action.")]
	public ActionResponse Action(UserToken user, ActionRequest request) {
		return Run(new ActionWebMethod(user, request));
	}

	[WebMethod(Description = "Fiddle.")]
	public FiddleResponse Fiddle(UserToken user, FiddleRequest request) {
		return Run(new FiddleWebMethod(user, request));
	}
}

public abstract class WebMethod<R> where R : IWebServiceResponse, new() {
	public SystemFactory SystemFactory {
		set { _systemFactory = value; }
	}

	protected abstract void RunMethod();

	public R Run() {
		_response = new R();
		if (Login()) {
			RunMethod();
		}
		return _response;
	}
}

WebMethod initializes SystemFactory to a remoted implementation in the constructor. I wanted to be able to change that to a non-remoted implementation via the web.config. Similarly, I did not want to add Host Address to the WebMethod constructor, but when I am actually calling the web methods from the web service, I do want to record the Host Address. Without the generic method, I would end up duplicating this code in the body of each web method.

Note that I do not have to explicitly provide a type when I am calling Run, the compiler infers it for me.