Blogs

News

Favorite Posts

ctodx

Discussions, news and rants from the CTO of Developer Express, Julian M Bucknall
  • DevExpress Universal 13.1: Binding tomorrow to today

    There are some major releases which accrue a certain amount of importance, and, in looking through the What’s New for this first major release of 2013, I can’t help but feel that sense of significance. The reason? There’s so much good stuff here that, if I were to do it complete justice, I’d just be repeating the selfsame What’s New.

    So, let me approach things from a thematic angle, if I may.

    One of the things we’ve noticed over the past year, despite all the news from Microsoft during that time, is that around half of our customers are still writing thick-client apps on Windows, be it with WinForms or WPF. Yes, all the buzz might be about Windows AppStore apps, yet the bread and butter is being earned on desktop Windows. It seems that taking care of these desktop developers, helping them to slowly get their users accustomed to the Modern UI design esthetic and the new data visualizations and navigation metaphors, without abandoning their codebase or experience, might be a good idea.

    We’ve already done some work, certainly, with our 12.x series of releases. Things like the Metropolis themes, the tiles, the concessions to touch, all these have helped. With 13.1 though, we decided to go much further to aid the desktop app developer with the addition of some major new controls.

    • DevExpress WinForms Spreadsheet controlA new spreadsheet control with full support for formulas, cell formatting, import/export to Excel file formats or CSV, and so on. No more shelling out via COM to Excel: you can drop a fully-optimized Microsoft Office-inspired spreadsheet right in your apps. We even provide a Ribbon configuration with all the usual spreadsheet functionality so you can quickly deliver your next stunning application. Since the engine is separate from the UI, you can use it programmatically to open a spreadsheet file (or create a new one), modify it, and save it.
    • A new map control that uses as provider either the Bing map web service (vector, photo tiles, or hybrid) or OpenStreetMap. Like our map controls on other platforms, there’s support for vector drawings on the map (a route, say, or maybe icons for special places). The control also comes with the standard UI elements needed for map manipulation, such as scroll, zoom, coordinate labels, and so on.
    • A PDF viewer control (beta release). At long last you can embed a DevExpress control in your app to display PDF files. Text, images, and vector shapes are supported, together with embedded fonts and font styles. The interface for the PDF Viewer implements zooming, scrolling, and a continuous page layout and provides a ready-to-use Ribbon tab, which makes it extremely easy to incorporate a Ribbon bar in your application.
    • DevExpress WinForms Map ControlA Live Tile Manager control. This new control, more than anything else in the list of new functionality for 13.1, exemplifies the title of this post: it binds the investment and code you have in your WinForms desktop apps now to the Windows 8 Start Screen. You can display a live tile on the Start Screen – updating on a regular basis just like all the other tiles there – driven by a WinForms app. Click on the tile, and the WinForms app comes to the forefront. Since only Modern UI apps can place tiles on the Start Screen, there’s just a little hint of some DevExpress magic going on in the background: the Live Tile Manager. This is a Windows AppStore app that can set up a communications channel to a WinForms desktop app and act as a middleman, displaying a tile, updating it according to commands from the desktop app, and switch to the same app when the tile is touched or a clicked.
    • And so much more: new editor controls (including sparklines), an icon library with an image picker.

    Despite all this work on the WinForms side of things, WPF developers have much to celebrate too.

    • A new Banded Grid View. This is the ability to arrange column headers into bands and to create multi-row record layouts. It’s been a part of our WinForms grid for a long while and now it’s available in WPF and Silverlight.
    • A new Chart Wizard. A simpler and quick-to-invoke chart wizard. No longer do you have to struggle with the Visual Studio Properties window to configure your charts, just you can use this powerful visual tool instead. It can be invoked in your apps too, so your users can more easily configure their charts. (Added to Silverlight as well.)
    • Improvements to the Map control (Silverlight as well) include built-in tooltips, map element selection, data binding, and much more.
    • A new Property Grid Control (or vertical grid), just like the properties window in Visual Studio: edit a set of properties displayed as a vertical list with ease.
    • And many more enhancements and improvements.

    Since we’re talking about XAML controls, at least tangentially, let’s discuss our Windows 8 XAML controls. When we first introduced these, we made them part of DXTREME. After all, they’re for mobile apps, so we reasoned that they should be part of a ‘mobile’ product together with our cross-platform HTML5/JS framework and widgets. Well, nice try, but no cigar: it soon became obvious they just didn’t fit there. So we revamped DXTREME and moved the Windows 8 XAML controls out into their own package. For 13.1, we’ve added a couple of new controls to this collection and made some improvements to the grid.

    • DevExpress Windows 8 XAML Radial menuThe new OneNote-inspired Radial Menu is a radically new way to present a UI that allows the user to make selections or initiate actions: a menu in a circle. Try it, you’ll be amazed at how smooth and easy to use it is.
    • A new Flyout Control for displaying a panel that slides in from the sides of the screen.

    I’ve talked a lot about the desktop and Windows 8 apps up to now, but that doesn’t mean we’ve neglected the web developers among our customers. With ASP.NET and ASP.NET MVC there is a complete set of new enhancements and functionality

    • Endless Paging (also known as continuous scrolling) for touch-centric applications that use the GridView, DataView, NewsControl , and ImageGallery. This is the ability to show the items being displayed as an infinite list, with the control only loading extra items as the user scrolls down. Think of the functionality provided by the Facebook or Twitter apps.
    • A new MVC Image Slider, like the existing ASP.NET one.
    • A new MVC File Manager based on the ASP.NET version.
    • A new MVC Captcha control for those times you need to check that a real human being is entering data into your forms.
    • A new ASP.NET Image Gallery control. 
    • And many more enhancements and improvements. Please see Mehul Harry’s series of blog posts on the new functionality in ASP.NET for 13.1.

    At this point, a small diversion into a new product: the Document Server. This is a non-visual .NET Library, built and optimized for C#, VB.NET and ASP.NET developers alike. It allows developers to fully automate Excel and Word without using Microsoft Office automation. Generate XLS, XLSx, DOC, DOCx, RTF, CSV and Snap Report files using a straightforward API that's easy-to-use and ready for the enterprise. The DevExpress Document Server also includes a zip compression library and a barcode generation library.

    For the Dashboard, we’re adding an OLAP Server Mode for SQL Server, a new Dashboard theme, and myriad printing enhancements.

    Reporting has not been ignored, far from it. Expect to see a Table of Contents report control, a much-anticipated Sparkline control, and there’s a new Report Designer and set of management controls for WinForms. For WPF and Silverlight, we’ve added a new control that provides a ribbon-based report preview. Snap reports have improved too: there’s a new wizard to add a data source; support for nested fields; an API has been published so you can create Snap reports from code; there’s a new ability to edit table cell styles; and we’ve added a new hyperlink data field.

    DevExpress CodeRush implicit local variable supportCodeRush doesn’t get off easy either, with some well-designed visual enhancements and some performance improvements across the board. We’ve much improved CodeRush’s support for XAML code; the Smart Tag menu is now populated asynchronously for extra performance; auto-initialization of variables, fields, or properties has been enhanced; CodeRush can now declare local variables implicitly; and there have been significant improvements to the Debug Visualizer and to linked identifiers.

    All in all, DevExpress Universal 13.1 is a major release in every sense of the word. It’s out now, so download the release, install, and start using these new features. And above all please don’t forget to let us know your feedback: I’m at julianb@devexpress.com, and the management team can be reached at management@devexpress.com.

  • DXperience 13.1 will be .NET 4 or above

    For quite some time now, we’ve had a somewhat weird split in the platforms we support. For WPF and Silverlight, we moved to a common set of underlying libraries way back in version 10.1, two years ago. As part of this restructuring we decided to take advantage of the new capabilities of Visual Studio 2010 and .NET 4. Overall, this change has been positive, and the implementation of our set of Windows 8 XAML controls in 12.2 (which require Visual Studio 2012 and .NET 4.5) was made much easier (and quicker) by this decision.

    Modern Old TypewriterHowever, our WinForms and WebForms controls have not kept up. For these platforms, we are still supporting .NET 3.5 and Visual Studio 2008 or later. This has started to cause some issues with the cross-platform libraries we implement: we’d like to take advantage of newer C# 4 and .NET 4 features for our XAML code (and, indeed, for our WinForms and ASP.NET code), but we’re being held back. One of the biggest features we can’t take advantage of, as an example, is the new dynamic keyword, which is almost de rigueur when writing web code these days.

    The other issue is that, we currently support three IDE versions, with all the required extra testing that entails (not to mention that the UI designer in VS 2010 was a big change in and of itself). We also took a look at the statistics we have about which IDEs you, our customers, are using and I’d have to say the vast majority (95%+) are using VS 2010 or VS2012. It seems in the Visual Studio ecosystem, developers tend to stay up to date. Heck, even I’m using VS2012, uppercase menus or not…

    Consequently, after some debate, we decided to standardize and make .NET 4 (or later) and Visual Studio 2010 (or later) firm requirements for version 13.1 of DXperience.

  • The PropertyCross project

    Over in the UK, Colin Eberhardt and Chris Price have been taking on an arduous task: evaluating the various frameworks and libraries that (ostensibly) help you create mobile applications. Their goal is not necessarily to discuss the Objective-C’s and Javas of this world, but instead to look at those libraries that allow you to create cross-platform apps that also hopefully take on a native look-and-feel for the device they’re run on.  They are initially concentrating on iOS, Android, and Windows Phone 8.

    PropertyCrossTo help them in this exercise, they decided to replicate an app they’d already written. The app was chosen specifically “because it is non-trivial, multi-screen and makes use of a number of device capabilities including page navigation, geolocation, storage and web services.” The app is a search front-end for UK property listings and is called PropertyCross. Not only do they review each library that they use, they are also publishing all of the code they write for this app on GitHub. So, you can check out their methodology and results, and also peruse the source to aid you in your search for a mobile multi-platform framework.

    Colin contacted us a little while back to see if we wanted to participate, and want to we did. We first wrote the app using the original DXTREME, but identified several issues, mostly performance-related, as we did so. This formed a strong  impetus for our plans for the new DXTREME Mobile and for the PhoneJS library it builds upon: improve the performance. Oh, and by the way, while you’re doing that, make it much faster. Consequently we withdrew our initial undertaking as we went back to the drawing board. PropertyCross was an ideal example of the kinds of mobile business apps our customers wanted to write, so optimizing for it helped make PhoneJS and DXTREME Mobile easier to use (and more performant) in those scenarios.

    We submitted our new implementation last week and Colin has just published it on the PropertyCross site. We’re very pleased indeed: check out the screenshots on that page for an example of how PhoneJS solves the native look-and-feel problem, and download the source from GitHub to check out how it’s implemented.

    (A note on the “Known Issues” on the PhoneJS page for PropertyCross: we’re actively attending to those we can address. Unfortunately something like PhoneGap not working fully with Windows Phone 8 is a little out of our hands.)

  • DXTREME Mobile for C# developers–the Design

    I must add a caveat to that title: “Such as it is”.

    (See the Introduction to this series here.)

    In essence, I want to keep the work flow of the Citizenship Test app pretty simple to suit the main devices it’ll run on.

    When you run the app, I envisage a plain home screen: the title, and a couple of options. The first option allows the user to review all hundred questions and their answers. I see this as a straightforward list of Q&A items and the user would flick to scroll the list up and down. An alternative would be to just list the questions in a scrollable list, and then have the user touch a question to navigate to another screen to see the answer. Although uncomplicated, I feel that this could be cumbersome since the user would then have to navigate back to the question list. A user experience that is not overly onerous, but the back-and-forth is still a little inelegant I think.

    The second option from the start or home screen would be the testing option: display a question and accept input from the user. What I’d like is a text box and some natural language processing to analyze the answer and check it against the actual answer. I’m not too sure about that just yet (NLP is not my forte), but we’ll see. Somewhere on the screen will be a button to navigate to the next screen with the next question. Since the actual naturalization test consists of ten questions of which you have to answer at least six correctly, this will also be the format of the testing option. There’ll also be a final screen (not shown) that would grade your answers.

    The back button on this screen would not go back to the previous question, but to the home screen. Pressing it would cancel the current test.

    Naturalization Test AppDesign

    As you can see, the way I’ve designed this app is to break it up into several steps (that is, screens), going from the simple to the more complex. That way, as we build it, you’ll get a flavor of how to develop these kinds of applications with DXTREME Mobile.

    Next time: the Home Screen.

  • DXTREME Mobile for C# developers – Foundations

    We have just published a Release Candidate for DXTREME Mobile 13.1. There have been many changes for this particular release – even better Visual Studio integration, greater performance, better “native” look-and-feel, new Windows Phone 8 support, and so on – and I thought it would be a good idea to introduce how to write multi-device apps for this new version, especially as they’re written with HTML5 markup and JavaScript. I’ll do this introduction and tutorial over several blog posts, which may in turn become an official part of the documentation.

    Lego built into 1, 2, 3First things first, let me lay down some ground rules. I shall assume you are a C# developer (or at least familiar with its syntax and grammar) and are using and are very familiar with Visual Studio 2012. Perhaps you know some HTML5 – or at least are familiar with basic HTML markup – and perhaps you know some JavaScript. That’s great if so, but I won’t assume you know too much in that area.

    What I’ll do in this series of posts is to create a simple app for iPhone 5, iPad 3, and for the Kindle Fire HD tablet, all of which I have at hand and can test on. The app is going to be designed to help me in a momentous event later this year: I’m going to take the USCIS Naturalization Test to become a US Citizen. As part of this overall test, there is a sub-test on US civics, especially history, law, and government. The nice thing about this particular test is that all of the 100 possible questions are published and you have to answer 6 or more correctly of ten random ones that the USCIS Officer will ask you in order to pass. My goal is  100%. What we’ll do with this app is to load all 100 questions into some kind of database, and then ask the questions of the user one at a time, randomly. We’ll also explore how to process the answers: maybe by using multiple choice, or analyzing the reply for keywords, or whatever. I’ll also go through the process of compiling the app with PhoneGap and getting it into the relevant app stores.

    Without further ado, let me provide a quick introduction to some basic JavaScript.

    Introduction to JavaScript

    JavaScript is a simple interpreted language designed explicitly for web pages. Nowadays, scripts are even compiled for even faster execution, but this need not worry you too much: just assume that the interpreter in your browser knows how to parse and execute JavaScript files.

    JavaScript Types

    JavaScript’s simplicity starts off with the type system – yes, no matter what you have heard, JavaScript does have types. Not many, but they’re there. There are six: number, string, boolean, object, null, and undefined. For now, just concentrate on the first four; we’ll introduce the others later on.

    Number: in C# terms, this is the same as double. There is no equivalent to int unfortunately, so beware of issues with rounding errors during calculations. You enter constant values just the way you're used to in C#: 1, 2.3, etc. The typeof operator called on a variable containing a number will return "number".

    String: for all intents and purposes, this is equivalent to C#'s string type, but do note that JavaScript's strings support 16-bit characters only; you cannot access characters on Unicode's higher planes. You enter constant values in the normal manner, however you can use either single or double quotes to do so: 'hello', "world". The typeof operator called on a variable containing a string will return "string".

    Boolean: just like C#'s bool, a type that has just two values: true and false. The typeof operator called on a variable containing a boolean will return "boolean".

    object: anything else, including arrays, dates, functions (yes, functions are objects too) and objects you create yourself. There is a special syntax to defining objects, which we'll get to in a moment.

    Since JavaScript is a C-type language, you should easily understand the declarations of the following variables:

    var e = 2.718281828;             // a number
    console.log(typeof e);           // outputs "number" 
    var name = "John O'Doe";         // a string
    console.log(typeof name);        // outputs "string" 
    var anotherName = 'Jane Doe';    // another string
    console.log(typeof anotherName); // outputs "string" 
    var isFamiliar = true;           // a boolean
    console.log(typeof isFamiliar);  // outputs "boolean" 
    

    One major difference to note: you do not declare anywhere the type of a variable. At the time a variable is used, JavaScript will work out what type the value has. Until then, it doesn't care. This means you can reuse variables as different types (please, don’t do this):

    name = 42;            
    console.log(typeof name); // outputs "number" 

    Objects

    There is no class system in JavaScript. Objects are rather more fluid than C#’s class model allows, and the inheritance scheme JavaScript uses is known as “prototypal inheritance”. Since it is so different from class inheritance, many people will implement a proto-class inheritance system. We’ll see some of this later. For now, just be aware that objects do not have a class definition behind them that describes what they look like.

    An object in JavaScript is a container for named properties and methods. They are most often declared using an abbreviated syntax:

    var ball = {
        color: red,
        bounce: function () {
            // code to make it bounce
        }
    };
    

    That is, ball is an object with two members: a color property with value red, and a method (a function) called bounce. In short, you declare an object with braces. Inside the braces, you can declare a set of comma-separated members of the object (if you don’t, the object is empty), where each member comprises a name followed by its value, separated by a colon.

    The above code is equivalent to:

    var ball = {};
    ball.color = red;
    ball.bounce = function () {
        // code to make it bounce
    };
    

    Notice that you can just add members to an object as we did here, or remove them or replace them. Objects are endlessly flexible in JavaScript.

    Sometimes, objects are newed up, just like in C#. It’s not a constructor as we understand it in C#, just a special function with some built-in members. We’ll come across examples of this later, but for now here’s a simple example:

    var startTime = new Date(); // get an object representing now
    console.log(startTime.toTimeString()); // use built-in method
    

    Functions

    Functions are encapsulations of code. They’re objects and so can be passed around and manipulated in a functional manner, but they can also be called. We’ve seen a couple of them in use so far (console.log() is an example: log() is a function declared as a member of the console object, which is created by the browser under certain development/debugging scenarios).

    Here’s an example that shows how you can create and pass around new functions on the fly:

    var makeBracketedLogger = function (log) {
        return function (value) {
            log('[' + value + ']');
        };
    };
    
    var logAlert = makeBracketedLogger(alert);
    logAlert(true); // displays [true] as an alert
    
    var logConsole = makeBracketedLogger(console.log);
    logConsole(42); // displays [42] on the console
    

    Here we implement a function that creates logging functions. The functions it creates display the value they’re passed in between square brackets. I create two functions: one that uses the alert() function to display the value in an alert dialog box, and the other to display the value to the debugging console. This easily shows that functions can be created at run-time.

    Scope and closures

    This is one of the biggest differences between C# and JavaScript. In JavaScript the scope boundary for local variables is the nearest enclosing function, not just the nearest enclosing braces. Locals declared in an outer function are visible to inner functions within, too. Take a look at makeBracketedLogger() above. The log parameter is visible inside the function being returned as well (which is why the returned function works). However, note something else as well: the returned function forms a closure over the outer function so that it can still “get at” the log parameter, even after the outer function has completed execution. Closures are extremely important in JavaScript, so make sure you refresh your memory on what they are and how they work in C#. It’s the same in JavaScript, just with a simpler syntax.

    Statements, expressions, and so on

    …Are pretty much as they are in C#. There are a few wrinkles that you’ll need to understand, the main one being that the JavaScript interpreter will go to great lengths to coerce one variable to the type of another when you mix them, but we’ll cover those as we get to them.

    There is one operator in JavaScript that is not known in C#, the identity operator, or triple-equals (===). This operator performs a comparison between two values, much like the equality operator (==) does in C#. JavaScript’s equality operator is a coercion operator: if the two sides are not of the same type, JavaScript will go through some gymnastics to coerce one value to the type of the other. Sometimes this can be convenient (for example: 1 == '1' evaluates as true), but sometimes it can seem downright capricious in its results. Best practices say, always use === (or, negated: !==), since the person reading the code after you will not get caught out by some coercion assumption you’ve made.

    Onwards!

    Anyway, that’s enough foundation for now. Let’s jump in next time with some DXTREME Mobile.

    (If you want to explore more JavaScript syntax and grammar, please see my series on JavaScript for C# developers.)

  • DevExpress Roadmap 2013

    Finally the last discussion was debated, the last long email thread was terminated, the last agreement made, and the last document collected. It was then all up to me to collate all those bullet points and write the DevExpress roadmap for 2013.

    Pin in roadmapThis year, perhaps more than the previous ones, there was much uncertainty about what path we should take. Perhaps uncertainty is the wrong word, ambiguity might be a better one. And path implies there’s just one road to take, whereas in reality there were several directions to follow. Despite what you may believe, DevExpress is not a vast enterprise with resources out the wazoo: we do have to pick and choose what we do; and carefully at that.

    The first decision was possibly the easiest. I’ve talked about this at length before, but it bears repeating: the web is this giant juggernaut of a train. You miss it at your peril. It’s not just “web sites” anymore. It’s “single page applications”, it’s “responsiveness”, it’s “mobile” in all its wild wonderful forms, it’s the “cloud”, it’s all of these separately and together. So, first of all we are concentrating on our ASP.NET story, and our HTML5/CSS3/JavaScript story in DXTREME.

    The second was perhaps equally as important and equally as straightforward: improve our “thick client” offerings, especially WinForms, WPF and VCL. Not all of our customers are writing the next killer web app (someone do Google Reader 2.0, please?) but are heads down in implementing awesome Windows applications. The rich data-fed Windows app is not going away, despite the maturity of each particular run-time. Hence we are spending some resources this year on polishing and enhancing these libraries (the new smooth scrolling is awesome, just as one example), and cementing our pole position as provider of Windows app components, no matter which technology you prefer.

    The third decision was to continue to enhance our dashboard, reporting, charting, and data analysis products, at an aggressive pace. We have many innovative ideas for these products, some of which you’ll see this year and some in 2014 or later.

    Anyway, for more details, please peruse the roadmap here. Note that it does not and cannot cover every single suggestion or feature that we’ll be implementing, for then it would be tens of pages long and I’d never have finished it. And as I say every year on one way or another, use it for guidance, but don’t make solid plans based on it.

    It does promise to be a banner year though; let’s see what develops.

  • Seven…

    Cake in form of digit 7So today is special. For a start it’s the Ides of March, which, history has it, was a particularly rough day for Julius Caesar from which he didn’t really recover. But more importantly for me, it’s the seventh anniversary of my starting as CTO at DevExpress. I’d thought I’d take a moment to riff off the number seven.

    First a bit of fun personal math: 7 in binary (base 2) is 111, which taken as a number base 7 is 57, which in turn is two years more than my age. Numerology is not dead!

    Second: DevExpress has UI controls/extensions/widgets for seven different platforms: VCL, WinForms, ASP.NET (MVC), WPF, Silverlight, HTML5/JS, and Windows 8 Modern UI. When I started here, we had but three, which is kind of amazing when you think about it: the rate of change in this industry is scary fast.

    Third: some trivia. 7 is a Mersenne prime; there are seven hills in Rome; there are seven continents; 7 is the most probable score when rolling two dice; there are seven wonders of the ancient world (and, no, I’m not one of them); there are seven musical notes (do, re, mi, fa, so, la, te); seven days in a week; seven colors of the rainbow (whose names I remember using “Richard Of York Going Back Into Venice”, which makes no sense at all); September used to be the seventh month of the year, hence the name; there are seven deadly sins. Finally, if you remember old style calculators, each digit position had seven segments.

    Album cover for Seven Lives Many FacesNow playing:
    Enigma - Seven Lives
    (from Seven Lives Many Faces)


  • The Bestselling Publisher and several Bestselling Product awards from ComponentSource

    ComponentSource Award Number 1 Publisher 2012/13ComponentSource® is the world's largest marketplace and community for reusable software components and development tools. Every year they tot up the sales of each product they sell globally and work out who is the bestselling software publisher and which products sold the most during that year. I’m happy to say that we won a couple of these awards (he says modestly).

    First up is the big one: DevExpress was the top software publisher with ComponentSource in 2012. Not just in the top five, you understand, but Number One.

    Although this is certainly an impressive award, we have further good news: DXperience Enterprise was the top selling product for 2012 at ComponentSource. Another number one! Indeed, since DXperience WinForms is also at number 3, it means that, of the top five bestselling products, two were from DevExpress. Three other DevExpress products were also placed, this time in the Top 25: DXperience ASP.NET at 11, VCL Subscription at 13, and DXperience WPF at 15. These are striking results and just goes to show the high regard our products are held in the marketplace.

    So a big thank you is in order to all our customers who purchased through ComponentSource. You made us number one! Thank you!

  • Is HTML5 the UI platform to rule them all?

    Right before the Christmas season at the end of last year, a little snippet of news flew by which you may have missed: the World Wide Web Consortium (W3C) announced that it had completed (and published) the full definition of both the HTML5 and Canvas 2D specifications. “Wait, what?” I hear you say, “but my phone already supports HTML5!”

    HTML5 logoWell, strictly speaking your phone and my desktop and Joe’s tablet all support their own flavors of HTML5. The latest version of the markup language has been in development over a few years and browser manufacturers have been keeping up to a certain extent. But, before you start complaining that your browser of choice doesn’t support the full HTML5 spec, consider the moving target that the browser manufacturers have had to aspire to. To a certain extent, it makes sense that the browsers would lag behind the spec: after all, you don’t want to have to discard code when the spec changes (I’ll stop for a moment right there as every programmer who’s ever made a living at this job howls with cynical laughter at that scenario).

    But now the spec is finalized, the browsers can catch up and everyone’s happy. Right?

    I wish. The problem is that modern web apps like Single Page Apps (SPA) rely on a lot more than just HTML5. In fact, you might think of HTML5 as an overall moniker for a system that looks more like a triangle, with HTML5 relegated to just a single corner. The other two corners of this UI platform triangle are CSS3 and JavaScript (or some flavor of ECMAScript 5) – and if you think HTML5’s spec took some time and tracking to implement, just wait until you see the morass that is CSS3 support (vendor-specific prefixes anyone?) and ECMAScript 5 support. Nevertheless, the rigid steel triangle that is HTML5/CSS3/JS is well understood by pretty much everyone who uses it to provide app functionality: HTML5 is the content, CSS3 the presentation of that content, and JavaScript the code glue that binds the others to provide interactivity, richness, and a proper user experience.

    And that is another cue for some laughter among my readers: “proper user experience”. The issue here is that no longer do we just look at a website in a 960px-wide window as in days of yore. My desktop is 1920px across, my iPad is 2048px or 1536px depending on whether I hold it portrait or landscape, my Kindle Fire HD is 1280px × 800px, and my iPhone 5 is…whatever it is. With just that little lot on my desk (let alone my Surface RT) how can we talk about “proper user experience”? I must admit to being a little biased perhaps, but I kind of expect my web apps to look like they are native iOS apps on my iOS devices and like native Android apps on my Fire. And it would be great if the website had a “responsive” design as well for my desktop browser. (A responsive design for a web app is a UI that can change its rendering depending on the size of the browser window. For a discussion on why this is becoming more and more important in 2013 and beyond, see this Mashable article.) In other words, a proper user experience no matter which device is being used.

    That of course leads me to our just-released DXTREME product line. Part of the HTML side of the DXTREME subscription is a client-side library that understands devices. It will switch (that’s the JavaScript part) the presentation of the app (that would be the CSS part) according to the device you are running on. The markup of the content (that’s the HTML5 part) does not have to change to support these different devices. Now, agreed, this is all in the early stages – DXTREME does an excellent job for phone-sized devices – but that doesn’t translate brilliantly yet to tablet-sized devices with their extra screen real-estate, so you have to design your tablet interface separately for the best UX. But we have big plans for the next major release to support more devices and to support more widely-varying resolutions. Nevertheless, for creating a multi-platform single-page web app that looks native on whichever devices your users have, DXTREME today is the way to go.

    So, in answer to my somewhat flippant question above: if you view HTML5 as the markup language, then, no, of course not. If however you view it as the overall name for the HTML5/CSS3/JS UX triangle, then it’s close, but gets even closer with DXTREME.

  • Musings on “mobile”

    iPad and BrydgeI look at my desk. There’s my laptop, driving not only its own screen but two external ones. There’s an iPad, third generation, affixed to a third-party keyboard. As I mentioned on my own blog, there’s a Kindle Fire HD propped in the stand on a foldable Bluetooth keyboard. To my left is a Adapter plus iHome dockcheapo docking station slash speaker pair that is charging my iPhone. Behind me on the floor, propped against the bookcase (why do I still have physical books when I have three Kindles?) is my Surface RT that I hardly use. Next to it is my old Kindle Fire, now relegated to my tech junk pile of history along with my previous laptop which I use for my Windows 8 testing. The only reason I can’t chuck my still-perfectly-functional yet-I-no-longer-use-it desktop on the same pile is that it’s the base for my old CD player – yes, I’ve been known to play the odd CD.

    Sure, I’m a geek. I have a gazillion devices. This isn’t about that. It’s more about the variety of devices, the variety of provenances, the variety of OSes.

    A few more data points on my curve before I get to my thesis:

    • My wife’s best friend has just bought (as a Christmas present from Santa) a Nabi tablet for her daughter, a feisty three year old, because she was fed up with the little darling monopolizing her iPad playing with paint apps.
    • Although Amazon don’t release Kindle sales data, all indications seem to point to the Kindle Fire HD being a big seller. Perhaps even better than Google’s Nexus 7? The iPad mini seems to be a bestseller.
    • Project Glass by Google. Yeah, it’s a concept device, but how close is it to release? This year? 2014?
    • I’m not a TV person (I don’t own one) but all I see at the moment is companies jostling with their TV devices (Apple, Google, Microsoft, etc, etc). And why should there be a TV device anyway? Can’t a tablet/laptop do the work?
    • In-car infotainment systems were all the rage at CES, how long before they’re in every car we can buy? General Motors and Ford seem to be leading the pack since they allow the linking of a smartphone to the device (and therefore the downloading of traffic data, say, for the device), but how soon before the car’s system is itself a “phone” and has its own Internet connection? Yeah, we can laugh now about the notion of downloading apps for the car, but it’s going to happen.

    Kindle Fire HD 7 with Stowaway keyboardMy point then is this: in this world of a gazillion different devices with different screen sizes and resolutions and input methods (keyboard, touch, speech), how are you going to target the consumer? By writing iOS apps and assuming that the mobile market is just the iPhone and iPad? Or maybe that Android is the answer? Good luck with that; that’s not a plan of action for understanding the future, it’s painting yourself into a corner.

    My thought here is that it’s way too late to just concentrate on one OS, on one device. We had that possibility in the past but it’s now gone, dumped with my old computing devices on my tech junk pile of history. Our customers are using god-only-knows-what devices to access information about the world, about us. They may be mobile as we currently understand “mobile” but they may be something else. The only way we can easily reach (for some reasonable value of “easy”) our customers in the future is to target the devices they are using, that they are thinking of using, that they will use. And that means HTML5/CSS3/JavaScript. It’s the only pan-device user interface technology we have.

    Not only that – that was the engineering view, if you like – it also means that we have to get better at responsive web design. Our pages of data and information and content have to reflow automatically to suit the device; what looks good on an iPad will look disgustingly awful on those future Google glasses. We have to get better at data visualizations: a small screen needs different visualizations than a large one. Touch requires different scenarios and technologies than speech.

    I feel we’re at the top of a cliff with a hang glider strapped to our back, with a wonderful countryside vista spread out in front of us. There’s a single simple step to make but – oh, the possibilities – how long will we fly, where will we land?

    [A quick note: this is me pondering the future, and does not necessarily jell with DevExpress’ future direction. Or maybe this is more of a curve in 11-dimensional space, and several dimension dot products coincide with DevExpress’ 11-dimensional future plans. Who knows? I’m only the CTO here.]
Next page »
LIVE CHAT

Chat is one of the many ways you can contact members of the DevExpress Team.
We are available Monday-Friday between 7:30am and 4:30pm Pacific Time.

If you need additional product information, write to us at info@devexpress.com or call us at +1 (818) 844-3383

FOLLOW US

DevExpress engineers feature-complete Presentation Controls, IDE Productivity Tools, Business Application Frameworks, and Reporting Systems for Visual Studio, along with high-performance HTML JS Mobile Frameworks for developers targeting iOS, Android and Windows Phone. Whether using WPF, Silverlight, ASP.NET, WinForms, HTML5 or Windows 8, DevExpress tools help you build and deliver your best in the shortest time possible.

Your Privacy - Legal Statements

Copyright © 1998-2013 Developer Express Inc.
ALL RIGHTS RESERVED
All trademarks or registered trademarks
are property of their respective owners