Quantcast
Channel: Scott Hanselman's Blog
Viewing all 1148 articles
Browse latest View live

Stop, think, research, debug

$
0
0

I got this great letter from a listener/reader recently. They listened to a recent show on Debugging Windows and it helped them debug a problem at work, but not in a specific technical way. Instead, it changed how they thought about their approach to the topic.

By the way, I've had some amazing guests on lately. If you haven't subscribed, it's a good time to join us. Explore the archives and check our our diverse topics and voices and subscribe. Also, BTW there is a new This Developer's Life out so check that out also.

I've been doing Hanselminutes: Fresh Air for Developers for almost 500 episodes over darn-near 10 years. Getting emails like this is so meaningful, especially when I think about taking breaks or stopping. Sometimes a few shows will go by with no comments and I'll wonder if anyone listens, and then I hear from a Real Live Human who was helped by all this free content I put out and it keeps me going. So first, thanks to all of you for this, if you've ever emailed or donated to fight diabetes.

US Navy Cryptanalytic Bombe by brewbooks, used under CC

Here's what this particular listener said, with emphasis mine.

Scott,
After listening to your podcast with Mario Hewardt earlier this week on Windows Debugging, I had some of the things you were talking about running through my head. Though I've always come away from your podcasts feeling enriched and excited to tackle new and interesting problems, this was the first time that it had a direct impact on my work so soon after listening.

I work at a big data company that does a lot of social network analysis. We use ElasticSearch in our stack, and we are consistently processing millions of documents using complicated, user generated queries. A release we put out late last week allowed for many, larger, even more complicated user queries, which in turn led to substantial slowdown of our product. Though the code only existed in our staging environment, we are on a deadline for release early this next week. As it became obvious that the application was spending a LOT of time in the code my team was responsible for, we were tasked with "fixing" it ASAP.

I took the first shift, and though my brain immediately started coming up with ways to improve our code, something about your podcast regarding "know the tools your tools are built on" was stuck in my head. Instead of jumping in and optimizing what I was already comfortable with, I spent an hour researching the internals of the ElasticSearch functionality we were relying on.

Not sure how familiar you are with ES, but it distinguishes between searches that simply return a set of documents that match a query, much the way that traditional SQL databases do, and searches that return how well documents match a query, for ranking purposes. As it turned out, we were inadvertently using one of the latter ones, meaning when we provided X giant queries in an OR block, even though it was an OR block, which we expected would short circuit as soon as it returned a TRUE condition, it processed all X queries to determine how well each document matched. My big O notation is a bit rusty, but suffice it to say, it was one of the bad ones.

Instead of a gigantic fire drill app optimization over a weekend, it turned out to be an hour of research followed by switching the word "bool" to the word "or". It's remarkable how the most efficient coding you can do is often stopping and thinking about the problem for awhile!

Anyway, thanks to both you and Mario for saving me and my team a bunch of time!

This was a great reminder to me as well. Research is hard. It's not as dynamic as interactive debugging but it can often save you many wasted hours. Truly successful debugging means doing whatever it takes to understand the problem domain and the code paths.

Do you have any tales of debugging where taking the time to really understand the problem domain saved you time? Or perhaps the opposite, where you just dove in and poked at some code until it worked? Don't be ashamed, I think we've all be on both sides.

Sound off in the comments!


Sponsor: Big thanks to Infragistics for sponsoring the feed this week. Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid - Download for free now!

* Photo - US Navy Cryptanalytic Bombe by brewbooks, used under CC



© 2015 Scott Hanselman. All rights reserved.
     

A/B Testing and Testing In Production with Azure Web Apps

$
0
0

I've got a lot of production web sites running in Azure right now. Some are for small side projects and some are larger like the sites for the Hanselminutes Podcast and This Developer's Life. I like Web Apps/Sites (which is Platform as a Service) rather than Virtual Machines (Infrastructure as a Service) because I don't like thinking about the underlying operating system if I can avoid it. I like to be able to scale the site up (faster, bigger) or out (more machines in the farm) with a slider bar.

In fact, there's some other more advanced and useful features that Azure Web Apps have that keep me using Web Apps almost exclusively.

I'll use a little site I made called KeysLeft.com that tells you how many keystrokes are left in your hands before you die. Think of it as a productivity awareness tool.

First, I'll add a Deployment Slot to my existing Git-deployed Web App. The source for KeysLeft lives in GitHub here. When I check-in a change it's automatically deployed. But what if I wanted to have a staging branch and automatically deploy to a staging.keysleft.com first? If it works out, then move it to production by swapping sites. That'd be sweet.

Staging Slots for Azure Web Apps

You can see here my main KeysLeft web app has a Staging "side car" app that is totally separate but logically related/adjacent to production. Notice the "swap" button in the toolbar. Love it.

Adding Deployment Slots to an Azure Web App

This Web App has its configuration copied from the main one, and I can setup Continuous Deployment to pull from a different branch, like "staging" for example. The name of the deployment slot becomes a suffix, so keysleft-staging.azurewebsites.net unless you set up a custom CNAME like staging.keysleft.com. You can have up to 4 deployment slots in addition to production (so dev, test, staging, whatever, production) on Standard Web Apps.

A/B Testing for Azure Web Apps

Once I've got a slot or two set up and running a version of my app, I can do A/B testing if I'd like. I can set up a feature that was called "Testing in Production" and is now "Traffic Routing" and tell Azure what percentage of traffic goes to prod and what goes to staging. Of course, you have to be sure to write your application so such that authentication and session is managed however is appropriate, especially if you'd like the user to have a seamless experience.

Here I've got 10% of the traffic going to staging, seamlessly, and the other 90% is going to production. I can make a small change (background color for example) and then hit the main site over and over and see the occasional (10% of course) request being routed to the staging slot. You can configure this static routing however you'd like.

10% Traffic to Staging

Then I could hook up Application Insights or New Relic or some other event/diagnostics system and measure the difference in user reaction between features that changed.

Advanced Testing in Production

Made it this far? Then you're in for a treat. Static routing is cool, to be clear, but scripting a more dynamic experience is even more interesting. Galin Iliev, one of the developers of this feature, gave me this Powershell script to show off more powerful stuff.

First, you can use PowerShell to manage this stuff. You can change routing values and ramp up or ramp down. For example, here we start at 10% and change it by 5 every 10 minutes.

# Select-AzureSubscription YOURSGOESHERE


$siteName = "keysleft"
$rule1 = New-Object Microsoft.WindowsAzure.Commands.Utilities.Websites.Services.WebEntities.RampUpRule
$rule1.ActionHostName = "keysleft-staging.azurewebsites.net"
$rule1.ReroutePercentage = 10;
$rule1.Name = "staging"

$rule1.ChangeIntervalInMinutes = 10;
$rule1.ChangeStep = 5;
$rule1.MinReroutePercentage = 1;
$rule1.MaxReroutePercentage = 80;

Set-AzureWebsite $siteName -Slot Production -RoutingRules $rule1

But! What if you could write code to actually make the decision to continue or fall back dynamically? You can add a callback URL and a Site Extension called the "TiP Callback Extension."

$rule1.ChangeDecisionCallbackUrl = https://keysleft.scm.azurewebsites.net/TipCallback/api/routing

The Site Extension (and all Site Extensions for that matter) is just a little sidecar Web API. This callback gets a small POST when it's time to make a decision, and you decide what to do based on HTTP-related context that was passed in and then return a ChangeDirectionResult object as JSON. You can adjust traffic dynamically, you can adjust traffic when doing a deployment, do a slow, measured roll out, or back off if you detect issues.

NOTE: The ChangeDescisionCallbackUrl and this code below is totally optional (so don't stress) but it's super powerful. You can just do static routing, you can do basic scripted dynamic traffic routing, or you can have make a decision callback URL. So the choice is yours.

You can check out the code by visiting yoursite.scm.azurewebsites.net after installing the TiP callback site extension and look at the Site Extensions folder. That said, here is the general idea.

using System.Web.Http;

using TipCallback.Models;

namespace TipCallback.Controllers
{
public class RoutingController : ApiController
{
[HttpPost]
public ChangeDirectionResult GetRoutingDirection([FromBody] RerouteChangeRequest metrics)
{
// Use either Step or RoutingPercentage. If both returned RoutingPercentage takes precedence
return new ChangeDirectionResult
{
Step = (int)metrics.Metrics["self"].Requests,
RoutingPercentage = 10
};
}
}
}

Here's the object you return. It's just a class with two ints, but this is super-annotated.

/// <summary>

/// Return information how to change TiP ramp up percentage.
/// Use either Step or RoutingPercentage. If both returned RoutingPercentage takes precedence
/// Either way MinRoutingPercentage and MaxRoutingPercentage set in API rule are in force
/// </summary>
[DataContract]
public class ChangeDirectionResult
{
/// <summary>
/// Step to change the Routing percentage. Positive number will increase it routing.
/// Negative will decrease it.
/// </summary>
[DataMember(Name = "step")]
public int? Step { get; set; }

/// <summary>
/// Hard routing percentage to set regardless of step.
/// </summary>
[DataMember(Name = "routingPercentage")]
public int? RoutingPercentage { get; set; }
}

All this stuff is included in Standard Azure Web Apps so if you're using Standard apps (I have 19 websites running in my one Standard plan) then you already have this feature and it's included in the price. Pretty cool.

Related Links


Sponsor: Big thanks to Infragistics for sponsoring the feed this week. Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid - Download for free now!



© 2015 Scott Hanselman. All rights reserved.
     

Visual Studio 2015 Released plus ASP.NET 5 Roadmap

$
0
0

Microsoft released Visual Studio 2015 today! You can watch the keynote video from today with me, Soma, Beth Massi, Amanda Silver, and Brian Harry here on Channel 9. All the supporting videos and Q&A are also up as individual videos if you'd like.

ASP.NET in 2015

NOTE: Because ASP.NET 5 will not only run on .NET Framework 4.6, which was released today, but also on the .NET Core Framework that will support Windows, Mac, and Linux, ASP.NET 5 isn't released today. The ASP.NET 5 roadmap is up on GitHub though. We'll have a Release Candidate that you can Go-Live with Microsoft support in November and it will 1.0 in the first quarter of 2016. Also, be sure to grab the free Visual Studio Code, no matter what platform you're on. http://code.visualstudio.com

That ASP.NET 5 developers should start exploring the framework now, and go live around the holidays on the operating system of your choice with ASP.NET 5 and the Core CLR. We'll keep doing the weekly ASP.NET Community Standup and updating you each week on our progress. Remember that the schedule is at http://www.asp.net/vnext and the documentation is growing at http://docs.asp.net.

ASP.NET 4.6

That said, ASP.NET 4.6 is live today and included in Visual Studio 2015 and VS has some great new features for Web Developers.

  • JSON is first class with a .json editor and JSON Schema validation within VS. There's also intellsense for bower.json, npm, and other JSON formats.
  • Even more HTML 5 support in the editor. Of note is intellisense for Angular, ARIA, and Bootstrap CSS classes. We're also watching Web Components and including support (as the world decides) for things like link rel="import."
    Angular
  • JavaScript support for Angular JS controllers, factories, animations, etc. Support for JSDoc and more.
  • Syntax Highlighting and intellisense for ReactJS! Support for Grunt and Gulp!
  • HTTP/2 Support in ASP.NET 4.6 with SSL enabled on Windows 10 and IIS Express.

There's lots of significant updates in 2015, but Roslyn is likely the most significant. Roslyn is the open source .NET Compiler Platform. It includes the new features Visual Basic and C# 6 and can be used in your ASP.NET Web Forms projects, pages, and MVC pages.

For example, with String interpolation, this link in Web Forms:

<a href="http://feeds.hanselman.com/~/t/0/0/scotthanselman/~www.hanselman.com/Products/<%: model.Id %>/<%: model.Name %>">

looks like this with C# 6. See the string that starts with $""? It's got model's embedded within it. Common calls to String.Format get a LOT easier with this feature.

<a href="http://feeds.hanselman.com/~/t/0/0/scotthanselman/~<%: $"/Products/{model.Id}/{model.Name}" %>">

Web Forms in ASP.NET 4.6 gets async model binding as well, which means less digging around in the Request object for stuff and you'll do it all asynchronously.

Visual Studio Community 2015 - It's Free!

If you're a student, open-source contributor or a small team, Visual Studio 2015 Community is free. You can use extensions and develop however you'd like. We've got not just Windows and Web Apps, but you can also use Xamarin or Cordova, and even use our Windows Phone and Android Emulators.

Learn about the Community, Professional, and Enterprise versions here and compare them in a feature matrix here.

I'm using Visual Studio 2015 to edit even .NET 2.0 apps so I'm not using older versions of VS, but if you like, it does live side-by-side. On one machine I have 2010, 2012, 2013, and 2015, even though it's not really needed.

The final versions of all of today’s releases are available now. 


Sponsor: Big thanks to Infragistics for sponsoring the feed this week. Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid - Download for free now!


© 2015 Scott Hanselman. All rights reserved.
     

Bring Kindness back to Open Source

$
0
0

Nick Burns - Your Company's Computer GuyWhen you're rude/crisp/sharp/whatever to someone in a PR or Issue, your meanness may have turned off the next generation of open source committer. It's that simple. When folks are just starting out as Code Newbies their initial interactions in this new world matter.

I've been doing this for over 20 years. There's knowledge and (hopefully) wisdom that I've gained in all that time, assuming it's not the same year of experience twenty times. Along with all that time that I (and you!) put in comes great responsibility. We need to think as a community about stewardship, sustainability, and successor management.

There are folks in open source - successful folks - that think that all this talk of "niceness" is overrated. "Talk is cheap, show me the code" is a fun thing to say. But no, talk isn't cheap. It's not cheap, yes, it takes time and patience, but it IS important.

As we try to move towards more representative teams and expand the leadership beyond the old network, this somehow controversial idea of being welcoming and patient to new people is even more important.

There are many folks out there with skills and knowledge that are not joining open source because their initial attempts to contributed were rebuffed.

Jesse Pollak posted two great tweets last week that really point out what's wrong with open source, especially for new people just starting out.

Jesse pledged a "no meanness" rule. I join him in this pledge and encourage you to also.

I've thought similar things before.

Sound like too much work? There are ways to built a welcoming culture into the process. Here's some ideas. I'm interested in yours also.

  • Make a contributing.md.
    • Gently point folks to it.
    • If you get a lot of newbies, write a kind form letter and funnel them towards forums or mentors.
    • Create a Getting started friendly FAQ.
  • Tag issues with "up-for-grabs" in your repositories.
    • Classify by difficulty. Easy, Medium, Hard, Insane.
  • Point new people towards samples, easier parts of the code, docs, tutorials, etc. Grow your enthusiasts.
  • Join http://up-for-grabs.net
  • Consider applying the Contributor Covenant or a similar CoC to your project. Enforce it.
  • Make an issue and "only accept a PR from someone who has never contributed to open source" just like Kent C Dodds did for his project!

Have you helped with an open source project? Did you had a bad initial experience? Did it slow you down?

Perhaps you had a great one and your first pull request was awesome? I'd like to hear your story.

Sound off in the comments!


Sponsor: Big thanks to Infragistics for sponsoring the feed this week. Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid - Download for free now!



© 2015 Scott Hanselman. All rights reserved.
     

Getting Started with Windows 10

$
0
0

I've been making Windows 10 videos at night to help out friends and family, and because it's fun.

NOTE: Please share my videos with your family, friends, and social networks with this easy to remember URL: http://hanselman.com/windows10

#NinjaCatWindows 10 comes out July 29th, and it takes what was familiar about Windows 7 and what was great about Windows 8 and takes it forward. It's nice on a tablet, it's nice on a laptop, and I'm on my desktop with it now. Features like game streaming from an Xbox are amazing. The Office Touch apps look great.

I've just finished a new one where I show what the Start Menu will look like immediately after your upgrade. I'll show some tips you perhaps didn't know about like pinning links to apps to the Start Menu, Task Bar, *and* the Desktop. I'll show you how to pin Control Panel sections to Start as well. You can still add common icons to your Desktop like My PC, but you can also add Downloads, Documents, Music, and More to the Start Menu itself.

Customizing the Start Menu after Upgrading to Windows 10

Detailed Tour of Windows 10 in 8 minutes

A complete tour of the new Windows 10 Control Panel

How to prepare for an upgrade to Windows 10 from Windows 7 or Windows 8

if you have ideas on new videos I can do, let me know in the comments!


Sponsor: Big thanks to our friends at Infragistics for sponsoring the feed this week! Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid -Download for free now!



© 2015 Scott Hanselman. All rights reserved.
     

Apt-Get for Windows - OneGet and Chocolatey on Windows 10

$
0
0

In 2013 I asked the questions "Is the Windows user ready for apt-get?" As with nearly all my blog posts, the comments are better than the post itself. ;)

Now it's 2015 and many of us are upgrading to Windows 10. One of the little gems in Windows 10 that no one is talking about (yet) is OneGet. You can read about OneGet architecture here.

Installing applications in Windows 10 from the command line

It's easy (and wrong) to just say that One-Get is Apt-Get for Windows. But OneGet isn't actually a package manager. It's more clever and cooler than that.  It's a package manager manager.

OneGet is a Manager of Package Managers 

Go out to you Windows 10 PowerShell prompt now and type "Get-PackageProvider" and you'll see the package managers you have registered with OneGet today.

C:\> Get-PackageProvider


Name Version
---- -------
Programs 10.0.10240.16384
msu 10.0.10240.16384
msi 10.0.10240.16384
PSModule 1.0.0.0

Usually programs are installed with things like MSIs, for example, so there's a provider for that. You can type "Get-Package" and see the programs AND packages on your machine:

C:\> Get-Package


Name Version
---- -------
123D Design R1.6 1.6.41
Windows Driver Package - Ge... 06/04/2011 8....
Windows Driver Package - Ge... 06/19/2014 8....
Windows Driver Package - FT... 01/27/2014 2....
JRuby 1.7.19 1.7.19
Windows Driver Package - ST... 11/09/2009 3....
EPSON NX410 Series Printer ...
Intel Edison Device USB driver 1.2.1

Since it's PowerShell, you can sort and filter and what-not to your heart's delight.

OneGet isn't Microsoft's Chocolately

Chocolatey is an open source apt-get-like machine-wide package manager that you can use today, even if you don't have Windows 10.

OneGet isn't Microsoft's version of Chocolately. But there is a beta/preview Chocolatey provider that plugs into OneGet so you can use OneGet to get Chocolatey packages and install them.

Other things worth noting, even though OneGet is in the box for Windows 10, you can still run it on Windows 7 and Windows 2008 R2. Plus, OneGet isn't done and it's open source so there's lots of cool possibilities.

Oh, and an important naming point. Just like "Chromium" is the open source browser and "Chrome" is the Google packaged instance of that project, "OneGet" is the open source project and what ships with Windows 10 is just generically "PackageManagement." Just a good reminder of the relationship between open source projects and their shipping counterparts.

Installing VLC using OneGet and Chocolatey on Windows 10

Example time. You've got a new Windows 10 machine and you want to get VLC. You can (and should) totally get it from the Windows Store, but let's get it using Package Management.

Here I need to get the beta Chocotlatey provider first, and once, with "get-packageprovider -name chocolatey." Also, when I install a package for the first time it will prompt to download NuGet as well. I will answer Yes to both.

NOTE: You can also install Chocolatey explicitly with "install-package –provider bootstrap chocolatey"

Now I can just "install-package vlc" and it will get it from the Chocolatey repository.

C:\>  get-packageprovider -name chocolatey


The provider 'chocolatey v2.8.5.130' is not installed.
chocolatey may be manually downloaded from https://oneget.org/ChocolateyPr30.exe and installed.
Would you like PackageManagement to automatically download and install 'chocolatey'?

[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): y

Name Version
---- -------
Chocolatey 2.8.5.130

C:\> install-package vlc

The provider 'nuget v2.8.5.127' is not installed.
nuget may be manually downloaded from https://oneget.org/nuget-anycpu-2.8.5.127.exe and installed.
Would you like PackageManagement to automatically download and install 'nuget' now?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): y

The package(s) come from a package source that is not marked as trusted.
Are you sure you want to install software from 'chocolatey'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): y

Name Version Source Summary
---- ------- ------ -------
vlc 2.2.1.20150630 chocolatey VLC Media Player

Boom. Now VLC is installed. It's early days but it's interesting stuff!

You can read about the available OneGet cmdlets at https://github.com/OneGet/oneget/wiki/cmdlets.

For example here I can find the latest version of zoomit.

C:\> find-package -name zoomit


Name Version Source
---- ------- ------
zoomit 4.50 chocolate

Just to be clear, with regards to OneGet and Chocolatey.

  1. It's an unsupported version of Chocolatey provider in a GitHub repo
  2. Folks can download it using OneGet cmdlets and then using the unsupported provider, you can download Chocolatey packages.
  3. Microsoft is working with the community to take ownership of Chocolatey provider.

And again, you can use Chocolatey TODAY on your Windows 7 and up machines as it is.

Managing MSI-installed Programs with OneGet and PackageManagement

OneGet and PackageManagement in Windows 10 lets you manage package managers of all kinds to control what's installed one your machines. For example, I can uninstall an MSI installed program like this. This is just like visiting Add/Remove Programs (ARP) and uninstalling, except I did it from the command line!

C:\> Uninstall-Package join.me.launcher


Name Version
---- -------
join.me.launcher 1.0.368.0

MSI and Chocolately are just the start for OneGet. What if one package management API could also get Python or PHP packages? Windows Store apps?

OneGet Architecture Diagram - The End user calls PackageManagement APIs that delgate to installed provders that install packages from the original location

Donate to help Chocolatey

Last, but definitely not least, it's important to remember that Chocolatey and the Chocolatey Repository of Packages can use your help and sponsorship. Head over to https://chocolatey.org/ and scroll to the bottom and click Donate and you can Paypal or use your Credit Card to help them out.

SOCIAL: Hey folks, please do follow me on Facebook https://fb.me/scott.hanselman or Twitter! https://twitter.com/shanselman


Sponsor: Big thanks to our friends at Infragistics for sponsoring the feed this week! Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid -Download for free now!



© 2015 Scott Hanselman. All rights reserved.
     

Microsoft Universal Foldable Keyboard - Dual Bluetooth Pairing and Three Operating Systems

$
0
0

Microsoft Universal Foldable KeyboardI have a Surface Pro 3, an iPad 2, and an iPhone 6+. I also have a few Android devices for development. Sometimes I'm on a plane and want to do email, or I'm playing a game on my iPad and I've got my iPhone off to the side. You know, various combinations like you do.

For a while I used the Microsoft Universal Mobile Keyboard. (To be clear, NOT the Foldable one...that will show up in a moment) It's universally well-reviewed and with discounts can be found as low as US$58. One of the big pros of the Universal Mobile Keyboard is that the cover separates via magnets from the keyboard and includes a notch to hold your tablet up at an angle.

However, for me it had a few nits. It's about 75% of full-size which is just a little "off" for larger hands. It's also quite large. You can't really put it in an inside jacket pocket, it's definitely a backpack item. It's great, but it's not perfect...so, I tried the:

Universal Foldable Keyboard

Fast forward a year and the Microsoft Universal Foldable Keyboard is out. I preordered it as soon as I saw it in April. I swear if I had a dozen of these in my backpack I could sell them in a day of just sitting in a cafe. Folks always ask about it. It's lighter than most mobile keyboards, the folding is cool, the battery life is months (they say...I've never charged it yet, but it charges with micro-USB so that's trivial), and it supports basically any device.

I was at OSCON using the keyboard and the two things I consistently heard were:

  • Why have I never heard of this?
  • This is from Microsoft and it supports any device?

Seriously, Microsoft needs to do more than just word-of-mouth to advertise cool stuff like this. I realize I'm gushing, but I like the keyboard.

Here's the details. It's about 6 inches by 5 inches. Pictured below next to my Arc Touch Bluetooth Mouse (which also rocks) for size comparison.

The Microsoft Universal Foldable Keyboard

It unfolds, of course, and it's deceptively thin. Here it is pictured next to my Surface Pro 3 keyboard. The material and keys are basically the same. Surprisingly the fold in the middle looks a lot more dramatic than it feels in practice. Notice that the T and N and G and H are wider than they should be? That subtle but significant change makes touch typing very easy, in fact.

The keys are advertised as "full-sized" but you can see in the pic they are likely about 90-95% of full size. So "darn near full-sized" would be a fair statement. They aren't significantly smaller than my Surface that they slowed me down, but it's worth pointing out.

Microsoft Universal Foldable Keyboard - Multiple Bluetooth Pairings Microsoft Universal Foldable Keyboard - OS Button

The killer feature - besides the folding - is that you can pair two devices to it at the same time and switch between them. See the [1] and [2] buttons there? You long-press to switch devices. You can be typing on your Surface or Tablet, then get a text message on your phone, then just long press to reply to it then long press to return to the main device. The keyboard also has an OS button in the upper right corner to manage keyboard mappings, and it remembers them for each paired device.

For example, the Escape Key on iOS is also Home, or a double-press is the iOS task switcher. The Home button is home or the Windows Key depending on your device. There's also a CMD key for Macs as well as the usual Alt/Option key.

Microsoft Universal Foldable Keyboard - Compared to Surface  Microsoft Universal Foldable Keyboard - Home Keys

A only real con of this keyboard is that it does need a flat surface to sit on. It won't work well on your lap. Also, I haven't figured out how to force the FN key to reverse the functionality so there is no easy way to do things like ALT-F4. The default functionality for the top row is for more "Consumer" things like muting the volume and such, not for coders and hotkeys. For many folks that will be a deal-breaker, but for blog posts, emails, and surfing around, it's fine for me. I'm not going to code for hours on it.

I also did an unboxing video the day I got it in the mail, filmed with a potato, so check it out and subscribe to my YouTube.

* My Amazon Affiliate Links buy me tacos and gadgets like these to review. Please use them!

SOCIAL: Hey folks, please do follow me on Facebook https://fb.me/scott.hanselman or Twitter!https://twitter.com/shanselman


Sponsor: Big thanks to Infragistics for sponsoring the feed this week! Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid - Download for free now!



© 2015 Scott Hanselman. All rights reserved.
     

The Evergreen Web

$
0
0
 Photo "Road Work" by Grempz used under CC BY 2.0

I visited a website on my company's Intranet today using Microsoft Edge (the new "evergreen" browser in Windows 10*) and got an interesting warning. "This website needs Internet Explorer." At first I was taken aback, but then I got to thinking about it and it made sense.

A warning from Microsoft Edge - This website needs Internet ExplorerLet me back up. I was talking with awesome Web Developer Catt Small today and she mentioned how sometimes Chrome will update silently and break some little piece of the web in order to move the larger web forward. This means that Catt would have to then update her website to support this new feature or tweak the way she uses a feature in order for Random Visitor to have a Good Experience. This is life on the Evergreen Web and we techies are generally cool with it.

In a world where we all write our websites with feature detection and (generally) gracefully degrade when features aren't around, things just work. But at the same time, it does make the Web itself a moving target.

Flash, Silverlight, and Java are on the way out and JavaScript is the web's assembly (it's true and happening, you can't deny it anymore) so we should always be able to emulate what we need with JavaScript's Virtual Machine, even arcade games amazingly frozen in amber by Jason Scott. As the web moves it WILL be important to have browsers that can render yesterday's web as well as tomorrow's.

However, a few important aspects need to be called out in my opinion.

With an Evergreen Web comes Great Responsibility

Firefox, Edge, Chrome are all Evergreen browsers now. They really need to make smart decisions - hopefully as a collective when appropriate - to not Break Everything.

We also need to realize that we will have to leave some folks behind. Some older operating systems won't be able to run the latest browser. Some browsers come with the operating system or phone and don't upgrade often.

If we're gonna do this, we all need to do it

Everyone needs to get on board (*cough*Safari) and move forward.

An Evergreen Web is a kind of privilege

This is an interesting one that Catt and I talked about (podcast coming soon!) Again, not every company has the money, resources, or patience to keep their sites Evergreen. Things will break. Not every non-technical relative will have an Evergreen browser. These may seem like edge cases, but they aren't.

My wife has been in university these last few years and I swear it's like browsing the web in 2003. She's got a collection of browsers, literally, and bookmarked the school's sites that work in specific browsers. I'll find her running IE, Edge, Chrome, and Firefox on her own, and when I ask what's up, I'm told that "this blackboard site only works in Firefox" or "this testing app only works in IE."

This kind of haves-and-have-nots split will continue for the foreseeable future while mission-critical (everything mission critical to someone) apps continue to be used.

Compatibility Modes (however they are implemented) will be important

While your startup or agile team can likely fix little issues that pop up on your websites, that super-old web-based Expense reporting system that your company use DOES WORK in the right browser. It works. It's OK that it works and it should be allowed to work. While I was shaken by the error message I saw above for a moment, I understood it and I was able to get my "nevergreen" copy of IE to open that old-but-functional website quite nicely. 've found myself wishing, on occasion, that my copy of Chrome 44 could just act like Chrome 38 for a site or two.

Additionally, there will be Enterprises that won't (for whatever reason) want to be as Evergreen as we'd like them to be. There concerns are usually around compatibility. For many giant companies, changing stuff means breaking stuff.

* Evergreen browsers are always fresh, always updated. Chrome and Edge are "evergreen" browsers that support the latest Web Technologies and most importantly you shouldn't have to think about version numbers. 

Do you welcome our Evergreen Overlords? Sound off in the comments.

Related Reading

SOCIAL: Hey folks, please do follow me on Facebook https://fb.me/scott.hanselman or Twitter! https://twitter.com/shanselman

* Photo "Road Work" by Grempz used under CC BY 2.0


Sponsor: Big thanks to Infragistics for sponsoring the feed this week! Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid - Download for free now!



© 2015 Scott Hanselman. All rights reserved.
     

Dealing with Software Religious Arguments and Architectural Zealotry

$
0
0
4302882942_9e2b92fdeb_b

Warning: Excessive use of Capitals for Emphasis ahead.

A friend of mine left his job to start a medical startup and has been in the middle of a Fight Over The Tech Stack. The current challenge is very bifurcated...very polarized. It's old vs. new, enterprise vs. startup, closed vs. open source, reliable vs. untested. There doesn't seem to be any middle ground.

Sometimes fights like these start with a Zealot.

Zealot: a person who is fanatical and uncompromising in pursuit of their religious, political, or other ideals.

Not all, don't get mad yet, but sometimes. Sometimes a Technical Religious Zealot is on your team - or runs your team - and they can't make objective decisions about a particular piece of technology.

"Don't use Microsoft, it killed my Pappy! Rails? Please, that won't scale. Node? Maybe if you're 17 that'll work! The only real way to write right software is with Technology X."

The language may not be this overt, but the essence is that Software can only be built This Way.

Here's the thing. Lean in. There's lots of ways to build software. Lots of successful ways. In fact, Success is a great metric.

But there's a lot of crappy Java apps, there's a lot of crappy C# apps, and there's lot of crappy Technology X apps.

Enthusiasm for a technology is understandable, especially if you've had previous success. I've worked in C++, Pascal, node.js, Java, and C#, myself. I've had great success with all of them, but I'm currently most excited about .NET and C#. I'm an enthusiast, to be clear. I've also told people who have hired me for projects that .NET wasn't the right tech for their problem.

Be excited about your technical religion, but also not only respect others' technical religion, celebrate their successes and learn from them as they may inform your own architectures. Every religious can learn from others, and the same is true in software.

Beware the Zealots. Software is a place for measurement, for experience, for research, and for thoughtful and enthusiastic discussion. You or the Zealot may ultimately disagree with the team decision but you should disagree and commit. A good Chief Architect can pull all these diverse architectural conversations and business requirements into a reasonable (and likely hybrid) stack that will serve the company for years to come.

Dear Reader, how do you deal with Technology Decisions that turn into Religious Arguments? Sound off in the comments.

SOCIAL: Hey folks, please do follow me on Facebook https://fb.me/scott.hanselman or Twitter! https://twitter.com/shanselman

* Photo "Enthusiasm Rainbow Gel" by Raquel Baranow used under CC BY 2.0


Sponsor: Big thanks to Infragistics for sponsoring the feed this week! Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid - Download for free now!



© 2015 Scott Hanselman. All rights reserved.
     

Windows 10 IoT Core controlling a Raspberry Pi 2 Robot

$
0
0
Windows 10 IoT Core on a Raspberry Pi 2 controlling a robot

My 7 year old sat down and built a little robot from instructions listed at Microsoft's IoT Hackster site.

To build the robot, you will need the following:

  1. Wooden Robot Frame in 7 pieces - Get the cutting plans from the Sumo Robot Jr. GitHub repo and submit them to http://ponoko.com. They cut them 4 to a sheet of P3 5.2 mm Veneer Core Birch
  2. 2x continuous rotation servos, like these
  3. A ball caster, like this for the front "wheel."
  4. A USB Xbox 360 Controller 
  5. A Digital switch, like this. You can actually skip this if you want to, it's not require just to move the robot.
  6. 6x 6" Male-to-Female Wires (2 red, 2 white and 2 black) like these
  7. 2x 6" Female-to-Female Wires (1 red and 1 black) like these
  8. Screws, Nuts, Bolts and standoffs like this. This was a little bit of a challenge for us, as the screws I got for the axels of the wheels weren't long enough. You may need to make a few short trips to your local hardware store.
  9. Raspberry Pi 2, a 2 Amp power supply, SD card, network Ethernet cable. I actually ended up using a portable battery that I use to charge my phone.
  10. Micro screwdrivers

Starting with a Raspberry Pi 2, walk through the setup instructions here. You do need to have a Windows 10 today to installing Windows 10 IoT Core but at least it's gotten a lot easier with the latest build for IOT. There's an app that does all the work and you don't need to go to the command line. Also get Visual Studio 2015 Community and the Windows IoT Core Project Templates. Basically just follow these step-by-step instructions.

Once you have the Raspberry Pi 2 loaded and you've got VS, the code for the robot is here on GitHub. The instructions don't include a photo with pinout information, so someone else who completed the project took pictures of the correct orientations for pins.

A few things about Windows 10 IoT Core on small devices like this. It's NOT "desktop Windows." It's not full Windows with a Store and Office. You CAN run Universal apps and they can have a UI. In fact, the robot app can run on your PC and control the robot remotely, OR it can run the same app on the Raspberry PI and control it from there.

Here in VS2015 you can see under Debug the name of my Raspberry PI ("minwinpc") and that I'm targeting it remotely and as an ARM device.

image

I was having so much fun working on assembling this that after the kids went to bed I did a 30 min Google Hangout/YouTube and demonstrated the whole thing. You can watch that here, below. Please also take a moment and subscribe to my YouTube Channel.

Check out http://microsoft.hackster.io and http://idevthis.azurewebsites.net/ for more projects, code, and inspiration. Have you built anything?

SOCIAL: Hey folks, please do follow me on Facebook https://fb.me/scott.hanselman or Twitter! https://twitter.com/shanselman



© 2015 Scott Hanselman. All rights reserved.
     

On Disconnecting

$
0
0

Yes, I'm writing a blog post about disconnecting from technology. No, the irony is not lost on me. ;)

Storm Trooper on Vacation by JD Hancock used under CC

 

Disconnecting can be hard for a number of reasons, in my experience. There's the usual obvious stuff like the fact that we're literally addicted to the serotonin rush of social media's faux urgency, but there's also aspects that aren't talked about as much. Like, will I have a job when I get back?

I know it's silly to say (or at least, I think it's silly to say) but I still think about the day to day stuff at work and wonder "well, if I leave, who will do it?" Now, hang back, this isn't about me, it's about irrational feelings, so bear with the post. I'm certainly not irreplaceable, none of us are, but I think it's common to feel a combination of feelings like:

  • Who will work on Project X without me?

This implies I'm either the only one, or the best suited. Then there's the opposite:

  • What happens if I'm gone so long that they realize they never needed me at all?

Sometimes on vacation I feel both of these things. They are irrational, but that doesn't make them any more real.

The hardest part about going on vacation isn't the disconnecting, for me, it's the realizing that I'm supposed to go on vacation.

What do YOU think about vacation, Dear Reader? Am I alone in my thoughts here?

* Photo "Stormtrooper on Vacation by JD Hancock used under CC


Sponsor: Big thanks to Infragistics for sponsoring this feed this week! Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid - Download for free now!



© 2015 Scott Hanselman. All rights reserved.
     

Our great big 15 year vow renewal

$
0
0

Mo at the first weddingYou may have noticed that I'm on vacation these last few weeks. It's the first vacation of any length I've had in a while. In fact, I do have trouble disconnecting sometimes.

I've mentioned before that my wife and I have gotten married a few times. As my wife is a Zimbabwean there was the matter of lobola and a judge wedding, a white wedding, a wedding in Zim, and on and on. We like weddings.

My friend said that my wife and I are the "most gettingmarriedest people" she knows. I think everyone should get married at least a few times, and even better if it's to the same person over and over. ;)

This vacation was our 15 year anniversary so we decided to get married again! We organized a 15 year vow renewal and invited a ton of people. Folks came from South Africa, Haiti, New York, LA, Washington, and all points in between. We had a blast, we ate, we danced, we talked for hours. We put together a retrospective photoshow and a Spotify Playlist (some songs aren't available or are local MP3s) that is representative of our diverse tastes and the last decade and a half.

Last one! Dances at our 15yr vow renewal? Cha Cha slide, Nae Nae, Whip, Cupid Shuffle, Azonto...

A photo posted by Scott Hanselman (@shanselman) on

Our 15 year vow renewal cake

A photo posted by Scott Hanselman (@shanselman) on

Our wedding party at our 15 year vow renewal!

A photo posted by Scott Hanselman (@shanselman) on

Podcasts

I'd also encourage you to check out the two episodes of The Hanselminutes Podcast where my wife joined me.

And yes, I know the book http://www.relationshiphacks.com is insanely late. It's paused, but it's in my mind. We have 6 chapters and have shopped it around and I just need to take another vacation and get the remaining chapters out of my head. Sorry.


Sponsor: Many thanks to Accusoft for sponsoring the feed this week. If you haven’t yet, check out their Prizm Content Connect, an HTML5 document viewer that allows you to view and edit documents directly in your browser.



© 2015 Scott Hanselman. All rights reserved.
     

The Butterfly Effect of Technology Community

$
0
0
Butterfly Effect by Rhett Maxwell used under CC

The Butterfly Effect is everywhere, truly. The best part is, due to confirmation bias, once you start looking for it you'll see it everywhere. ;)

The Butterfly Effect: This effect grants the power to cause a hurricane in China to a butterfly flapping its wings in New Mexico. It may take a very long time, but the connection is real. If the butterfly had not flapped its wings at just the right point in space/time, the hurricane would not have happened. - Chaos Theory

If you see something cool, share it. If you learn something interesting, share it, and share it in multiple ways. Even a small thing can add up to a big payoff.

I got a great email from a reader this week from Neil of TheSmartFinish. Neil has a small business doing woodworking for connected homes and creates decorative mounts for Nest Thermostats. I have a Nest so Neil reached out to share what he's created.

I tweeted about it. A tiny thing, to be clear. I don't tweet about everything, and I DO get a lot of requests for tweets. My tweets are at my discretion, and I read about it, and shared it.

After a while I thought that Nest should be featuring his stuff themselves. A random tweet from me only goes so far, so I publically told @nest they should feature/RT Neil's stuff. At this point, my butterfly has flapped its wings and I've moved on.


Fast forward and I get the email from Neil. These tweets got some attention and @nest DID actually tweet about him!


This gave him valuable legitimacy and ultimately there was a great article on his project at VentureBeat. Other than the poor title as there are no "ex-marines" - Meet the ex-marine who builds artisanal mounts for connected homes - it's a cool write-up. Now his business is starting to get some new visibility, which is great!

Why am I sharing this story? Absolutely not to toot any horns - certainly not mine - but rather to remind us all about the power of the little things.

I've received hundreds of emails over the last few years with folks sharing stories about "I read this and it got me thinking about" or "listening to this podcast made me quit my job and move overseas" or "my spouse and I were inspired by this post and I switched jobs" and on and on. One reader started a Diabetes non-profit after reading a blog post. Another changed her job and has moved into an industry she really believes in. You might tweet a job opening but never realize that it was the beginning of a move across the country for someone you'll never meet!

I'm a firm believer of the idea that if you put good out there, good stuff will happen. What we do with our tweets, blogs, presentations, podcasts, and books is tiny. We fly our little butterfly wings and try to influence and motivate. What's really amazing are the powerful hurricanes that YOU, Dear Reader, harness for positive change in your life and in the lives of others.

Please, share your Butterfly Effect Stories in the comments! What small things have propelled a huge change in your life?

* Butterfly Effect Photo by Rhett Maxwell used under CC


Sponsor: Many thanks to Accusoft for sponsoring the feed this week. If you haven’t yet, check out their Prizm Content Connect, an HTML5 document viewer that allows you to view and edit documents directly in your browser.



© 2015 Scott Hanselman. All rights reserved.
     

Review: Dremel 3D Printer and initial impressions of the HP Sprout

$
0
0

HP Sprout and DremelI've been having a blast with my new hobby - 3D Printing. I've only been printing for about 9 months but my kids and I are having fun which is what matters.

I've been using an HP Sprout PC (full review of the Sprout coming soon) along with a Dremel 3D Printer to build stuff with the boys. The Sprout is interesting not just for it's form-factor and Intel RealSense camera but also its 3D scanning platform. I don't have the platform yet but I have one on order. The idea is that the platform rotates the object to be scanned while the Intel 3D camera gets depth information, along with structured light scanning and a second 14 megapixels camera capturing textures.  I've got a video here showing the scanning of a teapot. The scans are not perfect, but the scans are a great kickstart for a new project. I'll cover the 3D scanner and HP Sprout more in another separate post, but I will say that it's very fast (an i7!) with a great touchscreen AND a projector with touch mat, so it's effectively a multimonitor multitouch two screen system. My wife has been "scanning" bills with it, while my boys have been spending many hour making StopMotion videos with their LEGOs.

Dremel 3D Printer

In this post I want to focus on the Dremel 3D printer. I've used a Printrbot for several months and have been very happy with it. It's definitely a hobbyist/hacker machine. Many people choose to build a Printrbot from a kit, not just to save money, but also to (forgive me) build owns own lightsaber.

The Dremel feels more Consumer, or at least, Prosumer. While the Printrbot required a few hours before I was printing a basic object, with the Dremel I was printing within 15 minutes. No joke. Now, for a non-techie that might be an hour or so, but seriously, I unboxed it, leveled the bed, and pressed Build on the touchscreen.

The Dremel uses PLA and a non-heated bed. There's special Dremel 3D Build Sheets, essentially like "BuildTak," that adhere to the bed. You also should (you don't have to, but it's easier) use Dremel's filament. Why?

Let's unpack a few things here. No heated bed, use their filament, and just PLA. For the pro this might give you initial pause. But let me tell you - the prints are amazing. Here's a close up.

My first @dremel 3d print. Was absolutely perfect and very smooth first try. #GoMakeThings

A photo posted by Scott Hanselman (@shanselman) on

This is the very first print. The filament runs at a much hotter temperature than I'm used to with PLA. They run it at 220C when I use 180C on my Printrbot. In the Dremel Reddit AMA they mentioned that all this is to maintain "it just works" quality, and I can say now after having printed about 40 things with the Dremel and am currently on my 4th Filament roll that it does just work. I have had one iffy print in 40 prints and it's still usable. Their build tape REALLY works, even with large surfaces. I have had no peeling up or warping.

Here's a video of the Dremel in action.

Video of the @dremeltools 3D printer in action. #GoMakeThings

A video posted by Scott Hanselman (@shanselman) on

And here's a pencil holder that turned out great.

Just had a 4 hour 3D Print finish on the @dremel printer. #GoMakeThings

A photo posted by Scott Hanselman (@shanselman) on

My 7 year old and I wanted to see how far we can push this printer so we are currently trying to print a Crossfire 2 Quadcopter. This is a complex print with over a dozen parts in tight tolerances that will be put under stress (assuming we get it to fly) so it seems like a reasonable test.

So far it's coming out nicely and it's huge. The Printrbot Simple Metal is a great printer with a 6"x6"x6" bed but this is where I really appreciate Dremel's 9"x5.9"x5.5" bed size. You can see the quadcopter's legs below. We're printing two in black so we can tell the copter's front from its back.

In this pic you can see the size difference between the Printrbot and the Dremel. The Dremel is like a small microwave. It's enclosed (which is really nice) and maintains its inner temperature nicely during the print which may be why it hasn't needed the heated bed. At 220C and a very warm inner environment I have had no peeling or sticking issues.

A Dremel 3D Printer printing a Quadcopter

The last quirk about the Dremel that was interesting was that you don't get direct access to it from any app and you can't send it gcode (raw instructions). Instead you use their Dremel all to import STLs and then export them to their g3drem format. This concerned me originally, but opening the g3drem file in notepad shows that it's simply gcode with a small thumbnail image prepended in front. This is a nice touch as the Dremel has a small color touchscreen that shows you what you're going to print.

The standard workflow is simply:

  1. Design or download an STL however you like.
  2. Optional: If it needs supports, open in Meshmixer and add supports. Click Send to Printer.
  3. Dremel 3D opens the exported (with supports) STL file. Click Build to save a g3drem to an SD card.
  4. Take the SD card to the Dremel, click Build on the touchscreen and print!

I continue to use both the Printrbot and the Dremel day to day. I've added/upgraded the Printrbot with a heated bed so I can print ABS plastic as well as PLA, but I've turned to the Dremel as my "daily driver" due to its rock solid reliability. I can definitely recommend the Dremel as a good beginner 3D printer for families, classrooms, or hobbyists. While it's not hackable, it's not meant to be. It Just Works and does exactly what it's advertised to do.

I'll blog in the future as our quadcopter build continues!

3D scanning with #SproutByHP. @hp. Really insane.

A video posted by Scott Hanselman (@shanselman) on

Related Links

Disclosure of Material Connection: HP sent me this Sprout and Printer in the hope that I would review it on my blog and because I've been talking actively about 3D Printing and Maker Culture. Regardless, I only talk enthusiastically about products or services I would use and think you would find useful. I am disclosing this in accordance with the Federal Trade Commission’s 16 CFR, Part 255: “Guides Concerning the Use of Endorsements and Testimonials in Advertising.


Sponsor: Big thanks to my friends at Raygun for sponsoring the feed this week. Only 16% of people will try a failing app more than twice. Raygun offers real-time error and crash reporting for your web and mobile apps that you can set up in minutes. Find out more and get started for free here.



© 2015 Scott Hanselman. All rights reserved.
     

Optimize for Tiny Victories

$
0
0
image

I was talking with Dawn C. Hayes, a maker and occasional adjunct processor in NYC earlier this week. We were talking about things like motivation and things like biting off more than we can chew when it comes to large projects, as well as estimating how long something will take. She mentioned that it's important to optimize for quick early successes, like getting a student to have an "I got the LED to light up" moment. With today's short attention span internet, you can see that's totally true. Every programming language has a "5 min quick start" dedicated to giving you some sense of accomplishment quickly. But she also pointed out that after the LED Moment students (and everyone ever, says me) always underestimate how long stuff will take. It's easy to describe a project in a few sentences but it might take months or a year to make it a reality.

This is my challenge as well, perhaps it's yours, too. As we talked, I realized that I developed a technique for managing this without realizing it.

I optimize my workflow for lots of tiny victories.

For example, my son and I are working on 3D printing a quadcopter drone. I have no idea what I'm doing, I have no drone experience, and I'm mediocre with electronics. Not to mention I'm dealing with a 7 year old who wants to know why it hasn't taken off yet, forgetting that we just had the idea a minute ago.

I'm mentally breaking it up in work sprints, little dependencies, but in order to stay motivated we're making sure each sprint - whether it's a day or an hour - is a victory as well as a sprint. What can we do to not just move the ball forward but also achieve something. Something small, to be clear. But something we can be excited about, something we can tell mommy about, something we can feel good about.

We're attempting to make a freaking quadcopter and it's very possible we won't succeed. But we soldered two wires together today, and the muiltimeter needle moved, so we're pretty excited about that tiny victory and that's how we're telling the story. It will keep us going until tomorrow's sprint.

Do you do this too? Tell us in the comments.


Sponsor: Big thanks to my friends at Raygun for sponsoring the feed this week. Only 16% of people will try a failing app more than twice. Raygun offers real-time error and crash reporting for your web and mobile apps that you can set up in minutes. Find out more and get started for free here.


© 2015 Scott Hanselman. All rights reserved.
     

Free Training at Microsoft Virtual Academy - Introduction to ASP.NET 5

$
0
0

In 2013, Jon Galloway, Damian Edwards, and myself went up to film a LIVE 8 hour long Microsoft Virtual Academy training session called "Building Web Apps with ASP.NET Jump Start." We returned in 2014 with "Building Modern Web Apps with ASP.NET." Both of these are free, and are effectively a full day each of content.

Just a few weeks back here in September of 2015, we recorded "Introduction to ASP.NET 5." This is 100 to 200 level beginner content that starts at the beginning. If you're just getting started with ASP.NET 5 (currently in Beta) or perhaps you have been meaning to dig into the new stuff in ASP.NET 5 but haven't gotten around to it, this a good place to start.

image_08347e93-9435-4eab-865f-611c432b2562

Introduction to ASP.NET 5

We cover

  • Introduction to ASP.NET 5
  • Introduction to Visual Studio
  • Introducing Model View Controller (MVC6)
  • Getting Started with Models, Views, and Controllers
  • Debugging Web Applications
  • Configuration Data
  • Publishing Your Application
  • Using Data with Entity Framework

In the final three segments, we work with Damian Edwards to dissect every line of code in the real-world cloud-deployed application that runs our weekly standup at http://live.asp.net.

  • Exploring live.asp.net
  • Managing Data on live.asp.net
  • Advanced Features in live.asp.net

It's a full day of detailed video training with assessments after each video. You can seek around, of course, or download the videos for offline viewing. We are pretty happy with how it turned out.

We'll be returning to Microsoft Virtual Academy over the next several months to record 300-400 level advanced content as well as a Cross-Platform specific show for Mac and Linux users who want to develop and deploy ASP.NET applications. I hope you enjoyed it, we all worked very hard on it.


Sponsor: Big thanks to my friends at Infragistics for sponsoring the feed this week! Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid - Download for free now!



© 2015 Scott Hanselman. All rights reserved.
     

Review: 3D Scanning with the HP 3D Capture Stage on the HP Sprout PC

$
0
0

HP Sprout with Capture StageThe 7 year old and I have been trying to make various things with the HP Sprout (review soon) and Dremel Printer. I was sent review versions of both to explore and give feedback on. We've learned a lot and filed a lot of bugs and received lots of great software updates.

About two months ago we tried 3D scanning an object using the Intel True Sense camera and manually rotating a 3D object on the HP Sprout's touch pad. I was both impressed and unimpressed with the results. Impressed because 3D Scanning is a biscuit away from straight magic. Unimpressed because it was a tedious process and the result was a little chopped up.

But then the Spout folks sent over a "HP 3D Capture Stage" for me to try. I'll be totally honest, I thought this was going to be a cheap rotating circle, basically a Skylander's portal with a motor. I couldn't be more wrong, this thing is built like a TANK. It's actually a rotating stage split on an angle that connects via USB and allows the Sprout to angle the object between 0 and 15 degrees, however it likes. Combining this with both a 14 megapixel camera AND an Intel RealSense Depth Camera, the results are significantly better than my first attempts.

The HP 3D Capture Stage is $299 by itself, which is admittedly not an impulse purchase. The price point that I'm impressed with though is the "Sprout 3D Maker's Bundle" which includes the HP Sprout itself (no slouch with an i7 and 8 gigs, stylus, and 23" touchscreen + 20" second screen/touch mat) AND the 3D Capture Stage AND a Dremel 3D Printer all for $2999. (US$3k) That's the Sprout with the Dremel Printer and the Capture Stage is free, essentially.

ASIDE: It blows my mind that I got a loan from the bank and paid $2,800 for a 486DX/33 in 1990 and today I can get something like a Sprout AND 3D Scanner AND Printer for about the same. Seriously, Star Trek: The Next Generation is coming. Throw in an Oculus or a HoloLens and we're living in the future.

OK, first things first. Can you scan an object, get a perfect model, then 3D print the same object? Essentially photocopying/xeroxing 3D objects? No.

But you can get a VERY nice 3D model of a real physical object in just a few minutes and then export it to your favorite app for manipulation.

Here's my FIRST scan where I sat for 15 minutes and rotated a teapot 15 degrees each time the computer told me to. Not so good. And I was VERY careful and accurate, I thought.

A manually scanned 3D object

Here's the SAME teapot on the 3D Capture Stage. I used the supplied putty to gently stick the object on the stage at an angle.

Preparing a scan with the HP 3D Capture Stage

Here's a video of the start of the process. It's totally automated, but after you're done if you feel the object wasn't completely represented you can put it on its side or flip it over to get occluded sides.

A video posted by Scott Hanselman (@shanselman) on

I did scans a total of 3 times and got this auto-merged result. While the lettering got blurred after the second scan, the general structure of the teapot is 95% correct.

Teapot scanned by an HP Sprout 3D Capture Stage

I exported it into the Microsoft 3D Builder Software and got this result.

A 3D scanned Teapot using the HP Sprout 3D Capture Stage

It's also worth noting that the 3D scanned object and the textures are totally separate now, so if I wanted to make a red wooden teapot from this scan, I could.

Texture Map of the Teapot from the HP Sprout Capture Stage

Additionally, if I wanted it to be empty (like a real teapot) and have a top that could come off, I'd want to spend some time with this 3D Scan in a 3D modeling tool and actually DO THAT. ;)

The 3D Scanning Stage could be a great way for a burgeoning game designer to collect unusual objects, obtain textures and texture maps, and really jumpstart a 3D model.

3D Scanned Teapot from the HP Sprout's 3D Scanning Stage in the Dremel 3D Software

So far the whole thing has been amazing. The software has been continually updated, and while it's not perfect, it's definitely cool. My kids of been doing 2D stop-motion animation and my wife has been using it for scrapbooking.

A full review and YouTube Video is coming soon, but so far I can tell you that the HP Sprout is not just a fantastic "Kitchen PC" and a "Maker PC" but I could really see it being my family's primary computer. That said, the real place it shines is in education. I'd love it if my kids had a complete PC/scanner/printer combo available to them in their classroom.


Sponsor: Big thanks to my friends at Infragistics for sponsoring the feed last week! Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid - Download for free now!



© 2015 Scott Hanselman. All rights reserved.
     

How to customize the Windows 10 Start Menu

$
0
0

It's been a few months, and pretty much everyone in my family and neighborhood has slowly upgraded to Windows 10. Some have upgraded from Windows 7 and others from Windows 8. For the most part, from a SAF (Spouse Acceptance Factor) it's been a non-issue, which is amazing, frankly.

I have been doing a few videos on Windows 10 that you can find at http://hanselman.com/windows10. I'd encourage you to share them with your friend and family or any one who's interested in being more effected with Windows! If you've still got family who are using Windows 8, my tutorials are at http://hanselman.com/windows8 but, hey, it's time to upgrade them to Windows 10.

Windows 10 has much higher SAF than Windows 8.

The first thing I recommend that everyone do once they've installed Windows 10 is to spend a few minutes customize the default experience. Out of the box you'll get a Start Menu that looks something (basically) like this.

The default Windows 10 Start Menu

This is "fine" but it's nice to customize things and make them your own.

First, you can make the Start menu wider by grabbing the right side of the menu and dragging. Grab the top and do the same thing, and make it the height and width that makes you happy. I like a 2/3s of the screen style "not a start screen but still a big menu" look, myself.

Expanding the Windows 10 Start Menu

Tiles

Pin a bunch of apps, but not just any app. I prefer apps that I use a lot, but also apps that have a pleasant Live Tile. You can right click on any app and set their tile size. Desktop Apps can be small or medium, and Windows 10 Store Apps can be small, medium, wide, or large. I like to mix it up, but that's what's nice about the Start menu, you can make it your own.

In one of my YouTube videos a person asked "how can I make these horrible live tiles ago away." Well, unpin them all. I think you're missing out, Random Internet Commenter. Another solution might be to just turn off Live Tiles. Often it's the movement folks find distracting, not the tiles themselves.

Color

Go to the start menu and type "Color." When you go into the Settings app and into Personalization | Color, you can change a bunch of stuff. I like to have the Start Menu automatically pick a color from my wallpaper, then I change my wallpaper every 30 min (more on this soon). When my wallpaper changes, my accent color changes.

Themes

The Themes Control Panel is one of the last places in Windows 10 that hasn't been updated with a new Settings page. That's a bummer because it's one of my favorite features. I hope it lives on. Themes can be downloaded by just searching for "Windows themes" or "Windows 8 themes." I like the "Best of Bing" themes that include wallpaper from popular Bing backgrounds. These themes are really RSS feeds that bring down fantastic free wallpapers.

If you combine themes with the "Automatically pick an accent color from my background" feature, you'll get a nice dynamic experience in Windows where your colors and wallpaper change as often as you'd like. I mix it up every 30 min.

image

More Folders

Another great setting that doesn't get used enough is "choose which folders appear in start." Go ahead and click the Start menu and type "choose which" to get there quickly. Remember also that your Settings menu is full searchable.

Your default Start Menu will have something like this at the bottom:

The Default Start menu in Windows 10 has few shortcuts

But once you "choose which folders appear in start" you can have useful shortcuts like these. This is a huge timesaver. Hit Start, then click and you're right in your Downloads folder.

image

Adjust the Taskbar

By default Cortana shows up as a text box at the bottom in your Taskbar. But you can change Cortana into a single button and regain more space on your Taskbar. It's up to you.

Right click in the Cortana text box and click Cortana. You can select Hidden, Show Cortana Icon, or Show Text Box.

Making Cortana smaller and getting more space in the taskbar

You can also remove the Task View button if you want as well.

Steam Tile for Games

I did a video on how amazing it is to stream a game from your Xbox One to your laptop. It really is. However, I also use Steam and I have a pretty large collection of Steam games. There's a GREAT application for Windows 8/10 called Steam Tile. If you use Steam, go get this application NOW. It's fantastic. It connects to your Steam account and gets your connection. Then it takes the art for each game and lets you Pin that game to your Start Menu.

Steam Tile makes for a VERY attractive Start Menu. The games launch into Steam, chained from Steam Tile. Steam Tile is an app that arguably fixes Steam by adding these awesome configurable and croppable live tiles.

Steam Tile is amazing

What have you done to customize your Start Menu in Windows 10? Sound off in the comments.

Related Links


Sponsor: Big thanks to the folks at Atalasoft for sponsoring the feed this week! If your project requires image viewing, format freedom, scanning, or other document-centric workflows, Atalasoft’s document imaging experts can help. Evaluate their developer tools for 30 days with remarkable human support.



© 2015 Scott Hanselman. All rights reserved.
     

Review: TP-Link AC3200 (Archer C3200) Wireless Router

$
0
0

TP-Link AC3200 (Archer C3200) I've always been a Linksys or NetGear router person. I loved the legendary Linksys WRT54G and ran DD-WRT on it for years. A while back I updated my router to the Linksys WRT1900AC. This router was supposed to be the second coming of the WRT54G and promised enthusiastic support for alternate firmware. For about a year I ran the WRT1900AC with the stock firmware as there was a bit of controversy as to what that support would look like. Fast-forward a bit and it appears that Linksys and Marvel have been working together to solve some technical issues and have reached out to the OpenWRT and DD-WRT folks but unfortunately there is still no release place for DD-WRT for the WRT1900AC. I am tired of waiting and some recent instability in the stock firmware has got me shopping around.

I did some research and decided on the TP-Link AC3200 (Archer C3200). Now, before you say it, I will. This is a prosumer router. It's not cheap. But so far, it's been brilliant. I've tired $50 routers and they tip over with what I throw at them. I've got a minimum of about 20 devices on the network at a time, and often as many as 35-45. I want to be able to manage them differently, apply QoS (Quality of Service) rules, as well as segment my network. However, I am not a network engineer and I don't feel like being one. I've also had issues with range in the past but I don't feel like having two routers and one SSID. So far, it appears that this TP-Link Archer C3200 router can handle everything I throw at it.

TP-Link AC3200 (Archer C3200) 

First, let me say that this router looks like a UFO. It's a very dramatic design, but it's for a functional reason. Those are six folding antennas on the top.

router

Installation in my home took about 30 min from the moment it left the box until the whole house and every device was set up. I personally found the web interface to be simpler and more organized than any other router I've ever used, and I've used them all.

In this screenshot you can see that there are currently 18 devices connected and there are three wifi networks. I really like this feature. I've setup my own 5GHz SSID for my office, while the family gets their own 2.4GHz WiFi Network, and Netflix/Streaming/XBox devices get their own 5GHz SSID. It's nicely compartmentalized. Even more, I could optionally turn on one or more Guest Networks when folks visit from out of town. This gives guests internet, but keeps them off from seeing internal devices.

TP-Link AC3200 (Archer C3200) Wireless Router UI

If the idea of three SSIDs is too much for you, they also have a feature called "Smart Connect" which basically collapses a 2GHz and two 5GHz SSIDs and associated channels into a single Smart SSID that will abstract 802.11bgn across many channels. You get one SSID (Wireless Network Name) and the router handles the rest, automatically putting your devices on the right network given their capabilities.

There's also great Parental Controls built in, where you can set a Time Schedule per device. For example, you could make it so your child's iPad could only access the internet during certain times of the day. You would need turn off iOS Mac Address Randomization for this to work, I believe.

This TP-Link AC3200 (Archer C3200 also has some light NAS (Network Attached Storage) features that allow you to access disks via FTP, DLNA, or SMB (meaning you can talk to it via \\ROUTER\share for example). You could also even expose a disk over FTP externally if you wanted to. The router can also be a print server and make any USB printer a wireless/network attached printer which could be helpful if you've got a home office.

For the tech enthusiast/prosumer user the only nit I would say could use improvement is the Bandwidth Control (QoS) panel. It could be a little friendlier. For example, I can certainly figure out the IP Range and Port Range for Xbox Live or Netflix and set the Bandwidth rules, but since those are already pretty well understood it would be nice if there was just a dropdown or set of smart defaults. For example, we would ALL want to be able to check a box that says "make sure Netflix doesn't get slow when my spouse checks email." This dialog could be simpler.

Aside: My spouse asked me why Netflix gets slow sometimes when other people are streaming or pushing the network. I said that it's the same reason that the shower water changes temperature when someone flushes the toilet elsewhere in the house.

TP-Link AC3200 (Archer C3200) Wireless Router UI

So far I've been VERY happy with this router. Set up was a breeze, perf has been fantastic, and there hasn't been a single hiccup. I'll report back later.

Do you have this router? Or do you recommend another router? Sound off in the comments below.


Sponsor: Thanks to my friends and Infragistics for sponsoring the feed this week. Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid - Download for free now!



© 2015 Scott Hanselman. All rights reserved.
     

Introducing ASP.NET WebHooks Receivers - WebHooks made easy.

$
0
0

ASP.NET Web Hooks Receivers general architectureThere's been a lot of enthusiasm lately about the direction that ASP.NET is going lately, and rightfully so.

However, while ASP.NET 5 is cool and exciting, it's also not yet released (at the time of this writing, Beta 8 is being worked on). There are very cool things happening around ASP.NET 4.6 which is released and ready to go live today. Something else that's VERY cool that I want to explore today is ASP.NET WebHooks, which just came out as a preview and is being actively worked on.

Just as there's Web Forms, MVC, SignalR, Web API and they are all components within ASP.NET, you can think of Web Hooks as another member of the ASP.NET family of technologies. When you want it, it's there to plug in. If you don't use it, it costs you nothing in weight or runtime.

What are WebHooks?

Let's start with the What Are They part of the conversation. WebHooks are a convention. They are HTTP callbacks. Moreover, they are "user-defined HTTP callbacks." You and/or your app signs up for notification when something happens and your URL endpoint will get an HTPT POST when that thing happens. WebHooks can and should be RESTful as well. That means if you have a nice RESTful Web API then adding WebHooks to your application should not only be easy, it should a natural and clean extension.

So what? Why do we need a library for this?

Technically you don't, of course. You could theoretically implement the WebHooks pattern with an HttpHandler if you felt you had something to prove. You could more reasonably do it with ASP.NET Web API, but the general thinking is that if there's a clear and common pattern for doing something then it should be made easier and codified for correctness.

Even more, since WebHooks is such a common pattern and it's being used by folks like Dropbox, GitHub,MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello, and WordPress then it'd be nice if ASP.NET came with support for these right out of the box. And it does. Support for receiving all of these and more is included.

There is also a need for easy ways for your applications to send events as WebHooks. In order to do that you need to manage and store subscriptions, and when the time comes to correctly make the callbacks to the right set of subscribers.

ASP.NET WebHooks

ASP.NET WebHooks is open source, being actively developed on GitHub and is targeting ASP.NET Web API 2 and ASP.NET MVC 5 today. It helps deal with the administrivia involved in dealing with WebHooks. It was announced on the Microsoft WebDev blog (you should subscribe) a few weeks back.

There's some great docs already being written but the most interesting bits are in the many examples.

When you install ASP.NET WebHooks you get a WebHook Handler that is the receiver to accept WebHook requests from services. Using a GitHub WebHook as an example, you can easily make a new project then publish it to Azure WebSites. GitHub WebHooks are required to use SSL for their transport which could be a barrier, but Azure WebSites using the *.azurewebsites.net domain get SSL for free. This will make your first WebHook and testing easier.

A good starter WebHook to try creating is one that gets called when an event happens on GitHub. For example, you might want a notification when someone comments on a GitHub issue as a first step in creating a GitHub bot.

The default routing structure is https://<host>/api/webhooks/incoming/<receiver> which you'll put in your GitHub repository's settings, along with a SHA256 hash or some other big secret. The secret is then put in a config setting called MS_WebHookReceiverSecret_GitHub in this example.

public class GitHubHandler : WebHookHandler

{
public override Task ExecuteAsync(string receiver, WebHookHandlerContext context)
{
string action = context.Actions.First();
JObject data = context.GetDataOrDefault<JObject>();

return Task.FromResult(true);
}
}

In this tiny example, the "action" string will contain "issues" if someone comments on an issue (meaning it's an event coming from the "issues" source).

Once you've been triggered by a WebHook callback, you can decide what to do about it. You might want to simply respond, log something, or start a more sophisticated process. There's even a way to trigger an Azure WebJob with this new extension.

More WebHooks

Sending WebHooks is similarly simple and there's already a great post on how to get started here. Finally there's even some skunkworks tooling by Brady Gaster that plugs into Visual Studio 2015 and makes things even easier.

What a lovely dialog box for making ASP.NET WebHooks even easier!

Go check out ASP.NET Web Hooks and give your feedback in the GitHub issues or directly to Henrik or Brady on Twitter!


Sponsor: Thanks to my friends and Infragistics for sponsoring the feed this week. Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls.  Get super-charged performance with the world’s fastest HTML5 Grid - Download for free now!



© 2015 Scott Hanselman. All rights reserved.
     
Viewing all 1148 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>