ASP.NET MVC – Do I Really Need It?

As a professional software developer, particularly of the Microsoft flavor, you get bombarded with “new stuff”. If you do not instill in yourself a certain discipline, you are sure to be brought down by the sheer complexity of tackling every “new thing” that is sent your way.

I say this from personal experience; I do not mean to be negative in any way in saying this. It’s just a fact of life. There are so many “CTPs” and new technologies being thrown at you that it is easy to succumb to “Beta-itis” – the debilitating compulsion to download and play with every new thing, to the point where your productivity as a software developer begins to suffer.

It’s even worse if you’re an MVP because when you go to the Summit each year, they throw a whole truckful of even more sexy new “Stuff” at you. Sometimes, its stuff that nobody else has seen before and you had to sign an NDA saying you wouldn’t talk or blog about it. Talk about getting excited!

ASP.NET MVC is an example for me. About a year ago, I was working for an IT consultancy and we got a new client who insisted on using their existing codebase which was totally based on ASP.NET MVC. I had to learn not only MVC, but StructureMap (which I really like, thanks to Jeremy Miller) and other cool goodies whose names shall go unexposed for purposes of brevity.

But during this entire exercise, it became obvious to me that I could have done everything they were doing using my perfectly good “Classic ASP.NET” skills. I could have minimized ViewState by keeping it on the server (and I am certainly not the first guy to write about this, here’s a newer one). In addition, in developing a smartphone based web UI for it, it became obvious to us that a lot of the “MVCness” was actually an impediment.

You could make the case for unit – testability, and I would respond that most ASP.NET applications get smoke-tested locally to the satisfaction of the developers before deployment. Don’t get me wrong – I am a big proponent of unit tests and TDD – having helped develop some 700+ unit tests for over 280 DAO’s and Model classes in a current project I am working on.

Purists will tell you that classic ASP.NET doesn’t offer separation of concerns, etc., and they are absolutely right. But classic ASP.NET also works fine, as long as it is understood and not abused by developers.

I’m hip with ASP.NET MVC – MVP buddy Rick Strahl says that his Codepaste.net site (which I think absolutely rocks) was his first venture into ASP.NET MVC. I commend him for it. But the fact is, it could have just as well been coded in classic “ASP.NET” and it would have looked and acted pretty much the same. You want JQuery? You don’t need MVC to use JQuery.

The bottom line is, after a year or more of having been exposed to ASP.NET MVC – and especially seeing various developers putting out their own MVC implementations that do not even rely on the Microsoft engine, because they feel it is flawed – I still remain unconvinced. Read the forum posts and see how much pain the average developer goes through to adopt this -- to do something they already know how to do.

I think the lesson learned for me is to carefully consider new technologies and spend some time objectively determining if they are right for you, rather than “jumping on the latest bandwagon” due to peer pressure. You may decide that you do like a technology, but you want to wait a while before you jump on.

I use LINQ, Entity Framework, LINQ to SQL, lambdas, NHibernate, and much more of the new “stuff” because the benefits are easy to see and I’ve been able to make a determination in my own mind that the learning curve is worth the effort. I'm glad ASP.NET MVC is out there - it's a quality offering. But I’m still not using it. Flame me if you will, I remain unconvinced.

NOTE: Interestingly, Donn Felker, whose work I particularly admire,  has a more recent post that is very similar to this, featuring a real-life example of his own. I hope you’ll read it. Bottom line? Get the job done, get paid, and go home to spend time with your family. Even “Mr. ASP.NET”, Scott Guthrie, has something to say about the controversy. His bottom line? “Respect the choices other people make”.

WebForms isn’t going away anytime soon. As a framework for developing ASP.NET applications, it has evolved into a rich set of tools, controls and features that share more of the same “pieces” with ASP.NET MVC than many developers are aware of.  So if you’re an MVC purist and you feel that WebForms make you feel “dirty”, knock yourself out. You aren’t going to impress me.

Have a happy New Year, do good, and be productive.


SQL Server 2008 Fix: SP1 Install Failure


For quite a while I could not install SQL Server 2008 SP1, as it reported a failed shared component installation – in this case, Books Online. Problem is I could not find the source MSI to fix it.

So here is how I solved the problem:  If any shared components installations result in a failed state, a Registry key is updated. SP1 reads these keys when it starts, and if the value is not “1” (in my case it was “3”) – it will stop. Seems ridiculous to me, but that’s how they do it.

And doing a repair may not fix it either – because you may have installed Books Online from an interim standalone MSI installer. if you try to find the original MSI to handle the repair, it might not be the correct one.

Edit this key (or the respective key for whatever your fail message says) and ensure that the value is 1:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\ConfigurationState\Sql_BooksOnline_Redist

That took care of that problem! Now I have a different issue, but I’ll tackle that one too. Hey! Its us against them!

Another little Gem Department

If you have ever used Alt-PrtScn to get a quick screen capture of an image for pasting into an article or blog post, you may have brought up MS Paint to CTRL-V paste it in there. The problem is, you get your image – but the canvas size may be much bigger. If you forget to drag the sides of the canvas in to match the size of the image before you save it, you may be very disappointed at the results!


Why the Economic Stimulus Plan Doesn’t Work

When President Obama was elected, the economy was already sick and getting sicker.

If nothing was done, his economic team said, the unemployment rate would keep rising, reaching 9 percent in early 2010. But if the nation embarked on a fiscal stimulus of $775 billion, mainly in the form of increased government spending, the unemployment rate was predicted to stay under 8 percent. Obama bought into a classic Keynesian solution – and so did Congress.

Congress passed a huge fiscal stimulus that focused almost entirely on government spending. Yet things turned out worse than the White House expected. The unemployment rate is now in the 10 percent range — a full percentage point above what the administration economists said would occur without any stimulus!

So what should they  do now? The administration seems  determined to stay the course, although recently, the president showed interest in “increasing the dosage” – a bad prescription indeed. A better approach might be to rethink the entire strategy from the git-go.

When concocting its fiscal package, the Obama Administration relied on conventional economic models based largely on ideas of John Maynard Keynes. Keynesian theory says that government spending is more potent than tax policy for jump-starting a stalled economy.

The fallacies of Keynesian economics were exposed decades ago by Friedrich Hayek and Milton Friedman. Ronald Reagan's decision to dump Keynesianism in favor of supply-side policies—which emphasize incentives for investment—produced a 25-year economic boom.

According to  Christina  Romer, now chairwoman of the president’s Council of Economic Advisers, each dollar of tax cuts has historically raised G.D.P. by about $3 — three times the figure used in the administration’s recent report. That is also far greater than most estimates of the effects of government spending.

In an October study, Alberto Alesina and Silvia Ardagna  of Harvard looked at large changes in fiscal policy in 21 nations in the Organization for Economic Cooperation and Development. They identified 91 episodes since 1970 in which policy moved to stimulate the economy. They compared the policy interventions that succeeded —  those that were followed by robust growth — with those that failed.

What did they find? Successful stimulus relies almost entirely on cuts in business and income taxes. Failed stimulus relies mostly on increases in government spending.

These studies and others point toward tax policy as the best fiscal tool to combat recession, particularly tax changes that influence incentives to invest, like an investment tax credit.  This really should come as no surprise, since small and medium size businesses are the engine that creates 80 percent of American jobs. Throughout modern history, it is small business that fuels jobs and growth – not government.  Yet, the Administration and Congress’ knee-jerk spending reactions so far indicate that they “still don’t get it”. If Congress and the President really wanted to get the economy moving and create jobs, they could repeal the capital gains tax. But, they won’t.

There is a growing body of evidence to support that Keynesianism is not an effective way to “spend your way” out of a bad recession. It’s time for our legislators and the executive branch to stop the spending foolishness. Ronald Reagan got it. All we have now is simply a recipe to repeat the Japanese “Lost Decade” of the 1990’s.


Don’t Break the Interface

Recently while contributing to a test suite that covers some 250 C# DAOs (Data Access Objects) I discovered a couple of issues:

1) There was an implementation of “PrimaryKey” which is defined as a nullable long (long? PrimaryKey) that returned a 0 (zero) if the nullable type had no value. Uh-Oh!

2) There was more than one implementation, e.g., this actually appeared in more than one base class, in different assemblies. Depending on which references you had set, you could get clobbered!

Needless to say we’re going to fix that quickly; there are objects that are “older code” that need to be updated to reflect the change.

Fortunately our test suite will show immediately which guys need to be updated,underscoring the importance of having robust unit tests.

But the real question is, “How did this creep in”? The answer: Most probably, "Stinkin' Thinkin'" by developers.

Nullable types are instances of the System.Nullable struct. A nullable type can represent the normal range of values for its underlying value type, plus an additional null value.

For example, a Nullable<Int32>, pronounced "Nullable of Int32," can be assigned any value from -2147483648 to 2147483647, or it can be assigned the null value. A Nullable bool can be assigned the values true or false, or null. The ability to assign null to numeric and Boolean types is particularly useful when dealing with databases and other data types containing elements that may not be assigned a value. For example, a Boolean field in a database can store the values true or false, or it may be undefined.

An example from the MSDN documentation:

Class NullableExample
static void Main()
int? num = null;
if (num.HasValue == true)
System.Console.WriteLine("num = " + num.Value);
System.Console.WriteLine("num = Null");

//y is set to zero
int y = num.GetValueOrDefault();

// num.Value throws an InvalidOperationException if num.HasValue is false
y = num.Value;
catch (System.InvalidOperationException e)

The above will display the output:

num = Null

Nullable object must have a value.

Nullable types have the following characteristics:

  • Nullable types represent value-type variables that can be assigned the value of null. You cannot create a nullable type based on a reference type. (Reference types already support the null value.)

  • The syntax T? is shorthand for System.Nullable, where T is a value type. The two forms are interchangeable.

  • Assign a value to a nullable type in the same way as for an ordinary value type, for example int? x = 10; or double? d = 4.108;

  • Use the System.Nullable.GetValueOrDefault property to return either the assigned value, or the default value for the underlying type if the value is null, for example int j = x.GetValueOrDefault();

  • Use the HasValue and Value read-only properties to test for null and retrieve the value, for example if(x.HasValue) j = x.Value;

    • The HasValue property returns true if the variable contains a value, or false if it is null.

    • The Value property returns a value if one is assigned, otherwise a System.InvalidOperationException is thrown.

    • The default value for a nullable type variable sets HasValue to false. The Value is undefined.

  • Use the ?? operator to assign a default value that will be applied when a nullable type whose current value is null is assigned to a non-nullable type, for example int? x = null; int y = x ?? -1;

  • Nested nullable types are not allowed. The following line will not compile: Nullable<nullable> n;

The bottom line? Good communication between members of the developer team ensures consistency and that the interface won’t be broken. This includes the mistake of having base types or interface members declared in multiple places -the functional equivalent of "breaking the interface". And, it’s important to understand the “Nullable Object must have a value” exception and why it happens, cryptic as the exception may seem.


The big Silverlight 4 Question

You get all this honking and hoopla and what not, but nobody seems to think about the big Silverlight 4 Question:

Can I install Visual Studio 2010 Beta 2, Silverlight 4 Tools, WCF RIA Services, The November 2009 SIlverlight Toolkit, and Blend 4 Trial on the same machine that I have Visual Studio 2008, Siverlight 3, SIlverlight 3 Toolkit, Blend 3 and so on – and will they co-exist peacefully on the same machine?

Answer: Yes! All you may need to do is uninstall your previous RIA Services Preview.

Everything else will “just work”. I just did it and tested it all out.

Bart Czernicki mentions an issue that you can review here.

Disclaimer: No animals were harmed in the creation of the UnBlog post. Your mileage may vary.

Oh, and one final note: If you are going to install WCF RIA Services with Visual Studio 2010, you will no longer be able to use RIA services with Visual Studio 2008. They don't install "side -by-side".

Another Set of Eyes

Insanity: doing the same thing over and over again and expecting different results. --Einstein
How many times, as a developer, have you found yourself mindlessly and stubbornly trying to solve a problem (some thrown exception, for example) for an hour, two hours, or even longer, without a solution?
This is like the Einstein quote above: madness! What you need to do is get Another Set of Eyes to sit by you while you work your way through the issue. It doesn't even have to be a developer who is very familiar with the codebase you're working on -- the mere act of "changing the paradigm" will enable you to look at the problem more objectively and find the answer quickly.
In a team environment, we have a general rule that if you're stuck on a problem for more than 20 or 30 minutes, you put your ego in your back pocket and ask another developer to come sit by you while you demonstrate the issue.
Recently another developer I work with asked me over. He admitted having so far spent some 5 hours on an exception that he could not figure out. After sitting with him for ten minutes, he himself found the answer. It works.
Suprise! Ask for help, and willingly give help. The problem gets solved. Try it!


When Unit Tests aren’t Enough

Unit Testing of your work is generally accepted as the mark of a professional developer. However – have you thought about what happens when you make a boo-boo on the tests you create?

You guessed it – everything goes to hell in a handbasket. If the tests are flawed, they aren’t really telling you anything. 

Sometimes it can be better (and faster)  to create an old-fashioned, Windows Forms test harness to exercise your “stuff”.

Right now, I’m working on a complex project with many dozens of classes – more of them every single day. Often we are asked to make changes to many of these classes. When I do these, all I need to do is fire up my Winforms Test Harness and press one of the buttons. I can have breakpoints in the code at strategic places, and I can view the end result in a DataGridView that’s on the form. Sure, you can do that with a unit test, but then what you’re doing is “testing a test”.

Unit Tests are definitely the way to go, but sometimes just being a Duct Tape Programmer solves the problem more easily.

Why the FED has turned the banking system into the Living Dead

Treasury Secretary Tim Geithner and Federal Reserve Chairman Ben Bernanke have denoted that the recession is over. Now that the DJIA has broken the 10,000 mark, we can expect to  have full confidence that economic growth is here to stay.

But the credit markets are in a lot worse condition than some indexes  suggest.

Buried within the October 3, 2008 bailout bill, which set up the Troubled Asset Relief Program (TARP), was a provision permitting the Fed to pay interest on bank reserves. Within a week, the Fed implemented this new power and  essentially converted bank reserves into more government debt.

As the fed funds rate hovers around zero and existing loans in technical default continue to sit in bank portfolios, why should banks make new loans when they can make money for free with the government?

They can now borrow from the Fed and  earn a huge spread by borrowing virtually unlimited amounts of money for nothing and simply lend that same money back to the Treasury.

In sum, the banks now have no incentive to lend. Most of them still have a significant amount of bad loans sitting on their books that they don't want to recognize as nonperforming. If  banks were to recognize these bad loans, all the write-downs could force them into bankruptcy.

So what Bernanke and friends have created is a banking system consisting of the living dead – Banks that suck money out of the system, and which have not made significant new loans to the small to mid-size business sector since the Bailout was enacted. It’s just like in one of those “Zombie” movies. The only problem is – it’s for real.

A few multinational banks like Citigroup are “too big to fail”.
Credit spreads in the markets reflect the relatively risk-free nature of these large companies, which now have de facto government guarantees.

But this protection doesn't apply to smaller banks, some of which are being shut down by the FDIC (over 100 so far in 2009). These smaller banks have done most of the lending to the many small and medium-sized businesses that do most of the hiring in our economy. 

According to ADP’s August employment report, large businesses lost 60,000 jobs, and employment at medium-sized and small businesses declined by 116,000 and 122,000 jobs in August alone. According to Ann Lee, writing in the Wall Street Journal, small businesses,  (employing  from one to 49 people) account for 48 million jobs in the U.S., and medium-sized businesses ( 50 to 499 employees)  account for 42 million jobs. Large businesses account for just 17 million – only about 20 percent of jobs.

Without access to capital, these small and medium-sized businesses will continue to lay off  employees, creating a cycle of shrinking consumer credit and demand similar to the Japanese “lost decade” of the 1990’s.

Bernanke and friends have architected this upside-down, zombie-like banking system with their ill-conceived Keynesian solutions. Is it any wonder that elected representatives like Ron Paul (one of the few in Congress that actually understand voodoo economics) want legislation to abolish the Fed?

We should be questioning whether our current banking system actually makes any sense. Rather than giving capital to businesses with real products and services, Wall Street now plays a government-backed Ponzi scheme, enriching bankers' pockets at everyone else's expense.


Doomed to Repeat History?

William O’Neil, in his excellent book “How to Make Money in Stocks”, has a chapter on the media, news, and market psychology. In this section he has taken the charts of the Dow Industrials from 1921 through 1942, and overlayed on this a chart of the NASDAQ Composite from February 1992 through March 2009, and indexed the data so that the charts both start at 100:


What is remarkable about this chart is that the two time periods are almost exact duplicates. O’Neil used the NASDAQ for comparison with the 1929 era as it trades more volume now than the NYSE and represents more entrepreneurial companies. The reason history repeats in this amazing manner is that the markets are made up of millions of people acting almost 100% on human emotions.

You can see two important history lessons from just looking at the above chart:

1. This isn’t 1929 right now in October, 2009 – its  Oct 1939.

2. The market (according to history) is not going to be very exciting for a long time – denoting a very sluggish economic recovery that may last years.

So if history really does repeat itself, then what was happening in 1939?  Hitler kept saying he was only interested in peace. By 1938, Britain and France negotiated with Hitler and tried to appease him by making concessions. Britain thought they had a peace agreement with Hitler. Crowds cheered. But in Parliament, Churchill said “We’ve suffered a defeat”. No one believed Churchill. In 1939, World War II began and within just two weeks, Germany rolled right through France.

Today, Iran is a sponsor of terrorist organizations. It will have nuclear weapons very soon, and already has the missiles to deliver nuclear warheads. Even though, just like Hitler, it keeps saying it only wants peace.

We should never underestimate partisan blindness in Washington or in the mainstream media where, “If the Bush Administration did it, it must be wrong”. The Bush Administration kept us safe from additional attacks for over seven years. Too many people refuse to acknowledge that such benefits have costs, even if that means having no more secrecy when making international phone calls, being delayed at airports, and so on.

There are a growing number of threats that can destroy us.  The Roman Empire lasted a lot longer than the United States, yet it too was destroyed. Millions of lives were blighted for centuries after, because the barbarians who destroyed Rome, much like the fanatic Islamic fundamentalists of Iran, Al-Quaida and the Taliban,  were incapable of replacing it with anything at all comparable.

Once suicidal fanatics have nuclear bombs, that is the point of no return. Israel completely understands this. Unfortunately, the Liberal President and Congress now in office do not. in The Media Elite, Rothman and Richter interviewed 240 top journalists and staffers at the New York Times, the Wall Street Journal, Washington Post and the news departments of four major TV networks. 85% of these top journalists were found to be Liberal and voted Democratic in all of the last major elections.

Emmy Award winner Bernard Goldberg spent almost 30 years with CBS News. His book Bias shows in detail how network television has provided one-sided news with little balance or fairness. This kind of bias in the media jeopardizes freedom. It completely misrepresents the de facto equality of left vs right in the general population. Some of my Liberal friends mock FOX News as being “right wing”. The fact is, FOX is closer to the center than all the other networks. They’re all so far left, it makes FOX “look like” it’s right wing. But frankly, I’m not a fan of any network news organization and that includes FOX News.

There are no concessions we can make that will buy off these hatred-filled terrorists. Obama’s apologetic, self-humiliating policy of appeasement does not work. What these maniacs want is our being brought down in humiliation. This kind of hatred is not familiar to most Americans  but what happened on 9/11 should give us a clue – and a very clear warning. Iran and North Korea, along with various terrorist groups, represent a clear and present danger to world peace and stability that hasn’t been seen since Nazi Germany 70 years ago. If we do not defeat them we will suffer dire consequences, and  it will only be because we cannot learn the lessons of history and do not realize how absolutely grave the threat really is.

I sure hope President Obama is not remembered in history for being the guy who allowed Iran and North Korea to threaten and blackmail the free world with weapons of mass destruction; who allowed the Taliban and Al Queda to be emboldened by our pitiful weakness in Afghanistan. But currently, things aren’t looking very promising. The next election is simply too far away for me.


On Less is More

Thelonius Monk once said “Wrong is Right”. I say, “Less is More”. All too often we as software developers do data collection of one sort or another, often storing results in a database table or tables, and we suffer from self-induced overkill.

We collect too much data, data that we probably will not need. Or, instead of storing the same data and simply updating it’s count on a unique column value via an Insert or Update SQL statement, we end up storing hundreds of unique rows that, because of the data collection overkill we’ve engineered, take up lots of space but don’t really contribute to the “cause”.

In addition (and I have certainly been guilty of this) we store our data in database tables that are not normalized, thereby exacerbating the situation. We end up with wide tables with a lot of columns that are inefficient.

It is often much easier (and simpler) to start out with a minimalist approach. Less is More. If we determine at a later point that we actually do need “More”, we can always add that later. I believe it is easier to add needed features to a well-thought-out basic design than to remove stuff later. It’s human nature.


Acer Aspire One Netbook Restore Windows 7

Recently my Acer Aspire One Netbook with Windows 7 on it crapped out. I have no idea why, but if you’ve got a netbook, then you know that to reconstitute everything you need to do it from a bootable USB Stick, because there isn’t any “DVD” drive on these little puppies.

I tried a number of solutions that I found online, but the only one that worked for me was the following:


1) insert your USB stick (4GB or higher).


3) Copy the contents of the Windows 7 DVD onto the USB stick.

4) Set your netbook BIOS to Boot from “USB HDD” as the first option.

5) Boot off the USB, let Windows 7 setup come up, and do a new installation (the “Repair my computer” option only comes up if you run Windows setup from an existing instance of Windows 7, which I couldn’t get).

6) Install Windows 7.


NOTE: during the install, WIndows 7 needs to reboot. You need to change your BIOS settings on the netbook to now let it boot from the netbook’s hard drive, NOT the USB stick, or you will go in circles.


This may seem overly simplistic, but it worked for me. Of course, since you have a new windows 7, you’ll need to install all your favorite software.

Acer Aspire One Windows 7 Restore

Recently my Acer Aspire One Netbook with Windows 7 on it crapped out. I have no idea why, but if you’ve got a netbook, then you know that to reconstitute everything you need to do it from a bootable USB Stick, because there isn’t any “DVD” drive on these little puppies.

I tried a number of solutions that I found online, but the only one that worked for me was the following:


1) insert your USB stick (4GB or higher).


3) Copy the contents of the Windows 7 DVD onto the USB stick.

4) Set your netbook BIOS to Boot from “USB HDD” as the first option.

5) Boot off the USB, let Windows 7 setup come up, and do a new installation (the “Repair my computer option only comes up if you run Windows setup from an existing instance of Windows 7, which I couldn’t get).

6) Install Windows 7.


This may seem overly simplistic, but it worked for me. Of course, since you have a new windows 7, you’ll need to install all your favorite software.


Online Plagiarism and what you can do about it

Lazy, unethical people who republish RSS feeds and similar content and surround it with advertising for profit abound. In general this is an annoyance, but you probably can’t do much about it.  However where I believe this “crosses the line” is when somebody deliberately copies all of  your original content, removes all identifying links and author attribution, and then republishes this wholesale on their site or blog for expected profit.

This happened to me recently. This person, Calla Degennaro, residing in Larchmont N.Y.:

Calla M Degennaro
7 Rebeau Dr
Larchmont, NY 10538-1337
(914) 834-0236

--  republished not one -- but two of my articles written and originally published on  eggheadcafe.com, without permission:




You can see that this person has carefully removed all identifying traces of where the articles originated and who wrote them, but kept 100% of the content, completely unaltered. They even downloaded my zipped code sample files and re-hosted them!

What can you do about this? Well, Copyscape.com has some good guidelines:

  1. Look for contact details on the offending site and send a polite message asking for the material to be removed. If there are no contact details available, try emailing webmaster@ the domain.
  2. Use a Whois service to find out the website owner's name and telephone number and contact them directly. Enter the domain name in the search box and the contact information should appear towards the bottom of the page.
  3. Contact the web hosting company used by the site and inform them of their customer's abuse. This information is also available through a Whois search.
  4. Send a formal 'Cease and Desist' letter notifying the offending party that they must remove the stolen content from their site. Some sample letters are available on the web.
  5. File a notice of Digital Millenium Copyright Act (DMCA) infringement with search engines such as Google and others to have the offending site removed from their search results.
  6. If you need proof of infringement, you can use the Internet Archive to show that the content appeared on your site at an earlier date than it appeared on the offending site.


How to file a DMCA notice with Google:

Infringement Notification for Web Search and all other products

To file a notice of infringement with us, you must provide a written communication (by fax or regular mail -- not by email, except by prior agreement) that sets forth the items specified below. Please note that you will be liable for damages (including costs and attorneys' fees) if you materially misrepresent that a product or activity is infringing your copyrights. Indeed, in a recent case (please see http://www.onlinepolicy.org/action/legpolicy/opg_v_diebold/ for more information), a company that sent an infringement notification seeking removal of online materials that were protected by the fair use doctrine was ordered to pay such costs and attorneys fees. The company agreed to pay over $100,000. Accordingly, if you are not sure whether material available online infringes your copyright, we suggest that you first contact an attorney.

To expedite our ability to process your request, please use the following format (including section numbers):

1. Identify in sufficient detail the copyrighted work that you believe has been infringed upon (for example, "The copyrighted work at issue is the text that appears on http://www.legal.com/legal_page.html") or other information sufficient to specify the copyrighted work being infringed (for example, "The copyrighted work at issue is the “Touch Not This Cat” by Dudley Smith, published by Smith Publishing, ISBN #0123456789").

2. Identify the material that you claim is infringing the copyrighted work listed in item #1 above.

FOR WEB SEARCH, YOU MUST IDENTIFY EACH SEARCH RESULT THAT DIRECTLY LINKS TO A WEB PAGE THAT ALLEGEDLY CONTAINS INFRINGING MATERIAL. This requires you to provide (a) the search query that you used, and (b) the URL for each allegedly infringing search result.

For example, suppose (hypothetically) that you conducted a search on google.com using the query "google", and found that the third and fourth results directly link to a web page that you believe infringes the copyrighted text you identified in item #1 above. In this case, you would provide the following information:

Search Query:

Infringing Web Pages: 

If you are sending a large number of URLs in one removal request, please also send an electronic copy of the notice to removals at google dot com.

3. Provide information reasonably sufficient to permit Google to contact you (email address is preferred).

4. Provide information, if possible, sufficient to permit Google to notify the owner/administrator of the allegedly infringing webpage or other content (email address is preferred).

5. Include the following statement: "I have a good faith belief that use of the copyrighted materials described above as allegedly infringing is not authorized by the copyright owner, its agent, or the law."

6. Include the following statement: "I swear, under penalty of perjury, that the information in the notification is accurate and that I am the copyright owner or am authorized to act on behalf of the owner of an exclusive right that is allegedly infringed."

7. Sign the paper.

8. Send the written communication to the following address:

Google, Inc.
Attn: Google Legal Support, DMCA Complaints
1600 Amphitheatre Parkway
Mountain View, CA 94043

    OR fax to:

(650) 963-3255, Attn: Google Legal Support, DMCA Complaints

Please note that in addition to being forwarded to the person who provided the allegedly infringing content, a copy of this legal notice will be sent to a third-party which may publish and/or annotate it.  As such, your letter (with your personal information removed) will be forwarded to Chilling Effects (http://www.chillingeffects.org).  You can see an example of such a publication at http://www.chillingeffects.org/dmca512/notice.cgi?NoticeID=861.  A link to your published letter will be displayed in Google's search results in place of the removed content.

The above is courtesy of Google’s information page. Now the nice thing about getting a DMCA notice honored by google et. al. is that when somebody makes a search that would bring up the offending content, they get to see the notice instead – a double whammy!  If they are hosting Google Adsense ads, that account can get pulled too. So, it’s possible to really put the hurt to these crooks.  I’ve already taken the first step with our friend Degennaro. The next step will be a DMCA filing.  Online plagiarism is a crime. It’s one thing to republish somebody’s original work with a link back to the source. But the above example is where I draw the line. Hope this helps.


Where’s Reaganomics?

Washington has attacked the current economic downturn with Keynesian economics - the theory that you fight an economic downturn by pumping money into the economy to "encourage demand" and "create jobs." The result? The longest recession since World War II — 21 months —  with no clear end in sight. The government  borrowed close to a trillion dollars out of the private economy —  yet it has done squat to increase incentives for investment and entrepreneurship.

In February 2008, Bush cut a deal with congressional Democrats to pass a $152 billion Keynesian stimulus bill based on countering the recession with increased deficits. The central feature was a tax rebate of up to $600 per person.  It had no significant effect on economic incentives. In fact, looking back a year, it was a joke.

Learning nothing from this, Barack Obama came back in February 2009 to support a $787 billion, purely Keynesian stimulus bill. Congress, like lemmings, followed along with barely a whimper.

Even the tax-cut portion of that bill was Keynesian. The key feature was a $400-per-worker tax credit, which, again, has no significant effect on economic incentives. The lessons learned are so obvious, yet they still “don’t get it”: printing money and throwing it at the banking system or the consumer doesn’t create economic growth! It just creates bigger and bigger DEFICITS. And you know what? Somebody is going to have to pay the piper. It may not be next year, it may not be for a decade or more- but make no mistake, we WILL PAY for what we’ve done here.

The Obama administration is now claiming success because of the slowdown in economic decline. Last month, only 216,000 jobs were lost, and the economy declined by only 1% in the second quarter. Based on this rhetoric, it looks like Obama expects to get credit for anyone who still has a job!

The fallacies of Keynesian economics were exposed decades ago by Friedrich Hayek and Milton Friedman. Ronald Reagan's decision to dump Keynesianism in favor of supply-side policies—which emphasize incentives for investment—produced a 25-year economic boom. That boom ended as the Bush administration proceeded to abandon every single component of Reaganomics, one by one, culminating in Treasury Secretary Henry Paulson's atavistic Keynesian stimulus in early 2008.

Stephen Moore of the Cato Institute stated that "no act in the last quarter century had a more profound impact on the US economy of the eighties and nineties than the Reagan tax cut of 1981." He claims that Reagan's tax cuts, combined with an emphasis on federal monetary policy, deregulation, and expansion of free trade created a sustained economic expansion creating America's greatest sustained wave of prosperity ever. Sure, mistakes were made. But the lesson was clear nonetheless.

Obama showed up in  2009 operating under the scenario that none of this history ever happened. Suddenly national economic policy is back in the 1930s. Instead of the change voters thought they were getting, Obama has quintupled Bush's 2008 Keynesianism.

The result is the continuation of the economic policy disaster we have suffered since the end of 2007. Obama promised that his stimulus would prevent unemployment from climbing over 8%. It jumped to 9.7% last month. Some 14.9 million Americans are unemployed, another 9.1 million are stuck in part-time jobs and can't find full-time work, and another 2.3 million looked for work in the past year and never found it. That's a total of 26.3 million unemployed or underemployed, for a “real” unemployment rate of 16.8%. Personal income is also down.

Having rejected Keynesianism in favor of fiscal restraint, France and Germany now see economic growth return in the second quarter this year. India, Brazil and even China are enjoying growth as well. Canada enjoyed job growth last month. But the U.S. still seems stuck in “Keynesian Stinkin’ Thinkin’”.

U.S. economic recovery and a permanent reduction in unemployment can only come from private, job-creating investment. Nothing in the Obama economic recovery program, or in the previous Bush 2008 program, offers that.

To produce long-term economic growth we will require a fundamental change in economic policies — lower, not higher, tax rates; reliable, low-cost energy supplies, not higher energy costs through cap and trade; and no unreliable alternative energy that can survive only on costly taxpayer subsidies. Healthcare reform is an even bigger problem – and based on its Obama Administration track record so far, it appears that Congress really doesn’t yet have a clue as to the negative economic impact of the legislation in its current form.

Once you add in the interest on the growing debt because of the persistent deficits, federal expenditures in 2083, according to the CBO, could range anywhere between 44 and 75 percent of GDP. That’s completely unsustainable and what it means is coming defaults on Treasury debt and social program payments such as Medicare and Social Security. You cannot “inflate your way out” of the current situation, and there’s no way to raise taxes by enough to do it either. We’ve dug ourselves into an untenable economic hole through sheer STUPIDITY!

Unfortunately, Obama and his advisors seem to be wedded to his political talking points, and his ideological tunnel vision seems to be permanent. So don't expect any policy changes. Expect an eventual return to 1970s-style economic results instead – higher inflation and sluggish (if any) economic growth. Is it any wonder that 70,000 unhappy people – Democrats, Republicans, Libertarians and Independents – protested in Washington DC today? You asked for it.





And don’t forget the meaning of the word LIBERTY.

ServicePeople, Thank you for your service to our country!


Windows Keyboard / Explorer Shortcuts


Windows system key combinations
  • F1: Help
  • CTRL+ESC: Open Start menu
  • ALT+TAB: Switch between open programs
  • ALT+F4: Quit program
  • SHIFT+DELETE: Delete item permanently
  • Windows Logo+L: Lock the computer (without using CTRL+ALT+DELETE)


Windows program key combinations
  • CTRL+C: Copy
  • CTRL+X: Cut
  • CTRL+V: Paste
  • CTRL+Z: Undo
  • CTRL+B: Bold
  • CTRL+U: Underline
  • CTRL+I: Italic


Mouse click/keyboard modifier combinations for shell objects
  • SHIFT+right click: Displays a shortcut menu containing alternative commands
  • SHIFT+double click: Runs the alternate default command (the second item on the menu)
  • ALT+double click: Displays properties
  • SHIFT+DELETE: Deletes an item immediately without placing it in the Recycle Bin


General keyboard-only commands
  • F1: Starts Windows Help
  • F10: Activates menu bar options
  • SHIFT+F10 Opens a shortcut menu for the selected item (this is the same as right-clicking an object
  • CTRL+ESC: Opens the Start menu (use the ARROW keys to select an item)
  • CTRL+ESC or ESC: Selects the Start button (press TAB to select the taskbar, or press SHIFT+F10 for a context menu)
  • CTRL+SHIFT+ESC: Opens Windows Task Manager
  • ALT+DOWN ARROW: Opens a drop-down list box
  • ALT+TAB: Switch to another running program (hold down the ALT key and then press the TAB key to view the task-switching window)
  • SHIFT: Press and hold down the SHIFT key while you insert a CD-ROM to bypass the automatic-run feature
  • ALT+SPACE: Displays the main window's System menu (from the System menu, you can restore, move, resize, minimize, maximize, or close the window)
  • ALT+- (ALT+hyphen): Displays the Multiple Document Interface (MDI) child window's System menu (from the MDI child window's System menu, you can restore, move, resize, minimize, maximize, or close the child window)
  • CTRL+TAB: Switch to the next child window of a Multiple Document Interface (MDI) program
  • ALT+underlined letter in menu: Opens the menu
  • ALT+F4: Closes the current window
  • CTRL+F4: Closes the current Multiple Document Interface (MDI) window
  • ALT+F6: Switch between multiple windows in the same program (for example, when the Notepad Find dialog box is displayed, ALT+F6 switches between the Find dialog box and the main Notepad window)


Shell objects and general folder/Windows Explorer shortcuts
For a selected object:
  • F2: Rename object
  • F3: Find all files
  • CTRL+X: Cut
  • CTRL+C: Copy
  • CTRL+V: Paste
  • SHIFT+DELETE: Delete selection immediately, without moving the item to the Recycle Bin
  • ALT+ENTER: Open the properties for the selected object
To copy a file
Press and hold down the CTRL key while you drag the file to another folder.
To create a shortcut
Press and hold down CTRL+SHIFT while you drag a file to the desktop or a folder.


General folder/shortcut control
  • F4: Selects the Go To A Different Folder box and moves down the entries in the box (if the toolbar is active in Windows Explorer)
  • F5: Refreshes the current window.
  • F6: Moves among panes in Windows Explorer
  • CTRL+G: Opens the Go To Folder tool (in Windows 95 Windows Explorer only)
  • CTRL+Z: Undo the last command
  • CTRL+A: Select all the items in the current window
  • BACKSPACE: Switch to the parent folder
  • SHIFT+click+Close button: For folders, close the current folder plus all parent folders


Windows Explorer tree control
  • Numeric Keypad *: Expands everything under the current selection
  • Numeric Keypad +: Expands the current selection
  • Numeric Keypad -: Collapses the current selection.
  • RIGHT ARROW: Expands the current selection if it is not expanded, otherwise goes to the first child
  • LEFT ARROW: Collapses the current selection if it is expanded, otherwise goes to the parent


Properties control
  • CTRL+TAB/CTRL+SHIFT+TAB: Move through the property tabs


Accessibility shortcuts
  • Press SHIFT five times: Toggles StickyKeys on and off
  • Press down and hold the right SHIFT key for eight seconds: Toggles FilterKeys on and off
  • Press down and hold the NUM LOCK key for five seconds: Toggles ToggleKeys on and off
  • Left ALT+left SHIFT+NUM LOCK: Toggles MouseKeys on and off
  • Left ALT+left SHIFT+PRINT SCREEN: Toggles high contrast on and off


Microsoft Natural Keyboard keys
  • Windows Logo: Start menu
  • Windows Logo+R: Run dialog box
  • Windows Logo+M: Minimize all
  • SHIFT+Windows Logo+M: Undo minimize all
  • Windows Logo+F1: Help
  • Windows Logo+E: Windows Explorer
  • Windows Logo+F: Find files or folders
  • Windows Logo+D: Minimizes all open windows and displays the desktop
  • CTRL+Windows Logo+F: Find computer
  • CTRL+Windows Logo+TAB: Moves focus from Start, to the Quick Launch toolbar, to the system tray (use RIGHT ARROW or LEFT ARROW to move focus to items on the Quick Launch toolbar and the system tray)
  • Windows Logo+TAB: Cycle through taskbar buttons
  • Windows Logo+Break: System Properties dialog box
  • Application key: Displays a shortcut menu for the selected item


Microsoft Natural Keyboard with IntelliType software installed
  • Windows Logo+L: Log off Windows
  • Windows Logo+P: Starts Print Manager
  • Windows Logo+C: Opens Control Panel
  • Windows Logo+V: Starts Clipboard
  • Windows Logo+K: Opens Keyboard Properties dialog box
  • Windows Logo+I: Opens Mouse Properties dialog box
  • Windows Logo+A: Starts Accessibility Options (if installed)
  • Windows Logo+SPACEBAR: Displays the list of Microsoft IntelliType shortcut keys
  • Windows Logo+S: Toggles CAPS LOCK on and off


Dialog box keyboard commands
  • TAB: Move to the next control in the dialog box
  • SHIFT+TAB: Move to the previous control in the dialog box
  • SPACEBAR: If the current control is a button, this clicks the button. If the current control is a check box, this toggles the check box. If the current control is an option, this selects the option.
  • ENTER: Equivalent to clicking the selected button (the button with the outline)
  • ESC: Equivalent to clicking the Cancel button
  • ALT+underlined letter in dialog box item: Move to the corresponding item


The Role of Government

In my “Too Big to Fail?” post, I talked a little about the unprecedented  monetary expansion we have entered. Perhaps it’s time to expand on this topic. In 2007, the federal deficit was 1.2 percent of G.D.P. Two years later, more than a year into a serious  economic crisis it is 13% of GDP -- more than twice the size of the next largest deficit since World War II -– the  projected deficit is the result of a year when the federal government, at taxpayers' expense, has acquired enormous stakes in the banking, auto, mortgage, health-care and insurance industries. The average historical deficit is about 2.5% of GDP.

With the ill-conceived government reactions to the financial crises, and the economic downturn that has followed, the unfunded liabilities of various federal programs -- such as Social Security, pensions, Medicare and Medicaid -- are over the $100 trillion mark. With U.S. federal tax receipts at about $2.4 trillion, this level of debt virtually  guarantees higher interest rates, huge tax increases, and -- partial default on some government promises.

Beginning in early September 2008, the Bernanke Fed made an abrupt turnaround and radically increased the U.S.  monetary base -- currency in circulation, member bank reserves held at the Fed, and vault cash -- by a little less than $1 trillion. The Fed totally controls the monetary base by purchasing and selling assets in the open market. By making  such a radical move, the Fed signaled a 180-degree turnaround in its focus from an anti-inflation position to an anti-deflation position. The stimulus bill passed by Congress early in the Obama Administration added almost another $1 trillion.

This percentage increase in the monetary base is the largest increase in the past 50 years -- by a factor of 10! (See chart, courtesy of Laffer Associates) This is so far outside the realm of our experiences that historical comparisons become meaningless.


It's difficult to estimate the magnitude of the inflationary and interest-rate consequences of the Fed's actions because we simply haven't ever seen anything like this, ever.  To date what's happened is potentially far more inflationary than were the monetary policies of the 1970s, when the prime rate peaked at 21.5% and inflation hit the low double digits. Gold prices went from $35 per ounce to $850 per ounce, and the dollar collapsed on the foreign exchanges.

When the Fed is no longer able to monetize this kind of expansionary monetary policy by selling Treasury securities, we face a brand new kind of financial collapse. Once again, I say “Let them fail”.  The markets are much better and more efficient  at sorting out these kinds of excesses than any kind of government intervention, no matter how well-intentioned. You are going to have job losses in either case – as we are seeing right now. Even with all the so-called “stimulus”, the unemployment rate has continued to rise throughout the first half of 2009. All that has resulted is you and I are a lot poorer, because somebody is going to have to pay the Piper!

Andrew Klavan has one of his  “culture” videos about “Why are Conservatives so Mean” that really brings this concept home:

My regret is that fiscal conservatives waited until after Mr. Obama got elected to rediscover their “small government” principles. This is INEXCUSABLE.

What we’re being left with is a huge bill that our generation cannot possibly pay, and a Socialist –style economy that would make our forefathers turn over in their graves. Let Them Fail! What am I talking, Greek?


Too Big to Fail?

The argument is familiar. Just like AIG and General Motors, California says it is too big to fail.

And once again, I say: LET IT FAIL. Let’s stop the bullshit, printing fake money so we can try to pump life into zombie banks, insurers, automakers, and states – all at taxpayer expense. Let’s talk about inflation for a moment. Let’s talk about letting the markets correct themselves, painful as that may seem to be.


I’ve watched a few of those Zombie movies. And I know that you cannot stop the Zombies by appeasing them with money. The only way to stop them is to chop off their heads. The fiscal equivalent is to let the big insurers, banks, automakers – and even states, take bankruptcy and reorganize. It’s not the end of the world, and it isn’t the taxpayer’s mandate to shore up institutions who don’t understand basic fiscal responsibility.  Don’t we remember “The Boy Who Cried ‘Wolf’”?

Inflation is seldom defined. Inflation is simply  a decline in the value of money. This simple definition gives us insights into what causes inflation and why we might be concerned about it. It also provides insight into how we attempt to measure inflation.

Milton Friedman was famous for pointing out that inflation is  a monetary phenomenon. If the amount of goods stays the same and the monetary authority increases the amount of money, then it will take more money to buy the same amount of goods, which means that prices will rise. That’s the classic definition; it is as objective as gravity.

This is why we frequently define inflation as  “prices rising”. This  should make it clear that inflation cannot be caused by monopolies, or unions,  or decreasing taxes. It is always caused by the supply of money rising faster than the supply of goods.

If the supply of goods falls but the amount of money in “circulation” remains the same, then we can have the same effect, so it is possible for a restriction in production to cause inflation if the monetary authority does not decrease the money supply to match the reduction in production. Think OPEC, although they haven’t really been very successful.

Inflation, unchecked, can become hyperinflation:


The above is a Zimbabwean 100 Billion Dollar note, along with the number of eggs it can currently purchase. With hyperinflation, the currrency becomes effectively worthless and the population resorts to the use of other currencies or barter.

The Federal Government attempts to measure inflation through the use of various indices. The most popular of these is the Consumer Price Index (CPI). The basic idea is to see how much a basket of goods cost in a base period, currently 1982-84, and compare it to today’s cost of the same market basket.

Right away you can see some problems with this. For example, a 1982 computer will not be the same as a 2009 computer. An iPhone won’t be in the 1982 market basket at all,  whereas it might well be in the typical market basket today.

As prices of some goods rise and the prices of other goods fall the average consumer will gravitate towards the goods with falling prices and away from goods with rising prices. Since some government payments, such as Social Security, are indexed to the CPI, there is some political interest in how this measure is determined as well. For this and other reasons, the Government has been known to “tinker” with these formulas.

Economists recognized some time ago that the Federal Reserve was increasing the amount of money as a mechanism to solve the credit crisis, which was to a certain extent caused by prior Fed policy, and warned that we would be seeing a rise in inflation as a result.

We aren’t seeing “much inflation” – yet. Gold, oil, etc – a little bit.  But it can take years for the effects of the current ENORMOUS monetary expansion to be felt in the general economy. Sooner or later, especially when and if the current slowdown turns into a recovery – you will begin to see the effects. We’ve created more money in the first 100 days of the Obama Administration than was spent to finance the entire Iraq War from 2003 to 2008.


A look at the adjusted monetary base of the US shows that we have created a nearly 40% growth rate in money supply in the last 12 months. Clearly, this meets the definition of future inflation.

Not only that, but we are coming out of the bottom of the lowest solar activity in decades. Once Solar Cycle 24 gets moving and we see more sunspots and solar radio activity, this 11 year cycle tends to exacerbate inflationary pressures. Interest rates go up, commodity prices go up, and “inflation” goes up. The British economist Ralph Hawtrey wrote "It is after depression and unemployment have subsided that inflation becomes dangerous."

Bailout Mania

Taxpayer bailouts are a terrible mistake. They would subsidize the shoddy management practices of the corporate bureaucrats at General Motors, Ford and Chrysler, and would reward the intransigent union bosses who have made the UAW synonymous with inflexible and anti-competitive work rules.

Bailouts of U.S companies, banks, and insurers also would be a mistake, as would bailouts of homeowners, states or any other constituency. If politicians genuinely want to help the economy, they should focus on reducing the burden of government, not increasing it. The reason why California is in such trouble is because it has too much government and not enough income to pay for it. California doesn’t need a bailout. It just needs to learn to balance it’s checkbook  like you and I do.

So, what can you do to protect yourself? Well you can buy oil and gold, and other commodities. Mining stocks may be better than pure gold since they pay great dividends. There are also oil drilling trusts that behave similarly. And, don’t expect the stock market to make any major moves up. Right now, it’s ready for another major decline.

Don’t shoot the Messenger.


Visual Studio 2010 Beta 1 – and Install Fix

Recently Microsoft made Visual Studio 2010 available to MSDN Universal subscribers, and will shortly make it available to the general public as well. Previously this had only been available as a closed MVP limited CTP downloadable on Connect.

Visual Studio 2010 provides some really attractive advances, particularly in the area of dynamic languages (F# now being a full-fledged Visual Studio language choice), Workflow (with a brand new workflow engine), Cloud computing (Azure), and – for Silverlight developers – not only is there now a full interactive drag-and-drop designer window, but you can choose whether you want to develop with Silverlight 2 – or Silverlight 3 – all from the same IDE!

I’ve installed this on my primary development desktop machine alongside Visual Studio 2008, and while it hasn’t been long enough (only 2 days) to make firm determinations, so far I have not seen any “interferences” from having both products installed at all.

If you are interested in a detailed rundown of all the new features of Visual Studio 2010, go here. There is also a main Documentation page online that has walkhthroughs, code samples, and much more.


On my laptop, Visual Studio 2010 and the .NET Framework 4 Beta installers failed, claiming that I had to remove .NET Framework 1.0 first. Unfortunately for me, it would not uninstall.  Aaron Stebner to the rescue, once again! This Microsoftie knows more about installer issues than God, I swear!  You can download his “.NET Framework Cleanup Tool”, run it, and it will take care of everything. Once that is done, you will be able to install Visual Studio 2010 and the .NET Framework 4.0 Betas.


PDF – Portable Document Format, my butt!

I was trying to print out the Silverlight riaservicesoverviewpreview.pdf and, like so many other PDF files, it came out with missing letters that were blank and basically, thanks to Adobe’s bullshit marketing, I invested 116 pages worth of dead trees and printer ink to get a totally useless document. If you’re like me (and I suspect there are a lot of us) you will often print out this kind of  stuff so you can sit in bed before you go to sleep and take out your hellacious yellow highlighter and mark up a document that you are studying.

Well! So much for that. Not only that, but Adobe’s latest version of Reader is bloated software that takes up a lot of resources, and they’re now using it to “Package” Adobe Air and whatever other gobbledegook they think I should have, that bears NO FYOOKIN’ RELATION to viewing and printing documents. I don’t have a choice anymore. If I refuse to accept the Air Installation, I CANNOT HAVE THE FREE ADOBE READER, unless i want to go find an older version without the mandatory “baggage”.  And if I download some “reader alternative”, then when I go to some site that wants me to download a PDF, it doesn’t detect that I have Adobe Reader installed, and I’m sunk.

Microsoft offers some “Free” versions of their developer software (for example, Visual Studio Express, and SQLEXPRESS) that are very full featured. But they DON’T DELIVER BAGGAGE as a condition of using the software!

I am really getting sick of this shit! If you want to promote a portable document format and a free reader for it, then DO SO! But Do it right, and nothing more. Don’t use it as a vehicle for promotion of irrelevant “features”. Don’t hand me some bullshit software that I didn’t ask for,  and force me to install it just so I can be able to read and print your high-falutin’ format. PDF was originally designed for something quite different than what it’s being used for now. It was originally for preserving format for printing documents. Now, it’s become totally bastardized.

There are plenty of other formats you can use. RTF is readable and printable by virtually every word processing program available, not just Microsoft Word. It preserves the formatting and embedded images very nicely, and when I print it, I don’t get missing letters in my words that fail to print. XPS, which Microsoft “invented” is another good format, and there are others. What I don’t want is products that create new processes “Adobe Updater” for example, that hog resources on my machine and slow up the works.

Adobe Updater, Apple Mobile Device Service, Google Update,  ITunes, Zune, and half a dozen other offenders are now appearing in my Task Manager processes list. Did I ask for this CRAP? Did anybody tell me they were going to install it? NOT!

But the bottom line, to me, revolves around the concept of using what is promoted as  an “open format” to cram extra “stuff” down the consumer’s throat (Adobe Air, for example), and to have third party “PDF gadgets” that may  either create invalid or corrupt PDF files that turn out to be useless for printing. For example, my Microsoft Word 2007 program offers a “Save as PDF” option. What guarantee do I have that the result will print without errors? What validation is available to make sure it “works correctly”? Do I even know if it came from Microsoft, or some other vendor? We DO NOT have open standards for document rendering, display and printing, to the contrary of what you may be hearing. When a true open standard for portable documents emerges – without all the BS baggage -  I’ll be the first to support it. PDF doesn’t make it, in my opinion. The problem is --everybody wants open standards – as long as it is “theirs”!  I say, BULLSHIT! Open standards means everybody uses it willingly – whether they invented it, or not. The standard is published, everybody signs on, and that’s the end of it! Period! And there should be reference applications that embody ONLY the standard, with NO BAGGAGE!

Why do you Silverlight RIA guys feel compelled to save this stuff in PDF format? You certainly aren’t doing me any favors. BIG FAIL. Sorry, pals! Do no evil.

A Tour Through Microsoft Silverlight 3 RIA Services

The main focus of Silverlight RIA Services is to provide an easy-to-use infrastructure for service-enabling Silverlight Applications, sharing of common entity classes, and performing bi-directional work with data in your Silverlight applications. Controls can be made “data aware”, and you can save a lot of time by not having to write a lot of code to be able to work with data from the server. RIA services also provides an easy way to hook in ASP.NET Membership, Role, and Profile providers to your Silverlight application, and to enable the UserContext on Silverlight controls.

Once you grasp everything that Silverlight RIA Services offers, you will see that developing data-aware LOB applications with Silverlight has just been made an order of magnitude easier. You will be able to spend your time focusing on what you want your application to do instead of spending a lot of tedious time to put in the plumbing just to get to “first base”. Silverlight RIA Services already gives you all the plumbing, and it works great.

RIA Services is composed of 12 distinct  namespaces that all work together to provide a rich data model and plumbing framework for enterprise Silverlight applications:


System.ComponentModel.DataAnnotations Contains data Model extension metadata attributes and classes, Validation Attributes
System.Web.DomainServices Contains DomainService  and DomainServiceContext  and related classes / attributes
System.Web.DomainServices.LinqToEntities LinqToEntities related classes and ObjectContext extensions
System.Web.DomainServices.LinqToSql LinqToSql Domain Service and DataContext extensions
System.Web.DomainServices.Tools Custom MsBuild tasks to create Silverlight Client working proxy
System.Web.Ria DataServiceFactory and SilverlightApplication control for Silverlight RIA applications
System.Web.Ria.ApplicationServices User, Authentication and Profile classes to enable Membership, Roles, and Profiles
System.Web.Ria.Data AssociatedEntities, CodeProcessor, DataServiceResult for communicating data between service and client
System.Windows.Controls DomainDataSource and related classes
System.Windows.Data Descriptors and collections for grouping and sorting data
System.Windows.Ria.ApplicationServices Authentication, Login and User related classes
System.Windows.Ria.Data DomainClient, DomainContext, Entity and related classes

RIA Services provide three modalities – Framework, Tools, and Services.  Framework components support best – practices patterns for writing application logic and validation so that it can be easily used on the presentation tier. Tools add to existing Visual Studio capabilities by linking the client and mid-tier projects in a single solution and by enabling smart code generation in your Silverlight client projects. Services utilize the patterns to support commonly used capabilities such as authentication and user settings management.

.NET RIA Services focus on the end-to-end use of data. It may be retrieved through a Data Access Layer (DAL) of your choice. It can be shaped for use in the presentation tier and annotated with suitable metadata for validation and access control. The new framework components support data and metadata flow across tiers through a controlled set of operations.

There have been a number of additions and “last minute” downloads that didn’t quite make the MIX ‘09 presentation. If you want to get started with Silverlight RIA services, here are some very good links:

RIA Services Feedback Forum

What is Silverlight RIA Services?

RIA Services – from vision to architecture

Silverlight Store SEO Example

RIA Services Walkthrough Sample

Silverlight Business Application template files

Classifieds Sample


Finally, here is the main info page for the May 2009 Preview. Be sure to get the PDF as well!

I also have an article at  eggheadcafe.com on  using Membership, Roles and Profile with RIA, and I intend to publish at least one additional article soon.

NOTE: In the Business Application via Template files, it states that you must have SQLEXPRESS installed to use the built-in Authentication service. This is not 100% true. You can use regular SQL Server and any database you want, as long as you have run the ASPNET_REGSQL utility on it. Then just do this in your connectionStrings section of web.config:

    <remove name="LocalSqlServer"/>
    <add name="LocalSqlServer" connectionString ="server=(local);database=YOURDATABASENAME;Integrated Security=True"/>


Hacking – and the Least Privileges Doctrine

Recently we had a forum moderator (which people we pay a nice monthly stipend) get into some issues with drug abuse problems. This individual had to be checked into a rehab clinic to get himself straightened out.  While I was aware of him having these issues in the past, I was not aware that this person was still having such problems. But the bigger problem is that the correct security policy was not 100% in place, and that is 100% my responsibility.

Long story short, due to a lack of security enforcement on our part, my site account and all my articles and such ended up getting deleted. I had to restore them from a most recent database backup. Not a very big deal, but certainly an annoyance.  Needless to say, we now have a new Forum Moderator.

The definition of Principle of Least Privilege is fairly simple and easy to comprehend. The idea is that users will be given only the privileges absolutely necessary to perform any given task. This might be configuring their computer, browsing the Internet, running a financial application, or sending e-mail. Or it could be the permission set you give a Forum Moderator on a web site you run.  You might have also heard the term Least Permission, which is very similar to the Principle of Least Privilege.

When you have employees or contractors who have been given the responsibility to do a certain job, it is extremely important to grant them ONLY the permssions to do that job, and nothing more. Studies show that the majority of hacking attacks are “inside jobs” – meaning that it is usually the work of a disgruntled employee, or even one who is mentally unstable.

Companies, organizations, and others who run websites, databases, or other information stores that could possibly be compromised would do well to examine this doctrine and ensure that they are following it.

Sadder, but a lot wiser…


IIS 6.0, Compression, and Classic ASP Pages

The incompetent with nothing to do can still make a mess of it.   - Laurence J. Peter

Well this one is a hoot. Enabled HTTP compression in IIS 6.0, and suddenly Classic ASP pages (yes, we still have a few) that required Integrated Authentication just wouldn’t work.

With Anonymous Authentication unchecked, and Integrated checked, and ACL’s on the folder permitting only Adminstrators, you would get a Windows Login prompt as expected but when you would provide credentials, it never went through.

As luck would have it, we duplicated the pages on another site where compression was turned off, and those worked fine. On a hunch, I disabled compression on the includes folder, and that fixed it!

Seems for some reason that Classic ASP include files don’t like HTTP compression at all.

And a thanks to Rick Strahl for reminding me that you need HTTP KeepAlives turned on to use Windows Auth with classic ASP.

Compression will reduce our bandwidth to around 25% of what it has been. That’s good!

In IIS 6.0, getting compression completely enabled is tricky. Tools like ZipEnable from Port 80 can make it a lot easier, and they provide the kind of fine-grained control that lets you disable compression on  a single directory.

Windows 7 Upgrade path from a Beta: No can do?

The RC (Build 7100) versions of Windows 7, which will be available to human beings shortly,  will not upgrade over a pre-release version of the same OS. But, not to worry! The Windows 7 Engineering Blog provides an explanation and instructions on how to do it. They acknowledge that tens of thousands of people at Microsoft alone have been using Windows 7 pre-release builds as their primary OS.

Essentially it is as simple as copying all the files from the burned DVD to a folder on the target machine, then editing the file CVersion.ini in the Sources folder to have a MinClient value lower than the down level build. For example, you would change 7100 to read 7000. Save the file in the same place and run setup from the folder on the  hard drive itself, and you will be allowed to upgrade.  As always, there are a number of cautions and caveats in doing this, so read their blog post carefully. These same steps will be necessary when going from the RC to the RTM milestone.


The Twittification of Live Messenger

I’ve noticed this new “Groups” thing in the latest version of Windows Live Messenger, and it seems that the kind folks at Microsoft have really  started to “get it” about what “Social” is.

If you enable the “What’s new” display at the bottom of the Live Messenger window, you will see people in your “group” (that you have started) who have joined other people’s networks. If you click on the links, you can view information about that user and their network, and you can invite them to join (or, ask to join).  It’s not that intuitive at first, but if you play around with it using people that you know, you’ll start seeing new Contacts in your contacts list – most likely people you didn’t know were using Messenger, and / or you probably never thought to invite.

I’ve already made a few new friends with this – people I always wanted to be able to have on Messenger, but I either never thought of it, or I didn’t know how to invite them.

When “Groups” first was started, I started a “.Net devs” group just for fun, and invited a few of my Messenger contacts. Several people joined. The concept of getting your Twitter friends to join a Messenger group or network is powerful. Think about it.

The key thing – like any other new “toy” – is to use it to join networks of people you are really interested in (in my case other MVP’s and .NET developers). This will keep the signal-to-noise ratio at an acceptable level. I get followed on Twitter by all kinds of strange folks – who are obviously following a search on some keyword in a Tweet of mine. I check them out, have a look at who’s following them, and only then do I decide.

“Social” means different things to different people. To me, it means developing meaningful relationships with like-minded people where I can help them, and they can help me. To others, it’s just collecting names. You have to decide what “social” really means to you.

Kudos to Microsoft for thinking social and “getting it”. I think it’s a step in the right direction vis-a-vis “unification of social”.


Some facts about Silverlight 3 and where it’s going

“Being an expert means having credibility. It doesn’t matter how much you know if people don’t trust your answers.” – Brent Ozar
Silverlight 3 was first announced at the IBC 2008 show in Amsterdam on September 12, 2008. It was unveiled at MIX09 in Las Vegas on March 18, 2009. A beta version was made available for download the same day.

Silverlight 3 includes an increased number of controls - including but not limited to DataGrid, TreeView, various layout panels, DataForm for forms-driven applications and DataPager for viewing paginated data. Some of these controls are from the Silverlight Toolkit. In addition, Silverlight 3 includes a navigation framework to let Silverlight applications use the hyperlinked navigation model as well as enabling deep-linking (linking directly to specific pages) within Silverlight applications.

On the media front, Silverlight 3 supports AAC audio decoding as well as hardware-accelerated H.264 video decoding. The native multimedia pipeline is also programmatically exposed, so that other formats can also be supported by third-parties using managed code decoders. Silverlight 3 supports perspective 3D which enables 3D transformations of 2D elements. These transformations, as well as many 2D operations like stretches, alpha blending etc are hardware accelerated. Custom animations, including transforms and blends, can be created on Silverlight elements using HLSL to make use of pixel shaders. A Bitmap API is provided to let Silverlight 3 applications manipulate bitmaps. Silverlight now uses the GPU to accelerate the composition of Visual Trees (like WPF, Silverlight elements correspond to Visual elements, which, when coupled with the layout information, forms a Visual Tree which is then rendered to form the final display). Visual trees can now be cached; this increases performance in cases like transforms, which create lots of throw-away intermediate states, by not making the state transitions on the main Visual tree. Silverlight 3, on release, will support ClearType text rendering.

UI elements in Silverlight 3 support element-to-element binding - which allows one element to be bound to the state of another element, including  a validation mechanism for data binding. Unlike Silverlight 2, which allowed the applications to save files only to the local isostorage, Silverlight 3 applications can save to any location on the file system via the system Save File dialog. However, the path where the file is saved will still be hidden from the Silverlight application. Any external assemblies used by Silverlight applications are cached to so that they need not be redownloaded for subsequent instantiations of the application.

Silverlight 3 also includes a LocalConnection API to communicate (using a named pipe style model) among multiple running applications on the same machine, irrespective of the browser  and can monitor for network connectivity events. Silverlight 3 can optionally use Binary XML to communicate with WCF services.

Silverlight 3 supports Out-of-Browser deployment, i.e., Silverlight applications can be installed to the system for offline access (provided the application manifest is modified to allow local installation) where they run outside the browser. They are launched using the Start Menu or desktop shortcuts, similar to ClickOnce installations, and run without the browser window. Applications can check whether they are running inside a browser or not. When running out of browser, HTML interop is disabled. In addition, access to the Function Keys is  enabled. Locally installed Silverlight applications still run in a sandbox.

Installed Silverlight 3 applications automatically check for updates asynchronously on every launch and updates are automatically installed. Running instances of the applications are informed when updates are available.

The current Silverlight 3 beta does not support a “go live” license, so developers cannot currently put their Silverlight 3 beta applications on the public internet because there is no publicly available runtime to download.  You can find out more about Silverlight 3 here.


You’re Fired! – Redux

I walked into the office this morning and was called “downstairs”. The official line was “Due to the economic downturn, blah blah”… You get the idea. I know better. I was working on a project that was grossly underbid as a fixed-price deal by a company - designated  “architect”  -- which consequently forced a few of us  developers into an impossible position, under extreme time pressure, on a new technology that nobody in the office had ever used before. The schedule was virtually impossible to meet. Anyone with an above room temperature IQ could easily see this, and I had been vocal about it from the beginning, so what happened to me was no surprise.  Management was in a state of denial.  One developer who was brought on decided to quit in the very beginning. Then, they scrambled to bring on two other developers from another office and another project.  The client was not very helpful, although they could not be blamed, really. This particular  project was destined for problems from the beginning, in my opinion. Of course, one could make the case that the company was in a position of attempting to do anything to keep business in the pipeline, “due to the economic downturn”. Still, when you are bidding a project, you don’t want to shoot yourself in the foot, but it seems to me that’s what they did.

To add insult to injury, the “architect” person refused to allow the developer team to use multiple checkout in TFS (that’s the default) –- causing hour upon hour of delays, and on top of that – refused to allow us to include the client’s base class library project  in the solution so that we could debug through, claiming it would “add complexity” – which makes no sense, since it was the  identical source code the client gladly  provided us with and used to  build the assembly to start with! It actually got so bad that developers started working offline to be able to get stuff done. I have never – I repeat NEVER – been put into this kind of arbitrarily restrictive environment in developing an application!  Developers were not consulted in advance about this project and its risks. Only after I got involved did I realize that one of the scope requirement our “architect” had included -- of WCF enabling the client’s entire library-- was virtually impossible, and I successfully got them to remove this requirement after screaming bloody murder about it. What am I talking here, Greek? I said what I believed was right, and i got shot down! We had an environment where you were supposed to be able to provide input – but when you did, it became a “good old boy” network and you would be quashed. Not cool at all! What’s more, if you are the architect on a project, you have NO BUSINESS tinkering with the codebase and checking in untested code that breaks the application and causes even more hassles for the developer team!

This is a key fallacy in presenting and proposing a project to a client – when somebody who has been designated  the “project architect” decides to do  everything “on their own” -- without prior consultation with the actual coders who will be tasked with building it—intelligent people  who can usually offer valuable input. This is “Ivory Tower” development proposal methodology, and it’s just wrong. Since when is the “architect” supposed to be the guy that tells the developer team how to handle their source control? I think that when people get into a position of “defending turf” – they can become extremely threatened by other people who question their authority, even in the slightest way.

Actually, I like this person – but it became “political” because I opened my mouth and said the obvious.  I don’t  care at this point;  I’m blessed because I’ve built up a substantial income with my eggheadcafe.com partner over the last nine years (to his credit, he seems to be able to put up with my idiosyncrasies just fine…).

When companies are stressed, managers often make bad decisions -- it’s the guys who are making six figures that get chopped first, even though they are often the people who can help the most – but only if they are asked to do so. I certainly was not asked.  If companies do not take concrete  steps to have a proactive policy of LISTENING to the people who will be  producing the product,  then  they will fail.   Managers  don’t always think logically – they are too often motivated by the concept of “protecting their ass” – and it degrades into  a political “good buddy network” process. I’m sure if you’re reading this post that you may have already been exposed to this.

When I see a process that’s flawed, I’m gonna speak my mind about it. When you stick to principles and do this, it may get you branded as a scapegoat and then you’ll be the first to go, illogical as it may seem.  So be it – I can sleep well now. I’m so relieved that I no longer have to spend 2 hours of my day driving into Orlando and back to put up with this B.S. every day.  Now I can focus on what I do best – writing good code and articles, making presentations, building the business. If I find another “day job” – you can bet I’ll choose it carefully.

The bottom line is, “To thine own self be true” --  I would likely have been out of there looking for a better spot  anyway. As a friend and co-worker said, “They have kicked out an excellent developer and team member”.  That’s comforting to hear, but in this case it just wasn’t working for me –-I now believe the company  actually did me a favor. Thank you! (BTW – here’s my current resume!)