<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5757598327990864100</id><updated>2012-01-25T13:46:58.391-05:00</updated><category term='asyncimageuploadhandler'/><category term='Space Station'/><category term='ExceptionManager cannot be constructed'/><category term='Windows 8'/><category term='4.1'/><category term='Metro'/><category term='admin'/><category term='CSS'/><category term='Path'/><category term='Search Index'/><category term='TFS'/><category term='LayoutTemplatePath'/><category term='Progressive Enhancement'/><category term='Styling'/><category term='save'/><category term='Styles'/><category term='Build'/><category term='Responsive Design'/><category term='template'/><category term='YSOD'/><category term='Search'/><category term='Chrome Web Store'/><category term='upgrade'/><category term='App_Data'/><category term='Sitefinity 4.1'/><category term='ISS'/><category term='button'/><category term='PhoneGap'/><category term='ASP.Net 500.19 scriptResourceHandler config'/><category term='CodeMash'/><category term='Virtual Box'/><category term='Themes'/><category term='M3'/><category term='NewsItem Author error'/><category term='NewsItems'/><category term='Sitefinity 4.0'/><category term='upload'/><category term='Content Item'/><category term='Yellow Screen of Death'/><category term='image'/><category term='404'/><category term='Android'/><category term='LoginControl'/><category term='Silverlight'/><category term='problem'/><title type='text'>The Repository</title><subtitle type='html'>Technology, software development focused blog written by software developer Dan Shultz.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.danshultz.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>49</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-4838872040696496519</id><published>2011-11-22T05:05:00.000-05:00</published><updated>2011-11-22T09:25:07.235-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ISS'/><category scheme='http://www.blogger.com/atom/ns#' term='Progressive Enhancement'/><category scheme='http://www.blogger.com/atom/ns#' term='M3'/><category scheme='http://www.blogger.com/atom/ns#' term='PhoneGap'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='Space Station'/><category scheme='http://www.blogger.com/atom/ns#' term='Responsive Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome Web Store'/><title type='text'>Achieving Broad Reach with Responsive Design + PhoneGap</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;The committee for &lt;a href="http://www.m3conf.com/"&gt;The M3 Mobile Conference&lt;/a&gt; was kind enough to allow me to speak about creating cross-platform mobile applications using PhoneGap last week, so I thought I'd share some points from the talk here.&lt;br /&gt;&lt;br /&gt;When you need to create an application with a specific look and feel across multiple platforms and devices, PhoneGap can be the perfect tool.  But before you just wrap your application up and ship it, you'll want to use &lt;a href="http://www.webmonkey.com/2011/06/tips-tricks-and-best-practices-for-responsive-design/"&gt;Responsive Design&lt;/a&gt; techniques to ensure all users get an appropriate experience regardless of their device.  For instance, you don't want the 320 x 480 version of your app appearing scrunched to that size in the middle of an iPad, or even worse, in the upper left corner. Conversely, you don't want your beautiful iPad app scrolling horizontally and vertically on every smaller device.  So you'll want to use Responsive Design to tailor your HTML5 application to as many devices as possible, and then use PhoneGap to progressively enhance the experience when viewed natively on mobile devices as well.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.alistapart.com/articles/fluidgrids/"&gt;Flexible grids&lt;/a&gt; and &lt;a href="http://www.w3.org/TR/css3-mediaqueries/"&gt;media queries&lt;/a&gt; are important part of implementing &lt;a href="http://www.webmonkey.com/2011/06/tips-tricks-and-best-practices-for-responsive-design/"&gt;Responsive Design&lt;/a&gt; in your website/application.  Once the application is looking and functioning the way we want it on our desired device(s), we can use &lt;a href="http://www.phonegap.com/"&gt;PhoneGap&lt;/a&gt; to access additional functionality if we are being viewed on a mobile device, and &lt;a href="http://build.phonegap.com/"&gt;PhoneGap Build&lt;/a&gt; to automatically generate the native binaries for many smartphone devices using our single HTML5 codebase.&lt;br /&gt;&lt;br /&gt;We're going to target Android and iPhone devices, including tablets, as well as most current web browsers, and the Chrome Web Store for our HTML application.&lt;br /&gt;&lt;div style="margin: 15px 0px 10px 0px;"&gt;&lt;a href="http://dl.dropbox.com/u/3858223/SpaceStationPassPredictor/index.html"&gt;&lt;img border="0" height="309" src="http://1.bp.blogspot.com/-vOgKKVzzNpQ/TsqijpESyYI/AAAAAAAABTQ/jE9xFRDBRwU/s400/allOutletsBlog.png" width="400" /&gt;Our sample app (links to all versions below) is going to call &lt;/a&gt;&lt;a href="http://code.google.com/apis/maps/documentation/geocoding/"&gt;the Google Geocode API&lt;/a&gt; as well as the &lt;a href="http://uhaapi.com/"&gt;Heavens Above API&lt;/a&gt; to display viewing information for the next pass of the International Space Station based on the desired position.  For &lt;a href="http://www.alistapart.com/articles/understandingprogressiveenhancement"&gt;progressive enhancement&lt;/a&gt;, our app will allow mobile device users to merely use their device coordinates, and allow HTML5-enabled users to have access to their history of locations using HTML5 LocalStorage.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://build.phonegap.com/"&gt;PhoneGap Build &lt;/a&gt;then compiles the latest version of the application checked into the Git repository, but most intrepid web developers can access all the necessary source code using any web browser.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;The Sample Application:&lt;br /&gt;(All versions compiled using identical codebase)&lt;/h2&gt;&lt;div class="callout"&gt;&lt;div style="font-size: 1.2em; padding-bottom: 20px;"&gt;&lt;a href="https://market.android.com/details?id=com.SpaceStationFinder"&gt;Android Market version&lt;/a&gt;&lt;/div&gt;&lt;div style="font-size: 1.2em; padding-bottom: 20px;"&gt;&lt;a href="https://chrome.google.com/webstore/detail/dcalalddojoejbjlfjgenljkkmjfmije"&gt;Chrome Web Store version&lt;/a&gt;&lt;/div&gt;&lt;div style="font-size: 1.2em; padding-bottom: 20px;"&gt;&lt;a href="http://dl.dropbox.com/u/3858223/SpaceStationPassPredictor/index.html"&gt;iPhone/iPad/iPod version&lt;/a&gt;&lt;br /&gt;&lt;div&gt;(Add to home screen to install)&lt;/div&gt;&lt;/div&gt;&lt;div style="font-size: 1.2em; padding-bottom: 20px;"&gt;&lt;a href="https://build.phonegap.com/apps/43991/share"&gt;Android native .apk&lt;/a&gt;&lt;/div&gt;&lt;div style="font-size: 1.2em; padding-bottom: 20px;"&gt;&lt;a href="https://build.phonegap.com/apps/43991/share"&gt;Sybian version&lt;/a&gt;&lt;/div&gt;&lt;div style="font-size: 1.2em; padding-bottom: 20px;"&gt;&lt;a href="https://build.phonegap.com/apps/43991/share"&gt;WebOS version&lt;/a&gt;&lt;/div&gt;&lt;div style="font-size: 1.2em; padding-bottom: 20px;"&gt;&lt;a href="http://dl.dropbox.com/u/3858223/SpaceStationPassPredictor/index.html"&gt;Web version&lt;/a&gt;&lt;br /&gt;(all browsers and devices)&lt;/div&gt;&lt;/div&gt;Issues, feedback, suggestions most welcome - especially on the Sybian and WebOS versions.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-4838872040696496519?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/4838872040696496519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2011/11/achieving-broad-reach-with-responsive.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/4838872040696496519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/4838872040696496519'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2011/11/achieving-broad-reach-with-responsive.html' title='Achieving Broad Reach with Responsive Design + PhoneGap'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-vOgKKVzzNpQ/TsqijpESyYI/AAAAAAAABTQ/jE9xFRDBRwU/s72-c/allOutletsBlog.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-7359959335089368284</id><published>2011-09-21T17:25:00.000-04:00</published><updated>2011-11-22T09:27:11.934-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Metro'/><category scheme='http://www.blogger.com/atom/ns#' term='Build'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 8'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtual Box'/><title type='text'>Installing Windows 8 Developer Preview on VirtualBox (and resolving error 0x8007045D)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I was disappointed to find out that &lt;a 09="" 16="" 2011="" archive="" b8="" b="" blogs.msdn.com="" href="http://www.blogger.com/blogger.g?blogID=5757598327990864100" http:="" running-windows-8-developer-preview-in-a-virtual-environment.aspx"=""&gt;you can't run the developer preview of Windows 8 using Microsoft Virtual PC&lt;/a&gt;.  But after reading several success stories about installing Windows 8 on Oracle's VirtualBox VM I decided to give it a try &lt;a href="http://www.addictivetips.com/windows-tips/how-to-install-windows-8-on-virtualbox/"&gt;using this walk-through&lt;/a&gt;.  During my first attempts I was greeted with this cryptic error message each time:&lt;br /&gt;&lt;div class="callout"&gt;"Windows cannot install the required files. Make sure all of the files required for installation are available, and restart the installation. Error code: 0x8007045D".&lt;/div&gt;This error would appear during the second step in the Windows 8 installation process, right after "Expanding Windows Files..."  hit about 80%.After researching VirtualBox settings, I found that the &lt;a href="http://thaiwinadmin.blogspot.com/2011/09/error-0x8007045d-when-install-windows-8.html"&gt; first English comment on the bottom of this post&lt;/a&gt; resolved my issue. (So it's worked for at least two people now).&lt;br /&gt;&lt;br /&gt;Basically, the fix is to make sure to check "Use host I/O cache" under Admin...Storage...(highlight SATA Controller):&lt;br /&gt;&lt;div style="clear: both; margin: 20px; text-align: center;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-G5rr3ytF1jU/TnpQiMftxFI/AAAAAAAABB4/7PKGnE5hjR4/s1600/win8error.png" /&gt;&lt;/div&gt;Once I changed this setting Windows 8 installed just fine, and the "Expanding Windows Files..." step of the installation took about 1 minute, compared to 15-20 minutes during the failed installations.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-7359959335089368284?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/7359959335089368284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2011/09/installing-windows-8-developer-preview.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/7359959335089368284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/7359959335089368284'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2011/09/installing-windows-8-developer-preview.html' title='Installing Windows 8 Developer Preview on VirtualBox (and resolving error 0x8007045D)'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-G5rr3ytF1jU/TnpQiMftxFI/AAAAAAAABB4/7PKGnE5hjR4/s72-c/win8error.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-2885967798120876500</id><published>2011-08-16T05:00:00.059-04:00</published><updated>2011-08-17T08:55:04.346-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NewsItem Author error'/><category scheme='http://www.blogger.com/atom/ns#' term='Sitefinity 4.1'/><title type='text'>Sitefinity 4 News Items Not Displaying Author Name</title><content type='html'>We just got through a minor issue involving NewsItems in a Sitefinity 4.1 implementation. The problem is that even though the administrators were specifying an author when creating NewsItems, THEIR NAME was being displayed instead of the author no matter what.&lt;br /&gt;&lt;br /&gt;The solution is actually pretty straightforward - The layouttemplate for news items doesn't contain a field for author, even though it's entered on the back end. Instead it uses &lt;span style="color:#dddddd"&gt;&amp;lt;sf:personprofileview runat="server"&amp;gt;&lt;/span&gt; which displays the first name and last name of the user posting the NewsItem. You'll have to go into the LayoutTemplate for single NewsItems (Design..WidgetTemplates...FullNewsItem in Sitefinity admin) and replace the personprofileview tag with the author name:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Default layouttemplate code:&lt;/span&gt;&lt;span style="color:#ccc"&gt;&lt;br /&gt;&amp;lt;div class="sfnewsAuthorAndDate"&amp;gt;&lt;br /&gt;&amp;lt;asp:literal runat="server" text="&amp;lt;%$ Resources:Labels, By %&amp;gt;"&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;font-weight:bold;"&gt;&amp;lt;sf:personprofileview runat="server"&amp;gt;&lt;/span&gt;&lt;span style="color:#ccc"&gt;|&amp;lt;sf:fieldlistview format="{PublicationDate.ToLocal():MMM dd, yyyy}" id="PublicationDate" runat="server"&amp;gt;&lt;br /&gt;&amp;lt;/sf:fieldlistview&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Revised:&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ccc"&gt;&amp;lt;div class="sfnewsAuthorAndDate"&amp;gt;&lt;br /&gt;&amp;lt;asp:literal runat="server" text="&amp;lt;%$ Resources:Labels, By %&amp;gt;"&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;font-weight:bold;"&gt;&amp;lt;asp:Literal runat="server" Text='&amp;lt;%# Eval("Author")%&amp;gt;' /&amp;gt;&lt;/span&gt;&lt;span style="color:#ccc"&gt; | &amp;lt;sf:fieldlistview format="{PublicationDate.ToLocal():MMM dd, yyyy}" id="PublicationDate" runat="server"&amp;gt;&lt;br /&gt;&amp;lt;/sf:fieldlistview&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-2885967798120876500?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/2885967798120876500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2011/08/sitefinity-4-news-items-not-displaying.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/2885967798120876500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/2885967798120876500'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2011/08/sitefinity-4-news-items-not-displaying.html' title='Sitefinity 4 News Items Not Displaying Author Name'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-3355355287439329800</id><published>2011-08-10T05:00:00.009-04:00</published><updated>2011-08-15T14:05:12.207-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net 500.19 scriptResourceHandler config'/><title type='text'>ASP.Net Duplicate Section Defined Error - Is Only Defined Once</title><content type='html'>I had just set up a new local development environment for a solution already up and running in a staging environment. &lt;br /&gt;&lt;br /&gt;The first time I tried to run the app, I got this error message:&lt;br /&gt;&lt;div class="callout"&gt;Config Error There is a duplicate 'system.web.extensions/scripting/scriptResourceHandler' section&lt;br /&gt;&lt;/div&gt;Here are the exception details:&lt;br /&gt;&lt;div style="background-color:#ffffaa;font-style:italic;color:#000000;padding:15px;"&gt;&lt;span style="color:#ff0000;font-weight:bold;"&gt;HTTP Error 500.19 - Internal Server Error&lt;/span&gt;&lt;br /&gt;The requested page cannot be accessed because the related configuration data for the page is invalid.&lt;br /&gt;Detailed Error Information&lt;br /&gt;Module IIS Web Core&lt;br /&gt;Notification Unknown&lt;br /&gt;Handler Not yet determined&lt;br /&gt;Error Code 0x800700b7&lt;br /&gt;Config Error There is a duplicate 'system.web.extensions/scripting/scriptResourceHandler' section defined&lt;br /&gt;Config File \\?\C:\SVN\TestSite\web.config&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;...but if you look in the web.config, the scriptResourceHandler is only defined once. However, if you're using .Net Framework 4.0, this entry already exists in the machine.config - hence the error. So the solution is, either remove this and other duplicate entries from your web config, or if it's an option, change your site in IIS from using the Framework 4.0 application pool back to the Framework 2.0 application pool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-3355355287439329800?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/3355355287439329800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2011/08/aspnet-duplicate-section-defined-error.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/3355355287439329800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/3355355287439329800'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2011/08/aspnet-duplicate-section-defined-error.html' title='ASP.Net Duplicate Section Defined Error - Is Only Defined Once'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-8362035313335897244</id><published>2011-08-04T12:11:00.003-04:00</published><updated>2011-08-16T10:14:21.387-04:00</updated><title type='text'>Creating a Sitefinity 3.7 Custom ControlDesigner</title><content type='html'>Here’s a simplified summary of the process of creating a custom designer to edit properties for a Sitefinity control:&lt;br /&gt;&lt;div class="callout"&gt;For simple text fields, edit fields are automatically generated just by exposing properties of type string on the user control.&lt;br /&gt;&lt;/div&gt;...but for an elaborate field editing interface on a Sitefinity control here's a diagram and overview:&lt;br /&gt;&lt;div style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-xu1dWo4zKWo/TjrCznNPe1I/AAAAAAAAA-Y/JfVQm5mTa54/s1600/BlogCustomDesigner.png" imageanchor="1" style=""&gt;&lt;img border="0"  src="http://2.bp.blogspot.com/-xu1dWo4zKWo/TjrCznNPe1I/AAAAAAAAA-Y/JfVQm5mTa54/s1600/BlogCustomDesigner.png" /&gt;&lt;/a&gt;&lt;/div&gt;(apologies for the VB code :))&lt;br /&gt;In App_Code&lt;br /&gt;&lt;span style="color:#ffbbbb;"&gt;BaseControl&lt;/span&gt;.cs (contains the properties on our usercontrol we need to edit)&lt;br /&gt;Inherits UserControl&lt;br /&gt;&lt;span style="color:#ffffbb;"&gt;ControlDesigner&lt;/span&gt;.cs (control displays the editing UI and sets the properties on &lt;span style="color:#ffbbbb;"&gt;BaseControl&lt;/span&gt;)&lt;br /&gt;Inherits Telerik…ControlDesigner&lt;br /&gt;&lt;br /&gt;The control itself must inherit from &lt;span style="color:#ffbbbb;"&gt;BaseControl&lt;/span&gt;.cs - this later allows it to be cast to type DesignedControl from the &lt;span style="color:#ffffbb;"&gt;ControlDesigner&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;It must also have a control designer specified as a class attribute. ex:&lt;br /&gt;[Telerik.Framework.Web.Design.ControlDesigner("&lt;span style="color:#ffffbb;"&gt;ControlDesigner&lt;/span&gt;")]&lt;br /&gt;&lt;br /&gt;To layout the UI for the Control designer, you need to create a separate &lt;span style="color:#ffbbff;"&gt;LayoutTemplate&lt;/span&gt; user control, and specify it’s path as the &lt;span style="color:#ffffbb;"&gt;ControlDesigner&lt;/span&gt;’s LayoutTemplatePath property.&lt;br /&gt;&lt;br /&gt;The &lt;span style="color:#ffffbb;"&gt;ControlDesigner&lt;/span&gt; references the &lt;span style="color:#ffbbff;"&gt;LayoutTemplate&lt;/span&gt;’s properties like: &lt;br /&gt;base.Container.GetControl&lt;literal&gt;("litDataString", true)&lt;br /&gt;&lt;br /&gt;and sets the property on the usercontrol like:&lt;br /&gt;((DesignedControl)&lt;span style="color:#ffbbbb;"&gt;BaseControl&lt;/span&gt;).Data = “xyz” &lt;br /&gt;&lt;div class="callout"&gt;For simpler, unstyled layouts, you can get away without a &lt;span style="color:#ffbbff;"&gt;LayoutTemplate&lt;/span&gt; and just specifying the controls’ positions via css in the &lt;span style="color:#ffffbb;"&gt;ControlDesigner&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;Here’s a more in-depth &lt;a href="http://www.sitefinitywatch.com/blog/09-02-17/Accessing_Underlying_Properties_with_Control_Designers.aspx"&gt;Sitefinity walk-through and sample code.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-8362035313335897244?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/8362035313335897244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2011/08/creating-sitefinity-37-custom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8362035313335897244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8362035313335897244'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2011/08/creating-sitefinity-37-custom.html' title='Creating a Sitefinity 3.7 Custom ControlDesigner'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-xu1dWo4zKWo/TjrCznNPe1I/AAAAAAAAA-Y/JfVQm5mTa54/s72-c/BlogCustomDesigner.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-1606017447571656746</id><published>2011-06-28T23:28:00.003-04:00</published><updated>2011-06-28T23:35:59.222-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='image'/><category scheme='http://www.blogger.com/atom/ns#' term='admin'/><category scheme='http://www.blogger.com/atom/ns#' term='asyncimageuploadhandler'/><category scheme='http://www.blogger.com/atom/ns#' term='upgrade'/><category scheme='http://www.blogger.com/atom/ns#' term='Sitefinity 4.1'/><category scheme='http://www.blogger.com/atom/ns#' term='404'/><category scheme='http://www.blogger.com/atom/ns#' term='upload'/><title type='text'>Sitefinity 4.1 problem uploading images with admin tools</title><content type='html'>We suddenly encountered an issue when uploading images using the Sitefinity 4.1 back-end admin tools. Now suddenly, when the content creators attempted to upload an image, they were suddenly getting a 404 error with the message:&lt;br /&gt;&lt;span style="color:#ffaaaa"&gt;&lt;br /&gt;Please review the following URL and make sure that it is spelled correctly.&lt;br /&gt;Requested URL:&lt;br /&gt;/Telerik.Sitefinity.AsyncImageUploadHandler.ashx&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;...Of course this functionality worked just fine in the development environment. The entire site was republished to staging, but they still were experiencing this issue of not being able to locate AsyncImageUploadHandler.ashx.&lt;br /&gt;&lt;br /&gt;After examining everything, it ends up that there were several new httphandlers added in the system.webServer section in the local web.config that needed to be added to the staging site's config, specifically in this case the missing offender was:&lt;br /&gt;&lt;span style="color:#ffaaaa"&gt;&lt;br /&gt;&amp;lt;add name="Telerik.Sitefinity.AsyncImageUploadHandler" path="Telerik.Sitefinity.AsyncImageUploadHandler.ashx" verb="*" type="Telerik.Sitefinity.Modules.Libraries.Web.AsyncImageUploadHandler, Telerik.Sitefinity" /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;I assume these settings were added when we upgraded to 4.1, SP1. According to the &lt;a href="http://www.sitefinity.com/documentation/installation-and-administration-guide/upgrading-sitefinity-projects.aspx"&gt;upgrade instructions&lt;/a&gt;, upgrading locally and then publishing everything except the Sitefinity configuration files to staging will automagically update the remote site to SP1. But you also need to make sure to merge the updates to your web.config as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-1606017447571656746?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/1606017447571656746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2011/06/sitefinity-4-problem-uploading-images.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/1606017447571656746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/1606017447571656746'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2011/06/sitefinity-4-problem-uploading-images.html' title='Sitefinity 4.1 problem uploading images with admin tools'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-74736981145915611</id><published>2011-06-21T16:10:00.002-04:00</published><updated>2011-08-16T15:42:35.920-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='template'/><category scheme='http://www.blogger.com/atom/ns#' term='Sitefinity 4.1'/><category scheme='http://www.blogger.com/atom/ns#' term='Styles'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Path'/><category scheme='http://www.blogger.com/atom/ns#' term='App_Data'/><category scheme='http://www.blogger.com/atom/ns#' term='Themes'/><title type='text'>Referencing Sitefinity 4.1 Themes, CSS From External Pages</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Global styling in Sitefinity 4+ is handled by &lt;a href="http://www.sitefinity.com/documentation/designers-guide/creating-a-theme/registering-a-theme.aspx"&gt;creating and registering a theme&lt;/a&gt;, and then applying it using the admin tool to your Sitefinity page templates:&lt;br /&gt;&lt;br /&gt;&lt;div style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-HnA5PDhi-WY/TgDxi13qA2I/AAAAAAAAAro/jtoYvYg-h6U/s1600/SetTheme.png" imageanchor="1"&gt;&lt;img border="0" height="217" src="http://4.bp.blogspot.com/-HnA5PDhi-WY/TgDxi13qA2I/AAAAAAAAAro/jtoYvYg-h6U/s400/SetTheme.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Pretty easy, but what about if you need to reference that style sheet from an external web page that wasn't created within Sitefinity? Or to reference it right from the markup of your page templates/master pages? Looking at the solution the path will be something like:&lt;br /&gt;&lt;span style="color:#ccffcc;"&gt;&lt;br /&gt;/App_Data/Sitefinity/WebsiteTemplates/HomePage/App_Themes/Teal/Global/main.css&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;But we know the ASP.Net App_Data folder has special permissions that will not allow us to directly reference files within it... if we try to use this path to reference the stylesheet, we'll get a 403 error.&lt;br /&gt;&lt;br /&gt;Fortunately, after you register a theme, Sitefinity will automatically re-route directly from the /Sitefinity folder at the root of the application into the /Sitefinity folder that exists at /App_Data/Sitefinity... kind of a client-side backdoor into your themes and templates.&lt;br /&gt;&lt;br /&gt;So the easy answer to referencing your Sitefinity themes client-side, is just remove the "/App_Data" from the path. You can see this pathing structure if you look at the source code of your Sitefinity pages as well - example:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ccffcc;"&gt;&amp;lt;link href="&lt;/span&gt;&lt;span style="color:#ffff33;"&gt;/Sitefinity/WebsiteTemplates/HomePage/App_Themes/Teal/global/main.css&lt;/span&gt;&lt;span style="color:#ccffcc;"&gt;" type="text/css" rel="stylesheet" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-74736981145915611?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/74736981145915611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2011/06/referencing-sitefinity-41-themes-css.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/74736981145915611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/74736981145915611'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2011/06/referencing-sitefinity-41-themes-css.html' title='Referencing Sitefinity 4.1 Themes, CSS From External Pages'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-HnA5PDhi-WY/TgDxi13qA2I/AAAAAAAAAro/jtoYvYg-h6U/s72-c/SetTheme.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-294703626460721808</id><published>2011-06-02T13:45:00.012-04:00</published><updated>2011-06-15T11:39:44.493-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ExceptionManager cannot be constructed'/><category scheme='http://www.blogger.com/atom/ns#' term='Yellow Screen of Death'/><category scheme='http://www.blogger.com/atom/ns#' term='YSOD'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><category scheme='http://www.blogger.com/atom/ns#' term='App_Data'/><category scheme='http://www.blogger.com/atom/ns#' term='Sitefinity 4.0'/><title type='text'>Sitefinity 4 "ExceptionManager Cannot be Constructed" error</title><content type='html'>If you're using Sitefinity 4.x and suddenly begin seeing this curious ASP.Net error:&lt;br /&gt;&lt;span style="color:#ffaaaa;"&gt;&lt;br /&gt;"The type ExceptionManager cannot be constructed. You must configure the container to supply this value."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;...this error results when the App_Data folder, and files within, are marked Read Only - if you're using TFS for source control, make sure your App_Data folder has been Checked Out. Your app should then launch normally.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-294703626460721808?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/294703626460721808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2011/06/sitefinity-4-exceptionmanager-cannot-be.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/294703626460721808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/294703626460721808'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2011/06/sitefinity-4-exceptionmanager-cannot-be.html' title='Sitefinity 4 &quot;ExceptionManager Cannot be Constructed&quot; error'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-7923122277334169840</id><published>2011-05-30T11:49:00.008-04:00</published><updated>2011-06-15T11:40:43.572-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Search'/><category scheme='http://www.blogger.com/atom/ns#' term='NewsItems'/><category scheme='http://www.blogger.com/atom/ns#' term='4.1'/><category scheme='http://www.blogger.com/atom/ns#' term='problem'/><category scheme='http://www.blogger.com/atom/ns#' term='Content Item'/><category scheme='http://www.blogger.com/atom/ns#' term='Search Index'/><category scheme='http://www.blogger.com/atom/ns#' term='Sitefinity 4.0'/><title type='text'>Resolving Sitefinity 4 Search Not Including Content Pages</title><content type='html'>I recently encountered an issue where, after creating a Sitefinity SearchIndex for NewsItems, Static HTML and all Content, only the NewsItems were being returned - no Content Pages or Static HTML pages appeared in the results. The response I got was to upgrade to Sitefinity 4.1, SP 1, which wasn't the complete answer, but at least the newer admin UI helped to troubleshoot the problem:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;(SearchIndex creation screen)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-7lL6bHPZFcw/TeVI6Vi5qMI/AAAAAAAAApo/BsgTd7eb6g0/s1600/NewsIndexAdminScreenShot.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width:386px; height:618px;" src="http://2.bp.blogspot.com/-7lL6bHPZFcw/TeVI6Vi5qMI/AAAAAAAAApo/BsgTd7eb6g0/s1600/NewsIndexAdminScreenShot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5612972677640333506" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After going through the upgrade process, helpful error messages began to appear when I re-indexed my SearchIndex, indicating errors were being thrown when certain pages were being crawled.&lt;br /&gt;&lt;br /&gt;So the problem really was that one particular call, in this case:&lt;br /&gt;&lt;span style="background-color:#000000;color:#ffff00;line-height:1.7em;"&gt;SiteMapBase.GetCurrentNode();&lt;/span&gt;&lt;br /&gt;was throwing a null reference exception, only during the Sitefinity crawling process, and quietly killing the addition of the Content Pages to the SearchIndex. After resolving the issue, the full site indexed correctly, and searching returned results as expected. There's no feedback when the SearchIndex is successfully reindexed, however, but you'll see the page subtly refresh. (Maybe a good feature for 4.2)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;(SearchIndex admin screen)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-JPyBfQiaY10/TeVJAsyw6II/AAAAAAAAApw/Icr9oCY6jFE/s1600/SearchIndexAdmin.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 360px; height: 156px;" src="http://2.bp.blogspot.com/-JPyBfQiaY10/TeVJAsyw6II/AAAAAAAAApw/Icr9oCY6jFE/s400/SearchIndexAdmin.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5612972786960099458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After going through this process, I found that you could also troubleshoot indexing issues by launching your app in debug mode, going to the admin tool and re-indexing your problem SearchIndex... The Visual Studio debugger will then point out any problem code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-7923122277334169840?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/7923122277334169840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2011/05/resolving-sitefinity-4-search-not.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/7923122277334169840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/7923122277334169840'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2011/05/resolving-sitefinity-4-search-not.html' title='Resolving Sitefinity 4 Search Not Including Content Pages'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-7lL6bHPZFcw/TeVI6Vi5qMI/AAAAAAAAApo/BsgTd7eb6g0/s72-c/NewsIndexAdminScreenShot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-5790939797302918376</id><published>2011-05-28T11:37:00.011-04:00</published><updated>2011-06-16T09:53:08.125-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LayoutTemplatePath'/><category scheme='http://www.blogger.com/atom/ns#' term='Styling'/><category scheme='http://www.blogger.com/atom/ns#' term='Sitefinity 4.1'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='LoginControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Themes'/><title type='text'>Styling / Formatting Sitefinity 4 controls</title><content type='html'>One of the big differences between Sitefinity 3.x and 4 is in the way the style and layout of the controls is handled. In the older versions, you had direct access to the .ascx code in either the ControlTemplates folder or the UserControls folder. In 4.x, all Sitefinity widgets have been compiled into .dlls, with each widget exposing a LayoutTemplatePath property, which allows you to specify a path to your own .ascx file if you need to change the layout beyond what is possible via the other widget properties. It's a cleaner way to do it - in the past, upgrades could overwrite revised template code - now your revised layouts are preserved when upgrading. &lt;br /&gt;&lt;br /&gt;You can get to the default LayoutTemplates at Design &gt; WidgetTemplates in the Sitefinity admin area. But here's one problem - many controls, like in my case the Login control, don't have any sample layout code exposed. The first thing I tried was to use the LoginControl ascx from Sitefinity 3.7. The first error message you'll get is: &lt;br /&gt;&lt;span style="color:#ffaaaa"&gt;&lt;br /&gt;C001: LayoutTemplate does not contain an IEditableTextControl with ID UserName for the username.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can rename your controls to get through these errors, but you'll eventually hit a brick wall, as you really need the layout code. Fortunately, Grigori at Sitefinity was good enough to send me the actual LayoutTemplate code, which is not exposed anywhere within Sitefinity. Here is the actual &lt;a href="http://dl.dropbox.com/u/3858223/LoginControl.ascx"&gt;Sitefinity 4 LoginControl LayoutTemplate Code&lt;/a&gt;. Grigori tells me this will be included in the next release.&lt;br /&gt;&lt;br /&gt;Adding this code to your project, and pointing your LoginControl's LayoutTemplatePath to this ascx will allow you to format your login control any way you want:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;Default LayoutTemplate appearance:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-BTze9UN6I_I/TeEqepuSChI/AAAAAAAAApY/yAJq3NhAbPQ/s1600/SitefinityLoginUnformatted.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 229px; height: 220px;" src="http://4.bp.blogspot.com/-BTze9UN6I_I/TeEqepuSChI/AAAAAAAAApY/yAJq3NhAbPQ/s400/SitefinityLoginUnformatted.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5611813316764764690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Login control using custom theme, css:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-Zavw2xBLEeY/TeEqurVZoSI/AAAAAAAAApg/iPZcrWUOBto/s1600/SitefinityLoginFormatted.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 203px;" src="http://3.bp.blogspot.com/-Zavw2xBLEeY/TeEqurVZoSI/AAAAAAAAApg/iPZcrWUOBto/s400/SitefinityLoginFormatted.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5611813592075182370" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-5790939797302918376?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/5790939797302918376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2011/05/styling-formatting-sitefinity-4.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/5790939797302918376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/5790939797302918376'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2011/05/styling-formatting-sitefinity-4.html' title='Styling / Formatting Sitefinity 4 controls'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-BTze9UN6I_I/TeEqepuSChI/AAAAAAAAApY/yAJq3NhAbPQ/s72-c/SitefinityLoginUnformatted.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-1595213427637354343</id><published>2010-10-26T11:23:00.007-04:00</published><updated>2010-10-26T12:41:05.287-04:00</updated><title type='text'>SSIS Error Code DTS_E_PRIMEOUTPUTFAILED</title><content type='html'>Recently, while working on a db integration using SSIS, I had encountered a generic error while working with an XML Datasource: Error Code DTS_E_PRIMEOUTPUTFAILED. There are several scenarios that can produce this error, and there also was another message specifying that the offending element was at character 14988 in the XML. The data at that point in the file looked fairly straightforward, which then led me down the path to thinking the file size might be the problem:&lt;br /&gt;&lt;br /&gt;&amp;lt;word&amp;gt;with&amp;lt;/word&amp;gt;&lt;br /&gt;&amp;lt;word&amp;gt;a&amp;lt;/word&amp;gt;&lt;br /&gt;&amp;lt;word&amp;gt;vegetable&amp;lt;/word&amp;gt; &lt;span style="color: rgb(255, 0, 0);"&gt;&amp;lt;- supposedly offending line&lt;/span&gt;&lt;br /&gt;&amp;lt;word&amp;gt;white&amp;lt;/word&amp;gt;&lt;br /&gt;&amp;lt;word&amp;gt;rice&amp;lt;/word&amp;gt;&lt;br /&gt;&lt;br /&gt;After whittling down the data for a test, the problem still existed, so the problem wasn't file size either.  It ended up just up being bad data... there were several ampersand (&amp;amp;) characters throughout the file.&lt;br /&gt;The error message referencing character 14988 was just a confusing diversion. After scrubbing the data, SSIS was then able to successfully parse the file and use it as a datasource.&lt;br /&gt;&lt;br /&gt;Here's a quick reference to characters needing to be escaped within XML, and their associated escape sequences:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Ampersand(&amp;amp;) - &lt;span style="color: rgb(255, 0, 0);"&gt;&amp;amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Greater Than symbol (&gt;) - &lt;span style="color: rgb(255, 0, 0);"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt; Less Than symbol (&gt;) - &lt;span style="color: rgb(255, 0, 0);"&gt;&amp;amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;  Double Quote (") - &lt;span style="color: rgb(255, 0, 0);"&gt;&amp;amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;   Single Quote (') - &lt;span style="color: rgb(255, 0, 0);"&gt;&amp;amp;apos;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-1595213427637354343?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/1595213427637354343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2010/10/recently-while-working-on-db.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/1595213427637354343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/1595213427637354343'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2010/10/recently-while-working-on-db.html' title='SSIS Error Code DTS_E_PRIMEOUTPUTFAILED'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-7327041630052585849</id><published>2009-12-16T22:11:00.011-05:00</published><updated>2011-01-19T21:16:42.378-05:00</updated><title type='text'>Facebook ActionScript API - Overall Architecture</title><content type='html'>The last few posts talked about setting up your Facebook app and Flex e nvironment, now let's look at how all the pieces fit together. There are several ways to call the Facebook API via Flex, but we're going to focus on creating an IFrame application. There are other ways to interact with Facebook, like as an FBML application, or even as a desktop AIR application Documentation of each type of interaction is available &lt;a href="http://www.adobe.com/devnet/facebook/"&gt;here&lt;/a&gt;. Here is the official diagram from Adobe on the architecture of a Flex IFrame app&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor:pointer; cursor:hand;width:" src="http://www.muralsohio.com/danshultz22/03_swf_iframefull.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I personally didn't Grok how it all fit together when I saw this diagram, so after I finished my first app, I whiteboarded this diagram.&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor:pointer; cursor:hand;width:" src="http://dl.dropbox.com/u/3858223/FacebookArchitectureSmall.png" border="0"  /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1 - Your app. The url is http://apps.facebook.com/[your application name] .  When this page appears in a web browser, the page contains an IFrame that references a URL on your web server.&lt;br /&gt;2 - Your Facebook application settings point to &lt;span style="font-style:italic;"&gt;your &lt;/span&gt; website. Facebook posts all required variables over the querystring into your containing HTML page, as well as reposting any other querystring vars, including any variable you may want to pass in.&lt;br /&gt;3 - The index.htm file supplied from Adobe creates an array of all querystring variables passed into the page, and using the standard swfobject.js file, injects all variables into your .swf. I have usually had to tweak the code of this page to include/refine my personal application variables.&lt;br /&gt;4 - Now your .swf is displayed within the IFrame on your Facebook application page, having evaluated all Facebook variables, as well as your own custom application variables.&lt;br /&gt;&lt;br /&gt;Next post, we'll talk about some even easier ways to integrate a Flex/Flash app with Facebook, and talk about some best practices.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-7327041630052585849?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/7327041630052585849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2009/12/facebook-actionscript-api-overall.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/7327041630052585849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/7327041630052585849'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2009/12/facebook-actionscript-api-overall.html' title='Facebook ActionScript API - Overall Architecture'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-471920668969481809</id><published>2009-10-07T17:30:00.003-04:00</published><updated>2009-10-07T17:41:16.422-04:00</updated><title type='text'>Facebook ActionScript API - Creating a Canvas/Project</title><content type='html'>&lt;a href="http://danshultz.blogspot.com/2009/09/facebook-actionscript-api-introgotchas.html"&gt;In my last post,&lt;/a&gt; I talked about some prerequisites and things you might want to think about before integrating a Flash app using the ActionScript API. Now let's take a look at how to configure a Facebook canvas and get your local project set up.&lt;br /&gt;&lt;br /&gt;The first thing you need to do to get started is to add the Facebook developer application by going to &lt;a href="http://www.facebook.com/developers"&gt;www.facebook.com/developers&lt;/a&gt;. This is just a Facebook application that allows you to register your application.&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/_nhdkQsCpsCI/SszQqwAQ0bI/AAAAAAAAAco/XBpO8yLIwKU/FacebookDemo001AddDeveloperApp.png" /&gt;&lt;br /&gt;&lt;br /&gt;Once you've allowed access to the Facebook developer application, it's time to create your application and canvas. Give it a name and agree to the terms.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5389909286616351426" alt="" src="http://3.bp.blogspot.com/_nhdkQsCpsCI/SszN8HBYwsI/AAAAAAAAAcI/LiBaeyavZ5A/FacebookDemo002NameApp.png" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Once you've created your application, go in to Edit Application and you'll see that Facebook created an API Key and Secret for you. We'll talk about those later, but remember that you never want to give out your Application Key and Secret for security reasons. When the app is deployed we will be using a session-specific key created for us by Facebook when making our API calls, but during testing, we can use these codes to perform the calls locally.&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/_nhdkQsCpsCI/Ss0D24y7dnI/AAAAAAAAAdQ/EjK0KmX7R0Q/FacebookDemo003ShowKeys.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5389968570526168690" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now we need to set up our Facebook Canvas. First in the box for the Canvas Page URL, give it the name you want your application to have on Facebook (apps.facebook.com/[yourappname]) in all lowercase. Then set the Callback URL... this is the path to YOUR server where the swf will be located. (It should be contained within an HTML wrapper page that we'll get from Adobe). We will be creating an IFrame application - in other words the page on our site will be "sucked into" an IFrame on our Facebook canvas page.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5389909298444036306" alt="" src="http://2.bp.blogspot.com/_nhdkQsCpsCI/SszN8zFU6NI/AAAAAAAAAcY/i6ekArXVmXM/s400/FacebookDemo004ShowCanvas.png" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;When we release, our application type will be Web, but for coding/testing/debugging purposes, make the application type Desktop, so we can just pop up a window to allow access, and test our Facebook API calls locally.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5389909304479809138" alt="" src="http://2.bp.blogspot.com/_nhdkQsCpsCI/SszN9JkXfnI/AAAAAAAAAcg/pku-hMrpEG8/FacebookDemo005DeskTopOrWeb.png" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Now we need to download a few files from Adobe to set up our application in Flex (0r Flash).&lt;br /&gt;First, get the Facebook-ActionScript-API from Google Code (&lt;a href="http://code.google.com/p/facebook-actionscript-api/downloads/list"&gt;http://code.google.com/p/facebook-actionscript-api/downloads/list&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5389961561097478754" alt="" src="http://3.bp.blogspot.com/_nhdkQsCpsCI/Ssz9e4o5omI/AAAAAAAAAcw/O-uaVDMMN54/FacebookDemo007GetASLib.png" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Then get the iframe wrapper from &lt;a href="http://download.macromedia.com/pub/developer/flexfb_iframe_wrapper.zip"&gt;http://download.macromedia.com/pub/developer/flexfb_iframe_wrapper.zip&lt;/a&gt; . After you unzip the file, you'll see it contains an html wrapper page for your swf, plus swfobject.js. We'll look later at what this html wrapper page does.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5389961563881007890" alt="" src="http://1.bp.blogspot.com/_nhdkQsCpsCI/Ssz9fDAi6xI/AAAAAAAAAc4/T7H1-sd5RgM/FacebookDemo009WrapperAndJSView.png" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Now we need to go ahead and create our project in Flex Builder, make sure it's a web application.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5389964340205274914" alt="" src="http://3.bp.blogspot.com/_nhdkQsCpsCI/Ss0AApn1RyI/AAAAAAAAAdI/hgz8Rzzr-7g/FacebookDemo006NewFlexProject.png" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;In the libs folder, go ahead and add the Facebook library you downloaded from Google Code.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5389961570264496498" alt="" src="http://3.bp.blogspot.com/_nhdkQsCpsCI/Ssz9fayfOXI/AAAAAAAAAdA/MbeKpWmOIoU/FacebookDemo008AddToLibs.png" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;...Now you're all set to start development on your Facebook Flash application. That's a lot for one blog post, so next time we'll take a look at really Grok-ing how and where everything goes, as well as looking at other Flash-Facebook architectures as well. (A much more in-depth walk through is available &lt;a href="http://www.adobe.com/devnet/facebook/articles/build_your_first_facebook_app.html"&gt;on the Adobe devnet site&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-471920668969481809?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/471920668969481809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2009/10/facebook-actionscript-api-creating.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/471920668969481809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/471920668969481809'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2009/10/facebook-actionscript-api-creating.html' title='Facebook ActionScript API - Creating a Canvas/Project'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_nhdkQsCpsCI/SszQqwAQ0bI/AAAAAAAAAco/XBpO8yLIwKU/s72-c/FacebookDemo001AddDeveloperApp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-2663616243624256365</id><published>2009-09-29T21:00:00.001-04:00</published><updated>2009-09-30T15:36:31.740-04:00</updated><title type='text'>Facebook ActionScript API -  intro/gotchas</title><content type='html'>After delving into the Facebook-ActionScript API for the last few months, and finally getting an app listed in the application directory, I was kindly asked to give an &lt;a href="http://groups.adobe.com/posts/06f37f4a85"&gt;overview/presentation of my thoughts on Facebook/Flash integration&lt;/a&gt; at the Adobe User Group on 9/29.&lt;br /&gt;&lt;br /&gt;It was a one-hour overview, so there's way too much for a single blog post. So for this first posting in the series, here are a few gotchas/considerations to make before integrating a Flex/Flash application with Facebook:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1) You can't send invites or requests.&lt;/span&gt;&lt;br /&gt;The ActionScript API for Facebook just doesn't contain calls to these methods. The closest thing you can do is send a notification using the sendNotification() api call that takes in an array of Facebook userids, and your text message or hyperlink. If you're not sure what a Facebook notification is, it's that little sign icon down at the bottom right of all Facebook pages, to the right of the Facebook chat window.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nhdkQsCpsCI/SsOlEZ6o3zI/AAAAAAAAAbY/SwYTZcd6DgM/s1600-h/notif.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 243px; height: 175px;" src="http://3.bp.blogspot.com/_nhdkQsCpsCI/SsOlEZ6o3zI/AAAAAAAAAbY/SwYTZcd6DgM/s400/notif.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5387331074360139570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;2)Autoplay is always set to false when embedding a .swf using FBML.&lt;/span&gt;&lt;br /&gt;This is by design. I'm sure the reason for it is for Facebook to distinguish itself from MySpace with all the auto-launch junk on many pages. You are allowed to specify a placeholder image, so that needs to be part of your design decisions. Hopefully this isn't a show-stopper.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;3)Security issues when accessing external XML files.&lt;br /&gt;&lt;/span&gt;If your swf references an external XML file, within Facebook you will get a security violation. The suggested workaround is to reference it using a parent PHP container. Or you could embed the xml in your .swf, but I imagine it's external for application update-ability purposes, and that would defeat the purpose.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4)Inability to make the Sessionless API calls&lt;/span&gt;&lt;br /&gt;&lt;a href="http://wiki.developers.facebook.com/index.php/Category:Sessionless_API"&gt;There are a variety of Facebook calls that can be made without having a session key&lt;/a&gt; however, when making these calls via the ActionScript API, you will receive an 'invalid signature' error message if you do not have a valid session because the api calls via session.facebook require a valid session key (ie: the user must allow access to your application before you can make any calls). I am still investigating this... any other insights are most welcome. It would be nice to be able to forestall the "ALLOW ACCESS" prompt to you user as long as possible.&lt;br /&gt;&lt;br /&gt;Well, now that all this negativity is out of the way, in the next post we'll walk through how to set up a new Facebook application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-2663616243624256365?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/2663616243624256365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2009/09/facebook-actionscript-api-introgotchas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/2663616243624256365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/2663616243624256365'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2009/09/facebook-actionscript-api-introgotchas.html' title='Facebook ActionScript API -  intro/gotchas'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_nhdkQsCpsCI/SsOlEZ6o3zI/AAAAAAAAAbY/SwYTZcd6DgM/s72-c/notif.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-8912828151505036927</id><published>2009-07-11T20:44:00.002-04:00</published><updated>2009-07-11T20:52:47.650-04:00</updated><title type='text'>Solution to that triangular golf tee peg game.</title><content type='html'>Last month we stopped at a Cracker Barrel on the way back from Northern Ohio, and they had one of those triangular games where you jump the golf tee pegs until you hopefully only have one left. They've been around forever - on the east coast, the Dutch Pantry restaurants had the same thing. Anyway, I don't know if I ever had solved one of these puzzles, except for pure luck, but my oldest son Johnny ended up finding a repeatable solution before breakfast even arrived. So here he is showing off his solution pattern in a youtube video.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/OAKl6u30yZQ&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/OAKl6u30yZQ&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-8912828151505036927?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/8912828151505036927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2009/07/solution-to-that-triangular-golf-tee.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8912828151505036927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8912828151505036927'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2009/07/solution-to-that-triangular-golf-tee.html' title='Solution to that triangular golf tee peg game.'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-6723188954893151804</id><published>2009-05-29T16:13:00.003-04:00</published><updated>2009-05-29T16:30:55.514-04:00</updated><title type='text'>Cookies across subdomains</title><content type='html'>I recently was on a project where we built an online contest/auction site for a company which ran from June through September. &lt;br /&gt;&lt;br /&gt;The first thing the user did was register - using an already existing registration area in a different subdomain on the same site. Once they registered, a cookie was created, storing a login token. They were then redirected to our domain where we needed to access that same cookie and act accordingly. We also used cookies as a nicety to the user so they wouldn't have to login every time they came back to the site.&lt;br /&gt;&lt;br /&gt;When we deployed, we found that we were unable to access the registration token cookie created in the other subdomain, because when the cookie was created, the domain was not specified, so the default domain was "registration.domain.com". Our application at "contest.domain.com" was unable to access this cookie. So we ended up resolving the issue by making sure to specify no subdomain, just using "domain.com". We were then able to reference each others' cookies across the entire domain:&lt;br /&gt;&lt;br /&gt;document.cookie = name + '=' + value + "; expires=" + exp &lt;font color="#FF0000"&gt;+ "; domain=mydomain.com";&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-6723188954893151804?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/6723188954893151804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2009/05/cookies-across-subdomains.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/6723188954893151804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/6723188954893151804'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2009/05/cookies-across-subdomains.html' title='Cookies across subdomains'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-718921586465984112</id><published>2009-02-26T13:18:00.009-05:00</published><updated>2011-11-21T11:12:52.368-05:00</updated><title type='text'>Importing Verizon Backup Assistant Contacts to Outlook for Blackberry and other smart phone devices</title><content type='html'>&lt;br /&gt;(* &lt;span style="color:#0ff;font-style:bold, italic"&gt;Edited 11/20/2011 DS - &lt;/span&gt;&lt;span style="color:#ff0;"&gt;Good news - this old posting from early 2009 can now easily be accomplished using Verizon tools: To sync Outlook to Verizon phone: (1) Set up Backup Assistant on the phone; (2) Use Backup Assistant to import Outlook contacts .csv; (3) sync should happen automatically. For instructions on generating a .csv from Outlook, see instructions below.&lt;/span&gt;*)&lt;br /&gt;Recently, I posted &lt;a href="http://danshultz.blogspot.com/2009/01/import-verizon-backup-assistant.html"&gt;the code I had used to import my Verizon Backup Assistant contacts into Outlook&lt;/a&gt;, so I didn't have to re-enter all my contacts manually. I originally wrote it because I needed it for my Blackberry Storm, but really it's usable for any phone that uses Outlook to sync up Contacts. Also the original script required Firefox, and I've rewritten it to be browser neutral.&lt;br /&gt;&lt;br /&gt;I'll repeat the steps, revised for IE and non-Storm specific.&lt;br /&gt;&lt;br /&gt;You will need MS Outlook, obviously, since that's what we're targeting. (that's what the Storm and many other smartphones use to sync contacts). And of course you'll have to have your old contacts backed up using Verizon Backup Assistant, since that's our source for contacts.&lt;br /&gt;&lt;br /&gt;Here's a step-by-step overview of how to do it:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; Make sure you are running Firefox Version 3 and above or IE Version 7 or above. (&lt;em&gt;If you have earlier versions, You can still test them out for me, and I've supplied a feedback link&lt;/em&gt;).&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Go to &lt;a href="http://www.verizonwireless.com/backupassistant" target="_new"&gt;http://www.verizonwireless.com/backupassistant&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Select "Print Address Book" (must allow popups)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Select all page text (Ctrl+a)&lt;/li&gt;&lt;br /&gt;&lt;span style="color:#FFFF00;"&gt;Edited 6/15/09 DS - Some browsers have problems processing the headers:&lt;br /&gt;"I think the problem is you shouldn't do "CRTL+A" and get *everything*. Just highlight starting at the first entry and continue to the last one. Don't include "Backup Assistant Contacts", "Print Address Book", "Name", and so on."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt; Copy (Ctrl+c)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Go to &lt;a href="http://dl.dropbox.com/u/3858223/BrowserDetection.html" target="_blank"&gt;the Backup Assistant to Outlook conversion script page&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Paste text into top textbox&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Click the "Convert to Outlook CSV text" button&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Select all text from bottom text box&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Create a new text file using Notepad/Wordpad, paste in text&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Save the file with .csv extension &lt;/li&gt;&lt;br /&gt;&lt;li&gt; (you may want to examine this file in Excel before importing to Outlook)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Also, you may want to think about adding email and other info into the spreadsheet now - it's way easier to do it here than in Outlook.&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Open Outlook, select File... Import and Export... Import from another program or file&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Select Comma separated files (Windows)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Browse to the .csv file choose overwrite or duplicate&lt;/li&gt;&lt;br /&gt;&lt;li&gt; For destination folder, select "Contacts", select next, finish.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;You should now see your newly created contacts in Outlook.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Optional Steps for Blackberry users to import from Outlook -&gt; Blackberry:&lt;/em&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Now plug your Storm into your PC/Laptop&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Launch Desktop Manager&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Select the synchronize button/area&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Set up synchronization for contacts&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Synchronize&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;All of your Outlook Contacts should now appear under your Blackberry Contacts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-718921586465984112?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/718921586465984112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2009/02/importing-verizon-backup-assistant.html#comment-form' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/718921586465984112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/718921586465984112'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2009/02/importing-verizon-backup-assistant.html' title='Importing Verizon Backup Assistant Contacts to Outlook for Blackberry and other smart phone devices'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-483567125726971171</id><published>2009-02-06T20:06:00.007-05:00</published><updated>2009-02-07T11:13:39.268-05:00</updated><title type='text'>Blackberry Storm review from a former Razr user</title><content type='html'>I recently responded to an email from &lt;a href="http://blog.stevehorn.cc/"&gt;a fellow QSI employee&lt;/a&gt; who, like me, was looking to upgrade from the Razr to the BlackBerry Storm. &lt;br /&gt;&lt;br /&gt;Overall I'm happy with it. There are a few minor annoying UI issues, but here's what I think is good and bad&lt;br /&gt;&lt;br /&gt;The most surprising non-feature is the lack of wi-fi connectivity - I spent a long time trying to figure out how to do it before finding out you can only use the Verizon network.&lt;br /&gt;&lt;br /&gt;Web browsing is slow.&lt;br /&gt;&lt;br /&gt;The keyboard is ok but easy to fatfinger. I've never found one I like anyway, so it's no better or worse than anything else.&lt;br /&gt;&lt;br /&gt;Definitely get the screen protectors and/or holster. The holster looks precarious, but I've had it for weeks and no problems. I stupidly played hockey with it in my pocket and got a few scratches on the screen.&lt;br /&gt;&lt;br /&gt;I like the swiss army knife-ness of it... so much cool stuff, the camera, mp3 player, maps, webbrowser, IM, pop email and oh yeah phone. There's some Excel and Word apps too, but I've never had much use for them.&lt;br /&gt;&lt;br /&gt;The pop email collection works really well. Right there on the main screen one click and view email. You can add every web email you have, and you're alerted every time you receive one.&lt;br /&gt;&lt;br /&gt;The camera is good - you definitely need a steady hand... pictures get sent upside down when you email them, though if you don't hold it the right way landscape-wise. The thumbnail is right-side-up, but when the user views the photo, everyone's hanging from the ceiling. And if you flip it in PhotoShop and resend it, the thumbnail is upside down. So use the camera with the camera mode button facing up. Also if you take a portrait shot and send it via email, or to facebook, it posts landscape.&lt;br /&gt;&lt;br /&gt;Another thing that sucks is that the mode defaults to landscape every time you lay it down. It doesn't seem like that big of an issue at first, but in "Answer Call" mode, when the accellerometer switches from landscape to portrait, the "Ignore Call" button occupies the same screen space that had the "Answer Call" button in landscape mode. So you either end up ignoring the call, or having to risk missing the call while waiting for the mode to change. I Tweeted about this a few days ago and it happens pretty much every time you receive a call.&lt;br /&gt;&lt;br /&gt;There is a lot of lag time when clicking buttons.&lt;br /&gt;&lt;br /&gt;Blackberry apps are written in Java, but there's an MDS runtime environment that is a plugin for VS that looks promising for app development using .NET.&lt;br /&gt;&lt;br /&gt;Speed dial is one less click than the Razr, just click the call button, and click-hold the speed dial number.&lt;br /&gt;&lt;br /&gt;A lot of the blackberry apps like FaceBook, Twitter are pretty limited - I just end up just using the browser a lot of times. I had a posting I needed to delete once, and I had to scramble for a laptop and wi-fi to delete it. Yikes.&lt;br /&gt;&lt;br /&gt;If you're upgrading from the Razr to this, you'll be frikkin' ecstatic, though.&lt;br /&gt;&lt;br /&gt;And of course, if you need to import your contacts from Verizon's backup assistant, it's impossible. &lt;a href="http://danshultz.blogspot.com/2009/01/import-verizon-backup-assistant.html"&gt;Check out my Backup Assistant import script,&lt;/a&gt; if you need to do this.&lt;br /&gt;&lt;br /&gt;Hey, this might make a good blog post!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-483567125726971171?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/483567125726971171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2009/02/blackberry-storm-review.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/483567125726971171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/483567125726971171'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2009/02/blackberry-storm-review.html' title='Blackberry Storm review from a former Razr user'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-8737335673277493023</id><published>2009-01-01T20:08:00.027-05:00</published><updated>2011-11-21T11:15:20.710-05:00</updated><title type='text'>Import Verizon Backup Assistant Contacts for BlackBerry Storm  to Outlook using Firefox</title><content type='html'>&lt;br /&gt;(* &lt;span style="color:#0ff;font-style:bold, italic"&gt;Edited 11/20/2011 DS - &lt;/span&gt;&lt;span style="color:#ff0;"&gt;Good news - this old posting from early 2009 can now easily be accomplished using Verizon tools: To sync Outlook to Verizon phone: (1) Set up Backup Assistant on the phone; (2) Use Backup Assistant to import Outlook contacts .csv; (3) sync should happen automatically. For instructions on generating a .csv from Outlook, see instructions below.&lt;/span&gt;*)&lt;br /&gt;&lt;br /&gt;As a new owner of a new Blackberry Storm, I was disappointed to hear that there was no way to import my contacts from my old phone that I had stored in Verizon's Backup Assistant web app. After finding out how contacts work with the Storm, I thought I'd create a script that can convert Backup Assistant contacts to contacts that can be sync'ed to the Storm and share it for anyone else having the same problem.&lt;br /&gt;&lt;br /&gt;(* &lt;span style="color:#FFFF00;"&gt;Edited 2/26/09 DS - IE and Firefox versions now exist... Tested in IE Version 7+ and Firefox Version 3+.&lt;/span&gt;*)&lt;span style="text-decoration:line-through; color:#999999;"&gt;&lt;br /&gt;One caveat... right now it only works in Firefox, so you'll need to &lt;a href="http://www.firefox.com" target="_new"&gt;download Firefox&lt;/a&gt; if you don't have it.&lt;/span&gt; You will also need MS Outlook (that's what the Storm uses to sync contacts), and the Desktop Manager software, which comes with the Storm. And obviously, you'll have to have your old contacts backed up using Verizon Backup Assistant.&lt;br /&gt;&lt;br /&gt;Here's a step-by-step overview of how to do it:&lt;br /&gt;&lt;br /&gt;1. &lt;span style="text-decoration:line-through; color:#999999;"&gt;&lt;a href="http://www.firefox.com" target="_new"&gt;Get Firefox if you don't have it&lt;/a&gt;.&lt;/span&gt; Make sure you are running Firefox Version 3 and above or IE Version 7 or above.&lt;br /&gt;2. Go to &lt;a href="http://www.verizonwireless.com/backupassistant" target="_new"&gt;http://www.verizonwireless.com/backupassistant&lt;/a&gt;&lt;br /&gt;3. Select "Print Address Book" (must allow popups)&lt;br /&gt;4. Select all page text (Ctrl+a)&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#FFFF00;"&gt;Edited 6/15/09 DS - Some browsers have problems processing the headers:&lt;br /&gt;"I think the problem is you shouldn't do "CRTL+A" and get *everything*. Just highlight starting at the first entry and continue to the last one. Don't include "Backup Assistant Contacts", "Print Address Book", "Name", and so on."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;5. Copy (Ctrl+c)&lt;br /&gt;6. Go to &lt;a href="http://dl.dropbox.com/u/3858223/BrowserDetection.html" target="_blank"&gt;The Backup Assistant to Outlook conversion script page&lt;/a&gt;&lt;br /&gt;7. Paste text into top textbox&lt;br /&gt;8. Click the "Convert to Outlook CSV text" button&lt;br /&gt;9. Select all text from bottom text box&lt;br /&gt;10. Create a new text file using Notepad/Wordpad, paste in text&lt;br /&gt;11. Save the file with .csv extension &lt;br /&gt;11a.(you may want to examine this file in Excel before importing to Outlook)&lt;br /&gt;11b.(* &lt;span style="color:#FFFF00;"&gt;Edited 1/28/09 DS - You may want to think about adding email and other info into the spreadsheet now - it's way easier to do it here than in Outlook.&lt;/span&gt;*)&lt;br /&gt;12. Open Outlook, select File... Import and Export... Import from another program or file&lt;br /&gt;13. Select Comma separated files (Windows)&lt;br /&gt;14. Browse to the .csv file choose overwrite or duplicate&lt;br /&gt;15. For destination folder, select "Contacts", select next, finish.&lt;br /&gt;&lt;br /&gt;You should now see your newly created contacts in Outlook&lt;br /&gt;&lt;br /&gt;Now plug your Storm into your PC/Laptop, launch Desktop Manager&lt;br /&gt;&lt;br /&gt;16. Select the synchronize button/area&lt;br /&gt;17. Set up synchronization for contacts&lt;br /&gt;18. Synchronize&lt;br /&gt;&lt;br /&gt;All of your Outlook Contacts should now appear under your Blackberry Contacts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-8737335673277493023?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/8737335673277493023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2009/01/import-verizon-backup-assistant.html#comment-form' title='68 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8737335673277493023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8737335673277493023'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2009/01/import-verizon-backup-assistant.html' title='Import Verizon Backup Assistant Contacts for BlackBerry Storm  to Outlook using Firefox'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>68</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-9210592611440458903</id><published>2008-10-05T14:06:00.006-04:00</published><updated>2008-10-08T22:04:52.882-04:00</updated><title type='text'>Real world bad UI</title><content type='html'>In the last few weeks, I happened to notice some confusing signage in places I'm at on a regular basis and thought it might make for an amusing blog post. Just like bad UI in a software application, these bits of signage/labels made me stop for a second and scratch my head:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_nhdkQsCpsCI/SOkCgmvvhTI/AAAAAAAAAI8/wlIpLB3SER4/s1600-h/ParkingGarageArrow.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_nhdkQsCpsCI/SOkCgmvvhTI/AAAAAAAAAI8/wlIpLB3SER4/s400/ParkingGarageArrow.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5253733199484257586" /&gt;&lt;/a&gt;&lt;br /&gt;I have a spot on the top floor of a parking garage in downtown Columbus, and all ramps are one-way. Here's the sign showing my way out. I guess they thought an arrow pointing the way out wouldn't give me enough information, so this not-arrow gives me the much more informative message that this is the way to not go for people going the direction I'm not. &lt;br /&gt;&lt;br /&gt;Sometimes after a long day, I still have to pause for a millisecond when I see this sign. And this sign is not meant for the other guy, as he would have to have already come up the ramp to see that he shouldn't have.&lt;br /&gt;&lt;br /&gt;Here are the elevator buttons I was using daily at the office:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nhdkQsCpsCI/SO1keIDr5RI/AAAAAAAAAJM/TkwIbCG9LjI/s1600-h/ElevatorButtons.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_nhdkQsCpsCI/SO1keIDr5RI/AAAAAAAAAJM/TkwIbCG9LjI/s400/ElevatorButtons.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5254966808933033234" /&gt;&lt;/a&gt;&lt;br /&gt;Naturally, to go down, you can see that I pushed the top button.&lt;br /&gt;&lt;br /&gt;In their defense, we are on the top floor, so the only way is down. So it looks like they just tried to reuse the same button panel as was on the other floors, only they decided to only mark the exceptional up button as down without marking the down button appropriately. Hope noone forgets they're on the top floor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-9210592611440458903?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/9210592611440458903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2008/10/real-world-bad-ui.html#comment-form' title='58 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/9210592611440458903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/9210592611440458903'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2008/10/real-world-bad-ui.html' title='Real world bad UI'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_nhdkQsCpsCI/SOkCgmvvhTI/AAAAAAAAAI8/wlIpLB3SER4/s72-c/ParkingGarageArrow.jpg' height='72' width='72'/><thr:total>58</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-2263118243118999639</id><published>2008-08-13T12:34:00.015-04:00</published><updated>2008-08-13T13:14:03.877-04:00</updated><title type='text'>WCF Debugging in Visual Studio 2008</title><content type='html'>Debugging WCF Services is a lot easier in Visual Studio 2008. There is a WCF Service Host built-in to privately host WCF Services, as well as a built-in client that can be used as a test harness, and to view XML Requests and Responses. Here’s a quick walk-through on how to set up a quick sample WCF service, execute it using the client utility, and to create a simple console app that calls the service that will allow you to debug both client and server code without going through hosting the service in IIS, attaching to process, etc…&lt;br /&gt;First, create a new WCF Service Project (File…New…Project -&gt; Expand C#..WCF -&gt; Select WCF Service Library)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_nhdkQsCpsCI/SKMNUZ6a5hI/AAAAAAAAAHk/Jae-jz_fG_M/s1600-h/DebuggingWcf01CreateWcfProj.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_nhdkQsCpsCI/SKMNUZ6a5hI/AAAAAAAAAHk/Jae-jz_fG_M/s400/DebuggingWcf01CreateWcfProj.png" alt="" id="BLOGGER_PHOTO_ID_5234041836139111954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The newly created project has a sample method GetData(int) that simply takes in an int, and returns a string. That’s the method we’ll be using. Now right-click the App.config file and select Edit WCF Configuration. This brings up a GUI view of the XML config file. Click the first “(Empty Name)” link that uses the binding wsHttpBinding.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_nhdkQsCpsCI/SKMPKKmzVtI/AAAAAAAAAH0/CzBsDhXOF2E/s1600-h/DebuggingWcf02GetDataMethod.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_nhdkQsCpsCI/SKMPKKmzVtI/AAAAAAAAAH0/CzBsDhXOF2E/s400/DebuggingWcf02GetDataMethod.png" alt="" id="BLOGGER_PHOTO_ID_5234043859254859474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This allows you to edit  the Service Endpoint. Give it a name.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nhdkQsCpsCI/SKMPKaBB0gI/AAAAAAAAAH8/CL9TaVWJVew/s1600-h/DebuggingWcf03RenameService.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_nhdkQsCpsCI/SKMPKaBB0gI/AAAAAAAAAH8/CL9TaVWJVew/s400/DebuggingWcf03RenameService.png" alt="" id="BLOGGER_PHOTO_ID_5234043863391392258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Save the configuration, now hit f5 to run the app. The WCF Test Client will launch. Double-click the GetData() method.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nhdkQsCpsCI/SKMPKoF6NSI/AAAAAAAAAIE/B9-t7WDx3Eo/s1600-h/DebuggingWcf04WcfTestClient.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_nhdkQsCpsCI/SKMPKoF6NSI/AAAAAAAAAIE/B9-t7WDx3Eo/s400/DebuggingWcf04WcfTestClient.png" alt="" id="BLOGGER_PHOTO_ID_5234043867169961250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This brings up a test harness that will allow you to test the method. Enter a value for the Request Value and click Invoke. In a few seconds, the Response Value should display “You entered: [number]”.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nhdkQsCpsCI/SKMPK9hRNXI/AAAAAAAAAIM/qXaGU8yikEE/s1600-h/DebuggingWcf05TestMethod.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_nhdkQsCpsCI/SKMPK9hRNXI/AAAAAAAAAIM/qXaGU8yikEE/s400/DebuggingWcf05TestMethod.png" alt="" id="BLOGGER_PHOTO_ID_5234043872921859442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OK, Now we’re ready to create a console client application that will call our service, and allow us to debug through client and server code. Add a new Console Application to the solution.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nhdkQsCpsCI/SKMPLBzJQ3I/AAAAAAAAAIU/-tvFECrDWtc/s1600-h/DebuggingWcf06AddConsoleApp.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_nhdkQsCpsCI/SKMPLBzJQ3I/AAAAAAAAAIU/-tvFECrDWtc/s400/DebuggingWcf06AddConsoleApp.png" alt="" id="BLOGGER_PHOTO_ID_5234043874070578034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Right-click the newly created console app and select “Add Service Reference”. This brings up a dialog box that allows you to add a service reference. Click the down arrow next to the Discover button and select “Services in Solution”. Select your service in the dropdown and click Go, when it appears under Services, click OK.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nhdkQsCpsCI/SKMPSWyLpfI/AAAAAAAAAIc/1nOJGyu4J2c/s1600-h/DebuggingWcf07AddServiceReference.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_nhdkQsCpsCI/SKMPSWyLpfI/AAAAAAAAAIc/1nOJGyu4J2c/s400/DebuggingWcf07AddServiceReference.png" alt="" id="BLOGGER_PHOTO_ID_5234043999962768882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now go into the Main method of Program.cs in your console app. Add the following call to the referenced service:&lt;br /&gt;&lt;br /&gt;                    &lt;span style="font-family: arial;"&gt;ServiceReference1.&lt;span style="color: rgb(0, 204, 204);"&gt;Service1Client &lt;/span&gt;sc = &lt;span style="color: rgb(51, 51, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(0, 204, 204);"&gt;Service1Client&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;                    &lt;span style="color: rgb(0, 204, 204);"&gt;Console&lt;/span&gt;.WriteLine(sc.GetData(11));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And set a breakpoint at &lt;span style="font-family: arial;"&gt;&lt;span style="color: rgb(0, 204, 204);"&gt;Console&lt;/span&gt;.WriteLine&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nhdkQsCpsCI/SKMPSur2RPI/AAAAAAAAAIk/62q0didABOw/s1600-h/DebuggingWcf08WriteCodeSetBrkpoint.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_nhdkQsCpsCI/SKMPSur2RPI/AAAAAAAAAIk/62q0didABOw/s400/DebuggingWcf08WriteCodeSetBrkpoint.png" alt="" id="BLOGGER_PHOTO_ID_5234044006378652914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now you’re ready to start debugging. First run the service (F5), then start a new debugging instance of the console app. The debugger should now be stopped at your breakpoint in the console app. Step into the code (F11) and you will step through the GetData method in your service code.&lt;br /&gt;&lt;br /&gt;When you finish stepping through your code, the console should display the return value.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nhdkQsCpsCI/SKMPS-OuZCI/AAAAAAAAAIs/b6rCRNIajjg/s1600-h/DebuggingWcf09RunSlnDebugViewResults.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_nhdkQsCpsCI/SKMPS-OuZCI/AAAAAAAAAIs/b6rCRNIajjg/s400/DebuggingWcf09RunSlnDebugViewResults.png" alt="" id="BLOGGER_PHOTO_ID_5234044010551469090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A full Silverlight presentation of WCF Debugging is also available &lt;a href="http://burling.co.nz/MS/VS2008WCF.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-2263118243118999639?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/2263118243118999639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2008/08/wcf-debugging-in-visual-studio-2008.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/2263118243118999639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/2263118243118999639'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2008/08/wcf-debugging-in-visual-studio-2008.html' title='WCF Debugging in Visual Studio 2008'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_nhdkQsCpsCI/SKMNUZ6a5hI/AAAAAAAAAHk/Jae-jz_fG_M/s72-c/DebuggingWcf01CreateWcfProj.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-1460184312498412221</id><published>2008-08-11T13:37:00.009-04:00</published><updated>2008-08-11T14:21:30.115-04:00</updated><title type='text'>Excel Extend series - all rows</title><content type='html'>I recently had to deal with very large (300K+ rows) Excel spreadsheets. I needed to add an additional column based on calculations of other existing columns. I was familiar with the extend series functionality of Excel for extrapolating a function over multiple rows, but what a pain to drag for 300,000 rows. There has to be an easier way to apply a function to all rows. So I Googled and found a nice easy way to Extend Series to all rows, just double-click the square in the bottom right corner of the column with the function applied and presto, the calculation is applied to all rows in the spreadsheet:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;color:Yellow;"&gt;Create the function in row 1&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nhdkQsCpsCI/SKB8pcpXLWI/AAAAAAAAAHM/Uuc8rrLTGGE/s1600-h/ExtendSeries1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_nhdkQsCpsCI/SKB8pcpXLWI/AAAAAAAAAHM/Uuc8rrLTGGE/s400/ExtendSeries1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5233319818510675298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;color:Yellow;"&gt;&lt;br /&gt;You can extend the function to subsequent rows by dragging the square in the bottom right corner of the selected cell...&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nhdkQsCpsCI/SKB88rMLfmI/AAAAAAAAAHU/JHJN503ErH4/s1600-h/ExtendSeries2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_nhdkQsCpsCI/SKB88rMLfmI/AAAAAAAAAHU/JHJN503ErH4/s400/ExtendSeries2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5233320148832321122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;color:Yellow;"&gt;&lt;br /&gt;...or just double-click the black square, and the function is extended all the way to the last cell ie; the 17th row function is =a17*b17.&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nhdkQsCpsCI/SKB9T0OdXEI/AAAAAAAAAHc/oW9mnnPn_ew/s1600-h/ExtendSeries3.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_nhdkQsCpsCI/SKB9T0OdXEI/AAAAAAAAAHc/oW9mnnPn_ew/s400/ExtendSeries3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5233320546394790978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Special thanks to &lt;a href="http://philipjordan.blogspot.com"&gt;Phil&lt;/a&gt; for his help.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-1460184312498412221?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/1460184312498412221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2008/08/excel-extend-series-all-rows.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/1460184312498412221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/1460184312498412221'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2008/08/excel-extend-series-all-rows.html' title='Excel Extend series - all rows'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_nhdkQsCpsCI/SKB8pcpXLWI/AAAAAAAAAHM/Uuc8rrLTGGE/s72-c/ExtendSeries1.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-4510947914158968680</id><published>2008-05-07T10:32:00.002-04:00</published><updated>2008-05-28T09:37:50.633-04:00</updated><title type='text'>ReSharper 4.0 Initial thoughts</title><content type='html'>I just installed ReSharper 4.0 for the first time, &amp; got a quick overview of a few of the features. After using it for about a week, here are my initial thoughts, and some of the features I find myself using a lot:&lt;br /&gt;&lt;br /&gt;The configurable silent code clean up feature works really well and is a big time saver. The warnings and alerts are good for making simple errors/redundancies/unused elements jump out.&lt;br /&gt;&lt;br /&gt;The find file and find type (ctrl+t, ctrl+shift+t) make it easier to navigate and open files, especially in a very large sln with many projects.&lt;br /&gt;&lt;br /&gt;Extracting interfaces from existing classes is an improvement over VS - it actually makes the interface public and implements it in the class.&lt;br /&gt;&lt;br /&gt;Finding alt+enter to add references/using directives to be a big time saver.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-4510947914158968680?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/4510947914158968680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2008/05/resharper-40-initial-thoughts.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/4510947914158968680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/4510947914158968680'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2008/05/resharper-40-initial-thoughts.html' title='ReSharper 4.0 Initial thoughts'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-8171685920447444098</id><published>2008-04-16T10:17:00.004-04:00</published><updated>2008-04-16T10:34:14.984-04:00</updated><title type='text'>Contest Results</title><content type='html'>Here's a shot of the spreadsheet with the weights removed. Congratulations Slimtastics, especially Arnulfo and Steve.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.danshultz.com/WeightLossCompetitionResults.bmp"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://www.danshultz.com/WeightLossCompetitionResults.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189849938191603970" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-8171685920447444098?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/8171685920447444098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2008/04/contest-results.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8171685920447444098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8171685920447444098'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2008/04/contest-results.html' title='Contest Results'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-4873770305528220061</id><published>2008-02-13T17:13:00.002-05:00</published><updated>2008-02-13T17:21:55.168-05:00</updated><title type='text'>Wii remote sensor problem &amp; tech support Fonzie fix</title><content type='html'>We recently had one of our Wii remotes go bad - the problem first appeared while playing Wii bowling. The second remote worked fine until it came to releasing the ball - it never did, it now just always threw the ball backward no matter what. After checking all the usual suspects, batteries, sensor bar flush w/TV, etc... I called into Wii tech support (1-800-255-3700). The call dropped twice, but finally, the tech support person told me to:&lt;br /&gt;&lt;br /&gt;a) Hold the Wii remote upside-down with one hand so all the buttons are facing the floor. &lt;br /&gt;&lt;br /&gt;b) Smack the end of the remote with the power button from underneath with the other hand. &lt;br /&gt;&lt;br /&gt;Now it works fine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-4873770305528220061?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/4873770305528220061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2008/02/wii-remote-sensor-problem-tech-support.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/4873770305528220061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/4873770305528220061'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2008/02/wii-remote-sensor-problem-tech-support.html' title='Wii remote sensor problem &amp; tech support Fonzie fix'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-9136954975503600069</id><published>2008-02-06T17:28:00.001-05:00</published><updated>2008-04-08T09:15:13.171-04:00</updated><title type='text'>Adding a unique digg button per post using Blogger</title><content type='html'>Adding a digg button to your blog on blogspot is easy, and users can digg the blog, or even digg an individual post, provided they were drilled into a specific post. But what if you want your readers to digg any specific post from your main page? If you have a following, that's probably where they'll read it from, and a digg button on your main page will only take them to digging the blog in general. Basically, you'll want to have a button inside each posting with a digg_url that is specific to that post.&lt;br /&gt;&lt;br /&gt;Here's a way I found to get it to work:&lt;br /&gt;&lt;br /&gt;Go to your blog's admin page and select the Template tab&lt;br /&gt;Select Edit HTML&lt;br /&gt;Make sure "Expand Widget Templates" is checked&lt;br /&gt;Look for the &amp;lt;div class="post-footer"&amp;gt; div tag&lt;br /&gt;Inside that tag, add your digg button code&lt;br /&gt;For the digg_url value us e &amp;lt;data:post.url/&amp;gt;(This template variable holds the actual url of each individual post)&lt;br /&gt;&lt;i&gt;Note: The code window will encode the quotes.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Here's some sample button code and more &lt;a href="http://www.digg.com/tools/integrate"&gt;digg integration info&lt;/a&gt; if you need it.&lt;br /&gt;&lt;br /&gt;...Of course if you use it, you have to digg me :)&lt;br /&gt;&lt;span style="color:#888888"&gt;&lt;br /&gt;&amp;lt;!-- digg button with post-specific url added - Dan Shultz --&amp;gt;&lt;br /&gt;&amp;lt;script type='text/javascript'&amp;gt;digg_url = '&lt;b&gt;&lt;span style="color:#ff0000;"&gt;&amp;lt;data:post.url/&amp;gt;&lt;/span&gt;&lt;/b&gt;'; digg_title = '&amp;lt;data:post.title/&amp;gt;'; digg_bodytext = ''; digg_skin = 'compact'; digg_window = 'new'; digg_media = 'image'; digg_topic = 'comics_animation';&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src='http://digg.com/tools/diggthis.js' type='text/javascript'/&amp;gt;&lt;br /&gt;&amp;lt;!-- end digg button code --&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-9136954975503600069?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/9136954975503600069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2008/02/adding-unique-digg-button-per-post.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/9136954975503600069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/9136954975503600069'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2008/02/adding-unique-digg-button-per-post.html' title='Adding a unique digg button per post using Blogger'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-7042477729707551820</id><published>2008-02-01T17:18:00.000-05:00</published><updated>2008-02-01T18:01:26.104-05:00</updated><title type='text'>XMLSerialization &amp; null/empty elements</title><content type='html'>I had to revise an application that was serializing a .NET object and returning the XML, but not returning elements where the properties were null. The consuming client expected every element in the schema to be returned so we needed to come up with the best way to create the XML with all elements &amp;amp; nodes regardless of whether they contained data.&lt;br /&gt;&lt;br /&gt;The first solution was to simply decorate the property with [&lt;span style="color:#00cccc;"&gt;XmlElement&lt;/span&gt;(IsNullable=&lt;span style="color:#3366ff;"&gt;true&lt;/span&gt;)] which makes sure the element is always generated. The resulting xml element contains the attribute xsi:nil="true" when it is null. That works just fine, but an even simpler solution for our needs was just to initialize the private variable behind the property to string.empty. That ensured that the property was always at least an empty string, rather than null; to the XmlSerializer, empty string means generate element. But if we had needed that property to actually ever be null and the resulting XML had to include it no matter what, the XmlElement Attribute would have been a good way to go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-7042477729707551820?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/7042477729707551820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2008/02/xmlserialization-nullempty-elements.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/7042477729707551820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/7042477729707551820'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2008/02/xmlserialization-nullempty-elements.html' title='XMLSerialization &amp; null/empty elements'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-7035840627830174021</id><published>2008-01-17T09:44:00.001-05:00</published><updated>2008-01-17T16:06:33.579-05:00</updated><title type='text'>BMI Calculator</title><content type='html'>BMI Calculator&lt;br /&gt;&lt;SCRIPT LANGUAGE="JavaScript"&gt;function populateHeight(inches){document.getElementById("Height").value = inches;}&lt;/SCRIPT&gt;&lt;br /&gt;&lt;SCRIPT LANGUAGE="JavaScript"&gt;function calculateBMI(){var height = document.getElementById("Height").value;var weight = document.getElementById("Weight").value; var bmi = 0; if(height!=0 &amp;&amp; weight!=0){ bmi = (weight*703)/(height*height);document.getElementById("BMI").value = bmi;} else { alert("You must enter both height and weight to calculate BMI: height=" +height+ " weight="+weight); }}&lt;/SCRIPT&gt;&lt;br /&gt;&lt;INPUT Type="text" ID="Height" Name="Height" Value="0"&gt; - Height&lt;br /&gt;&lt;INPUT Type="text" ID="Weight" Name="Weight" Value="0"&gt; - Weight&lt;br /&gt;&lt;INPUT Type="text" ID="BMI" Name="Height" Value="0"&gt; - BMI&lt;br /&gt;&lt;BUTTON Name="CalculateBMI" onClick="javascript:calculateBMI();" &gt;Calculate BMI&lt;/BUTTON&gt;&lt;br /&gt;&lt;br /&gt;&lt;BUTTON Name="DanHeight" onClick="javascript:populateHeight(72);" &gt;Populate Dan's Height&lt;/BUTTON&gt;&lt;br /&gt;&lt;BUTTON Name="BruceHeight" onClick="javascript:populateHeight(70);" &gt;Populate Bruce's Height&lt;/BUTTON&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-7035840627830174021?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/7035840627830174021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2008/01/bmi-calculator.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/7035840627830174021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/7035840627830174021'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2008/01/bmi-calculator.html' title='BMI Calculator'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-8188127623773008684</id><published>2008-01-10T15:20:00.000-05:00</published><updated>2008-01-14T10:29:29.133-05:00</updated><title type='text'>.NET Tips and Tricks Open Spaces</title><content type='html'>The late session Thursday, I tried out Open Spaces for the first time - &lt;a href="http://blogs.msdn.com/saraford/" &gt;Sara Ford, who does the Visual Studio tip of the day&lt;/a&gt; ran a session on Visual Studio tips and tricks. She has a vast collection of tips, obscure keycodes and showed some of the coolest/most popular ones. They're all on her blog, but here are some of the ones I was unaware of and will incorporate into my daily routine:&lt;br /&gt;&lt;br /&gt;Enabling Guidelines - &lt;a href="http://blogs.msdn.com/saraford/archive/2004/11/15/257953.aspx"&gt;registry edit&lt;/a&gt; that allows you to drag guidlines into the vs text editor&lt;br /&gt;&lt;br /&gt;Under Tools.. Options.. Text Editor.. All languages.. General uncheck "Apply copy and cut if no blank lines" checkbox&lt;br /&gt;This DOESN'T overwrite what's on your clipboard if you accidentally cut or copy twice by accident before you paste, and your cursor happens to not have anything selected. I do this all the time and I thought it was just me.&lt;br /&gt;&lt;br /&gt;Ctrl+w = select current word&lt;br /&gt;&lt;br /&gt;Right click find window to make it dockable.&lt;br /&gt;&lt;br /&gt;Right click on file tab.. open containing folder opens win explorer to current file's folder.&lt;br /&gt;Right click on file tab.. close all but this closes all other windows.&lt;br /&gt;Right click on file tab.. full path gets the full file system path to that file.&lt;br /&gt;&lt;br /&gt;ctrl-tab allows you to tab to all open files and windows windows w arrow key.&lt;br /&gt;&lt;br /&gt;ctrl-alt-downarrow pops arrow on tab window to show additional unshown files.&lt;br /&gt;&lt;br /&gt;Options.. startup, can specify new start page&lt;br /&gt;&lt;br /&gt;ctrl-f2 goes to navigation dropdown + tab goes to 2nd drop down showing methods.&lt;br /&gt;&lt;br /&gt;Any file menu + ctrl tab goes to first item in the standard toolbar&lt;br /&gt;&lt;br /&gt;Customize toolbar window looks modal but is not.&lt;br /&gt;&lt;br /&gt;LEFT Shift alt tabs to the first button in a toolwindow's toolbar (like schemas, solution windows)&lt;br /&gt;&lt;br /&gt;alt-minus (with floating window active) and you can move it around with the up-down keys. I'm not sure how much I'll use it, but it gave me a chuckle.&lt;br /&gt;&lt;br /&gt;Anyway, these are all available on her &lt;a href="http://blogs.msdn.com/saraford"&gt;blog&lt;/a&gt;, but it was nice to have a session and get the cream of the crop. She also has a &lt;a href="http://blogs.msdn.com/saraford/archive/2007/11/28/third-helping-visual-studio-tip-of-the-day-windows-sidebar-gadget.aspx"&gt;tip of the day gadget&lt;/a&gt; for Vista.&lt;br /&gt;&lt;br /&gt;This was the only Open Spaces session I got to, but it's a cool addition to the conference sessions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-8188127623773008684?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/8188127623773008684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2008/01/net-tips-and-tricks-open-spaces.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8188127623773008684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8188127623773008684'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2008/01/net-tips-and-tricks-open-spaces.html' title='.NET Tips and Tricks Open Spaces'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-3435139679472275308</id><published>2008-01-10T09:49:00.000-05:00</published><updated>2008-01-10T10:24:25.917-05:00</updated><title type='text'>CodeMash FaceBook development session notes</title><content type='html'>Uses FBML, FBJS&lt;br /&gt;&lt;br /&gt;Create FaceBook Developer acct&lt;br /&gt;Developer mode&lt;br /&gt;&lt;br /&gt;Submit application to attract users&lt;br /&gt;Built in App statistics&lt;br /&gt;Can host on your own server&lt;br /&gt;&lt;br /&gt;REST API&lt;br /&gt;Api_key, v, Format, Method, UIDs, Fields, Call_id, sig&lt;br /&gt;Session_key  (gotten by you from user)&lt;br /&gt;&lt;br /&gt;Get session key by:&lt;br /&gt;User can either log in to your app&lt;br /&gt;Or user installs your app&lt;br /&gt;&lt;br /&gt;Can use FQL (subset of t-sql, no joins) to access user data.&lt;br /&gt;&lt;br /&gt;Viral Distribution&lt;br /&gt;Notifications&lt;br /&gt;&lt;br /&gt;FBML: No &amp;lt;EMBED&amp;gt; &amp;lt;fb:profile-pic&amp;gt; + uid displays user profile pic, &amp;lt;fb:multi-friend-input&amp;gt; renders auto-complete friends text box (used commonly)&lt;br /&gt;&lt;br /&gt;client langs PHP, Java unofficial:Actionscript, Ruby&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-3435139679472275308?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/3435139679472275308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2008/01/codemash-facebook-development-session.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/3435139679472275308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/3435139679472275308'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2008/01/codemash-facebook-development-session.html' title='CodeMash FaceBook development session notes'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-8303452996359579112</id><published>2008-01-07T10:35:00.000-05:00</published><updated>2008-01-08T08:39:06.474-05:00</updated><title type='text'>CodeMash 2008</title><content type='html'>Looking forward to another 3 days of information overload at CodeMash 2008. &lt;br /&gt;&lt;a href="http://www.codemash.org/sessionscheduler/scheduler.html?1=2&amp;3=4&amp;5=23&amp;6=17&amp;7=42"&gt;My current itinerary&lt;/a&gt;&lt;br /&gt;Last year's sessions were all great (non-marketing) information, and according to this year's synopses, it looks to be even better. This less-than-frequently-updated blog should have a plethora of fresh blogging material. Can't wait!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-8303452996359579112?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/8303452996359579112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2008/01/codemash-2008.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8303452996359579112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8303452996359579112'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2008/01/codemash-2008.html' title='CodeMash 2008'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-8878923837071732544</id><published>2007-12-21T16:53:00.000-05:00</published><updated>2007-12-21T16:55:22.516-05:00</updated><title type='text'>TYPE_E_CANTLOADLIBRARY</title><content type='html'>Note to self: for error TYPE_E_CANTLOADLIBRARY (happens on Windows 2000)&lt;br /&gt;&lt;br /&gt;Make sure the version of ASP.DLL in your system is 5.0.2195.6982&lt;br /&gt;&lt;br /&gt;Another workaround is adding AspCompat="true" in your aspx page directive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-8878923837071732544?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/8878923837071732544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/12/typeecantloadlibrary.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8878923837071732544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/8878923837071732544'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/12/typeecantloadlibrary.html' title='TYPE_E_CANTLOADLIBRARY'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-5645684600416272905</id><published>2007-12-20T09:49:00.001-05:00</published><updated>2008-04-03T09:29:54.460-04:00</updated><title type='text'>Calling COM object methods with extra parameters from C#</title><content type='html'>I am working on an ASP.NET app that is calling existing COM objects. A wrapper for the COM objects has been created using tlbimp, and that wrapper is referenced in my project.&lt;br /&gt;&lt;br /&gt;One of the issues I am seeing is that the method signatures are occasionally different when calling the bridge in C# than in the sample classic ASP code that calls the same objects. One good example is with the Add method on VBA.Collection.&lt;br /&gt;&lt;br /&gt;In classic ASP, you can simply call [class].[VBA.Collection].Add("mystring"). However, when calling the bridge in C#, the signature for this method shows up as [class].[VBA.Collection].Add(ref item, ref key, ref Before, ref After). No overloads, this is the only signature available. The actual parameter you want to use is the first one: "item", but what values/types do you pass for these parameters to make the equivalent call?&lt;br /&gt;&lt;br /&gt;For the actual value you want to pass, you'll need to create a variable of type object to pass by ref into the first (item) parameter:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;color:#3333ff;"&gt;object &lt;span style="color:#330033;"&gt;item =&lt;/span&gt; &lt;span style="color:#cc0000;"&gt;"texttext"&lt;/span&gt;&lt;span style="color:#330033;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;for the other three, I tried passing various values, nulls, and types with no success, failing sometimes compile time, sometimes run time:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;Exception from HRESULT: 0x800A0005 (CTL_E_ILLEGALFUNCTIONCALL)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#bb99bb;"&gt;the answer is to use System.Reflection.&lt;span style="color:#33ccff;"&gt;Missing&lt;/span&gt;.Value to represent the missing parameters. The called object will now use the default parameter values for key, Before, and After, and successfully add your item to the collection. Here's the code:&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#330033;"&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family:arial;"&gt;                   &lt;span style="color:#3333ff;"&gt;object&lt;/span&gt; m = System.Reflection.&lt;span style="color:#33ccff;"&gt;Missing&lt;/span&gt;.Value;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;                    &lt;span style="color:#3333ff;"&gt;object&lt;/span&gt; name = &lt;span style="color:#cc0000;"&gt;"testtext"&lt;/span&gt;&lt;span style="color:#330033;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;                    oCOMClass.VBACollectionProperty.Add(&lt;span style="color:#3333ff;"&gt;ref&lt;/span&gt; name, &lt;span style="color:#3333ff;"&gt;ref&lt;/span&gt; m, &lt;span style="color:#3333ff;"&gt;ref&lt;/span&gt; m, &lt;span style="color:#3333ff;"&gt;ref&lt;/span&gt; m);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#330033;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-5645684600416272905?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/5645684600416272905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/12/calling-com-object-methods-with-extra.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/5645684600416272905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/5645684600416272905'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/12/calling-com-object-methods-with-extra.html' title='Calling COM object methods with extra parameters from C#'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-1448137464911519782</id><published>2007-11-30T12:24:00.000-05:00</published><updated>2007-11-30T12:46:46.028-05:00</updated><title type='text'>ASP.Net web application template missing from Visual Studio</title><content type='html'>I recently installed Visual Studio 2005 on a Virtual PC and opened an existing solution from Source Control and got an application type not supported error for one of the projects in the solution (it was an ASP.NET Web Application project). It seems to be a common problem, and a lot of people are able to easily resolve it by recreating the Project and Item template caches using the following command:&lt;br /&gt;&lt;br /&gt;devenv /installvstemplates&lt;br /&gt;&lt;br /&gt;Another possible cause for this issue could be that the templates are not in the right place - occasionally they are installed under My Documents.&lt;br /&gt;&lt;br /&gt;To make sure they are in the right place, in VS go to Tools..Options..Projects and Solutions and make sure the project and item templates are in C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\. (that's where the above script will put them).&lt;br /&gt;&lt;br /&gt;If you still have an issue you can download and install the VS 2005 Update to Support Web Application Projects &lt;a href="http://msdn2.microsoft.com/en-us/asp.net/aa336618.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;...after that File..New..Project should now show "ASP.NET Web Application" and "ASP.NET Web Service".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-1448137464911519782?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/1448137464911519782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/11/aspnet-web-application-template-missing.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/1448137464911519782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/1448137464911519782'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/11/aspnet-web-application-template-missing.html' title='ASP.Net web application template missing from Visual Studio'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-4686719462421489436</id><published>2007-11-07T16:11:00.000-05:00</published><updated>2007-11-09T10:11:32.076-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeMash'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='save'/><category scheme='http://www.blogger.com/atom/ns#' term='button'/><title type='text'>Floppy disk = SAVE</title><content type='html'>Right now I'm working on a SilverLight scheduling application for a 3-day event this January. I'm working on the "Save" functionality, where an attendee can store the itinerary of sessions they would like to sign up for. Most of the attendees for this conference are software engineers, architects and developers, probably familiar with the MS Office suite of applications where the Save button is a 12x12 pixel image of a floppy disk:&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_nhdkQsCpsCI/RzIqhzCeIoI/AAAAAAAAAB0/zHg7J0HzciM/s1600-h/floppysave.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5130209685653037698" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_nhdkQsCpsCI/RzIqhzCeIoI/AAAAAAAAAB0/zHg7J0HzciM/s200/floppysave.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;There is a lot of value in that image, since anyone who has used MS Office products, will intuitively recognize it as a save button, without a second thought. Lotus apps use the same symbol for saving, as well as many others. It's right up there with the red stop sign octagon, or the man/woman pictogram symbol on restroom doors when it comes to instant understanding of a graphic symbol.&lt;br /&gt;&lt;br /&gt;But I'm sure there's a better visual representation of the Save function than something as obsolete as a 3.5" floppy - I mean I haven't had a floppy drive on my computer since 3 machines ago. Plus, why does a 3.5" floppy mean "Save" anyway?&lt;br /&gt;&lt;br /&gt;The attendees for our conference are all familiar with software development, and one of the ubiquitous symbols in software application maps and network diagrams is the 3-D cylinder, which represents a database/datastore. So here's my thoughts on an equally intuitive Save icon.&lt;br /&gt;&lt;p&gt;&lt;a href="http://bp1.blogger.com/_nhdkQsCpsCI/RzPiucC_xzI/AAAAAAAAACU/mWHhBH3Lo3s/s1600-h/CodemashDBSaveButton.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5130693687935747890" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_nhdkQsCpsCI/RzPiucC_xzI/AAAAAAAAACU/mWHhBH3Lo3s/s200/CodemashDBSaveButton.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;For our application, that's exactly what we're doing - storing it in a database. &lt;/p&gt;&lt;p&gt;Another feature is the ability to email your itinerary to another attendee - again, "Email" functionality has been represented in multitudes of applications with the obvious envelope graphic, and that's such a simple, intuitive indicator that I wouldn't think of messing with that. We have a bit more graphical capabilities, so here's my treatment of Email functionality:&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_nhdkQsCpsCI/RzPbZMC_xxI/AAAAAAAAACE/tDm59bfeYqI/s1600-h/CodeMashEmailLink.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5130685626282133266" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_nhdkQsCpsCI/RzPbZMC_xxI/AAAAAAAAACE/tDm59bfeYqI/s200/CodeMashEmailLink.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-4686719462421489436?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/4686719462421489436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/11/floppy-disk-save.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/4686719462421489436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/4686719462421489436'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/11/floppy-disk-save.html' title='Floppy disk = SAVE'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_nhdkQsCpsCI/RzIqhzCeIoI/AAAAAAAAAB0/zHg7J0HzciM/s72-c/floppysave.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-5499213987615158943</id><published>2007-10-24T10:27:00.000-04:00</published><updated>2007-10-24T10:49:42.943-04:00</updated><title type='text'>Moving Functoids &amp; Links to new page</title><content type='html'>I had a complex map and wanted to make it easier to read by separating links and functoids into several pages within that map. BizTalk makes it extremely simple, but it took me a few minutes to get it...&lt;br /&gt;&lt;br /&gt;1) Create a new destination page within the map.&lt;br /&gt;&lt;br /&gt;2) Select the desired functoids and it's links from the old page.&lt;br /&gt;&lt;br /&gt;3) Drag the functoid and links to the new destination page tab and keep holding the left mouse button down... you should see the arrow &amp; grey box cursor... if you get the circle with the slash through it, you didn't correctly select all the functoids and links.&lt;br /&gt;&lt;br /&gt;4) Now the new empty page is activated... but don't just drop the functoids on the tab, move the cursor back up into the grid, then drop them on the grid... they now are moved to the new page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-5499213987615158943?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/5499213987615158943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/10/moving-functoids-links-to-new-page.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/5499213987615158943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/5499213987615158943'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/10/moving-functoids-links-to-new-page.html' title='Moving Functoids &amp; Links to new page'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-5586607405706555818</id><published>2007-10-19T23:46:00.000-04:00</published><updated>2007-10-20T01:59:57.815-04:00</updated><title type='text'>NHL Points projecter</title><content type='html'>Here is a js utility that will project the total points at the end of the season based on the team's current record. Next step is to find a good feed for team records.&lt;br /&gt;&lt;script language="JavaScript"&gt;function calculate(){var wins = document.getElementById("wins").value;var losses = document.getElementById("losses").value;var otlosses = document.getElementById("otlosses").value;var solosses = document.getElementById("solosses").value;var gamesPlayed = parseInt(wins) + parseInt(losses) + parseInt(otlosses) + parseInt(solosses);var multiplier = 82/gamesPlayed;var winpts=0;var otlosspts = 0;var solosspts = 0;if(wins!="" &amp;&amp; wins &gt; 0){ winpts = ((wins * 2) * multiplier); };if(otlosses!="" &amp;&amp; otlosses &gt; 0){ otlosspts = (otlosses * multiplier); };if(solosses!="" &amp;&amp; solosses &gt; 0){ solosspts = (solosses * multiplier); };var projectPts =  parseInt(winpts) + parseInt(otlosspts) + parseInt(solosspts); var teamName=document.getElementById("team").value; document.getElementById("outputtext").value =  teamName + ":" + wins + "-" + losses + "-" + otlosses + "-" + solosses + " Proj pts:" + Math.round(projectPts); };&lt;/script&gt;&lt;br /&gt;&lt;form name="nhlpointsextrapolator"&gt;&lt;table border=1&gt;&lt;TR&gt;&lt;TD colspan="2"&gt;&lt;select name="team"&gt;&lt;option value="NYR"&gt;Rangers&lt;/option&gt;&lt;option value="PIT"&gt;Penguins&lt;/option&gt;&lt;option value="NYI"&gt;Islanders&lt;/option&gt;&lt;option value="PHI"&gt;Flyers&lt;/option&gt;&lt;option value="BOS"&gt;Bruins&lt;/option&gt;&lt;option value="BUF"&gt;Sabres&lt;/option&gt;&lt;option value="MON"&gt;Canadiens&lt;/option&gt;&lt;option value="TOR"&gt;Maple Leafs&lt;/option&gt;&lt;option value="OTT"&gt;Senators&lt;/option&gt;&lt;option value="TAM"&gt;Lightning&lt;/option&gt;&lt;option value="ATL"&gt;Thrashers&lt;/option&gt;&lt;option value="FLA"&gt;Panthers&lt;/option&gt;&lt;option value="CAR"&gt;Hurricanes&lt;/option&gt;&gt;&lt;option value="WAS"&gt;Capitals&lt;/option&gt;&lt;option value="CBJ" selected="true"&gt;Blue Jackets&lt;/option&gt;&lt;/select&gt;&lt;/td&gt;&lt;/tr&gt;&lt;TR&gt;&lt;TD align="right"&gt;Wins:&lt;/td&gt;&lt;TD&gt;&lt;input type="textbox" value="0" name="wins"&gt;&lt;/input&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;TR&gt;&lt;TD align="right"&gt;Losses:&lt;/td&gt;&lt;TD&gt;&lt;input type="textbox" value="0" name="losses"&gt;&lt;/input&gt;&lt;/td&gt;&lt;/tr&gt;&lt;TR&gt;&lt;TD align="right"&gt;OT Losses:&lt;/td&gt;&lt;TD&gt;&lt;input type="textbox" value="0" name="otlosses"&gt;&lt;/input&gt;&lt;/td&gt;&lt;/tr&gt;&lt;TR&gt;&lt;TD align="right"&gt;SO Losses:&lt;/td&gt;&lt;TD&gt;&lt;input type="textbox" value="0" name="solosses"&gt;&lt;/input&gt;&lt;/td&gt;&lt;/tr&gt;&lt;TR&gt;&lt;TD colspan="2"&gt;&lt;button onclick="javascript:calculate()"&gt;Project Season Points&lt;/button&gt;&lt;/td&gt;&lt;/tr&gt;&lt;TR&gt;&lt;TD align="right"&gt;Projection Text:&lt;/td&gt;&lt;TD&gt;&lt;input type="textbox" size="25" name="outputtext"&gt;&lt;/input&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/form&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-5586607405706555818?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/5586607405706555818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/10/nhl-points-projecter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/5586607405706555818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/5586607405706555818'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/10/nhl-points-projecter.html' title='NHL Points projecter'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-3675024058215543249</id><published>2007-10-04T14:58:00.000-04:00</published><updated>2007-10-04T15:14:55.394-04:00</updated><title type='text'>Expression Blend 2 Resize Page Canvas</title><content type='html'>Using Expression Blend 2 September Preview, I needed to make my application larger than the default size of 640 x 480. After changing the main canvas's height and width to 800 x 600, the XAML validated, but when I went to deploy, I got the message "The name 'Initialize Component' does not exist in the current context". In fact, even once I switched back to 640 x 480 mode, I still got this message.&lt;br /&gt;&lt;br /&gt;The default .html file in the project has a css style sheet that has 640 x 480 coded in it that also needs to be revised. But even if this changed, the error message remained. &lt;br /&gt;&lt;br /&gt;What I found was that this style sheet needs to be revised in Visual Studio first, then built in Visual Studio before you even touch Blend if you need to change from the original size defaults.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-3675024058215543249?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/3675024058215543249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/10/expression-blend-2-resize-page-canvas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/3675024058215543249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/3675024058215543249'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/10/expression-blend-2-resize-page-canvas.html' title='Expression Blend 2 Resize Page Canvas'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-2766171589237702305</id><published>2007-09-18T08:58:00.000-04:00</published><updated>2007-09-20T10:25:54.109-04:00</updated><title type='text'>Burn VOB to DVD playable on TV</title><content type='html'>I had multiple .vob video files on multiple dvds that I wanted to be able to burn to a DVD that was viewable on TV via DVD Player. I am using CyberLink Power2Go, which came pre-installed on my laptop to burn the DVD. When I go to add the vob files to the disk compilation, I couldn't do it, as the .vob (Video Object) format is unsupported. Finally I found the program TMPGEnc which allows you to select multiple .vob files and converts them to MPEGs, which then can be burned to DVD via Power2Go. I was able to successfully view the videos on my TV via DVD player. The TMPGEnc trial version is disabled after 14 days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-2766171589237702305?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/2766171589237702305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/09/burn-vob-to-dvd-playable-on-tv.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/2766171589237702305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/2766171589237702305'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/09/burn-vob-to-dvd-playable-on-tv.html' title='Burn VOB to DVD playable on TV'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-3779273121175253147</id><published>2007-09-11T17:49:00.000-04:00</published><updated>2007-09-11T18:09:47.040-04:00</updated><title type='text'>BizTalk Orchestration Error "Parameter name: val"</title><content type='html'>I ran across this error message in an orchestration recently (in a Message Assignment shape). It didn't tell me a whole lot, and as of right now, doesn't give me many Google results.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#c0c0c0;"&gt;OrchestrationValue cannot be null.&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#c0c0c0;"&gt;Parameter name: val&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;...and there is no parameter named 'val' in the Orchestration.&lt;br /&gt;&lt;br /&gt;In the offending Message Assignment shape I have created a new message, and in that message I assign values based on distinguished fields in another message, so at first I thought maybe one of the nodes in my new message was MinOccurs=1 by default, and not being created, but no, they were all there. The problem ended up being that one of the Distinguished Fields I was referencing did not exist - the map that created the message had no source link to that field.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-3779273121175253147?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/3779273121175253147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/09/biztalk-orchestration-error-parameter.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/3779273121175253147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/3779273121175253147'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/09/biztalk-orchestration-error-parameter.html' title='BizTalk Orchestration Error &quot;Parameter name: val&quot;'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-4731125108067098514</id><published>2007-09-04T15:51:00.000-04:00</published><updated>2007-09-05T08:29:42.310-04:00</updated><title type='text'>Error TF10121</title><content type='html'>Error TF10121 can happen in Visual Studio 2005 when you try to add a project to TFS source control that has the same name as a previously deleted project. Often, closing and re-opening the solution resolves the issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-4731125108067098514?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/4731125108067098514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/09/error-tf10121.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/4731125108067098514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/4731125108067098514'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/09/error-tf10121.html' title='Error TF10121'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-6702892458522235265</id><published>2007-09-04T10:41:00.000-04:00</published><updated>2007-09-06T08:53:21.806-04:00</updated><title type='text'>BizTalk SQL Adapter schema generation wizard confusion</title><content type='html'>As I was attempting to generate some schemas in BizTalk based on the results of a stored proc, I was having problems passing the necessary parameters to the procedure - even though I specified valid param values in the wizard, the generated SQL script always passed NULL for every parameter every time. Here's how the params are initially set in the wizard once you select the desired proc:&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5106365775419893202" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_nhdkQsCpsCI/Rt10njkdZdI/AAAAAAAAABM/6AsyexJjrEc/s320/SQLAdapter01.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;...and once you check the value box, the string NULL is initially populated as the value.&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_nhdkQsCpsCI/Rt10njkdZeI/AAAAAAAAABU/i8z-VN6TyXA/s1600-h/SQLAdapter02.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5106365775419893218" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_nhdkQsCpsCI/Rt10njkdZeI/AAAAAAAAABU/i8z-VN6TyXA/s320/SQLAdapter02.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, here's where the problem occurs - if you set the values you actually want, and click generate, the generated script still has null values for all params, like&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#cccccc;"&gt;EXEC UpsertGlobalHeader @ContentType=NULL, @CustomerId=NULL,...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;even though valid values are specified:&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_nhdkQsCpsCI/Rt10njkdZfI/AAAAAAAAABc/DZuntvLD2No/s1600-h/SQLAdapter03.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5106365775419893234" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_nhdkQsCpsCI/Rt10njkdZfI/AAAAAAAAABc/DZuntvLD2No/s320/SQLAdapter03.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I finally found the answer &lt;a href="http://msdn2.microsoft.com/en-us/library/aa578440.aspx"&gt;here&lt;/a&gt;. Apparently, checking the checkbox in the Value column means set to NULL no matter what value you enter in the text area. So you need to UNcheck the value box, enter the text value you want for that param's value, and click generate. That sets the desired value in the script. In the case below, the @ContentType param would be set to 'PROD', all others would be still set to NULL.&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_nhdkQsCpsCI/Rt10nzkdZgI/AAAAAAAAABk/Pg5MSDtLxuA/s1600-h/SQLAdapter04.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5106365779714860546" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_nhdkQsCpsCI/Rt10nzkdZgI/AAAAAAAAABk/Pg5MSDtLxuA/s320/SQLAdapter04.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa578440.aspx"&gt;&lt;br /&gt;http://msdn2.microsoft.com/en-us/library/aa578440.aspx&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-6702892458522235265?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/6702892458522235265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/09/biztalk-sql-adapter-schema-generation.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/6702892458522235265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/6702892458522235265'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/09/biztalk-sql-adapter-schema-generation.html' title='BizTalk SQL Adapter schema generation wizard confusion'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_nhdkQsCpsCI/Rt10njkdZdI/AAAAAAAAABM/6AsyexJjrEc/s72-c/SQLAdapter01.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-5751328606201015831</id><published>2007-08-27T17:35:00.000-04:00</published><updated>2007-08-27T20:06:24.698-04:00</updated><title type='text'>Restricting values in a BizTalk XML schema element</title><content type='html'>If you need to limit the range of values in an element in an XML schema select the element and under properties, select Restriction. An Enumeration property now appears below it. Enter the values you would like to limit your field to.&lt;br /&gt;&lt;br /&gt;The Enumeration property is enabled in the mapping tool as well, so you can view the allowed values from there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-5751328606201015831?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/5751328606201015831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/08/restricting-values-in-biztalk-xml.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/5751328606201015831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/5751328606201015831'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/08/restricting-values-in-biztalk-xml.html' title='Restricting values in a BizTalk XML schema element'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-827437508192168798</id><published>2007-08-27T13:57:00.000-04:00</published><updated>2007-08-27T14:10:22.666-04:00</updated><title type='text'>Logical existence, IsNil, Empty String comparison</title><content type='html'>In a BizTalk Map, a logical functoid evaluating whether the field value = "" (empty string) always evaluates to true for empty nodes, even if that field doesn't exist in the source schema.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;&amp;lt;xsi:nil="true"&amp;gt;&amp;lt;/&amp;gt;&lt;/span&gt;&lt;br /&gt; -isNil = TRUE, Logical Existence = TRUE, Logical = [Empty String] = TRUE&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;&amp;lt;&amp;gt;&amp;lt;/&amp;gt;&lt;/span&gt;&lt;br /&gt; -isNil = FALSE, Logical Existence = TRUE, Logical = [Empty String] = TRUE&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;NO ELEMENT&lt;/span&gt;&lt;br /&gt;-isNil = FALSE, Logical Existence = FALSE, Logical = [EmptyString] = TRUE&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-827437508192168798?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/827437508192168798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/08/logical-existence-isnil-empty-string.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/827437508192168798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/827437508192168798'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/08/logical-existence-isnil-empty-string.html' title='Logical existence, IsNil, Empty String comparison'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-2365584856143386323</id><published>2007-08-22T11:03:00.000-04:00</published><updated>2007-08-27T09:31:54.146-04:00</updated><title type='text'>BizTalk Table Looping functoid scenario</title><content type='html'>Recently, I was mapping one schema to another using the BizTalk mapping tool, and I came across a transformation requirement that was a good case for using the Table Looping and Table Extracting functoids:&lt;br /&gt;&lt;br /&gt;The source schema contained a product entity and this entity had multiple (up to 3) vendors in the product schema like:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;&amp;lt;product&amp;gt;&lt;br /&gt;&amp;lt;productId&amp;gt;1&amp;gt;/productId&amp;gt;&lt;br /&gt;&amp;lt;globalVendorRelatedInfo&amp;gt;vendorInfo&amp;gt;/globalVendorRelatedInfo&amp;gt;&lt;br /&gt;&amp;lt;otherProductInfo&amp;gt;info&amp;gt;/otherProductInfo&amp;gt;&lt;br /&gt;&amp;lt;vendorCode1&amp;gt;1&amp;gt;/vendorCode1&amp;gt;&lt;br /&gt;&amp;lt;vendorCode2&amp;gt;2&amp;gt;/vendorCode2&amp;gt;&lt;br /&gt;&amp;lt;vendorCode3&amp;gt;3&amp;lt;/vendorCode2&amp;gt;&lt;br /&gt;&amp;lt;product&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;the destination schema required that the vendors be a repeating element inside a vendors parent element. So basically the xml data needed to be normalized. Below is the mapping grid required:&lt;br /&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/11047840@N04/1204162157/"&gt;&lt;img height="175" alt="TableLooping01" src="http://farm2.static.flickr.com/1132/1204162157_1e4499f40e.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The first parameter is the scoping parameter... for these purposes, I just have it hard-coded to 3, since there are 3 vendors. The second parameter specifies the number of columns per row. After that, any fields or values required must be added. Make sure to name your links, otherwise, the field parameter names will default to the unwieldy xpath query string. Drag a link from the Table Looping functoid to the target element in the destination schema.&lt;br /&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/11047840@N04/1205024362/"&gt;&lt;img height="313" alt="TableLooping02" src="http://farm2.static.flickr.com/1236/1205024362_b2036fca42.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After that, configure the columns to contain the required data. If you require that no destination record be created, select the Gating checkbox, and give the first column a boolean value. If the first column is false, no destination record will be created for that row.&lt;br /&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/11047840@N04/1205024444/"&gt;&lt;img height="313" alt="TableLooping03" src="http://farm2.static.flickr.com/1017/1205024444_9bb3faf1e8.jpg" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then create a Table Extracting functoid for each column and specify the Table Looping functoid, and column number.&lt;br /&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/11047840@N04/1204162495/"&gt;&lt;img height="313" alt="TableLooping04" src="http://farm2.static.flickr.com/1379/1204162495_4967c11d82.jpg" width="500" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-2365584856143386323?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/2365584856143386323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/08/table-looping-functoid-scenario.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/2365584856143386323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/2365584856143386323'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/08/table-looping-functoid-scenario.html' title='BizTalk Table Looping functoid scenario'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1132/1204162157_1e4499f40e_t.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-5067473509935665201</id><published>2007-08-18T00:05:00.000-04:00</published><updated>2007-09-07T10:06:04.622-04:00</updated><title type='text'>Text editor comparison</title><content type='html'>I was on a project recently where I found that I needed to be able to open and save extremely large (&gt;500 MB) files, and easily preserve the formatting and line endings. After much research and testing here's what I found:&lt;br /&gt;(This was on a Dell desktop w/2GB RAM)&lt;br /&gt;&lt;br /&gt;The standard Windows editors, NotePad and WordPad were way too slow once the files were &gt; ~200MB. Plus WordPad reformatted the document to replace individual [CR]s or [LF]s with [CR][LF]s - no matter what format type was selected.&lt;br /&gt;&lt;br /&gt;The Visual Studio 2005 editor was very good about not reformatting the line endings... it gives an initial alert asking if you want to reformat them, then preserves them correctly when you click No. Unfortunately, this editor is also very sluggish opening large files.&lt;br /&gt;&lt;br /&gt;You can preserve formatting also with NotePad++, and UltraEdit fairly easily, but again, when it comes to very large files they just don't cut it. My perennial favorite, PFE (Programmer's File Editor), also starts to choke once the files get large.&lt;br /&gt;&lt;br /&gt;Finally, there's across TextPad5... It is amazing how fast it not only opens but saves gigantic text files in a matter of seconds. The only issue I have with it is that the format type reverts to the first type in the list every time, rather than the most recent choice, but IMO if you need to read/save really large text files, TextPad5 is so much faster than anything else, that it is easily the way to go. Special thanks to &lt;a href="http://mattcasto.blogspot.com/"&gt;Matt Casto&lt;/a&gt; for recommending it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-5067473509935665201?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/5067473509935665201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/08/text-editor-comparison.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/5067473509935665201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/5067473509935665201'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/08/text-editor-comparison.html' title='Text editor comparison'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-9106843142132123729</id><published>2007-08-08T16:21:00.000-04:00</published><updated>2007-08-09T09:19:00.249-04:00</updated><title type='text'>BizTalk replace functoid trick</title><content type='html'>Here's a neat trick I stumbled on in the BizTalk 2006 mapping tool:&lt;br /&gt;&lt;br /&gt;If you need to change a functoid that has many links associated with it, instead of deleting the functoid and creating a new one and re-adding all the links, you can just drop the new functoid on the old functoid in the grid. All links and parameters are preserved, just the functoid changes. Here's an example:&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/11047840@N04/1053474063/" title="Photo Sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1417/1053474063_eac28ed909.jpg" width="500" height="211" alt="FunctoidTrickBefore" /&gt;&lt;/a&gt;&lt;br /&gt;Say you want to change the Not Equal functoid to an Equal functoid&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/11047840@N04/1054332512/" title="Photo Sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1254/1054332512_fe92e4c500.jpg" width="500" height="223" alt="FunctoidTrickAfter" /&gt;&lt;/a&gt;&lt;br /&gt;Dropping the Equal functoid changes the functoid type, but preserves the links and parameters.&lt;br /&gt;&lt;br /&gt;I even tried replacing a functoid with another functoid requiring limited parameters and it still preserves everything even if there are illegal parameters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-9106843142132123729?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/9106843142132123729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/08/biztalk-replace-functoid-trick.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/9106843142132123729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/9106843142132123729'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/08/biztalk-replace-functoid-trick.html' title='BizTalk replace functoid trick'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1417/1053474063_eac28ed909_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-3009101305396521478</id><published>2007-05-15T06:54:00.001-04:00</published><updated>2007-08-08T13:41:47.943-04:00</updated><title type='text'>PGPBlackBox  Decryption Memory Issue</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;I'm using EldoS PGPBlackBox to decrypt a PGP file in a BizTalk pipeline.  A pipeline component at the Decode stage calls the DecryptAndVerify(stream, count) method of PGPBlackBox  to decrypt the stream, and returns that decrypted stream.&lt;br /&gt;&lt;p&gt;It works fine until the incoming file is &amp;gt; 15 Mb or so, then the call to DecryptAndVerify causes a System.OutOfMemoryException. One of the tech support  suggestions from EldoS was to try to reproduce the issue using their  PGPFilesDemo app. The first run through did not reproduce the error, however in the demo app, it is decrypting to a FileStream by default, not a MemoryStream. If no target file is selected when running the app however, it does try to use a MemoryStream and the error is reproduced - it causes a System.OutOfMemoryException.  (Not selecting a target file causes the pgpReader_OnCreateOutputStream() event handler to execute the else{} clause).&lt;br /&gt;&lt;p&gt;So for now decrypting to a FileStream gets around the OutOfMemory exception, but unfortunately the workaround will be having a separate receive port for decrypting to a file, then picking that decrypted file up by another port for the rest of the processing. &lt;br /&gt;&lt;p&gt;The ticket's still open so hopefully we can improve the workaround...&lt;br /&gt;&lt;/p&gt;&lt;br /&gt; &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-3009101305396521478?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/3009101305396521478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/05/pgpblackbox-decryption-memory-issue.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/3009101305396521478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/3009101305396521478'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/05/pgpblackbox-decryption-memory-issue.html' title='PGPBlackBox  Decryption Memory Issue'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5757598327990864100.post-721520158160760760</id><published>2007-04-07T15:01:00.001-04:00</published><updated>2007-04-08T13:48:11.760-04:00</updated><title type='text'>Voice-to-text experiment</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;As I am trying out the voice to text feature of Windows, I am discovering enough interesting aspects/problems/features that I thought I'd share it.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;My original intent was to use the dictation feature of Windows Speech Recognition with MSOffice OneNote and basically dictate a Blog as I encounter interesting and informative things. In speech recognition training, it explains that the recognition initially will start around 80-90% accuracy, and end up around 95% after completing all of the training sessions.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I've gotten through 5 of the 8 sessions at this point, and 95% is about right, but I've found that it's not just the sound of the words, but the context of the sentences that it uses to convert the audio to text. Here's an example of the recognition, with my spoken word(s) in quotes, followed by the actual recognition text:&lt;br /&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black;"&gt;'cup'&lt;/span&gt;&lt;span style="color:red;"&gt; top&lt;/span&gt;&lt;br /&gt;&lt;span style="color:black;"&gt;'cup'&lt;/span&gt;&lt;span style="color:red;"&gt; The&lt;/span&gt;&lt;br /&gt;&lt;span style="color:black;"&gt;'cup'&lt;/span&gt;&lt;span style="color:red;"&gt; Company&lt;/span&gt;&lt;br /&gt;&lt;span style="color:black;"&gt;'cup'&lt;/span&gt;&lt;span style="color:red;"&gt; Come&lt;/span&gt;&lt;br /&gt;&lt;span style="color:black;"&gt;'cup of coffee'&lt;/span&gt;&lt;span style="color:red;"&gt; cup of coffee&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So it won't recognize it the word 'cup' by itself, but it recognizes the entire phrase 'cup of coffee'. I have even specifically recorded the word 'cup' in Speech Tools. It is substituting words that would more logically occur as the first word in a sentence.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The training also appears to be having an effect - when I said 'cup of coffee' above, I used my actual speaking voice that I used in training, so it was really like 'cuppa coffee'. If I use exaggerated enunciation, it doesn't work:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;'cup of coffee' &lt;span style="color:red;"&gt;Couple of coffee&lt;/span&gt;&lt;br /&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#444444;"&gt;And even when it goes totally haywire, the gibberish does have somewhat of a logical sentence structure to it. So if this blog ever seems psychadelic, you'll know I'm trying it out again. Here is this same paragraph using unedited voice-to-text:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;And even when it goes totally a long DJ version does have somewhat of a logical sentence structure to solve this ballgame ever seen psychedelic you'll know I'm trying it out and here's the same&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:red;"&gt;Using unedited voice to tax&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Funny it didn't recognize the phrase voice-to-text.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So anyway, I'm not sure how usable this is right now, but maybe it could be used to record notes to self reminders etc. I'll try more after finishing training.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5757598327990864100-721520158160760760?l=blog.danshultz.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.danshultz.com/feeds/721520158160760760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.danshultz.com/2007/04/voice-to-text-experiment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/721520158160760760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5757598327990864100/posts/default/721520158160760760'/><link rel='alternate' type='text/html' href='http://blog.danshultz.com/2007/04/voice-to-text-experiment.html' title='Voice-to-text experiment'/><author><name>danshultz</name><uri>http://www.blogger.com/profile/07055779184289832421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/-WLagl00dMgk/TfwAxO_4pOI/AAAAAAAAArI/xKfVo1GcRDE/s220/BlogPhoto.png'/></author><thr:total>0</thr:total></entry></feed>
