Changes Are Coming

by Jon Davis 6. July 2011 23:30

Well, it's been a wonderful ride, nearly half a decade working with's great blogging software. But it's time to move on.

Orchard, it was very nice to meet you. You have a wonderful future ahead of you, and I was honored to have known you, even just a little. Unfortunately, you and I are each looking for something different. 

WordPress, you are like a beautiful, sexy whore, tantalizing on the outside and known by everybody and his brother, but quite honestly I'm not sure I want to see you naked more than I already have.

I'm frickin' Jon Davis, I've been doing software and web development for 14 nearly 15 years now, and doggonit I should assume myself to be "all that" by now. Actually, blog engines should be like "Hello World" to me by now. I suppose the only reason why I've been too shy to do it thus far is because the first time I started building a complete blogging solution eight or nine years ago and stopped its continuance six or seven years ago the thing I built was proven to be an oddball hunk of an over-programmed desktop application that I had primarily leveraged to grow broad technical talents. It was a learning opportunity, not a proper blogging solution, and it smelled of adolescence. (To this day it won't even compile because .NET 2.0 broke it.)

In the mean time, I've moved on. I've been an employer-focused career guy for the last five or six years, having little time for major projects like that, but still growing both in technical skill set and in broad understanding of Internet markets and culture.

But I kind of miss blogging. I used to be a prolific blogger. I sometimes browse my blog posts from years ago and find some interesting tidbits of knowledge, in fact sometimes I actually learn from my prior writings because I later forget the things I had learned and blogged about but come back to re-learn them. Sometimes, meanwhile, I'll find some blog posts that are a little bizarre--thoughtful in prose, yet ridiculous in their findings. That's okay. My goal is to get myself to think again, and not be continuously caught up in a daily grind whereby neither my career nor technically-minded side life have any meaning.

Last weekend over two or three days I created a new blog engine. (Anyone who knows me well knows that I've been tinkering with social platform development on my own time for some years, but this one was from-scratch.) I successfully ported all of my blog posts and blog comments from my to my new engine and got it to render in blog form using my own NUnit-tested ASP.NET MVC implementation. I would have replaced here on my site with my blog engine already, were it not for the fact that as I used Entity Framework Code First I ran into snags getting the generated database schema to correctly align with long-term strategies. And as much as I'd be delighted to prove out my ability to rush a new blog engine out the door, I don't necessarily want to rush a database schema, especially if I intend to someday share the schema and codebase with the world.

And I never said I was going to open-source this. I might, but I also want to commercialize it as a hosted service. I'll likely do both.

But it's coming, and here are my dreamy if possibly ridiculous plans for it:


  1. Blogging with comments and image attachments. Nothing special here. But I want to support using the old-skool MetaWeblog API, so that'll definitely be there, as well as the somewhat newer AtomPub protocol.
  2. Syndication with RSS and Atom. Again, nothing special here.
  3. As a blogging framework it will be a WebMatrix-ready web site (not web application). Even though it will use ASP.NET MVC it will be WebMatrix gallery-loadable and Notepad-customizable. The controllers/models will just be precompiled. Note that this is already working and proven out; the depth and detail of customizability (such as a good file management pattern for having multiple themes preinstalled) have not been sorted out yet, though.
  4. AppHarbor-deployable. AppHarbor is awesome! Everything I'm doing here is going to ultimately target AppHarbor. Right now the blog you're looking at is temporarily hosted on a private server, but I want that to end soon as this server is flaky.
  5. Down-scalable. I am prototyping this with SQL Server Compact Edition 4.0, with no stored procedures. Once the project begins to mature, I'll start supporting optimizations for upwards-scalable platforms like SQL Server with optimized stored procedures, etc., but for now flexibility for the little guy who's coming from WordPress to my little blog engine is the focus.
  6. Phase 1 goal: v1.4.5.0 approximate feature equivalence (minus prefab templates and extra features I don't use). is currently at v2.x now, and I haven't really even looked much at v2.x yet, but as of this blog post I'm currently still using v1.4.5.0 and rather than upgrade I just want to swap it out with something of my own that does roughly the same as what does. This includes commenting, categories, widgets, a solid blog editor, and strong themeability; I won't be creating a lot of prefab themes, but if I'm going to produce something of my own I want to expose at least the compiled parts of it to others to reuse, and I'm extremely picky about cleanliness of templates such that they can be easily updated and CSS swappages with minimal server-side code changes can go very far.
  7. Phase 2 goal: Tumblr approximate feature equivalence (minus prefab templates). All I mean by this is that blog posts won't just be blog posts, they'll be content item posts of various forms--blog posts, microblog posts, photo posts, video posts, etc. Still browsable sorted descending by date, but the content type is swappable. In my current implementation, a blog entry is just a custom content type, and blogs are declared in an isolated class library from the core content engine. I also want to support importing feeds from other sources, such as RSS feeds from Flickr or YouTube. Tumblr approximate equivalence also means being mobile-ready. Tumblr is a very smartphone-friendly service, and this is going to be a huge area of focus.
  8. Phase 3 goal: WordPress approximate equivalence (minus prefab templates). Yeah I know, to suggest WordPress equivalence after already baking in something of a and Tumblr functionality equivalence, this is sorta-kinda a step backwards on the content engine side. But it's a huge step forward in these areas:
    • Elegance in administration / management .. the blogger has to live there, after all
    • Configurability - WordPress has a lot of custom options, making it really a blog on steroids
    • Modularity - rich support for plug-ins or "modules" so that whether or not many people use this thing, whoever does use it can take advantage of its extensibility
    • Richer themeability - WordPress themes are far from CSS drops, they are practically engine replacements, but that is as much its beauty as it is its shortcoming. You can make it what you want, really, by swapping out the theme.
Non-goals include creating a full-on CMS. I have no interest in trying to build something that competes directly with Orchard, and frankly I think Orchard's real goals are already met with Umbraco which is a fantastic CMS. But Umbraco is nothing like WordPress, WP is really just a glorified blog engine. If anything, I want to compete a little bit with WordPress. And I do think I can compete with WordPress better than Orchard does; even though Orchard seems to be trying to do just that (compete with WordPress), its implementation goals are more in line with Umbraco and those goals are just not compatible because WordPress is a very focused kind of application with a very specific kind of content management.
And don't worry, I don't ever actually think I could ever literally compete with WordPress as if to produce something better. I for one strongly believe that it's completely okay to go and build yet another mousetrap, even if mine is of lesser ideals compared to the status quo. There's nothing wrong with doing that. People use what they want to use, and I don't like the LAMP stack nor PHP all that much, otherwise I'd readily embrace WordPress. Then again, I'd probably still create my own WordPress after embracing WordPress, perhaps just like I am going to create my own after embracing


Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


ASP.NET | Blog | Pet Projects

A Platform's People Must Be As Pliable As Its Tech

by Jon Davis 18. June 2011 12:57

I haven't blogged for a while because this blog is still hosted on a server that hasn't received payment since my payment subscription ended over a month ago, and I don't want to just set up the same old blog software on the new host I've already arranged. EDIT: Meh I've decided to build my own blogging/social engine and I'm doing this during my free time. 

So remember a while back I mentioned I'd move this blog to Orchard?

It's not that I haven't gotten around to setting up Orchard yet. It's that I am having a huge amount of difficulty embracing it. Besides the fact that it has an incredibly steep learning curve--and then still v1.x level capability once the knowledge plateaus--there is something critically wrong with Orchard that I'm still getting past, and that is the size and attitude of its current community.

A good blogging platform--CMS, whatever you want to call it--will be "hackable" to conform to the proprietary needs of its user. On the technical side, Orchard is perfect for this because it is "just an ASP.NET MVC application", and they tout it as such, up until they actually see ASP.NET MVC developers tackling and hacking it. And yes I can take Orchard's source code and hack at it to meet whatever requirements I have. Personally, I think that this is the only real-world scenario for Orchard anyway simply because it's still v1.x and is still painfully lacking in feature detail.

But its community so far consists of a very small handful of people, and several of them are paid--whether directly or indirectly--by Microsoft. So there has proven to be a very large wedge between those who actually know the platform inside and out and those who, like me, are trying to learn the platform--very few who know the platform well from a development standpoint but are just end users, because Orchard is still so new--and the wedge between these two groups is not just one of knowledge but also of culture and attitude. Those who are maintaining Orchard are insistent that people stay in the box that Orchard constructs. This is so completely not the attitude of a typical open source software developer. Most OSS developers see breaking out of a prebuilt box--especially when the box is still a 1.x "greenfield" project--as a huge and wonderful challenge worth conquering. "Going rogue" with the platform is something that is often embraced by a platform because it highlights the pliability of the platform or else reveals opportunities for improvement.

And I would play my part in seeing this "box breakout" opportunity to be a challenge worth conquering, but every time I sit down to continue to learn the platform and understand its limitations and possibly some seam points I might introduce, I have to ask myself, What's the payoff besides getting my site set up the way I want it? Because I'll admit, my biggest motivation to delve into Orchard is to be an expert in Orchard and to be a useful participating member of its community, so this is not just an investment in the technology but in the community.

So then I ask myself, is the community worth investing in? It is if I'm willing to be the only rogue participant trying to figure out how to break out of the originally intended design and just use the parts of it that I want to use but still ultimately have my own ASP.NET MVC site with an Orchard back-end in certain places. But I'm not willing to be the only rogue. So that leaves me looking like a jerk calling these guys jerks, because they freak out at the notion of using Orchard in a way for which it was not originally intended. (They're not jerks, by the way, and neither am I, I'm just saying it looks something like me being a jerke calling them jerks because tensions rise and a lot of bickering occurs when they can't get past overall intentions and strategy while I'm trying to address a specific technical scenario.)

So perhaps Orchard is not what I want to use, I'm still unsure, and believe me I have pondered just writing my own blog engine (again), but let me be clear: it is not because the Orchard technology isn't a good fit for me, rather it is because the people aren't a good fit for me. They are delivering a product that they think should be used as-is with their own proprietary methods of extending and tweaking (rather than ASP.NET MVC methods of extending and tweaking which again ASP.NET tweaks are in my opinion completely appropriate) and they don't want to help people twist it around and see their hard work made "ugly" or for that matter "insufficient". It's only human to be protective of your investment and its public image, but it's just not a realistic attitude to have when you're still a young 1.x platform less than a year old that still needs to build up a strong community and documentation is still lacking.

Meanwhile, the more I look at WordPress the more I like it. Its core technology isn't much for an ASP.NET developer to look at, but everything else about WordPress is really growing on me, I'm tempted to call it "wonderful". I could sit here and talk about WordPress's wonderfulness for some time but the reality is that everyone who would read this tech blog already knows all about WordPress and if not then just go create a basic WordPress blog yourself, it's free.

In fact, I was working on setting up another site for a friend this week and I used WordPress to do it, and after weeks of frustrations with Orchard and its bland 1.x workflow I must confess that I really just about lost it when I worked in WordPress, it is really just such a nice experience. Granted, the site is actually just a plain-vanilla site (not a full deployment) so it's not like I had a lot of customizations I could do here that I wasn't able to do or figure out in Orchard, so much as the beautiful experience of working with WordPress itself and the rich configurability of WordPress made the disappointment of WP's limited customization flexibility all just wash away.

I can't see myself becoming a PHP programmer consultant touting WordPress, I've had a couple false starts, but the notion has been on the table for nearly a year now, and after trying (albeit not very hard) to work with Orchard I don't think I can get around it.

The best part about WordPress is that it can run in .NET using Phalanger. And I'm seriously considering toying with the idea of abandoning Orchard for WordPress-on-Phalanger-on-.NET.


Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,


Re: Status Update

by Jon Davis 27. May 2011 20:50

No, really. I'll migrate. Soon-ish. In the mean time as long as you see at the bottom of this site the migration is still pending. The down time during migration will likely consume a few days, so I'm not upset about the delays. :) The delays, not to mention the absence of blog posts over the last few months, are caused by recent changes in my life and career; I just haven't had time to make it happen just yet. I'm certain that migrating my data to Orchard will not be too hard.. fer Shirley ..

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5



Status Update

by Jon Davis 13. May 2011 13:07

Greetings to the free people of Earth.

I am just posting another quick status update. First of all, I am employed again; this means I am no longer performing independent consulting services "full-time".

Second, I will be migrating my technical blog to the Orchard platform eventually, and I will also be moving my entire web site and all of my other sites offline temporarily as I migrate hosts. Expect a long-term web site outage at shortly.

That is all. Get back to work, my minions ...

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5



TCP proxying on Linux

by Jon Davis 28. April 2011 10:59

Several months ago I cobbled together a port-modified TCP proxy that runs on the .NET CLR. My intention was to make this usable both in Windows and on *nix systems with Mono. I haven't used it much, though, certainly not in commercial production apps.

However, it appears that *nix already has a couple solutions already in place:



There's also SSH tunneling, which is interesting. 

I'm just short of content, however. As a future change I wanted, and still want, to detect HTTP traffic and to hijack the HTTP headers with an insertion of a custom HTTP header indicating the source IP address. I had done this previously using Apache's proxy but I was hoping to make HTTP detected rather than assumed. I'll see if I ever get around to it.

HTML5 Boilerplate Visual Studio 2010 Template

by Jon Davis 24. April 2011 09:38

So a month or two ago I was hanging out in the jQuery IRC channel on Freenode trying to sort out what was going on with the jQuery team’s support for jQuery Templates, when in enters Paul Irish. Various members of the channel congratulate Paul for his “boilerplate release”. I didn’t know who Paul Irish is nor what this “boilerplate” was. After a couple more minutes I discovered what was going on: is what was going on.

HTML5 Boilerplate is, well, an HTML 5 boilerplate, that does a number of things. Among them, ..

  1. It provides a baseline HTML 5 markup and CSS skeleton that performs a CSS reset and readies the browsers for clean design.
  2. It encapsulates the Internet Explorer versioning discrepancies by using CSS classifications instead of disparate CSS files.
  3. It readies a web site to be hyper-optimized using post-build minifications of script and CSS files and by optimizing all PNG files.
  4. It sets appropriate placeholders for a few expected files for a web site that are often forgotten, including robots.txt, crossdomain.xml, favicon.ico, and a custom 404 page.
  5. It adds PNG support to IE6 via script.

I told Paul that someone should produce a Visual Studio template based on this. He pointed me to a URL of one such template. I tried to use it, but, alas, it was doing some [completely unnecessary, I might add] OpenID stuff based on an unreleased beta version of a .NET assembly that didn’t work on my machine. So I abandoned this “solution” and walked away.

Yesterday I pulled up the Extension Gallery in Visual Studio and found the same solution plus another one just like it. Both of them were mixing in OpenID support with the HTML5 Boilerplate. The new one also has the obnoxious name prefix “MotherEffin ..”.

I will refrain from ranting about the unnecessary pooling of disparate components that can easily be installed with NuGet (or otherwise developed and deployed via NuGet). All I wanted was a clean ASP.NET MVC 3 template with the clean HTML 5 Boilerplate. Is that too much to ask?

Neither of these, to my knowledge, performed any post-build optimizations, either, which was kind of the most important part.

So I created one myself. It is based on the MVC 3 Refresh (v3.01) + VS Service Pack 1. It does move away from Paul’s design somewhat to make it more ASP.NET MVC-like in structure. It performs post-build optimization of scripts and of CSS files using Microsoft’s Ajax Minifier instead of YUI Compressor (only to eliminate the Java/non-.NET dependency; you can always restore any minifier you like). Unfortunately, I was unable to invoke NuGet to reinstall the Entity Framework 4.1 and other dependencies, so users of this template will have to manually install those; these are normally auto-installed with ASP.NET MVC 3.01 (Refresh) projects but Microsoft has not yet documented their method of doing so. Best I could find was this which wasn’t sufficiently descriptive.

One more thing. I’m certain I left some stuff out! That ant build script (build.xml) had plenty going on. There is certainly no HTML minification in my implementation.

Anyway, I did this in one evening and this is the first version of this template (think v0.1).

Here it is, for your enjoyment; put it in C:\Users\{username}\Documents\Visual Studio 2010\Templates\ProjectTemplates\Visual Web Developer\Web\.
That last \Web\ directory may not exist, just create it. Also, leave it in place as a .zip file; do not extract it.

It’ll be the among the Web project templates in “File”->”New”->”Project...” alongside the usual ASP.NET MVC 3 bits. Be sure to select .NET Framework 4.0.

Here’s the source.

If enough people like it I’ll get it packaged and posted on the VS Extensions gallery.



Currently rated 4.8 by 6 people

  • Currently 4.833333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Going MacBook Air, Keeping My Toshiba (For Now), Selling My ExoPC

by Jon Davis 27. February 2011 08:46

I’ve been looking for a reasonable replacement for my huge Toshiba Satellite laptop for a couple years now. It’s been such an awesome gargantuan workstation all these years (since 2007), costing me nearly $3,500 after all the upgrades I’ve put into it including memory and multiple hard drive replacements, ending up finally with SSD. But it’s still a lap-cooking elephant. Half the times I show up in any developer user group setting, someone has to comment about how huge my laptop is. I honestly don’t like that attention, not on laptop size specifically.

On the other hand, I really need the resolution of my big Toshiba’s display. At 1680x1050 I couldn’t ask for a more perfect resolution. All of the other laptops out there, even the “nice” ones, have horribly crappy low resolution of so-called “HD” at 1366x768. Pleeze!! I get it, I understand that mom & pop and other laymen look at higher resolutions and wince at how small everything is on high resolution laptop displays. I AM NOT A FREAKING LAYMAN. I need room for coding windows, toolbars, Solution Explorer, etc. Yet none of the laptop manufacturers are producing professional-grade laptops anymore. Indeed, it seems like laptop displays have been shrinking their resolutions over the years, and high resolution displays are as expensive now as they were a decade ago.

This brings me to the Apple MacBook Air, with the latest refresh from October 2010. With a resolution of 1440x900 but only 13 inches, it seems to be perfect for my needs. It meets the “stop hauling an elephant!” requirement, while at the same time offering a reasonable screen resolution and adequate performance. The tested performance and resolution of the latest MacBook Air 13-inch laptop compare to that of the previous iteration of MacBook Pro 15-inchers. Powerful enough for some serious development and capable enough for everyday needs, I might even end up letting go of my Toshiba laptop, we’ll see. But the MacBook Air comes in place of getting a MacBook Pro..

.. Because speaking of MacBook Pro, what a JOKE the latest refresh is! I waited months for Apple to refresh their MacBook Pro line, with great anxiousness once Air got its refresh, and now that the refreshed Pro laptops are out there I’m totally thinking, what is this crap?? Oh yaaaay, yet another new proprietary connector (“Thunderbolt”) delivered exclusively from Apple, yeah right, that’s precisely what I need. Not! At only twice the bandwidth of USB 3 and zilch of the compatibility of the USB and Firewire standards, there is really no value in that “upgrade”. As for performance and screen resolution, which are really all I was hoping for in the Pro line refresh, there is nothing special about the Pro line versus the MacBook Air. No resolution upgrades and hardly any performance boosts. So Air it is.

Getting a Mac laptop also gives Mac OS X another chance to win me over for Mac-oriented software and web development. I previously bought a Mac Mini to learn iPhone development, but I couldn’t take my back room home office with me to the coffee shop nor to my living room, so it ultimately never worked out. If I have a highly portable Mac with me, though, and a sufficiently powerful one at that, I might actually be able to pick up Obj-C as well as some of the OS-neutral development technologies that I’m still pretty weak in such as RoR, PHP, etc. I’m actually really hoping for this; I’m pretty tired of all the cool people hating on my platform of choice (C#/.NET) as they tote their Mac laptops around. And I think I’d love the camaraderie of their acquaintance.

The Air laptop has yet to arrive but I just got an e-mail that it has shipped. Yay! This comes after literally one or two years of attempting to get something that might stand a chance of deprecating my 2007 model Toshiba, including

  • a consumer-grade ($699) Toshiba laptop purchase, which I hated because of its low screen resolution and crappy trackpad buttons,
  • a maxed-out Dell Studio 17, which Dell delayed and delayed and delayed some more until I cancelled my order two months later, and
  • a maxed-out Dell XPS 17, which I ordered a year later, which Dell themselves cancelled

I also considered (but ultimately I declined)

  • the Toshiba Qosmio, which is yet another elephant with its 18.4 inch display (yikes), and no smaller sizes with that screen resolution available (stupid)
  • one of the Alienware laptops, which are expensive (paying for plastic) and have a really stupid-looking appearance of a dorky computer game and not something I’d like to be seen in public with
  • an Asus gaming laptop, but with so many models coming out every month, there were also always too many compromises, for example if it had optical media and high resolution then I wanted Blu-Ray, but Blu-ray only came in 17-inch elephant models or else low-resolution “HD” displays (1366x768)
  • a Dell Precision Mobile Workstation, but as nice as they are, once all upgrades (RAM etc) are selected they’re way more expensive than MacBook Pros, with not much better specs, and they come from Dell which screwed up both my previous attempts at ordering a laptop so no thanks
  • an HP Envy, .. which, well, .. is fairly nice, but comes at a price and specs that almost compete with MacBook Pro but doesn’t support Mac OS X .. came real close to winning me over, though

These things said and done, I am also finally selling my ExoPC on eBay. It’s now or never; the major computer manufacturers are all getting in on the Tablet form factor now, so competition is gonna get fierce. Selling this will help cover some of the brunt cost of getting the MacBook Air .. by letting me pay the electricity bill so that I can plug the Air in. ;)

Meanwhile I’ll keep the Toshiba laptop. Despite its occasionally unresponsive keyboard, huge size, and hot underside, it’s still a fantastic computer even for today’s standards—I can even play Starcraft 2 on it! But the day may come in a few months when I have so well adapted to the MacBook Air that I don’t need the Toshiba any longer.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Quick December 2010 Update

by Jon Davis 27. December 2010 06:20

I hope everyone had a great Christmas. I just thought I should post a quick note indicating what I’ve been up to lately.

Among other things I am back in independent consulting and subcontracting for software and web development. I enjoyed my previous job and I feel I did my team good—I know the team did me good!—but it was an obvious no-brainer to move on when I did (this was back in September/October), everything fell into place perfectly and it was a satisfying transition on all sides when I resigned. So far I think it was the best decision of my life. I am more naturally a consultant than a yes-man grunt, and yet I am a night owl and see no practical reason to keep myself from doing what I do best at the hours I am most productive—which can sometimes be in the middle of the night on my sofa with my laptop! (That said, I got way less done this Christmas weekend than I planned. Oops.)

Current technical areas of interest and/or focus lately are:

  • – Yeah I’m looking at it again, and from what I understand it’s currently undergoing a “come-to-Jesus” situation with Apache Foundation. One or more of the forks  [1, 2] may end up taking its place as the better Lucene implementation for .NET. But it’s still bread-and-butter for high performance text-based indexing / textual entity matching / content searching.
  • nopCommerce – This particular e-commerce project has been good at staying up-to-date with modern technical standards. Although it gets some heat for being heavily refactored frequently, the advantage is that you can pick this thing up and know that you’re using a modern codebase—currently Entity Framework and ASP.NET Web Forms 4.0, soon to be refactored into ASP.NET MVC 3.0. I’d definitely prefer that over some old codebase that only fixed bugs after v1.0 rather than constantly evolve to modern standards; this is where I begin to disagree with some whiners about .NET who migrate to open source, I see nothing wrong with rewriting an old codebase to something more modern, so long as the people who experienced the pains of lessons learned are still around to reimplement.
  • Orchard Project – As WordPress has grown exponentially in popularity over the last year, I had been seriously considering creating a .NET equivalent of WordPress (core plus extensibility), but Orchard Project meets this goal of WordPress core-plus-extensibility equivalence and pretty much every requirement I wanted to pursue in my own implementation, including the new Razor view engine for ASP.NET MVC 3.0. I have every intention of delving deep into this project’s codebase.
    • I also took the initiative and registered an IRC chat channel for Orchard—#orchard on Freenode, find me as stimpy77—a channel had been asked for but not created and after months went by I decided to just register the channel myself.
    • Finally, I’m going to present a session on this project in March at a local .NET user group in Chandler.
  • Facebook – In case you’ve been living under a rock, Facebook is the most popular web site on the planet at the moment. If Google’s data was social network data, they’d be Facebook. It’s that big. Facebook also has a lot of integration points. The SDK I’m using at the moment is the one at This as opposed to the Facebook Developer Toolkit ( Facebook SDK rather takes advantage of C# 4.0’s dynamic keyword so that the maintainers of the SDK don’t have to have a one-to-one property mapping for every entity documented; Facebook’s API changes far too often to be able to keep up with these changes reliably, so the SDK relies on simple deserialized JSON as dynamic object graphs that can be accessed with minimal code. For me as a .NET developer, it kind of makes haughty dynamic languages’ implementations of Facebook APIs look rather irrelevant.

I’d love to add a lot more to the list but the fact is that I, like many others in the .NET community, have been really quite overwhelmed by all the goings on in 2010 what with Windows 7, Visual Studio 2010, ASP.NET MVC 2.0 and now 3.0, and so on, and have been glad I’ve been able to keep up as far as I have. I still have a ton of catching up to do, though.

Cheers to the New Year 2011!

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Testing Basic ASP.NET MVC View Model Validation With Brevity

by Jon Davis 1. December 2010 21:55

(Note: “Brevity” is not a proper noun. LOL .. sounds like it would make a great library name though doesn’t it?)

I recently attended a Desert Code Camp session that introduced attendees to Rails (as in, Ruby on Rails). I’d gone through similar introductions before, but I needed a refresher and another perspective from another mouthpiece. I was reminded yet again that the bulk of the power of this thingamajig, Rails, is plain vanilla code generation. There is no shortage of code generators in the .NET world, and it is nothing new (tools like MyGenerationSoftware, CodeSmith, T4, et al, have been around for years) but the problem with code generators is that you have to go back to the code generator if you need to adapt and refactor as business requirements evolve and knowledge and understanding increase (or as sanity wanes while workarounds perpetuate, omg).

One feature of Rails stuck out at me again, however, and that is RoR’s approach to TDD in model validation. In the session, the speaker cobbled together a simple unit test, threw some one-liner validation rules into the model, “rebuilt” the app, and watched the red/green output spit out immediately upon build. Once the validation rules were properly applied to the model, this immediately showed up in the web view scaffolding. This is exactly the way all development should be—some Ruby enthusiasts believe that unit tests deprecate the applicability for strongly typed language compilation altogether, I think that’s ridiculous, but I love the idea of supplementing compilation with post-build unit tests as a standard practice, not to mention combining the fundamental object metadata with the behavior of core view functionality in any UI framework.

I looked again at ASP.NET MVC and, having done rather little with the supposedly great testability of the ASP.NET MVC platform, had to figure out how to apply what I had just seen in this RoR session to the ASP.NET MVC platform scenario. I already knew that ASP.NET MVC supports easy peasy validation metadata out of the box, using the System.ComponentModel.DataAnnotations namespace and the attributes therein to decorate the properties of my view models. Notice the [Required] and [RegularExpression] attributes in the stupid sample below:

using System.ComponentModel.DataAnnotations;

namespace MvcApplication2.Models
    public class Fiz
        public string Name { get; set; }

        public string Email { get; set; }
The problem, however, was that I was still green on how to actually validate that applying the ASP.NET MVC built-in validation functionality to an instance of this model actually works in a non-UI unit test. For example, let’s say I had not yet added the [Required] attributes in the above code yet, and, using red/green TDD coding practices, I first create a unit test and execute this test (seeing red, or “Fail”) before applying the validation rule. What would such a unit test look like?

That is actually the main purpose of this blog post, if for no other reason than to have it for my own reference. ;)

The first example I came across explained that one would need to actually have the controller for this model in place, and an appropriate action, such as Create(), to capture the model. This controller would then be able to expose the ModelState property which would be able to return a property indicating IsValid.

// unit test code, but don't use this
public void TestMyModel() {
    var fizController = new FizController();
    var unusedActionResult = fizController.Create(fiz);
    Assert.IsFalse(fizController.ModelState.IsValid); // doesn't even work anyway without bringing out the Validator
The author of this example continued on to explain how to invoke the validator to fill in the missing functionality.

// My own flavor, does not require explicit controller.
// Still, don't use. Not where we want to be yet.

private class ValidationController<T> : Controller
    public T Model { get; set; }

private Controller BindModelValidation<T>(T model)
    var controller = new ValidationController<T>();
    var validationContext = new ValidationContext(model, null, null);
    var validationResults = new List<ValidationResult>();
    Validator.TryValidateObject(model, validationContext, validationResults);
    foreach (var validationResult in validationResults)
        controller.ModelState.AddModelError(validationResult.MemberNames.First(), validationResult.ErrorMessage);
    controller.Model = model;
    return controller;

public void TestMyModel() {
    var fiz = new Fiz();
    var validationController = BindModelValidation(fiz);
And that’s fine, except for the fact that the separation of concerns (model vs. controller) is instantly lost; except where custom validation behavior is declared on an overriding controller there’s really no reason to even look at controller logic here. What we want to test is the model’s validation metadata and behavior in the context of ASP.NET MVC’s existing plumbing, nothing more, since we already trust that Microsoft already QA’d ASP.NET MVC and its controller and validator classes.

Fortunately, inspecting this code it seems Microsoft did provide a Validator class with static methods exposed to validate a model based on its metadata. You don’t need to involve a controller at all. If you look closely, Validator.TryValidateObject(..), while being stupid in that you have to pass in a context object (even if you’re gonna instantiate a new throwaway one anyway), will return a list of validation failures, or ValidationResults. So why don’t we just validate the validation by validating that the count of validation failures is not zero?

// Final code, I'm happy with this. Just need to move the
// helper method ValidateModel() to a base class or
// somewhere else that's clean and out of the way and
// won't be copied/pasted.
public void EmailRequired()
    var fiz = new Fiz 
            Name = "asdf",
            Email = null
    Assert.IsTrue(ValidateModel(fiz).Count > 0);

private IList<ValidationResult> ValidateModel(object model)
    var validationResults = new List<ValidationResult>();
    var ctx = new ValidationContext(model, null, null);
    Validator.TryValidateObject(model, ctx, validationResults, true);
    return validationResults;
Any reason why this won’t work? Any reason why Microsoft made brevity for validating model validation such an effort to be had?

Currently rated 4.5 by 2 people

  • Currently 4.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Review Of ExoPC And Windows 7 Touch UI

by Jon Davis 16. November 2010 09:35

This post has been a long time coming, not that I didn’t throw the world a bone or two during the wait with my two posts of logs [1, 2] containing my initial thoughts and impressions, several of which were irrelevant or wrong (problems were fixed with updates, I misunderstood things here or there, etc). So now that I’ve had about two weeks to receive, unbox, and poke at the ExoPC as a Windows 7 touch tablet PC, this post summarizes some of my observations and conclusions about the device and about the overall touch-based computing experience with Windows 7. As such, this does not focus solely on the work that ExoPC as a company has done on their device and their UI layer, but also the work Microsoft, Intel, and others have invested into what has culminated into the many-hands-in-the-pot product that the device is.

Although the ExoPC has still not been mass produced and made available to the general public yet (pre-orders were available to those who came, hence this review, but pre-orders are now closed), the ExoPC is still the most important and most relevant touch tablet PC currently relevant to the market as competition to the Apple iPad. The others which I believe most people are paying most attention to are the HP Slate 500, the CTL 2goPad, the Tega V2—all of which are actually available for purchase now—and the as yet unannounced multiple offerings that are supposedly coming from Asus which no one knows anything about other than their anticipated sizes and the fact that the company that will be making them (Asus, duh) is pretty awesome when it comes to mobile computing.

The specifications for the ExoPC are posted here. It’s basically a very nice, large netbook without a keyboard. The 11.6 inch screen makes it a particularly large tablet computer compared to other offerings. With a resolution (1366x768) that exceeds the iPad and other similar tablets it would have been an ideal display for high definition video. And with its Broadcom Crystal HD video chipset, that’s exactly what it can be used for. I successfully synchronized it with my HDHomerun TV tuner over WiFi and hi-def television rendered beautiful at full framerate in full HD (scaled down, of course, to the resolution of the display, but it does support HDMI out). I did this with Windows Media Center (maximized to full screen, of course), which is also touch-friendly. So if you want to run ExoPC as a portable media computer, you can’t go wrong with ExoPC and its preinstalled Media Center, it’s actually an amazingly perfect experience.

The device comes with 2GB RAM which is sufficient for most typical lightweight end-user tasks today. Unfortunately, the Intel Atom processor used in the device, while it was the best option available half a year ago, is now a generation behind, as it is slower than the HP Slate 500, which is arguably ExoPC’s closest Windows 7 contender. Intel Atom processors are the Celeron reinvented for yet smaller form factors such as netbooks. They are slower and don’t support more than 2GB RAM. In my opinion, they had a lifespan that has nearly ended; quad core processors with 4GB RAM support should become minimum specs for small-but-very-functional devices in the next year or so, I feel. And to tell you the truth, being spoiled on a very nice laptop and a nice desktop workstation, I can definitely feel the processor pinch on the ExoPC. The horsepower is likely much, much greater than on the iPad, but because some popular software applications for Windows 7 are not optimized for small form factor PCs they tend to perform as though they are slightly under-powered even on the meatier ExoPC hardware.

The processor and/or the video chipset (not sure which, if not both) in the ExoPC also comes with another cost: heat. The device is not hot to the touch, but does warm up, and it does have moving parts, namely a fan that kicks on when you’re performing intensive tasks, rendering rich media or 3D video, or doing a lot of I/O such as installing software. I first noticed the fan when it was initially setting up Windows; it kicked into high gear at that point, which really surprised me, particularly since I didn’t anticipate any moving parts at all (my 2-years-old Dell Mini 9 netbook has no moving parts). Usually, however, when doing mundane tasks such as checking e-mail the fan stays quiet and won’t even be noticeable. Even so, you will need to keep the fan inlet and outlet vents clear. This is something that other tablet vendors in the future should try to eliminate if they can manage to keep the CPU performance and rich 1080p video support.

The Display

The ExoPC sports a larger 11.6-inch display, which is much larger than the ones seen in other tablets such as the iPad or HP Slate 500. It comes with a fantastic resolution of 1366x768. The extra resolution is applied only to width, however; it is not just bigger, it is specifically wider—or taller if you’re looking at it in portrait orientation instead of landscape orientation.

My own ExoPC had a pretty bad blue tint, such that white background color shows up as a light blue instead of white. However, Microsoft has a workaround for this; if you open up the “Adjust Screen Resolution” control panel and then access the Advanced settings, there is a color calibration wizard that you can use to calibrate the color tint of the display. This worked fine for me, although as I type this I still feel that the background color is light blue and perhaps the calibration did not restore correctly as the device came out of hibernation, I don’t know, but I assume that I just didn’t calibrate correctly the first time around.

Unfortunately, while the display does have a decent resolution for its size (i.e. dots per inch), the brilliance and clarity are fairly average. Looking closely at the display, the screen looks “glittery”; this is a “feature” of cheap older LCDs with fluorescent lighting and might be made worse here with the built-in capacitive touch interface overlay.

The viewing angle is also fairly mediocre. It was my understanding that the display’s viewing angle was “much improved” from earlier test models, but if this is true then the earlier test models must have been really bad. The problem is that the slate form factor really requires an extremely wide viewing angle threshold, more so than on a laptop or netbook, because the display will often lay down flat on your lap or on a desk, and the ExoPC simply cannot be viewed flat on a table. It’s also just barely large and heavy enough that it’s cumbersome to hold it at a direct angle to your eyesight. So you really need to plan on carrying a stand with you wherever the ExoPC goes. This is really unfortunate. It doesn’t cripple the ExoPC but it does eliminate a great deal of versatility for its target consumer base.

The Graphics Hardware

A discrete accelerated graphics chipset from Broadcom is built into the ExoPC enabling full high definition video rendering such as with Windows Media Center. As I described earlier, I was able to stream live 1080p TV from HDHomerun without any hiccups. The CPU, however, is squeezed quite a bit when viewing under-accelerated, heavily compressed video such as Hulu. Video from Hulu is watchable but noticeably laggy. The video chipset also has good but not great 3D acceleration support; I got roughly (I’m guesstimating here) 10 fps from the game Torchlight after running all updates from Windows Updates including video driver updates. Overall: good enough for native Aero support and accelerated WPF touch interfaces, not so great for the PC gamer or for hi-def web videos, but definitely adequate.

There is also a mini-HDMI out port. So although you can’t use a standard HDMI cable, you can get a mini-HDMI-to-HDMI cable and hook this device up straight to an HDMI-ready monitor or TV. I haven’t tried to use it yet, but I give it the benefit of a doubt that 1080p video will work fine as it HD content renders fine on the ExoPC’s own display quite well.

Touch UI and Touch Screen Issues

The touch screen is quite good in that it is very responsive and sensitive and seems to be pretty precise—that is, when it works. But there appears to be a design flaw between the hardware and Windows here. If the OS is busy, such as if it still trying to reorient itself after coming out of hibernation and slowly return to an optimized experience, the touch screen signals will be outright ignored. I cannot express how annoying this is, to be sitting here at Starbucks and constantly poking at buttons on my tablet and absolutely nothing happens, neither when I tap nor a few seconds later when it might finally “catch up”, because it seems there is no “signal buffering”. By “signal buffering” what I mean is that, with a computer keyboard and sometimes with a computer mouse usually the hardware will buffer the signals so that when Windows catches up with whatever it’s doing it can pull this data out sequentially and everything “just works”, if late. With the touch screen, there doesn’t seem to be such buffering. I don’t know who is responsible for this buffering, the OS or the hardware vendor, but either way it’s a nuisance if you’ve just pulled out the ExoPC from hibernation or rebooted, or if you’ve run low on RAM. When tap-dragging to scroll and nothing happens, or tapping the Wireless Networks icon in the System Notification Area to bring up the local router to select it and then nothing happens when you choose the router because your finger tap is ignored, these are problems that need to be solved if Microsoft and the hardware community want to compete with the likes of iPad.

There’s another problem that I can’t keep from complaining about. Here in Windows Live Writer, which internally uses the Internet Explorer component for its WYSIWYG editor, there is a built-in feature (really, it’s a feature) that is, frankly, a just horrible idea and should never have seen the light of day. If you tap where you want the caret to move to, the touch interfacing in Windows will, quite literally, second-guess your tap location. The caret will move after half a second to an adjacent character location, depending on .. well, honestly I don’t know what data it’s depending on for this second-guessing behavior. So if you, like me, were to tap where you want the caret to go, and the caret goes there, and then you look away immediately to start typing, you could very well be typing in the wrong spot because the caret moved again while you were looking away.

Live Writer caret occasionally shifts one character when moving the caret with touch

Stylus Support

In my ignorance, I was unaware that capacitive touch interface hardware requires an extremely large physical footprint for correctly identifying touch input. Traditional tablet PCs used styluses with pointed tips which required pressure but were great for inputting exact, pixel-perfect data such as hand signatures, etc. With capacitive touch screens, the only styluses available have huge, 1/2 cm or so wide rubber tips, making pixel-perfect input rather awkward and clumsy. When I tried using one of these on an iPad I had to push the rubber tip down so hard that I was worried that the the rubber tip might come off. And this stylus was actually the highest rated iPad stylus on

The ExoPC stylus support is expected to be no different. I have not yet been provided a stylus (I believe they shipped my stylus separately yesterday), but after some communications on the ExoPC forums I discovered that HP Slate 500, as an example, has more than just a capacitive touch screen, it is also “an active N-Trig digitizer panel”. Ugh. So I guess “capacitive touch plus digitizer panel” is the next nice thing in touch UI hardware now, something ExoPC lacks?

Other Accessories

Because the ExoPC supports USB, Bluetooth, and removable flash drives, and because the slate form factor is not unique to the ExoPC, it’s pretty easy to find accessories that work well for the ExoPC. I’m typing this with an Apple Mini Wireless keyboard, and my ExoPC is sitting on this stand while I’m here at a coffee shop.

My one complaint, though, is that the slate form factor mandates two types of accessories that must be custom tailored to the model, and neither of them are available to the ExoPC: a clear screen cover (to keep scratches from ending up on the screen) and a skin/case for the bezel and back. It was easy to snag an iPad knowing you could cover it up and protect it with a screen cover and some rubberized casing. But with the ExoPC the options are a little more trivial: there are no options. In my opinion, these accessories should come bundled with the unit. In fact, I consider this to be the second biggest flaw of the ExoPC, after the screen viewing angle issue, the fact that you simply cannot protect it.

Touch-Ready Software

The most fundamental computing tasks for any consumer slate, as opposed to business slates like the HP Slate 500 are media playback (music and videos), web browsing, and e-mail. For these, these software products work perfectly or else quite well on the ExoPC, so much so that they are actually quite a joy to use:

  • Internet Explorer 9 (web browser, duh)
  • Windows Live Mail (e-mail client from Windows Live Essentials 2011)
  • Windows Media Center and Windows Media Player (together)

Media Center and Media Player come built into Windows. Media Center is not great for more advanced management of music, but for what it does do, it does well, and Media Player fills in the gap with CD rip support, etc. Sadly, neither IE9 nor Windows Live Mail are bundled with the unit. Internet Explorer 9 is still not available to the OEM for preinstallation as it is still in beta, and it won’t be available by the time ExoPC is open to the public for general orders. But it is downloadable in its beta form, and it works great for touch. As for Live Mail, while it does need to be downloaded as part of Windows Live Essentials 2011, it is worth it, and it functions as though it was native to Windows 7 in much the same way as the mail app in iOS “just works” like it was native to its OS. It has the look and feel of Office / Outlook 2010, but it is even more streamlined for a basic, consumer use of e-mail services. And yes, Live Mail works just fine with POP and IMAP accounts. Speaking of which, Office 2010 is supposed to work very well with touch interfaces. But I don’t have a license for Office 2010 at this time so I was not able to sample that on the ExoPC.

You can also install Zune. Zune is a beautiful media manager app, but unfortunately it runs a little slow on the ExoPC and it isn’t as touch-ready as, say, Media Center. Scrolling often requires using the scrollbar, for example. But the advantage of Zune is that, like iTunes, it offers a marketplace where you can buy and download music and videos for your ExoPC. I believe and expect that marketplace purchases from Zune would appear in Media Center, as well.

Let’s not forget the ExoPC UI Layer itself. It extends the Windows 7 user experience with a touch-only, highly innovative user interface experience where you can download apps and extensions from its own marketplace, etc. I thought the “sidebar buttons” (whatever you’re supposed to call them) approach to managing the tablet software was quite innovative and even perhaps ingenious. Unfortunately, during my week or two with the ExoPC I have hardly had the chance to use the ExoPC UI Layer, and when I did use it I found myself fighting with it more than I expected; sometimes Alt+Tab does not cause it to hide, for example. And I also found some built-in apps and interfaces to be confusing. Can someone tell me what the “ExoClean” app does? Is the lever a way of authorizing the clean-up of something? Or is it just a “clean” demonstration for developers to see what they can do? ExoPC’s marketplace also does not seem to work; tapping the Download button for an app didn’t do anything, so I gave that up.

Also, I must mention:

  • WordPad (preinstalled with Windows)
  • Office 2010 (separate purchase)

These are well-tailored for touch, and although I haven’t tried Office 2010 I loved WordPad’s touch responsiveness and its native scrolling behavior, etc.

What else is touch-ready? Frankly, not a lot [here are some supported games, more (lots more), and other apps], and since the marketplace in the ExoPC didn’t actually work for me the only other approach I know of to finding touch-ready Windows software is to run Google searches. Some people have mentioned Scott Hanselman’s Baby Smash. To this I say, you’ve got to be kidding me. If I wanted an actual toy for toy’s sake I’d just settle for the iPad. There are plenty of touch-to-make-noise-and-cool-visuals apps available for the iPad. So I go to and I’m asked the most stupid question that can be asked on the Web: “What country are you in?” (This is stupid because my IP address is known; it can be geo-traced.) I choose U.S. and I get the stupid standard options of “Explore Windows”, “Xbox 360 games”, “Microsoft Office”, etc. Migrating from iPad’s App Store, this is a total joke. Microsoft really blew it here, they just don’t get it, how absolutely important it is to have a rich UI built into Windows for browsing a Windows 7 software app marketplace, with touch UI as a faceted search filter, and with just showing some good third party apps, i.e. Top 20, as the first thing the user sees.

Ultimately I bought the ExoPC because I want to be equipped for software development with touch UI. Software that targets the ExoPC must target either Windows 7 generically, in which case I can write with any development tools I like but I’ll be outside the sandbox of ExoPC’s UI layer, or I can write software that targets ExoPC’s UI layer in which case I’m limited to Flash or Silverlight. .NET support is coming “soon” but with no anticipated date and no specifications given. I’ve made my rants known that I am quite disappointed that they’re not using WPF for the ExoPC UI Layer which will have better hardware acceleration and should enable fewer seams from one interface to the next, but they are apparently a small team of developers, and perhaps there are limitations I’m not aware of.

The Accelerometer

The built-in accelerometer is, .. well, it’s present. It’s there and it works in that if I rotate the computer the screen resolution will adjust accordingly, rotating the whole desktop to keep everything upright. And that’s fine. But is the accelerometer available to other applications? Sure it is; on the other hand, I posted this question asking whether the custom software that triggers the rotation of the desktop can be “turned off” programmatically so that, say, an accelerometer-driven PC game, such as a car racing game that uses tilt as the steering method, will work without the screen resolution being adjusted and rotated. I didn’t get a reply. I chalk that up to the ExoPC guys being busy, but the harsh reality is that Microsoft should have been the ones to implement the auto-orientation feature, and they should have implemented a standard API for software that works in all of these scenarios. I haven’t delved into this yet, so I don’t know for certain, but it seems to be that this is just another detail that fell through the cracks. In the mean time, other devs are reporting that the drivers for the accelerometer from Pegatron (the company that designed and built the actual hardware) doesn’t support anything in the accelerometer accurately except for tilt/orientation notifications.

And regarding the orientation notifications, I have found that if I simply pick up the tablet, split-second inertial forces will cause these notifications to trigger. This is another design flaw; iPad and iPhone will “buffer” shakes and sudden orientation changes such that simply shaking the unit will not cause re-orientation. And unfortunately that feature does not seem to be implemented here, or at least perhaps not very well, as I have frequently seen the orientation adjust when just picking the unit up and setting it back down again in the same orientation.

The Webcam

The built-in webcam is functional. It’s not great, it’s not horrible. It works. It looks like it’s roughly VGA-esque resolution and the color saturation is a bit low but the quality is otherwise quite good, albeit not great.

Quick little peek:

A few seconds of webcam recording at the coffee shop

The Battery Life

The battery life isn’t particularly good. It’s between fair and just good. Poor would be two hours or less. Quite good would be five hours. Extremely good, or great, would be eight hours. ExoPC runs at about 3 1/2 hours—that is, it runs a bit longer (to about 3 3/4 to 4 hours) but push it beyond 3 1/2 hours and you’ll be at risk for losing your work; I started to get notified that the battery was very low and that I should stop and plug in or hibernate at about 3 1/2 hours into it.

This again is something that ExoPC can’t do much about themselves; having a full-blown OS, which requires a full-blown CPU, imposes a workload on battery life, and the goal here is to keep the unit thin and lightweight. The iPad gets away with ten hours of battery life partly because it’s not a full-blown OS, it’s a stripped-down one that isn’t running as many background user services at all times.

So I think Microsoft will have to be the ones to address this, perhaps in Windows 8. As Windows has evolved towards many-core, now it needs to evolve to be lighter weight. The transition from Windows Vista to Windows 7 was huge in this area; had this not been done so well I wouldn’t have this ExoPC sitting in front of me at all. However, there is still opportunity for improvements here.

Touch Computing for Windows – Is It Ready?

Touch computing with Windows 7 in itself is a somewhat experimental experience. It works, but not perfectly, not when compared to, say, the iPad. This is often neither the fault of Windows nor of the hardware but of the harsh reality that most software just plain wasn’t built for finger tips, it was built for the computer mouse. If you’re waiting for Microsoft or anyone else to proclaim that “Windows is ready for mass adoption of touch computing”, you should both stop waiting and plan on being disappointed, because Windows couldn’t be much readier, but the software that runs on Windows, and the touch hardware that Windows runs on, will have to evolve for a few years getting used to this new form factor. And how will these software apps evolve to this new form factor if we don’t all start buying touch devices in the first place? I’d admit that this would be the difficult chicken-or-egg scenario, but the reality is that even with software not being built for touch, you can totally get by with a touch tablet PC without a mouse with most software, it will just be a somewhat less optimized experience until the software adapts to this new form of input. It is usually not a broken experience because the workarounds usually work fine.

Living without a keyboard, on the other hand, is really no fun. Part of the problem is that the Windows on-screen keyboard prioritizes function over form when compared to the iPad keyboard. But the biggest issue is that that you’re usually forced to use only one hand/finger. The viewing angle limitations turn out not to be an issue just with showing the screen to friends (hardly a concern for me) so much as being unable to see what you’re doing when the device is sitting down flat on a desk, or on your lap while you’re reclined. In my opinion this is the greatest limitation of the ExoPC model—you really have to hold the unit with one hand if you want to interact with it, or else have a stand. When you do have a workable viewing angle, the Windows 7 keyboard is quite functional and is very nice and useful, but it doesn’t have some of the usability features seen on both iOS and on Android such as the shift key being auto-pressed when you type a space after a period. Granted, with the iPad I do not spend a lot of time typing, but it’s hard not to do a lot of typing in Windows, especially being the blogger that I am. (I’m writing this up on my ExoPC.) Because of this I would strongly recommend getting a Bluetooth mini-keyboard. There are several listed here. I also strongly recommend a good stand. Having a keyboard and a stand, you have essentially a touch-based netbook, and this is exactly how I’m set up at the coffee shop right now as I type this.

Overall Stability

The ExoPC is surprisingly, if not shockingly, stable. For all its quirks and strange behaviors in touch responsiveness and slightly wacky accelerometer sensor support, I have never seen the ExoPC suffer a blue screen of death. In my opinion, this is huge! The debate about Microsoft Windows being a suitable operating system for any discussed platform has usually revolved around system stability. Stability is not at issue here! Now the discussion has moved on to battery life, touch responsiveness, and overall performance, for which Windows 7 really does quite fine. Contrasting against the iPad isn’t entirely fair in this matter; the iPad sets the bar a bit higher than people should expect, in my opinion, when Windows is trying to hard to fit on so many kinds of hardware platforms.


Unfortunately, I do not anticipate profound success in this first-model ExoPC’s short term future. Part of this is theirs and Pegatron’s fault; with so many delays that the ExoPC community has suffered from, and with a half-baked UI layer that still needs a ton of work (this was supposed to be the big differentiator for the ExoPC), the device is quickly becoming too little, too late. ExoPC will begin accepting orders in early December (technically, starting November 30). And if you must have a touch tablet, the ExoPC is not a bad model, and its availability comes just in time for the holidays. It is, however, inexcusably under-prepared and late to the market, as are all the other tablets being promised by HP, Asus, et al. And in ExoPC’s case, the value-per-dollar here I feel is not in the consumer’s favor, not when there are more powerful (and bulkier) touch-ready tablet PCs that convert to keyboard-equipped laptops that can be had this Christmas season for just a couple hundred dollars more from HP, Lenovo, et al.

I am still having an internal debate as to whether I should retain my ExoPC or sell it off. Were I to keep it, since I already have both a netbook and a large, heavy-duty laptop as well as an iPad, not to mention a hefty desktop workstation PC and a Mac Mini, my use of the ExoPC would be mainly to develop software for touch UI on Windows using WPF. But with unanswered questions regarding the accelerometer, etc., as well as the lack of confidence in any touch UI targeted software marketplaces, my confidence in the predictability this platform is quickly waning, and Objective-C / Cocoa Touch is looking more and more interesting to me. I still have my re-purchased iPad, and I still have my Mac Mini, so I’m still technically in the game for iOS development. Overall, compared to Apple’s approach to developer support for the Cocoa Touch platform, Microsoft’s developer support and guidance so far for Windows as a touch platform has been laughable at best. Microsoft is focusing not on Windows but on Windows Phone 7 and Silverlight (and their crappy Azure cloud server platform), which is a disaster move on their part because there will always be businesses depending on the full Windows platform, while consumers are losing confidence in it, and we need Microsoft’s attention when it comes to WPF and touch development. By this I mean not just developer features but also “hype machine support” and up-front guidance so that devs don’t have to dig around to see if the platform is a viable market in the first place.

I give ExoPC’s first model, and Windows 7 as a touch platform, my own personal rating of 3 1/2-to-4 out of 5. It’s fantastic that I finally have a full-blown Windows 7 experience in the slate form factor—now I can run anything I want. The ExoPC is stable and it’s solid. But the absence of the availability of a protective skin/case (which is an absolute must for slate hardware) and the poor viewing angle are among the worst problems with the unit, and issues also exist with moving parts (an audible cooling fan with vents that must be kept clear) and occasional unresponsiveness to touch input particularly for about five minutes after waking from hibernation. And I give the ExoPC UI Layer software 2 out of 5, simply because despite its genius ideas and concepts it is simply not ready for public consumption and it is a software disaster if applied to general use. The ExoPC overall with Windows 7 is neither ubertastically wonderful, nor is it an unusable waste. It is a practical solution filled with [perhaps necessary] compromises, all of them rather disappointing, to keep cost and physical weight down.

I don’t see a revolution towards touch computing happening this Christmas season, but perhaps everything is ready enough for us technologists and developers to get started now so that, should Microsoft figure out how to target the Windows platform for a touch marketplace in Windows 8, we can be prepared for that day. I do see slate computing overtaking laptop computing in the near future, but it does remain the future. In the mean time, to consumers I have to suggest the iPad over a Windows slate of any branding, but by a very small margin—Windows 7 is ready for touch, if not quite excessively, but software that runs on it is not, nor is there a marketplace. However, an ExoPC is a decent (but not exclusive) option if a consumer needs a Windows slate.


  • A real Windows 7 slate PC that does what it advertises (at least as far as its hardware and Windows are concerned)
  • Large, high resolution, capacitive touch display
  • Full support for USB, Bluetooth, and SD cards
  • ExoPC UI Layer has a remarkable if not genius approach to launching apps and managing running apps.
  • Fantastic support for HD video if the video data is not heavily compressed.
  • Strong accelerated graphics support for the likes of Media Center UI.
  • Great for Windows Live Mail, Media Center, and (manually upgraded) Internet Explorer 9
  • Incredibly stable; no BSODs!!


  • Limited viewing angle mandates the use of a stand
  • No protection accessories available at all
  • Touch interface sometimes becomes unresponsive, particularly after waking from hibernation (for about five minutes)
  • There are moving parts, namely one or more fans
  • CPU easily reaches its threshold even with the basic Hulu test.
  • Accelerometer device platform specifications are vague; drivers seem to be half-baked
  • Battery life is not very good
  • The ExoPC UI Layer is still unfinished; cannot manually add apps/shortcuts to launcher, for example, and other features are missing; graphic aesthetics need work
  • .NET or unmanaged code development support for the ExoPC UI Layer is still not spec’d and this is inexcusable at this point
  • The ExoPC marketplace didn’t work for me, perhaps it’s not really implemented yet at all?
  • Speaker(s) sound tiny and tinny.

Currently rated 4.1 by 7 people

  • Currently 4.142857/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5



Powered by BlogEngine.NET
Theme by Mads Kristensen

About the author

Jon Davis (aka "stimpy77") has been a programmer, developer, and consultant for web and Windows software solutions professionally since 1997, with experience ranging from OS and hardware support to DHTML programming to IIS/ASP web apps to Java network programming to Visual Basic applications to C# desktop apps.
Software in all forms is also his sole hobby, whether playing PC games or tinkering with programming them. "I was playing Defender on the Commodore 64," he reminisces, "when I decided at the age of 12 or so that I want to be a computer programmer when I grow up."

Jon was previously employed as a senior .NET developer at a very well-known Internet services company whom you're more likely than not to have directly done business with. However, this blog and all of have no affiliation with, and are not representative of, his former employer in any way.

Contact Me 

Tag cloud


<<  March 2021  >>

View posts in large calendar