Scott Hanselman

A month with an Intel Haswell prototype

September 6, '13 Comments [19] Posted in
Sponsored By
haswell

Intel sent me a Haswell Developer Prototype Ultrabook to review a little over a month ago. In order to effectively review this, given my experience, I need to separate the Haswell Chipset and Processor from this specific machine that they send folks to review.

I did not receive a very good unit - definitely not one ready for production.

Now, to be fair, it's marked as an "Intel Software Development Platform" prototype. This is not a machine that will ever be built, and it's also (they tell me) still getting drivers developed. It's a fairly regular looking gunmetal Ultrabook with no markings other than the Intel and Ultrabook logos. It's a lot like my Lenovo X1 Carbon Touch except it has a 1080p (vs. 900) screen and it's a Haswell. This review platform is a new i5 vs. last year's i7 in my X1.

Last year I looked at the 3rd gen "Ivy Bridge" ultrabooks and was impressed. So impressed that I eventually bought a Lenovo X1 Carbon Touch:

First: This particular Haswell Reference Platform device

This year's Haswell review unit has been nothing but trouble for me. Such trouble, in fact, that they've sent me THREE separate laptops as the first two both were unacceptable for different reasons. The first laptop had the SSD fail completely within a week. The second laptop had a bad Synaptics touchpad where only the right side worked. While the third one is workable, it turns off randomly, doesn't want to support standby/sleep and has a wonky keyboard with an unreliable "A" key.

Again, they're reference review laptops, but let's just say they aren't production quality Lenovo X1s or MacBook Airs. To be very frank, these not-ready review/prototype laptops and the experience I have had with them actively do the product a disservice. I'm sure Haswell as a platform is lovely and I would like to see how a Haswell-enabled system makes my life as a developer better. However, in order to do that I expect the mouse to work, the Bluetooth to be reliable and for the screen to stop rotating to the left without warning (even though I keep setting auto-rotate off.)

With the Ivy Bridge reference platform I saw constant and consistent improvements in system behavior with regularly updated drivers. With this Haswell reference platform I have seen just one driver drop, been told to not upgrade to Windows 8.1, and only updated the BIOs once. I have no idea if this device will ever become usable in the future because I have no communication or indication when new drivers are coming.

Second: Using Haswell every day...and the power promise

Ok, now that that's over. I've been using this every day running Windows 8 and have presented at two conferences with this device. I've run both VS2012 and VS2013 on it.

Even though Windows 8.1 does away with the WEI (Windows Experience Index) and I think that's a shame as it's a totally useful and built-in way to get a sense of how a computer will perform, I'm running Windows 8 on this Haswell machine and can still run it.

Surprising new device gets almost an identical WEI as my Lenovo X1 differing significantly only in memory ops/sec. I've heard this elsewhere that an i5 Haswell can perform as well as an Ivy Bridge i7 *and* with a much improved power profile. Haswell isn't (to me) about pure speed, it's about speed, power, and lightness.

image

This is very light laptop. As my second laptop around 3lbs it's cemented my conviction that I'll never own a big heavy luggable laptop again. There's just no reason for a 10 pound device anymore.

Performance, however, does seem dramatically different when on batteries. It appears to be extremely aggressive trying to saving power. This is definitely a laptop where changing Power Profiles makes a huge difference.

The greatest difference in how long this device will last has been screen brightness. When I'm on Power saver on the lowest brightness, I could get a full work day out of this device. However, the lowest brightness is just not feasible. I got between 6 and 7 hours with brightness at about one-third.

balanced-power

Switching to the Balanced Profile with the brightness at the level where Windows warns you it might be a problem, I got about 5 to 6 hours of typing.

power-power2

It's getting to around half-battery where you start getting uncomfortable and wondering if you're going to make it. Changing brightness and profile can get you an easy extra hour on Haswell, where it's just been a matter of 15-20 minutes (in my experience) on other devices.

power-balance power-power

Does Haswell deliver the all-day battery laptop?

  • Yes, if you write prose for a living.
  • Yes, if you aren't running at full brightness.
  • Yes, if you work in SSH or VIM and a remote Linode machine is actually doing the work while your Haswell waits.
  • No, if you're writing and compiling a 3D game locally.
  • No, if you're playing Steam and running TorchLight II.

Should you get a Haswell machine? Absolutely. If you're in the market for a machine and there's a Haswell version of your favorite coming soon, wait. You'll get the same speed and better battery life. Maybe not all day, but 50% more than before. I'm looking forward to the refreshed Lenovo T and X series to have Haswell on board.

All day power? My expectations perhaps aren't reasonable. Haswell and aggressive power management is the future, no doubt. I think, however, that it will be a combination of this plus improvements in battery density that will finally give me a 24 hour device (or 8 hours working hard at full brightness).

ASIDE: From a reviewer perspective, while it's always fun to answer the "what laptop is that?" question with "it's an Intel prototype," the folks at Intel should, when possible, loan reviewers machines that are closer to production that don't have all these driver quirks and hardware quality issues. Why? Well, I really value the opportunity to to review new and prototype hardware, the question always comes up...am I reviewing the keyboard and mouse and screen or am I reviewing the chipset and processor. Of course, there's drivers to hold it all together. This review unit has a loud fan, and iffy construction. But, it has great speed and I didn't think about memory once even though I was running only 4 gigs. I was able to run multiple instances of VS, Outlook and many browsers without even a thought. Even two Virtual Machines and it still felt fast.

I want to get my hands on a device like a Lenovo Yoga 2 Pro or a Thinkpad Yoga. These Haswell devices are going to rock. I have extremely high hopes, but rest assured, your next machine is a Haswell.


Disclosure of Material Connection: Intel sent me this Haswell Ultrabook in the hope that I would review it on my blog. Regardless, I only recommend products or services I would use and think you would find useful. This opinions are mine and mine alone as is this entire post. 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.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

The Broken Windows Theory of App Stores

August 30, '13 Comments [31] Posted in Musings
Sponsored By

Fart

Imagine that the web itself had an app store, and your clicked "New Releases" to see the latest websites that the web just published. It would be 99% crap. And that's being generous.

Having a section in your App Store called "New Releases" is always going to make your store look bad, just like it would the web. Most of the web is random garbage. It's curation - both professional and social - that makes the internet great.

  • Professional curation are sites like BoingBoing that have a team of folks that go looking for awesome. If you only hang out at BoingBoing, the whole internet is awesome.
  • Social curation are sites like Reddit that have a mob of anonymous strangers that go looking...for stuff. If you only hang out at Reddit, the whole internet is...different.
  • Another kind of Social curation is discovery by hanging out with your tribe. Your friends on Facebook and Twitter, even those crazy links your parents insist on emailing you (while including the cc: list from the previous 15 forwards.) We see the internet through these filters: our friends, and our trusted news sources.

Notice that the Chrome Web Store doesn't have this "latest" or "newest" section. The whole thing is curated. You can't find garbage on that store unless you go searching for garbage. Nothing makes it to the front unless it's picked, selected, loved.

The same is true for the iTunes/iOS App Store. It feels high quality because only high quality apps are ever put in front of you. You have to actively LOOK for crappy apps (there's a whole iceberg of them). The larger the iOS store gets, the more "Hall of Fames" and "Best of the Best" collections are created by humans who work there, thereby increasing the general sense of awesome.

These Halls of Fames and Recommended Apps are the App Store equivalent of preferred shelf placement at a physical store. Awesome stuff, popular stuff, or influential stuff is at eye-level or on an end-cap. Crappy stuff is buried - you have to look for it. I don't want to see an aisle at the grocery store that's "newest releases." It would be totally random and likely not give me a good impression of the store.

Intense curation is good and bad. First, it is exclusionary by its nature. Curation is filtering. You're counting on humans to basically check out every app there is and decide what's awesome. There's likely also some "who you know" type stuff going on. That's gotta stress the indie developer out. How do you get noticed? Word of mouth sometimes works, but not until there's some critical mass. It's not like Angry Birds would submit a new app and then cross their fingers and hope it gets noticed. For every discovered gem that the iTunes store declares "New and Notable" there's surely ten that are "Knew Someone at the App Store" or "Had a PR Person."

Without solid curation, nearly every list sucks. NetFlix works so hard on their recommendation engine -even giving $1M prizes to anyone who could make recommendations better - and I still end up going to http://instantwatcher.com more than I go to NetFlix. Why? Curation.

Certainly if you go looking for crap, you'll find it, but if you're an App Store, try to hide your shame.

iPhone Fart Apps

In the take no prisoners (new) world of App Stores, good curation is perception management. It also sets publishers up for success. Read about the story of the iOS app "A Beautiful Mess" and how they have been playing Whack-a-Mole with evil copy-cat apps. Apps with the same name and icon trying to get downloads on the back of A Beautiful Mess's success. With a more aggressive policy on this kind of stuff, the iOS App Store could help the folks at A Beautiful Mess focus on their app, and not an endless defense of their own online brand.

A Beautiful Mess - Clones and Grifters

That's a mess, even with the victim actively trying to fix the problem. It's worse if the brand in question isn't paying attention. Look in fear at the Windows 8 App Store when you search for "Facebook." Every single one using the Facebook name and Facebook icon. And every single one likely sucks.

image

Remember Broken Windows Theory, with my modifications.

The theory states that maintaining and monitoring [App Stores] in a well-ordered condition may stop further vandalism and escalation into more serious crime.

You gotta fix those broken windows before your App Store turns into a bad neighborhood.


Sponsor: A huge thank you to my friends at Red Gate for their support of the site this week. Check out Deployment Manager! Easy release management - Deploy your .NET apps, services and SQL Server databases in a single, repeatable process with Red Gate’s Deployment Manager. There’s a free Starter edition, so get started now!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

The Magic of using Asynchronous Methods in ASP.NET 4.5 plus an important gotcha

August 29, '13 Comments [35] Posted in ASP.NET
Sponsored By

First, I encourage you to listen to episode 327 of the Hanselminutes podcast. We called it "Everything .NET programmers know about Asynchronous Programming is wrong" and I learned a lot. I promise you will too.

Often we'll find ourselves doing three or four things on one page, loading stuff from a number of places. Perhaps you're loading something from disk, calling a web service, and calling a database.

You can do those things in order, synchronously, as is typical. Add up the duration of each Task:

public void Page_Load(object sender, EventArgs e)
{
var clientcontacts = Client.DownloadString("api/contacts");
var clienttemperature = Client.DownloadString("api/temperature");
var clientlocation = Client.DownloadString("api/location");


var contacts = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Contact>>(clientcontacts);
var location = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(clientlocation);
var temperature = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(clienttemperature);

listcontacts.DataSource = contacts;
listcontacts.DataBind();
Temparature.Text = temperature;
Location.Text = location;
}

Each of this three calls takes about a second, so the total type is 3 seconds. They happen one after the other.

Intuitively you may want to make these async by marking the public void Page_Load with async and then awaiting three tasks.

However, Page_Load is a page lifecycle event, and it's a void event handler. Damian Edwards from the ASP.NET team says:

Async void event handlers in web forms are only supported on certain events, as you've found, but are really only intended for simplistic tasks. We recommend using PageAsyncTask for any async work of any real complexity.

Levi, also from the ASP.NET team uses even stronger language. Basically, DO NOT use async on void event handlers like this, it's not worth it.

Async events in web applications are inherently strange beasts. Async void is meant for a fire and forget programming model. This works in Windows UI applications since the application sticks around until the OS kills it, so whenever the async callback runs there is guaranteed to be a UI thread that it can interact with. In web applications, this model falls apart since requests are by definition transient. If the async callback happens to run after the request has finished, there is no guarantee that the data structures the callback needs to interact with are still in a good state. Thus why fire and forget (and async void) is inherently a bad idea in web applications.

That said, we do crazy gymnastics to try to make very simple things like Page_Load work, but the code to support this is extremely complicated and not well-tested for anything beyond basic scenarios. So if you need reliability I’d stick with RegisterAsyncTask.

Using async with voids is not stable or reliable. However, all you have to do is call Page.RegisterAyncTask - it's not any trouble and you'll be in a better more flexible place.

public void Page_Load(object sender, EventArgs e)
{
RegisterAsyncTask(new PageAsyncTask(LoadSomeData));
}

public async Task LoadSomeData()
{

var clientcontacts = Client.DownloadStringTaskAsync("api/contacts");
var clienttemperature = Client.DownloadStringTaskAsync("api/temperature");
var clientlocation = Client.DownloadStringTaskAsync("api/location");

await Task.WhenAll(clientcontacts, clienttemperature, clientlocation);

var contacts = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Contact>>(await clientcontacts);
var location = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(await clientlocation);
var temperature = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(await clienttemperature);

listcontacts.DataSource = contacts;
listcontacts.DataBind();
Temparature.Text = temperature;
Location.Text = location;
}

You can simplify this even more by removing the (in this case totally unnecessary) Task.WhenAll and just awaiting the result of the Tasks one by one. By the time Task.WhenAll  has happened here, the tasks are already back. The result is the same. This also has the benefit of reading like synchronous code while giving the benefits of async.

public async Task LoadSomeData()
{

var clientcontacts = Client.DownloadStringTaskAsync("api/contacts");
var clienttemperature = Client.DownloadStringTaskAsync("api/temperature");
var clientlocation = Client.DownloadStringTaskAsync("api/location");

var contacts = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Contact>>(await clientcontacts);
var location = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(await clientlocation);
var temperature = Newtonsoft.Json.JsonConvert.DeserializeObject<string>(await clienttemperature);

listcontacts.DataSource = contacts;
listcontacts.DataBind();
Temparature.Text = temperature;
Location.Text = location;
}

This now takes just a hair over a second, because the three async tasks are happening concurrently. Async stuff like this is most useful (and most obvious) when you have multiple tasks that don't depend on one another.

Do remember to mark the .aspx page as Async="true" like this:

<%@ Page Title="Async" Language="C#" CodeBehind="Async.aspx.cs" Inherits="Whatever" Async="true" %>

Related Links


Sponsor: A huge thank you to my friends at Red Gate for their support of the site this week. Check out Deployment Manager! Easy release management - Deploy your .NET apps, services and SQL Server databases in a single, repeatable process with Red Gate’s Deployment Manager. There’s a free Starter edition, so get started now!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

A Cloud and Azure Glossary for the Confused

August 26, '13 Comments [10] Posted in Azure
Sponsored By
Cloud by Karen Ka Ying Wong used under CC via Flicker

A parody Twitter account called Confused .NET Dev last week tweeted:

A "crazy" learning curve? CDN? Table? Drive? OK, if you say so, but still, point taken, there's maybe some terms in there that may not be immediately obvious. Here's a few things you should remember when developing for the cloud as well as a small glossary that I hope helps this "confused .net dev" and his or her mixed case Twitter account.

Cloud Concepts

IAAS

Infrastructure as a Service. This means I want the computers in my closet to go away. All that infrastructure, the boxes, network switches, even software licenses are a maintenance headache. I want to put them somewhere where I can't see them (we'll call it, The Cloud) and I'll pay pennies per hour. Worst case, it costs me about the same but it's less trouble. Best case, it can scale (get bigger) if my company gets popular and the whole thing will cost less than it does now.

IAAS is Infrastructure like Virtual Machines, Networking and Storage in the cloud. Software you wrote that runs locally now will run the same up there. If you want to scale it, you'll usually scale up.

PAAS

Platform as a Service. This means Web Servers and Web Frameworks in the cloud, SQL Servers in the cloud, and more. If you like Ruby on Rails, for example, you might write software against Engine Yard's platform and run it on Azure. Or you might write iOS apps and have them talk to back end Mobile Services. Those services are your platform and will scale as you grow. Platform as a service usually hides the underlying OS from you. Lower level infrastructure and networking, load balancing and some aspects of security is abstracted away.

SAAS

Software as a Service. Like Office 365, SharePoint, Google Docs or Adobe Creative Cloud, you pay a subscription and you always get the latest and greatest.

Scale Up

Get more CPUs, more memory, more power. Same computer, but bigger. Like, one 8-processor machine with 128 gigs of RAM, big. Gulliver.

Scale Out

More computers, perhaps lots of them. Maybe eight 1-processor machine with 2 gigs of RAM. No, maybe 32. More little machines, like Lilliputians working as a team to move Gulliver.

Compute

If a computer is working for you, its CPU is working and that's compute. If it's a Virtual Machine or a Web Server it doesn't matter. You get charged pennies per hour, more for larger CPUs.

IOPs

Input/Output Operations Per Second, pronounced "eye-ops." This is unit of measurement used to describe the maximum number of reads and writes to a disk or storage area.

Queue

Just like a Queue in computer science, it's a holding place that lets you store messages and read them back asynchronously.

Content Delivery Network (CDN)

Taking binary blobs within storage and caching them nearest where the content is request. If your customers are in Asia, serve the file from a data center in Asia.

Azure Specific Glossary

Web Sites

Web Sites are "PAAS," that's platform as a service. It's the IIS Web Server in the sky. This is the "Easy Button" as Jon Galloway says. You can take virtually any website and move them up to Azure using Azure Web Sites. You can run ASP.NET, PHP, node.js and lots more.

Azure Table vs SQL Azure

Azure Tables are similar to a document database or NoSQL store. Then there's SQL Azure, which is SQL Server in the sky. Great for SQL-like data with relationships and indexes, etc. There's Azure Storage Tables which is nice when you have a huge pile of records that maybe doesn't have a lot of interrelationships, but there's a LOT of it.

Access Control

Controls Access. Just kidding. No, actually I'm not. Also know as ACS, it's a hosted service that integrates with Microsoft ID, Google, Facebook, Yahoo and other identity providers as well as Active Directory. It supports .NET, PHP, Python, Java, Ruby, etc and you can use it as a centralized authorization store. You can call it with web services from any app and manage users and identities from the portal.

Notification Hubs

Push notification services for any mobile platform. Windows Store, Windows Phone, iOS and Android. Broadcast messages to a user across apps or send single notifications to a user,  a platform or any combination.

AppFabric Caching

In memory caching for apps that run on Azure. You can use existing memory on web roles or dedicate all of a worker roles memory to in-memory caching.

Mobile Services

This is a complete Backend in a Box for apps. This isn’t a great name because it’s not just for mobile devices. It’s a complete backend-as-a-service including authentication and CRUD data access with a dynamic schema in the backend. The services are server-side JavaScript and totally managed for you. Supports iOS, HTML, Windows Phone, Win8, Android, and more. 

Media Service

Media squishing and delivery in the cloud. Production and transcoding workflow, secure delivery to any device, scale up and down elastically.

Service Bus

Secure messaging across firewalls and NAT gateways. It also offers relayed messaging services. Most large hosted and reliable systems need messaging services, sometimes request/response, sometimes peer-to-peer, and sometimes one-way.

X-Plat CLI

An open source JavaScript-written command line tool for Azure management. With node.js and npm installed go "npm install azure-cli --g" and get a complete management console for Azure that runs on Linux, Mac and Windows.

Big Data and HDInsight

Apache Hadoop in the Sky, running on Azure. Hadoop is a giant Java-based MapReduce system for creating data-intensive distributed apps. Azure adds lots to augment with .NET support, LINQ, reporting and more.

Blob

Binary Large Object...it's any binary blob you've put in Azure storage. Throw them in, get them back.

VHD

Virtual Hard Drive. Just like a VHD in Hyper-V or Virtual PC, this binary file represents a complete virtual disk.

Adding more than one disk to a Virtual Machine is a quick and easy way to get more speed for free. For example, if you've got a Virtual Machine running Windows AND a Database like MySQL, you'll have the database application and the Operating System competing for the maximum number of IOPs supported by the disk. Instead, make a new disk and mount it, putting the database on its own drive. This way you've doubled your IOPs with the OS on one drive and the database gets the maximum from its down drive.

Drive

You can mount an single Azure VHD as a disk drive within a Virtual Machine or you can mount Blob Storage as a virtual drive of its own.

Related Links

Did I miss anything major? I'm sure I did, but I wanted to show folks that it's a glossary, sure, but it's not rocket surgery.


Sponsor: A huge thank you to my friends at Red Gate for their support of the site this week. Check out Deployment Manager! Easy release management - Deploy your .NET apps, services and SQL Server databases in a single, repeatable process with Red Gate’s Deployment Manager. There’s a free Starter edition, so get started now!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Hanselman's Newsletter of Wonderful Things: August 5th, 2013

August 26, '13 Comments [5] Posted in Newsletter
Sponsored By

I have a "whenever I get around to doing it" Newsletter of Wonderful Things. Why a newsletter? I dunno. It seems more personal somehow. You can view all the previous newsletters here.

Here's the newsletter that I sent out August 5th. You can sign up here to the Newsletter of Wonderful Things or just wait and get them weeks later on the blog, which hopefully you have subscribed to. Subscribers get the goodness first!


Hi Interfriends,

Thanks again for signing up for this experiment. Here's some interesting things I've come upon this week. If you forwarded this (or if it was forwarded to you) a reminder: You can sign up at http://hanselman.com/newsletter and the archive of all previous Newsletters is here.

Remember, you get the newsletter here first. This one will be posted to the blog as an archive in a few weeks.

Scott Hanselman

(BTW, since you *love* email you can subscribe to my blog via email here: http://feeds.hanselman.com/ScottHanselman DO IT!)

P.P.S. You know you can forward this to your friends, right?


Sponsor: A huge thank you to my friends at Red Gate for their support of the site this week. Check out Deployment Manager! Easy release management - Deploy your .NET apps, services and SQL Server databases in a single, repeatable process with Red Gate’s Deployment Manager. There’s a free Starter edition, so get started now!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.