<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Brian Dukes, Web Developer</title><subtitle type="html">I am a .NET Developer (&lt;a href="http://www.microsoft.com/learning/mcp/mcpd/webdev/"&gt;&lt;acronym title="Microsoft Certified Professional Developer"&gt;MCPD&lt;/acronym&gt;&lt;/a&gt;) working for &lt;a href="http://www.engagesoftware.com/"&gt;Engage Software&lt;/a&gt; in St. Louis, MO, USA.  I work mostly in web applications, specifically modules for &lt;a href="http://www.dotnetnuke.com/DesktopModules/LinkExchange/Reciprocate.aspx?linkid=208"&gt;&lt;acronym title="DotNetNuke"&gt;DNN&lt;/acronym&gt;&lt;/a&gt;.  I am passionate about writing secure, solid code, adhering to web standards, and using jQuery and JavaScript for progressive enhancement.</subtitle><id>http://weblogs.asp.net/briandukes/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/briandukes/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2010-01-28T09:36:00Z</updated><entry><title>DNN World 2012</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2012/10/15/dnn-world-2012.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2012/10/15/dnn-world-2012.aspx</id><published>2012-10-15T18:35:00Z</published><updated>2012-10-15T18:35:00Z</updated><content type="html">I just returned from DotNetNuke 2012 and wrote up a review of the experience at my Engage Software blog ....(&lt;a href="http://weblogs.asp.net/briandukes/archive/2012/10/15/dnn-world-2012.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=9110649" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author><category term="Engage Software" scheme="http://weblogs.asp.net/briandukes/archive/tags/Engage+Software/default.aspx" /><category term="DotNetNuke" scheme="http://weblogs.asp.net/briandukes/archive/tags/DotNetNuke/default.aspx" /><category term="Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/Development/default.aspx" /><category term="General Software Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/General+Software+Development/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/briandukes/archive/tags/ASP.NET/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/briandukes/archive/tags/Community+News/default.aspx" /><category term="JavaScript" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/briandukes/archive/tags/.NET/default.aspx" /><category term="Module Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/Module+Development/default.aspx" /><category term="HTML" scheme="http://weblogs.asp.net/briandukes/archive/tags/HTML/default.aspx" /><category term="Presentations" scheme="http://weblogs.asp.net/briandukes/archive/tags/Presentations/default.aspx" /><category term="Knockout" scheme="http://weblogs.asp.net/briandukes/archive/tags/Knockout/default.aspx" /></entry><entry><title>Day of DotNetNuke Recap</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2012/06/05/day-of-dotnetnuke-recap.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2012/06/05/day-of-dotnetnuke-recap.aspx</id><published>2012-06-05T22:30:00Z</published><updated>2012-06-05T22:30:00Z</updated><content type="html">This weekend was the Day of DotNetNuke in Charlotte, NC .&amp;#160; I was there to present two session, along with three other Engage colleagues ( Oliver Hine and Anthony Overkamp also presented).&amp;#160; I was honored to be able to present on the Client Resource Management Framework and the Services Framework, two newer components in DotNetNuke (introduced in DNN 6.1 and 6.2, respectively). &amp;#160; Making Full Use of the Client Resource Management Framework The slides are available to view at http://bdukes...(&lt;a href="http://weblogs.asp.net/briandukes/archive/2012/06/05/day-of-dotnetnuke-recap.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8571899" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author></entry><entry><title>DNN World 2011</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2011/11/14/dnn-world-2011.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2011/11/14/dnn-world-2011.aspx</id><published>2011-11-14T14:45:56Z</published><updated>2011-11-14T14:45:56Z</updated><content type="html">We’re on the plane flying back to St. Louis from DNN World 2011 .&amp;#160; I gave a presentation titled DNN 6 UI/UX Patterns , discussing the form patterns introduced in the administrative modules in DNN 6 (the new look and feel that you immediately noticed after logging into your new DNN 6 site).&amp;#160; Many folks asked about seeing the examples that I presented, and they are available as a repository on github, at https://github.com/bdukes/DNN-World-Demos .&amp;#160; This includes a series of small, one...(&lt;a href="http://weblogs.asp.net/briandukes/archive/2011/11/14/dnn-world-2011.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8055873" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author><category term="DotNetNuke" scheme="http://weblogs.asp.net/briandukes/archive/tags/DotNetNuke/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/briandukes/archive/tags/ASP.NET/default.aspx" /><category term="DotNetNuke Modules" scheme="http://weblogs.asp.net/briandukes/archive/tags/DotNetNuke+Modules/default.aspx" /><category term="JavaScript" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript/default.aspx" /><category term="CSS" scheme="http://weblogs.asp.net/briandukes/archive/tags/CSS/default.aspx" /><category term="Module Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/Module+Development/default.aspx" /><category term="HTML" scheme="http://weblogs.asp.net/briandukes/archive/tags/HTML/default.aspx" /><category term="Presentations" scheme="http://weblogs.asp.net/briandukes/archive/tags/Presentations/default.aspx" /><category term="DotNetNuke 6" scheme="http://weblogs.asp.net/briandukes/archive/tags/DotNetNuke+6/default.aspx" /></entry><entry><title>JavaScript: true, false, and in between</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2011/08/10/javascript-true-false-and-in-between.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2011/08/10/javascript-true-false-and-in-between.aspx</id><published>2011-08-10T13:58:00Z</published><updated>2011-08-10T13:58:00Z</updated><content type="html">In JavaScript, all values can be coerced into a Boolean value (i.e. true or false ). Most values will evaluate to true , there are just a handful that will be false . Aside from the literal false value, the number zero ( 0 ), an empty string ( '' ), NaN , null , and undefined all evaluate to false in a Boolean context. All other values will evaluate to true (even an empty object ( {} ) or an empty array ( [] ) or a jQuery selector that didn’t select anything). So, what contexts cause this Boolean...(&lt;a href="http://weblogs.asp.net/briandukes/archive/2011/08/10/javascript-true-false-and-in-between.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7904678" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author><category term="Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/Development/default.aspx" /><category term="General Software Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/General+Software+Development/default.aspx" /><category term="JavaScript" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript/default.aspx" /><category term="JavaScript Common Difficulties and Misconceptions" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript+Common+Difficulties+and+Misconceptions/default.aspx" /><category term="Logical Operators" scheme="http://weblogs.asp.net/briandukes/archive/tags/Logical+Operators/default.aspx" /><category term="Boolean" scheme="http://weblogs.asp.net/briandukes/archive/tags/Boolean/default.aspx" /></entry><entry><title>JavaScript: this</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2011/06/30/javascript-this.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2011/06/30/javascript-this.aspx</id><published>2011-06-30T15:00:00Z</published><updated>2011-06-30T15:00:00Z</updated><content type="html">
&lt;p&gt;JavaScript is a language steeped in juxtaposition.&amp;nbsp; It was made to “&lt;a href="http://brendaneich.com/2008/04/popularity/" mce_href="http://brendaneich.com/2008/04/popularity/"&gt;look like Java&lt;/a&gt;,” yet is dynamic and classless.&amp;nbsp; From this origin, we get the &lt;a href="https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/new" mce_href="https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/new"&gt;&lt;code&gt;new&lt;/code&gt; operator&lt;/a&gt; and the &lt;a href="https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/this" mce_href="https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/this"&gt;&lt;code&gt;this&lt;/code&gt; keyword&lt;/a&gt;.&amp;nbsp; You are probably used to &lt;code&gt;this&lt;/code&gt; referring to the current instance of a class, so what could it mean in a language without classes?&lt;/p&gt;
  
&lt;p&gt;In JavaScript, &lt;code&gt;this&lt;/code&gt; refers to the object off of which a function is referenced when it is invoked (unless it is invoked via &lt;code&gt;&lt;a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call" mce_href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call"&gt;call&lt;/a&gt;&lt;/code&gt; or &lt;code&gt;&lt;a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply" mce_href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply"&gt;apply&lt;/a&gt;&lt;/code&gt;). What this means is that &lt;code&gt;this&lt;/code&gt; is not bound to your function, and can change depending on how your function is invoked. It also means that &lt;code&gt;this&lt;/code&gt; changes when declaring a function inside another function (i.e. each function has its own &lt;code&gt;this&lt;/code&gt;), such as when writing a callback. Let's see some of this &lt;a href="http://jsfiddle.net/bdukes/u58xD/3/" mce_href="http://jsfiddle.net/bdukes/u58xD/3/"&gt;in action&lt;/a&gt;:&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:adf4a2de-6ce5-4e2e-8f38-088fac4502ba" class="wlWriterEditableSmartContent"&gt;
&lt;pre name="code" class="brush:js"&gt;var obj = {
    count: 0,
    increment: function () {
        this.count += 1;
    },
    logAfterTimeout = function () {
        setTimeout(function () {
            console.log(this.count);
        }, 1);
    }
};
obj.increment();
console.log(obj.count); // 1
var increment = obj.increment;
window.count = 'global count value: ';
increment();
console.log(obj.count); // 1
console.log(window.count); // global count value: 1
var newObj = {count:50};
increment.call(newObj);
console.log(newObj.count); // 51
obj.logAfterTimeout();// global count value: 1
obj.logAfterTimeout = function () {
    var proxiedFunction = $.proxy(function () {
            console.log(this.count);
        }, this);
    setTimeout(proxiedFunction, 1);
};
obj.logAfterTimeout(); // 1
obj.logAfterTimeout = function () {
    var that = this;
    setTimeout(function () {
        console.log(that.count);
    }, 1);
};
obj.logAfterTimeout(); // 1&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The last couple of examples here demonstrate some methods for making sure you get the values you expect.&amp;nbsp; The first time &lt;code&gt;logAfterTimeout&lt;/code&gt; is redefined, we use &lt;a href="http://api.jquery.com/jQuery.proxy/" mce_href="http://api.jquery.com/jQuery.proxy/"&gt;&lt;code&gt;jQuery.proxy&lt;/code&gt;&lt;/a&gt; to create a new function which has its &lt;code&gt;this&lt;/code&gt; permanently set to the passed in value (in this case, the current &lt;code&gt;this&lt;/code&gt;).&amp;nbsp; The second time &lt;code&gt;logAfterTimeout&lt;/code&gt; is redefined, we save the value of &lt;code&gt;this&lt;/code&gt; in a variable (named &lt;code&gt;that&lt;/code&gt; in this case, also often named &lt;code&gt;self&lt;/code&gt;) and use the new variable in place of &lt;code&gt;this&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now, all of this is to clarify what’s going on when you use &lt;code&gt;this&lt;/code&gt;.&amp;nbsp; However, it’s pretty easy to avoid using &lt;code&gt;this&lt;/code&gt; altogether in your code (especially in the way I’ve demonstrated above).&amp;nbsp; Instead of using &lt;code&gt;this.count&lt;/code&gt; all over the place, it would have been much easier if I’d made &lt;code&gt;count&lt;/code&gt; a variable instead of a property, and then I wouldn’t have to use &lt;code&gt;this&lt;/code&gt; to refer to it.&amp;nbsp; &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:a6040989-bc14-43fd-90ce-c68984f76569" class="wlWriterEditableSmartContent"&gt;
&lt;pre name="code" class="brush:js"&gt;var obj = (function () {
    var count = 0;
    
    return {
        increment: function () {
            count += 1;
        },
        logAfterTimeout = function () {
            setTimeout(function () {
                console.log(count);
            }, 1);
        },
        getCount: function () { return count; }
    };
}());&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If you’re writing your code in this way, the main place you’ll run into issues with &lt;code&gt;this&lt;/code&gt; is when handling DOM events (where &lt;code&gt;this&lt;/code&gt; is the element on which the event occurred).&amp;nbsp; In that case, just be careful when using a callback within that event handler, that you’re not expecting &lt;code&gt;this&lt;/code&gt; to still refer to the element (and use &lt;code&gt;proxy&lt;/code&gt; or &lt;code&gt;that&lt;/code&gt;/&lt;code&gt;self&lt;/code&gt; if you need to refer to it).&lt;/p&gt;

&lt;p&gt;Finally, as demonstrated in the example, you can use &lt;code&gt;call&lt;/code&gt; or &lt;code&gt;apply&lt;/code&gt; on a function to set its &lt;code&gt;this&lt;/code&gt; value.&amp;nbsp; This isn’t often needed, but you may also want to know that you can use &lt;code&gt;apply&lt;/code&gt; to pass in an array of arguments to a function (e.g. &lt;code&gt;console.log.apply(console, [1, 2, 3, 4])&lt;/code&gt;).&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7846924" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author><category term="General Software Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/General+Software+Development/default.aspx" /><category term="JavaScript" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript/default.aspx" /><category term="JavaScript Common Difficulties and Misconceptions" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript+Common+Difficulties+and+Misconceptions/default.aspx" /></entry><entry><title>JavaScript: Global Variables</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2011/06/14/javascript-global-variables.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2011/06/14/javascript-global-variables.aspx</id><published>2011-06-14T16:30:00Z</published><updated>2011-06-14T16:30:00Z</updated><content type="html">One of the biggest issues that you can run into with writing JavaScript is abusing the shared global namespace, and overwriting the variables of an unrelated script. Everything that you declare in JavaScript is available to every other script on the page, unless you wrap the declaration in a function. Also, if you use a variable without declaring it (even within a function), it will be declared for you in the global scope. There are a couple of remedies we have against creating a global soup of conflicting...(&lt;a href="http://weblogs.asp.net/briandukes/archive/2011/06/14/javascript-global-variables.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7829374" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author><category term="JavaScript" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript/default.aspx" /><category term="jQuery" scheme="http://weblogs.asp.net/briandukes/archive/tags/jQuery/default.aspx" /><category term="JavaScript Common Difficulties and Misconceptions" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript+Common+Difficulties+and+Misconceptions/default.aspx" /><category term="Global Variables" scheme="http://weblogs.asp.net/briandukes/archive/tags/Global+Variables/default.aspx" /></entry><entry><title>JavaScript Functions</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2011/06/09/javascript-functions.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2011/06/09/javascript-functions.aspx</id><published>2011-06-09T16:25:00Z</published><updated>2011-06-09T16:25:00Z</updated><content type="html">When coming from a strongly-typed, object-oriented background, there may be some surprising elements when looking at how functions are used in JavaScript. Functions in JavaScript don’t have any real concept of a signature, like they would in .NET. All functions return a value (which will be the value undefined if nothing is explicitly returned), so there are no void functions, and, while you can define named parameters for a function, callers of the function can provide more or less parameters than...(&lt;a href="http://weblogs.asp.net/briandukes/archive/2011/06/09/javascript-functions.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7823834" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author><category term="JavaScript" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript/default.aspx" /><category term="JavaScript Common Difficulties and Misconceptions" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript+Common+Difficulties+and+Misconceptions/default.aspx" /><category term="Functions" scheme="http://weblogs.asp.net/briandukes/archive/tags/Functions/default.aspx" /></entry><entry><title>Why isn’t My Scheduled Task Executing?</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2011/06/08/why-isn-t-my-scheduled-task-executing.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2011/06/08/why-isn-t-my-scheduled-task-executing.aspx</id><published>2011-06-08T15:39:49Z</published><updated>2011-06-08T15:39:49Z</updated><content type="html">A quick diversion from the JavaScript Common Difficulties and Misconceptions series (I have another post queued up, just need to write the sample code), for an issue I just ran into. Created a scheduled task for DNN, but it’s sitting in the scheduler queue, just getting more and more overdue.&amp;#160; Why won’t my task run? Somehow I missed the constructor from the tasks I copied.&amp;#160; Your task needs a constructor that takes a ScheduleHistoryItem to run via the scheduler....(&lt;a href="http://weblogs.asp.net/briandukes/archive/2011/06/08/why-isn-t-my-scheduled-task-executing.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7822894" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author><category term="DotNetNuke" scheme="http://weblogs.asp.net/briandukes/archive/tags/DotNetNuke/default.aspx" /><category term="Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/Development/default.aspx" /><category term="General Software Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/General+Software+Development/default.aspx" /><category term="Troubleshooting" scheme="http://weblogs.asp.net/briandukes/archive/tags/Troubleshooting/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/briandukes/archive/tags/ASP.NET/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/briandukes/archive/tags/.NET/default.aspx" /><category term="Module Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/Module+Development/default.aspx" /><category term="DotNetNuke 5.x" scheme="http://weblogs.asp.net/briandukes/archive/tags/DotNetNuke+5.x/default.aspx" /></entry><entry><title>Closure and Scope</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2011/05/31/closure-and-scope.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2011/05/31/closure-and-scope.aspx</id><published>2011-05-31T14:30:00Z</published><updated>2011-05-31T14:30:00Z</updated><content type="html">The term closure refers to a function which references variables outside of its scope; the function is “closed over” those variables. I’ll give an example of misusing closure in JavaScript and C#, then compare the solutions. This example is going to attempt the trivial task of outputting the digits 0 through 9. JavaScript for (x = 0; x &amp;lt; 10; x++) { setTimeout(function () { console.log(x); }, 1); } C# for (int x = 0; x &amp;lt; 10; x++) { setTimeout(() =&amp;gt; Console.WriteLine(x) , 1); } This assumes...(&lt;a href="http://weblogs.asp.net/briandukes/archive/2011/05/31/closure-and-scope.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7810389" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author><category term="JavaScript" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript/default.aspx" /><category term="JavaScript Common Difficulties and Misconceptions" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript+Common+Difficulties+and+Misconceptions/default.aspx" /><category term="Scope" scheme="http://weblogs.asp.net/briandukes/archive/tags/Scope/default.aspx" /><category term="Closure" scheme="http://weblogs.asp.net/briandukes/archive/tags/Closure/default.aspx" /></entry><entry><title>JavaScript: The Language</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2011/05/24/javascript-the-language.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2011/05/24/javascript-the-language.aspx</id><published>2011-05-24T13:05:57Z</published><updated>2011-05-24T13:05:57Z</updated><content type="html">I gave my JavaScript language talk at the St. Louis .NET/DotNetNuke User Group last night.&amp;#160; I’ve posted the presentation (with some updated, clarified example code) up on slideshare. JavaScript: The Language I woke up this morning thinking through all of the things that I could have explained better and how to more succinctly get the important points across.&amp;#160; So, I’m now declaring (so that you, my loyal readership, can hold me to it) that I’m going to do a series on this blog focusing on...(&lt;a href="http://weblogs.asp.net/briandukes/archive/2011/05/24/javascript-the-language.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7802132" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author><category term="Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/Development/default.aspx" /><category term="General Software Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/General+Software+Development/default.aspx" /><category term="JavaScript" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript/default.aspx" /><category term="Presentations" scheme="http://weblogs.asp.net/briandukes/archive/tags/Presentations/default.aspx" /><category term="jQuery" scheme="http://weblogs.asp.net/briandukes/archive/tags/jQuery/default.aspx" /><category term="JavaScript Common Difficulties and Misconceptions" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript+Common+Difficulties+and+Misconceptions/default.aspx" /></entry><entry><title>Escaping Commas in ReSharper Live Templates Comma-Delimited Macros</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2011/02/21/escaping-commas-in-resharper-live-templates-comma-delimited-macros.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2011/02/21/escaping-commas-in-resharper-live-templates-comma-delimited-macros.aspx</id><published>2011-02-21T21:46:43Z</published><updated>2011-02-21T21:46:43Z</updated><content type="html">ReSharper is an irreplaceable tool in my coding arsenal.&amp;#160; One of its myriad of amazingly useful tools is Live Templates , a much enhanced version of Visual Studio’s code snippets.&amp;#160; When defining a live template you can specify a number of placeholders in the template, and choose from a variety of “macros” to determine how ReSharper fills that field in.&amp;#160; We use this to automate putting the current year number and filename in the copyright header in new files, and to have ReSharper suggest...(&lt;a href="http://weblogs.asp.net/briandukes/archive/2011/02/21/escaping-commas-in-resharper-live-templates-comma-delimited-macros.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7710712" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author></entry><entry><title>Chicago Day Of DotNetNuke 2010 Recap</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2010/10/12/chicago-day-of-dotnetnuke-2010-recap.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2010/10/12/chicago-day-of-dotnetnuke-2010-recap.aspx</id><published>2010-10-12T14:00:47Z</published><updated>2010-10-12T14:00:47Z</updated><content type="html">Saturday, October 2nd was the Day of DotNetNuke in Chicago .&amp;#160; A number of us from Engage attended and spoke .&amp;#160; I gave two presentations, which are now available on SlideShare (linked below).&amp;#160; I’ve added some notes (be sure to click the “Notes on slide 1” tab when viewing on SlideShare) to give context if you weren’t able to attend the session. Considerations with Writing JavaScript in your DotNetNuke ® site Packaging DNN ® extensions Overall, we definitely were glad to participate...(&lt;a href="http://weblogs.asp.net/briandukes/archive/2010/10/12/chicago-day-of-dotnetnuke-2010-recap.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7626038" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author><category term="Engage Software" scheme="http://weblogs.asp.net/briandukes/archive/tags/Engage+Software/default.aspx" /><category term="DotNetNuke" scheme="http://weblogs.asp.net/briandukes/archive/tags/DotNetNuke/default.aspx" /><category term="Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/Development/default.aspx" /><category term="General Software Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/General+Software+Development/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/briandukes/archive/tags/ASP.NET/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/briandukes/archive/tags/Community+News/default.aspx" /><category term="JavaScript" scheme="http://weblogs.asp.net/briandukes/archive/tags/JavaScript/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/briandukes/archive/tags/.NET/default.aspx" /><category term="Engage Modules" scheme="http://weblogs.asp.net/briandukes/archive/tags/Engage+Modules/default.aspx" /><category term="Module Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/Module+Development/default.aspx" /><category term="DotNetNuke 5.x" scheme="http://weblogs.asp.net/briandukes/archive/tags/DotNetNuke+5.x/default.aspx" /><category term="Module Installation" scheme="http://weblogs.asp.net/briandukes/archive/tags/Module+Installation/default.aspx" /><category term="Presentations" scheme="http://weblogs.asp.net/briandukes/archive/tags/Presentations/default.aspx" /><category term="jQuery" scheme="http://weblogs.asp.net/briandukes/archive/tags/jQuery/default.aspx" /></entry><entry><title>My Messages Inbox: A Mobile DotNetNuke Application for the St. Louis DNN Hackathon</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2010/08/30/my-messages-inbox-a-mobile-dotnetnuke-application-for-the-st-louis-dnn-hackathon.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2010/08/30/my-messages-inbox-a-mobile-dotnetnuke-application-for-the-st-louis-dnn-hackathon.aspx</id><published>2010-08-30T17:24:06Z</published><updated>2010-08-30T17:24:06Z</updated><content type="html">This past week was the St. Louis DotNetNuke Hackathon .&amp;#160; This was a competition for DNN developers to create a mobile application which interacts with DNN .&amp;#160; We had one week to create something worth showing off.&amp;#160; So, I, along with another developer at Engage , Abadi, took the challenge. Abadi has experience developing games for Android phones, so we decided to write a Java application (rather than using Appcelerator’s Titanium Mobile product) which could connect with the Messaging...(&lt;a href="http://weblogs.asp.net/briandukes/archive/2010/08/30/my-messages-inbox-a-mobile-dotnetnuke-application-for-the-st-louis-dnn-hackathon.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7602139" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author><category term="Engage Software" scheme="http://weblogs.asp.net/briandukes/archive/tags/Engage+Software/default.aspx" /><category term="DotNetNuke" scheme="http://weblogs.asp.net/briandukes/archive/tags/DotNetNuke/default.aspx" /><category term="Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/Development/default.aspx" /><category term="DotNetNuke Modules" scheme="http://weblogs.asp.net/briandukes/archive/tags/DotNetNuke+Modules/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/briandukes/archive/tags/Community+News/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/briandukes/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/briandukes/archive/tags/C_2300_/default.aspx" /><category term="Module Development" scheme="http://weblogs.asp.net/briandukes/archive/tags/Module+Development/default.aspx" /><category term="Java" scheme="http://weblogs.asp.net/briandukes/archive/tags/Java/default.aspx" /><category term="Android" scheme="http://weblogs.asp.net/briandukes/archive/tags/Android/default.aspx" /><category term="Hackathon" scheme="http://weblogs.asp.net/briandukes/archive/tags/Hackathon/default.aspx" /><category term="Mobile" scheme="http://weblogs.asp.net/briandukes/archive/tags/Mobile/default.aspx" /></entry><entry><title>New Helper Methods in .NET 4 (or, A Great New Method With a Caveat)</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2010/03/03/new-helper-methods-in-net-4.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2010/03/03/new-helper-methods-in-net-4.aspx</id><published>2010-03-03T15:28:00Z</published><updated>2010-03-03T15:28:00Z</updated><content type="html">On Twitter yesterday, Brad Abrams mentioned String.IsNullOrWhiteSpace , to awesome new helper to replace compliment String.IsNullOrEmpty . I'm really excited to get to use this, since it seems like it makes more sense in the majority of cases than IsNullOrEmpty. But that's not the point of this blog post. After Brad made that comment, Josh Einstein replied and asked why Enum.HasFlag wasn't getting any love, and I have to agree, having not heard this mentioned before. Just the other day I was working...(&lt;a href="http://weblogs.asp.net/briandukes/archive/2010/03/03/new-helper-methods-in-net-4.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7368914" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/briandukes/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/briandukes/archive/tags/C_2300_/default.aspx" /><category term=".NET 4" scheme="http://weblogs.asp.net/briandukes/archive/tags/.NET+4/default.aspx" /><category term="Enum" scheme="http://weblogs.asp.net/briandukes/archive/tags/Enum/default.aspx" /><category term="BCL" scheme="http://weblogs.asp.net/briandukes/archive/tags/BCL/default.aspx" /><category term="bitwise operators" scheme="http://weblogs.asp.net/briandukes/archive/tags/bitwise+operators/default.aspx" /><category term="String" scheme="http://weblogs.asp.net/briandukes/archive/tags/String/default.aspx" /></entry><entry><title>DotNetNuke &amp; MVC</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/briandukes/archive/2010/01/28/dotnetnuke-amp-mvc.aspx" /><id>http://weblogs.asp.net/briandukes/archive/2010/01/28/dotnetnuke-amp-mvc.aspx</id><published>2010-01-28T15:36:00Z</published><updated>2010-01-28T15:36:00Z</updated><content type="html">Earlier this week, Shaun Walker, DotNetNuke 's Co-Founder and Chief Architect, caused a bit of a ruckus in the blogosphere/twitterverse with his blog post ASP.NET MVC and DotNetNuke . I think many disagreed with his representation of ASP.NET MVC, whether or not they agreed with the actual point of the blog post (to announce that DNN is not going to be ported to ASP.NET MVC). Unfortunately, much of the discussion became a little too heated, so I think we are all glad to be able to move on to more...(&lt;a href="http://weblogs.asp.net/briandukes/archive/2010/01/28/dotnetnuke-amp-mvc.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7326303" width="1" height="1"&gt;</content><author><name>bdukes</name><uri>http://weblogs.asp.net/members/bdukes.aspx</uri></author><category term="DotNetNuke" scheme="http://weblogs.asp.net/briandukes/archive/tags/DotNetNuke/default.aspx" /><category term="ASP.NET" scheme="http://weblogs.asp.net/briandukes/archive/tags/ASP.NET/default.aspx" /><category term="Community News" scheme="http://weblogs.asp.net/briandukes/archive/tags/Community+News/default.aspx" /><category term=".NET" scheme="http://weblogs.asp.net/briandukes/archive/tags/.NET/default.aspx" /><category term="ASP.NET MVC" scheme="http://weblogs.asp.net/briandukes/archive/tags/ASP.NET+MVC/default.aspx" /></entry></feed>