December 29, 2012

TypeScript Templates for Windows 8

TypeScript Templates for Windows 8

imageAs soon as I saw Anders’ talk on TypeScript, I fell in love. If you’re not familiar with it, TypeScript adds a lot of necessary features to JavaScript to make it suitable for building real apps, while still compiling down” to JavaScript to maintain JSs single biggest advantage: ubiquity. Further, TypeScript has tooling inside Visual Studio so that it works nicely with a wide variety of Windows projects, including Win8/JS projects.

However, while Microsoft has made a nice Win8/TS sample available, there are currently no Visual Studio project templates for building my own apps. Luckily, it was easy enough to build some:

image

You’ll notice three new templates: TypeScript versions of Blank App, Fixed Layout App and Navigation App. All three projects generate code that acts the same, except the code is in TypeScript instead of JavaScript (although the JavaScript is generated and very visible to your inspection).

I didn’t build the Grid App or Split App templates yet, since there is a lot of code there. I also haven’t ported any of the item templates. Now that I have the Navigation App template done (which includes an empty Page Control), the Grid and Split and other item templates will all flow from there (eventually : ).

JavaScript Patterns to TypeScript Constructs

Moving JavaScript to TypeScript involves two major pieces: porting the code from JS patterns to TS language constructs and bringing in references to the types that are used.

The first step, moving from JS patterns to TS language constructs, largely involved modules, classes and functions. For example, the navigator.js file defines the PageControlNavigator class in the Application namespace using JS patterns:

// navigator.js
(function () {
  "use strict";

  var appView = Windows.UI.ViewManagement.ApplicationView;
  var nav = WinJS.Navigation;

  WinJS.Namespace.define("Application", {
    PageControlNavigator: WinJS.Class.define(
        // Define the constructor function for the PageControlNavigator.
        function PageControlNavigator(element, options) {
          ...
          Application.navigator = this;
}, { home: "", /// <field domElement="true" /> _element: null, _lastNavigationPromise: WinJS.Promise.as(), _lastViewstate: 0, // This is the currently loaded Page object. pageControl: { get: function () { ... } }, ... } ) }); })();

The common pattern for a module that contains private and public parts is to use a self-executing anonymous function (which wraps all the code in navigator.js) to make everything private and then to use helpers to expose public parts explicitly (like the use of WinJS.Namespace.define). Further, to define a class is a matter of gathering up a constructor function with a set of member properties and functions, which is what the WinJS.Class.define helper does. Finally, right in the middle of that is the exposing of a namespace-wide property called Application.navigator, which makes it available to anyone using the Application namespace.

TypeScript provides actual language constructs for these patterns:

///<reference path='../declare/declare.ts' />
// navigator.ts
module Application {
    "use strict";

    var appView = Windows.UI.ViewManagement.ApplicationView;
    var nav = WinJS.Navigation;

    export var navigator: PageControlNavigator;

    interface PageControl {
        getAnimationElements: () => Element;
        updateLayout: (
            element: Element,
            viewState: Windows.UI.ViewManagement.ApplicationViewState,
            lastViewstate: Windows.UI.ViewManagement.ApplicationViewState) => void;
    }

    export class PageControlNavigator {
        home: string = "";
        _element: Element = null;
        _lastNavigationPromise: WinJS.Promise = WinJS.Promise.as();
        _lastViewstate: Windows.UI.ViewManagement.ApplicationViewState;

        constructor (element, options) {
            ...
        }

        // This is the currently loaded Page object.
        get pageControl(): PageControl { ... }

        // ...
    }
}

In this TypeScript code, you’ll see the module, export and class keywords that define the elements we were defining via patterns before. Further, the use of the interface keyword lets you define a contract for an argument or variable that the TypeScript compiler can check for you as it generates the corresponding JavaScript. Finally, notice the use of the type annotations after a colon, e.g. the PageControlNavigator type on the exported navigator variable, to give the TypeScript compiler more information. All of these constructs help you to be explicit about what you’re defining, which helps you track down errors and gives you better Intellisense as you code.

As I mentioned, TypeScript provides syntax on top of JavaScript, the idea being that all JavaScript code is already TypeScript code. Further, the TypeScript compiles produces JavaScript as it’s output. When you’re editing a TypeScript file in Visual Studio, you can see the corresponding JavaScript, which helps experienced JavaScript programmers bootstrap their way to TypeScript.

image

You’ll notice in this screenshot that TypeScript introduces shortcut syntax for function objects. For example, the following code from home.js:

WinJS.UI.Pages.define("/pages/home/home.html", {
  ready: function (element, options) {
    // TODO: Initialize the page here.
  }
});

can be written in TypeScript as follows:

WinJS.UI.Pages.define("/pages/home/home.html", {
  ready: (element, options) => {
    // TODO: Initialize the page here.
  },
});

The use of the TypeScript lambda syntax is both shorter and works better when it comes to your intuition of what the this” keyword means.

The other thing to notice about most .ts files is one or more reference lines at the top that look like this:

///<reference path='../../declare/declare.ts' />

This is the TS way to do include” or import” of code from other TS files, instead of relying on an HTML container to pull in the right files.

TypeScript Declarations

A lot of the work porting the Win8/JS templates to TypeScript was replacing the use of JS patterns with TS constructs (which, ironically, generated back the same JS code I started with), but an equal amount of the work was in building TypeScript declaration files (*.d.ts files). The idea of a declaration file is that the JavaScript community has created a large number of libraries, none of which have associated TypeScript type information. TypeScript allows you to augment the type information for existing JavaScript libraries, e.g. jQuery, Knockout, WinJS, etc., with external files called declaration files.

The WinJS sample I mentioned earlier (Encyclopedia) provides a number of declaration files that provide type information for the HTML DOM, the WinRT object model, jQuery and for WinJS. Unfortunately, the one for WinJS is far from complete, which meant that a lot of the work I did to get the Win8/TS templates compiling without warnings was augmenting that file. All of the declarations files needed to make the templates compiled as generated are provided in the declare” folder, but I’m sure there are holes that you’re going to run into as you add your own code. Of course, the authoritative winjs.d.ts file is part of the TypeScript distribution, so I’ll work with the nice folks on the TypeScript codeplex project to get my changes merged in.

Installing the Win8/TS Templates

To get started using the Win8/TS templates I’ve built, you’ll first need to install the TypeScript plug-in for Visual Studio 2012. Currently these templates have been tested under TS 0.8.1.1 only and the generated .jsproj files have this path hard-coded in. The web-based HTML Application with TypeScript template uses some trick to do away with hard-coded paths that I have yet to figure out.

You can download the Win8/TS samples from here, extract the three folders (blankts, blankfixedts and navts) into your VS2012 JavaScript project template folder, e.g. C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ProjectTemplates\JavaScript\Windows Store\1033. Once the files are there, shutdown all instances of Visual Studio 2012 and execute devenv.exe /InstallVSTemplates” as admin. If you have multiple copies of Visual Studio installed, make sure you’re executing the one for VS2012.

Once you’ve completed those steps successfully, you should see three new TypeScript-based templates as shown in the very first figure of this blog post. Enjoy.

October 22, 2012 telerik

Windows 8 and Visual Studio 2012 and Data Visualization, Oh My!

Windows 8 and Visual Studio 2012 and Data Visualization, Oh My!

This month is a big one for Microsoft developers. Windows 8 will be generally available in stores on a variety of form factors starting on 10/26, with the BUILD conference following closely in the last week of October. This on top of the Visual Studio 2012 RTM earlier this summer and a Windows Phone 8 release coming soon, and there’s a lot going on if you’re a Windows developer.

If you’ve read my previous editor’s notes this year, you already know that Telerik takes Windows 8 and Visual Studio 2012 very seriously. As of 10/17, we’ve officially released our set of XAML and HTML controls for building Windows Store apps on Windows 8, including data visualization controls like charts, gauges and bullet graphs. These controls aren’t just ports from old platforms, but controls that have been re-imagined for the touch-centric mobile devices that Windows 8 will be shipping on. In addition, we’ve updated JustCode to support Windows Store project types, JustDecompile to decompile Windows Store and C# 5.0 apps and our JustTrace profiler to target Windows Store apps. If you’d like to see what our amazing customers have already done with all of this great Windows Store support, check out our Showcase Gallery.

Further, as the modern UI style becomes more popular, we’re continuing to push touch and metro UI themes into almost all of our suites, including ASP.NET AJAX, WPF and Silverlight. Also, these platforms including WinForms get a huge new control this Q: the PivotGrid, providing you with cutting edge data visualization for your custom apps.

In this Q, we’ve focused on Windows Store apps, Visual Studio 2012 and data visualization for desktop, web and mobile app development across the board, but that’s not all! We’ve added Coded UI support to WinForms and WPF controls, full SharePoint compliance to our ASP.NET AJAX controls and complete storage of all of your Visual Studio settings in the cloud to JustCode! Check out our webinars the week of 10/22 so you can see just exactly what’s new in your favorite Telerik products.

Chris Sells
VP, Developer Tools
@csells

P.S. And while the Developer Tools division has been hard at work, so has the rest of Telerik. For example, we’ve recently welcomed Eric Lawrence into our family with his excellent Fiddler tool, and the folks in our agile project management division TeamPulse have introduced Kanban boards and integration with TFS 2012 in their latest version.

October 8, 2012 telerik

Telerik’s evolving platform guidance for .NET developers

Telerik’s evolving platform guidance for .NET developers

Telerik often gets questions from its customers about which of the multitude of app frameworks that Microsoft provides for .NET developers that they should pick. WinForms? WPF? Silverlight? ASP.NET? What’s the right solution for their problem? The answer is always the same: it depends.

Unfortunately, that’s not very helpful, so last year a set of the best and brightest that Telerik has to offer sat down and figured out just what it depends on and whether we could offer clear, concise guidance for our customers. The answer was yes we could,” so we did that in 2011.

However, it’s been a busy year that’s included two major events in the life of a .NET developer: Silverlight desktop and web have been shelved and Windows 8 has been born. So, with that in mind, we’ve updated the platform guidance to take those two important changes to the .NET developer landscape into account; you can read all about it in the Telerik’s 2012 platform guidance for .NET developers.

Or, if you’re already familiar with the 2011 guidance, the rest of this post will be about what’s changed in 2012.

Desktop Application

Desktop applications represent the range of applications from those supporting internal information workers to those delighting consumers. These applications typically involve richly interactive interfaces, either for heavy-duty data management or entertainment. They key characteristic of desktop apps is the need to take advantage of the full range of native capabilities of the platform.

Ideal .NET Platform: WPF

WPF provides the ideal platform for building desktop apps. With mature, rich tooling provided in Visual Studio and Expression Blend, readily available components that address the full range of app styles, a large developer community and ClickOnce deployment, WPF gives the .NET developer all of the power of building native” Windows software with a simple deployment model.

Key Advantages of WPF:

  • Mature platform with 1st class support for rich media and data visualization
  • Excellent tooling and active developer community
  • Rich, deep access to the native Windows platform
  • Simple deployment and updates with ClickOnce
  • Good availability of complete 3rd party toolsets

[Special Silverlight Guidance Note: Silverlight is also a good candidate for building desktop apps, sharing many of the same characteristics of WPF. While it seems clear that Microsoft will not release a major version beyond the recently released Silverlight 5, their commitment to 10 more years of support as well as continued 3rd party vendor support means that it’s a viable alternative for WPF development for new or existing Silverlight projects.]

Tablet Application

The use of tablets and touch-centric apps within companies is on the rise, and tablet sales are expected to double in 2012 (Gartner). Unlike their mobile smartphone counterparts, which frequently complement existing desktop apps, analysts see the potential for tablets to be more disruptive, replacing certain types of desktop apps in the enterprise. For .NET developers, it is important to address this trend and pick a Microsoft platform that will deliver the best tablet experience. Many platforms available from Microsoft can be used to build touch-enabled apps, even WinForms, but Microsoft is providing clear guidance for modern, touch-first apps with the arrival of Windows 8.

Microsoft’s Windows 8 introduces a new model for building touch-enabled, tablet friendly apps that are meant to be content-focused, easy to use with no documentation, touch-centric and tailored to the device. These apps will run in a new dedicated environment only available in Windows 8.

Since Microsoft is making it clear that Windows 8 is their ideal platform for tablet apps, the bigger question developers must answer is how to develop tablet apps. Tablet apps can be built with either XAML/.NET or HTML/JavaScript. Both approaches have access to the full capabilities of the device and share a common Windows Runtime API.

Ideal Tablet Platform: XAML and .NET

When building Windows 8 tablet apps, choosing between XAML/.NET and HTML/JS largely depends on the kinds of existing assets within an organization and the skills of the developers, but we recommend XAML and .NET for most tablet app development. Tablet apps built with XAML and .NET not only offer the familiar .NET programming paradigms (and tools) that have been popularized over years of .NET and XAML development, but a large amount of the code, assets and skills carry over to Windows Phone 8 (WP8) app development. In contrast, it is not possible to leverage HTML/JS assets if you’re also building apps for WP8.

If supporting WP8 is not a key consideration for your tablet development, then it is important to know that Microsoft has worked to ensure the capabilities, tooling and run-time performance for both XAML and HTML tablet apps is as close to identical as possible. At that point, your choice between the two options is about the past and future technology strategy of your organization, not the capabilities of the platform.

So while we primarily recommend XAML and .NET for tablet app development, here are key advantages to both approaches that should be considered:

Key Advantages of XAML for building Metro-style apps:

  • Based on the same core tools, assets and techniques of WPF and Silverlight.
  • Comprehensive access to the underlying Windows Runtime (WinRT).
  • Extensible with native C++ components for performance-intensive activities or complete access to the underlying WinRT.
  • The same XAML tooling and techniques are available to native C++ programmers, if you feel the need to write your complete XAML-based tablet app in native code.
  • App code, assets and skills reusable between Windows 8 and Windows Phone 8

Key Advantages of HTML for building Metro-style apps:

  • Based on the same core HTML, JavaScript and CSS engines that power IE10.
  • Built to support 3rd party libraries, e.g. jQuery, as much as possible (although the sandbox security model can introduce challenges for certain libraries).
  • Comprehensive access to the underlying Windows Runtime (WinRT).
  • Extensible with native C++ components for performance-intensive activities or complete access to the underlying WinRT.
  • Lower learning curve for developers more familiar and comfortable with HTML, JavaScript, and CSS than XAML.

[Game support note: Both Windows Phone and Windows 8 provide access to DirectX for building high-performance twitch” games. This access is provided via .NET XNA in Windows Phone 7 and via native DirectX in Windows 8. If you are planning on building high-performance games for these Microsoft platforms, we suggest this third option .]

Where are we?

It’s clear that Silverlight is in no sense dead.” At Telerik, we still sell a large number of licenses to Silverlight developers, although from an engineering point-of-view, we spend more time making sure we’re taking the best advantage we can of WPF. Also, even if we don’t recommend starting new desktop or web deployment projects in Silverlight, it’s still alive and well on Windows Phone 7 & 8 and it provides an excellent springboard into XAML development on Windows 8. If you think of Silverlight as one of Microsoft’s implementations of XAML, along with WPF and the Windows 8 support, you’ll have the right mindset to move your Silverlight web and desktop apps, developers, skills and assets forward to WPF on the desktop, Silverlight on the phone and XAML on Windows 8.

August 16, 2012 win8 telerik

Telerik Loves Windows 8 and Visual Studio 2012 RTMs!

Telerik Loves Windows 8 and Visual Studio 2012 RTMs!

win8vs2012Yesterday’s release of Visual Studio 2012 and Blend for Visual Studio 2012 marks the beginning of a new era. In some ways, VS2012 and Blend are incremental releases, adding even better support for building enterprise and consumer apps and services for the desktop and the web. However, in one very important way, the release of VS2012 and Blend, together with the release of Windows 8 earlier this month, signals a whole new focus for the platform — that of touch-centric tablets — and with it, a whole new way to package and distribute apps for the Windows operating system — the Windows Store.

If Windows 8 sells even half of what Windows 7 has sold (which seems low, considering the support for a great number of new form factors), then that will represent 300 million customers all looking for new Windows 8 apps in the Store. Currently, that Store holds about 500 apps and even if Microsoft increases that number to 5,000 by general availability in October, that’s far short of the 500,000 apps that similar app stores have. In short, Windows 8 is going to have lots of users and those users are going to want to buy lots of apps. This is, of course, why Visual Studio 2012 and Blend are so important — they’re the tools you can use to design, develop and package your app for the Store and tap into those hundreds of millions of customers. Make no mistake — Windows 8 represents nothing short of a reboot of the Windows developer ecosystem and Visual Studio 2012 and Blend are the keys to that ecosystem.

Windows 8, Visual Studio 2012 and Blend are important to Windows developers, which makes it important to Telerik customers. Because of that, we’ve been on the cutting edge here since the BUILD conference in September, releasing metro themes that first week and supporting the Beta and RCs in our tools and controls. And now I’m happy to announce that we fully support Windows 8, Visual Studio 2012 and Blend across nearly all of our Windows developer products. And not only do we support them, but we take special advantage of their unique features in our products, as you can read in the following posts:

Of course, this is just the beginning of the tablet and mobile era for Windows developers, so count on Telerik to continue to push into Windows 8 and Windows Phone 8 for building touch-centric apps for both the Windows Store and the Windows Phone Store, as well as continuing to push our products to meet your needs on the desktop and on the web. Telerik’s been right there through the last decade of Windows development and you can expect us to be there for the next decade.

Chris Sells
VP, Developer Tools
@csells

June 7, 2012 conference telerik

June, 2012, Florida: Best TechEd Ever!

This month in Florida is going to be my 2nd TechEd ever and I’m sure the best by far. The number of things I get to do is staggering:

  • I get to work the Telerik booth for my first big show. We’ll be launching not one but two completely new Telerik products. Fun!
  • Since the Telerik Ultimate Collection has been nominated for the Best of TechEd, I get to give a dead-run 15-minute demo to the judges with fellow Teleriker Michael Crump.
  • Also with Michael, I’ll be giving the 30-minute Telerik + Blend: Better Together” talk in the Microsoft Visual Studio booth showing off how 3rd party controls work inside the newest Blend for building Metro style apps on Windows 8.
  • The first chapter of the Metro/JS book I’m writing with another fellow Teleriker Brandon Statrom is being printed and bound in a limited quantity for the show. Stop by and get your signed copy!
  • I get to be one of the Speaker Idol judges every day at lunch.
  • I’m sure there’s at least one podcast recording in there, too, somewhere…

I honestly can’t remember when I’ve looked forward to a conference more. I’ll see you there!

April 9, 2012

Microsoft + ASP.NET + Open Source: This Time for Sure!

Microsoft + ASP.NET + Open Source: This Time for Sure!

rocky-and-bullwinkleBullwinkle: Hey Rocky! Watch me pull a rabbit out of a hat!”

Rocky: Again? That trick never works!”

Bullwinkle: This time for sure!”

In the last week or so, I’ve heard mixed reactions to Scott Hanselman’s eye-popping announcement that, in addition to ASP.NET MVC that is already open source, that Microsoft is releasing ASP.NET Web API and Razor as open source as well. Further, and this is the big deal:

Microsoft is going to take contributions on their open source ASP.NET components and ship those contributions in the box for future major releases.

Of course, this is big news on the face of it, but some folks aren’t convinced. Some more jaded members of the community look at the open sourcing of a Microsoft component as the beginning of the end for that component. Look at IronPython!” they say. That project was open sourced right before the team imploded.”

Another jaded point of voice is that Microsoft is open sourcing MVC so that they have a story when it’s killed: You can add features to it all you want,” they claim Microsoft will say.

The funny thing about all of those points of view is that I hear people complain all the time when Microsoft cancels something, I don’t care if they cancel my favorite project; just release the source to the community!” I find it ironic that when Microsoft does release the source for a dying project, people complain about that, too.

However, in this case, I don’t think that ASP.NET is going to be side-lined. In the previous cases, it was easy to see that Microsoft was moving on and to what, e.g. the C# dynamic keyword in the case of IronPython.

ASP.NET, on the other hand, is a huge part of the server-side story for Microsoft and MVC is clearly the thing they’re focusing on. It’s the common thread for custom servers for both UI and API on both Windows Server and the Cloud and a big focus in the tooling for VS11.

Further, Scott has a track record with making OSS work from Microsoft, including NuGet and the user contributions that it takes.

And finally, both Scott Hanselman and Phil Haack, respected, active community members, not only drove these projects but have endorsed them.

Those three things add up to Microsoft pulling the rabbit out of the hat for me.

March 20, 2012 books

Building Windows 8 Apps with JavaScript

Building Windows 8 Apps with JavaScript

Brandon Satrom and I are writing a book on Metro/JS apps for Win8, with Don Box. All of the content on this page is subject to change.

winjs book cover

Read Online

Purchase

Table of Contents

  • Foreword: Chris Anderson
  • Foreword: Rey Bango
  • Preface
  • Chapter 1. Hello, Windows 8
  • Chapter 2. Binding and Controls
  • Chapter 3. Layout
  • Chapter 4. Typography
  • Chapter 5. Media
  • Chapter 6. Drawing and Animation
  • Chapter 7. App State
  • Chapter 8. Networking
  • Chapter 9. Shell Contracts
  • Chapter 10. Shell Integration
  • Chapter 11. Device Interaction
  • Chapter 12. Extending With C++
  • Chapter 13. Making Money
  • Appendix A: JavaScript for C-family Programmers
  • Appendix B: Styling & Presentation at a Glance

Samples

Most of the chapters have several source code samples that accompany them, which you can download and use how you see fit. Enjoy!

March 12, 2012 telerik win8

WinJS Promises: then and done

WinJS Promises: then and done

As of the Windows Consumer Preview (aka Win8 Beta), the WinJS promises object has a done” method as well as a then” method. The done” method is just like then” except that it turns unhandled errors into exceptions. If you read no further, know this:

Always call done” as the last promise method in your promise chain.

Let’s say you have a promise implementation that makes failure a strong possibility:

  1. var prom = new WinJS.Promise(function (c, e, p) { e(#fail”); });

A fastidious developer will always pass in an error handler whenever then call the then” method of a promise:

  1. prom.then(…, function (m) { content.innerText = Handled: + m; });

However, in the case that the developer doesn’t pass in a error handler function when calling then”, the error will silently drop on the floor:

  1. prom.then(); // error? what error?

I realize that the web was built around the idea that page errors should just silently whistle into the wind, but as an app developer:

Errors should be loud.

So, I want my errors to be loud, I should default to using the done” method on a promise instead:

  1. prom.done(); // error == BOOM!

When I call the done” method and an unhandled error is detected, WinJS throws an error that not even a try-catch handler will stop from showing in the developer’s face:

image

Personally, I’d prefer to be able to catch such errors in try-catch blocks, but this behavior is far preferable to the error being ignored. Of course, if I care that much, I can provide an error handler function when calling done:

  1. prom.done(…, function (m) { content.innerText = Handled: + m; });

And finally, if I want to chain my promises, I just need to put the then” methods in between so the errors flow, but the done” method should always be last:

  1. var app = WinJS.Application;
  2. app.onactivated = function (eventObject) {
  3.   // start the download
  4.   downloadStatus.innerText = downloading posts…”;
  5.  
  6.   // process the declarative controls
  7.   WinJS.UI.processAll()
  8.   .then(function () {
  9.     // use the WinRT to download the RSS
  10.     var syn = new Windows.Web.Syndication.SyndicationClient();
  11.     var url = new Windows.Foundation.Uri(http://blogs.msdn.com/b/oldnewthing/rss.aspx”);
  12.     return syn.retrieveFeedAsync(url);
  13.   })
  14.   .done(processPosts, downloadError);
  15. };

This is actual code from an app that pulls down an RSS feed after the processAll method is completed in the then” method on line 8, which returns another promise on line 12. That promise is handled by the done” method on line 14. If there had been an error in the download and as a developer, I’d forgotten to provide the downloadError” error handler, I’d have gotten a giant exception dialog that would’ve encouraged me down a different path.

Thanks to Josh Williams from the WinJS team for reminding me of the done” method.


← Newer Entries Older Entries →