March 2, 2010

United States Deficit & Debt During Presidents from 1969-2019

What is the difference between the Deficit and Debt you ask? Wikipedia and the U.S. Department of the Treasury have good explanations.

At times my curiosity will get the best of me and I start trolling through the glorious amount of data available on the Internet. A while back I started using the awesome data published by the United States Congressional Budget Office to better understand the US Deficit and US Debt during the different presidential terms in recent history. I managed to coerce the data into a useful chart that satisfied my curiosity:

USA CBO Deficit & Debt Since 1969, Projections through 2019

The top chart is the deficit and the bottom one is Debt held by the public. All numbers are expressed as a percentage of GDP as this seems to be the only meaningful value over time. As the legend shows the dark blue line is actual and the light blue line is projections.
The actual data comes from the Congressional Budget Office Historical Budget Data report revised on June 23, 2009 and can be found at http://www.cbo.gov/budget/historical.shtml. The projections data comes from "The Budget and Economic Outlook: An Update published in August 2009. It can be found at http://www.cbo.gov/Spreadsheets.shtml.

All of this was done as a spreadsheet in Apple Numbers '09. The spreadsheet with the raw data and the chart can be downloaded by anyone here.

February 18, 2010

Fixing the Google Buzz Feeds

Buzz to Twitter is...
Recently I showed you how to find your feed for Google Buzz and integrate it into FreindFeed. This allows you and your friends to see your Google Buzz posts on FriendFeed, and since FriendFeed will automatically push your updates out to twitter it gives you a way to make your Buzz posts show up in Twitter.

Cool but...
That all sounds good, but the problem is the feed from Google Buzz stinks. Every post has a title with something like "Buzz by Scott Willeke from Mobile" or "Buzz by Scott Willeke from Google Reader". So you see this in your feed over and over. Nice huh? Yeah, I didn't think so either.

Yahoo Pipes Makes it Better

So I've Used the venerable Yahoo Pipes to clean this mess up for all of us. Yahoo pipes is a visual environment that makes it easy to mashup information from web pages, and is really useful to modify RSS/Atom feeds. To use it just visit http://pipes.yahoo.com/activescott/googlebuzzfeed and enter the URL to your Google profile page (see this page for help finding your Google Profile Page URL). It will return a feed that you can click on "Get as RSS" and get a magically cleaned up Google Buzz feed.

Now, right-click on the Get as RSS link and copy it. Then enter that URL in FriendFeed (see friendfeed's help on this) and it will send much more cleanly formatted feed to FriendFeed and Twitter.

How does it work? Well go see for yourself. Yahoo Pipes are open source by default so you can go view the pipe and see how it works and even clone a copy to play with for yourself. Cool!

February 9, 2010

Publish your Google Buzz Posts to Twitter with FriendFeed

Visit your google profile page (e.g. mine is http://www.google.com/profiles/activescott) and view the source. You'll find a "link" element like so:

<link rel="alternate" type="application/atom+xml" href="http://buzz.googleapis.com/feeds/YOUR GOOGLE BUZZ ID/public/posted">

Take the url you find there in the href and add it to friendfeed as one of your services using the "Custom RSS" service (see friendfeed's help).
Then go to your friendfeed settings and make sure you are publishing your google buzz service entries to twitter. See this friendfeed help article for info on how to do that.

Now post to google buzz and watch your posts end up in twitter!

January 20, 2010

The Role of a Scrum Product Owner

Introduction to the Introduction


Many of you know that I am currently a student at the University of Washington in The Software Project Management program. Overall the program is very good. My wife and I are both in the program and we chose to move from Columbus Ohio to Seattle Washington to take the course because of its special focus. Its special focus is on the specialized field of Product Management and going further it is focused on Product Management of software products.
However, it is not narrow in scope, as we cover everything from recognizing successful ideas for products, to marketing (lots of marketing), to detailed business cases (one former alumni who holds an MBA said this course is basically a “mini MBA”), to project management and of course extensive detail on requirements. I could write much more about details of the program, and for now we’ll start with one small part of it.
Recently, I was asked to do a presentation on the Product Owner role in the Scrum framework. Based on feedback from the audience the presentation went well. They are all much nicer than me though, so maybe they’re being polite. I’ll count on my fellow opinionated Internet friends to give me an honest assessment. Please do.
So, with this pedantic introduction to a topic that has many other informative and experienced authorities that I stand on the shoulders of, lets get into my first article on The Role of a Scrum Product Owner.

Before we Begin: What’s the deal with Pigs & Chickens?
Before we can discuss Scrum we need to cover the deal with pigs and chickens. If you read much of anything about scrum you’ll start finding references to pigs and chicken. This comes from a little story:
A chicken and a pig are together when the chicken says,“Let’s start a restaurant!”
The pig thinks it over and says,“What would we call this restaurant?”
The chicken says,“Ham n’ Eggs!” The pig says,“No thanks, I’d be committed, but you’d only be involved!”

The lesson is: Since the team is responsible, empower them. The practical matters are only team members estimate their work, and only team members speak in daily scrum meetings.

Introduction to Scrum

There is an official description of Scrum by the authority on scrum at ScrumAlliance.com. It's short and you should read it. You will find that most of the people you talk to that are "using Scrum", practice Scrum differently than the description therein. However, due to these differences I feel it is important to give a very brief introduction to my understanding of some core elements of Scrum before we can effectively talk about the role of the Scrum Product Owner.

People tend to practice Scrum in a multitude of different ways. I find that often they don’t know they are using Scrum in a way that is not “official”, but many are aware of it and you’ll hear them say “We use Scrum but...” Thus we refer to these people as “Scrumbuts”, and you can find many articles referring to Scrumbuts, and I think they are some of the very best articles on Scrum (ignore the condescending ones) and iterative project management in general.

The Sprint

Sprints are short iterations of work performed by the team. Key components are the following:
  • Begins with commitments
  • Ends with deliverables
  • Consistent team
  • Consistent length
  • Short: <1 month
Every sprint must begin with commitments from the team. The team makes a commitment to deliver something of value to the project’s customers at the end of the sprint. At its essence this is what the sprint is all about: The deliverables to the customer.

Here, I define "customer" as the one paying for the project/product. This might be a client for a consulting engagement. For a commercial product this might be the executives sponsoring the project.

The commitment of the team cannot be understated. At the beginning of each sprint a success criteria must be defined and agreed to by the team that is crystal clear. At the end of the sprint all parties need to feel that the success/fail result of the sprint is obvious. At the end of a sprint if there is any doubt, try to define a better success criteria next time.

Consistency

Sprints are used as a basis for estimation. So it is important that they have a consistent length and a consistent team. This way, under normal circumstances the same team will get roughly the same amount of work done each sprint. So resist the temptation to let your sprint linger around an extra day and do whatever you can to keep the team intact. If these things change at some point just be prepared to see results that are not consistent with past results.

Scrum Roles


Scum identifies the following roles: Team, Stakeholder, Product Owner, ScrumMaster.

The Scrum Team is the people doing the work. These are usually mostly developers and QA engineers. The team is central to Scrum. The team is permitted to make their own commitment each sprint and they are to be uninterrupted during the sprint with new tasks.

In Scrum, a Stakeholder is the customer. Usually the one paying for the project or the ones who will use it and decide whether the project’s result is successful or not (this is different than most other project management methodologies such as PMI).

A Product Owner is the person who is responsible for the business value of the project. If you’re working on a product this is usually a “Product Manager”, in some other cases this might be a representative of the client.

The primary responsibility of the ScrumMaster is to remove obstacles for the team. He/she should also make sure that the other roles work according to the scrum framework. He is a "master" of the scrum framework, not the "team". In this respect a ScrumMaster is unlike the role of project manager as he doesn’t have any particular authority over the team. However, many of the skills that a project manager uses is also useful as a ScrumMaster. These include communication, people skills, good judgement, etc. The ScrumMaster is often a member of the team, but can never be the Product Owner too.

Scrum Artifacts

Product Backlog

The product backlog is a prioritized list of business value that the team needs to deliver. It is not a list of tasks. “Business Value” means value to the stakeholders. Everything must be expressed in a way that, when “accomplished”, the stakeholder will experience/see a real benefit.

Sprint Backlog

The sprint backlog is a list of items from the product backlog that the team commits to delivering during the sprint. Additionally, each product backlog item that the team commits to deliver should be decomposed into its respective tasks during the Sprint Planning  meeting.

Burndown Charts

Burndown charts are a measure of the total amount of “effort” (e.g. estimated hours of work) that is remaining during a sprint. By the end of the sprint a sprint burndown chart should show that zero effort is remaining.

Scrum Ceremonies

Sprint Planning Meeting

Before each sprint the team sits down and accomplishes two things:

  1. Commit to delivering a selection of the highest priority items from the product backlog. This selection is made exclusively by the Team and is their commitment.
  2. Decompose the selected product backlog items into manageable tasks.

If you want to learn more about scrum I recommend Scrum training or spending time with a passionate Scrum practitioner (not just any ol’ scrumbut Joe). However, a great book on the topic is Ken Schwaber’s Agile Project Management with Scrum. Check out it’s rating on Amazon and you will see that many others agree.


Daily Scrum

Every day of the scrum the team meets very briefly and every team member concisely shares the following information with the rest of the team:
  • Accomplishments since our last scrum meeting
  • Things I will accomplish before next meeting
  • Obstacles to progress
There should be about three accomplishments and three things to accomplish. The obstacles should be outstanding and the ScrumMaster must take responsibility for either resolving them delegating someone to resolving them. Every team member should state all three points. If he/she has no obstacles they should state that clearly: “No obstacles.”

Sprint Retrospective

This is usually known as a “postmortem” but that term is often considered to morbid. Essentially it is an opportunity for the team to sit down briefly at the end of a sprint and discuss what worked well during the sprint and things they should change for the next sprint.

That’s it!

Principles of Scrum

As you can see Scrum is very simple. However, I like to say that Scrum is simple, but it is not simplistic. For Scrum to be successful you will need at least one person who truly understands and believes in the principals behind it. There are three principals of Scrum:

Transparency
You should have problems when using Scrum ("that's a feature, not a bug").
Inspection
You cannot inspect without transparency.
Adaption
You cannot adapt if you do not inspect.

The process of Scrum is designed to expose problems. You will find things like requirements that users don’t really want, that you began with not enough requirements, unrealistic estimates from dev or QA, unrealistic time constraints from stakeholders, team members that contribute significantly differently from others, lack of commitment from team members, lack of accountability, etc. That's good! Identify those things and discuss how to fix them, and fix them! Remember, it’s only two weeks. So if you can identify some problems in two weeks then at least you identified them in two weeks and now have the opportunity to start fixing them.

If you have genuinely smart/effective/savvy people scrum will work well (but so will just about any other process). Unfortunately, this is rarely the case, and with an experience Scrum coach or ScrumMaster, you will be able to identify and adapt to challenges rapidly.


Now, that this is out of the way, soon we'll talk about the role of the Product Owner in more depth.

December 5, 2009

Updated: Lessmsi - Less Msiérables - Utility to extract files from a .msi File (Windows Installer file)

A new update to the Lessmsi utility is available. Several people have requested various features and fixes and I have made several of them. There were many small updates and some of these are more tricky than they sound, but the most visible changes are as follows:

  • Good support for Windows Vista and Windows 7.
  • 64-bit operating systems are working automatically now.
  • Elevation is lo longer required / LUA is handled properly.
  • Columns are now user-sortable for all the lists.

Source code and compiled downloads are available at: http://code.google.com/p/lessmsi/
Everyone should update their links to point to that link as it will be the most permanent location for the project going forward. All updates will be published there from now on.

And just because a screenshot is obligatory with any post about software :)



Let me know if you have any problems or -better yet- if you find it useful!

November 13, 2009

Covariance, contravariance, and C# 4.0

Today I was working on some code where I came across something that seemed perfectly logical language semantics but C# didn't agree. The scenario was as follows:

Assume we have the following types:

class MyBaseClass
{
}

class MyDerrivedClass : MyBaseClass
{
}

and we have the following methods:

static void MyMethod2(out MyDerrivedClass outArg)
{
    outArg = null;
}

Then I want to write the following code:

MyBaseClass c;
MyMethod2(out c);

But C# tells me:

error CS1503: Argument 1: cannot convert from 'out ConsoleApplication1.Program.MyBaseClass' to 'out ConsoleApplication1.Program.MyDerrivedClass'

Even the error message struck me as odd. I'm not trying to convert from MyBaseClass to MyDerrivedClass (obviously that wouldn't be valid), I'm trying to convert to MyBaseClass.

If at first this doesn't seem odd consider the following method instead:

static MyDerrivedClass MyMethod1()
{
    return null;
}

This method is syntactically different than the first, but semantically it is exactly the same since in both cases the signature declares a method that takes no input but accepts MyDerrivedClass as output (and only as output).

However, with this syntax I can make the following call:

MyBaseClass c;
c = MyMethod1();

Note that semantically, c = MyMethod1(); is exactly the same as MyMethod2(out c);. Yet I can make the call to MyMethod1, but not MyMethod2. Why not?

Well, I thought, it doesn't really matter. It is obvious that it should work, the spec is just too strict and it doesn't.

This is some covariance that C# doesn't support. It is covariance, right? I always get those two backwards. Anyway, it is a bit surprising, because since generics where introduced, the C# community in general has a lot of emphasis on contravariance and covariance. So I got distracted doing some reading into contravariance, covariance, and eventually C#. I eventually ran across some plans for C# 4.0 which as a document named "New features in C# 4.0". Interesting...


As I'm reading, I see C# 4 features as "Dynamic lookup" (reflection/late invocation done beautifully), "Named and optional parameters" (yawn), "COM specific interop features" (I love COM, but isn't it a bit late for this -yawn-), and "Variance". Variance!? Cool!

So yes, ladies and gentlemen some cool covariance is supported in C# 4.0. In C# 4 you can write the following bit of code you have done ugly things to avoid in the past:

IList<string> strings = new List<string>();
IEnumerable<object> objects = strings;


Awesome, right? It does require the type -in this case IEnumerable- to declare that it will not take elements in though. Obviously, we don't want someone to be able to put a non-string object into that IEnumerable<object> now. The declaration for this is a bit funny considering how I got here:

public interface IEnumerable<out T> : IEnumerable
{
    IEnumerator<T> GetEnumerator();
}
public interface IEnumerator<out T> : IEnumerator
{
    bool MoveNext();
    T Current { get; }
}

In the document it explains the above as:
The “out” in these declarations signifies that the T can only occur in output position in the interface – the compiler will complain otherwise. In return for this restriction, the interface becomes “covariant” in T, which means that an IEnumerable<A> is considered an IEnumerable<B> if A has a reference conversion to B.
As a result, any sequence of strings is also e.g. a sequence of objects.

The funny thing is, despite the fact they are using "out" to declare covariance on types (and delegates), according to the document it doesn't apply the same logic to parameters that are declared with "out". So despite the fact they've done this cool work for covariance on types, it appears the scenario I was after originally still won't work. Oh well, at least we learned about some cool stuff to come...

October 16, 2009

Optimal IMAP Settings for GMail/Google Apps and Apple Mail

I've used IMAP with Google Apps GMail accounts for some time now. It works great. I use Apple Mail but at any time and from anywhere else I can login on the web and have exactly the same view of my mailbox as I last did inside Apple Mail. When I return to Apple Mail, any changes made on the web interface are reflected instantly in Apple Mail. Perfect!

I love having IMAP since it keeps everything in sync, and I am always using spotlight and Apple Mail's search feature to search my messages (including messages from before I started using Apple Mail and those sent/deleted only on the web interface). Of course I knew about the basic settings for configuring Apple Mail with GMail/Google Apps, but the Recommended IMAP client settings had eluded me until now.

Being able to confidently use settings like "Do NOT save sent messages on the server" and "Do NOT save deleted messages on the server" is great. I never really had a performance concern before, but things are even snappier now and, with over 100K messages between my IMAP+GMail accounts accounts, I'm happy to know that my mail is more optimally stored in GMail and on my mac.

October 12, 2009

Здравствуйте Leon

Today I took Oksana to one of her classes on the other side of town by
bus (just to help her learn the way). After I dropped her I was on my
way back, reading a book at yhe bus atop and heard someone speaking in
Russian. I looked up to see an older man walking by himself who
appeared to be speaking Russian to anyone who would listen. To his
delight I greeted him in Russian: "Здравствуйте".
Turns out he hasn't been in the US long and doesn't know much English.
Despite the fact that his English was only slightly better than my
very limited Russian, we smanaged to speak for about 25 minute in a
mix of the two until my bus came.

Boy do i need the peactice! We discussed everything from the cost of
flats, economy, education, and how nice people are in different states
and contries. Fun stuff.

Take it easy Leon.

September 11, 2009

Rumor Confirmed, I'm Moving to Seattle

Yes, the rumor you heard is true. I'll be moving to Seattle Washington (at least temporarily) as I have been accepted to the Software Product Management Certificate Program at the University of Washington. I'll continue my work on our best selling reporting and business intelligence products with the ActiveReports / Data Dynamics team at GrapeCity. GrapeCity's US headquarters is also in Seattle so that works out too!

I'm looking forward to this and excited about living in the Pacific Northwest, even if only temporarily. If any geeks I know in the Seattle area want to hook up drop me an email.

September 9, 2009

Bank Fail


At the beginning of 2009 I refinanced my home loan. At the time the bank informed me my tax/insurance escrow account was way overfunded and sent me a check for ~$1K. Shortly thereafter (after I spent it), they called and said they couldn't open the new loan because there was no money to fund the new loan's escrow. I asked questions and explained the situation, but ultimately I got the "I don't know sir, that's not my department" response and I had to come up with ~$1K overnight to prevent the refinance from falling through.


I just opened a letter from the bank and it is a check for ~$1,044.14 with a letter explaining that the new loan's escrow account is overfunded and they're required by law to send me this check. 

Should I laugh or cry?

August 18, 2009

Forwarding to Google Voice Even if they don't call your Google Voice Number

I've been a fan of Jott.com voice mail as I've noted before (a couple times). Recently I've been experimenting with Google Voice (gVoice) and found a problem. The key was that gVoice gives you a new phone number and gVoice doesn't work if people call the phone number you already use, in my case my AT&T wireless number.

Jott has a good solution to this where they take over your AT&T voice mail and it automatically hands all voicemail to Jott. It's a shame that gVoice doesn't do the same.

I got to thinking about it and decided I could use the same trick that Jott uses to take over voice mail. Essentially you enter a bunch of crazy numbers into your phone and it forwards your voice mail to Jott so you don't have to fiddle with AT&T voicemail anymore. The problem was that since gVoice fowards calls to my phone, I was scared to forward my phone calls right back to gVoice. Then gVoice gets the forward and forwards it to my phone again, etc., etc.

Using gVoice instead of AT&T Voicemail
Then I was doing some reading and in the gVoice documentation and found that gVoice always directs the caller to gVoice if the phone it forwards to does not answer within 25 seconds. Later I found this handy page on AT&T's forums where someone describes not only how to forward voicemail for AT&T wireless phones to a different voice mail system (like Jott does), it also describes how to set the delay before it forwards. The relevant part of that page is below:

  • On your phone, dial *#61# and click Send.
  • Some information should be displayed: number that the calls are being forwarded to and the delay before the forwarding engages.
  • Write down the number (including +1)
  • Dial **61*+1xxxyyyzzzz*11*30# and hit Send. +1xxxyyyzzzz is the number you wrote down previously, 30 is the delay in seconds. The delay can be set in 5 second increments, 30 is maximum
  • Dial *#61# to verify that the new settings are active.

So I setup my AT&T wireless number to forward to gVoice after 30 seconds. So if I don't answer for 30 seconds gVoice gets it. If someone calls my gVoice number directly though, gVoice comes into my phone and I have 25 seconds to answer before they are directed to gVoice voice mail (again because gVoice starts at 25 seconds).

In all cases now all of my voice mail can end up in gVoice even if they don't call my gVoice number. Perfect!

UpdateThis page from AT&T documents how to do the above and more with call forwarding features from your phone. Particularly of interest is the following few points from their instructions:

  • Busy Call Forwarding: Dial *67* plus the 10-digit number to which your calls should be forwarded and #. Press Send.
  • Call Forwarding No Reply: Dial *61* plus the 10-digit number to which your calls should be forwarded and #. Press Send.
  • Call Forwarding Not Reachable: Dial *62* plus the 10-digit number to which your calls should be forwarded and #. Press Send.
Missing Features of Google Voice
So the missing features for gVoice are:

  • Forwarding calls to an international number. When I travel to Russia, I have a separate local mobile SIM that I use because of AT&T's outrageous international rates there ($3.99 per minute). However, at this time gVoice doesn't let you forward an incoming call to an international number. Bummer. Please join me in requesting that feature from Google!

July 27, 2009

Google Chrome for Mac now Available (sort of)

I don't know if I've been under a rock or what, but after my last post about Firefox, Safari, and a brief mention of the lack of Chrome for Mac, Chris Heath pointed out that Google's Chrome Browser - aka Chromium- is already available for mac!

The developers that are working on the Mac version are publishing nightly builds at http://build.chromium.org/buildbot/snapshots/ . I'm guessing that the faint of heart should not download these builds, as they are pre-pre-pre-beta no doubt. However, I've spent a little time with the browser on Mac and the little browser didn't do anything they should be embarrassed of at this early stage.

July 24, 2009

Sorry little Gecko, but Firefox needs WebKit

I love Firefox. I love my extensions (most importantly delicious, AdBlock Plus, and FireBug). I love the search engines (most importantly, Google, FogBugz, Wikipedia, and Amazon), and I love the keyboard shortcuts in Firefox. I have come to love my user experience in Firefox (except the tear-off tabs came out quite ugly in Firefox compared to Safari). I don't care if there is a better user experience anymore, I just like Firefox's.

I like Safari. It is blazing fast and there is something about the way Safari loads and renders web pages that Firefox doesn't have (i.e. WebKit). I can't put my finger on it, but in Safari, pages have this "crisp" feel to them that is lacking in Firefox. For the past year or two I have been compulsively switching back and forth between Safari and Firefox. As much as I have tried -and I have tried- I can't make up my mind...

I have also tried Google Chrome and IE 7/8. IE just doesn't do it for me. I just can't find anything about it that makes me want to continue using it. Chrome is nice on Windows, and has that same crisp feel to it that Safari has (again, obviously WebKit). But it is only on windows (for now) and despite the minimalist UI that I like and the benefits of Safari, it has the same faults as Safari - I miss my extensions and keystrokes from Firefox.

As I can't seem to settle on one, I have come up with a few proposals for the browser teams to consider:

  1. Firefox should embed WebKit as it's rendering engine. Forgive me, I have followed Gecko development and I know this is blasphemy. I'm also a programmer and have a bit of understanding about how Firefox works, how it's chrome is rendered (not that chrome, this chrome) and XUL, but still. It could be perfect. Seeing how unlikely that is, I have more ideas. So don't give up on me yet...
  2. Alternatively, or maybe in addition, safari and chrome should implement hosting for Firefox's search engine's (i.e. open search) and extensions. Mozilla's JetPack Project is perfect for that, but I imagine it will be a while yet before all those handy Firefox extensions are ported. So for now, just make Firefox's extensions work in the other browsers (hints: 1, 2).
  3. Safari, Chrome, etc. should all implement keyboard profiles just like Firefox. Remember how Word used to provide keyboard mapping for WordPerfect users when WordPerfect was king? Do that for the current king of browsers.

So if the various browser teams out there want to make me happy that's all that I ask :)

July 8, 2009

Fixing another "HTTP Error 500.0 – Internal Server Error" in IIS7

Today I had a problem with IIS7 on Vista while testing and ran into an elusive problem that I thought I'd share the solution to. I created a new Website and a new corresponding Application Pool and started receiving the following error message in the browser when visiting the site: "HTTP Error 500.0 – Internal Server Error"
As usual it was followed by the normal additional error text on the page but nothing useful was there. I found the following two event log entries were also created:

Failed to initialize the AppDomain:/LM/W3SVC/0/ROOT

Exception: System.ArgumentException

Message: Value does not fall within the expected range.

StackTrace: at System.Web.Hosting.IProcessHostSupportFunctions.GetConfigToken(String appId)
at System.Web.Hosting.ISAPIApplicationHost.System.Web.Hosting.IApplicationHost.GetConfigToken()
at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)
at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironmentAndReportErrors(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)

followed by:

An error occurred while trying to start an integrated application instance.

Exception: System.ArgumentException

Message: Value does not fall within the expected range.

StackTrace: at System.Web.Hosting.IProcessHostSupportFunctions.GetConfigToken(String appId)
at System.Web.Hosting.ISAPIApplicationHost.System.Web.Hosting.IApplicationHost.GetConfigToken()
at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironment(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)
at System.Web.Hosting.ApplicationManager.CreateAppDomainWithHostingEnvironmentAndReportErrors(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)
at System.Web.Hosting.ApplicationManager.GetAppDomainWithHostingEnvironment(String appId, IApplicationHost appHost, HostingEnvironmentParameters hostingParameters)
at System.Web.Hosting.ApplicationManager.CreateObjectInternal(String appId, Type type, IApplicationHost appHost, Boolean failIfExists, HostingEnvironmentParameters hostingParameters)
at System.Web.Hosting.ProcessHost.StartApplication(String appId, String appPath, Object& runtimeInterface)

Searching Google for this information revealed nothing exactly like my problem and no solutions worked for me. - No it was not permissions!

Creating a fresh new Application Pool, as well as many other small attempts didn't fix the problem either. None of those attempts really made sense anyway, but then again neither does the solution:

Solution

Finally on a whim I tried the following:
  1. Visit the "Internet Information Services (IIS) Manager".
  2. Select the site and choose "Advanced Settings..."
  3. In my case the value for ID is 0.
  4. I changed that to 100 and restarted the site.
Now when I visit the site from a browser everything works fine.

June 26, 2009

Reporting from Russia 2009

I've been here in Акдемгородок for a about a week now and things are good. I've been walking the ~40 minute walk to work each day with a college and I really enjoy that introduction to my day - well at lest the first 30 minutes of it or so :) Great exercise, fresh air, great to be outside for as a part of a daily routine.






I got here with my carrier locked iPhone 3G and luckily it was only two days later when the venerable Dev Team allowed me unlock it with UltraSn0w. Simple, effective, brilliant. And I just love that MMS is working for me here but not for AT&T yet in the US. Not that I even use or need MMS, just that I /can/ and you can't.








Internet connectivity is impossibly bad here for Internet-addicts like my wife and I. In the event that it is working it's incredibly slow. One web page at a time per family please!
It reminds me of Putin's remarks to Michael Dell a few months ago when Michael Dell was asking how US companies can do to help Russia with their internet connectivity. Putin snapped back explaning that Russian's can do it themselves and didn't need any help. At the time I understood Putin's position (still do in a way) and respected him for his pride and command of respect. Now I'm thinking he should suck it up for his people (and me) and get some help in here!