<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>C#</title>
        <link>http://theruntime.com/blogs/jaykimble/category/74.aspx</link>
        <description>C#</description>
        <language>en-US</language>
        <copyright>Jay Kimble</copyright>
        <managingEditor>jkimble@gmail.com</managingEditor>
        <generator>Subtext Version 1.9.5.0</generator>
        <item>
            <title>CR/R! Wrap up</title>
            <link>http://theruntime.com/blogs/jaykimble/archive/2008/08/21/crr-wrap-up.aspx</link>
            <description>&lt;p&gt;It’s been about a month since I took the challenge to replace ReSharper (R#) with Code Rush/Refactor! Pro (CR/R!). In that time I have adjusted well to CR/R!. There are a number of areas where I am MORE productive. Yep, I said that. There are a few things I miss (So Mark of DevExpress pay attention).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Code Analysis could improve&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Code Analysis is a fairly new feature of CR/R! and as one would expect it’s not quite as strong as R#'s (I do expect this to get better, BTW). Sometimes it doesn’t find references to ASP.NET Server Controls from the Code Behind for instance which tends to make its analysis on ASPX CodeBehind files somewhat unpredictable. I also ran into some speed issues with JS code, but I think it was the network that day (because I haven’t had any issues since).&lt;/p&gt;  &lt;p&gt;The other thing I love about R# is that not only does it analyze my code, but it gives me a convenient keystroke that helps me resolve the problem without having to leave where I am. CR/R! is building some of this stuff so we’ll have to wait and see what happens.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Embeddings&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I still have a few embeddings that I would like to turn off (with no options to do so -- as far as I can tell)... I suspect I need to dig into the XML config files, but am scared to do so.&lt;/p&gt;  &lt;p&gt;For the DevExpress Guys to note the main one I want to get rid of is called "Embed Not Parenthesis." What happens is that I’m in a long "if(...)" and I highlight the first "=" of an "==" (because I stupidly set it to "==" and not "!="), when I type "!" it translates my entry to "!(=)=" which would be nice is I had more than 1 character highlighted.&lt;/p&gt;  &lt;p&gt;[If you don’t know what they are let me explain them. Basically with CR/R! if you have a section of code highlighted you can easily wrap that selection with say a region by typing CTL+3 (BTW, # = Shift+3 so the sequence makes sense); when you do that a #region/#endregion automagically wraps your selected code and drops you on the line to set the region text. ]&lt;/p&gt;  &lt;p&gt;The embeddings in general could really benefit from a different set of key sequences. it’s too easy to highlight a section of code and accidentally type the single character that creates the embedding... I’d prefer a CTL sequence. Yes, I know I can change them myself, but the defaults make the product frustrating for newbies.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Wish List&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Beyond what I have already mentioned I really have 1 wish. I want either an alternate set of keystroke shortcuts for things like Embeddings and single character templates [CR/R! has some single character templates that you type like "c{space}" and a class shell automagically appears] that I can set as the default (so choose something other than what has been the standard) or the ability to package up my settings and be able to easily share them... &lt;/p&gt;  &lt;p&gt;Yes, Rory, I have thought about contributing an addin for your community project.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Script# Compatibility&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;BTW, CR/R! works with Script#! Well, I ran into a few minor difficulties, but I could use it with the product which is all I would have asked for. No crashes, and no real warts.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Final words&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Well, the good news for the CR/R! crew is that I’m a convert. I waited too long for VS 2008 from R#, and in that time I realized that there is a different place to go to.&lt;/p&gt;  &lt;p&gt;Finding that I can refactor all kinds of things (like HTML code and JS code as well as C# and VB code now if it only did Python... just kidding, Mark... I don’t need it) really sealed the deal.&lt;/p&gt;  &lt;p&gt;If you are trying out CR/R! you should get the &lt;a href="http://www.rorybecker.me.uk/DevExpress/Plugins/CommunitySuite/"&gt;Rory’s latest zip file&lt;/a&gt; containing all the community plugins. You should especially install "Refactor_Resolve" from this zip file (You’ll want it!). This is the plugin that was written by Koen Hoefkens. &lt;em&gt;BTW, these plugins I think all run with DXCore, so if you don’t have a license to any kind of Refactoring product then you might want to consider installing DXCore (it’s free) and then installing these plugins... they can make your life a little easier.&lt;/em&gt;&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/jaykimble/aggbug/2666.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jay Kimble</dc:creator>
            <guid>http://theruntime.com/blogs/jaykimble/archive/2008/08/21/crr-wrap-up.aspx</guid>
            <pubDate>Thu, 21 Aug 2008 17:25:47 GMT</pubDate>
            <wfw:comment>http://theruntime.com/blogs/jaykimble/comments/2666.aspx</wfw:comment>
            <comments>http://theruntime.com/blogs/jaykimble/archive/2008/08/21/crr-wrap-up.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://theruntime.com/blogs/jaykimble/comments/commentRss/2666.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Review: Gurock SmartInspect</title>
            <link>http://theruntime.com/blogs/jaykimble/archive/2008/08/12/review-gurock-smartinspect.aspx</link>
            <description>&lt;p&gt;About a year ago, I was blogging at CodeBetter and I was given a product in hopes that I would review it. In fact I had won a copy of this product in the past. I promised and promised that I would take a look at it, but I never got around to it.&lt;/p&gt;  &lt;p&gt;Mainly because I didn’t have a use (or thought I didn’t have a use) for a logging product at the time. Logging isn’t really all that "sexy" and I was trying to dive deep into all kinds of things.&lt;/p&gt;  &lt;p&gt;Well, with my day job we ran into a some problems that after I analyzed the errors I realized that I was missing an important piece of the puzzle... So I started thinking about what I might need. Enter that product that I hadn’t had a chance to review...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Logging isn’t "sexy" or is it?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It’s only "sexy" when you NEED it. And when you need it you need something good. SmartInspect is really, really cool, and IMO after finally taking a day with it, I can say it’s also "sexy." It really brings your logging to life.&lt;/p&gt;  &lt;p&gt;I’m an ASP.NET guy, so what I need is to be able to track a user through a site and see there path up to the error. SmartInspect allows you to create "sessions" of logs that follow a user via their session. You can also use a default session (if you are using something more single-processed/threaded).&lt;/p&gt;  &lt;p&gt;You can colorize different things in the log and can even see the properties of an object that you throw into the log (you simply tell it to log the full object passing just the variable).&lt;/p&gt;  &lt;p&gt;The best part for me was it was pretty simple. I did a fairly advanced thing with it in relatively short order (Sessions, logging our SQL calls), and it really wasn’t that much work. The code that you have to inject into your app (yes, you have to inject code into your app) is pretty trivial.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Remote Logging viewing&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;What I really liked was that the SmartInspect log console feels like VS and is a TCP/IP server which means that you can point an app at a machine to log via TCP/IP. The version that I was given even included source for the logging library (and I think everything else). Yes, you can log to a file and other more traditional log destinations... but the TCP/IP server is so "sexy."&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Sold&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Anyway, my workplace will be purchasing a copy of it... and it’s a tool you’ll probably need at some point. Here’s the web site (go check it out for yourself) - &lt;a title="http://www.gurock.com/products/smartinspect/" href="http://www.gurock.com/products/smartinspect/"&gt;http://www.gurock.com/products/smartinspect/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;BTW, it’s for Delphi, and Java, too.&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/jaykimble/aggbug/2659.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jay Kimble</dc:creator>
            <guid>http://theruntime.com/blogs/jaykimble/archive/2008/08/12/review-gurock-smartinspect.aspx</guid>
            <pubDate>Tue, 12 Aug 2008 14:10:27 GMT</pubDate>
            <wfw:comment>http://theruntime.com/blogs/jaykimble/comments/2659.aspx</wfw:comment>
            <comments>http://theruntime.com/blogs/jaykimble/archive/2008/08/12/review-gurock-smartinspect.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://theruntime.com/blogs/jaykimble/comments/commentRss/2659.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Writing Better JS Components</title>
            <link>http://theruntime.com/blogs/jaykimble/archive/2008/08/12/writing-better-js-components.aspx</link>
            <description>&lt;p&gt;Perry (my boss... a developer/manager... he codes and manages) and I have been having a recurring conversation lately. One that keeps bringing to my mind a product that I knew about when I worked for ZAC Catalogs (way back in the day). I would daresay that none of you had even heard of it (although we did pick it up as a result of Xtras carrying it, so maybe a few of you knew about it). I believe it was a called "MFC DataGrid Wizard" or something like that. Anyway what it did was build a custom DataGrid component for you based on selections in a wizard. You selected what features you needed and then it would take it’s full-featured Grid source code (which came with the component) and would dynamically generate a full blown component for you with just the features you needed. &lt;/p&gt;  &lt;p&gt;There are two reasons this has become a topic for discussion for me. The first is that we are currently struggling with a set of third party components that a prior developer/manager pushed all over our main site. The components are ones that you have probably heard great things about them and they are pretty cool. The problem is when you shove these components everywhere! We are having ViewState issues among other things... One of the components is a full-featured Grid control (client-side) that while nice we usually only use as a glorified listbox (we use it for selecting an item). As a result I built a specialized DataGrid for our company (one that I’ll be doing a walkthrough on its codebase at the first &lt;a href="http://theruntime.com/blogs/jaykimble/archive/2008/07/17/tampa-user-experience-tux-user-group-is-coming-september-10th.aspx"&gt;TUX user group meeting next month&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;The other reason is this &lt;a href="http://weblogs.asp.net/bleroy/archive/2008/08/05/need-a-simple-grid-for-asp-net-ajax.aspx"&gt;post from Bertrand LeRoy&lt;/a&gt; where he talks about a &lt;a href="http://weblogs.asp.net/bleroy/archive/2008/08/05/need-a-simple-grid-for-asp-net-ajax.aspx"&gt;simple grid for ASP.NET&lt;/a&gt;. Here’s my problem with Bertrand’s post. The grid he talks about as being simple really doesn’t sound all that simple to my ears. Let me list a couple features:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Column drag/drop&lt;/li&gt;    &lt;li&gt;Different column types&lt;/li&gt;    &lt;li&gt;Data Sorting/Paging&lt;/li&gt;    &lt;li&gt;Inline editing&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now mind you these are awesome features if you need them all then you would want to use something like this, but a lot of times what we need is something simpler. You could use the aforementioned grid for this, but the grid will probably still use ViewState (because it needs it maintain state for the paging, sorting, and editing features). It might need several more scripts or &amp;lt;shudder /&amp;gt; it’s script might be 500-1000 lines longer because of the added features.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A Better Way&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I have been thinking about a better way to "do" script components. We really need to have a wizard that asks us what we will be needing in the components and then the main script file can be customized (as can the server side code) to remove certain things. It could be done really easy with templates for the script. You need a template for the main file, and additional includes based on features. The server side would work pretty much the same way. I know that no company really wants to give away their source, but even if they were able to do this for script code that would make our lives a lot easier.&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/jaykimble/aggbug/2658.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jay Kimble</dc:creator>
            <guid>http://theruntime.com/blogs/jaykimble/archive/2008/08/12/writing-better-js-components.aspx</guid>
            <pubDate>Tue, 12 Aug 2008 12:04:33 GMT</pubDate>
            <wfw:comment>http://theruntime.com/blogs/jaykimble/comments/2658.aspx</wfw:comment>
            <comments>http://theruntime.com/blogs/jaykimble/archive/2008/08/12/writing-better-js-components.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://theruntime.com/blogs/jaykimble/comments/commentRss/2658.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Core Addin Challenge: 2 weeks with CodeRush/Refactor Pro (CR/R!)</title>
            <link>http://theruntime.com/blogs/jaykimble/archive/2008/08/05/core-addin-challenge-2-weeks-with-coderushrefactor-pro-crr.aspx</link>
            <description>&lt;p&gt;[As &lt;a href="http://theruntime.com/blogs/jaykimble/archive/2008/07/22/core-addin-challenge--hello-coderushrefactor-pro.aspx"&gt;previously&lt;/a&gt; &lt;a href="http://theruntime.com/blogs/jaykimble/archive/2008/07/28/core-addin-challenge-1-week-with-coderushrefactor-pro.aspx"&gt;mentioned&lt;/a&gt; I have committed to switching from ReSharper (R#) to CR/R!... the end result will be a regular guy’s comparison of the 2.  DISCLAIMER: By no means is this meant to be a slight on R#, but more of me looking at CR/R! a little closer -- I think a number of us took a cursory look at CR/R! and while we found value a surface look doesn’t really give you the full picture... I’m going through the challenges of using CR/R! because it IS different from R# and hopefully I can help folks who are trying to compare between the two and decide which is best for their situation] &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Turning the corner (sort of)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Tuesday I turned the corner I thought that there was no coming back (more on that in a second). The thing about CR/R! is that it’s truly a learning experience. CR takes over your environment in such a way that, while it still looks like Visual Studio, you need to re-educate yourself a little to all its nuances. It can actually get in your way (and there have been a couple times with Mark and Rory (and Koen HanHoefkens, the author of the excellent --and free-- CR_Resolve plugin) where I have asked "how do I turn xxx feature off." The most annoying one for me is that I tend to highlight code and start to overwrite with new code... for the most part there are no pains here, except when the character you type is a "(" which is often the character I am typing when changing an "if" statement. What happens is that this embeds your selection in a set of parenthesis.  This was actually easy to turn off... the feature is called "embeddings" which is found in the shortcuts section of the options (there are lots of options with CR/R!). Before I shut them all down I discovered some really rich stuff here... for instance you can highlight code, type "c" and your code is instantly surrounded by a try catch with your cursor setting in the catch block. I still turned off the parenthesis, but I left the rest of them on.&lt;/p&gt;  &lt;p&gt;I’ve also started figuring out some of the templates.&lt;/p&gt;  &lt;p&gt;I’m still learning here, but the topic is very deep!&lt;/p&gt;  &lt;p&gt;BTW, I’ve found that this product enhances your experience while working with ASP.NET HTML, JavaScript, VB, C#, and even Script# (C# variant that creates JS files).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;My One hiccup&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I have experienced one hiccup over the last several days: &lt;em&gt;PERFORMANCE/MEMORY FOOTPRINT&lt;/em&gt;. I’ve had VS crash a few times. I finally think I have the problem figured out (a not so well behaved plug-in I installed... I installed some really old plugins... well they didn’t seem that old).&lt;/p&gt;  &lt;p&gt;Currently the only DXCore plugins I have running (besides CR/R!) are CR_RESOLVE, and the "Highlight Current Line" both from the &lt;a href="http://code.google.com/p/dxcorecommunityplugins/"&gt;community plugins&lt;/a&gt; (&lt;a href="http://theruntime.com/blogs/jaykimble/archive/2008/07/28/core-addin-challenge-1-week-with-coderushrefactor-pro.aspx"&gt;mentioned in the last post&lt;/a&gt;). I also have turned off the Code Analysis (temporarily).&lt;/p&gt;  &lt;p&gt;I am still watching this closely (and am sure that Mark Miller will chime in either personally or publicly with a few more suggestions, but I don’t think he needs to... &lt;em&gt;&lt;strong&gt;this lesson should be heeded that you need to be careful which addins you install in VS... they can make things run less than smoothly, and adding a bunch of them all at once makes it even harder to determine where the problem really lies&lt;/strong&gt;&lt;/em&gt;).&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/jaykimble/aggbug/2656.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jay Kimble</dc:creator>
            <guid>http://theruntime.com/blogs/jaykimble/archive/2008/08/05/core-addin-challenge-2-weeks-with-coderushrefactor-pro-crr.aspx</guid>
            <pubDate>Tue, 05 Aug 2008 19:43:58 GMT</pubDate>
            <wfw:comment>http://theruntime.com/blogs/jaykimble/comments/2656.aspx</wfw:comment>
            <comments>http://theruntime.com/blogs/jaykimble/archive/2008/08/05/core-addin-challenge-2-weeks-with-coderushrefactor-pro-crr.aspx#feedback</comments>
            <wfw:commentRss>http://theruntime.com/blogs/jaykimble/comments/commentRss/2656.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Core Addin Challenge: 1 week with CodeRush/Refactor Pro</title>
            <link>http://theruntime.com/blogs/jaykimble/archive/2008/07/28/core-addin-challenge-1-week-with-coderushrefactor-pro.aspx</link>
            <description>&lt;p&gt;[UPDATE 8/5: Rory noticed a couple spelling errors in people's names and also noted that I should give &lt;font face="Arial"&gt;Koen HanHoefkens credit for his excellent CR_RESOLVE plugin&lt;/font&gt;]&lt;/p&gt;
&lt;p&gt;I have survived my first week with CodeRush/Refactor Pro (CR/RP). I have discovered a few things about my development habits: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;I don’t memorize all that many shortcut keystrokes... I tend to look for the "one keystroke to rule them all." Interestingly enough I avoid mouse usage as well &lt;/li&gt;
    &lt;li&gt;With the competing produce (R#) I use about 7 features:
    &lt;ul&gt;
        &lt;li&gt;Improved Intellisense &lt;/li&gt;
        &lt;li&gt;Rename Refactoring (which is also available in VS) &lt;/li&gt;
        &lt;li&gt;Extract Method (also available in VS) &lt;/li&gt;
        &lt;li&gt;Code Analysis &lt;/li&gt;
        &lt;li&gt;Auto-create add using/import &lt;/li&gt;
        &lt;li&gt;File Templates &lt;/li&gt;
        &lt;li&gt;Find Usages &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’m also discovering some things about CR/RP&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;I’m discovering that I need to tweak CR/RP’s default settings to avoid some of the "annoyances" (CR/RP can take over at times when you don’t want it to) &lt;/li&gt;
    &lt;li&gt;I think If I can get over the hump I am going to find that I’m MORE productive with this thing (although it has been touch and go at times) &lt;/li&gt;
    &lt;li&gt;One of my machines seems to run faster than R# and the other not so much (there are different things turned on/off on these machines right now) &lt;/li&gt;
    &lt;li&gt;RP provides more refactorings than any other product I have seen!! They even have refactorings for ASP.NET .ASPX files (the html part!!!) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So &lt;strong&gt;the "one keystroke to rule them all" for CR/RP &lt;/strong&gt;is &lt;em&gt;&lt;strong&gt;CTL + ~&lt;/strong&gt;&lt;/em&gt; . Oh yeah, you also need to install the community DXCore addin called -- Refactor_Resolve (which was written by &lt;font face="Arial"&gt;Koen HanHoefkens and &lt;/font&gt;you can get from &lt;a href="http://www.rorybecker.me.uk/DevExpress/Plugins/Community/Refactor_Resolve/"&gt;here&lt;/a&gt;.. but I would recommend that you get it out of the zip file found &lt;a href="http://www.rorybecker.me.uk/DevExpress/Plugins/CommunitySuite/"&gt;here&lt;/a&gt;. BTW, thank you Rory Becker for this info). Once you have installed that and get it turned on then Refactor! will give you an option to add usings/imports for your unresolved references.&lt;/p&gt;
&lt;p&gt;Oh yeah that community project has a number of nice things you may want to install... like the highlighted line focus.&lt;/p&gt;
&lt;p&gt;As I mentioned before you also need to turn on Code Analysis and cut down the size of the little bar at the bottom of the code files, by setting it to 1 file and 0 pixels (it will still show up, but it won’t be as intrusive... your scroll bar will work again). One more thing I believe this feature is a new one (and maybe even a beta one)... it’s not as good as R#'s but from what I understand with their plans it is going to get a lot better (they are going to add over 100 items it can check for and find...)&lt;/p&gt;
&lt;p&gt;Additional things I did was I turned off the Smart Brackets and Smart Parentheses and the some of the Smart Paste features features (the auto create properties ones are what I killed... I may kill a few more of the Smart Paste features to get things tweaked out a little better for me).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt; &lt;br /&gt;
All in all things are getting better... Today was a breakthrough day for me (Thank you Rory Becker and Mark Miller)! I think I turned the corner on my experience. I’m think I’m as productive with CR/RP now as I was with R#. I’m only missing 2 things... both of which are livable right now: Find Usages (which I can use the Find References mechanism), and R# File Templates (but CR’s templates are WAY better... so I need to learn a few more of those... I have a number committed to memory already). Just &lt;em&gt;23 more days to go&lt;/em&gt;... but I suspect I'm going to be very comfy before that happens.&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/jaykimble/aggbug/2653.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jay Kimble</dc:creator>
            <guid>http://theruntime.com/blogs/jaykimble/archive/2008/07/28/core-addin-challenge-1-week-with-coderushrefactor-pro.aspx</guid>
            <pubDate>Tue, 29 Jul 2008 02:29:28 GMT</pubDate>
            <wfw:comment>http://theruntime.com/blogs/jaykimble/comments/2653.aspx</wfw:comment>
            <comments>http://theruntime.com/blogs/jaykimble/archive/2008/07/28/core-addin-challenge-1-week-with-coderushrefactor-pro.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://theruntime.com/blogs/jaykimble/comments/commentRss/2653.aspx</wfw:commentRss>
        </item>
        <item>
            <title>MS MVC Thoughts</title>
            <link>http://theruntime.com/blogs/jaykimble/archive/2008/07/24/ms-mvc-thoughts.aspx</link>
            <description>&lt;p&gt;[NOTE: I haven’t quite had much of a chance to look at the new Preview 4, so take this as someone nearly informed. I haven’t read about anything in the Preview 4 that changes what I’m going to say. Also, remember that I am the admin/editor of the blog site which is Alt Alt.NET... so testability/mockabilty doesn’t really resonate with me.]&lt;/p&gt;  &lt;p&gt;I know it’s shocking that I would have something to weigh in on MS MVC, but I do. For those who don’t know. I took some issue with Ayende’s "leaky abstraction" back in my CodeBetter days (they had to love having me around). BTW, I understood and agreed in some respects, but in others I was less than agreeable. I still think Web Forms are viable and usable, but in some cases the paradigm breaks down, so the need for another paradigm is both welcome and interesting (and before anyone brings up Castle, PixelDragon, or CodeStory MVC frameworks, I have looked at them as well and found them --in general--way too complex to get started with which is not to say that a couple templates could help you guys out...).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why I’m interested?&lt;/strong&gt;    &lt;br /&gt;Ok, the reason I’m interested is summed up in one word: RIAs. I could have summed that up in 2 words: Ajax, and Silverlight2. The other thing is that I have used the MVCContrib’s Restful feature to build REST services (way cool).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Good&lt;/strong&gt;    &lt;br /&gt;I really like the simplicity. I mean MVC isn’t simple, but the MVC framework makes it easy to keep your layers separate... you still have to think about what you are doing, but on the whole it’s pretty easy to use. The MVC paradigm allows for a truer coding experience (the engine doesn’t pretend to be a Windows application in any way although you can still use things like session and the forms authentication engine in ASP.NET).&lt;/p&gt;  &lt;p&gt;The MVCContrib library is indispensable. It’s an open source library that is a community project that adds additional features to the MS MVC architecture. For instance there are a number of alternative view engines; I haven’t investigated all them yet (and for the most part I am sticking with the ASPX engine... although my later comments may lead you otherwise).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Not So Good&lt;/strong&gt;    &lt;br /&gt;Before I say this I want you to realize I have written a grand total of 2 apps with this. App1 used the Restful plugin and really shouldn’t count, so I have written exactly 1 app (so definitely take this with a grain of salt).&lt;/p&gt;  &lt;p&gt;Complaint number 1 is that I felt like I was writing old ASP code. I used the inline code method for writing output into my HTML. I probably could have written in the codebehind and had a clean web template with code separation (something I’m a believer in, but it was my first app)... probably more my fault than the engines, but there is a lot of sample code out there already that lead you down this path.&lt;/p&gt;  &lt;p&gt;Complaint number 2 really is valid. The whole idea of MVC is that I should be able to swap out the view engine. Or better yet, be able to respond to a request and supply a view that is more suited for the client. Someone pointed out to me that one of the big features of ASP.NET 1.0 was that it would supposedly do this... I would really love for MVC to make it easy to determine that "this is a mobile browser" supply the mobile template (if one exists). Or better yet, this client is requesting that I send XML... evidently it’s some kind of Rich Client. Specific methods can be triggered to deliver a specific type, it would just be nice if the framework would detect that the client "accepts" (that’s a ServerVariable pushed in the header) only "Application/Json" so the MVC app should use a JSON result or convert the result I got to JSON and push it directly down to the client.&lt;/p&gt;  &lt;p&gt;This would make the MVC part of this more useful to me (remember all the stuff I said up front... and Yes, I know I can do this myself and have... it just would be nice if I could get the controller framework to make it easy for me to configure and then do this for me)&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/jaykimble/aggbug/2650.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jay Kimble</dc:creator>
            <guid>http://theruntime.com/blogs/jaykimble/archive/2008/07/24/ms-mvc-thoughts.aspx</guid>
            <pubDate>Thu, 24 Jul 2008 13:45:05 GMT</pubDate>
            <wfw:comment>http://theruntime.com/blogs/jaykimble/comments/2650.aspx</wfw:comment>
            <comments>http://theruntime.com/blogs/jaykimble/archive/2008/07/24/ms-mvc-thoughts.aspx#feedback</comments>
            <wfw:commentRss>http://theruntime.com/blogs/jaykimble/comments/commentRss/2650.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Tampa User eXperience (TUX) User Group is coming September 10th, 2008&amp;hellip;</title>
            <link>http://theruntime.com/blogs/jaykimble/archive/2008/07/17/tampa-user-experience-tux-user-group-is-coming-september-10th.aspx</link>
            <description>&lt;p&gt;I am proud to announce that I and a couple other guys are starting User Group that revolves around User Experience (or UX) in the MS tools eco-system. The other guys are Shawn Cady, Perry Panagopoulos, and Bill Reiss (MVP) [Bill always gets his MVP props].&lt;/p&gt;
&lt;p&gt;I could give you all their backgrounds, but I’ll make them do it at the first meeting. I’m sure Papa Fish (aka &lt;a href="http://www.devfish.net"&gt;www.devfish.net&lt;/a&gt;) the local MS Dev Evangelist (my Blog Father) Joe Healy will be around (at least for the first meeting).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TUX' Focus &lt;br /&gt;
&lt;/strong&gt;Our focus will be on the "now" of Ajax and how it integrates with ASP.NET (in all its various forms), and the "future" of Silverlight2, and anything in between (like adding Silverlight2 controls to Ajax sites, etc); we’ll not be stuck in just Web either... we’ll probably do some WPF as well. We’ll also be  dealing with some of those more abstract things that you need to get better at (like how to be a better designer, creating good user experiences, etc.), and we will do our best to keep this group "devsigner-friendly" (devsigner is a developer who is also a designer).&lt;/p&gt;
&lt;p&gt;We have a lot of really creative ideas to make this fun and useful to you today as well as with an eye for the future (but I don’t want to blow them all)... We will definitely keep this interactive and will try to help you solve your problems as well (at least we’ll be around to chat with you before and afterward).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;First Talk: Intro To MS Ajax Scripting&lt;/strong&gt; &lt;br /&gt;
The first person to present will be me. I will be pulling a talk out of my paid pile which means that you have probably never seen me give this talk (unless you work at one of the companies I gave it at)... this is very special and will never be repeated (well, maybe). This talk is one that I have yet to see anyone give (for free). It’s an introduction to the MS Ajax scripting framework. Oftentimes you see a demo where someone shows you how to build an Ajax Extender control where a JavaScript is thrown in, but rarely (I’ve never seen it done) does someone talk to you about building the script behavior which is used to create the Server-Side Extender (I will in fact be doing just this). You will leave this talk with the knowledge of how to do it. As is often the case when I talk about JavaScript, I’ll end with a Script# demo which will make your life a lot easier (so we’ll build the last demo in C# which will be compiled to MS Ajax-style JavaScript); this big demo is a selection grid behavior that I built for my employer to replace a commercial grid component that we were using; you’ll definitely have a use for it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bonus&lt;/strong&gt; &lt;br /&gt;
We’ll have Pizza provided by Answers Systems, so just get there after work... you don’t need to eat first.&lt;/p&gt;
&lt;p&gt;AND!!!! Bill Reiss (MVP) has graciously given us an &lt;strong&gt;&lt;em&gt;MSDN Premium Subscription&lt;/em&gt;&lt;/strong&gt; (used to be MSDN Universal) to &lt;strong&gt;&lt;em&gt;give away&lt;/em&gt;&lt;/strong&gt;, so don’t miss it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where/When will it be?&lt;/strong&gt; &lt;br /&gt;
We will be holding these events at my workplace: Answers Systems in Oldsmar, FL. Better directions than this will follow in the near future (we will have a web site soon), but it’s right next to (West of) the Oldsmar Fleamarket on Tampa Rd (aka Hillsborough Ave). We plan to open the doors at 6:30pm with the activities starting at 7:00pm.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Can’t make it, but you really wanted to see my session?&lt;/strong&gt; &lt;br /&gt;
&amp;lt;sarcasm&amp;gt;So you are in my fan club (Eric Wise, I know that’s you since you maintain some of my stellar code), but you live in another state (like say the cold state of Ohio... where it’s 40 degrees Fahrenheit in August) so there is no way you could see this session by me, but you really, really want to see it, but the plane ticket is so expensive.&amp;lt;/sarcasm&amp;gt;&lt;/p&gt;
&lt;p&gt;Well, we plan on videoing our sessions and making them available online (as long as the speaker is OK with it, and I am... SO this is the LAST time I’ll be able to charge for this session... unless I revamp it which I will).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Afterwards...&lt;/strong&gt; &lt;br /&gt;
I’m not Joe Healy so I can’t pick up the tab, but there is a Starbucks down the street that many of my colleagues and I like to frequent (Stimulants... I need a good stimulant not a depressant... but we could be talked into depressants), so don’t be surprised if we all end up somewhere afterwards or maybe somewhere else... &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RSVP&lt;/strong&gt; &lt;br /&gt;
If you plan on coming please drop me a line via the contact form on this site. We need this to help us figure out how much Pizza to buy. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PS&lt;/strong&gt; &lt;br /&gt;
In October (the 2nd Wednesday), Bill will be doing a Silverlight2 talk (He’s a Silverlight MVP and a soon-to-be Silverlight book author). It will be more of an intro, but he plans on really giving a nice overview from both the diesgn standpoint and the development standpoint.&lt;/p&gt;
&lt;p&gt;And, yes, we actually have a a list of things we’re thinking about for November... nothing definitive (yet), but we plan on being way ahead of the game (as best as we can).&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/jaykimble/aggbug/2645.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jay Kimble</dc:creator>
            <guid>http://theruntime.com/blogs/jaykimble/archive/2008/07/17/tampa-user-experience-tux-user-group-is-coming-september-10th.aspx</guid>
            <pubDate>Fri, 18 Jul 2008 03:35:18 GMT</pubDate>
            <wfw:comment>http://theruntime.com/blogs/jaykimble/comments/2645.aspx</wfw:comment>
            <comments>http://theruntime.com/blogs/jaykimble/archive/2008/07/17/tampa-user-experience-tux-user-group-is-coming-september-10th.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://theruntime.com/blogs/jaykimble/comments/commentRss/2645.aspx</wfw:commentRss>
        </item>
        <item>
            <title>An Answer to my post for young programmers</title>
            <link>http://theruntime.com/blogs/jaykimble/archive/2008/06/24/an-answer-to-my-post-for-young-programmers.aspx</link>
            <description>&lt;p&gt;My good buddy (actually my best friend from High School), "The Witt" complained that I wasn’t being helpful to programmers who are trying to learn the craft when I posted two weekends ago on "&lt;a href="http://theruntime.com/blogs/jaykimble/archive/2008/06/14/a-question-you-should-ask-when-hiring-a-non-entry-level.aspx"&gt;A Question you should ask when hiring a non-entry level developer&lt;/a&gt;." (OK, he wasn’t the only one... but, hey, we have a history, so he can get me to post a response, and you can’t... deal...) &lt;/p&gt;  &lt;p&gt;I decided that our subsequent conversation in email would make a good followup post for those who want to know what they should be doing, and with his blessing I am posting an edited version.&lt;/p&gt;  &lt;p&gt;[It started with this comment]&lt;/p&gt;  &lt;p&gt;&lt;font color="#008000"&gt;The Witt - &lt;em&gt;OK I know that I am new to the ASP codeing info.       &lt;br /&gt;I understand the security issues ( or at least, what might happen with leaving every thing wide open). BUT, Having just completed two semesters of nothing but ASP I just don’t see what wrong... I AM NOT a seasoned programmer...and my classes taught us to connect inthis very manner you discribe...        &lt;br /&gt;can you eleborate for those of us that are trying to learn? show us what you would do instead?        &lt;br /&gt;thanks in advance&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Jay (in Email now)- I know I probably made some harsh statements there (in my blog post). I meant it to be hard, but it was as much about seeing some consultant coming in and writing crappy code against my APIs and leaving HUGE security holes in my website.&lt;/p&gt;  &lt;p&gt;The major point is for ASP.NET that you should always use Command objects with parameters... something like this (code may not compile cause its off the top of my head... there’s probably an error in there somewhere...)&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; query &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; = &lt;span style="color: #006080"&gt;"select field1, field2, field3 from someTable where ID = @TableID"&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; Cmd.CommandText = query&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; Cmd.Parameters.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DbParameter(&lt;span style="color: #006080"&gt;"TableID"&lt;/span&gt;, cbo.Value)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; &lt;span style="color: #008000"&gt;' Code continues....&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The trick is in using the "@" variable in the query, and using the Parameters collection. When this gets shoveled down to the database it gets sent differently and if someone tries to change that "cbo.Value" within the http post by trying to add their own SQL it will fail.&lt;/p&gt;

&lt;p&gt;I know that changing the variable in the http post statement sounds advanced... go here --&amp;gt; &lt;a href="http://www.bayden.com/TamperIE/"&gt;http://www.bayden.com/TamperIE/&lt;/a&gt;, download the TamperIE tool (for IE)  and try it out... You’ll see that you can in fact force whatever values you want into the post.&lt;/p&gt;

&lt;p&gt;As far as other dev environments go (I know you deal with a couple others), you want to figure out how to send a prepared statement to whatever SQL Server you are dealing with (ms access has these as well, so does Oracle and everything else I can think of... even the free PostgreSQL has them). &lt;/p&gt;

&lt;p&gt;Anyway, I see you as someone who’s growing as a developer... you’d not go into an interview and present yourself as more than you are... that too is the problem...&lt;/p&gt;

&lt;p&gt;Do you mind if I post this (more or less?) as a new blog post?&lt;/p&gt;

&lt;p&gt;&lt;font color="#008000"&gt;The Witt- I don’t mind in the least…&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="#008000"&gt;          Like I said I am trying to learn. The “@” tucked in front… I always thought that was just to get the info from the current page. It’s nice to know what that really does. I do use that for most of my sites. I just never knew all the reasons.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="#008000"&gt;I think that is the problem with a lot of the schools today. They are just pushing the students out and they really don’t know what they are doing. (Not that I always know what I’m doing). &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;---------------&lt;/p&gt;

&lt;p&gt;Ok. it’s not all that edited. One more thing I forgot to mention. If you use an ORM or something that builds classes for you, then you probably are getting this type of functionality (just about every ORM I know of uses prepared SQL statements to push data). My favorite ORM is SubSonic (and I know others rave about NHibernate)... It the Java world I use Apache Cayenne (and people rave about Hibernate over there)&lt;/p&gt;

&lt;p&gt;---------------&lt;/p&gt;

&lt;p&gt;BTW, I take great pleasure in mentioning that The Witt turns $28 (that’s hex) in a little less than 2 months... unfortunately I turn $28 about 2 weeks before him.&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/jaykimble/aggbug/2429.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jay Kimble</dc:creator>
            <guid>http://theruntime.com/blogs/jaykimble/archive/2008/06/24/an-answer-to-my-post-for-young-programmers.aspx</guid>
            <pubDate>Wed, 25 Jun 2008 01:15:35 GMT</pubDate>
            <wfw:comment>http://theruntime.com/blogs/jaykimble/comments/2429.aspx</wfw:comment>
            <comments>http://theruntime.com/blogs/jaykimble/archive/2008/06/24/an-answer-to-my-post-for-young-programmers.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://theruntime.com/blogs/jaykimble/comments/commentRss/2429.aspx</wfw:commentRss>
        </item>
        <item>
            <title>A Question you should ask when hiring a non-entry level developer</title>
            <link>http://theruntime.com/blogs/jaykimble/archive/2008/06/14/a-question-you-should-ask-when-hiring-a-non-entry-level.aspx</link>
            <description>&lt;p&gt;And I mean every developer. If you are an entrepreneur and you are hiring a consultant to work on your hot idea you need to do this. It could cost you everything if you don’t.&lt;/p&gt;  &lt;p&gt;I recently took on a side project. It’s a return to a project I did 2 years ago. Since I have worked on it there have been at least 2 other people on the project. I’m writing this for the Business Development guy (the guy I assume hired the other folks). I am not writing this to "cut" on the other developer (I am not perfect), but I did detect a flaw that for me is critical. So one of the other guys is not only not up to snuff IMNHO, but s/he shouldn’t be working anywhere as anything but entry level (I’m sorry to be so harsh, but when you understand what I’m talking about you’ll why I’m being so harsh).&lt;/p&gt;  &lt;p&gt;One more thing because I’m writing this more for a non-technical person. You don’t need to pretend to be technical. Pretend like you’ve hired someone to help you assess a programmer, and this is your one and only question.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Question&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;When should/would you ever right code like the following (pick the version that applies to you):&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;// C# Code&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; query = &lt;span style="color: #006080"&gt;"select * from SomeTable where SomeID = "&lt;/span&gt; + cboField.SelectedValue;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; SqlCommand cmd = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlCommand(query, connection);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; SqlDataAdapter da = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlDataAdapter(cmd);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; da.Fill(ds);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;' VB.NET (actually most versions of VB look something like this)&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; query &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt; = &lt;span style="color: #006080"&gt;" select * from SomeTable where SomeID = "&lt;/span&gt; + cboField.SelectedValue&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; cmd &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; SqlCommand(query, connection)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; da &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; SqlDataAdapter(cmd)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; da.Fill(ds)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; ' Thank you Telerik &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; the quick translation&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Answer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The simple answer is nowhere. &lt;/p&gt;

&lt;p&gt;The biggest reason is security. That code enables something called SQL Injection. There are utilities that exist that will let a hacker (actually you as a non-technical person could use them) to steal your entire database via a single whole in your app like this. All kinds of bad things can happen as a result of this. I recently switched grocery stores because my old grocery store had an IT problem where my debit card number got stolen. That kills it for me. I won’t be going back. The same will be true of your customers (if you don’t get sued). So the proper answer to this question means a lot.&lt;/p&gt;

&lt;p&gt;A second option is that the programmer might mention the DataSet. This is really less critical (and there are times to do this). The first line of the code is what should be singled out in your mind, because this will tell you if the programmer "gets" security. If s/he doesn’t understand it here... s/he probably won’t understand it elsewhere (you probably have a non-professional programmer pretending to be a professional programmer... take this from a guy who started as a non-professional and doesn’t have a programming degree). &lt;/p&gt;

&lt;p&gt;If they suggest making any changes to the first line, then they know what the problem is. They pass. If they leave that first line alone. They fail. By the way, it doesn’t matter whether the programmer is building a web app, a windows app, or some kind of service, this is a universal mistake.&lt;/p&gt;

&lt;p&gt;No matter how cheap they are they are creating problems that you don’t need. You can get a good programmer for a lower rate. For instance, I lowered my rate considerably to get a small piece of the pie on the app I’m working on. &lt;/p&gt;&lt;img src="http://theruntime.com/blogs/jaykimble/aggbug/2424.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jay Kimble</dc:creator>
            <guid>http://theruntime.com/blogs/jaykimble/archive/2008/06/14/a-question-you-should-ask-when-hiring-a-non-entry-level.aspx</guid>
            <pubDate>Sat, 14 Jun 2008 13:18:23 GMT</pubDate>
            <wfw:comment>http://theruntime.com/blogs/jaykimble/comments/2424.aspx</wfw:comment>
            <comments>http://theruntime.com/blogs/jaykimble/archive/2008/06/14/a-question-you-should-ask-when-hiring-a-non-entry-level.aspx#feedback</comments>
            <slash:comments>14</slash:comments>
            <wfw:commentRss>http://theruntime.com/blogs/jaykimble/comments/commentRss/2424.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Script#: Events/Delegates in an Atlas/MS Ajax style script</title>
            <link>http://theruntime.com/blogs/jaykimble/archive/2008/05/22/script-eventsdelegates-in-an-atlasms-ajax-style-script.aspx</link>
            <description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;First of all if you don’t know what &lt;a href="http://codeplex.com/scriptsharp"&gt;Script#&lt;/a&gt; is, it is a C# language variant available in VS2005/2008. The difference is that it can be used to create JavaScript. The compiler produces an assembly (usable in other Script# projects) and a set of JS files (a release and a debug version). Nikhil Kothari (the author) also has 2 script frameworks you can target: Nikhil’s framework, and the "Atlas"/MS Ajax (aka MS ASP.NET Ajax) framework. There are difference in what you can do when using the "Atlas" framework.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Event Limitations&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Let me start with a quote from the Script# Dox (regarding limitations in "Atlas" targeted scripts):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;"No support for auto-generated event accessors. Auto-generated event accessors require the existence of a Delegate class with Delegate.Combine/Remove semantics, which are not provided      &lt;br /&gt;by ASP.NET AJAX. The workaround is to explicitly implement the 2add/remove accessors for events in your code, rather than have the compiler generate it. "&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Basically this is saying there are issues with building events in your classes with Script#. It’s not impossible, but it’s not automatic like it is in Nikhil’s Script# (client-side) framework.&lt;/p&gt;  &lt;p&gt;Since I recently had to do this and had to search the Internet for a solution (which there is no answer for), I thought it would be good to document how to do it (for both my reference and for others).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How To Add/Remove Events&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;That comment about needing to create your own add/remove logic is really simple to handle, but your class needs to derive from Sys.Component (or a class like behavior and control which derive from Sys.Component). The code looks like this (In Script#):&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #008000"&gt;// add a handler to an event&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; add_MyEvent(EventHandler fn)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Events.AddHandler(&lt;span style="color: #006080"&gt;"MyEvent"&lt;/span&gt;, fn);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; &lt;span style="color: #008000"&gt;// remove a handler from an event&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; remove_MyEvent(EventHandler fn)&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Events.AddHandler(&lt;span style="color: #006080"&gt;"MyEvent"&lt;/span&gt;, fn);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The reason we need to derive from Sys.Component is that Sys.Component gives us the Events property. Events is the container for all our events. New ones will be dynamically generated within that container. Let’s see a simple property we can build to easily get the event back when we want to invoke it.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; EventHandler MyEvent&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     get&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;          &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; (EventHandler)&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Events.GetHandler(&lt;span style="color: #006080"&gt;"MyEvent"&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;All of this is well documented. The hard part is. Now I have the event how do I call it with Script#? You might start looking for invoke or apply syntax (which I did. But the answer is quite simple. The EventHandler is a function/method that you can call directly like this:&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; EventHandler evnt = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.MyEvent;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; evnt(sender, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; EventArgs());&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;BTW, you can do the same type of thing with delegates... they’re just simp0le functions.&lt;/p&gt;

&lt;p&gt;I hope that helps someone...&lt;/p&gt;

&lt;p&gt;[I really need to write a fuller post on building Behaviors with Script# (in case you don’t realize Behaviors are the foundation of ASP.NET Ajax Extender Controls).]&lt;/p&gt;&lt;img src="http://theruntime.com/blogs/jaykimble/aggbug/2412.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jay Kimble</dc:creator>
            <guid>http://theruntime.com/blogs/jaykimble/archive/2008/05/22/script-eventsdelegates-in-an-atlasms-ajax-style-script.aspx</guid>
            <pubDate>Thu, 22 May 2008 13:30:48 GMT</pubDate>
            <wfw:comment>http://theruntime.com/blogs/jaykimble/comments/2412.aspx</wfw:comment>
            <comments>http://theruntime.com/blogs/jaykimble/archive/2008/05/22/script-eventsdelegates-in-an-atlasms-ajax-style-script.aspx#feedback</comments>
            <wfw:commentRss>http://theruntime.com/blogs/jaykimble/comments/commentRss/2412.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>