Quantcast
Channel: Developer Express Inc.
Viewing all 2401 articles
Browse latest View live

DevExtreme — HTML5 framework for mobile applications

$
0
0

Getting started

DevExtreme is a cross-platform application framework for smartphones and tablets that includes everything you need to create native-looking hybrid applications using HTML5 and JavaScript in Visual Studio. Since DevExtreme does not target any specific mobile operating system, you can begin to create your apps immediately using only your favorite device, local web server, and Visual Studio.

Let us begin with a simple scenario for a DevExtreme app:

We all eat out. Some of us more often than others. And on those occasions when we happen to dine out with a group of friends, we undoubtedly encounter that unavoidable moment when the check arrives and we must all decide how much a tip each of us owes. I don’t know about you, but I’ve often wished for an app that could tell each person in my party exactly what he or she must pay. This is the idea behind our real-world TipCalculator demo, which provides this exact capability. I'll use this simple scenario and app to demonstrate the main concepts underlying DevExtreme’s framework, even though the TipCalculator app consists primarily of one screen. You can try out the demo here and get the source code here.

Basic use

Structurally, a DevExtreme app is a single-page application (SPA) built around the Model-View-ViewModel (MVVM) design pattern. The entry point to this SPA is an index.html file that contains the required meta tags and resource references. One resource type that is used extensively is the view and these are generally stored as separate view files.

<linkrel="dx-template"type="text/html"href="views/home.html"/>

This approach allows you to overcome a widespread inconvenience common with SPAs when a single html file contains the entire HTML markup for all the possible views in the app.

The next step is to take a look at code in the index.js file to see how to declare the TipCalculator namespace and create an HtmlApplication object. This object is the main view engine for the SPA: it takes care of displaying the correct view and populating it with data.

TipCalculator.app = new DevExpress.framework.html.HtmlApplication(…)

Layout

For displaying views, DevExtreme uses the concept of layouts. These layouts define a template for data and widgets that the application object will populate and insert into the page. DevExtreme provides several popular default layout types. The TipCalculator demo utilizes the simplest built-in layout – the Empty layout, so called because you can put any widget or data within it. You can learn more about Views and Layouts in our documentation.

DevExtreme also supports routing– the ability to navigate through the app via synthetic URLs that define views and data to display.

TipCalculator.app.router.register(":view", { view: "home" });

This code registers a simple route, which takes the view name to display from the URL. If the view name is not part of the URL, the “home” view will be used as default, for example at startup.

ViewModel

Corresponding with the “home” view, there should be a “home” function within the TipCalculator namespace (in the views/home.js file). This function should create a ViewModel for the “home” screen.

TipCalculator.home = function(params) {
// …
};

For the tip app, there are three input parameters:

- The total amount for the check or bill (billTotal);

- The number of people in the dinner party (splitNum);

- The amount (expressed as a percentage) of the tip (tipPercent).

These parameters are declared as observable values. In doing so, we can bind them to widgets in the UI and track value changes.

var billTotal = ko.observable(),
tipPercent = ko.observable(DEFAULT_TIP_PERCENT),
splitNum = ko.observable(1);
 
The totalToPay, totalPerPerson, totalTip and tipPerPerson values are calculated based on user input. All these values are dependent on other observable values; that is, they are computed. In other words, we want the values to be updated automatically should at least one observable value involved in the calculation be altered.

var totalTip = ko.computed(…);
var tipPerPerson = ko.computed(…);
var totalPerPerson = ko.computed(…);
var totalToPay = ko.computed(…);

As with all monetary calculations, we have to allow for the calculated values to be rounded. To help with this, the TipCalculator demo implements the roundUp and roundDown functions, changing the roundModel value. This should result in a recalculation of the totalToPay value.

var totalToPay = ko.computed(function() {
var value = totalTip() + billTotalAsNumber();
switch(roundModel()) {
case ROUND_DOWN:
if(Math.floor(value) >= billTotalAsNumber())
return Math.floor(value);
return value;
case ROUND_UP:
return Math.ceil(value);
default:
return value;
}
});

At the same time, you must reset rounding when you alter any of the input parameters, so that a user can see the exact number. To achieve this, the demo uses the subscribe method.

billTotal.subscribe(function() {
roundMode(ROUND_NONE);
});
tipPercent.subscribe(function() {
roundMode(ROUND_NONE);
});
splitNum.subscribe(function() {
roundMode(ROUND_NONE);
});

The ViewModel for the tip calculator is quite simple, especially for those readers who are aware of Knockout, the MVVM library that underpins DevExtreme views. If you are unfamiliar with Knockout at present, the View model is a good representation of its capabilities.

View

Let’s take a look at the HTML markup, namely the views/home.html file. At the top, there are two div elements: one defines the view with the name, “home”, and the other defines its content (and has the name, “content”).

<divdata-options="dxView : { name: 'home' }">
<divdata-options="dxContent : { targetPlaceholder: 'content' }">
...
</div>
</div>

Inside the content, there is a toolbar:

<divdata-bind="dxToolbar: { items: [{ location: 'center', text: '@tipCalculator' }] }"></div>

dxToolbar is a PhoneJS widget that is created using the Knockout approach.

“@” is used for localization.

Then there are fields and sets created by predefined CSS classes - dx-fieldset and dx-field. Inside, there is a dxNumberBox for entering the bill amount, along with two dxSliders for the tip percentage & the number of persons in the party.

<divid="billTotalInput"class="dx-field-value"data-bind="dxNumberBox: { ... }"></div>
<divdata-bind="dxSlider: { ...}"></div>
<divdata-bind="dxSlider: { ...}"></div>

Below, you can see two dxButtons intended for rounding the final total and result output:

<divclass="round-buttons">
<divdata-bind="dxButton: { text: '@roundDown', clickAction: roundDown }"></div>
<divdata-bind="dxButton: { text: '@roundUp', clickAction: roundUp }"></div>
</div>
<divid="results"class="dx-fieldset">
<divclass="dx-field">
<spanclass="dx-field-label">@totalToPay</span>
<spanclass="dx-field-value"style="font-weight: bold"data-bind="text: Globalize.format(totalToPay(), 'c')"></span>
</div>
<divclass="dx-field">
<spanclass="dx-field-label">@totalPerPerson</span>
<spanclass="dx-field-value"data-bind="text: Globalize.format(totalPerPerson(), 'c')"></span>
</div>
<divclass="dx-field">
<spanclass="dx-field-label">@totalTip</span>
<spanclass="dx-field-value"data-bind="text: Globalize.format(totalTip(), 'c')"></span>
</div>
<divclass="dx-field">
<spanclass="dx-field-label">@tipPerPerson</span>
<spanclass="dx-field-value"data-bind="text: Globalize.format(tipPerPerson(), 'c')"></span>
</div>
</div>

Run, debug and package for markets

Throughout the development of an application, there are the opportunities for running, testing and debugging, with the last step of all packaging the application for a particular platform market.

To run and debug an application, it is sufficient to configure your local web server (Apache, IIS, nginx or whatever) and open the URL on a device, device emulator or browser. If you choose a desktop browser, you will need to replace the UserAgent string so it looks like a smartphone or tablet. Developer tools in modern browsers typically allow this, although a better option is to use something like Ripple Emulator to run and debug code.

To package a mobile app, you can use Android SDK with Eclipse (for Android package), Windows Phone SDK with CordovaWP8App (for WindowsPhone package), Mac (for iOS package) or PhoneGap Build. At the same time, DevExtreme allows you to easily build a mobile package from within Visual Studio. You do not even need to install these SDKs or have a Mac. Just right-click the application project and choose Build Native Packages as described in our documentation.

Of course, in order to publish a mobile app in the various stores (AppStore, Google Play or Windows Store), you must register as a developer on Apple, Google or Microsoft sites.


Conclusion

This simple example shows how quickly you can develop and package a mobile app with DevExtreme using your existing Web programming skills. The main benefits DevExtreme brings are structuring, minimal code, and the easy building of apps for mobile devices. Are you ready to get started? Then download DevExtreme here. And if you get stuck, don’t worry – our support team is ready and willing to help.


2014 Orlando Code Camp

$
0
0

On Saturday, we were proud to attend and sponsor the 9th annual Orlando Code Camp held at the Seminole State College in Lake Mary, Florida. 

Our hosts had graciously provided us keynote time to introduce the DevExpress product line – our .NET controls for Winforms, ASP.NET, MVC, WPF, and Silverlight; our WinRT line of controls; the Report Server; CodeRush; and the DevExtreme mobile platform. We also announced a raffle for a CodeRush license, open to everyone in attendance.
image018image020

Getting acquainted with developers who make use of our components and the solutions they build is the best part of these events. At our table, we were fielding questions and live demoing the 13.2.8 release on a Dell Venue 11 we had brought along for the fun. Many of you were interested in our DevExtreme and PhoneJS platforms, our MVVM library for WPF, and our WinRT controls.   

If you attended, we’d love to hear your feedback in the comments below.

#OrlandoCC

More CodeRush Plugins added to the Visual Studio Gallery

$
0
0

For those of you who didn’t already know, several of our CodeRush plugins are already available from the Visual Studio Gallery.

Plugins added to the Visual Studio Gallery can be installed from within Studio via the Tools\Extensions and Updates menu.

Additionally Studio will let you know if a new version is released. Assuming you agree, it will download the new version and install it for you as well.

So we’ve just added another 5 plugins to those already up there making it even easier to pimp your IDE.

For reference these are the plugins we’ve just added:

To browse a full list of CodeRush plugins on Visual Studio Gallery just visit Tools\Extensions and Updates in Studio and search the online section for CodeRush

Alternatively, just follow this link.

DevExpress will be at Build 2014, will you?

$
0
0

We’re in the last stages of preparing for Microsoft’s Build 2014 conference, which, should you have been off skiing in the Rockies for the past month (lucky you!), is next week from Wednesday April 2 to Friday April 4. It’s in beautiful downtown San Francisco at the Moscone Center, and I really hope you’ve already registered because they’ve been sold out for quite a while. From all accounts, this particular Build should be a very interesting one to attend: there’s lots of rumors about sneak-peeking the next version of Windows, of Windows Phone, of Office on iOS, and so on. (News about a Xamarin acquisition, anybody?) In essence, if you’re working in the Windows space or the mobile space, you have to be there.

DevExpress will be exhibiting of course – can’t have a Build conference without us! – and present at our booth (we’re #315 on the third floor) will be Seth demoing everything related to analytics and reporting, Mehul ready and waiting to show off developing for the web, Azret talking about WinForms and WPF, and Emil discussing the enterprise. Our videographer Jeff will be in the background videoing anything and everything, and we’ll be doing some interviews. If you are a customer, make sure you pop along and say hi, we’d love to get feedback about how we’re doing, to discuss your plans for the future and how we might help. Make your voice heard! We’ll have our UI Superhero swag to give away, including T-shirts.

Not only that, but we are co-sponsoring the BUILD Blogger Bash along with TechSmith and Intel. This event is being held at Southside Spirit House located near the Moscone Center, on Thursday April 3 from 7pm to 10pm. Many blogging luminaries will be there, including Mary Jo Foley, Ed Bott, Peter Bright, and Alex Wilhelm, as well as DevExpress’ bloggers, Seth and Mehul. (The rest of the crew will be there too, including Amy, who will be flying down just for this occasion.) Space is very limited (250 people maximum) and the event is already sold out, so if you don’t have tickets yet then you are probably out of luck. We’ll have a few complementary ones at the booth – very few, unfortunately – so if you want a chance at attending , come and see us very early on Wednesday at the booth. Once they’re gone, they’re gone.

We’ll definitely be blogging about the conference next week, about what we learn and what it means for us and you, our customers. Stay tuned!

New CodeRush Plugin – Add Data Contract

$
0
0

A customer recently requested a way to quickly add the [DataContract] and [DataMember] attributes to the active class.

Naturally we were happy to oblige.

The Add Data Contract plugin provides a new CodeProvider available when your caret is within the name of any class.

When invoked, it will add the [DataContract] attribute to the active class, and decorate it’s properties with the [DataMember] attribute.

AddDataContract

Naturally we also:

  • Add a reference to System.Runtime.Serialization.dll
  • Add the System.Runtime.Serialization namespace.

Where do I get this Plugin?

This plugin is available on GitHub or via the Visual Studio Gallery

New XAF Case Study

$
0
0

I wanted to draw your attention to a recent case study from Jason Schulz – the M5 project. I loved his perspectives on the power of XAF and the XAF community (including his use of the eXpandFramework).

If you’ve not had a chance to read it yet, you can do so here:

https://www.devexpress.com/Home/Case-Studies/M5/

And before I forget, if you have an XAF project and would like us to showcase it on our site, please do let me know.

DevExpress MVVM Framework. Using DataAnnotation attributes and DevExpress Fluent API.

$
0
0

000

Imagine configuring editing and validation settings from one place – eliminating the need to separately configure each data view (XAML). DataAnnotation attributes allow you to do exactly that.
Beginning with version 13.2, a consistent set of functionalities were implemented across all our controls. Originally, GridControl provided limited support for attributes and cell editors could not be configured by attributes specifying an editor data type. Bands could not be set at the data source level. Moreover, DataAnnotation attributes did not exist for PropertyGridControl. Now, all of our components provide similar functionality at design time, runtime, and the Scaffolding Wizard. We also introduced a flexible alternative in version 13.2 – the DevExpress Fluent API.

Which attributes are supported?

DevExpress editors, GridControl, DataLayoutControl, Scaffolding Wizards and other components support nearly every standard attribute in the System.ComponentModel.DataAnnotations namespace.

We also implemented a number of our own attributes for defining masks. These attributes are available from the DevExpress.Xpf.Mvvm.DataAnnotations namespace.

To learn more about the available attributes, see the following help topic: Data Annotation Attributes.

Common decoration patterns

  • In a model class

The simplest way to assign an attribute is to explicitly declare it on a property of a model class:

publicclass Point {
[Display(Name = "Abscissa")]
publicdouble X { get; set; }
[Display(Name = "Ordinate")]
publicdouble Y { get; set; }
}

Although this approach is simple and descriptive, your code may become difficult to read when there are many properties. You may also find your model class does not allow attribute decorations. For example, a WCF Data Service or the Entity Framework Database First approach may automatically generate model classes.

  • In a metadata class

Declare a metadata class and assign it to a model via the MetadataType attribute:

[MetadataType(typeof(PointMetadata))]
publicclass Point {
publicdouble X { get; set; }
publicdouble Y { get; set; }
}
publicclass PointMetadata {
[Display(Name = "Abscissa")]
publicdouble X { get; set; }
[Display(Name = "Ordinate")]
publicdouble Y { get; set; }
}

You can extend this approach to automatically generated classes using partial classes.

The obvious disadvantage is the metadata class is both difficult to support and error prone. For instance, you will not receive an error at compile time if you rename a model property and forget to do the same for its metadata class.

  • DevExpress Fluent API

Considering these disadvantages, we developed a flexible solution – the DevExpress Fluent API. The following code is written with the DevExpress Fluent API:

[MetadataType(typeof(PointMetadata))]
publicclass Point {
publicdouble X { get; set; }
publicdouble Y { get; set; }
}
publicstaticclass PointMetadata {
publicvoid BuildMetadata(MetadataBuilder<Point> builder) {
builder.Property(x => x.X).DisplayName("Abscissa");
builder.Property(x => x.Y).DisplayName("Ordinate");
}
}

Since the DevExpress Fluent API does not allow setting attributes on non-existent properties, renaming properties becomes easy.

It’s sometimes convenient to arrange properties in groups. The classic approach for this is to set a Display Attribute on the grouped properties. With the DevExpress Fluent API, properties can be grouped as follows:

builder
.Group("General Info")
.ContainsProperty(x => x.FirstName)
.ContainsProperty(x => x.LastName)
.EndGroup()
.Group("Contacts")
.ContainsProperty(x => x.Email)
.ContainsProperty(x => x.Phone)
.EndGroup()
.Group("Address")
.ContainsProperty(x => x.City)
.ContainsProperty(x => x.Zip)
.EndGroup();

While the Fluent API is valuable in complex scenarios, in simple cases it still makes sense to use one of the standard approaches.

Using attributes with DevExpress controls

We have a few demos that clearly demonstrate how to use attributes with our controls: “Data Grid - Smart Columns Generation”, “Layout Manager - Data Layout Control”, “Property Grid - DataAnnotation Attributes”, “Property Grid - DataAnnotation Attributes (Fluent API)”. Please refer to them to see our controls in action.

We prepared two samples. The first sample (E5179) illustrates how to use attributes with Entity Framework Code First, the second (E5180) uses the DevExpress Fluent API. The samples are very similar; below you will see a screenshot of how they look:

2014-03-31_1501 - Copy

  • GridControl

To configure the GridControl layout in for the underlying data types and attributes, set the GridControl.EnableSmartColumnsGeneration property to True. In this case, GridControl will automatically generates columns at runtime and customize them according to DataAnnotation and DevExpress Fluent API usage.

You can also generate columns at design time based on the data source objects. GridControl’s SmartTag provides the “Generate Columns” action for this purpose:

2014-03-31_1505_1

Generated columns have their IsSmart property set to True. It means that these columns are configured automatically. In the meantime, you are free to set any property manually – your settings will override the automatic settings.

You can call the TableLayout method of the Fluent API to define a grouping applicable only for GridControls:

builder.TableLayout()
.Group("Personal Data")
.ContainsProperty(x => x.FirstName)
.ContainsProperty(x => x.LastName)
.EndGroup();

The DevExpress Scaffolding Wizard also generates columns with IsSmart=True. To avoid generating columns for some properties, set the ScaffoldColumn(false) attribute for them:

[ScaffoldColumn(false)]
publicstring LastName { get; set; }

  • DataLayoutControl

With the Fluent API, you can configure groups by calling the Group method as we did for GridControl. If you like, it's also possible to define a grouping exclusively for DataLayoutControl using the DataFormLayout method. The following code snippet demonstrates this:

builder.DataFormLayout()
.GroupBox("General Info")
.ContainsProperty(x => x.FirstName)
.ContainsProperty(x => x.LastName)
.ContainsProperty(x => x.CreditCardNumber)
.EndGroup()
.GroupBox("Contacts")
.ContainsProperty(x => x.Email)
.ContainsProperty(x => x.Phone)
.EndGroup()
.GroupBox("Address")
.ContainsProperty(x => x.Address)
.ContainsProperty(x => x.City)
.ContainsProperty(x => x.State)
.ContainsProperty(x => x.Zip)
.EndGroup();

The Scaffolding Wizard generates a simple LayoutControl with LayoutGroup and LayoutItem objects. You can customize them in the designer as you like.

  • PropertyGridControl

PropertyGridControl automatically generates rows for the defined attributes.

PropertyGridControl provides the capability to initialize properties at runtime. In this scenario, you could opt for a custom item initializer. For this, assign the InstanceInitializer attribute to the required property.

For example:

[InstanceInitializer(typeof(Item1), "Item1")]
publicobject Item { get; set; }

At runtime, a user will see an additional “Item1” button in the Property Menu. When s/he presses this button, the Item property will be set to a new Item1 class instance.

Some tricks

  • It is possible to not create a metadata builder class; instead, place the BuildMetadata method directly in a data class:
publicclass Point {
publicdouble X { get; set; }
publicdouble Y { get; set; }
publicstaticvoid BuildMetadata(MetadataBuilder<Point> builder) {
builder.Property(x => x.X).DisplayName("Abscissa");
builder.Property(x => x.Y).DisplayName("Ordinate");
}
}

  • If you have a library which you can’t modify, use MetadataLocator to register metadata classes on startup:
MetadataLocator.Default = MetadataLocator.Create()
.AddMetadata<Metadata>();
publicclass Metadata {
publicstaticvoid BuildMetadata(MetadataBuilder<Employee> builder) {
builder.Property(x => x.FullName).ReadOnly();
}
publicstaticvoid BuildMetadata(MetadataBuilder<Team> builder) {
builder.Property(x => x.Id).ReadOnly();
}
}

  • Metadata for generic classes:
[MetadataType(typeof(BaseGenericClassMetadata<>))]
publicclass BaseGenericClass<T1> {
publicint BaseProperty1 { get; set; }
publicint BaseProperty2 { get; set; }
publicint BaseProperty3 { get; set; }
publicint BaseProperty4 { get; set; }
}
publicclass BaseGenericClassMetadata<T1> {
publicstaticvoid BuildMetadata(MetadataBuilder<BaseGenericClass<T1>> builder) {
builder.Property(x => x.BaseProperty2).ReadOnly();
}
publicstaticvoid BuildBaseMetadata<T>(MetadataBuilder<T>
builder) where T : BaseGenericClass<T1> {
builder.Property(x => x.BaseProperty4).ReadOnly();
}
}

 

That’s all. Thank you for your time.

OTHER RELATED ARTICLES:

  1. Getting Started with DevExpress MVVM Framework. Commands and View Models.
  2. DevExpress MVVM Framework. Introduction to Services, DXMessageBoxService and DialogService.
  3. DevExpress MVVM Framework. Interaction of ViewModels. IDocumentManagerService.
  4. DevExpress MVVM Framework. Introduction to POCO ViewModels.
  5. DevExpress MVVM Framework. Interaction of ViewModels. Messenger.
  6. DevExpress MVVM Framework. Using Scaffolding Wizards for building Views.
  7. DevExpress MVVM Framework. Data validation. Implementing IDataErrorInfo.
  8. THIS POST: DevExpress MVVM Framework. Using DataAnnotation attributes and DevExpress Fluent API.

New CodeRush Plugin – Add Data Contract – How does it work?

$
0
0

In my last post I presented the Add DataContract plugin.

In this post I’ll walk you through what makes it tick.

Overview

In essence there are 3 parts to this plugin

  • Add the Namespace Reference (Imports\using directive)
  • Add the DataContract attribute to the class.
  • Add the DataMember attribute to each of the classes properties.

Structure

The Add Data Contract plugin is a CodeProvider with the usual CheckAvailability and Apply methods. The basic plumbing of this plugin is created with the NewCodeProvider CodeRush template detailed in this blogpost.

Add Namespace

In the DXCore, a using directive (or an imports directive in VB.Net) is called a NamespaceReference

To add a NamespaceReference to the current file it is first necessary to determine if one already exists. For this we construct a new ElementEnumerable capable of searching the current file for NamespaceReference objects. This is then used to return an IEnumerable<NamespaceReference>

AddDataContractGetNamespaceReferences

The list of namespace is queried to determine if the new namespace is already referenced. There is nothing to be gained by referencing the same namespace twice. If it is found, then we return from the apply method without having performed any modifications.

AddDataContractExitIfNamespaceAlreadyPresent

Location, Location, Location

Next we determine the best location to insert our NamespaceReference.

If there are no existing NamespaceReferences, then the InsertionPoint is set to the start of the current document.

Alternatively, if there are some pre-existing NamespaceReferences, then the start of the last of these is picked as a sensible default.AddDataContractDetermineNamespaceInsertionPoint

Code Generation and Insertion

Next we create our new NamespaceReference object (passing in the string representing the namespace in question) and have CodeRush generate the actual code that represents this object. The last step in generating our NamespaceReference is to queue the insertion of this code at the InsertionPoint determined in the previous step

AddDataContractGenerateCodeAndQueueInsertion

A Generic AddAttribute Method

There are 2 attributes which this plugin adds to various parts of the target class.

The DataContract attribute is to be added to the class itself. Then we need to iterate through the properties on the class, and add the DataMember attribute to each of those.

In order to make this as easy as possible, I decided to create a utility method capable of quickly adding a named attribute to any given LanguageElement.

AddDataContractAddAttribute

In the method above, an ElementBuilder is used to create the Attribute and then the AttributeSection. For those that don’t know the AttributeSection is the pair of square brackets that the attribute sits inside. (These are angle brackets in VB.Net).

As before, code is then generated and queue an insert into the ActiveTextDocument at the correct location.

Putting it all Together

All of this is drawn together in the body of the apply method.

AddDataContractWrapInSingleStep

First we add the System.Runtime.Serialization namespace. Next we decorate the class with the DataContract attribute. Then we iterate through all the properties of the class decorating each of these with the DataMember attribute. We call ApplyQueueEdits to apply each of the queued operations to the document in a single step.

Finally we reparse the document and call the FormatFile action to perform any additional reformatting that might be necessary.

Full source code is available

As usual, the full source code for this plugin is available on github for your perusal.

Feel free to fork (or just plain copy) the code for your own plugins and see what you can do with it.


Build 2014–Day One Observations

$
0
0

I thought I should jot down a couple of observations from Day 1 here at Build 2014. Would love your thoughts! Apologies for some of the blurry images up front.

Windows Phone 8.1 Update

While there was a ton of time spent on discussing the Windows Phone update, I thought the most interesting thing discussed was Cortana, the new Microsoft Digital Assistant. A lot of thought went into its implementation and it shows. It was designed to learn about the user in order to be more effective at displaying the right information at the right time. Two examples I think cut to the heart of it: context whittling (my term) and person based tasks. Context whittling is a situation where an additional query to Cortana on an already queried set returns a more refined result. In other words the context can be shrunk with each additional query. Person based tasks are tasks issued to Cortana based around a particular person. Whenever that person comes into context, Cortana reminds the user of a task related to the person in question.

In addition to Cortana, a slew of new devices were announced by Stephen Elop:

Lumia 930

Lumia 630/635

Windows 8.1 Update

The next update to Windows is slated to contain a number of features designed to improve support for the keyboard and mouse. The first is an improved start screen:

Windows Start Screen

In addition to the new start screen efforts have been made to have a more desktop-friendly approach to apps: these will also run from the task bar and execute as normal apps. Early complaints regarding the fragmentation of the desktop experience appear to have resonated with Microsoft enough to make these important changes. Finally, enough noise was made about the start menu that it will one day make its way back into the OS for good (still a prototype):

Windows 8 Start Menu

Universal Windows Apps

This portion of the keynote resonated with me primarily because it reminded me of XAF. Instead of targeting Windows and Web, UWA’s (I like to pronounce it yewas because I can) target both the Windows 8 device as well as the Windows 8 Phone device using a shared codebase. This also includes specific Visual Studio tooling to work with the shared and non-shared code.

Uiversal Windows App

This is only the beginning of it: Microsoft is also currently working on extending this type of application development to the XBox.

Office Touch

Microsoft announced their work on a Touch-Based office for Windows 8.

PowerPoint Touch

I personally love this application. It is clearly touch friendly and a great deal of effort was put into making the ribbon more touch friendly without sacrificing space.

Summary

There were obviously a bunch of other things mentioned (internet of things, more phone features, open sourcing WinJS, etc.) in the keynote that I’ll leave for another time. The overwhelming feeling was one of optimism – a far cry from the first Build to say the least. Microsoft feels more open and developer friendly. Satya Nadella (Microsoft CEO) even showed up in a t-shirt and jeans to answer honest-to-goodness difficult questions (why should I choose to build for Windows Phone instead of Android?) in an open and conversational manner. They also spent a great deal of time discussing roadmap-type stuff. My feeling is that if Microsoft wants the Enterprise on board with what they are doing they should at least give them a heads-up (something Microsoft did today).

Last and most important: Microsoft now realizes that it can no longer rely on revenue from the OS (particularly on devices 9” and smaller). In fact, it will no longer be selling the software but giving it away for free. While this was not necessarily trumpeted, I think it is a critical departure from Microsoft’s OS centric past to a device and service based future.

We’ve had tons of folks stop by to chat and take a look at what we offer as well.

DevExpress Booth

It has been great learning what our customers are developing and what our potential customers are keen on creating.

On to Day 2!

As always, if there are any comments and/or questions, feel free to get a hold of me!

Seth Juarez
Email: sethj@devexpress.com
Twitter: @SethJuarez

Build 2014–Day Two Observations

$
0
0

After the conclusion of an eventful day two here at Build, I thought I would share some insight into what I thought it all meant. In a nutshell, we live in a post OS world and Microsoft is embracing it with Azure it while maintaining its flagship compiler in an interestingly new way. Let me elaborate a bit.

.NET

It is hard to grasp the entire reality of what Roslyn actually means for .NET. If a static language is a house, the compiler is its foundation. What Microsoft in effect did with the Roslyn project is pick up the house and build a new foundation while attempting to maintain the integrity of the walls. My sources tell me that every single .NET product in Microsoft is now compiled using Roslyn. This is a remarkable feat. To one-up themselves, they decided to go ahead and open source the entire Roslyn compiler. The first and obvious question is “why?” In an interview with Mads Torgersen (more on that later) he mentioned that doing so would allow folks to do more interesting things not only with the languages themselves, but with how the languages interact within Visual Studio. In other words, partners would have the same advantages as Microsoft when building tooling around Visual Studio.

.NET Foundation

Also, with the creation of the .NET foundation, anyone can contribute to .NET making it a truly vibrant and potentially innovative platform for development. Notice that at the forefront of the list of those in the .NET community is Miguel de Icaza. At Mix 11 I remember he coined the phrase “We love C# more than Microsoft does.” I believe that is no longer the case. It seems to me that for truly native device experiences Microsoft is putting all of its support behind Xamarin.

Xamarin Session

What you see above is not a keynote, it is a regular conference session with a little less than 1200 in attendance. It is clear that not only is Microsoft putting its stamp of approval on the Xamarin approach, but the Microsoft community is eager to use .NET to deliver multi-device experiences.

Windows Azure

In yesterday’s summary I mentioned that we live in a post OS world. Devices are becoming the ubiquitous computing platform of choice for completing quick every day tasks. Yesterday we saw devices 9” and smaller get an incredible offer: a free OS. While this seems completely contradictory, Microsoft has “reimagined” (to use their favorite term) the OS in a non-OS way.

Microsoft today announced a number of IaaS and PaaS improvements and features that make Azure the ultimate OS with devices being the new “programs” so-to-speak. Just like windows of yore welcomed programs from really any source (including competitors), they are now embracing devices in exactly the same way. They are making it easy to create the backend infrastructure to support these devices in a pretty amazing way. Never in my life could I have imagined a John Gruber presentation during a Microsoft keynote; yet nonetheless there it was. It turns out that if John himself wants to build a killer app with cloud persistence he really can only turn to Amazon or Microsoft – Apple can’t help. While IaaS is interesting, it’s PaaS that is compelling to me. On that front Microsoft made announcements for Web, Mobile, and Data use cases in the cloud.

Web Announcements

For web anyone can now easily scale a website, manage traffic, backup, and run long running jobs pretty easily directly from Visual Studio. Many of these features were previously in beta mode.

Mobile Announcements

Azure as a mobile backend handles a ton of functionality that would otherwise be difficult for a small shop to administer.

Data Announcements

And finally Azure as a repository of data is a compelling alternative.

The idea that the cloud was the new Microsoft OS dawned on me when I looked at this:

Azure Portal

It looks like the control panel (or task manager) for an OS! While this is not a revelation to some, it has become clear to me that this is really the only play Microsoft has: it also turns out to be the best one.

Summary

What does this mean for you dear DevExpress reader? I think it means it is an exciting time to be a developer in the .NET space. I also think it is a great opportunity for you to leverage some of the innovations we have been building into more traditional .NET technologies that are designed to bridge the gap between your current investments and the new directions Microsoft is taking.

As always, if there are any comments and/or questions, feel free to get a hold of me!

Seth Juarez
Email: sethj@devexpress.com
Twitter: @SethJuarez

Community Callout: New CodeRush Plugin CR_FluentPoco

$
0
0

Richard O’Neil, author of the FakeItEasy CodeRush Templates has been at it again.

This time he’s taken a step up, and built a new CodeRush plugin.

From his github repository:

CodeRush expansion plugin to turn a list of private fields into fluent methods.

I created this to help me build helper classes for an automated testing framework I was making with Selenium and it's WebDriver.

If you start with code like this…
CR_FluentPocoStartClass

The generated code will enable you make the following call…
CR_FluentPocoExampleFluentCall

Naturally Richard has open sourced his creation for all the world to use, so head on over and give him some feedback.

For more information see the CR_FluentPoco repository on GitHub

Build 2014 - Post Event Recap

$
0
0

Microsoft's Build 2014 conference is over and wow, it was fun for us. Check out the fun that I and the other DevExpress crew had there:

Build 2014 Interviews

Watch these interviews with some great Microsoft people that Seth and I had the pleasure to interview:

Build 2014 San Francisco Scott Hunter Azure Development Team Interview
Build 2014 San Francisco Scott Hunter Azure Development Team Interview

Build 2014 San Francisco Robert Green Channel 9 Interview
Build 2014 San Francisco Robert Green Channel 9 Interview

Build 2014 Observations

Microsoft is changing in the post Steve Ballmer era. There was a ton of new announcements. Check out Seth's observations from Day 1 and Day 2:

Build 2014-Day One Observations

Build 2014-Day Two Observations

Thanks!

Your Next Great .NET App Starts Here

Year after year, .NET developers such as yourself consistently vote DevExpress products #1.

Experience the DevExpress difference for yourself and download a free 30-day trial of all our products today: DevExpress.com/trial (free support is included during your evaluation).

Build 2014 Recap: S. Somasegar Interview

$
0
0

One of the best parts of attending Microsoft conferences is the access we have to the people building the very tools we use day in and day out. S. Somasegar is the Corporate Vice President of the Developer Division at Microsoft. I was delighted to spend some time asking questions about some of the interesting announcements at BUILD 2014. Topics varied from Universal Windows Apps to open sourcing C#. We also talked about some of the fantastic developments with Azure and how they have improved their PaaS offerings. We also discussed what Microsoft intends to do to support those of us still on ASP.NET WebForms as well as WinForms. Would love your thoughts about what he said as well as the overall direction Microsoft is taking. As I have mentioned in earlier posts, I really like the new openness Microsoft is espousing with its developers. Enjoy!

As always, if there are any comments and/or questions, feel free to get a hold of me!

Seth Juarez
Email: sethj@devexpress.com
Twitter: @SethJuarez

Automated Web Testing: TestCafe 14.1 is Here!

$
0
0

Check out what's New in the TestCafe 14.1.1 release:

(Not familiar with TestCafe yet? Read this FAQ)

Web based Test Code Editor - A new built-in editor allows you to edit your test scripts instantly and online. So not only do you record online, you can now edit online too!

Enhanced Configuration and Setting Options - We have extended TestCafe's Control Panel and improved the way in which you manage test settings for your web applications.

Extended API Functions - Two new user actions (navigate and waitFor) have been added to TestCafe's API. There's also a new dialog handling function that closes a dialog shown when a window is about to be unloaded (handleBeforeUnload).

Improved Architecture and Test Core - Our commitment is to constant and never-ending improvement and so TestCafe 14.1 ships with a significantly improved core engine. The updated architecture improves TestCafe's reliability and addresses a number of usability requests from users such as yourself.

New Installer for Windows Users - TestCafe v14.1 now ships with a simplified Windows installer for those testing web apps on the Windows operating system.

And there's more all the great new 14.1 enhancements here!

5 Reasons to use TestCafe

Here's 5 reasons why TestCafe is the best web testing tool out there:

  1. Plug-in Free - Other solutions require you to download browser plugins before you can get started. TestCafe let's you get started right away without any plugins.
  2. Visual Test Recorder - A test recorder that works with any browser: locally and on remote machines.
  3. 100% Web Based - Unlike competing products, TestCafe does not pretend to be something it's not. TestCafe is not built to test Windows client apps. TestCafe was engineered from ground up to be a fully optimized web testing tool for web developers and QA engineers.
  4. Easy API - The API is simple. For example, want to call simulate a double-click mouse action? Just call act.dblclick.
  5. Dedicated support - You get 12 months of support from a world class team of developers. All for only $499 per developer license.

Competition?

So how does TestCafe stack up against the competition? Take a look at this list below to see why TestCafe is the right choice for your web-based functional testing needs.

TestCafe vs Competitors

TestCafe + Browser Stack

BrowserStack.com provides live, web-based browser testing with instant access to all desktop and mobile browsers.

And using the TestCafe module for BrowserStack, you can run your automated functional tests anywhere!

Read this blog post to learn more about BrowserStack and TestCafe.

Get started today

TestCafe is easy to get started with. Just download, install, and you're ready to record your first test.

Watch this short 3 minute video to get started today: DevExpress: Easy Web Testing with TestCafé

Your Next Great .NET App Starts Here

Year after year, .NET developers such as yourself consistently vote DevExpress products #1.

Experience the DevExpress difference for yourself and download a free 30-day trial of all our products today: DevExpress.com/trial (free support is included during your evaluation).

Five tips on improving performance when deploying a DevExtreme application as a website

$
0
0

This post will guide you through several steps designed to help you improve your DevExtreme website performance. The process of deploying a DevExtreme application as a website is described in this Knowledge Base article.

1. Use CDN links

To help streamline your process, we placed our DevExtreme libraries (which include PhoneJS and ChartJS) in the Content Delivery Network. This allows you to simply add links to your application during deployment, rather than publish corresponding resources when developing an application with ChartJS or PhoneJS.

PhoneJS CDN links

ChartJS CDN links

To use the jQuery, Knockout and globalize libraries in the same manner as the DevExtreme libraries, use the Microsoft Ajax CDN and Google CDN.

I described the Pros and cons of CDN usage in one of my previous blog posts.

2. Minimize the number of HTTP Requests

A quick and easy way of reducing page response time is to decrease the number of HTTP requests made for image, css and script resources. Here are two suggestions to help you reduce the number of HTTP requests.

  • Combine small images into a single image and use CSS sprites
  • Combine external scripts into as few files as possible. For example, if you are using widgets from both the PhoneJS and ChartJS libraries, deploy a combined dx.all.js file that contains code from both libraries. You will find a CDN link to it here (version v13.2.8)

3. Use inline images as data URI

Preprocessing source-code and converting images to data URIs can also dramatically decrease the volume of your HTTP requests for images. A data URI is essentially binary data encoded into the base64 format, along with some additional information for the browser including a MIME type, a charset and the encoding format (base64).

DevExtreme provides an icon library that contains a large number of icons for all platforms supported by the framework in the base64 format. You can look through this library, and learn how to use and extend it from our documentation.

Take a look at the following image to see the time response difference when using images in the base64 and .png formats.


Note that images in the form of data URIs are larger than their originals. These images will not be cached as images, but as part of the source-code. So, if you wish to extend the DevExtreme icon library, do this for small images, such as icons and background-slices.

4. Minimize CSS and JavaScript files

DevExtreme provides two versions of script files: debug (e.g., dx.all.debug.js, dx.phonejs.debug.js, dx.chartjs.debug.js) and minified (e.g., dx.all.js, dx.phonejs.js, dx.chartjs.js). When you are deploying a ready-to-use application to a web server, it is better to reference minified scripts.

Minification is the process of reducing the size of a CSS or JavaScript file by removing scripts or css that do not influence functionality, such as unnecessary whitespace, comments, excessive semicolons, and shortening variable names to one character. Look at the following JavaScript function.

// this function is used to calculate the sum of two numbers
function sumFunction (value1, value2) {
var sum = value1 + value2;
return sum;
}
After minification, the function is reduced to the following.
 
function sum(a,b){return a+b}

As a result, the sent bytes will be significantly reduced when compared with non-minified code.

To minify your CSS and JavaScript custom code, use a free Ajax Minifier tool from Microsoft or the YUI Compressor from Yahoo.

Take a look at the following image to see the benefits of using minified files.


Another aspect of script minimization is to avoid referencing code that is not used in your application. For example, if you are using widgets only from the ChartJS library, there is no need to reference dx.phonejs or dx.all scripts. Moreover, if you are using a specific widget from the ChartJS library, it is better to reference corresponding modules along with the required core modules instead of the whole library as described in our documentation.

Here is a small test.


While the number of HTTP requests was increased, the page rendering speed was improved because the total script size was decreased.

5. Use best practice recommendations existing for regular websites

I would like to note that when you are deploying a DevExtreme application to web servers, it behaves as a regular website. So, you can apply all performance improvement recommendations and rules existing for website deployment. Google and Yahoo have great articles on this subject.

Google - Web Performance Best Practices

Yahoo - Best Practices for Speeding Up Your Web Site


Den Haag, DevExpress, TechDays… and you?

$
0
0

Next week, on April 16 and 17, DevExpress in the forms of Mehul Harry, Mark Miller, John Martin, and yours truly will be in Den Haag (or The Hague, or La Haye, depending on your chosen language) for Microsoft TechDays 2014. It’s going to be a blast! It’ll be even better if you’re there too to make it a round 4 out of 4.

To help set the scene – at least it’s the right country – here’s the view from my Amsterdam hotel window just now. I’m afraid I’ve never been to Den Haag, so don’t have any pictures of that yet.

View from Amsterdam hotel window

Not only will we have a booth at the conference, manned 12 hours per day, from 7 until 7, but we’re having a Mixer evening for our customers where we’ll be happy to ply you with your libation of choice in return for some honest feedback on how we’re doing and what you’d like to see from DevExpress in the future. This Mixer is at the Novotel World Forum on April 16 from 8:00 PM till 10:00 PM in the hotel bar and lobby. John has already sent out invitations for this (and has collected a bunch of replies), but if we managed to miss you and you want to be there, come visit us at the booth that first day.

But there’s more! Both Mark and Mehul have speaking slots during the conference…

Mark is speaking on Science of Great UI. “Get a big boost on your UI skills. If you believe you’re not an artist, that UI is merely subjective, or that Great UI takes too much effort, then this session is for you. We’ll learn the essence with simple, easy-to-retain guidelines. Regardless of whether you’re building interfaces for watches, phones, tablets, desktops, elevators, automobiles, or interplanetary spaceships; you’ll learn how to reduce visual noise, enhance clarity, lower barriers to entry, and make your interfaces a pleasure to use. It’s all about making customers satisfied, and this entertaining and information-packed session will show you how.” (Scheduled for April 16 at 1:15 PM.)

Mehul is presenting on PhoneJS: Write Once, Deploy to Multiple Mobile Platforms. “Creating mobile apps is tough enough. Now try supporting a native look and feel for the top mobile platforms (iOS, Android, Windows Phone 8, and Tizen). This session will show you how HTML5 and JavaScript can create cross-platform and native-style apps using PhoneJS.” (Scheduled for April 17th at 10:50 AM.)

So, all in all, this visit to the Netherlands is going to be fun. I do hope to see you at the booth!

Meet the DevExpress Team at TechEd and Lucky Strike Houston!

$
0
0

DevExpress is excited to be exhibiting at TechEd this year in Houston, TX, May 12-15… but we’re really excited to be hosting an exclusive Meet the DevExpress Team event Wednesday, May 14 at the local Lucky Strike for an evening of cocktails, appetizers and, of course, bowling! I’ll be there along with the usual suspects: Seth, Mehul, Julian and Mark and we’ll all be more than happy to chat about our upcoming 14.1 release.

We’re also giving away a specialty t-shirt in the vein of our UI Superhero theme, and here’s a sneak peek of the front:

ui-hero-bowling

We are limited by the venue as to how many guests we can accommodate so please RSVP as soon as possible @ rsvp@devexpress.com. We look forward to seeing you at TechEd (Booth #935) and/or at our Lucky Strike event May 14, from 7 PM – 11 PM. Again, RSVP now to get a spot!

WinForms and WPF Tile Navigation Control (Coming Soon in v14.1)

$
0
0

If you’ve ever used Microsoft Dynamics CRM, then you are familiar with its innovative navigation menu and breadcrumbs with 3 levels of hierarchy. In our upcoming major update v14.1 (scheduled for release late May, 2014), you’ll be able to introduce this very UI to your next WinForms and WPF application with ease.

Microsoft Dynamics Inspired Tile Navigation Pane

WinForms and WPF TileNav Pane

Designed to be positioned at the top of your application window (like a Ribbon), the TileNavPane can be thought of as a touch-friendly version of traditional navigation elements used within Windows desktop apps. With it, you and your end-users will be able to:

  • Navigate the app’s structure much like our Outlook-inspired Navigation Bar.
  • Introduce animations within the NavPane using our new Transition Manager Control.
  • Quickly determine where the user is within the application’s navigation hierarchy.
  • Display and activate a drop down menu with sub nodes for each Tile.
  • Fully customize individual Tiles and associated drop down menus (from its height and appearance all the way to group header look and feel).
  • Use custom Tile buttons and custom category buttons.
  • Manage navigation processes using the SelectedElementChanging event.


TileNav Pane with Custom Buttons

Microsoft Dynamics Inspired Tile Navigation Pane

Now, if you like the idea of using the TileNav but don’t require hierarchy levels and/or breadcrumbs, v14.1 will ship with a simplified version called the TileBar.

WinForms and WPF TileBar Control

As its name implies, the TileBar displays a set of tiles within its container and allows you to introduce simple/straightforward navigation experiences to your WinForms and WPF applications. Planned features include the following:

  • Display drop downs for each individual Tile.
  • Place any control within the Tile’s drop down region.
  • Position the TileBar anywhere within your app (Top, Bottom, Left and Right)
  • Customize the appearance of individual Tile items.
  • Built-in glyph skinning. You provide a monochrome glyph for the Tile and the TileBar will colorize it to a complimentary color.
  • Finally, as you might expect, the TileBar will ship with a Visual Studio designer so you can quickly create the user experience most appropriate for your business needs.


Customized TileBar Items

Microsoft Dynamics Inspired Tile Nav Bar

We are working hard to make v14.1 the best ever and over the coming weeks, we’ll share many other new features/products we have planned for our upcoming release.

I look forward to your feedback…let me know what you think of our upcoming TileNav and TileBar Controls.

HTML 5 Client-Side Data Grid (Coming Soon in v14.1)

$
0
0

For those of you who have been waiting for an HTML 5 JavaScript Data Grid from DevExpress...The good news is...

HTML 5 JavaScript Client Side Data Grid

Over the coming weeks, we'll share more information about this new JavaScript data grid widget, how it fits into our existing product line and where it might be appropriate to use versus the ASPxGridView for those targeting the Microsoft web stack. For the moment, here are some of the features I'd like to highlight:

  • DataGridJS will be easy to use and customize (How easy you ask? Well, as easy as copying the appropriate css and JS files, linking them from your page, copy and pasting a code snippet from our gallery, and voila, you're done).
  • DataGridJS will work everywhere - be it on a touch-enabled device or a traditional desktop. DataGridJS will deliver an optimal user experience for mouse/keyboard users and for those using touch/gestures.
  • DataGridJS was engineered to be lightweight so it always delivers the very best performance.
  • And DataGridJS was built to address the needs of all developers, regardless of development methodologies  (use whatever you like - from AngularJS and Bootstrap to ASP.NET MVC and PHP).

HTML 5 JavaScript Data Grid for iPad

Is there a Roslyn-based CodeRush in your Future?

$
0
0

At this year’s //build/ conference, Microsoft announced the open-sourcing of Roslyn, their .NET compiler for the next version of Visual Studio. Roslyn supports code analysis and code generation for C# and VB.NET languages.

CodeRush customers have enjoyed functionality similar to Roslyn, built-in and shipping since 2005. Although, unlike Roslyn, which currently supports only C# and VB, CodeRush also supports JS, HTML, XAML, CSS and other languages. That functional similarity between Roslyn and CodeRush is unlikely to be accidental. First, having first-class compiler, language analysis, and code generation available to Visual Studio extensions is a really good idea, and good ideas are bound to be validated and improved upon again and again. And second, Dustin Campbell, previously a lead developer for the CodeRush team, has moved on to Microsoft and has been a leading force on the Roslyn team since its inception.

However, in some ways, Roslyn is better than CodeRush’s core engine. One of the things we really like is the snapshot feature, which allows several different plug-ins to safely work asynchronously with read-only images of the code taken at different points in time without blocking the UI thread. And while one of our competitors has openly worried that this will lead to excessive memory consumption, this seems extremely unlikely due to the Visual Studio team’s cleverly efficient design (where snapshots are only a little bigger than the memory required to hold the code changes that have occurred since the snapshot was taken) as well as likely real world scenarios where snapshots are never really needed for a long time, and only exist for as long as they are needed.

The other thing we really like about Roslyn is that Microsoft has finally managed to find performance improvements that beat the same highly-optimized, high speed features we have in CodeRush, such as find all references (which serves as a foundation for many refactorings including Rename). Prior to Roslyn, CodeRush had the fastest .NET find all references (FAR) available, beating Visual Studio’s FAR time as well as all of our competitors year after year. And so we find Microsoft’s performance improvements to be impressive.

Functional and Physical Overlap

Since Visual Studio 2003, any Visual Studio add-in that offered refactoring features also came at a cost, in the form of less-than-ideal performance due to duplication of effort, as well as the additional memory required to hold similar information. Over the years, the CodeRush team made significant advances in the area of both performance and memory optimization. However, we always knew that no matter how hard we tried, there would always be a functionality overlap where CodeRush and Visual Studio were both doing similar work, as well as a physical overlap where CodeRush and Visual Studio were both holding similar structures in memory. And until Roslyn, this overlap was unavoidable.

Integration Challenges

While moving CodeRush to work more closely with Roslyn offers an interesting potential, it is fraught with challenges. For example, Roslyn only supports C# and VB, while CodeRush’s language-independent source code tree supports many more languages. There are changes required throughout the product. In some cases those changes are minor, and in other cases the changes are significant and may even impact third-party plug-ins.

Currently CodeRush plug-ins enjoy the benefit of working with a language-independent source tree. Refactorings don’t need to know if they are working with C#, C++, VB, JavaScript, etc.; they simply work with all languages. So this extensibility model might have to change.

CodeRush also has over 20,000 test cases, and integrating with Roslyn would likely impact those as well.

The Decision

We like what the Visual Studio team has done, and we see the Roslyn technology (and its expected derivatives supporting other languages) to be the foundational future of extensible IDE design. And so the CodeRush team is all-in.

We have already started building a version of CodeRush dedicated to totally exploit everything Roslyn has to offer. CodeRush customers can expect noticeable speed improvements for a number of refactorings and core features, as well as see a dramatic reduction in memory usage (e.g. 200MB-400MB less memory consumed for most medium to large projects),

Although this decision is ambitious, the team is taking steps to work as efficiently as possible. For example, we are prioritizing efforts to ensure the most important and the most sophisticated core features get attention first, and we are looking at ways to ensure that every one of our existing test cases remains untouched.

As we get closer to widespread Roslyn adoption, we’ll keep you updated with our progress. By the way, Microsoft recently open-sourced the Roslyn project. To learn more, click here.

Viewing all 2401 articles
Browse latest View live