tag:blogger.com,1999:blog-21862364832486623132024-03-05T01:49:50.241-08:00Learning and Getting Things DoneTimhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.comBlogger25125tag:blogger.com,1999:blog-2186236483248662313.post-54932983752398646052016-04-11T20:08:00.001-07:002016-04-11T20:08:40.086-07:00SSL Certificates and Azure Web AppsUse it or lose it. The good thing about getting a cert with a 3-year expiration period is that I don't have to worry about it for 3 years. The bad thing is that I forget how in the world I did it last time. I waited until the last minute (or last three hours) to renew a cert today for an Azure web app.<div>
<br /></div>
<div>
A call to GoDaddy support led to a statement saying that because Microsoft hasn't provided them with documentation, they can't provide their customers with assistance due to potential liability issues.</div>
<div>
<br /></div>
<div>
Of course, there are plenty of blog posts written about this in various forms, but even an Azure post wasn't quite helpful for my lack of knowledge in this area. But <a href="http://labs.bjfocus.co.uk/2014/06/setting-up-ssl-for-azure-website-using-godaddy/">this one was</a>. So glad people document things like this.</div>
Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-10891549714408291672016-01-20T11:02:00.000-08:002016-03-31T05:57:53.502-07:00Tested with IE, Chrome, Safari...oh waitWhen I start a new project, particularly when doing a POC, I'll often grab something I've done in the past that is similar and begin to tweak from there. But as POCs tend to evolve, problems occur when my assumptions remain the same. That "tested with..." disclaimer tag that came across from the borrowed project just won't cut it as is.<br />
<br />
Case in point: a pretty important line of code that can help generate revenue. Turns out this didn't work with Safari / Chrome:<br />
<blockquote class="tr_bq">
$('#btnSubmit').trigger('submit');</blockquote>
But this does:<br />
<blockquote class="tr_bq">
$('form#ajaxForm').trigger('submit');</blockquote>
A good reminder to actually test and not assume. I'm glad I have a co-worker who has a knack for breaking things before customers do.Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-65862123187018765532015-09-14T06:02:00.000-07:002016-03-31T06:42:50.793-07:00Priorities and getting things doneThis morning I read an older but popular blog post on the <a href="http://www.joelonsoftware.com/items/2009/09/23.html">duct tape programmer</a>. It is colorful commentary that I've read it before and provides a good reminder on prioritization and getting things done.<br />
<br />
There are, no doubt, occasions where you don't want the duct tape programming methodology used, for example when writing the software that keeps an airplane in the sky or a machine that keeps medicine flowing properly into your veins. But I don't work for a company doing those kinds of things. I'm part of a company that buys, sells and delivers building products. We're in an industry that is slow overall to use technology in order to gain competitive advantage and become more effective and profitable. So using "duct tape" here is actually pretty useful and necessary. To paraphrase Joe's post, <br />
<blockquote class="tr_bq">
<h4>
I'm not here to write code; I'm here to create value for this organization.</h4>
</blockquote>
This mindset isn't about making a choice between value-added functionality wrapped in that lovely VB6 gray on the one hand (we have too many of those still in use, unfortunately), and useless but pleasant looking UIs on the other. The development tools and platforms today don't present that one-or-the-other choice. Conceiving, creating and putting into the hands of our business partners the tools that make a difference is paramount. And if it takes duct tape at times to help us do that, so be it.Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-27909239544589217152015-05-29T07:27:00.001-07:002015-05-30T05:49:40.587-07:00Windows 8.1 App Mystery - controls randomly disappear but are still interactiveLate last year my team delivered a <a href="http://timfalkins.blogspot.com/2014/11/deploying-winrt-app-150-sale-reps.html">Windows 8.1 modern app to our outside sales force</a> equipped with ThinkPad 10 tablets. There were bugs to be worked out, of course, and we've still got plenty to fix. But one problem has been truly discouraging given our inability to reproduce it.<br />
<br />
<h3>
The Problem</h3>
From time to time, we'd get reports from sales that the top third of screens in the app would simply disappear, leaving just the background of the screen. The weird thing was that the controls that disappeared were actually still interactive. If you knew where they were, you could tap them and do things. But a horrible user experience, especially when you're in front of a customer.<br />
<br />
We even saw this problem ourselves on occasion but couldn't reproduce it. The only way to get around it was to close the app and reopen it.<br />
<br />
Over time, we came to see that this problem generally occurred after the device had come out of sleep mode. One of our more observant sales reps pointed this out and stated that if he manually closed the app after each customer encounter, the next time he woke the device and used the app he rarely had the issue.<br />
<br />
<h3>
Reproducing the problem</h3>
I ran across two SO threads describing the same exact problem: <a href="http://stackoverflow.com/questions/27426181/windows-8-xaml-controls-disappearing-not-rendering-intermittently">here</a> and especially <a href="http://stackoverflow.com/questions/28760034/windows-8-xaml-possible-bug-using-images-causes-text-controls-to-disappear/">here</a>. We could actually reproduce the issue using <a href="http://stackoverflow.com/questions/28760034/windows-8-xaml-possible-bug-using-images-causes-text-controls-to-disappear/">the method he found</a>:<br />
<blockquote class="tr_bq">
<div style="background-color: white; border: 0px; clear: both; color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; line-height: 19.5px; margin-bottom: 1em; padding: 0px;">
"I can re-create the problem by going to task manager and creating a dump file for the running app. After I do this twice and resume the app, the two text blocks disappear."</div>
</blockquote>
He also described how the use of images was related to this problem. Sure enough, we were using an image for our app's background.<br />
<br />
<h3>
Fixing the problem</h3>
We removed the background image and instead used a simple Brush. At that point, we could no longer reproduce the issue using the steps above -- problem resolved.<br />
<br />
I'm still not sure why the problem occurred in the first place. Possibly related to the lower memory devices (2GB)? Or maybe just something we were doing wrong in the app when trying to use a background image?Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-4389156412292339842014-11-25T11:12:00.003-08:002014-12-14T19:00:33.616-08:00Deploying a modern app to a distributed sales force in a not-so-modern industryEarlier this year a great opportunity came my way: the proof of concept WinRT app created to showcase the possibilities for our sales force was received favorably and my team was given the green light to make it a reality. We started preliminary design work in June, finished the first release in October, and we're currently wrapping up the second release that includes order entry capabilities.<br />
<br />
<h4>
Project Goal</h4>
The goal was pretty ambitious given the short time frame and its impact on 150+ sales reps throughout North America:<br />
<ul>
<li>Distribute new ThinkPad 10 devices running Win 8.1 Pro with WWAN service.</li>
<li>Convert the reps to Office 365 in the process.</li>
<li>Deploy an easy-to-use, touch-first sales intelligence app that provides far more actionable information about our customers than ever before available in the field.</li>
</ul>
<div>
Regarding the sales intelligence app, it certainly helped to have had previous experience creating an occasionally-connected <a href="http://www.scripturebox.com/">Win 8 app</a>. Here's an overview of the new sales app:<br />
<br /></div>
<h4>
Functional highlights</h4>
<div>
<ul>
<li>Daily engagement list at the rep's fingertips for easy access to customer information.</li>
<li>Graphical sales trends, filterable by product segments.</li>
<li>Recent history of quotes and orders for a rep's customer base.</li>
<li>Rich customer profile info, including sales history and trends, AR and aging data, contacts, quote and order history, even recent history of customer phone interactions with our inside sales.</li>
<li>Real-time inventory and pricing data on all products.</li>
<li>Ordering capabilities.</li>
</ul>
<h4>
Technical highlights</h4>
</div>
<div>
<ul>
<li><a href="http://shop.lenovo.com/us/en/tablets/thinkpad/thinkpad-10/">Lenovo's ThinkPad 10</a> device running Win 8.1 Pro, joined to the domain.</li>
<li>Designed as an <a href="http://en.wikipedia.org/wiki/Occasionally_connected_computing">occasionally-connected</a> app using SQLite for caching data locally, with a variable refresh schedule so that more static data is cached for longer, while volatile data is refreshed more frequently.</li>
<li>WinRT (C# / XAML).</li>
<li><a href="http://www.cslanet.com/">CSLA.NET framework</a> for encapsulating all business logic, not to mention the built-in plumbing necessary to support our 4-tier architecture.</li>
<li><a href="https://mvvmlight.codeplex.com/">MVVM Light toolkit</a>.</li>
<li><a href="https://raygun.io/">RayGun </a>error and crash reporting service.</li>
<li><a href="http://www.telerik.com/windows-universal-ui">Telerik's UI controls</a> for Windows Universal apps</li>
<li>SCCM for managing deployment, as this is <u>not</u> distributed through the Windows Store.</li>
</ul>
<h4>
Other highlights</h4>
<div>
<ul>
<li>The ThinkPad 10 device replaces the sales reps' existing desktops and/or laptops. Given that it runs Win 8.1 Pro, we've even loaded some of our legacy apps onto the device, while other legacy apps are accessed via VMWare's VM View remote solution. It's going to be an adjustment for our sales reps...time will tell.</li>
<li>This project has certainly helped push our small development group further along to thinking about application design in a more modern way, using newer technologies, frameworks and toolkits.</li>
<li>The benefits of the CSLA .NET framework show yet again that our investment in learning and adopting the framework has proven valuable, as we can easily leverage our knowledge to build maintainable applications with lower cost.</li>
<li>RayGun, if you've not checked it out, is quite handy. It allows us to be notified of errors encountered by our distributed users before our help desk even hears about it. It pays to read <a href="http://www.hanselman.com/blog/WeAreAbstractingOnTheShouldersOfGiants.aspx">Hanselman</a>. </li>
<li>This app provides a modern experience that parallels our 20 year old legacy order entry app (still VB6 to this day). It has been a great exercise for our IT group and users to be challenged to think outside of the way-we've-always-done-it box. Old paradigms didn't work with a touch-first app, so creativity was required. At the same time, 20 years of an actively developed application reveal that a lot of thought was put in to it by a lot of smart people during that time.</li>
</ul>
</div>
<div>
<br /></div>
</div>
Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-15610711325478577382014-06-26T06:56:00.001-07:002014-06-27T04:52:40.531-07:00IIS 7.5 + Windows Authentication: some users still getting prompted for credentialsIt has been a while since I created an intranet web app that uses Windows Authentication. I recently ran into a problem where some users were able to authenticate correctly while others were prompted for credentials. I spent a lot of time checking and verifying a number of things in the process of trying to figure this out: <br />
<h1>
</h1>
<h2>
<span style="font-size: x-large;">Settings Checked</span></h2>
<h4>
IIS Authentication settings</h4>
<blockquote>
Made sure Anonymous was disabled, Windows Authentication was enabled.</blockquote>
<blockquote>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrcsHnDaZCpSbSTEAOUQovU9IzV13Qk3Gh5oCD6l5ylwSFYJvlV1SHX5ID6YHshkRUZx7yfqkz1zDes65YiUp8O9er6CbjoNRxoYd_3iJvz-r6O3sVi9ZY4p40PM-Z6lNOWlTTkRubjm-K/s1600-h/image%25255B2%25255D.png"><img alt="image" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8YDNqTsZ1GrD-xtPlJS25k704hftV7V4P9-I95wJ67uyei4GuM3dv_SJj6keZvU1JLQeFvVo5CQ_YcYF-_OIugOO3RC_ezznqozNYk0FVpEDSryk03gK04IBBznbMio4pjfSOn2ZyXi0C/?imgmax=800" height="103" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="177" /></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiJnPKRvKJr30TecwzmZEq2XMLGLw7-L-uxjVGwa4h3QcFoAVNvpRj4fvhTy4VYHEZNBK3VIEj80dWbMXTw-AUmLjwhYnEFVzaPCTT6YpSz6XlmIWf2ZN_4H3g8NgKw3vj-XVuXWZbD-f_/s1600-h/image%25255B23%25255D.png"><img alt="image" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ2cgCqV6OUCOsFx3LZXh2eqT4k2j-2uJSj8KaUDlTfZCZPyw5PVpZj5iqie5wuAIirMwKPhyDgzPsdhMVMjAOlT7IzMOF4zYLIdCQVMNfcX9wOhNs_pcS6vPFSOiuB6erq3gkrEVIc6Uf/?imgmax=800" height="182" style="background-image: none; border: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="400" /></a><br />
I saw a number of sites that said to bump up NTLM to the top of the Providers list…which isn’t recommended. (Didn’t work anyway.)</blockquote>
<h4>
Web.config Settings - made sure the settings were correct there:</h4>
<blockquote>
<authentication mode="Windows" /><br />
<identity impersonate="false" /></blockquote>
<h4>
Browser-based settings for users who were prompted for credentials:</h4>
<blockquote>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXYZjRKP-cGgDbQAZocEk-LWmFDcGT8W2pc2N-2bGTP17lq4jwNlHwO-cGhyphenhyphenDPYf67LIaZpVgqmHk893y3bMsi6yBGtk-waq7EnuEuhLAHqcwC5q0vJD-NF6Gs24EtP8lKoYLClztXKDSY/s1600-h/image%25255B31%25255D.png"><img alt="image" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTJu9t8bPxdX4EtzfRKrPMW-_FemS7xpPw_7kQrXMudtxGryyoZRr2kyuAvdCs0iNnyrJt4TAoTxZJiv7oLumRPG84BWpUsms4CoipZsZhLcAx2rBDk2fK7dzdrIWu9D94A0k3NqsTHb3G/?imgmax=800" height="531" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="447" /></a></blockquote>
<blockquote>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCnpPS8Zwyg9XlAfy6_ta_wUgjlSxUpdJDmhLOWpalsgQnCnSdj8410DGb2W3X2eeaGlry4iH7upALPw1Z03KvfXxak05oPnuZx1yd3WAWUJj6WNqbBx_zpbmIpN6_DUUFei0p9saYF-PF/s1600-h/image%25255B35%25255D.png"><img alt="image" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizf4B417krDjzzhnYFkA1ZWhmN5s-DW2BZhLId3WitszNBTl0Z3zE4bCiDFMvnWB6AAsqPW9036T-PqxAdoFrGldnTuJa_9soEOTQSLQYdrMWjz2FAUVEoweiL3sZmucHuwH9nOpPLcU_o/?imgmax=800" height="196" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="418" /></a></blockquote>
<blockquote>
Also added the app to the Trusted Sites just to make sure.</blockquote>
<h2>
<span style="font-size: x-large;">Solution</span></h2>
I realized that setting Windows Authentication in IIS causes the current user’s identity to be used when the site’s files are accessed on disk. In the case of the users who were prompted, they weren’t in an AD group that had permission to the root directory. But granting access to the root folder isn’t an option for security reasons, especially if you’re storing a database connection string in the web.config file.<br />
<br />
Thanks to <a href="http://weblogs.asp.net/owscott/iis-using-windows-authentication-with-minimal-permissions-granted-to-disk">this post</a>, I learned IIS 7.5 has a setting that forces IIS to utilize <em>another</em> identity for disk access even when Windows Authentication is utilized. The key is to set the <em>authenticatedUserOverride</em> option to use the “UseWorkerProcessUser” value. Of course, make sure the worker process has permissions to the app's directory.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif6E8i1-zBzLc4rgTnrnDuH1qPbPX51_BPg0d-UdLIv6AYiSSLAKcE9vUOQsXYam8fvAIsttCJE7IXpw69BpfUcEjPN3ZCVv8wkkaju7joYiCcsQOiKV_2_cOyIPsiiFgNXKQnCKIsVg6u/s1600-h/image%25255B38%25255D.png"><img alt="image" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ6Vr1ZRXJCKSzNwcJkJbraS4zLABnrUyD2KzWs_U1QTw88jen7jDcklsHJaQIGNPG1RxBX2vpx2qY33UqzlO3DKp2XL564g95U-YNO3Eqp-zjL9cQXLnIO97RUIW5EAzIO4GhCin0s82C/?imgmax=800" height="99" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="244" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFhoCK5fsTHKMswHFRpMs5NLji7NpDpDG-JRp5kvzWFlVLb7bijxk-beo5WEZwhGHHTS56VHAMPIVE_nhR39z10sW-oAzC2mGC6dM2qtsx5p92HiereuIHuIcJ4JLK0waQeffmJPfIY0xQ/s1600-h/image%25255B47%25255D.png"><img alt="image" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNWQS6hIGXv_QUg4-Di3WiZC08FjXY83hVxw7vEXAUxpRzZRQzuBKJ1nAT0JDLoxjHk4XMJtpinOmL7gqjMN_H1cxay0snWmNDu3VuKKK-NpkA_Pc-jYlG1fFvIidvS_mE0ALySoJc0qNh/?imgmax=800" height="499" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="423" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvJb769LOCR4Zgm0h9tlreMacNCp0vJDztndK71qyCSA7cCLt9Tc5GzmpDSmf1Nw_mDG3Ihnnwo1OaYbXUzwqaFE3-nvSRX_rCF2fZP2Abq10PDakCAWMT5u8y-3yvY2uyVzQqPky2KUd-/s1600-h/image%25255B55%25255D.png"><img alt="image" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj28zPLK1v7jfJrJqEcuuHxAGz1JxyisNhTMyYE0B-TKiT4m5yRXzsiNtCHkLXoyZ0_KHL6CF2W5OEKu6Zst4nmhUH4uNU4q4VF4Fcsg1CJMw5StUnSjYvSsslWbcWYgPATqDkgZbXOS2qS/?imgmax=800" height="115" style="background-image: none; border: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="400" /></a><br />
<br />
<h2>
One more thing</h2>
User.Identity.Name no longer works once the change is made. To compensate, you can use the altnerative: Request["LOGON_USER"].<br />
<br />Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-26918058923616821892014-06-20T12:47:00.000-07:002014-06-20T12:48:50.527-07:00No endpoint listening: WinRT calling a WCF service on the corporate networkScenario: WinRT app interacting with CSLA business objects hosted in a WCF service on an app server in the corporate domain.<br />
<div>
<br /></div>
<div>
As is typical, early in development the data portal is hosted locally on my dev machine. And the transition to hosting the data portal on a separate app server is generally straight forward. But with this WinRT app, the first I've done for the corporate environment, I ran into this problem:<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3hurxnPjTMicAmvi9-cPhO6mkOmOuAPDxk6NiZ3hHhBKMxnnOpbinDUesb-dUc0M1LzrLSRw-wIZiIr1mBexNQ28-y4fSNyV0H0wTPoVzDenr0Fe60MUm-WN9gX2cdLnSaAqtM2iozmEj/s1600/TopError.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3hurxnPjTMicAmvi9-cPhO6mkOmOuAPDxk6NiZ3hHhBKMxnnOpbinDUesb-dUc0M1LzrLSRw-wIZiIr1mBexNQ28-y4fSNyV0H0wTPoVzDenr0Fe60MUm-WN9gX2cdLnSaAqtM2iozmEj/s1600/TopError.png" height="96" width="400" /></a></div>
<div>
<br /></div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br />
Drilling down, the inner-most exception message was actually this:</div>
<blockquote class="tr_bq">
"An attempt was made to access a socket in a way forbidden by its access permissions."</blockquote>
<div>
But everything was set up the same way my recent MVC projects have been set up. All permissions in IIS were correct.</div>
<div>
<br /></div>
<div>
The problem, it turns out, was not with IIS or the remote data portal. <a href="http://blogs.msdn.com/b/piyushjo/archive/2011/10/22/calling-a-wcf-service-from-a-metro-application-cross-machine-scenario.aspx">This article</a> pointed to the necessity of declaring the right capabilities in the WinRT app's package manifest.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpOgVKtuB5OMpZX27HYjiwHXqFfCOX-EFgm1iH5JaVyojgg2V5dNfjHMjz1EKpW-CEGygVeEX64d5R1E5wf4MYhv-HmjUNT2VODgJ86wlCDt5F4vwm4goi336nMn-MOS_wQoKw_ca-8CFz/s1600/Fix.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpOgVKtuB5OMpZX27HYjiwHXqFfCOX-EFgm1iH5JaVyojgg2V5dNfjHMjz1EKpW-CEGygVeEX64d5R1E5wf4MYhv-HmjUNT2VODgJ86wlCDt5F4vwm4goi336nMn-MOS_wQoKw_ca-8CFz/s1600/Fix.png" height="223" width="320" /></a></div>
<div>
<br /></div>
Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-10907145093906882002014-03-25T05:50:00.000-07:002014-03-25T05:52:30.982-07:00Browser Link and Slow Page Loads while Debugging with VS 2013I recently started noticing sluggishness in IE 11 when debugging a MVC 4.5 app with VS2013. Specifically, after a page would seemingly load, it wouldn't respond to my mouse movement until what seemed like a full second or two later. It was concerning. I had been making a lot of changes, especially around the inclusion of images, and I figured I'd done something less than ideal that was causing the page load time to increase. So I hit F12 and start capturing network traffic:<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwjf09Y21GOoXpyCGFBejLK2B-AeBioDxA3zihim1FhV9_LPhvOHDFIR6fnXj4whPd51WrkexwoTCANeEXd5zOEw7BbCj85fOsP9x5mX-dyh9_tlj3MMBxfI1WooJL2TuRX1di9jWR41nA/s1600/F12.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwjf09Y21GOoXpyCGFBejLK2B-AeBioDxA3zihim1FhV9_LPhvOHDFIR6fnXj4whPd51WrkexwoTCANeEXd5zOEw7BbCj85fOsP9x5mX-dyh9_tlj3MMBxfI1WooJL2TuRX1di9jWR41nA/s1600/F12.PNG" height="186" width="400" /></a></div>
<br />
Besides a couple issues that I need to look at, one thing appeared odd to me: the second-to-last line with a URL of "/__browserLink/..."<br />
<br />
I wasn't sure what it was, but it appeared to be the issue. I then find out that this is a <a href="http://www.asp.net/visual-studio/overview/2013/using-browser-link">new and pretty useful tool for testing with multiple browsers</a>. And there is an easy way to disable it when not needed, which resolves the slowness issue.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuMFTxogkphol5Hg5d-NANurE4-C1juWsIhK4cupKzWRQY8Vx5Wj7I2aaMXKm4wrTx-ZQZSCRO3aXIEDTJSUIDVgNg2fEAG2tExItWRaSXydIzUshvum5FB_cxMWRyAjUkMoKYgjfycfFm/s1600/BrowserLink.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuMFTxogkphol5Hg5d-NANurE4-C1juWsIhK4cupKzWRQY8Vx5Wj7I2aaMXKm4wrTx-ZQZSCRO3aXIEDTJSUIDVgNg2fEAG2tExItWRaSXydIzUshvum5FB_cxMWRyAjUkMoKYgjfycfFm/s1600/BrowserLink.PNG" height="113" width="400" /></a></div>
<br />
IE seemed to suffer a little more from the Browser Link delay than did Chrome.Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-6228981790081955062014-03-06T09:23:00.001-08:002014-03-06T11:20:46.049-08:00Using Shared Scripts in Azure Mobile ServicesWindows Azure is outstanding. If you haven't checked it out, do so: <a href="https://www.windowsazure.com/">WindowsAzure.com</a>/. They provide a free trial if you want to experiment. You also get free compute time if you have an MSDN account.<br />
<br />
There are, of course, tasks in Azure that require know-how. One of those tasks that took me a good deal of time to get right is using <i>shared scripts</i> in Azure Mobile Services.<br />
<br />
<h3>
</h3>
<h3>
Background on Mobile Services</h3>
With mobile services, you're given an easy way to intercept and modify the calls from your apps before they perform database CRUD actions. You do this using Node.js scripts. The common examples I've seen shows how to compare the UserId of the user to that of individual records being affected by the request. For instance, in the Read script you might do this:<br />
<br />
<span style="background-color: yellow;">query.where({ UserId: user.userId });</span><br />
request.execute();<br />
<br />
This appends an additional where clause to your query so that it is filtered to return only records where the UserId field matches the requesting user's Id. (This assumes you've specified that the permissions for the particular table script is set to "Only Authenticated Users.")<br />
<br />
But sometimes you want to perform other actions, such as looking up data from another table, logging activity, updating data, etc., prior to submitting the actual request passed by your app. If you need to perform these common tasks across a number of service calls, you have the option of writing that code <i>once </i>and sharing it across all service methods. But this is where I struggled...how to get it set up and working correctly.<br />
<br />
<h3>
</h3>
<h3>
Creating and Using Shared Scripts</h3>
By default, the <a href="https://manage.windowsazure.com/">Azure management tool</a> provides an easy way to manage your table scripts. But the tool doesn't provide visibility (yet) to shared scripts...that is, scripts not tied to one particular table action (insert, update, delete, read). To do this, you have two options: (1) set up a Git repository and configure that in your mobile service or (2) use the Azure command-line tool to upload/manage shared scripts. I'm not using Git, so I opted for the command-line tool.<br />
<br />
<h4>
</h4>
<h3>
Task #1 - installing the command-line tool</h3>
The first problem I ran into was that, after <a href="http://www.windowsazure.com/en-us/downloads/">installing the tool</a>, I was confused on which tool to use. I had a few show up in my search from the Win 8 start screen:<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNToHC8QSnCpViOnj8AnFqVJdtXytv1SUyRI1g9EAaLUhmR6yjMkxtRVkwDwEgg0dbdwrSvdUTeGM65EfNkleyP3272bRcbpM-yq3tQIaucwLVV5ONXhaRMrYX5HtUynkDy0GF7csJbH9i/s1600/AzureCommandLineToolSearch.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNToHC8QSnCpViOnj8AnFqVJdtXytv1SUyRI1g9EAaLUhmR6yjMkxtRVkwDwEgg0dbdwrSvdUTeGM65EfNkleyP3272bRcbpM-yq3tQIaucwLVV5ONXhaRMrYX5HtUynkDy0GF7csJbH9i/s1600/AzureCommandLineToolSearch.png" height="320" width="287" /></a></div>
<br />
Later, I found this useful tip from Chris Avis in a <a href="http://blogs.technet.com/b/chrisavis/archive/2013/06/01/migrating-my-home-network-to-azure-part-3-install-and-use-the-windows-azure-command-line-tools.aspx">TechNet blog</a>, which enabled me to find a helpful command line tool that for some reason isn't visible after installing from the above link:<br />
<blockquote class="tr_bq">
"Interesting Tidbit – <b>PowerShell ISE</b> gets installed as a part of this process, but you won’t find it by searching on the Start screen of a Windows 8 machine. But it is there! You just have to dig for it. It is actually located in the Control Panel –> Administrative Tools area"</blockquote>
This tool includes a nice utility to search through various commands.<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggPSkEQn-BgKpEBmYGCz-CaovVBzeVChRysv02Nk4rFIFnTCWOjICvkZKeXkJ60vebm408Ir39nHwQVXmxOMXFVUvv6kGhI38igccmJGulk5t_WPXrNfT3z6GTVtG4zfYJO2Du8TWiT3S4/s1600/PowerShellIse.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggPSkEQn-BgKpEBmYGCz-CaovVBzeVChRysv02Nk4rFIFnTCWOjICvkZKeXkJ60vebm408Ir39nHwQVXmxOMXFVUvv6kGhI38igccmJGulk5t_WPXrNfT3z6GTVtG4zfYJO2Du8TWiT3S4/s1600/PowerShellIse.png" height="260" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<h4 style="text-align: left;">
</h4>
<h3 style="text-align: left;">
</h3>
<h3 style="text-align: left;">
</h3>
<h3 style="text-align: left;">
Task #2 - managing shared scripts from the command line</h3>
From the command line, you can view and manage all of your scripts (table, shared and custom). Here's a <a href="http://www.windowsazure.com/en-us/documentation/articles/command-line-tools/#Mobile_Scripts">helpful list of script commands</a>. Before you do that, however, you need to link your Azure account to the command-line tool:<br />
<br />
<pre class="prettyprint prettyprinted" style="background-color: white; border: 1px solid rgb(136, 136, 136); color: #505050; font-family: monospace, monospace; font-size: 14px; line-height: 21px; padding: 3px 7px; white-space: pre-wrap; word-wrap: break-word;"><span class="pln" style="color: black;">azure account download</span></pre>
<br />
That will open a browser prompting you to sign in, upon which it will download the publish file so that you can reference that with your next command:<br />
<br />
<pre class="prettyprint prettyprinted" style="background-color: white; border: 1px solid rgb(136, 136, 136); color: #505050; font-family: monospace, monospace; font-size: 14px; line-height: 21px; padding: 3px 7px; white-space: pre-wrap; word-wrap: break-word;"><span class="pln" style="color: black;">azure account </span><span class="kwd" style="color: #000088;">import</span><span class="pln" style="color: black;"> </span><span class="pun" style="color: #666600;"><</span><span class="pln" style="color: black;">path</span><span class="pun" style="color: #666600;">-</span><span class="pln" style="color: black;">to</span><span class="pun" style="color: #666600;">-</span><span class="pln" style="color: black;">settings</span><span class="pun" style="color: #666600;">-</span><span class="pln" style="color: black;">file</span><span class="pun" style="color: #666600;">></span></pre>
<br />
See the <a href="http://www.windowsazure.com/en-us/documentation/articles/mobile-services-manage-command-line-interface/">documentation</a> which explains this process in more detail. Once you have your account set up, you can begin uploading your shared scripts. For example:<br />
<br />
<pre class="prettyprint prettyprinted" style="background-color: white; border: 1px solid rgb(136, 136, 136); color: #505050; font-family: monospace, monospace; font-size: 14px; line-height: 21px; padding: 3px 7px; white-space: pre-wrap; word-wrap: break-word;"><span class="pln" style="color: black;">azure mobile script upload mytestservice shared/myscript.js -f c:\users\tim\documents\myscript.js</span></pre>
<br />
Note that I had trouble with the above command <i>without</i> specifying the script file location using the -f option.<br />
<br />
<h4>
</h4>
<h3>
</h3>
<h3>
Task #3 - using the shared script in your table scripts</h3>
Finally, here's an example of consuming a shared script from within a table script:<br />
<blockquote class="tr_bq">
function read(query, user, request) {<br />
// retrieve the shared module for common code<br />
var shared = require('../shared/myscript'); <span style="background-color: yellow;">//note the absence of the .js extension</span><br />
<br />
// Test for compliant app version<br />
if (!shared.isAppVersionValid(request.parameters.AppVersionNumber))<br />
{<br />
request.respond(statusCodes.BAD_REQUEST, 'The app version is not valid');<br />
}<br />
<br />
request.execute();<br />
}</blockquote>
<a href="http://blogs.msdn.com/b/carlosfigueira/">Carlos Figueira</a> (MSFT) has produced a number of helpful posts on working with Mobile Service scripts. The Azure documentation also contains good information. I found the following pages to be the most helpful in getting a handle on mobile service scripts and shared scripts:<br />
<br />
<ul>
<li><a href="http://blogs.msdn.com/b/carlosfigueira/archive/2012/09/21/playing-with-the-query-object-in-read-operations-on-azure-mobile-services.aspx">Playing with the query object in Read operations on Azure Mobile Services</a></li>
<li><a href="http://www.windowsazure.com/en-us/documentation/articles/mobile-services-how-to-use-server-scripts/#command-prompt">Working with server scripts in Mobile Services</a></li>
<li><a href="http://blogs.msdn.com/b/carlosfigueira/archive/2013/06/14/custom-apis-in-azure-mobile-services.aspx">Custom APIs in Azure Mobile Services</a></li>
<li><a href="http://www.windowsazure.com/en-us/documentation/articles/command-line-tools/#Commands_to_manage_mobile_services">Windows Azure command-line tool for Mac and Linux</a></li>
<li><a href="http://www.windowsazure.com/en-us/documentation/articles/mobile-services-manage-command-line-interface/">Automate mobile services with command-line tools</a></li>
</ul>
<div>
<br /></div>
Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-79796732724134303642013-12-26T08:51:00.001-08:002013-12-26T10:46:55.555-08:00Silencing the Arc Touch SE MouseI’ve been using the Microsoft Arc Touch Surface Edition mouse for almost a month now. In fact, I’m coming up on the last possible return date. The thought of returning it has occasionally crossed my mind because sometimes I can’t use the mouse without annoying others in room due to the vibrating/clicking sound the mouse makes when you scroll. But as I discovered today, you can easily turn off the sound. And conveniently, all you have to do is install an app from the Windows Store.<br />
<a href="http://lh3.ggpht.com/-PwyAvfEWzN8/UrxehjGgmhI/AAAAAAAAAM0/ZtS_vjow-2Y/s1600-h/image%25255B9%25255D.png"><img alt="image" border="0" height="225" src="http://lh3.ggpht.com/-iG7BGI96q5M/UrxeiBVGCXI/AAAAAAAAAM4/A6sddBPt_Ew/image_thumb%25255B10%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="363" /></a><br />
<a href="http://lh4.ggpht.com/-zP-jcwrS7sI/UrxeilnFlbI/AAAAAAAAANE/ZeXWvenO3tk/s1600-h/image%25255B14%25255D.png"><img alt="image" border="0" height="278" src="http://lh4.ggpht.com/-stctXj1v7yA/UrxejAivt9I/AAAAAAAAANI/jtZrPsvhBaI/image_thumb%25255B16%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="363" /></a><br />
Interestingly, once I turned it off I realized that I kind of miss the feedback. Easy enough, though, to toggle it on/off when needed.<br />
Overall, the mouse itself is convenient. Easy to flatten and carry, requiring little space. It’s not the most comfortable mouse I’ve used but I think I’m fine with the tradeoff I get for the portability.<br />
<a href="http://lh5.ggpht.com/-HBVxLy0cGDE/UrxejjsaBdI/AAAAAAAAANU/3Bzs8e291EA/s1600-h/WP_20131226_001%25255B4%25255D.jpg"><img alt="WP_20131226_001" border="0" height="214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvP00QC7Yghq4bLs1drM4CauyCDXo5PKF1BH01AoAYN3aDgYGT1GtYgLE7ZQWaLHcadVFr7SNw0JadAzw9e2g86g8td_dfbHYy1yBNSJhSBDAlj3WA4V1eWJUDQOPnAv7GdjSAsDqTNl4E/?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="WP_20131226_001" width="364" /></a>Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com2tag:blogger.com,1999:blog-2186236483248662313.post-74655049282223726582013-12-18T10:05:00.000-08:002014-03-06T11:19:47.696-08:00Yoga 2 Pro - Initial ThoughtsI'd been planning for most of this past year to retire my older Dell Vostro 1520 laptop and replace it with a Surface Pro 2. Even when the original Surface Pro was just out the gate, I was <strike>content with</strike> resigned to waiting for the better-performing Haswell-based variety I kept hearing about.<br />
<br />
I wanted the convenience and versatility of a tablet/laptop combo to use as my one device no matter where I went. I needed something powerful enough to run Visual Studio and SQL while also light and portable enough to kick back and enjoy a touch-first experience with the more-than-sufficient number of good Modern UI apps available in the Windows Store.<br />
<br />
<h4>
I did have one nagging question, however, that kept me from pulling the trigger: what would it <i>really be like</i> to work many hours straight on the smaller 10.6" screen, particularly when staring at the code editor?</h4>
<br />
While debating this in my mind, I began seeing a new round of convertible Ultrabooks that were intriguing. They were touch-capable laptops <i>first</i>, but were small enough and light enough to be used as tablets in certain scenarios. The more I thought about it, they fit my personal needs better.<br />
<br />
I settled on the Lenovo <a href="http://shop.lenovo.com/us/en/laptops/ideapad/yoga/yoga-2-pro/">Yoga 2 Pro</a>, the next iteration of their Yoga series featuring a 4th-gen Intel (Haswell) processor. I also looked at the <a href="http://shop.lenovo.com/us/en/laptops/thinkpad/yoga-series/yoga/">ThinkPad Yoga</a>, but ended up with the Yoga 2 Pro for two primary reasons:<br />
<ol>
<li>Best Buy carried the Yoga 2 Pro at a <a href="http://www.bestbuy.com/site/ideapad-yoga-2-pro-ultrabook-2-in-1-13-3-touch-screen-laptop-8gb-memory/1817254.p;jsessionid=0B19270CB58A7E75E2273AE6CCF800B0.bbolsp-app04-162?id=1219065404810&skuId=1817254&st=yoga%202%20pro&cp=1&lp=1">good price given the specs</a>. In particular, their excellent Christmastime return policy made it a safe option.</li>
<li>The Y2P was thinner/lighter than the ThinkPad Yoga, with a slightly larger screen and a somewhat more appealing profile. It was also a bit less expensive.</li>
</ol>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq1AT0GaGPXul5he2_2TQbyQpDOfyABGwVqLQuZkenZNh83Bg9Jg8vVXghTGZAFHXvPk0HlgsuVEqbRd2FFApaYixh4ofoRUW3BBHojkBRIMjZefoHZwo7yqooPY7ZoNulJCuXBaQ_HxBk/s1600/Y2P.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq1AT0GaGPXul5he2_2TQbyQpDOfyABGwVqLQuZkenZNh83Bg9Jg8vVXghTGZAFHXvPk0HlgsuVEqbRd2FFApaYixh4ofoRUW3BBHojkBRIMjZefoHZwo7yqooPY7ZoNulJCuXBaQ_HxBk/s320/Y2P.jpg" height="265" width="320" /></a></div>
<div>
<br /></div>
<div>
Here's my take on using it for the first two weeks:<br />
<h4>
The Good:</h4>
</div>
<div>
<ul>
<li>Convenient. It is lightweight and fast.</li>
<li>Sharp screen. The high resolution has generally not been an issue for me on the desktop. The DPI setting defaults to 200%, and it is needed. Visual Studio does a pretty good job scaling at that DPI setting, as do Office and IE. SQL Management Studio doesn't seem to scale as well (the Object Explorer tree nodes are a little small), but it is sufficient. Even Chrome isn't as bad as I'd heard, <strike>but the tabs don't utilize the space available to them</strike>. [UPDATE: It appears that Chrome tabs are now displaying more appropriately]</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAcg1Wlq_ipq_6FgwuO0UfB4UeAYuUAite_zzpxNlE4CIrHvlq00himE3jByG_K-v_LTCaWqYo3ZyxeUNDwXIPxpr0aNyyAhq3v8wcv0KmKr_J2gF7jGVUxgq3722DXeGLi2DSkyExn7fv/s1600/SQL.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAcg1Wlq_ipq_6FgwuO0UfB4UeAYuUAite_zzpxNlE4CIrHvlq00himE3jByG_K-v_LTCaWqYo3ZyxeUNDwXIPxpr0aNyyAhq3v8wcv0KmKr_J2gF7jGVUxgq3722DXeGLi2DSkyExn7fv/s400/SQL.PNG" height="135" width="400" /></a></div>
<div>
<br /></div>
<ul>
<li>Tablet mode. It's nice, but I haven't used it much, and I think that fact confirms that I made the right choice in going with a laptop-first device.</li>
</ul>
</div>
<h4>
</h4>
<h4>
The (Initially) Not-So-Good:</h4>
<ul>
<li>Wi-Fi wouldn't work out of the box. The wireless adapter didn't even show up in Device Manager. Installing Lenovo's wireless adapter driver resolved the issue, but I'm not sure what happened there.</li>
<li>Bluetooth was a major issue and almost caused me to return the device. My <a href="http://www.microsoftstore.com/store/msusa/en_US/pdp/Arc-Touch-Mouse-Surface-Edition/productID.286866800">Arc Touch SE</a> mouse was constantly dropping. I thought that perhaps the Y2P's single-band Wireless-N card could be conflicting with Bluetooth since that uses the same 2.4GHz band. After a few frustrating days messing with drivers I decided to uninstall the Lenovo driver and use the generic one. That still didn't help. But I then came across a thread in Lenovo's user forum that pointed to one simple setting. Since unchecking this setting, it has been solid - only one drop in a few days. I still haven't re-installed Lenovo's Bluetooth driver, but it suspect that won't be an issue.</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfp0gvoLeUTfRD8zrz5FYD65bxMfBKPysYVnJqFalelnJ0v0J3FwGFSxETKX5LnqXO15-lbnn_-HeMV_W1qQzC5RToyXEJohrOUEp7_1F6Ts5CL3B2OkOFyr4UYy61eIjUELhT1SerEA2h/s1600/BluetoothMouseFix.PNG" imageanchor="1" style="display: inline !important; margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfp0gvoLeUTfRD8zrz5FYD65bxMfBKPysYVnJqFalelnJ0v0J3FwGFSxETKX5LnqXO15-lbnn_-HeMV_W1qQzC5RToyXEJohrOUEp7_1F6Ts5CL3B2OkOFyr4UYy61eIjUELhT1SerEA2h/s320/BluetoothMouseFix.PNG" height="133" width="320" /></a></div>
<h4>
<ul>
<li><span style="font-weight: normal;">I did also get a few BSOD errors related to Bluetooth, but that was early on and was probably related to messing around with the drivers while trying to fix the drops. None of that has occurred since those first couple days.</span></li>
</ul>
</h4>
<h4>
Other considerations:</h4>
<ul>
<li>I continue to occasionally see this message in the System event log when booting, pertaining to my use of Hyper-V (needed for WP8 development): "<span style="color: red;">The speed of Hyper-V logical processor 2 is being limited by system firmware.</span>" I'm not sure why, and I'm not sure yet whether this is a big deal. I can still run the WP8 emulator.</li>
<li>The Function keys come defaulted to using Lenovo's specific settings, and this is actually pretty useful in most scenarios. But this setting can be reversed in the BIOS so you get the normal use of the F keys without pressing Fn.</li>
<li>I like the feel of the keyboard, but haven't completely adjusted yet to the layout of the Page Up/Down, Home, End keys.</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA1zKnGImRU0yYEHuxKiT3lhcgsFiAbOHbCubfjeQnS-kK0gZoswooHOp5gsCwkh3BTohEh09j9Di8SpzxUpvGdgLwhhvdYe7Su3Brss-rq-xmr0pyNHJw9ozqg6AMrfoItPDz6_Wc-3Vj/s1600/WP_20131218_003+(1).jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA1zKnGImRU0yYEHuxKiT3lhcgsFiAbOHbCubfjeQnS-kK0gZoswooHOp5gsCwkh3BTohEh09j9Di8SpzxUpvGdgLwhhvdYe7Su3Brss-rq-xmr0pyNHJw9ozqg6AMrfoItPDz6_Wc-3Vj/s320/WP_20131218_003+(1).jpg" height="320" width="196" /></a></div>
<br />
I've got another few weeks to return it, should I need to. But I'm hoping I'll continue to find the performance good and the device stable. I still think the Surface Pro 2 is a great device and might work for my scenario, but I am glad I went with a larger device given my needs.<br />
<br />
Final note worth mentioning: I did wipe the primary partition and install a clean copy of Windows 8.1 Pro.Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com14tag:blogger.com,1999:blog-2186236483248662313.post-32572291424100288222013-09-06T12:15:00.001-07:002013-09-06T12:15:40.199-07:00Building multi-interface apps with CSLAI've benefited from using the <a href="http://www.cslanet.com/">CSLA framework</a> in a number of projects at work over the past couple years. A recent <a href="http://www.scripturebox.com/">side project</a> gave me an opportunity to stretch my knowledge a bit, and CSLA was a big part of making it happen in a way that made sense and let me focus on the app's logic and presentation and less on the plumbing.<br />
<br />
Here's a poor man's visual of what it looks like to support both a <a href="http://apps.microsoft.com/windows/en-us/app/scripture-box/7dbb93e1-0894-4f00-86f2-d24c1d9dd9ab">Windows Store app</a> and an <a href="http://www.scripturebox.com/">Azure-hosted Web app</a>:<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEjw-XteF9LzZ_SA_aTkyhioax7s-tiSwhyaK4f0VfcjTCqJCtSmhhMdvRPPlQQjh6gye-pjgL3UjVD2PU1gHW3_GPkRk5bxQfe7De9tlIQzPdxfIhZRowXFEYL-1vEjtiSEJG4ZIrdAd_/s1600/SB_CSLA_Diagram.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEjw-XteF9LzZ_SA_aTkyhioax7s-tiSwhyaK4f0VfcjTCqJCtSmhhMdvRPPlQQjh6gye-pjgL3UjVD2PU1gHW3_GPkRk5bxQfe7De9tlIQzPdxfIhZRowXFEYL-1vEjtiSEJG4ZIrdAd_/s400/SB_CSLA_Diagram.PNG" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
By no means a textbook example of how to use CSLA, but it works and is maintainable.Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-19459712181017751592013-08-02T16:46:00.000-07:002013-08-09T05:15:51.713-07:00Good Ideas Take TimeI enjoy the challenges of learning and applying new skills or concepts to produce something that has value, but sometimes wish I could arrive at the destination quickly. From the design, to learning the techniques or frameworks necessary to implement the design, to the inevitable gotchas, lots of time is often required to bring ideas to fruition.<br />
<br />
It has been a little over a year since I started my personal project called <a href="http://www.scripturebox.com/">Scripture Box</a>. When I began, all I knew was that I wanted to create a "simple WinRT app." But reality set in (actually, it still is):<br />
<ul>
<li>XAML differences between WPF/Silverlight and WinRT</li>
<li>WinRT application life cycle, app contracts, etc.</li>
<li>The whole occasionally-connected app scenario</li>
<ul>
<li>SQLite</li>
<li>Azure Mobile Services</li>
<ul>
<li>Gotcha - can't update a SQL Azure table via Moible Services unless the Id column is explicitly lower-case (id vs Id)!</li>
</ul>
</ul>
<li>Continual design revisions as I've observed more and better apps in the Store</li>
<li>Windows Store Design Guidelines</li>
<li>Windows Store API</li>
<li>Ins and outs of a LLC</li>
<ul>
<li>legal issues</li>
<li>taxes</li>
<li>funding</li>
</ul>
<li>Having a good web presence</li>
<li>Azure Websites and Cloud Services</li>
<li>Marketing your product</li>
<li>Creating a good web app experience for reaching more people</li>
<li>Pricing an app / service</li>
<ul>
<li>What the stats show vs what you think makes sense</li>
<li>Second-guessing your pricing strategy</li>
</ul>
<li>Prioritizing the countless ideas that come to mind for improving your app / service, with each involving more learning and gotchas</li>
</ul>
<div>
I've learned a lot in the past year on this project - more than I anticipated. In the forefront is the reality that worthwhile ideas take time to develop.</div>
Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-50543726294403608052013-07-19T11:44:00.003-07:002013-07-19T11:46:56.804-07:00Binding a ComboBox in a DataTemplate with XAMLI've been struggling to figure out how to bind a ComboBox inside of a ListView's DataTemplate. The problem I experienced was that when I changed the value of one ComboBox, all other ComboBoxes in the list got changed to the same value. Turns out the answer is to simply use the <span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">IsSynchronizedWithCurrentItem </span><span style="background-color: white; color: #222222;"><span style="font-family: inherit;">property</span></span><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">.</span><span style="background-color: white; color: #222222;"><span style="font-family: inherit;"> Hope I remember this one the next time around.</span></span><br />
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<blockquote class="tr_bq">
ItemsSource="{Binding Source={StaticResource deliveryTimesViewSource}, Mode=OneWay}"<br />DisplayMemberPath="<wbr></wbr>DeliveryHourDesc" </blockquote>
<blockquote class="tr_bq">
<span style="background-color: yellow;">IsSynchronizedWithCurrentItem=<wbr></wbr>"False"</span> </blockquote>
<blockquote class="tr_bq">
<span style="background-color: yellow;"></span>SelectedItem="{Binding DeliveryHour, Mode=TwoWay, Converter={StaticResource deliveryHourToObjectConverter}<wbr></wbr>, ConverterParameter={<wbr></wbr>StaticResource deliveryTimesViewSource}}"</blockquote>
</div>
Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-44086150826904225792013-04-03T13:00:00.002-07:002013-04-05T12:27:30.269-07:00Printing SSRS reports directly (without previewing)In case this helps someone else looking to do the same thing...I had a hard time finding consistent information on how to enable direct printing (i.e. without previewing) SSRS reports. Perhaps I just didn't look long enough, but almost everything I saw was either incomplete or not that helpful. The one source I found to be clear and helpful is by <a href="http://blogs.msdn.com/b/brianhartman/archive/2009/02/27/manually-printing-a-report.aspx">Brian Hartman</a>. Source code included.Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-43118651965119135852013-03-04T18:55:00.003-08:002013-03-05T12:54:56.327-08:00Scripture Box to the Web!I've finally begun working on my goal to bring <a href="http://www.scripturebox.com/">Scripture Box</a> to the Web. Scripture Box currently exists as a Windows RT app (<a href="http://apps.microsoft.com/windows/en-us/app/scripture-box/7dbb93e1-0894-4f00-86f2-d24c1d9dd9ab">published</a> in the Windows Store) and is <i>slowly</i> but steadily seeing adoption. But as I continue to view the website stats, it is clear a large number of people have an older version of Windows (mostly 7, some Vista/XP, but I even saw a couple Win 2000 and NT) as well as Macs. Of course, there are a number of visits by mobile devices as well (approx 15% of all visits).<br />
<br />
While I would enjoy taking a shot at iOS or Android (probably using <a href="http://xamarin.com/">Xamarin</a>), I believe I'll get the most return out a simple but effective HTML5/Js app. I'm mainly still thinking through technical design at this stage, and the following resources have provided plenty of good considerations:<br />
<br />
<ul>
<li>Scott Hanselman's <a href="http://www.hanselman.com/blog/BuildingWebAppsWithASPNETJumpStart8HoursOfFREETrainingVideos.aspx">ASP.NET Jump Start</a> videos</li>
<li>Scott Allen's <a href="http://www.pluralsight.com/training/Courses/TableOfContents/mvc4-building">ASP.NET MVC 4 PluralSight course</a></li>
<li>John Papa's <a href="http://www.pluralsight.com/training/Courses/TableOfContents/spa">Single Page Apps PluralSight course</a></li>
</ul>
<br />
I've already set up my ASP.NET MVC 4 project, installed <a href="http://vswebessentials.com/">Web Essentials</a>, hooked up a little bit of data and published a few tests to <a href="http://www.windowsazure.com/">Windows Azure</a>. The project templates Microsoft added to MVC 4 provide a HUGE benefit. I'm also looking forward to getting even more out of the <a href="http://www.cslanet.com/">CSLA Framework</a>. I plan to write a post about the overall design after I'm done.Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-21226289523152050472013-02-12T16:51:00.000-08:002013-03-05T12:53:06.662-08:00RDP via Surface RT and CitrixUntil today, my only disappointment with the Surface RT was that I couldn't connect remotely to my PC at the office. The problem wasn't with the RDP capabilities included in Windows RT. It was that I couldn't connect (or didn't know how to connect) to my company's network from the Surface. But the following steps did the trick:<br />
<ol>
<li>Logged in to the Citrix portal <u>with the IE Compatibility Mode setting turned on;</u></li>
<li>Launched the Remote Desktop app;</li>
<li>Specified that I wanted to open the resulting .ica file using the <a href="http://apps.microsoft.com/windows/en-us/app/citrix-receiver/dcbba44a-a3fd-41f4-951d-1117998c583d">Citrix Receiver app</a>.</li>
</ol>
It feels great to longer need my laptop on a trip just in case I need to deal with an issue at the office. Now I can have access to Visual Studio and all other tools from the Surface RT.Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-68788110284823442572013-01-30T19:55:00.000-08:002013-03-05T12:53:39.132-08:00Determining Internet Connection status in a WinRT appLast week I received word from someone using the <a href="http://scripturebox.com/">Scripture Box</a> Windows 8 app that he continually received notifications that he wasn't connected to the internet. That is, the app thought he was disconnected and therefore wouldn't try to sync with the Azure mobile service used for cloud storage.<br />
<br />
I was quite confused. In all my testing - both with connected and disconnect scenarios (on multiple machines) - the app always correctly identified my internet connection status. I was using code similar to the following:<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX4YUFhH5vo_7B1KvySiylhOkECUH2m7CF4OhDwO4lUEX3wMFy_-JfCmqFl1wJvFrisoZ1VH3lZd2c_c0PwUDuBmRHnn1DBI-hzvckDICiQPnriOCZK79LtaA8oFY_2o-zzRhrVo1t-hGj/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> var ConnectionProfiles = NetworkInformation.GetConnectionProfiles();
foreach (var connectionProfile in ConnectionProfiles)
{
if (connectionProfile.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess)
{
App.IsConnectedToInternet = true;
doSync = true;
break;
}
}
</code></pre>
<br />
While searching for potential problems, I ran across another slightly different method to discover one's connection status:<br />
<br />
<pre style="background-position: initial initial; background-repeat: initial initial; border: 1px dashed rgb(204, 204, 204); font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="word-wrap: normal;"><span style="background-color: #f0f0f0; color: black;"> ConnectionProfile conProfile = NetworkInformation.</span><span style="background-color: yellow;">GetInternetConnectionProfile</span><span style="background-color: #f0f0f0; color: black;">();
if (conProfile != null && conProfile.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess)
{
App.IsConnectedToInternet = true;
doSync = true;
}
</span></code></pre>
<br />
From the documentation I couldn't quite tell what the difference was, and which was the correct to use.<br />
<br />
I also happened to stumble upon <a href="http://www.irisclasson.com/2012/07/04/example-metro-app-winrt-background-task-that-uppdates-internet-connection-and-metering-roaming-information-based-on-network-changes/comment-page-1/">this helpful post</a> that basically included a simple but effective manual approach to checking for internet connectivity:<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX4YUFhH5vo_7B1KvySiylhOkECUH2m7CF4OhDwO4lUEX3wMFy_-JfCmqFl1wJvFrisoZ1VH3lZd2c_c0PwUDuBmRHnn1DBI-hzvckDICiQPnriOCZK79LtaA8oFY_2o-zzRhrVo1t-hGj/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public static async Task<bool> IsConnectedToInternetManualCheck()
{
HttpWebRequest req;
HttpWebResponse resp = null;
Uri url = null;
url = new Uri("http://microsoft.com");
req = (HttpWebRequest)WebRequest.Create(url);
try
{
resp = (HttpWebResponse)await req.GetResponseAsync();
req.Abort();
req = null;
resp = null;
return true;
}
catch
{
req.Abort();
req = null;
return false;
}
}
</code></pre>
<br />
I figured this was a last resort effort to check for internet connectivity. So which method to use? I couldn't reproduce the issue, and I certainly didn't want to break what was working for others. I also didn't want to go through the release/certification process multiple times for the same issue. (For a few seconds I was tempted to see if this person would be interested in side-loading for testing purposes.)<br />
<br />
I decided to take the safe approach and chain the three methods together: first checking with NetworkInformation.GetInternetConnectionProfile(). If that didn't work, then I'd loop through all network connections with NetworkInformation.GetConnectionProfiles(), and finally, if necessary, using the manual method above. Not necessarily pretty, but in the end one of the two additional methods worked. I just wish I knew which one.<br />
<br />
And on an encouraging side note - the app update passed through the Microsoft Store certification process in approximately 12 hours(!) and was available in the store shortly thereafter. Good job, Microsoft.<br />
<br />
<br />Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com1tag:blogger.com,1999:blog-2186236483248662313.post-50971722843707867102013-01-01T13:09:00.002-08:002013-03-05T12:54:34.235-08:00WinRT App Development from Design to CertificationFor the past six months I've worked on a <a href="http://scripturebox.com/">Windows 8 (WinRT) app</a> that started out as a request by my wife, but grew into something I planned to distribute via the Windows Store. Lots of learning, planning and late nights were required.<br />
<br />
I started to loose steam around the beginning of December, but I pushed through that last week until I was finally ready to submit to the store for certification. I thought I had finished the hard part (design and coding) but then I came to the point of dealing with certification. There were a few items I didn't even consider in my design that I discovered were required for certification, and I had to go back and address those (like implementing certain interfaces).<br />
<br />
Take the time up front to look at the certification requirements. There are a number of resources on app submission guidelines and checklists. Pete Brown's <a href="http://10rem.net/blog/2012/12/10/the-importance-of-app-submission-notes-in-the-windows-store?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+PeteBrown+%28Pete+Brown%27s+Blog%29">blog post</a> is helpful, among others. But Microsoft's own documentation is the most comprehensive and contains everything you need. It is tempting to want to quickly get through it because of all the points it covers. Don't. Invest the time. Otherwise, you may miss out on some opportunities or simply fail certification. <br />
<br />
Beyond that, here is a recap of the tools/services that I've relied on to get my app completed:<br />
<ul>
<li><a href="https://github.com/praeclarum/sqlite-net">SQLite-net</a> for WinRT (explained in <a href="http://timheuer.com/blog/archive/2012/08/07/updated-how-to-using-sqlite-from-windows-store-apps.aspx">this post by Tim Heuer</a>);</li>
<li><a href="http://www.windowsazure.com/en-us/develop/mobile/">Windows Azure</a> - including Azure Mobile Services, SQL and Azure Web Sites;</li>
<li><a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh694081.aspx">WACK</a> (Windows App Certification Kit) - do this often during development!</li>
<li><a href="http://www.lhotka.net/cslanet/">CSLA </a>- simply fantastic that we can use this on WinRT just like with other .NET projects;</li>
<li>PluralSight - a great resource for learning. In particular, the <a href="http://www.pluralsight.com/training/Courses/TableOfContents/win8sellingapps">Selling Windows 8 Apps</a> course helps make sure you dot your i's and cross your t's;</li>
<li><a href="http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/threads">MSDN forum</a>;</li>
<li><a href="http://www.microsoft.com/bizspark/">Microsoft BizSpark</a>.</li>
</ul>
It feels good to be done (at least with initial release). Hopefully the app will help many while paying for itself, but at the very least I've (a) given my wife and family a helpful tool and (b) learned a lot that I can apply in other areas of my work.<br />
<br />
Check it out: <a href="http://scripturebox.com/">ScriptureBox.com</a>Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-57446253159249561492012-11-27T08:17:00.001-08:002013-03-05T12:55:15.817-08:00Moving from Droid to WP8 (HTC 8x)After working with Windows 8 since May or June (release preview, then RTM version) on both my desktop and laptop and enjoying the experience, and then after buying a Surface and seeing the huge benefit of that, I decided last week to upgrade from a Droid device to a WP8 device. I really wanted to have a consistent environment across the board. But this was the one choice the choices I had. I really liked my HTC Droid Incredible device. I have enjoyed the Android OS.<br />
<br />
Best Buy was having their Black Friday sale, which meant I could get the HTC 8x for $99 or the Nokia Lumia 822 for $49, both with a new two-year contract. I had read plenty more reviews of the Nokia than the HTC, with the reviewers generally stating that the Lumia offers more features while also noting that the HTC device looked and felt better. I saw both in the store, and the feel of the 8x in my hand was enough to push me toward that over the Lumia 822. I don't regret my decision, even though I currently don't have access to built-in voice navigation (that is supposedly coming) like the Lumia has.<br />
<br />
I immediately appreciated both the WP8 OS and the HTC hardware. But the first day or two I also was a little nervous that I would be giving up some of the things I enjoyed on the Droid, including Google Maps and Google Drive. But the more I use WP8, the more I am confident I made the right decision. (Bing Maps is fine, but Google Maps provides a few more features. I've also been using SkyDrive more and more lately, so a native Google Drive client isn't really a concern anymore.)<br />
<br />
Here's a few items I think are noteworthy:<br />
<ul>
<li>Live Tiles (WP8) vs Widgets (Droid): I was concerned at first about the lack of widgets that you get with Droids. But the Live Tiles make this a non-issue for me. I can see at a glance what I need on the tile.</li>
<li>One screen (WP8) vs 7 screens (Droid): Quicker access to what I need on WP8 and simpler navigation if you lay out your tiles categorically.</li>
<li>Office suite (WP8) vs Drive (Droid): Haven't used Office yet enough to make a good comparison, but I will say that OneNote on WP8 is excellent.</li>
<li>Single mail app (WP8) vs multiple mail apps (Droid): On Droid, the Gmail app was nice, but the other generic mail app (for exchange, Hotmail, etc) was totally different. WP8 provides the same mail app for all accounts, and I think it is easier to use than the Gmail app.</li>
<li>Calendar integration: much better on WP8 than my Droid. Exchange email, calendar, contacts, etc., simply works. Not so much on my Droid.</li>
<li>Text app: The conversation view is much easier to view on WP8 than on the Droid, in my opinion.</li>
<li>Kid's Corner - ability to provide my kids a safe, restricted area on the phone to use that keeps them from sending texts/emails and making calls accidentally. They only have those apps I share to their profile.</li>
<li>Skype (WP8) vs Google Chat (Droid): I abandoned Skype a couple years ago due to poor quality and switched to Google Chat. I still use Google Chat, but Skype on both the Surface and WP8 device is quite nice and works pretty well.</li>
<li>Apps in general: while the Google app store has many more options, I've found just about everything I've needed or wanted on WP8. Again, the exception is here is Google Maps or Drive. But the alternatives on WP8 are fine.</li>
</ul>
To summarize - I have no regrets in switching to WP8, and with each additional day of using the 8x I am more confident I made the right decision.Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-63831745336655788092012-10-27T07:30:00.000-07:002013-03-05T12:55:29.605-08:00Surface - First ImpressionsOur <a href="http://www.microsoft.com/Surface/en-US/surface-with-windows-rt/home">Surface</a> was delivered yesterday, and last night I had the an opportunity to use it for a couple hours. I'm quite impressed.<br />
<ul>
<li>The Windows 8-style interface is nice and quite functional on a normal desktop/laptop. It <i>shines</i> on the Surface.</li>
<li>The Touch Cover takes some getting used to. But it turns a traditional tablet into a productive computer when you want it to be. Even sitting in a comfortable chair with my feet kicked up and the Surface on my lap, I could use the touch cover reasonably well.</li>
<li>Office 2013 is included, and it keeps the consistent feel that you're used to on your desktop, which further makes the Surface much more than just a device on which to check email, browse the web or play Angry Birds.</li>
</ul>
Citrix has a beta Citrix Receiver app in the Store that is supposed to let you access your company's Citrix gateway, but so far it hasn't let me authenticate. Not sure if that's a problem with the app, or with the older version of citrix used at my work.Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-39465640520548339472012-10-06T15:27:00.002-07:002013-03-05T12:55:51.880-08:00A pretty important line of code in a Windows 8 app...I've been working the past few hours trying to figure out why, all of a sudden, my Windows 8 app couldn't get past the splash screen. I did find <a href="http://geekswithblogs.net/lbugnion/archive/2012/09/10/adventures-in-windows-8-solving-activation-errors.aspx">one hit</a> online that I was hoping would help, but my problem had nothing to do with Visual Studio acting up. As usual, when tearing things apart and trying to put them back together, I inadvertently missed adding a crucial line of code in the main page's OnLaunched event:<br />
<br />
<br />
<span style="background-color: yellow;"> // Place the frame in the current Window and ensure that it is active</span><br />
<span style="background-color: yellow;"> Window.Current.Activate();</span><br />
<br />
<br />
rootFrame.Navigate(typeof(Views.MainPage)) doesn't do the trick by itself.<br />
<br />
<br />Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-41726526613605881902012-09-11T19:16:00.000-07:002013-03-05T12:56:09.769-08:00TFS in the Cloud? Yes!I was debating today on what to use for personal source control. I had just installed VisualSVN (which looks pretty nice) when I decided to do one more look online for any option related to TFS, since I'm familiar with that at work and it obviously integrates nicely with Visual Studio.<br />
<br />
I found a link related to the new TFS 2012 Express version, which is a good option. But in reading about that, I saw someone mention the cloud-based TFS Preview. That's Team Foundation <i>Service </i>(not Server). I've been using Windows Azure hosting services recently along with SQL Azure and I've been quite impressed.<br />
<br />
I am blown away by the ease of use with the new TFS Preview. And it is free. Check it out: <a href="http://tfspreview.com/">http://tfspreview.com/</a><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyspfu8ZbACx-vO7NeRF-GwdejIYkBOAxaEymMdZxAaSY9cIRfoYD9qF9nMrMOrhZEHjHiHpEf9PIV1ekxCYrwQA7U5Pdwunb_NKsynXD4mjVhcCTGKI5j_PLJxgkEdI_ec2rhM7M98aNp/s1600/TFSPreview.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyspfu8ZbACx-vO7NeRF-GwdejIYkBOAxaEymMdZxAaSY9cIRfoYD9qF9nMrMOrhZEHjHiHpEf9PIV1ekxCYrwQA7U5Pdwunb_NKsynXD4mjVhcCTGKI5j_PLJxgkEdI_ec2rhM7M98aNp/s400/TFSPreview.PNG" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxOr3sU7le40kv29rLvUj_MN1xg8FT5NFf7jZ_xjAY2WqUS2dzAjn5ofGtd04mfjfjijCM50BxntGzRRkNR0nVmF6rt6CXiZ7ywQ4hQEJBQH5BJVBf5bCxRF17O7S06AjfbLhHvZuwap5f/s1600/TFSPreview2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxOr3sU7le40kv29rLvUj_MN1xg8FT5NFf7jZ_xjAY2WqUS2dzAjn5ofGtd04mfjfjijCM50BxntGzRRkNR0nVmF6rt6CXiZ7ywQ4hQEJBQH5BJVBf5bCxRF17O7S06AjfbLhHvZuwap5f/s400/TFSPreview2.PNG" width="400" /></a></div>
<br />Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-78716983993278911452012-08-29T12:01:00.000-07:002012-08-29T17:31:59.764-07:00Windows 8...on a Desktop...for the average userI really like Windows 8. I've been running it on my main workstation for a couple months now with the release preview. I haven't yet installed the RTM that came out a couple weeks ago, so I suspect there are some notable improvements. A few of the things I like:<br />
<br />
<ul>
<li>It's quick. Great performance.</li>
<li>Nice UX for a number of preview apps targeting the WinRT (although they have limited functionality to some degree)</li>
<li>The ability to download apps from the store</li>
<li>The task manager</li>
</ul>
<div>
There are some things that are annoying, too, but I'll save my comments on those until after I install the RTM in hopes that they have been addressed.</div>
<div>
<br /></div>
<div>
I installed the release preview a few weeks ago on my wife's new <a href="http://www.amazon.com/HP-TouchSmart-520-1030-Desktop-Computer/dp/B005M1ADN6/ref=cm_cr_pr_product_top">HP Touchsmart all-in-one</a>. (BTW - it is soooo nice to have a clean desk without any cables except for the power cord. All-in-ones might carry additional risks if anything internal breaks, but it was definitely a good choice for us.) We don't use the touch interaction that much since it is kind of awkward reaching across the desk to the screen, but it is neat to see Windows 8 shine there.</div>
<div>
<br /></div>
<div>
One thing has me concerned that has come to light during the times when I'm helping my wife navigate the changes in Win 8. Here's an example of a recent exchange on the matter:</div>
<blockquote class="tr_bq">
[she opens the WinRT browser and goes to a site with flash content and the site doesn't function properly]<br />
<b>My Wife</b>: what's wrong with this?<br />
<b>Me</b>: Oh, you're in the metro* browser and that site has a flash plug-in. You need to open the desktop browser instead.</blockquote>
The reality is - she doesn't know what a plug-in is, or understand why they're not allowed on the WinRT side, and she really doesn't care why they won't run. For that matter, she doesn't know what the "WinRT" is and she doesn't care, either. She just wants it to work.<br />
<div>
<br /></div>
<div>
(* the "metro" term has been dropped by Microsoft in favor of "Windows 8"...but it's just easier to say)</div>
<div>
<br /></div>
<div>
I'm fine with all that when <i>I'm</i> using it. I know ahead of time if I'm going to a site where I expect to interact with Flash or Silverlight content, and therefore I'll choose the desktop browser. But the average user? The average user will get used to that on a tablet...they've done fine on the iPad. But when you mix the two on a desktop, the user is going to have to think a lot more about what they're doing. Perhaps there's a setting for the scenario I describe above, where the user can flag certain sites to always open the desktop browser, even if the user started out in the WinRT browser. I may just be unaware of other ways Win 8 already helps users deal with this. But so far this has me a little worried about the frustrations the average user will experience. That said, the user experience with Win 8 apps is fresh and compelling. I don't have an iPad, but having used one a few times I really think the iOS interface is going to look stale next to Win 8.</div>
Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0tag:blogger.com,1999:blog-2186236483248662313.post-34384831377884669082012-07-26T11:22:00.000-07:002012-07-26T11:22:24.811-07:00Windows 8 experience so far<span style="font-family: inherit;"><span style="line-height: 18px;">I've been running the Windows 8 release preview for over a month now on a virtual machine (using VirtualBox) on my laptop - a Dell Vostro with a 15" screen and max res of 1280x800 running Windows 7.</span></span><br />
<span style="font-family: inherit;"><br style="line-height: 18px;" /><span style="line-height: 18px;">I really like the metro interface, but my experience hadn't been superb because (1) it was on a VM sharing resources with the host OS and other VMs, and (2) the max resolution didn't allow me to enjoy the benefits that come with the metro interface. Either VirtualBox or my laptop's video card restricted the Windows 8 guest OS from utilizing the full screen. So I got a limited taste of what Windows 8 was like.</span></span><br />
<br />
<span style="line-height: 18px;"><span style="font-family: inherit;">Well, yesterday I set up a new <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16883108955">Lenovo desktop machine</a> with decent specs and a new <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16824001549">Samsung 21.5" widescreen monitor</a>. I installed Windows 8 as the main OS, and the difference from my laptop is night and day. I'm very impressed. It has taken a little bit to get used to the mix of the metro interface and the traditional desktop interface on a non-tablet device, but I like it so far and am getting more comfortable with it. </span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZo6MHqbvtdPnnl6Q2tRYEkSe_VLO9gkkvowjYbmuq_8Fq-LrH24wWJ0_5Tn_rRCMxiio4ABFmypmeAaNCFmGQjC-kBCM52pm9A_YTQiUU2_oVDF-BB_ZfZjm_JIksW-OakqF8OLhPTJxo/s1600/Win8_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZo6MHqbvtdPnnl6Q2tRYEkSe_VLO9gkkvowjYbmuq_8Fq-LrH24wWJ0_5Tn_rRCMxiio4ABFmypmeAaNCFmGQjC-kBCM52pm9A_YTQiUU2_oVDF-BB_ZfZjm_JIksW-OakqF8OLhPTJxo/s320/Win8_1.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgtYBeV3Dv8nGYSVUzXYPfMJzOA4wsosvFP5PsjrHgTTyTaT6xWvx2BSt6XPSh53kx19bLaHB7-5XSInQkcdqQxYsaghfqLOurnTrJwWASfabhsTapin6rBU-y1lqivy0ngGjMAmxlwUC5/s1600/Win8_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgtYBeV3Dv8nGYSVUzXYPfMJzOA4wsosvFP5PsjrHgTTyTaT6xWvx2BSt6XPSh53kx19bLaHB7-5XSInQkcdqQxYsaghfqLOurnTrJwWASfabhsTapin6rBU-y1lqivy0ngGjMAmxlwUC5/s320/Win8_2.png" width="320" /></a></div>
<br />
Looking forward to the <a href="http://www.microsoft.com/surface/en/us/default.aspx">Surface tablet</a> this Fall.Timhttp://www.blogger.com/profile/16648880306118255544noreply@blogger.com0