<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>malformedweb.com</title>
    <description>technical banterings of jon davis (a web &amp; software developer)</description>
    <link>http://www2.jondavis.net/techblog/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.5.0</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://www2.jondavis.net/techblog/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd?format=rss</blogChannel:blink>
    <dc:creator>Jon Davis &lt;jon@jondavis.net&gt;</dc:creator>
    <dc:title>malformedweb.com</dc:title>
    <geo:lat>33.583950</geo:lat>
    <geo:long>-111.876100</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/stimpy77" /><feedburner:info uri="stimpy77" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Welcome To Our Beautiful Home, Excuse The Legacy Mess Everywhere</title>
      <description>&lt;p&gt;
Rant time again. Oh the things that get me worked up to finally blog again. 
&lt;/p&gt;
&lt;div style="margin: 10px; width: 551px; float: left; height: 293px"&gt;
&lt;p&gt;
&lt;img src="http://www.brucebnews.com/wp-content/uploads/2012/10/outlookcomoffice365error.jpg" alt="Office 365 - Outlook.com conflict" /&gt;       &lt;br /&gt;
&lt;em&gt;Sadly, while this image I found on Google Images represents the messaging I saw, it does not represent what I saw. My experience wasn&amp;rsquo;t quite so pretty.&lt;/em&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
First I couldn&amp;rsquo;t access my mail that I was getting notified about from Live Messenger, Microsoft&amp;rsquo;s site said that Office 365 users can&amp;rsquo;t upgrade to Office.com.
&lt;/p&gt;
&lt;strong style="color: #43515b; font-family: 'Segoe UI'; font-size: 13px"&gt;This account can&amp;#39;t be used to access Outlook.com&lt;/strong&gt;&lt;br /&gt;
&lt;p&gt;
&lt;span style="color: #43515b; font-family: 'Segoe UI'; font-size: 13px"&gt;You&amp;#39;re currently signed in with an Office 365 email account, which can&amp;#39;t be used with Outlook.com. Please click here to sign out of your Office 365 account, then use another Microsoft account to sign in to Outlook.com (for example, your hotmail.com, live.com, or msn.com account).&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Well that would be all fine and fair, except that I had no recollection of having anything to do with Office 365, and I was still getting these &amp;ldquo;new mail&amp;rdquo; alerts from Live Messenger every time I log into (not boot, &lt;em&gt;log into&lt;/em&gt;) my work computer. There was no way to fix the problem. If I went to Office 365&amp;rsquo;s web site and attempted to sign in, I got in a bizarre redirect loop. Clearly I had no actual Office 365 account because I never got involved with Office 365, but somewhere, somehow, a flag got buried in my profile that identified me as an Office 365 user when attempting to get into Hotmail / Outlook.com.
&lt;/p&gt;
&lt;p&gt;
Then yesterday or this morning I got a splashy marketing email from Microsoft saying that my account was ready to upgrade to Outlook.com. This email comes just hours after I was told I couldn&amp;rsquo;t upgrade. I figured there was maybe a 5% chance that the email was accurate in its portrayal of my account being upgradeable, that something had changed in my account overnight and that Microsoft was so proud of itself they decided to make the email look splashy. Of course, I was right, I still got this ridiculous message saying Office 365 users can&amp;rsquo;t upgrade.
&lt;/p&gt;
&lt;p&gt;
Again, I wasn&amp;rsquo;t an Office 365 user. I may have poked at it once to see what it was. Since I could find no recourse, I went about deleting my profile so I could re-create it. I read the up-front warnings about account deletion carefully before proceeding, being sure it &lt;em&gt;didn&amp;rsquo;t&lt;/em&gt; say that I wouldn&amp;rsquo;t be able to recreate the account with the same e-mail address ever again or for some long period of time. I saw nothing like that. So *click*, gone, deleted. So as I go to recreate it, it tells me the e-mail address is in use. Great. I did some Googling and discovered in an Xbox forum that there is a 90-day waiting period, at least on Xbox, before the email address that was used to originally create the now-deleted account can be reused to create another one.
&lt;/p&gt;
&lt;p&gt;
Curious as to whether some of the older link-ins to the &amp;ldquo;create a new [Microsoft/Xbox/whatever] account&amp;rdquo; might skip over the locked email matter, which of course everything I tried still failed, I couldn&amp;rsquo;t help but note that these link-ins are still calling new accounts &amp;ldquo;MSN Hotmail&amp;rdquo; accounts, and with some really old graphics and formatting. REALLY, Microsoft?
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www2.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/Microsoft/52DBEA45/image.png"&gt;&lt;img style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px" src="http://www2.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/Microsoft/5771F4FF/image_thumb.png" border="0" alt="image" title="image" width="505" height="772" align="right" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Seriously, Microsoft, can&amp;rsquo;t you get your ducks in order?!
&lt;/p&gt;
&lt;p&gt;
1. Don&amp;rsquo;t ever lock out a group of users from accessing a service without providing a means for those users to remove themselves from that group. I was &amp;ldquo;an Office 365&amp;rdquo; account user, but I didn&amp;rsquo;t want to be, I had no intention to be, I don&amp;rsquo;t remember how I become one--perhaps play-testing what was out there, but I had already used this account to use Windows Live Messenger, Hotmail (hence my notifications), and a Windows 8 login profile (which has now been destroyed due to this Office 365 horsecrap, thanks!), and instead of deleting my account I should have been able to get into some kind of obvious interface and just drop that incompatible feature.
&lt;/p&gt;
&lt;p&gt;
2. Better yet, with all the consolidations you guys have done for all the IDs as &amp;ldquo;Microsoft Accounts&amp;rdquo;, at least in promises throughout the news media, you should not have allowed an incompatibility to exist! Instead there should have been a conversion process that would immediately take place. But no, you had to go and BLAME THE USER, spin around, and walk away! I get better treatment at the Department of Motor Vehicles!
&lt;/p&gt;
&lt;p&gt;
3. Microsoft, if someone is deleting a user profile, tell them up front, &amp;ldquo;You will not be able to recreate an account with the e-mail address you used to create this account for 90 days&amp;rdquo; right in there next to the delete button! I had to have it already deleted before I considered sleuthing forums (!!) to find a hint at the 90 days, and I still don&amp;rsquo;t know for sure if the 90 days on Xbox accounts translates to 90 days for my account.
&lt;/p&gt;
&lt;p&gt;
4. Remember Passport, Microsoft? I mean, it is the original branding of what is now Microsoft Accounts. Do you remember? Well, a lot of customers do, and they&amp;#39;re treated to a miserable experience when they go to&amp;nbsp;&lt;a href="http://passport.net/"&gt;http://passport.net/&lt;/a&gt;&amp;nbsp;in Chrome. Not to mention, when they go to sign up for a Microsoft Accounts account &lt;em&gt;there&lt;/em&gt;, they get the experience of jumping around between three or four brands and never land on Microsoft Accounts. So, again, did you forget about Passport.net, Microsoft?
&lt;/p&gt;
&lt;p&gt;
5. By the way, signing in with my personal account into answers.microsoft.com, I was greeted with this, and it never went away. Ever.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;a href="http://www2.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/Microsoft/3539E979/image.png"&gt;&lt;img style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" src="http://www2.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/Microsoft/1850C4A4/image_thumb.png" border="0" alt="image" title="image" width="244" height="222" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Microsoft, your Microsoft Accounts, all of its forms, is a product. Your product is of immensely poorly constructed quality it&amp;rsquo;s hard to know where to begin. How is it that I got into a redirect loop when I attempted to access the Office 365 web site to try to find something to turn off or remove myself from? Why is it that depending on which community web site I&amp;rsquo;m accessing, when I access the same &amp;ldquo;log in&amp;rdquo; dialog and choose to create a new account I am presented with such the disgusting legacy of an &amp;ldquo;MSN Hotmail&amp;rdquo; account setup? Microsoft, all of your new users using this navigation path are going to see that crap. Do you want to relinquish the marketing verbiage of MSN Hotmail or not? If not, why then would you allow these legacy interfaces to be so commonly exposed to the general public? It would be something else entirely if I was trying to access some rarely used feature of Microsoft&amp;rsquo;s web site, but no, this was a navigation path that Microsoft would probably hope every last human being with an Internet connection would follow.
&lt;/p&gt;
&lt;p&gt;
Don&amp;rsquo;t get me wrong, I understand that Microsoft has to take a phased approach to this stuff; let&amp;rsquo;s roll out new marketing changes and new reorganizations in phases, people will just suffer through the legacy stuff for a while. I call bullcrap!! This is 2012, business practices we&amp;rsquo;ve settled for need to change. If you want to output something of quality, you don&amp;rsquo;t launch a hybrid mess of ancient and new and call it &amp;ldquo;new&amp;rdquo;, you call it &amp;ldquo;hybrid mess of ancient and new&amp;rdquo;! Who do you think you&amp;rsquo;re fooling, Microsoft, when you greet people with &amp;ldquo;log into your Microsoft Account&amp;rdquo; with elegant branding but then as soon as they begin setting up their profile they get this 2005-esque MSN Hotmail experience? It was the same user story! Creating a Microsoft Account to access a service/community. How many Microsoft Account stories are there, really? I count five: Log in, log out, create a new account, manage your account, delete your account. Yet it seems no one managing Microsoft Account considered that it might make a poor level of quality to have two completely different branding experiences while navigating through any of these puny five stories. As huge and important as Microsoft Accounts is ... &lt;em&gt;Really,&lt;/em&gt; Microsoft?!
&lt;/p&gt;
&lt;p&gt;
Side note: I make such rants because I&amp;rsquo;m hoping Microsoft is listening, &lt;em&gt;not&lt;/em&gt; because I think people should walk away from Microsoft services because I absolutely don&amp;rsquo;t think that. Microsoft needs to clean this stuff up. This has been going on with Passport / MSN / Live / Microsoft Accounts forever. (Speaking of Passport, have you navigated to &lt;a href="http://passport.net"&gt;http://passport.net&lt;/a&gt; in Chrome lately? Its layout is so broken it&amp;rsquo;s tempting to think it&amp;rsquo;s not alive anymore.) I am also hoping everyone who is not at Microsoft (basically &lt;em&gt;almost&lt;/em&gt; everyone who reads my blog) can take a lesson from this about user experiences and what not to settle for. 
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/QGKjQ0c94l8" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/QGKjQ0c94l8/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (Jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2012/12/07/Welcome-To-Our-Beautiful-Home-Excuse-The-Legacy-Mess-Everywhere.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=92e56a9e-4dcb-4cef-8b83-5597d4cf56ac</guid>
      <pubDate>Fri, 07 Dec 2012 09:42:00 -0700</pubDate>
      <dc:publisher>Jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=92e56a9e-4dcb-4cef-8b83-5597d4cf56ac</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=92e56a9e-4dcb-4cef-8b83-5597d4cf56ac</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2012/12/07/Welcome-To-Our-Beautiful-Home-Excuse-The-Legacy-Mess-Everywhere.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=92e56a9e-4dcb-4cef-8b83-5597d4cf56ac</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=92e56a9e-4dcb-4cef-8b83-5597d4cf56ac</feedburner:origLink></item>
    <item>
      <title>Canvas &amp; HTML 5 Sample Junk</title>
      <description>&lt;p&gt;
Poking around with HTML 5 canvas again, refreshing my knowledge of the basics. Here&amp;#39;s where I&amp;#39;m dumping links to my own tinkerings for my own reference. I&amp;#39;ll update this with more list items later as I come up with them.
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Don&amp;#39;t have a seizure.&amp;nbsp;&lt;a href="http://jsfiddle.net/8RYtu/22/"&gt;http://jsfiddle.net/8RYtu/22/&lt;/a&gt;&lt;br /&gt;
	&lt;em&gt;HTML5 canvas arc, line, audio, custom web font rendered in canvas, non-fixed (dynamic) render loop with fps meter, window-scale, being obnoxious&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;Pass-through pointer events&amp;nbsp;&lt;a href="http://jsfiddle.net/MtGT8/1/"&gt;http://jsfiddle.net/MtGT8/1&lt;/a&gt;&lt;a href="http://jsfiddle.net/MtGT8/1/"&gt;/&lt;/a&gt;&lt;br /&gt;
	&lt;em&gt;Demonstrates how the canvas element, which would normally intercept mouse events, does not do so here, and instead allows the mouse event to propagate to the elements behind it. Huge potential but&amp;nbsp;&lt;a href="http://caniuse.com/#feat=pointer-events"&gt;&lt;strong&gt;does not work in Internet Explorer&lt;/strong&gt;&lt;/a&gt;.&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;Geolocation sample.&amp;nbsp;&lt;a href="http://jsfiddle.net/nmu3x/4/"&gt;http://jsfiddle.net/nmu3x/4/&lt;/a&gt;&amp;nbsp;&lt;br /&gt;
	&lt;em&gt;Nothing to do with canvas here. Get over it.&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;iframe src="http://widgets.dzone.com/links/widgets/zoneit.html?t=2&amp;url=http://www2.jondavis.net/techblog/post/2012/09/27/Canvas-Sample-Junk.aspx&amp;amp;title=Canvas &amp; HTML 5 Sample Junk" height="25" width="155" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/bfbsswfS99w" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/bfbsswfS99w/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (Jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2012/09/27/Canvas-Sample-Junk.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=05919d92-4c27-436a-ac8b-b5c5624e49de</guid>
      <pubDate>Thu, 27 Sep 2012 15:48:00 -0700</pubDate>
      <category>Javascript</category>
      <category>Software Development</category>
      <dc:publisher>Jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=05919d92-4c27-436a-ac8b-b5c5624e49de</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=05919d92-4c27-436a-ac8b-b5c5624e49de</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2012/09/27/Canvas-Sample-Junk.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=05919d92-4c27-436a-ac8b-b5c5624e49de</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=05919d92-4c27-436a-ac8b-b5c5624e49de</feedburner:origLink></item>
    <item>
      <title>Automatically Declaring Namespaces in Javascript (namespaces.js)</title>
      <description>&lt;p&gt;
Namespaces in Javascript are a pattern many untrained or undisciplined developers may fail to do, but they are an essential strategy in retaining maintainability and avoiding collisions in Javascript source.
&lt;/p&gt;
  
&lt;p&gt;
Part of the problem with namespaces is that if you have a complex client-side solution with several Javascript objects scattered across several files but they all pertain to the same overall solution, you may end up with very long, nested namespaces like this:
&lt;/p&gt;
  
&lt;div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:b6de9d55-729e-4606-988b-6925914f1ab2" class="wlWriterEditableSmartContent" style="padding: 0px; margin: 0px; display: inline; float: none"&gt;
&lt;pre class="xml" name="code"&gt;
var ad = AcmeCorporation.Foo.Bar.WidgetFactory.createWidget(&amp;#39;advertisement&amp;#39;);
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
I personally am not opposed to long namespaces, so long as they can be shortened with aliases when their length gets in the way.
&lt;/p&gt;
&lt;div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:861c21bf-c4f9-478f-a663-c60d377bde74" class="wlWriterEditableSmartContent" style="padding: 0px; margin: 0px; display: inline; float: none"&gt;
&lt;pre class="js" name="code"&gt;
var wf = AcmeCorporation.Foo.Bar.WidgetFactory;
var ad = wf.createWidget(&amp;#39;advertisement&amp;#39;);
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
The problem I have run into, however, is that when I have multiple .js files in my project and I am not 100% sure of their load order, I may run into errors. For example:
&lt;/p&gt;
&lt;div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:5c0bdeba-4f0a-42dd-883b-bb8757644864" class="wlWriterEditableSmartContent" style="padding: 0px; margin: 0px; display: inline; float: none"&gt;
&lt;pre class="js" name="code"&gt;
// acme.WidgetFactory.js
AcmeCorporation.Foo.Bar.WidgetFactory = {
createWidget: function(e) {
return new otherProvider.Widget(e);
}
};
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
This may throw an error immediately because even though I&amp;rsquo;m declaring the WidgetFactory namespace, I am not certain that these namespaces have been defined:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;AcmeCorporation &lt;/li&gt;
	&lt;li&gt;AcmeCorporation.Foo &lt;/li&gt;
	&lt;li&gt;AcmeCorporation.Foo.Bar &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So again if any of those are missing, the code in my acme.WidgetFactory.js file will fail.
&lt;/p&gt;
&lt;p&gt;
So then I clutter it with code that looks like this:
&lt;/p&gt;
&lt;div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:510d71c4-ae81-4f56-b73e-616ffd6fbb2f" class="wlWriterEditableSmartContent" style="padding: 0px; margin: 0px; display: inline; float: none"&gt;
&lt;pre class="js" name="code"&gt;
// acme.WidgetFactory.js
if (!window[&amp;#39;AcmeCorporation&amp;#39;]) window[&amp;#39;AcmeCorporation&amp;#39;] = {};
if (!AcmeCorporation.Foo) AcmeCorporation.Foo = {};
if (!AcmeCorporation.Foo.Bar) AcmeCorporation.Foo.Bar = {};
AcmeCorporation.Foo.Bar.WidgetFactory = {
createWidget: function(e) {
return new otherProvider.Widget(e);
}
};
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
This is frankly not very clean. It adds a lot of overhead to my productivity just to get started writing code.
&lt;/p&gt;
&lt;p&gt;
So today, to compliment my &lt;a href="http://jondavis.net/techblog/post/2008/04/12/Javascript-Introducing-Using-(js).aspx"&gt;using.js&lt;/a&gt; solution (which dynamically loads scripts), I have cobbled together a very simple script that dynamically defines a namespace in a single line of code:
&lt;/p&gt;
&lt;div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0e9ce4bf-6378-48dd-a724-f6a92508a01e" class="wlWriterEditableSmartContent" style="padding: 0px; margin: 0px; display: inline; float: none"&gt;
&lt;pre class="js" name="code"&gt;
// acme.WidgetFactory.js
namespace(&amp;#39;AcmeCorporation.Foo.Bar&amp;#39;);
AcmeCorporation.Foo.Bar.WidgetFactory = {
createWidget : function(e) {
return new otherProvider.Widget(e);
}
};
/* or, alternatively ..
namespace(&amp;#39;AcmeCorporation.Foo.Bar.WidgetFactory&amp;#39;);
AcmeCorporation.Foo.Bar.WidgetFactory.createWidget = function(e) {
return new otherProvider.Widget(e);
};
*/
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
As you can see, a function called &amp;ldquo;namespace&amp;rdquo; splits the dot-notation and creates the nested objects on the global namespace to allow for the nested namespace to resolve correctly.
&lt;/p&gt;
&lt;p&gt;
Note that this will &lt;em&gt;not&lt;/em&gt; overwrite or clobber an existing namespace, it will only ensure that the namespace exists.
&lt;/p&gt;
&lt;div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:07b3adbd-1893-4fee-a6c2-ff76a4449b8e" class="wlWriterEditableSmartContent" style="padding: 0px; margin: 0px; display: inline; float: none"&gt;
&lt;pre class="js" name="code"&gt;
a = {};
a.b = {};
a.b.c = &amp;#39;dog&amp;#39;;
namespace(&amp;#39;a.b.c&amp;#39;);
alert(a.b.c); // alerts with &amp;quot;dog&amp;quot;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Where you will still need to be careful is if you are not sure of load order then &lt;strong&gt;your namespace names all the way up the dot-notation tree should be namespaces alone and never be defined objects&lt;/strong&gt;, or else assigning the defined objects manually may clobber nested namespaces and nested objects.
&lt;/p&gt;
&lt;div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:192bfe47-f1f0-47d8-b40e-e05045af587d" class="wlWriterEditableSmartContent" style="padding: 0px; margin: 0px; display: inline; float: none"&gt;
&lt;pre class="js" name="code"&gt;
namespace(&amp;#39;a.b.c&amp;#39;);
a.b.c.d = &amp;#39;dog&amp;#39;;
a.b.c.e = &amp;#39;bird&amp;#39;;
// in another script ..
a.b = { 
c : {
d : &amp;#39;cat&amp;#39;
}
};
// in consuming script / page
alert(a.b.c); // alerts [object]
alert(a.b.c.d); // alerts &amp;#39;cat&amp;#39;
alert(a.b.c.e); // alerts &amp;#39;undefined&amp;#39;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;a href="https://github.com/stimpy77/namespace.js"&gt;Here&amp;rsquo;s the download if you want it as a script file&lt;/a&gt;&amp;nbsp;[EDIT: the linked resource has since been modified and has grown significantly], and here is its [original] content:
&lt;/p&gt;
&lt;div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:959c7b92-5c21-466e-931c-c4484856a532" class="wlWriterEditableSmartContent" style="padding: 0px; margin: 0px; display: inline; float: none"&gt;
&lt;pre class="js" name="code"&gt;
function namespace(ns) {
var g = function(){return this}();
ns = ns.split(&amp;#39;.&amp;#39;);
for(var i=0, n=ns.length; i&amp;lt;n; ++i) {
var x = ns[i];
if (x in g === false) g[x]={}; 
g = g[x];
}
} 
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
The above is actually written by commenter &amp;quot;steve&amp;quot; (sjakubowsi -AT- hotmail -dot-com). Here is the original solution that I had come up with:
&lt;/p&gt;
&lt;div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f0b43ac4-1e59-435c-8fa8-cb44942239dc" class="wlWriterEditableSmartContent" style="padding: 0px; margin: 0px; display: inline; float: none"&gt;
&lt;pre class="js" name="code"&gt;
namespace = function(n) {
var s = n.split(&amp;#39;.&amp;#39;);
var exp = &amp;#39;var ___v=undefined;try {___v=x} catch(e) {} if (___v===undefined)x={}&amp;#39;;
var e = exp.replace(/x/g, s[0]);
eval(e);
for (var i=1; i&amp;lt;s.length; i++) {
var ns = &amp;#39;&amp;#39;;
for (var p=0; p&amp;lt;=i; p++) {
if (ns.length &amp;gt; 0) ns += &amp;#39;.&amp;#39;;
ns += s[p];
}
e = exp.replace(/x/g, ns);
eval(e);
}
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;iframe src="http://widgets.dzone.com/links/widgets/zoneit.html?t=2&amp;url=http://www2.jondavis.net/techblog/post/2012/09/25/Javascript-Automatically-Declaring-Namespaces-in-Javascript-(namespacesjs).aspx&amp;amp;title=Automatically Declaring Namespaces in Javascript (namespaces.js)" height="25" width="155" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/skFFINbspkw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/skFFINbspkw/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (Jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2012/09/25/Javascript-Automatically-Declaring-Namespaces-in-Javascript-(namespacesjs).aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=297d5c75-e08f-45a2-9ff0-573afa2be7b7</guid>
      <pubDate>Tue, 25 Sep 2012 18:24:00 -0700</pubDate>
      <category>Javascript</category>
      <category>Pet Projects</category>
      <dc:publisher>Jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=297d5c75-e08f-45a2-9ff0-573afa2be7b7</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=297d5c75-e08f-45a2-9ff0-573afa2be7b7</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2012/09/25/Javascript-Automatically-Declaring-Namespaces-in-Javascript-(namespacesjs).aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=297d5c75-e08f-45a2-9ff0-573afa2be7b7</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=297d5c75-e08f-45a2-9ff0-573afa2be7b7</feedburner:origLink></item>
    <item>
      <title>Why jQuery Plugins Use String-Referenced Function Invocations</title>
      <description>&lt;p&gt;Some time ago (years ago) I cobbled together a jQuery plug-in or two that at the time I was pretty proud of, but in retrospect I’m pretty embarrassed. One of these plugins was &lt;a href="http://www.jondavis.net/codeprojects/jqDialogForms/"&gt;jqDialogForms&lt;/a&gt;. The embarrassment was not due to its styling—the point of it was that it could be skinnable, I just didn’t have time to create sample skins—nor was the embarrassment due to the functional conflict with jQuery UI’s dialog component, because I had a specific vision in mind which included modeless parent/child ownership, opening by simple DOM reference or by string, and automatic form serialization to JSON. Were I to do all this again I would probably just extend jQuery UI with syntactical sugar, and move form serialization to another plugin, but all that is a tangent from the purpose of this blog post. My embarassment with jqDialogForms is with the patterns and conventions I chose in contradiction to jQuery’s unique patterns.&lt;/p&gt;  &lt;p&gt;Since then I have abandoned (or perhaps neglected) jQuery plugins development, but I still formed casual and sometimes uneducated opinions along the way. One of the patterns that had irked me was jQuery UI’s pattern of how its components’ functions are invoked:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:7425cac2-126f-4772-b80d-db26522bac29" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="js"&gt;$('#mydiv').accordion( 'disable' );
$('#myauto').autocomplete( 'search' , [value] );
$('#prog').progressbar( 'value' , [value] );&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Notice that the actual functions being invoked are identified with a string parameter into another function. I didn’t like this, and I still think it’s ugly. This came across to me as “the jQuery UI” way, and I believed that this contradicted “the jQuery way”, so for years I have been baffled as to how jQuery could have adopted jQuery UI as part of its official suite.&lt;/p&gt;

&lt;p&gt;Then recently I came across this, and was baffled even more:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://docs.jquery.com/Plugins/Authoring"&gt;http://docs.jquery.com/Plugins/Authoring&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;Under no circumstance should a single plugin ever claim more than one namespace in the jQuery.fn object. &lt;/p&gt;

  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1323f18e-ef79-4c59-97c9-325044db8b1b" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="js"&gt;(function( $ ){

  $.fn.tooltip = function( options ) { 
    // THIS
  };
  $.fn.tooltipShow = function( ) {
    // IS
  };
  $.fn.tooltipHide = function( ) { 
    // BAD
  };
  $.fn.tooltipUpdate = function( content ) { 
    // !!!  
  };

})( jQuery );&lt;/pre&gt;&lt;/div&gt;

  &lt;p&gt;This is a discouraged because it clutters up the $.fn namespace. To remedy this, you should collect all of your plugin’s methods in an object literal and call them by passing the string name of the method to the plugin.&lt;/p&gt;

  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a127e4e3-3a79-4ebc-a88f-718266d58ebe" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="js:collapse"&gt;(function( $ ){

  var methods = {
    init : function( options ) { 
      // THIS 
    },
    show : function( ) {
      // IS
    },
    hide : function( ) { 
      // GOOD
    },
    update : function( content ) { 
      // !!! 
    }
  };

  $.fn.tooltip = function( method ) {
    
    // Method calling logic
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }    
  
  };

})( jQuery );

// calls the init method
$('div').tooltip(); 

// calls the init method
$('div').tooltip({
  foo : 'bar'
});

&lt;/pre&gt;&lt;/div&gt;

  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:16e92e22-bb74-4c01-ab90-a610509e3081" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="js"&gt;// calls the hide method
$('div').tooltip('hide'); 
// calls the update method
$('div').tooltip('update', 'This is the new tooltip content!'); &lt;/pre&gt;&lt;/div&gt;

  &lt;p&gt;This type of plugin architecture allows you to encapsulate all of your methods in the plugin's parent closure, and call them by first passing the string name of the method, and then passing any additional parameters you might need for that method. This type of method encapsulation and architecture is a standard in the jQuery plugin community and it used by countless plugins, including the plugins and widgets in &lt;a href="http://jqueryui.com/"&gt;jQueryUI&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What baffled me was not their initial reasoning pertaining to namespaces. I completely understand the need to keep plugins’ namespaces in their own bucket. What baffled me was how this was considered a solution. Why not simply use this?&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3a5a8744-d102-4d79-96b6-26d40cf4e723" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="js"&gt;$('#mythingamajig').mySpecialNamespace.mySpecialFeature.doSomething( [options] );&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To see about proving that I could make both myself and the “official” jQuery team happy, I cobbled this test together ..&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:5843f7ab-3623-44bb-8edf-d729675fa4ab" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="js"&gt;(function($) {
    
    $.fn.myNamespace = function() {
        var fn = 'default';
        
        var args = $.makeArray(arguments);
        if (args.length &amp;gt; 0 &amp;amp;&amp;amp; typeof(args[0]) == 'string' &amp;amp;&amp;amp; !(!($.fn.myNamespace[args[0]]))) {
            fn = args[0];
            args = $(args).slice(1);
        }
        $.fn.myNamespace[fn].apply(this, args);
    };
    $.fn.myNamespace.default = function() {
        var s = '\n';
        var i=0;
        $(arguments).each(function() {            
            s += 'arg' + (++i).toString() + '=' + this + '\n';
        });
        alert('Default' + s);
        
    };
    $.fn.myNamespace.alternate = function() {
        var s = '\n';
        var i=0;
        $(arguments).each(function() {            
            s += 'arg' + (++i).toString() + '=' + this + '\n';
        });
        alert('Alternate' + s);
        
    };

    $().myNamespace('asdf', 'xyz');
    $().myNamespace.default('asdf', 'xyz');
    $().myNamespace('default', 'asdf', 'xyz');
    $().myNamespace.alternate('asdf', 'xyz');
    $().myNamespace('alternate', 'asdf', 'xyz');
    
})(jQuery);&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Notice the last few lines in there ..&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e2db02db-159a-4b16-9710-b25be4b4ff1b" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="js"&gt;    $().myNamespace('asdf', 'xyz');
    $().myNamespace.default('asdf', 'xyz');
    $().myNamespace('default', 'asdf', 'xyz');
    $().myNamespace.alternate('asdf', 'xyz');
    $().myNamespace('alternate', 'asdf', 'xyz');&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;When this worked as I hoped I originally set about making this blog post be a “plugin generator plugin” that would make plug-in creation really simple and also enable the above calling convention. But when I got to the some passing tests, adding a few more tests I realized I had failed to notice a critical detail: the &lt;em&gt;this&lt;/em&gt; context, and chainability.&lt;/p&gt;

&lt;p&gt;In JavaScript, navigating a namespace as with $.fn.myNamespace.something.somethingelse doesn’t execute any code within the dot-notation. Without the execution of functional code, there can be no context for the &lt;em&gt;this&lt;/em&gt; context, which should be the jQuery-wrapped selection, and as such there can be no context for the return chainable object. (I realize that it is possible to execute code with modern JavaScript getters and setters but all modern browsers don’t support getters and setters and all commonly used browsers certainly don’t.) This was something that I as a C# developer found easy to forget and overlook, because in C# we take the passing around of context in property getters for granted.&lt;/p&gt;

&lt;p&gt;Surprisingly, this technical reasoning for the string-based function identifier for jQuery plug-in function invocations was not mentioned on the jQuery Plugins documentation site, nor was it mentioned in the &lt;a href="http://www.pluralsight.com/"&gt;Pluralsight&lt;/a&gt; video-based training I recently perused. It seemed like what Pluralsight’s trainer was saying was, “You can use $().mynamespace.function1()” but that’s obscure! Use a string parameter instead!” And I’m like, “No, it is not obscure! Calling a function by string is obscure because you can’t easily identify it as a function reference distinct from a parameter value!”&lt;/p&gt;

&lt;p&gt;The only way to retain the &lt;em&gt;this&lt;/em&gt; context while removing the string-based function reference is to invoke it along the way.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:7bd5622e-f71c-467c-9ea3-506fa14c5f8f" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="js"&gt;$().myNamespace().myFunction('myOption1', true, false);&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Notice the parenthesis after .myNamespace. And that is a wholly different convention that few in jQuery-land are used to. But I do think that it is far more readable than ..&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:acf532f7-f3da-4788-8e63-ad3666085a90" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="js"&gt;$().myNamespace('myFunction', 'myOption1', true, false);&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I still like the former, it is more readable, and I remain unsure as to why the latter is the accepted convention over the former, but my guess is that a confused user might try to chain back to jQuery right after .myNamespace() rather than after executing a nested function. And that, I suppose, demonstrates how the former pattern is contrary to jQuery’s chainability design of every().invocation().just().returns().jQuery.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="http://widgets.dzone.com/links/widgets/zoneit.html?t=2&amp;url=http://www2.jondavis.net/techblog/post/2012/09/25/Why-jQuery-Plugins-Use-String-Referenced-Function-Invocations.aspx&amp;amp;title=Why jQuery Plugins Use String-Referenced Function Invocations" height="25" width="155" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="kick"&gt;&lt;a target="_blank" href="http://www.dotnetkicks.com/kick/?url=http://www.jondavis.net/techblog/post/2012/09/25/Why-jQuery-Plugins-Use-String-Referenced-Function-Invocations.aspx&amp;amp;title=Why jQuery Plugins Use String-Referenced Function Invocations"&gt;
                    &lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.jondavis.net/techblog/post/2012/09/25/Why-jQuery-Plugins-Use-String-Referenced-Function-Invocations.aspx&amp;fgcolor=ccc&amp;bgcolor=143D55&amp;cfgcolor=ccc&amp;cbgcolor=D25E26" border="0" alt="kick it on DotNetKicks.com" /&gt;
                  &lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/Zm6RrtbiPnc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/Zm6RrtbiPnc/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2012/09/25/Why-jQuery-Plugins-Use-String-Referenced-Function-Invocations.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=d0139dc1-f010-419f-a6a7-b30b815327b4</guid>
      <pubDate>Tue, 25 Sep 2012 10:52:27 -0700</pubDate>
      <category>Javascript</category>
      <dc:publisher>jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=d0139dc1-f010-419f-a6a7-b30b815327b4</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=d0139dc1-f010-419f-a6a7-b30b815327b4</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2012/09/25/Why-jQuery-Plugins-Use-String-Referenced-Function-Invocations.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=d0139dc1-f010-419f-a6a7-b30b815327b4</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=d0139dc1-f010-419f-a6a7-b30b815327b4</feedburner:origLink></item>
    <item>
      <title>Personal Status Update [September 19, 2012]</title>
      <description>&lt;p&gt;I know, I know, I promised I’d pick up some steam on my blog and then suddenly I got quiet. Here’s the deal .. when I started picking up a bit more steam a couple months ago, I was looking for my next permanent job. Well, I found it. And, I’m kind of floored by its potential, as well as the preexisting knowledge that I’d be surrounded by some amazing people as well as be given high expectations of technical and professional maturity. This is my dream job.&lt;/p&gt;  &lt;p&gt;I’ll post more but for now I need to catch up on some &lt;a href="http://pluralsight.com/training"&gt;Pluralsight training&lt;/a&gt;, perhaps (finally) get some &lt;a href="http://www.microsoft.com/learning/en/us/certification/cert-overview.aspx"&gt;Microsoft certifications&lt;/a&gt; (MCPD and perhaps at some point even MCM), get a couple project successes behind me, and ultimately prove my worth to my employer.&lt;em&gt; They’re watching. &lt;/em&gt;o.O&lt;/p&gt;  &lt;p&gt;Oh, by the way, remember &lt;a href="http://jondavis.net/techblog/post/2008/04/12/Javascript-Introducing-Using-(js).aspx"&gt;using.js&lt;/a&gt;? I created it waaay back in 2008 and it was surprisingly popular. Anyway, today I finally moved it over to GitHub. &lt;a href="https://github.com/stimpy77/using.js"&gt;https://github.com/stimpy77/using.js&lt;/a&gt; Recent Javascript design patterns training on Pluralsight as a refresher got me motivated to blow the dust off of it and put it in a more publically enjoyable space. Cheers.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/tNWnAVGQDqk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/tNWnAVGQDqk/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (Jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2012/09/19/Personal-Status-Update-September-19-2012.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=ccc91ea9-d24c-413f-9aa5-4b4cad97fb96</guid>
      <pubDate>Wed, 19 Sep 2012 12:16:53 -0700</pubDate>
      <dc:publisher>Jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=ccc91ea9-d24c-413f-9aa5-4b4cad97fb96</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=ccc91ea9-d24c-413f-9aa5-4b4cad97fb96</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2012/09/19/Personal-Status-Update-September-19-2012.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=ccc91ea9-d24c-413f-9aa5-4b4cad97fb96</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=ccc91ea9-d24c-413f-9aa5-4b4cad97fb96</feedburner:origLink></item>
    <item>
      <title>ASP.NET MVC 4: Where Have All The Global.asax Routes Gone?</title>
      <description>&lt;p&gt;I ran into this a few days back and had been meaning to blog about it, so here it finally is while it’s still interesting information. &lt;/p&gt;  &lt;p&gt;In ASP.NET MVC 1.0, 2.0, and 3.0, routes are defined in the Global.asax.cs file in a method called RegisterRoutes(..). &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/ASP.NET-MVC-4-Where-Hav.asax-Routes-Gone/3FC0C411/mvc3_register_routes.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="mvc3_register_routes" border="0" alt="mvc3_register_routes" src="http://www.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/ASP.NET-MVC-4-Where-Hav.asax-Routes-Gone/7BBCDFF9/mvc3_register_routes_thumb.png" width="513" height="131" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It had become an almost unconscious navigate-and-click routine for me to open Global.asax.cs up to diagnose routing errors and to introduce new routes. So upon starting a new ASP.NET MVC 4 application with Visual Studio 11 RC (or Visual Studio 2012 RC, whichever it will be called), it took me by surprise to find that the RegisterRoutes method is no longer defined there. In fact, the MvcApplication class defined Global.asax.cs contains only 8 lines of code! I panicked when I saw this. Where do I edit my routes?! &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/ASP.NET-MVC-4-Where-Hav.asax-Routes-Gone/5E9F4FA4/mvc4_globalasax.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="mvc4_globalasax" border="0" alt="mvc4_globalasax" src="http://www.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/ASP.NET-MVC-4-Where-Hav.asax-Routes-Gone/4B7E22F8/mvc4_globalasax_thumb.png" width="387" height="186" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;What kept me befuddled for far too long (quite a bit longer than a couple seconds, shame on me!) was the fact that these lines of code, when not actually read and only glanced at, look similar to the Application_Start() from the previous iteration of ASP.NET MVC:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/ASP.NET-MVC-4-Where-Hav.asax-Routes-Gone/0A03709F/mvc3_globalasax.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="mvc3_globalasax" border="0" alt="mvc3_globalasax" src="http://www.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/ASP.NET-MVC-4-Where-Hav.asax-Routes-Gone/4961242F/mvc3_globalasax_thumb.png" width="371" height="117" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Eventually I squinted and paid closer attention to the difference, and then I realized that the RegisterRoutes(..) method is being invoked still but it is managed in a separate configuration class. Is this class an application settings class? Is it a POCO class? A wrapper class for a web.config setting? Before I knew it I was already right-clicking on RegisterRoutes and choosing Go To Definition ..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/ASP.NET-MVC-4-Where-Hav.asax-Routes-Gone/565B0440/mvc4_globalasax_gotodef.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="mvc4_globalasax_gotodef" border="0" alt="mvc4_globalasax_gotodef" src="http://www.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/ASP.NET-MVC-4-Where-Hav.asax-Routes-Gone/793BC5F0/mvc4_globalasax_gotodef_thumb.png" width="415" height="258" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Under Tools –&amp;gt; Options –&amp;gt; Projects and Solutions –&amp;gt; General I have &lt;strong&gt;Track Active Item in Solution Explorer&lt;/strong&gt; enabled, so upon right-clicking an object member reference in code and choosing “Go To Definition” I always glance over at Solution Explorer to see where it navigates to in the tree. This is where I immediately found the new config files:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/ASP.NET-MVC-4-Where-Hav.asax-Routes-Gone/05E8D2D1/mvc4_app_start_solex.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="mvc4_app_start_solex" border="0" alt="mvc4_app_start_solex" src="http://www.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/ASP.NET-MVC-4-Where-Hav.asax-Routes-Gone/3E2749E9/mvc4_app_start_solex_thumb.png" width="316" height="212" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;.. in a new App_Start folder, which contains FilterConfig.cs, RouteConfig.cs, and BundleConfig.cs, as named by the invoking code in Global.asax.cs. And to answer my own question, these are POCO classes, each with a static method (i.e. RegisterRoutes).&lt;/p&gt;  &lt;p&gt;I like this change. It’s a minor refactoring that cleans up code. I don’t understand the naming convention of App_Start, though. It seems like it should be called “Config” or something, or else Global.asax.cs should be moved into App_Start as well since Application_Start() lives in Global.asax.cs. But whatever. Maintaining configuration details in one big Global.asax.cs file gets to be a bit of a pain sometimes especially in growing projects so I’m very glad that such configuration details are now tucked away in their own dedicated spaces.&lt;/p&gt;  &lt;p&gt;I am curious but have not yet checked to determine whether App_Start as a new ASP.NET folder has any inherent behaviors associated with it, such as for example post-edit auto-compilation. I’m doubtful.&lt;/p&gt;  &lt;p&gt;In future blog post(s), perhaps my next post, I’ll go over some of the other changes in ASP.NET MVC 4.&lt;/p&gt;&lt;iframe src="http://widgets.dzone.com/links/widgets/zoneit.html?t=2&amp;url=http://www2.jondavis.net/techblog/post/2012/06/23/ASPNET-MVC-4-Where-Have-All-The-Globalasax-Routes-Gone.aspx&amp;amp;title=ASP.NET MVC 4: Where Have All The Global.asax Routes Gone?" height="25" width="155" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/KDXZVYeyWiE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/KDXZVYeyWiE/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2012/06/23/ASPNET-MVC-4-Where-Have-All-The-Globalasax-Routes-Gone.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=8da5cff7-bccb-4e5a-9fff-90cd8f528ff1</guid>
      <pubDate>Sat, 23 Jun 2012 03:03:59 -0700</pubDate>
      <category>ASP.NET</category>
      <category>Web Development</category>
      <dc:publisher>jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=8da5cff7-bccb-4e5a-9fff-90cd8f528ff1</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=8da5cff7-bccb-4e5a-9fff-90cd8f528ff1</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2012/06/23/ASPNET-MVC-4-Where-Have-All-The-Globalasax-Routes-Gone.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=8da5cff7-bccb-4e5a-9fff-90cd8f528ff1</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=8da5cff7-bccb-4e5a-9fff-90cd8f528ff1</feedburner:origLink></item>
    <item>
      <title>LiveStream No Longer Free, Now $45 Per Month</title>
      <description>&lt;p&gt;
This is not a developer post at all, I wanted to share it with the world to see if this might get this picked up by Google as I am somewhat bewildered that a Google search does not reveal this information at all.
&lt;/p&gt;
&lt;p&gt;
I have been enjoying a side personal interest in video production for several months now. I recently found a venue to focus this interest&amp;mdash;a weekly group event at my church. I&amp;rsquo;ve become the videographer there during Wednesday evening meetings, and I&amp;rsquo;ve restored the execution of the group&amp;rsquo;s vision to LiveStream the meetings by providing the tools needed to get the job done, i.e. connectors from my camera, converters to a PC, etc.
&lt;/p&gt;
&lt;p&gt;
Unfortunately, after some recent changes to LiveStream that they are still undergoing it appears that with the &amp;ldquo;New Livestream&amp;rdquo; the ability to produce and publish live content or share video clips for free is going to be going away completely. This ability is apparently being replaced by &amp;ldquo;Producer Accounts&amp;rdquo; which will apparently cost $45 each month. This is what I posted on their Forums @ &lt;a href="http://www.livestream.com/forum/showpost.php?p=31605&amp;amp;postcount=40" title="http://www.livestream.com/forum/showpost.php?p=31605&amp;amp;postcount=40"&gt;http://www.livestream.com/forum/showpost.php?p=31605&amp;amp;postcount=40&lt;/a&gt;:
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	There does appear to be a Search field at the top of the site, don&amp;#39;t know if it was recently added or not, but it doesn&amp;#39;t seem to work to find either of the two channels I support. I agree that category browsing MUST be returned.
	&lt;/p&gt;
	&lt;p&gt;
	My concern, however, is that the profile page on the &amp;quot;new&amp;quot; site shows nothing. The old page for http://www.livestream.com/{channelname} works &amp;quot;fine&amp;quot;, but in the new site with &lt;a href="http://new.livestream.com/accounts/79748"&gt;http://new.livestream.com/accounts/79748&lt;/a&gt; it&amp;#39;s flat disabled. There is no support whatsoever for even producing live content for free. The messaging when logged in says, &amp;quot;Upgrade to a Producer Account to Create Events - We see that you currently have a New Livestream Viewer Account (Free). To create events and post text, video clips, photos and live video, you&amp;#39;ll require a New Livestream Producer Account.&amp;quot; Even video clips and live video requires a &amp;quot;producer account&amp;quot; which starts at $45/mo. 
	&lt;/p&gt;
	&lt;p&gt;
	Presumably, the old site and its featureset are going to go away completely. So, apparently, it&amp;#39;s over, guys. No more free LiveStreaming. 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
These observations could be temporary or perhaps misread, but it looked pretty obvious to me that this is what is going on.
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-color: initial; border-style: initial; border-width: 0px" src="http://www.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/LiveStream-No-Longer-Free/3A9CA364/image.png" border="0" alt="image" title="image" width="706" height="154" /&gt;
	&lt;/p&gt;
	&lt;p&gt;
	*click* on Upgrade Now ..
	&lt;/p&gt;
	&lt;p&gt;
	&lt;a href="http://cdn.livestream.com/newproducer/"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-color: initial; border-style: initial; border-width: 0px" src="http://www.jondavis.net/techblog/image.axd?picture=Windows-Live-Writer/LiveStream-No-Longer-Free/277B76B8/image5.png" border="0" alt="image" title="image" width="644" height="386" /&gt;&lt;/a&gt;
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
&amp;nbsp;UPDATE: Heard back from LiveStream:
&lt;/p&gt;
&lt;blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-image: initial; border-style: none; padding: 0px"&gt;
	&lt;p&gt;
	&amp;quot;&lt;span style="color: #404040; font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px"&gt;The reason your channel is not showing up in search is most likely because it has not yet been verified. To be clear, the original Livestream isn&amp;#39;t going anywhere. We plan to continue to offer free streaming for the foreseeable future.&lt;/span&gt;&amp;quot;&amp;nbsp;
	&lt;/p&gt;
&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/nTnegpjlQ54" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/nTnegpjlQ54/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (Jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2012/03/01/LiveStream-No-Longer-Free-Now-2445-Per-Month.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=a62c02a2-9e09-48c4-8435-22b383daebd2</guid>
      <pubDate>Thu, 01 Mar 2012 13:18:00 -0700</pubDate>
      <dc:publisher>Jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=a62c02a2-9e09-48c4-8435-22b383daebd2</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=a62c02a2-9e09-48c4-8435-22b383daebd2</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2012/03/01/LiveStream-No-Longer-Free-Now-2445-Per-Month.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=a62c02a2-9e09-48c4-8435-22b383daebd2</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=a62c02a2-9e09-48c4-8435-22b383daebd2</feedburner:origLink></item>
    <item>
      <title>Adding Compiled .ResX Resources To NuGet Packages</title>
      <description>&lt;p&gt;At my current workplace, we are using NuGet internally for managing internal ASP.NET MVC 3 project templates. If you open up Visual Studio’s Tools -&amp;gt; Options dialog window and expand Package Manager, you will find a “Package Sources” section where you can define locations for acquiring NuGet packages. We have a second location defined in this section with the path being a directory on our LAN. There are several advantages of taking this approach to managing team resources, not the least of which is the fact that updating our template source code repositories over SVN will not, and should not, update (read: break) the development workflows for people already working on their projects unless those individuals manually invoke an Update-Package command from the Package Manager Console. This scenario is obviously not ideal for many teams but it is quite useful for ours since each project instance has its own lifecycle and is short-lived.&lt;/p&gt;  &lt;p&gt;One of the dependencies of our ASP.NET MVC templates is the utilization of .resx files for managing various pieces of content such as the labels on the forms. Have a resource file gives specific members of the organization a very specific and anticipated location to update the content to suit the needs of the project instance. The content items are also programmatically accessible when the Access Modifier is set to public; a .Designer.cs file is generated and injected into the project automatically by Visual Studio, appearing as a generated code-behind file for the .resx file, which exposes the API required to programmatically read content from this file by item name so that the developer does not have to stream the .resx out manually as an embedded resource stream. Microsoft .NET also automatically pulls the content from the suitable resource file when the culture is added to the filename, based on the user’s culture of the current thread; in other words, if a resource file is called &lt;strong&gt;FormFields.resx&lt;/strong&gt;, but the user is French-Canadian (fr-CA), then the content in &lt;strong&gt;FormFields.fr-CA.resx&lt;/strong&gt; is automatically used. Of course, we have to manually synchronize the user’s culture with the thread, that is a separate discussion, but the point is that it can be beneficial, and in our case it is, to utilize .resx resources in a project.&lt;/p&gt;  &lt;p&gt;Unfortunately, when installing a NuGet project that contains .resx file content, the generated designer C# file that exposes programmatic access to the items in the resources file does not get added correctly, nor is the metadata on the .resx file that declares the resource’s Access Modifier to be “Public”, which is how Visual Studio knows to inject that generated file. Our template’s C# codebase depends upon the presence of the generated C# object members for the .resx, so in the absence of the generated code-behind file the project importing this template will not compile. Our workaround had been to open up the .resx file, change the Access Modifier back to “Public”, save it, and Rebuild. This worked fine, but it has been a huge annoyance.&lt;/p&gt;  &lt;p&gt;So we decided to look into automatically fixing this within the Install.ps1 PowerShell script which NuGet invokes upon installing a package. &lt;a href="http://msdn.microsoft.com/en-us/library/k3dys0y2.aspx"&gt;Visual Studio’s DTE automation object&lt;/a&gt; and its &lt;a href="http://msdn.microsoft.com/en-us/library/envdte.project.aspx"&gt;Project&lt;/a&gt; object are both injected to the Install.ps1 script that PowerShell invokes.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:ec9f923c-3c24-4bce-b898-885e754e9db4" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: powershell;gutter:false;toolbar:false;"&gt;param($installPath, $toolsPath, $package, $project)&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We store our resources in a Resources directory in the project, so iterating through the project items to identify our .resx files was straightforward enough.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:15e4aa99-3532-4278-8b07-1483320460bc" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: powershell;auto-links:false;wrap-lines:false;"&gt;$resitems = @{}
foreach ($item in $project.ProjectItems) 
{
    if ($item.Name -eq "Resources") {
        foreach ($resitem in $resources.ProjectItems) {
            if ($resitem.Name.ToLower().EndsWith(".resx")) {
               $resitems.Add("Resources\" + $resitem.Name, $resitem.FileNames(0))
            }
        }
    }
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Unfortunately, I found no way within EnvDTE automation to modify the properties the .resx file that pertain to the generated file! At best, the ProjectItem object exposes a &lt;a href="http://msdn.microsoft.com/en-us/library/envdte.properties.aspx"&gt;Properties&lt;/a&gt; member that lists out various bits of metadata, but I found nothing here that can be changed to cause the .resx file to use a generated file.&lt;/p&gt;

&lt;p&gt;The best I could find and tried to play with was a property called “&lt;a href="http://msdn.microsoft.com/en-us/library/vslangproj80.fileproperties2_properties(VS.80).aspx"&gt;IsDesignTimeBuildInput&lt;/a&gt;” that I thought I could apply to the .Designer.cs file, but attempting to set this value to true proved unfruitful: &lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:10cd45dd-c191-4a37-96ee-46b1c888db21" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: powershell;"&gt;# where $cb2 is the .Designer.cs file
$cb2.Properties.Item("IsDesignTimeBuildInput").Value = $TRUE&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;.. results in .. 
  &lt;br /&gt;&lt;font color="#ff0000"&gt;Exception setting &amp;quot;Value&amp;quot;: &amp;quot;Invalid number of parameters. (Exception from HRESULT: 0x8002000E (DISP_E_BADPARAMCOUNT))&amp;quot;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;I did manage to get a code-behind file added to the .resx file, however.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:855ae29f-3c4b-484f-90ce-c2eea6f3920c" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: powershell;"&gt;switch ($item.ProjectItems) { default {
	if ($_.Name.ToLower() -eq $resitem.Name.ToLower().Replace(".resx", ".designer.cs")) {
		$hasCodeBehind = $TRUE
		$codebehinditem = $_
	}
}}
if ($hasCodeBehind -eq $TRUE) {
	$fn = $resitem.FileNames(0)
	$cbfn = $codebehinditem.FileNames(0)
	$codebehinditem.Remove()
	$cb2 = $resitem.ProjectItems.AddFromFile($cbfn)
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;At this point, it would prove obviously beneficial to use a comparison tool such as Beyond Compare (which I used) to compare the contents of the .resx file, the .Designer.cs file, and the .csproj file (the Visual Studio project file) between my half-restored NuGet injection and a properly working project instance. Doing this, I found that &lt;strong&gt;there are absolutely no changes made to the .resx file to toggle its code-behind / generator behavior&lt;/strong&gt;, and of course the .Designer.cs is just the output of the generator so it has no flags, either. All of this metadata is therefore made to the project (.csproj) file.&lt;/p&gt;

&lt;p&gt;And since there do not seem to be any EnvDTE interfaces to support these project file changes, it seems that the change must be made in the project XML directly. This can cause all kinds of unpredictable problems, the least of which is an ugly dialog box for the user, “Project has changed, reload?” Nonetheless, this is what’s working for us, and it’s better than a broken build that requires us to manually open the .resx file.&lt;/p&gt;

&lt;p&gt;The full solution:&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:577bcceb-5273-41b0-8867-c6f121a0f331" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: xml;"&gt;param($installPath, $toolsPath, $package, $project)

#script to fix code-behind for resx
set-alias Write-Host -Name whecho
whecho "Restoring resource code-behinds (this may cause the project to be reloaded with a dialog) ..."
$resitems = @{}
foreach ($item in $project.ProjectItems) 
{
    if ($item.Name -eq "Resources") {
        $resources = $item
        foreach ($resitem in $resources.ProjectItems) {
            $codebehinditem = $NULL
            if ($resitem.Name.ToLower().EndsWith(".resx")) {
                $hasCodeBehind = $FALSE
                switch ($item.ProjectItems) { default {
                    if ($_.Name.ToLower() -eq $resitem.Name.ToLower().Replace(".resx", ".designer.cs")) {
                        $hasCodeBehind = $TRUE
                        $codebehinditem = $_
                    }
                }}
                if ($hasCodeBehind -eq $TRUE) {
                    $fn = $resitem.FileNames(0)
                    $cbfn = $codebehinditem.FileNames(0)
                    $codebehinditem.Remove()
                    $cb2 = $resitem.ProjectItems.AddFromFile($cbfn)
                }
                $resitems.Add("Resources\" + $resitem.Name, $resitem.FileNames(0))
                whecho $resitem.Name
            }
        }
    }
}
$project.Save($project.FullName)
$projxml = [xml](get-content $project.FullName)
$ns = New-Object System.Xml.XmlNamespaceManager $projxml.NameTable
$defns = "http://schemas.microsoft.com/developer/msbuild/2003"
$ns.AddNamespace("csproj", $defns)
foreach ($item in $resitems.GetEnumerator()) {
	$xpath = "//csproj:Project/csproj:ItemGroup/csproj:Compile[@Include=`"" + $item.Name.Replace(".resx", ".Designer.cs") + "`"]"
	$resxDesignerNode = $projxml.SelectSingleNode($xpath, $ns)
	
	if ($resxDesignerNode -ne $NULL) {
	
		$autogen = $projxml.CreateElement('AutoGen', $defns)
		$autogen.InnerText = 'True'
		$resxDesignerNode.AppendChild($autogen)
		
		$designtime = $projxml.CreateElement('DesignTime', $defns)
		$designtime.InnerText = 'True'
		$resxDesignerNode.AppendChild($designtime)
	}
	
	$xpath = "//csproj:Project/csproj:ItemGroup/csproj:EmbeddedResource[@Include=`"" + $item.Name + "`"]"
	$resxNode = $projxml.SelectSingleNode($xpath, $ns)

	$generator = $projxml.CreateElement('Generator', $defns)
	$generator.InnerText = 'PublicResXFileCodeGenerator'
	$resxNode.AppendChild($generator)
	
	if ($resxDesignerNode -ne $NULL) {
		$lastGenOutput = $projxml.CreateElement('LastGenOutput', $defns)
		$lastGenOutput.InnerText = $item.Name.Replace("Resources\", "").Replace(".resx", ".Designer.cs")
		$resxNode.AppendChild($lastGenOutput)
	}

}
$projxml.Save($project.FullName)&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;font style="background-color: #ffff00"&gt;UPDATE:&lt;/font&gt;&lt;/strong&gt; Just an update on this, we have abandoned this approach to editing the XML. The project XML can be manipulated in-memory using the MSBuild automation object. Hints of what to do are found here:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://nuget.codeplex.com/discussions/254095"&gt;http://nuget.codeplex.com/discussions/254095&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;div class="kick"&gt;&lt;a target="_blank" href="http://www.dotnetkicks.com/kick/?url=http://www.jondavis.net/techblog/post/2011/11/16/Adding-Compiled-ResX-Resources-To-NuGet-Packages.aspx&amp;amp;title=Adding Compiled .ResX Resources To NuGet Packages"&gt;
                    &lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.jondavis.net/techblog/post/2011/11/16/Adding-Compiled-ResX-Resources-To-NuGet-Packages.aspx&amp;fgcolor=ccc&amp;bgcolor=143D55&amp;cfgcolor=ccc&amp;cbgcolor=D25E26" border="0" alt="kick it on DotNetKicks.com" /&gt;
                  &lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/yjPWQ-QNJiA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/yjPWQ-QNJiA/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (Jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2011/11/16/Adding-Compiled-ResX-Resources-To-NuGet-Packages.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=08e8c319-d3fd-447a-aeab-99c5510a2b3a</guid>
      <pubDate>Wed, 16 Nov 2011 17:05:50 -0700</pubDate>
      <dc:publisher>Jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=08e8c319-d3fd-447a-aeab-99c5510a2b3a</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=08e8c319-d3fd-447a-aeab-99c5510a2b3a</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2011/11/16/Adding-Compiled-ResX-Resources-To-NuGet-Packages.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=08e8c319-d3fd-447a-aeab-99c5510a2b3a</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=08e8c319-d3fd-447a-aeab-99c5510a2b3a</feedburner:origLink></item>
    <item>
      <title>Upgrade / Update Rooted Android HTC EVO 4G Including HBOOT 2.16 Update</title>
      <description>&lt;p&gt;I am just putting this out there for the Googlebots to pick up because I just went through hell trying to gather this information. The Android rooting community is awfully crude.&lt;/p&gt;  &lt;p&gt;I had a somewhat stale version of Unrevoked-rooted Android installed on my HTC EVO 4G phone and it had 2.10.001 of HBOOT installed. Sprint pushed a new system update a month and a half or two months ago, and any such system update requires backing up (Titanium Backup), updating, re-rooting, and restoring. The latest from the Android rooting community is &lt;a href="http://revolutionary.io"&gt;http://revolutionary.io&lt;/a&gt; which seems to require v2.15 or v2.16 of HBOOT. In my case, I got this unfriendly error: supersonic with 2.10.001 is not supported at this time. &lt;/p&gt;  &lt;p&gt;So the obvious next path to take is to update HBOOT. Google for “how do I update HBOOT” or “update HBOOT”' or “upgrade HBOOT” or “download latest HBOOT”, etc., and you get a gajillion hits to absolute crap. Tons of forum.xda-developers.com forum posts, et al, but with no explanation on how to upgrade HBOOT. Eventually I figured that maybe the latest OTA update package download might bundle in an HBOOT update, so I kicked off a download of PC36IMG_SuperSonic_GB_Sprint_WWE_4.53.651.1_Radio_2.15.00.0808_NV_2.15_release_209995_signed.zip&lt;/p&gt;  &lt;p&gt;This seemed to do the trick. Before I ran that, though, I should add, revolutionary.io’s web site referenced an IRC channel. Someone on the Unrevoked team proved INCREDIBLY helpful months ago when that was the primary method of rooting the EVO 4G, so I figured that was a likely good path. All I wanted to do was to validate that the above-mentioned .zip file was the correct approach, as well as seek assistance on steps to properly deploy in case my guesswork fails me.&lt;/p&gt;  &lt;p&gt;Unfortunately, the guys I ran into on revolutionary.io team got bitten by the old IRC social crudeness bug. Not only did they complain that my questions were more appropriate for a “general Android discussion channel” and pointed me at &lt;a href="http://revolutionary.io/topic.jpg"&gt;http://revolutionary.io/topic.jpg&lt;/a&gt;, when I said that it couldn’t be more on-topic since their own EXE indicated that only v2.15/2.16 is supported they not only immediately banned me from the channel but they blocked my IP from their web server. (As if I didn’t have other access points.) &lt;/p&gt;  &lt;p&gt;Just be wary. Rude and crude people lurk in those parts.&lt;/p&gt;  &lt;p&gt;To root access developers, you might find more success in life if you replace that whole “ban the n00bs” mentality with a donation button.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/djKc-nIBrgA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/djKc-nIBrgA/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (Jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2011/10/10/Upgrading-Updating-Rooted-Android-HTC-EVO-4G-Including-HBOOT-216-Update.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=6a770a75-df86-43f4-bc05-d54051692ff0</guid>
      <pubDate>Mon, 10 Oct 2011 06:50:51 -0700</pubDate>
      <dc:publisher>Jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=6a770a75-df86-43f4-bc05-d54051692ff0</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=6a770a75-df86-43f4-bc05-d54051692ff0</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2011/10/10/Upgrading-Updating-Rooted-Android-HTC-EVO-4G-Including-HBOOT-216-Update.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=6a770a75-df86-43f4-bc05-d54051692ff0</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=6a770a75-df86-43f4-bc05-d54051692ff0</feedburner:origLink></item>
    <item>
      <title>So I Was Wrong About Silverlight On Windows 8 ...</title>
      <description>&lt;p&gt;
So the news is already old as of a week ago. Windows 8&amp;#39;s shell has no support for Silverlight--it supports HTML5, C++, and its own flavor of XAML + C#, which marks Microsoft&amp;#39;s third common XAML flavor (the first two being WPF and Silverlight). And although the desktop flavor of IE10 supports plug-ins, the HTML5 support in Metro comes without plug-in support altogether. I expected otherwise, given the rumors and expectations of others in the industry who expected Silverlight to become WPF&amp;#39;s heavily-refactored-by-accident successor.
&lt;/p&gt;
&lt;p&gt;
On the other hand, it makes sense as to why. 
&lt;/p&gt;
&lt;p&gt;
Think of Metro as Silverlight&amp;#39;s Windows counterpart rather than as Silverlight&amp;#39;s would-be host / container. Silverlight is what Metro would have tried to be, but could not fit, on a WP7 device. Metro is built for the Windows shell, Silverlight is built for a web browser and for a mobile device. Metro is what Silverlight would have tried to be, but could not suffice, on an ARM-based tablet. Metro runs XAML + C#. Silverlight runs XAML + C#. Metro hosts HTML5 with WinRT. Silverlight hosts HTML4 in a WebBrowser component with script hooks. Metro hosts native C++ and Direct3D. WP7.x supports XNA and Silverlight 5 supports XNA combinations.
&lt;/p&gt;
&lt;p&gt;
I think you&amp;#39;re getting what you want in Metro as Silverlight equivalence but better suited for Windows, except for binary compatibility which is frankly unnecessary and irrelevant. For example, although Silverlight already had a stripped-down flavor of .NET, the uniquenesses of WinRT and WinRT&amp;#39;s limitations as its own heavily stripped-down flavor of .NET are appropriate for the Windows Metro shell and not for Silverlight&amp;#39;s browser host nor for a phone device.
&lt;/p&gt;
&lt;p&gt;
I&amp;#39;m sorry that this blog post is rather short, but I can&amp;#39;t get this notion of Metro being Silverlight&amp;#39;s counterpart rather than its host out of my mind. It makes perfect sense to me, and I think it should put people at ease.
&lt;/p&gt;
&lt;p&gt;
By the way, for those who are concerned about the XNA support in Silverlight 5 not being available in Metro (few C# developers like C++), give it time, the C++ support will enable shims. If nothing else we can use future Metro ports of Adobe AIR, and&amp;nbsp;&lt;a href="http://9to5google.com/2011/09/21/adobe-unveils-flash-player-11-air-3-with-console-quality-graphics-on-mobile-devices/"&gt;Adobe has just introduced 3D performance that is thousands of times faster than current flavors of Flash / AIR&lt;/a&gt;.
&lt;/p&gt;
&lt;iframe src="http://widgets.dzone.com/links/widgets/zoneit.html?t=2&amp;url=http://www2.jondavis.net/techblog/post/2011/09/26/So-I-Was-Wrong-About-Silverlight-On-Windows-8-.aspx&amp;amp;title=So I Was Wrong About Silverlight On Windows 8 ..." height="25" width="155" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/vx1YkSPX8QM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/vx1YkSPX8QM/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (Jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2011/09/26/So-I-Was-Wrong-About-Silverlight-On-Windows-8-.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=3165d1e6-0ecf-4a97-ab9b-e3cbb9b9072e</guid>
      <pubDate>Mon, 26 Sep 2011 05:28:00 -0700</pubDate>
      <category>C#</category>
      <category>Silverlight</category>
      <category>Windows</category>
      <category>Metro</category>
      <dc:publisher>Jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=3165d1e6-0ecf-4a97-ab9b-e3cbb9b9072e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=3165d1e6-0ecf-4a97-ab9b-e3cbb9b9072e</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2011/09/26/So-I-Was-Wrong-About-Silverlight-On-Windows-8-.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=3165d1e6-0ecf-4a97-ab9b-e3cbb9b9072e</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=3165d1e6-0ecf-4a97-ab9b-e3cbb9b9072e</feedburner:origLink></item>
    <item>
      <title>YouTube Is No Longer For Leeroy Jenkins</title>
      <description>I am still very happy to keep my focus on web development by day
as part of my day job, but for the last several months I have been 
getting personally acquainted with the World Wide Web&amp;#39;s second or third most 
viewed web site. Not Facebook, not Google, we all know about those. 
These are fast getting supplanted by a web site and social network that 
is antiquating those two sites.
&lt;p style="float: right; margin-left: 5px; width: 250px; font-size: 1.4em"&gt;
Two months ago, more than 30 hours of video content were being uploaded 
to YouTube every minute. Today, this number has grown to approximately 
50 hours of video content per minute, and climbing. This is clearly the year of 
YouTube. 
&lt;/p&gt;
&lt;p&gt;
I am referring of course to YouTube.
&lt;/p&gt;
&lt;p&gt;
The last year or so has seen a jaw-dropping surge of growth of activity 
on YouTube--not just in my own free time but with statistically 
everyone&amp;#39;s Internet use on the whole. What was once known mainly for 
tired memes like the &lt;a href="http://www.youtube.com/watch?v=-5x5OXfe9KY" target="_blank"&gt;dancing baby of 1996&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Lonelygirl15" target="_blank"&gt;the fake vlogs of lonelygirl15&lt;/a&gt;, and the &lt;a href="http://www.youtube.com/watch?v=HPPj6viIBmU" target="_blank"&gt;laughably bizarre martial arts moves of Star Wars fans&lt;/a&gt;,
YouTube has recently become revolutionized by the broad availability of
camera-enabled smartphones, iPads, and HD-video-ready cameras.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Two months ago, more than 30 hours of video content were being uploaded 
to YouTube every minute. Today, invigorated by the proliferation of high quality video support in smartphones, cameras, and iPads, this number has grown to approximately 
50 hours of video content per minute, and climbing. This is clearly the year of 
YouTube. Even I myself have begun &lt;a href="http://www.youtube.com/MrStimpy77" target="_blank"&gt;dinking around&lt;/a&gt;
with producing YouTube content, partly out of a huge curiosity I&amp;#39;ve had
since I was a child in videography, photography, video editing, and 
video effects, and partly out of interest in the social, interactive 
network that YouTube is. I have also been attempting to use the video 
camera as a new sort of mirror, to reexamine my personal self and my 
life at home. The whole process has been surprisingly revealing and 
transformative. To boldly hold up a video camera, point it at oneself in 
one&amp;#39;s own home, and say, &amp;quot;This is me, my life, how I live,&amp;quot; regardless of 
whether one makes such content public, it is a life-changing experience 
to examine oneself through &amp;quot;another pair of eyes&amp;quot;, so to speak. And this is 
especially true of me living alone, without a family (so far), with no one giving me direct feedback on a daily basis on how I think and live. On the other hand, were I married, I think we would have a blast as a family sharing real collaborative content with other vloggers rather than me going it alone. 
&lt;/p&gt;
&lt;p&gt;
But as far as the social network of YouTube goes, for me, YouTube has 
replaced both television and PC/Xbox gaming as the entertainment venue 
of choice. I no longer watch TV, except to watch the news and Conan 
O&amp;#39;Brien. MMORPGs have no charm anymore; LOTRO (and for that matter World
of Warcraft) once enticed me with its dazzling graphics and fun 
gameplay, but the key ingredient in MMORPGs is the idea of doing fun 
stuff with other human beings around the world in a surreal way. YouTube is like an 
MMORPG, in a sense, too, but it is that MMORPG known as &amp;quot;real life&amp;quot;, and
I am entranced by the magic of watching my &amp;quot;friends&amp;quot;--that is, my 
favorite YouTube vloggers--&lt;a href="http://www.youtube.com/watch?v=KhXSR_cQr0Y" target="_blank"&gt;crack jokes at each other&lt;/a&gt;, &lt;a href="http://www.youtube.com/user/BearKeys" target="_blank"&gt;make music together&lt;/a&gt;, discover natural beauty of the Earth together, enjoy &lt;a href="http://www.youtube.com/user/mugumogu" target="_blank"&gt;adorable pets&lt;/a&gt; together, &lt;a href="http://www.youtube.com/watch?v=sjzoXrYDh0s" target="_blank"&gt;travel the world together&lt;/a&gt;, or just slow down and &lt;a href="http://www.youtube.com/watch?v=ZpncTquiO2Q"&gt;be artistic&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Don&amp;#39;t call it narcissism. When you have a video camera in your hands and flip the &amp;quot;REC&amp;quot; switch, anything and everything becomes a resource of creative content generation, and it&amp;#39;s perfectly logical to take advantage of the most pliable, animate and controllable piece of material at one&amp;#39;s disposal: oneself. On the other hand, should one be so lucky as to have other individuals, or surroundings, or other animate subject matters one can forget himself and focus on that instead.
&lt;/p&gt;
&lt;p style="float: left; margin-right: 5px; width: 250px; font-size: 1.4em"&gt;
For me, YouTube participation has replaced both television and PC/Xbox gaming as the entertainment venue of choice. 
&lt;/p&gt;
&lt;p&gt;
I
credit the bulk of my fascination to the perfect blending of high 
definition video cameras, the HD video hosting that YouTube is, and high
bandwidth from Internet service providers. High definition video has become the new &amp;quot;nice graphics&amp;quot; of last decade&amp;#39;s graphics cards and gameplay; where I used to enjoy PC games like Unreal Tournament and Guild Wars because the graphics were so rich in detail, now I can watch a fresh high definition video displayed in 1080p produced by a fellow YouTube vlogger, and the video content is so realistic it is actually real. ;)&amp;nbsp; It&amp;#39;s still only being rendered on my computer monitor, but you can even &lt;a href="http://www.google.com/support/youtube/bin/answer.py?&amp;amp;answer=157636#help-5" target="_blank"&gt;watch YouTube videos with 3D glasses&lt;/a&gt;, and produce video content for it relatively &lt;a href="http://www.amazon.com/Fujifilm-FinePix-Real-3D-W3/dp/B003ZHV70M" target="_blank"&gt;cheaply&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Vlogging (short for &amp;quot;video blogging&amp;quot;) is taking over [written-form] blogging, and this is becoming more real by 
the hour. In fact, what programming I have been doing at home has 
involved abandoning (temporarily) the blogging software I was writing 
about just a couple months ago in order to work on some new desktop 
vlogging software I may or may not sell someday, if only for the occasional paid-for Starbucks coffee. It takes advantage of the &lt;a href="http://www.youtube.com/dev"&gt;
YouTube publishing API&lt;/a&gt; and alleviates the problem I saw and experienced 
with YouTube&amp;#39;s video upload page balking frequently on my erratic Wi-Fi connection.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
For those following for business-related interests, vlogging&amp;#39;s growing popularity presents both 
an opportunity and a problem to Internet monetization. YouTube has a 
closed but ever-present monetization model. Owned by Google, it is 
Google. If you want to make money on YouTube, you need to produce 
compelling content on YouTube, associate your YouTube account with a 
Google AdSense account, and get people to watch your content. AdWords ads will then be displayed directly over and alongside the videos that are played by the viewing user. This is the traditional revenue model, and it has been succeeding even for amateur vloggers who have turned into professionals rather quickly. &lt;a href="http://www.youtube.com/smpfilms" target="_blank"&gt;Cory Williams&lt;/a&gt;&amp;#39; &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CBsQtwIwAA&amp;amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DQit3ALTelOo&amp;amp;ei=ZgtbTsKKO6eLsgLF0qnFDA&amp;amp;usg=AFQjCNHmGMvG8m_DnLiFrtrxfAD4FqkBeA" target="_blank"&gt;&amp;quot;Mean Kitty&amp;quot; music video&lt;/a&gt; turned him into a star; in fact, it was &lt;a href="http://www.youtube.com/watch?v=awxytQEoufE" target="_blank"&gt;disclosed on Tyra Banks&amp;#39; talk show&lt;/a&gt; a couple years ago that he was (at least at that time) raking in some $20,000 per month after that silly homemade video was produced. (He didn&amp;#39;t want that disclosed, but it&amp;#39;s &lt;em&gt;very&lt;/em&gt; interesting to know.) 
&lt;/p&gt;
&lt;p&gt;
Understand clearly, I have no intentions of dropping my career in software &amp;amp; web development, you need to be physically attractive to make it in the vlogging world if you are not &lt;em&gt;exceptionally talented&lt;/em&gt; in your creativity, and I am neither, though I have a few creative talents I exploit. Cory Williams is both. But that does not keep me from finding amazing opportunities in YouTube as both an entertainment and social venue. This becomes a real-life fascination when events like &lt;a href="http://www.youtube.com/results?search_query=vidcon+2011&amp;amp;aq=f" target="_blank"&gt;VidCon&lt;/a&gt; prove to be so much fun. At other entertainment-based social gatherings such as BlizzCon and ComicCon, you are surrounded by strangers who are either out-of-character or in full costume and looking silly. Whereas, at VidCon and the like, you are meeting and discovering the same people that you saw and &amp;quot;befriended&amp;quot; online with the exchange of video content, in their real and same form. 
&lt;/p&gt;
&lt;p&gt;
Businesses seeking to exploit the opportunities of the YouTube community require as much creativity as the YouTubers&amp;#39; creativity, to the extent of the opportunities available. There has never been a more interesting time to engage in &lt;a href="http://en.wikipedia.org/wiki/Guerrilla_marketing" target="_blank"&gt;guerilla marketing&lt;/a&gt;. The most jaw-dropping, amazing marketing campaign I have ever seen on the web occurred this year with Wrigley&amp;#39;s 5 gum. Between amazing event stunts which were &lt;a href="http://www.youtube.com/watch?v=Rh-6owRbFvQ" target="_blank"&gt;captured on video&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=1OHge9keqAI"&gt;highly unusual &amp;quot;seeding&amp;quot; tactics&lt;/a&gt; (that link is to my own video with my own ugly face! .. be warned!), and an astounding set of Hollywood-esque sci-fi-oriented interactive &lt;a href="http://www.testsubjectsneeded.com/"&gt;web sites&lt;/a&gt;, they literally &lt;a href="http://www.youtube.com/watch?v=C_NgaQsjmFk"&gt;freaked people out and convinced people that the world was going to come to an end or there was mind control going on&lt;/a&gt;, and they shocked everyone who was paying attention. To be honest, I think they took it too far. People became angry it was all about mere chewing gum. On the other hand, it was probably cheaper yet more effective for them to engage in guerilla marketing than to just dump a big, boring advertisement on traditional television.
&lt;/p&gt;
&lt;p&gt;
Honestly, I think there can be simpler exploits. Target, for example, has really blown me away with &lt;a href="http://www.youtube.com/Target/"&gt;their YouTube channel&lt;/a&gt; where they pay more for the content production and less for the distribution (YouTube is free!), although some of their YouTube ads have made it on the traditional television, too, I&amp;#39;ve noticed. It could also significantly benefit a business or organization to participate in, sponsor, or host an event that collaborates with YouTube &amp;quot;players&amp;quot;. For example, Maxis promoted Darkspore by inviting YouTube vlogger &lt;a href="http://www.youtube.com/KatersOneSeven"&gt;KatersOneSeven&lt;/a&gt; to &lt;a href="http://www.youtube.com/watch?v=Pdt7Eba2XQQ"&gt;visit their office for a promotional round of vlogging about the game&amp;#39;s release&lt;/a&gt;. More recently, a &amp;quot;YouStars&amp;quot; event might as well have been sponsored by Poland&amp;#39;s department of tourism because a &lt;a href="http://www.youtube.com/watch?v=MVS7e5G6FYQ" target="_blank"&gt;recent round of vlogs&lt;/a&gt; from various vloggers by way of a hosted event there have really put Poland on the map this month.
&lt;/p&gt;
&lt;p&gt;
I must also make mention of video generator web sites, such as&amp;nbsp;&lt;a href="http://animoto.com/" target="_blank"&gt;Animoto&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.xtranormal.com/" target="_blank"&gt;Xtranormal&lt;/a&gt;. These are interesting examples of third party creative efforts to work with the opportunities of online video content production, by assisting end users with no video cameras or know-how with tools to give them an outlet for creativity. While initial tinkerings can be had for free, everything worthwhile comes at a price, and that means monetization from good tool makers. Obviously, credit goes also to the fine consumer-level desktop software applications such as&amp;nbsp;&lt;a href="http://www.apple.com/ilife/imovie/" target="_blank"&gt;iMovie&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.pinnaclesys.com/PublicSite/us/Products/Consumer+Products/Home+Video/Studio+Family/Studio+HD+15.htm" target="_blank"&gt;Pinnacle Studio&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.sonycreativesoftware.com/moviezhd"&gt;Sony moviEZ&lt;/a&gt;, and&amp;nbsp;&lt;a href="http://www.sonycreativesoftware.com/vegassoftware" target="_blank"&gt;Sony Vegas&lt;/a&gt;. Such applications, especially iMovie, sometimes bundle a number of creative &amp;quot;movie-production-in-a-can&amp;quot; prefabbed generators, as well as transitions, text effects, and video and audio effects.
&lt;/p&gt;
&lt;p style="float: right; width: 250px; margin-left: 5px; font-size: 1.4em"&gt;
One does not have to be a video producer or AdWords marketer to be able to exploit YouTube, and it&amp;#39;s time to start getting creative about all this.
&lt;/p&gt;
&lt;p&gt;
The problem of YouTube, which I suppose is also an opportunity, is the fact that YouTube is still a video uploading and viewing web site with social features, and not a complete social network. You cannot even publish a video just to your friends list, for example, which I personally find very frustrating as I had a lot of content I ended up deleting because it wasn&amp;#39;t appropriate for public viewing but I didn&amp;#39;t want it &amp;quot;private&amp;quot;, either. This seems to open the door to alternative web development. I have been pondering the viability of someone producing an external YouTube-like site that exploits the &lt;a href="http://www.youtube.com/dev"&gt;YouTube API&lt;/a&gt; and perhaps even looks and feels like YouTube, but is clearly not YouTube, and offers additional features YouTube doesn&amp;#39;t offer, such as sharing &amp;quot;Unlisted&amp;quot; videos with people on one&amp;#39;s Friends list. There seems to be the absence of significant external web application exploits of the YouTube APIs with compelling statistical followings. I am still yet unsure as to whether this is because somehow people are unwilling to get involved with external web sites as YouTubers, or if this is because there have just been too few attempts made to make it all work. I suspect the latter. YouTube has been integrating at the embeded video level quite successfully for several years, but to actually search for videos and browse videos and enjoy a YouTube channel on such a web site as if actually on YouTube is something I just have not seen yet, or have not seen done cleanly and in a trustworthy manner. I was hoping to see something like a re-made channel concept on &lt;a href="http://www.tumblr.com/"&gt;Tumblr&lt;/a&gt;, but firing Tumblr up and poking at it for a day or two I discovered it is nowhere near supportive of such a thing.
&lt;/p&gt;
&lt;p&gt;
You also cannot produce any content for YouTube besides video, video organizing, video descriptions, and commenting. Whereas, Facebook and other social networks provide opportunities for individuals and companies to produce any form of content by way of a plug-in architecture, a la &amp;quot;Facebook applications&amp;quot;. This is another area where an external web site that takes advantage of YouTube&amp;#39;s API for its content and membership features could greatly enhance the whole experience, if only it could be implemented well and gain sufficient popularity. 
&lt;/p&gt;
&lt;p&gt;
I&amp;#39;d like to see where this goes. Seriously. One does not have to be a video producer or AdWords marketer to be able to exploit YouTube, and it&amp;#39;s time to start getting creative about all this. What are your thoughts? 
&lt;/p&gt;
&lt;iframe src="http://widgets.dzone.com/links/widgets/zoneit.html?t=2&amp;url=http://www2.jondavis.net/techblog/post/2011/08/28/YouTube-Is-No-Longer-For-Leeroy-Jenkins.aspx&amp;amp;title=YouTube Is No Longer For Leeroy Jenkins" height="25" width="155" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/5_36ENQiN9s" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/5_36ENQiN9s/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (Jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2011/08/28/YouTube-Is-No-Longer-For-Leeroy-Jenkins.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=69f1786f-d640-4bdc-a793-ff89be4a58e6</guid>
      <pubDate>Sun, 28 Aug 2011 19:22:00 -0700</pubDate>
      <category>Blog</category>
      <category>Social Networking</category>
      <category>YouTube</category>
      <dc:publisher>Jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=69f1786f-d640-4bdc-a793-ff89be4a58e6</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=69f1786f-d640-4bdc-a793-ff89be4a58e6</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2011/08/28/YouTube-Is-No-Longer-For-Leeroy-Jenkins.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=69f1786f-d640-4bdc-a793-ff89be4a58e6</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=69f1786f-d640-4bdc-a793-ff89be4a58e6</feedburner:origLink></item>
    <item>
      <title>Rumors Of XAML’s Death Have Been Greatly Exaggerated</title>
      <description>&lt;p&gt;
It&amp;rsquo;s been several months since the demise of the standard public opinion of the Microsoft UI platform developers. That was a ridiculous statement I just started with, but it&amp;rsquo;s grounded in a lot of truth, what with all the perpetual noise from naysayers regarding Windows 8&amp;rsquo;s open-arms acceptance of HTML5 as a UI development strategy. All of it has me scratching my head in confusion, not about Microsoft&amp;rsquo;s decision-making, but about the wisdom of those whom I&amp;rsquo;ve been coding alongside all these years. (I myself don&amp;rsquo;t do much with XAML but I do develop on the Microsoft stack and I consider XAML developers my &amp;ldquo;compatriots&amp;rdquo;.)
&lt;/p&gt;
&lt;p&gt;
Microsoft has always been a copy-cat, a late-to-the-party fat kid who shows up, rolls around, shoves his muddy butt up in your face, and then comes waddling over in an out-of-breath huff to the next party. There&amp;rsquo;s nothing new going on here with Windows 8. When Microsoft created Windows in the days of DOS, and recreated it again in Windows 95, and recreated it again in Windows NT, they were just playing along with what the cool boys were already doing. The Macintosh pretty much defined the whole market and everyone has been playing along with its notions ever since. With the advent of the iPhone and its iOS touch-oriented platform, a reimagineering of the Windows Mobile platform was an absolute necessity&amp;mdash;people say that Windows Phone 7 was too little too late, and I can only agree with the &amp;ldquo;too late&amp;rdquo; part. The &amp;ldquo;too little&amp;rdquo; part goes away over time, since no major software manufacturer can come up with everything in one shot.
&lt;/p&gt;
&lt;p&gt;
Apple has always led, as have people who rely heavily on the Mac platform where their focus on creativity is not shoved aside by some unnecessary technical feature set. Microsoft&amp;rsquo;s leadership skills are on occasion a little bit embarrassing. Remember Windows Live Spaces blogs? Remember when Microsoft was trying to compete with Wordpress.com? That was funny. The editor was sloppy; even after porting my sister&amp;rsquo;s blog over from Windows Live Spaces archives to a WordPress account I am still cleaning up the Microsoft Office pasted stylizing mishmash crap that Spaces emitted all over my sister&amp;rsquo;s content. Yes, it was so sickening it was funny. But what was funnier was when Microsoft handed everyone on their Live Spaces servers over to WordPress.com. &amp;ldquo;You not only win, you can have our customers&amp;rsquo; blogs, here you go.&amp;rdquo; Hilarious.
&lt;/p&gt;
&lt;p&gt;
That was a bit of a tangent since WordPress is not Apple. Nonetheless, when it comes to platform delivery, Steve Jobs is usually right. It doesn&amp;rsquo;t matter that Objective-C is one monster of a strange-looking language, that didn&amp;rsquo;t stop the many developers from making the iOS platform one of the most successful new operating system platforms to be adopted in the history of computers, measured according to successfully adopted software applications. Ironically, however, it was not Objective-C native applications that Apple started its folks off with. It was Webkit and Mobile Safari solutions.
&lt;/p&gt;
&lt;p&gt;
Apple made a conscious decision from iPhone&amp;rsquo;s get-go: &lt;strong&gt;Start people off on a stable common denominator, one that outsiders can understand, one that performs well, and one that can be extended to look and feel similar to a native experience.&lt;/strong&gt; Developers were angry at Apple for this (including myself). &amp;ldquo;We don&amp;rsquo;t want just a bunch of Javascript and CSS extensions, we want to write real code!&amp;rdquo; It wasn&amp;rsquo;t until shortly before the 2nd generation of the iPhone came out that Apple finally released a native SDK. And then all the feather-flapping stopped. Everyone quickly shut the @#$% up and started working diligently on their native apps, which soon started showing up on the App Store. The question is, was Apple in error by supporting and extending the common denominator (HTML+CSS+Javascript) on their platform first, or were they smart? I think they were smart, and their subsequent success upon opening up the native development experience says a lot. I think it says to developers &amp;ldquo;you can go broad, or you can go deep, either way, you can &lt;em&gt;go&lt;/em&gt;, and we&amp;rsquo;ll back you.&amp;rdquo;
&lt;/p&gt;
&lt;p&gt;
With Microsoft, you have a similar story, although parts of it are a little backwards. Microsoft had their &amp;ldquo;native-esque&amp;rdquo; programming experience with the Silverlight and XNA SDKs for the Windows Phone 7, but that wasn&amp;rsquo;t enough, and eventually, &lt;em&gt;finally,&lt;/em&gt; Microsoft acknowledged that they need to meet the initial if difficult requirement for a lowest common denominator&amp;mdash;the Webkit equivalent of the Internet Explorer Mobile Edition Marketed Version Nine for Windows Phone Seven Super Edition Service Pack 1 Episode Three Ninth Season 2011 Squared. At least, I&amp;rsquo;m hoping that they made this acknowledgement, because when I tried building out some prototype Silverlight apps on the Windows Phone 7 platform and I used the Internet Explorer mobile control I found myself quickly missing Webkit&amp;rsquo;s and Chrome&amp;rsquo;s reliability in adherence to standard and extended APIs.
&lt;/p&gt;
&lt;p&gt;
Regardless of Windows Phone 7&amp;mdash;which Microsoft has certainly used as a testbed for future evolution of the Windows desktop platform, much as Apple has done with iOS and OS X&amp;mdash;it seems obvious to me that the Internet Explorer team has lately been given the go-ahead and adequate funding to make their platform adequately competitive with the rapid advances of the web platform that has been commonly referred to&amp;mdash;incorrectly, I might add&amp;mdash;as &amp;ldquo;HTML5&amp;rdquo;. Internet Explorer 9 is a good web browser. It&amp;rsquo;s not shabby. It&amp;rsquo;s no match for the likes of Chrome and even Firefox but it&amp;rsquo;s still a good browser, right in there with Opera, I think, which has almost as many quirks despite its other advancements. Meanwhile, Internet Explorer 10, as well as Microsoft Windows&amp;rsquo;s amazing advancements on the ARM processor chipset, really prove to me that Microsoft is well aware of what they are up against in this highly competitive market.
&lt;/p&gt;
&lt;p&gt;
When you look at the features of Android, iOS, Linux, Mac OS X, and Windows, there are several cross-compiled manufactured solutions for producing cross-platform software applications and resources. Java is the first that comes to mind, but the pile of horsepoo that they dumped on Microsoft in the late 90s for Microsoft&amp;rsquo;s desire to see Java do wonderful things on their platform scared off a lot of Microsoft devotees from the Java platform. Likewise, people are scared of .NET, especially with Mono not having a stable backer for a solid amount of recent time. Then there are wxWidgets and Qt, but these are C++, bleh. Hence, people choose to use what they feel most comfortable with, which is usually the platform that is most likely to be there waiting for them in &amp;ldquo;weird OS land&amp;rdquo;, on the other side of the fence, not sticking its tongue out at them but rather showing consistent programming and UI experiences. On each platform, you have HTML+CSS+Javascript. And where HTML+CSS+Javascript doesn&amp;rsquo;t feel native enough, you have the likes of Adobe AIR and similar toolkits making the platform look and feel beautiful again.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://developer.palm.com/"&gt;WebOS&lt;/a&gt; is an amazing testament to the power and inspiration that the stack has. WebOS is kind of like iOS, except that all software applications are HTML+CSS+Javascript, period, no exceptions. The fact that they pull it off frankly makes me want to start building software that targets WebOS and then port from WebOS to other platforms since it&amp;rsquo;s a ubiquitous platform.
&lt;/p&gt;
&lt;p&gt;
People tend to pooh-pooh the power of HTML5 but they need to spend a few hours (in Chrome) scouring some of the more powerful HTML5-based software applications that are available right now and that look absolutely spectacular on modern hardware. It&amp;rsquo;s been referenced on my tech blog many times but &lt;a href="http://www.chromeexperiments.com/"&gt;http://www.chromeexperiments.com/&lt;/a&gt; is still a great site to check out and see the power and flexibility of the HTML5 platform.
&lt;/p&gt;
&lt;p&gt;
Further, I might add, HTML5, with it being more a Javascript+canvas+SVG+networking stack than a tagging scheme / markup language, antiquates and deprecates the arguments that &amp;ldquo;HTML was not designed for software applications&amp;rdquo;. The WHAT-WG, or Web Hypertext Application Technology Working Group, came about in the iPhone/iOS early days independently from the W3C to address the very concern that &amp;ldquo;HTML is not for applications&amp;rdquo;, and HTML5 is the literal fruition of work that came out from that group. The argument just does not stand anymore; the HTML5 stack is indeed for applications, although the HTML5 markup language is most definitely &lt;em&gt;not&lt;/em&gt;. Readable/printable documents have no use for a canvas, nor for long-term large offline storage, nor for bi-directional network sockets, and so on, these being HTML5 features that were previously reserved to browser extensions and hacks that end users had to authorize.
&lt;/p&gt;
&lt;p&gt;
Is Microsoft wrong for embracing a well-adopted programming and screen layout standard? Of course not. Should Microsoft be ashamed for trying hard (even if not quite their hardest) to make sure that their platform is the best platform to experience applications that target this common programming and screen layout standard? NO!! So what is all the fuss about? Microsoft has a limited staff and limited budget to keep fostering the marketing and market growth of the Silverlight and WPF platforms when the most current area of focus is something else entirely. That does not mean that they have abandoned Silverlight or WPF, nor for that matter does it mean that WPF and Silverlight are going away. All it means is that Microsoft has &amp;ldquo;seen the light,&amp;rdquo; that they cannot keep pretending that the world around them doesn&amp;rsquo;t exist. They have finally stopped holding their hands up to their ears shouting &amp;ldquo;I can&amp;rsquo;t hear you, I can&amp;rsquo;t hear you, blahathathahthatahta&amp;rdquo;, they&amp;rsquo;re paying attention to changing trends, they&amp;rsquo;re adapting, and they might even be going through an internal overhaul to support the necessary changes that are taking place for a constantly evolving software marketplace.
&lt;/p&gt;
&lt;p&gt;
Do I hope that native and managed-code development comes back to tantalize Windows developers? Absolutely, and I think that it&amp;rsquo;s inevitable that it&amp;rsquo;ll all return really soon, even within the next year. They&amp;rsquo;ll have to because &lt;strong&gt;outside of Adobe there are no serious development tools that foster native-like HTML5-on-the-desktop experience development like WPF and Silverlight have&lt;/strong&gt;, and until that changes&amp;mdash;and it will, I promise&amp;mdash;we are stuck with the XAML-based tools that we have, so stop complaining and keep enjoying them.
&lt;/p&gt;
&lt;p&gt;
Incidentally, it saddens me when I hear stories from within the walls of Redmond about how and why the Windows platform team and the .NET / WPF team never really &amp;ldquo;got along&amp;rdquo; and weren&amp;rsquo;t on the same playing field, and how so little software straight from Microsoft is actually managed code. The fact that they didn&amp;rsquo;t get along and stay on the same page explains a great deal about how abrupt and disappointing it was that Windows 8 would showcase HTML 5 and not XAML-based managed code&amp;mdash;it&amp;rsquo;s almost as if the Windows team said, &amp;ldquo;Since we never liked you, but we need to support a lightweight and easily understood stack, we&amp;rsquo;re just going to skip over you and jump straight onto the &amp;lsquo;Webkit&amp;rsquo;-esque bandwagon.&amp;rdquo; It&amp;rsquo;s not only sad, it&amp;rsquo;s a bit insulting to the XAML crowd. At the same time, however, I cannot argue that it wasn&amp;rsquo;t &lt;em&gt;wise,&lt;/em&gt; because ultimately at the end of the day&amp;mdash;er, at the end of the fiscal year?&amp;mdash;Microsoft&amp;rsquo;s goal is to &lt;strong&gt;make Windows the best platform for building and running &lt;em&gt;any&lt;/em&gt; type of software, period&lt;/strong&gt;. One can argue that &amp;ldquo;they already tried it on the desktop and failed with Active Desktop&amp;rdquo;. That&amp;rsquo;s a bit like saying Silverlight was doomed from the beginning because Microsoft had already previously toyed with a vector art creator/editor that was ugly, crappy, and a gigantic flop. The reality is that once Microsoft makes a hardened choice to go in a specific direction and not waver, nothing will stop them from gaining critical mass. (On the other hand, Active Desktop received Microsoft&amp;rsquo;s full clout, and it still failed, but I suspect that it was because it was ahead of its time. Meanwhile, the Vista and Windows 7 sidebars/gadgets are still fundamentally HTML+CSS+Javascript and those didn&amp;rsquo;t go quite so poorly.)
&lt;/p&gt;
&lt;p&gt;
Windows is a do-it-all platform. Most people don&amp;rsquo;t know it, but Windows 7 is even UNIX-compatible, just turn on the UNIX-compatibility feature and you instantly get the ability to compile to UNIX. You even get a C-Shell. (This may be going away with Windows 8, though, sadly, perhaps because no one knew about it and Microsoft probably didn&amp;rsquo;t want to support it if they did. For that matter, Cygwin and MinGW were arguably better anyway.) Windows has never been good at minimalistic, pretty software, for that go to Mac. If you want purely utility software, fire up an old distro of Linux. But Microsoft has made Windows excel so well at retaining such a huge market share on the desktop by being the platform that is least likely to fail when you grab some software off the shelf and forget to read the label&amp;mdash;or I guess in 21st century terms, when you click the Download link and find the first download option.
&lt;/p&gt;
&lt;p&gt;
Windows won&amp;rsquo;t run Obj-C/Cocoa Touch software, but at least Windows can fire up and run software that was built for the &amp;ldquo;any-platform&amp;rdquo; platform that runs on Mac and iOS, too, and that in my opinion is a rock-solid first goal for a new OS version since it most readily embraces non-Microsoft developers who have been developing on &amp;ldquo;all platforms&amp;rdquo;. Once Microsoft gets past this hurdle, let them go back to making the platform proprietary and unique again. But dang it I don&amp;rsquo;t want to be using a desktop operating system that is great for proprietary-built software but crap for running software that was built for the common application stack. I like to know that Microsoft knows a few things about being on top&amp;mdash;on top as in king of the hill&amp;mdash;of what everyone else is into. Right now that means the HTML5 &lt;em&gt;programming&lt;/em&gt; stack. Get in the game or get off the train and find a job selling sushi.
&lt;/p&gt;
&lt;p&gt;
&lt;iframe src="http://widgets.dzone.com/links/widgets/zoneit.html?t=2&amp;url=http://www2.jondavis.net/techblog/post/2011/08/07/Rumors-Of-XAMLe28099s-Death-Have-Been-Greatly-Exaggerated.aspx&amp;amp;title=Rumors Of XAML’s Death Have Been Greatly Exaggerated" height="25" width="155" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt; 
&lt;/p&gt;
&lt;div class="kick"&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http://www.jondavis.net/techblog/post/2011/08/07/Rumors-Of-XAMLe28099s-Death-Have-Been-Greatly-Exaggerated.aspx&amp;amp;title=Rumors%20Of%20XAML%E2%80%99s%20Death%20Have%20Been%20Greatly%20Exaggerated" target="_blank"&gt;
&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.jondavis.net/techblog/post/2011/08/07/Rumors-Of-XAMLe28099s-Death-Have-Been-Greatly-Exaggerated.aspx&amp;amp;fgcolor=ccc&amp;amp;bgcolor=143D55&amp;amp;cfgcolor=ccc&amp;amp;cbgcolor=D25E26" border="0" alt="kick it on DotNetKicks.com" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/KzWAINWB3H8" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/KzWAINWB3H8/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (Jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2011/08/07/Rumors-Of-XAMLe28099s-Death-Have-Been-Greatly-Exaggerated.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=1a96c698-a98e-4707-8d9b-7b8d9d91f132</guid>
      <pubDate>Sun, 07 Aug 2011 18:13:00 -0700</pubDate>
      <category>Operating Systems</category>
      <category>Windows</category>
      <dc:publisher>Jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=1a96c698-a98e-4707-8d9b-7b8d9d91f132</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=1a96c698-a98e-4707-8d9b-7b8d9d91f132</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2011/08/07/Rumors-Of-XAMLe28099s-Death-Have-Been-Greatly-Exaggerated.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=1a96c698-a98e-4707-8d9b-7b8d9d91f132</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=1a96c698-a98e-4707-8d9b-7b8d9d91f132</feedburner:origLink></item>
    <item>
      <title>Google+ Profiles</title>
      <description>&lt;p&gt;
Just got on Google+. If anyone wants an invite, please contact me at MrStimpy77 -AT- .. gmail
&lt;/p&gt;
&lt;p&gt;
Here&amp;#39;s my profile:&amp;nbsp;&lt;a href="http://gplus.to/MrStimpy77"&gt;http://gplus.to/MrStimpy77&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/KQ8j4EK_Hf4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/KQ8j4EK_Hf4/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (Jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2011/07/08/Google2b-Profiles.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=57a432bb-a480-4aa9-8922-23f8506640eb</guid>
      <pubDate>Fri, 08 Jul 2011 12:12:00 -0700</pubDate>
      <category>Social Networking</category>
      <dc:publisher>Jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=57a432bb-a480-4aa9-8922-23f8506640eb</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=57a432bb-a480-4aa9-8922-23f8506640eb</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2011/07/08/Google2b-Profiles.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=57a432bb-a480-4aa9-8922-23f8506640eb</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=57a432bb-a480-4aa9-8922-23f8506640eb</feedburner:origLink></item>
    <item>
      <title>Who Cares About Blog Software?</title>
      <description>&lt;p&gt;
It dawned on me tonight that there are a few people out there who actually read my blog, mostly people I don&amp;rsquo;t know, but almost all of them people who write ASP.NET software. I suppose this would make me happy, except for the fact that sometimes, such as with my previous post and the last couple months of &amp;ldquo;I&amp;rsquo;m gonna do something here&amp;rdquo; posts, I really make myself look like .. well, like someone who could be labeled lots of different ways, depending on the reader, but several such ways could be derogatory.
&lt;/p&gt;
  
&lt;p&gt;
Truth be told, at this point now at 2011 I confess I don&amp;rsquo;t care deeply about blog software. Innovation in blog software is no longer my motivator for creating another one, if simply because it&amp;rsquo;s been done, many times, not just by other .NET developers but even by me. Yet I move forward, still not knowing for sure what the next couple weeks will hold for this strategy. I could have easily called it done already after last weekend&amp;rsquo;s nearly-successful implementation, but there were changes I wanted to make, changes that I found tonight I could not make without actually starting over, thanks to the limitations of Entity Framework Code First Magical Unicorn Edition 4.1&amp;trade;.
&lt;/p&gt;
  
&lt;p&gt;
Tonight I have to take an honest additional look at my motives, as I began to do here already. If I don&amp;rsquo;t have a deep care about blogging software, why reinvent the wheel?
&lt;/p&gt;
  
&lt;p&gt;
It&amp;rsquo;s more about having some limited degree of independence upon a prepackaged application, rather than install a prefab website like WordPress which is something that one of my non-technical family members could do if they put their mind to it. If one cannot build his own blogging platform upon which he blogs, what right can he say that he is a broadly experienced web developer in the first place? 
&lt;/p&gt;
  
&lt;p&gt;
On the other hand, I have drawn the line at some point in the architecture, in this case my use of components that are intended to make development very lightweight exercises. And perhaps the tech is not the place where I should be growing myself. Perhaps the re-selection, adoption, and participation with others&amp;rsquo; efforts is a better path.
&lt;/p&gt;
  
&lt;p&gt;
For example, even as I have become bored of BlogEngine.net as I have switched to ASP.NET MVC, and I am disheartened by the motives of some members of the Orchard project community, there are still other projects out there that are worth considering delving into.
&lt;/p&gt;
  
&lt;p&gt;
Two of them are worth noting right now:
&lt;/p&gt;
  
&lt;p&gt;
&lt;a href="http://commonlibrarynetcms.codeplex.com/" target="_blank"&gt;ASP.NET MVC CMS ( Using CommonLibrary.NET )&lt;/a&gt; &amp;ndash; This one is a mouthful and hardly a pretty name. But what I like about it is its heavy use of highly reusable &amp;ldquo;make-my-development-life-better&amp;rdquo; code libraries, namely CommonLibrary.NET which has a ton going for it. This package claims to be a CMS, but appears to be more of a blog engine at least in its prefab implementation, but although it looks a bit ugly on the aesthetic side, it looks feature rich, and it&amp;rsquo;s tempting to fork it, migrate it to MVC 3 + Razor, and give it a prettier name or something. I have been looking for something I can use as a strong foundation and on the surface this looks like a very accommodating solution, although I have yet to actually try it out.
&lt;/p&gt;
  
&lt;p&gt;
Another solution worth checking out is &lt;a href="http://atomsite.net/" target="_blank"&gt;AtomSite&lt;/a&gt;. This one is a couple years old but it feels a little bit like it was pretty much exactly what I was going to do anyway, although it is based on MVC 1.0 so I&amp;rsquo;d definitely migrate it to MVC 3 + Razor as I would with the other solution mentioned above.
&lt;/p&gt;
  
&lt;p&gt;
If I choose to run with one of these, I really feel like I&amp;rsquo;d need to try to make it my own&amp;mdash;fork it, name it, port it to MVC 3 + Razor, theme it, spruce it up, and make it sexy. This would probably mean finding preexisting designs such as for WordPress and porting them. I don&amp;rsquo;t do original creative design work very well.
&lt;/p&gt;
  
&lt;p&gt;
At the end of doing all that, though, I still fear I&amp;rsquo;d end up just going back to my own blog engine idea, because I still have this lingering desire to build upon something that was more independent .. oh brother .. why are you even bothering to read this?! I&amp;rsquo;m just taking notes and bemoaning my indecision here. At the end of the day, I still need to step away from the computer and have a life.
&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/29uxkBUEuws" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/29uxkBUEuws/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (Jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2011/07/08/Who-Cares-About-Blog-Software.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=948af938-0577-4078-b8cf-610421c64973</guid>
      <pubDate>Fri, 08 Jul 2011 02:02:00 -0700</pubDate>
      <dc:publisher>Jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=948af938-0577-4078-b8cf-610421c64973</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=948af938-0577-4078-b8cf-610421c64973</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2011/07/08/Who-Cares-About-Blog-Software.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=948af938-0577-4078-b8cf-610421c64973</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=948af938-0577-4078-b8cf-610421c64973</feedburner:origLink></item>
    <item>
      <title>Changes Are Coming</title>
      <description>&lt;p&gt;
Well, it&amp;#39;s been a wonderful ride, nearly half a decade working with BlogEngine.net&amp;#39;s great blogging software. But it&amp;#39;s time to move on.
&lt;/p&gt;
&lt;p&gt;
Orchard, it was very nice to meet you. You have a wonderful future ahead of you, and I was honored to have known you, even just a little. Unfortunately, you and I are each looking for something different.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
WordPress, you are like a beautiful, sexy whore, tantalizing on the outside and known by everybody and his brother, but quite honestly I&amp;#39;m not sure I want to see you naked more than I already have.
&lt;/p&gt;
&lt;p&gt;
I&amp;#39;m frickin&amp;#39; Jon Davis, I&amp;#39;ve been doing software and web development for 14 nearly 15 years now, and doggonit I should assume myself to be &amp;quot;all that&amp;quot; by now. Actually, blog engines should be like &amp;quot;Hello World&amp;quot; to me by now. I suppose the only reason why I&amp;#39;ve been too shy to do it thus far is because the first time I started building&amp;nbsp;&lt;a href="http://sourceforge.net/projects/pwrblog/"&gt;a complete blogging solution&lt;/a&gt;&amp;nbsp;eight or nine years ago and stopped its continuance six or seven years ago the thing I built was proven to be an oddball hunk of an over-programmed desktop application that I had primarily leveraged to grow broad technical talents. It was a learning opportunity, not a proper blogging solution, and it smelled of adolescence. (To this day it won&amp;#39;t even compile because .NET 2.0 broke it.)
&lt;/p&gt;
&lt;p&gt;
In the mean time, I&amp;#39;ve moved on. I&amp;#39;ve been an employer-focused career guy for the last five or six years, having little time for major projects like that, but still growing both in technical skill set and in broad understanding of Internet markets and culture.
&lt;/p&gt;
&lt;p&gt;
But I kind of miss blogging. I used to be a prolific blogger. I sometimes browse my blog posts from years ago and find some interesting tidbits of knowledge, in fact sometimes I actually learn from my prior writings because I later forget the things I had learned and blogged about but come back to re-learn them. Sometimes, meanwhile, I&amp;#39;ll find some blog posts that are a little bizarre--thoughtful in prose, yet ridiculous in their findings. That&amp;#39;s okay. My goal is to get myself to think again, and not be continuously caught up in a daily grind whereby neither my career nor technically-minded side life have any meaning.
&lt;/p&gt;
&lt;p&gt;
Last weekend over two or three days I created a new blog engine. (Anyone who knows me well knows that I&amp;#39;ve been tinkering with social platform development on my own time for some years, but this one was from-scratch.) I successfully ported all of my blog posts and blog comments from my BlogEngine.net to my new engine and got it to render in blog form using my own NUnit-tested ASP.NET MVC implementation. I would have replaced BlogEngine.net here on my site with my blog engine already, were it not for the fact that as I used Entity Framework Code First&amp;nbsp;I&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/6579362/ef-code-first-abstract-relationship/6579603"&gt;ran into snags&lt;/a&gt;&amp;nbsp;getting the generated database schema to correctly align with long-term strategies. And as much as I&amp;#39;d be delighted to prove out my ability to rush a new blog engine out the door, I don&amp;#39;t necessarily want to rush a database schema, especially if I intend to someday share the schema and codebase with the world.
&lt;/p&gt;
&lt;p&gt;
And I never said I was going to open-source this. I might, but I also want to commercialize it as a hosted service. I&amp;#39;ll likely do both.
&lt;/p&gt;
&lt;p&gt;
But it&amp;#39;s coming, and here are my dreamy if possibly ridiculous plans for it:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Blogging with comments and image attachments. Nothing special here. But I want to support using the old-skool MetaWeblog API, so that&amp;#39;ll definitely be there, as well as the somewhat newer AtomPub protocol.&lt;/li&gt;
	&lt;li&gt;Syndication with RSS and Atom. Again, nothing special here.&lt;/li&gt;
	&lt;li&gt;As a blogging framework it will be a WebMatrix-ready web site (not web application). Even though it will use ASP.NET MVC it will be WebMatrix gallery-loadable and Notepad-customizable. The controllers/models will just be precompiled. Note that this is already working and proven out; the depth and detail of customizability (such as a good file management pattern for having multiple themes preinstalled) have not been sorted out yet, though.&lt;/li&gt;
	&lt;li&gt;&lt;a href="https://appharbor.com/"&gt;AppHarbor&lt;/a&gt;-deployable. AppHarbor is awesome! Everything I&amp;#39;m doing here is going to ultimately target AppHarbor. Right now the blog you&amp;#39;re looking at is temporarily hosted on a private server, but I want that to end soon as this server is flaky.&lt;/li&gt;
	&lt;li&gt;Down-scalable. I am prototyping this with SQL Server Compact Edition 4.0, with no stored procedures. Once the project begins to mature, I&amp;#39;ll start supporting optimizations for upwards-scalable platforms like SQL Server with optimized stored procedures, etc., but for now flexibility for the little guy who&amp;#39;s coming from WordPress to my little blog engine is the focus.&lt;/li&gt;
	&lt;li&gt;Phase 1 goal: BlogEngine.net v1.4.5.0 approximate feature equivalence (minus prefab templates and extra features I don&amp;#39;t use). BlogEngine.net is currently at v2.x now, and I haven&amp;#39;t really even looked much at v2.x yet, but as of this blog post I&amp;#39;m currently still using v1.4.5.0 and rather than upgrade I just want to swap it out with something of my own that does roughly the same as what BlogEngine.net does. This includes commenting, categories, widgets, a solid blog editor, and strong themeability; I won&amp;#39;t be creating a lot of prefab themes, but if I&amp;#39;m going to produce something of my own I want to expose at least the compiled parts of it to others to reuse, and I&amp;#39;m extremely picky about cleanliness of templates such that they can be easily updated and CSS swappages with minimal server-side code changes can go very far.&lt;/li&gt;
	&lt;li&gt;Phase 2 goal: Tumblr approximate feature equivalence (minus prefab templates). All I mean by this is that blog posts won&amp;#39;t just be blog posts, they&amp;#39;ll be content item posts of various forms--blog posts, microblog posts, photo posts, video posts, etc. Still browsable sorted descending by date, but the content type is swappable. In my current implementation, a blog entry is just a custom content type, and blogs are declared in an isolated class library from the core content engine. I also want to support importing feeds from other sources, such as RSS feeds from Flickr or YouTube. Tumblr approximate equivalence also means being mobile-ready. Tumblr is a very smartphone-friendly service, and this is going to be a huge area of focus.&lt;/li&gt;
	&lt;li&gt;Phase 3 goal: WordPress approximate equivalence (minus prefab templates). Yeah I know, to suggest WordPress equivalence after already baking in something of a BlogEngine.net and Tumblr functionality equivalence, this is sorta-kinda a step backwards on the content engine side. But it&amp;#39;s a huge step forward in these areas:
	&lt;ul&gt;
		&lt;li&gt;Elegance in administration / management .. the blogger has to live there, after all&lt;/li&gt;
		&lt;li&gt;Configurability - WordPress has a lot of custom options, making it really a blog on steroids&lt;/li&gt;
		&lt;li&gt;Modularity - rich support for plug-ins or &amp;quot;modules&amp;quot; so that whether or not many people use this thing, whoever does use it can take advantage of its extensibility&lt;/li&gt;
		&lt;li&gt;Richer themeability - WordPress themes are far from CSS drops, they are practically engine replacements, but that is as much its beauty as it is its shortcoming. You can make it what you want, really, by swapping out the theme.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Non-goals include creating a&amp;nbsp;full-on CMS.&amp;nbsp;I have no interest in trying to build something that competes directly with Orchard, and frankly I think Orchard&amp;#39;s real goals are already met with Umbraco which is a fantastic CMS. But Umbraco is nothing like WordPress, WP is really just a glorified blog engine. If anything, I want to compete a little bit with WordPress. And I do think I can compete with WordPress better than Orchard does; even though Orchard seems to be trying to do just that (compete with WordPress), its implementation goals are more in line with Umbraco and those goals are just not compatible because WordPress is a very focused kind of application with a very specific kind of content management.
&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;
And don&amp;#39;t worry, I don&amp;#39;t ever actually think I could ever literally compete with WordPress as if to produce something better. I for one strongly believe that it&amp;#39;s completely okay to go and build yet another mousetrap, even if mine is of lesser ideals compared to the status quo. There&amp;#39;s nothing wrong with doing that. People use what they want to use, and I don&amp;#39;t like the LAMP stack nor PHP all that much, otherwise I&amp;#39;d readily embrace WordPress. Then again, I&amp;#39;d probably still create my own WordPress after embracing WordPress, perhaps just like I am going to create my own BlogEngine.net after embracing BlogEngine.net.
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;iframe src="http://widgets.dzone.com/links/widgets/zoneit.html?t=2&amp;url=http://www2.jondavis.net/techblog/post/2011/07/06/Changes-Are-Coming.aspx&amp;amp;title=Changes Are Coming" height="25" width="155" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt;&lt;img src="http://feeds.feedburner.com/~r/stimpy77/~4/ByhSPd2fG-o" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/stimpy77/~3/ByhSPd2fG-o/post.aspx</link>
      <author>jon.nospam@nospam.jondavis.net (Jon)</author>
      <comments>http://www2.jondavis.net/techblog/post/2011/07/06/Changes-Are-Coming.aspx#comment</comments>
      <guid isPermaLink="false">http://www2.jondavis.net/techblog/post.aspx?id=93df7301-605b-4d82-ba41-e76115d2b31d</guid>
      <pubDate>Wed, 06 Jul 2011 23:30:00 -0700</pubDate>
      <category>ASP.NET</category>
      <category>Blog</category>
      <category>Pet Projects</category>
      <dc:publisher>Jon</dc:publisher>
      <pingback:server>http://www2.jondavis.net/techblog/pingback.axd</pingback:server>
      <pingback:target>http://www2.jondavis.net/techblog/post.aspx?id=93df7301-605b-4d82-ba41-e76115d2b31d</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www2.jondavis.net/techblog/trackback.axd?id=93df7301-605b-4d82-ba41-e76115d2b31d</trackback:ping>
      <wfw:comment>http://www2.jondavis.net/techblog/post/2011/07/06/Changes-Are-Coming.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www2.jondavis.net/techblog/syndication.axd?post=93df7301-605b-4d82-ba41-e76115d2b31d</wfw:commentRss>
    <feedburner:origLink>http://www2.jondavis.net/techblog/post.aspx?id=93df7301-605b-4d82-ba41-e76115d2b31d</feedburner:origLink></item>
  </channel>
</rss>
