<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>Levi Fleischman's Blog</title>
        <link>http://blogs.ignia.com/Levi.Fleischman/Default.aspx</link>
        <description>Practical discussion of everyday development techniques</description>
        <language>en-US</language>
        <copyright>Levi Fleischman</copyright>
        <generator>Subtext Version 2.1.1.1</generator>
        <image>
            <title>Levi Fleischman's Blog</title>
            <url>http://blogs.ignia.com/images/RSS2Image.gif</url>
            <link>http://blogs.ignia.com/Levi.Fleischman/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Customizing the Office 2013 Ribbon</title>
            <category>Excel</category>
            <link>http://blogs.ignia.com/Levi.Fleischman/archive/2012/07/21/advanced-ribbon-customization.aspx</link>
            <description>&lt;p&gt;While the ability to edit the Ribbon in Microsoft Office was a welcome addition to Outlook 2010, a limitation that has continued to annoy me is the inability to control the size of commands.  This can result in a junky looking ribbon since many of the older commands use non-scalable, vector based icons which look messy when displayed in larger dimensions.  Conversely, other commands provide a different (and, perhaps, more desirable) interface when displayed larger, such as the "Styles" command. &lt;/p&gt;
&lt;p&gt;While the "Customize the Ribbon..." user interface doesn't provide options for controlling these, the metadata file used for importing and exporting ribbon customization (via "exportedUI" files) does.  Unfortunately, the schema for this file format doesn't appear to be documented, &lt;em&gt;but &lt;/em&gt;MSDN's article &lt;a href="http://msdn.microsoft.com/en-us/library/ee704589.aspx#odc_office14_DeployCustomRibbon_ExampleofficeUICustomizationFile"&gt;Deploying a Customized Ribbon and Quick Access Toolbar in Office 2010&lt;/a&gt; does expose a couple of attributes you might not otherwise identify which can help with the above limitations.  This provides some extended control by editing the file in any text editor (such as notepad.exe).   &lt;/p&gt;
&lt;p&gt;The first of these is the &lt;font face="Courier"&gt;highDensityLayout&lt;/font&gt; attribute of the &lt;font face="Courier"&gt;group&lt;/font&gt; element; this forces command elements within that group to use the smaller layout.  The second is the &lt;font face="Courier"&gt;showInRibbon&lt;/font&gt; attribute of the &lt;font face="Courier"&gt;gallery&lt;/font&gt; element; this forces gallery commands to be displayed in full size, independent of whether the &lt;font face="Courier"&gt;highDensityLayout&lt;/font&gt; attribute is set.  (The latter attribute is actually exposed by a standard export, but appears to always set to "false", at least in Office 2013 Consumer Preview). &lt;/p&gt;
&lt;p&gt;There are likely other attributes available for the schema that provide even more granular control, such as the ability to specify the icon size for each individual command.  I wasn't able to find these, but admittedly didn't dig too deep.  If you happen to know where a schema reference is, please let me know.  My guess is that these correspond to VBA properties and thus &lt;em&gt;may &lt;/em&gt;be documented as part of the VBA object reference.  In the meanwhile, this addresses two of the irritations I've found when customizing the ribbon.&lt;/p&gt;
&lt;p&gt;Also note that this likely works in Microsoft Office 2010 as well, although I haven't tested that.  &lt;/p&gt;&lt;img src="http://blogs.ignia.com/Levi.Fleischman/aggbug/20.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Levi Fleischman</dc:creator>
            <guid>http://blogs.ignia.com/Levi.Fleischman/archive/2012/07/21/advanced-ribbon-customization.aspx</guid>
            <pubDate>Sun, 22 Jul 2012 03:24:12 GMT</pubDate>
            <comments>http://blogs.ignia.com/Levi.Fleischman/archive/2012/07/21/advanced-ribbon-customization.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ignia.com/Levi.Fleischman/comments/commentRss/20.aspx</wfw:commentRss>
        </item>
        <item>
            <title>User Administration in .NET 4.0</title>
            <category>ASP.NET</category>
            <link>http://blogs.ignia.com/Levi.Fleischman/archive/2010/05/26/iismembershipadministration.aspx</link>
            <description>&lt;p&gt;One of the handy features of IIS7 is the ability to manage users from within IIS Manager.  This can be done using the ".NET Users", ".NET Roles", ".NET Profile" applets exposed by the features view.  These are able to interact with any (strongly typed) ASP.NET Membership, Roles or Profile provider - assuming it's configured as the default provider in your web.config file.  While the interface isn't great, it's definitely functional, and these tools make it easy to jump-start a new membership application.  &lt;/p&gt;
&lt;p&gt;Unfortunately, however, these tools aren't available if your website's application pool is running under ASP.NET 4.0.  When you load IIS7, the icons related to these applets will be removed.  If you add a new application (or convert an existing application) to the ASP.NET 4.0 application pool then the icons will be available, but clicking on them will give you one of the following errors:&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;This feature cannot be used because the default provider type could not be determined to check whether it is a trusted provider.&lt;/p&gt;
&lt;p&gt;You can use this feature only when the default provider is a trusted provider.  If you are a server administrator, you can make a provider a trusted provider by added the provider type to the trusted providers list in the Administration.config file.  The provider has to be strongly typed and added to the GAC (Global Assembly Cache).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;Or:&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p dir="ltr"&gt;There was an error while performing this operation.&lt;/p&gt;
&lt;p dir="ltr"&gt;Details:&lt;/p&gt;
&lt;p dir="ltr"&gt;Could not load file or assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=&lt;font face=""&gt;b03f5f7f11d50a3a' or one of its dependencies.  The system cannot find the file specified.&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The first one appears if the providers' "type" attribute in the web.config does not contain a fully-qualified reference to the strongly-typed assembly (e.g., if it doesn't contain the PublicKeyToken) - which is the default provider scaffolding for Visual Studio 2010.  The latter will occur regardless of whether or not the version is set to 2.0.0.0 or 4.0.0.0.  &lt;/p&gt;
&lt;p&gt;According to &lt;a href="http://forums.iis.net/p/1166801/1940556.aspx"&gt;comments on the IIS.NET forums&lt;/a&gt;, this is due to the fact that this would require IIS to load .NET 4.0 libraries, which it apparently can't do since it's a .NET 2.0 application.  Why it's unable to load this even if you explicitly specify the 2.0.0.0 version is unclear to me, but likely has to do with how .NET handles library versions.&lt;/p&gt;
&lt;p&gt;Regardless of the cause, the solution to this is to either a) continue to use ASP.NET 2.0, or b) write a custom application interface using the provider interface - but who wants to do that?  &lt;/p&gt;
&lt;p&gt;There is one way of having the best of both worlds, however.  Since the providers typically reference an external data store (such as an XML file, web service or SQL server) it's possible to have multiple website applications accessing the same data store.  As a result, you can setup a &lt;em&gt;separate application &lt;/em&gt;in IIS which runs under the ASP.NET 2.0 application pool and can, thus, manage your users.  In fact, because IIS allows a virtual application to use a different application pool even if that application pool runs under a different version of ASP.NET, it's possible to simply setup this application as a virtual application underneath your existing website (it doesn't matter what path this points to).  The advantage to this is the virtual application will inherit the provider settings from the parent website and, thus, there is no need to decentralize the configuration of your providers.  This also eliminates the need to have a separate faux website listed in IIS; you'll still end up with a faux application, of course, but at least it's clearly associated with the parent website.  &lt;/p&gt;
&lt;p&gt;Once this is setup, you can click on the virtual application (I called mine "UserAdmin") in IIS and you'll have access to the ".NET Users", ".NET Roles" and ".NET Profile" applets again.  &lt;/p&gt;
&lt;p&gt;tags: &lt;a rel="tag" href="http://blogs.ignia.com/Levi.Fleischman/Tags/ASP.NET/Default.aspx"&gt;ASP.NET&lt;/a&gt;, &lt;a rel="tag" href="http://blogs.ignia.com/Levi.Fleischman/Tags/ASP.NET 4.0/Default.aspx"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a rel="tag" href="http://blogs.ignia.com/Levi.Fleischman/Tags/Membership Provider/Default.aspx"&gt;Membership Provider&lt;/a&gt;, &lt;a rel="tag" href="http://blogs.ignia.com/Levi.Fleischman/Tags/RoleProvider/Default.aspx"&gt;Role Provider&lt;/a&gt;, &lt;a rel="tag" href="http://blogs.ignia.com/Levi.Fleischman/Tags/Internet Information Server 7.0/Default.aspx"&gt;Internet Information Server 7.0&lt;/a&gt;, &lt;a rel="tag" href="http://blogs.ignia.com/Levi.Fleischman/Tags/IIS/Default.aspx"&gt;IIS7&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://blogs.ignia.com/Levi.Fleischman/aggbug/18.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Levi Fleischman</dc:creator>
            <guid>http://blogs.ignia.com/Levi.Fleischman/archive/2010/05/26/iismembershipadministration.aspx</guid>
            <pubDate>Thu, 27 May 2010 01:23:18 GMT</pubDate>
            <comments>http://blogs.ignia.com/Levi.Fleischman/archive/2010/05/26/iismembershipadministration.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ignia.com/Levi.Fleischman/comments/commentRss/18.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ExtJS with ADO.NET Data Services (Part 2 of 2): Sorting and Paging</title>
            <category>ASP.NET</category>
            <category>AJAX</category>
            <category>ORM/DAL</category>
            <category>ExtJS</category>
            <link>http://blogs.ignia.com/Levi.Fleischman/archive/2009/09/11/extjs.dataservices.paging.aspx.aspx</link>
            <description>ExtJs's conventions don't directly map to those used by ADO.NET Data Services, but that doesn't mean they can't work together.  One disconnect is the syntax for sorting and paging, as expected by Ext.grid.GridPanel and Ext.PagingToolbar. This post explores options to mitigating this disconnect.&lt;img src="http://blogs.ignia.com/Levi.Fleischman/aggbug/17.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Levi Fleischman</dc:creator>
            <guid>http://blogs.ignia.com/Levi.Fleischman/archive/2009/09/11/extjs.dataservices.paging.aspx.aspx</guid>
            <pubDate>Fri, 11 Sep 2009 19:41:30 GMT</pubDate>
            <comments>http://blogs.ignia.com/Levi.Fleischman/archive/2009/09/11/extjs.dataservices.paging.aspx.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ignia.com/Levi.Fleischman/comments/commentRss/17.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ExtJS with ADO.NET Data Services (Part 1 of 2): RESTful URLs</title>
            <category>ASP.NET</category>
            <category>AJAX</category>
            <category>ORM/DAL</category>
            <category>ExtJS</category>
            <link>http://blogs.ignia.com/Levi.Fleischman/archive/2009/09/10/extjs.dataservices.rest.aspx</link>
            <description>ADO.NET Data Services quickly exposes a database as a RESTful web service, including query support. This is useful for AJAX applications, such as those built with ExtJS. Unfortunately, however,while ExtJS 3.0 has built-in REST support, its conventions don’t map well to Data Services. The most obvious case is composite primary keys (e.g., "/Store.svc/Cart(UserID=1,ProductID)"). This post discusses a simple way of accomodating these.&lt;img src="http://blogs.ignia.com/Levi.Fleischman/aggbug/16.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Levi Fleischman</dc:creator>
            <guid>http://blogs.ignia.com/Levi.Fleischman/archive/2009/09/10/extjs.dataservices.rest.aspx</guid>
            <pubDate>Thu, 10 Sep 2009 19:47:21 GMT</pubDate>
            <comments>http://blogs.ignia.com/Levi.Fleischman/archive/2009/09/10/extjs.dataservices.rest.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ignia.com/Levi.Fleischman/comments/commentRss/16.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Dynamically Filtered Ranges in Excel</title>
            <category>Excel</category>
            <link>http://blogs.ignia.com/Levi.Fleischman/archive/2009/08/20/exceldynamicallyfilteredranges.aspx</link>
            <description>A common requirement in Excel is the ability to provide a dropdown list based on values the user has entered, a technique known as Cascading drop downs. For instance, a user selects "BMW" from manufacturer and the corresponding model cell provides a list of options including "M5", "Z4" and "X6".  This post examines one approach to solving this problem - although the technique can be applied to many related problems.&lt;img src="http://blogs.ignia.com/Levi.Fleischman/aggbug/15.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Levi Fleischman</dc:creator>
            <guid>http://blogs.ignia.com/Levi.Fleischman/archive/2009/08/20/exceldynamicallyfilteredranges.aspx</guid>
            <pubDate>Thu, 20 Aug 2009 22:41:45 GMT</pubDate>
            <comments>http://blogs.ignia.com/Levi.Fleischman/archive/2009/08/20/exceldynamicallyfilteredranges.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ignia.com/Levi.Fleischman/comments/commentRss/15.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Mapping ExtJS to custom REST APIs</title>
            <category>AJAX</category>
            <category>ExtJS</category>
            <link>http://blogs.ignia.com/Levi.Fleischman/archive/2009/07/26/extjsrest.aspx</link>
            <description>Out of the box, ExtJS expects to send and receive data in a very specific format.  Since our customer had an API intended to serve multiple different clients this wasn't practical. By writing custom LoadJson and SubmitJson actions, we were able to centralize this custom logic without the need to configure a redundant JsonReader, JsonWriter and Ajax.request() for each form.&lt;img src="http://blogs.ignia.com/Levi.Fleischman/aggbug/13.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Levi Fleischman</dc:creator>
            <guid>http://blogs.ignia.com/Levi.Fleischman/archive/2009/07/26/extjsrest.aspx</guid>
            <pubDate>Sun, 26 Jul 2009 21:17:06 GMT</pubDate>
            <comments>http://blogs.ignia.com/Levi.Fleischman/archive/2009/07/26/extjsrest.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ignia.com/Levi.Fleischman/comments/commentRss/13.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET AJAX WebMethods</title>
            <category>ASP.NET</category>
            <category>AJAX</category>
            <link>http://blogs.ignia.com/Levi.Fleischman/archive/2009/07/25/webmethod.aspx</link>
            <description>A particularly overlooked and, for its simplicity, useful feature of ASP.NET AJAX is the WebMethod, which is a server-side method that can be called by client script.  The .NET compiler automatically adds client-side methods that take care of the AJAX request, JSON encoding and, to a degree, data type conversion. Sure, you COULD do this using a web service and XmlHttpRequest - but this is a quick-and-easy way of AJAX-enabling standard web form pages.&lt;img src="http://blogs.ignia.com/Levi.Fleischman/aggbug/12.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Levi Fleischman</dc:creator>
            <guid>http://blogs.ignia.com/Levi.Fleischman/archive/2009/07/25/webmethod.aspx</guid>
            <pubDate>Sun, 26 Jul 2009 02:45:02 GMT</pubDate>
            <comments>http://blogs.ignia.com/Levi.Fleischman/archive/2009/07/25/webmethod.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ignia.com/Levi.Fleischman/comments/commentRss/12.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET AJAX 1.0</title>
            <category>ASP.NET</category>
            <category>AJAX</category>
            <category>ExtJS</category>
            <link>http://blogs.ignia.com/Levi.Fleischman/archive/2009/07/25/microsoftajax.aspx</link>
            <description>Microsoft has a long history of misnamed and mis-marketed developer tools. My favorite example is .NET, a relatively simple concept complicated by an initial decision to attach the label to Microsoft's upcoming generation of servers (e.g., "Windows .NET Server 2003"). The latest blunder is ASP.NET AJAX, a useful suite of technologies only partially related to "AJAX" development.  Unfortunately, as a result of this some of the more useful aspects of the technology have been overlooked.&lt;img src="http://blogs.ignia.com/Levi.Fleischman/aggbug/11.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Levi Fleischman</dc:creator>
            <guid>http://blogs.ignia.com/Levi.Fleischman/archive/2009/07/25/microsoftajax.aspx</guid>
            <pubDate>Sun, 26 Jul 2009 01:19:03 GMT</pubDate>
            <comments>http://blogs.ignia.com/Levi.Fleischman/archive/2009/07/25/microsoftajax.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ignia.com/Levi.Fleischman/comments/commentRss/11.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>