Category Archives: development

Microsoft and developer trust

David Sobeski, former Microsoft General Manager, has written about Trust, Users and The Developer Division. It is interesting to me since I recall all these changes: the evolution of the Microsoft C++ from Programmer’s Workbench (which few used) to Visual C++ and then Visual Studio; the original Visual Basic, the transition from VBX to OCX; DDE, OLE and OLE Automation and COM automation, the arrival of C# and .NET and the misery of Visual Basic developers who had to learn .NET; how DCOM (Distributed COM) was the future, especially in conjunction with Transaction Server, and then how it wasn’t, and XML web services were the future, with SOAP and WSDL, and then it wasn’t because REST is better; the transition from ASP to ASP.NET (totally different) to ASP.NET MVC (largely different); and of course the database APIs, the canonical case for Microsoft’s API mind-changing, as DAO gave way to ADO gave way to ADO.NET, not to mention various other SQL Server client libraries, and then there was LINQ and LINQ to SQL and Entity Framework and it is hard to keep up (speaking personally I have not yet really got to grips with Entity Framework).

There is much truth in what Sobeski says; yet his perspective is, I feel, overly negative. At least some of Microsoft’s changes were worthwhile. In particular, the transition to .NET and the introduction of C# was successful and it proved an strong and popular platform for business applications – more so than would have been the case if Microsoft had stuck with C++ and COM-based Visual Basic forever; and yes, the flight to Java would have been more pronounced if C# had not appeared.

Should Silverlight XAML have been “fully compatible” with WPF XAML as Sobeski suggests? I liked Silverlight; to me it was what client-side .NET should have been from the beginning, lightweight and web-friendly, and given its different aims it could never be fully compatible with WPF.

The ever-expanding Windows API is overly bloated and inconsistent for sure; but the code in Petzold’s Programming Windows mostly still works today, at least if you use the 32-bit edition (1998). In fact, Sobeski writes of the virtues of Win16 transitioning to Win32s and Win32 and Win64 in a mostly smooth fashion, without making it clear that this happened alongside the introduction of .NET and other changes.

Even Windows Forms, introduced with .NET in 2002, still works today. ADO.NET too has been resilient, and if you prefer not to use LINQ or Entity Framework then concepts you learned in 2002 will still work now, in Visual Studio 2013.

Why does this talk of developer trust then resonate so strongly? It is all to do with the Windows 8 story, not so much the move to Metro itself, but the way Microsoft communicated (or did not communicate) with developers and the abandonment of frameworks that were well liked. It was 2010 that was the darkest year for Microsoft platform developers. Up until Build in October, rumours swirled. Microsoft was abandoning .NET. Everything was going to be HTML or C++. Nobody would confirm or deny anything. Then at Build 2010 it became obvious that Silverlight was all-but dead, in terms of future development; the same Silverlight that a year earlier had been touted as the future both of the .NET client and the rich web platform, in Microsoft’s vision.

Developers had to wait a further year to discover what Microsoft meant by promoting HTML so strongly. It was all part of the strategy for the tablet-friendly Windows Runtime (WinRT), in which HTML, .NET and C++ are intended to be on an equal footing. Having said which, not all parts of the .NET Framework are supported, mainly because of the sandboxed WinRT environment.

If you are a skilled Windows Forms developer, or a skilled Win32 developer, developing for WinRT is a hard transition, even though you can use a familiar language. If you are a skilled Silverlight or WPF developer, you have knowledge of XAML which is a substantial advantage, but there is still a great deal to learn and a great deal which no longer applies. Microsoft did this to shake off its legacy and avoid compromising the new platform; but the end result is not sufficiently wonderful to justify this rationale. In particular, there could have been more effort to incorporate Silverlight and the work done for Windows Phone (also a sandboxed and touch-based platform).

That said, I disagree with Sobeski’s conclusion:

At the end of the day, developers walked away from Microsoft not because they missed a platform paradigm shift. They left because they lost all trust. You wanted to go somewhere to have your code investments work and continue to work.

Developers go where the users are. The main reason developers have not rushed to support WinRT with new applications is that they can make more money elsewhere, coding for iOS and Android and desktop Windows. All Windows 8 machines other than those running Windows RT (a tiny minority) still run desktop applications, whereas no version of Windows below 8 runs WinRT apps, making it an easy decision.

Changing this state of affairs, if there is any hope of change, requires Microsoft to raise the profile of WinRT among users more than among developers, by selling more Windows tablets and by making the WinRT platform more compelling for users of those tablets. Winning developer support is a factor of course, but I do not take the view that lack of developer support is the chief reason for lacklustre Windows 8 adoption. There are many more obvious reasons, to do with the high demands a dual-personality operating system makes on users.

That said, the events of 2010 and 2011 hurt the Microsoft developer community deeply. The puzzle now is how the company can heal those wounds but without yet another strategy shift that will further undermine confidence in its platform.

Visual Studio 2013 update 1: avoid the RC if you use C++

Microsoft has released Visual Studio 2013 Update 1 RC which I installed for a look. It has a “go-live” license, which means you can use it in production, and when the final version comes out you will be able to install it over the top, so it sounded safe enough.

Update 1 is only a bug-fix release – the fixes are listed in the link above. “When you edit multiple resources in Resource Editor, Visual Studio crashes randomly,” is one, so if that affects you, you might want to install it.

Unfortunately the RC introduces a new problem. The syntax highlighting in the C++ editor is broken. Here is a snippet of code before the update:

image

and after

image

Microsoft is aware of the issue and apparently the RTM update will be OK.

While investigating this, I discovered another issue. Visual Studio 2013 was crashing whenever I tried to open a C++ project. If I tried to debug Visual Studio with a new instance, the new instance would crash too. I uninstalled Update 1 RC but that did not fix it. This post on StackOverflow does not describe exactly the same issue, but did lead me to suspect Xamarin, an add-on for Android and iOS development with C#. I uninstalled Xamarin and the problem disappeared; Visual Studio seems to start up more quickly too. A shame as I like the product.

Update: the final Update 1 is now available. What’s in Update 1: http://support.microsoft.com/kb/2911573

Download: http://go.microsoft.com/fwlink/?LinkId=301714

Do you miss manuals? Why and why not …

It’s that time of year. I keep more than I should, but now and again you have to clear things out. I don’t promise to dispose of all of these though: they remind me of another era, when software came in huge boxes packed with books.

image

If you purchased Microsoft Office, for example, you would get a guide describing every feature, as well as an Excel formula reference, a Visual Basic reference and so on.

If you purchased a development tool, you would get a complete language reference plus a guide to the IDE plus a developer guide.

The books that got most use in my experience were the references – convenient to work on a screen while using a book as reference, especially in the days before multiple displays – and the developer guides. You did not have to go the way the programmer’s guide suggested, but it did give you a clue about how the creators of the language or tool intended that it should be used.

Quality varied of course, but in Microsoft’s case the standard was high. When something new arrived, you could learn a lot by sitting down with just the books for a few hours.

What happened to manuals? Cost was one consideration, especially as many were never opened, being duplicates of what you had already. Obsolescence went deeper than that though. Manuals were always out of date before they printed, especially when update distribution was a download rather than a disk sent out by support (which means from the nineties onward).

Even without the internet, manuals would have died. Online help is cheaper to distribute and integrates with software – press F1 for help.

Then add the power of the web. Today’s references are online and have user comments. Further, the web is a vast knowledgebase which, while not wholly reliable, is far more productive than leafing through pages and pages trying to find the solution to some problem that might not even be referenced. In many cases you could post a question to StackOverflow and get an answer more quickly.

Software has bloated too. I am not sure what a full printed documentation set for Visual Studio 2013 would look like, but it would likely fill a bookshelf if not a room.

When software companies stopped sending out printed manuals, the same books were produced as online (that is, local, but disk-based) help. Then as the web took over more help went to the web, and F1 would either open the web browser or use a help viewer that displayed web content. There are still options for downloading help locally in many development tools.

Nothing to miss then? I am not so sure. It strikes me that the requirement to deliver comprehensive documentation was a valuable discipline. I wonder how many bugs were fixed because the documentation team raised a query about something that did not seem to work right or make sense?

Another inevitable problem is that since documentation no longer has to be in the box (or in the download), some software is delivered without adequate documentation. You are meant to figure it out via videos, blog posts, online forums, searches and questions.

A good documentation team takes the side of the user – whether end user, developer, or system administrator, depending on context. They write the guide by trying things out, and goad the internal developers to supply the information on what does and does not work as necessary. That can still happen today; but without the constraint of having to get books prepared it often does not.

Microsoft Project Siena: another go at the spirit of Visual Basic

Remember Visual Basic? By which I mean, not the current language that is a case-insensitive alternative to C# that does much the same thing, but the original rapid app development tool that democratised Windows development back in 1991. At the time, Windows development was a sought-after skill but rather difficult. VB meant anyone could create an application; pros could build excellent ones, amateurs something ugly and unmaintainable, but nevertheless something that worked. The transition to .NET brought many benefits, but also more complexity. The latest evolution of the Windows client, the Windows Runtime, is also challenging to get right (I am currently writing a simple C# game on the platform).

Microsoft has been looking for a new “VB” for years. 2007: Popfly (now abandoned). 2011: Lightswitch. Now we have Project Siena.

image

Siena is an app for building apps. An app is a Siena document with a .siena extension. Here is what Microsoft’s Bryan Group says:

Microsoft Project Siena (code name) is the beta release of a new technology for business experts, business analysts, consultants, and other app imagineers. Now, without any programming, you can create powerful apps for the device-first and cloud-connected world, with the potential to transform today’s business processes.

Building Siena apps is as easy as editing a document. Place some visuals on a canvas. Hook them up to your data. Customize how your app looks and works. Then, if you need special logic and intelligence, write Excel-like expressions. You can use your app immediately, or share it with colleagues or the world.

This sounds great to me. I installed it and set about building an app. I decided to create the same app I have used to try out dozens of programming tools over the years: a to-do list with the ability to add and remove tasks

image

Building the user interface went OK, but how do I add and remove items from the list? I have got as far as figuring out that I need to type the right magic into the OnSelect property of a button:

image

I will let you know when I have worked out what to do next. I will observe that the environment is geared towards data binding, rather than directly updating the user interface, and remote data, such as binding to tables in Azure Mobile Services, a REST API, an RSS feed or a SharePoint list. However you can also bind to an Excel spreadsheet for local data.

Unfortunately there is no “Run” button. You can preview your Siena app by pressing F5 or tapping the Run button in the top app bar.

To deploy your Siena app, you hit Publish:

image 

This creates a package of files, including InstallApp.exe. Siena generates HTML and JavaScript so you can learn a lot about the environment by poking around in the generated files.

image

Run InstallApp.exe and the app installs into your local PC. Mine runs fine, it just does not work yet.

Siena, as is usual for this type of release, suffers from lack of documentation. There is a function reference and a few sketchy help topics. There are also some sample apps. Here is what the Personnel Manager has in the OnSelect of its Add button; perhaps this is a clue:

UpdateIf(Assoc,ID = ThisItem!ID,{AssignedTo:SelectedDepartment, Time:Now()}); RemoveIf(SelectedAssociates, ID = ThisItem!ID)

While it is great to have a genuinely easy visual interface builder, the development features of Visual Studio are greatly missed; the code editor as far as I can tell is limited to a single line in a text input field, though you do get a squiggly underline if you do it wrong, and a bit of code completion.

How is the average “business expert, business analyst, consultant, and other app imagineer” going to get on with Project Siena? That is the question; and in the current preview I’d guess they will be flummoxed and go straight back to Excel or Access, though I would love to be proved wrong.

It looks like a lot of work has gone into this though, and no doubt better documentation and enhanced features are on the way.

Microsoft cloud account problems

I am working extensively with Visual Studio 2013, Office 365 and Windows Azure, researching cloud development on Microsoft’s platform. It is in general a reasonable experience, but the way Microsoft manages its cloud accounts is a constant annoyance and sometimes a source of bugs.

The problem is that you cannot manage with just one Microsoft cloud account. I have an MSDN subscription which is a Microsoft account, and an Office 365 subscription for which I log in with an Organizational account, for example. Microsoft accounts are for accounts with Microsoft itself, while Organizational accounts are controlled by my business. The distinction makes some sense, but Internet Explorer does not cope all that well when you are using both, which for development seems unavoidable.

Right now, for example, I have encountered a bug. I want to log in to Office 365, so I browse to http://portal.microsoftonline.com. However, this is redirecting automatically to login.live.com (it should not do this), which is a Microsoft account. So I get this screen:

image

This is for a Microsoft account, which will not work with Office 365. If I now present Organizational account credentials, it says the account is not recognized. If I present valid Microsoft account credentials, I get an error. “Sorry, that didn’t work”.

image

Agreed – but if I now click Sign out, I bounce back to the very same screen. In other words, I cannot sign out.

I have also seen the scenario where you cannot sign out of Office 365. You choose Sign out, Internet Explorer thinks for a moment, then logs you back in automatically. This may be a consequence of checking the mysterious “Keep me signed in” option when logging into Office 365. This should only keep you signed in until you specifically log out, but it can fail in both directions, asking you to sign in again later, or failing to sign you out. “Keep me signed in” is actually required for some features to work properly, such as Open in Explorer (or WebDav) in SharePoint online.

The inability to sign out is a security issue, since you may need to leave your machine, think you have signed out, and find someone else can access your account; though I suppose you can lock your Windows account to overcome this.

It can also be a practical problem. As a developer, you might want to log in with an Office 365 administrator account to configure a new app, and then with a non-administrator account to test. You need to be able to switch accounts for this purpose. It might be better to use a virtual machine for one of the two accounts.

I am not sure what the fix is, though it usually starts working again eventually. As ever, rebooting Windows may well help. Microsoft has a problems when signing out article which hints at some of these problems; it suggests that you to a couple of special logout urls to log out from an organizational account and logout from a Microsoft account but this does not always work. It also suggests clearing all cookies, which is a nuisance because then have to log back in to all your internet accounts, but even this can fail in my experience. Using another browser is a partial workaround. I do not know if you can get this problem in other browsers.

Visual Studio can also get confused. Imagine you are developing an Office 365 application hosted on Azure. You might have a Microsoft account for Azure along with the Organizational account for Office 365. You proceed through a publish wizard which needs both sets of credentials, and you are likely to get an error in my experience.

I can understand that this stuff is complex to get right, but from the user’s perspective logging in and logging out is basic functionality and something Microsoft should get right.rrrrrrrrr

Making sense of Salesforce 1 (it’s all about mobile)

At its Dreamforce conference in San Francisco, Salesforce has been hyping up its newly announced Salesforce 1. The keynote left us in do doubt: it is fantastic, it does mobile, it does cloud, it does “internet of things”.

image

Co-founder Parker Harris describes Salesforce 1 at Dreamforce

But what is Salesforce 1? For those of us who like fluff-free facts, it has been difficult to discern. The APIs that make up the Salesforce 1 platform seemed on the face of it to be the same ones Salesforce has always had; yet the company says it has multiplied the number of APIs by 10 to create Salesforce 1 (a figure I still find hard to understand).

It is beginning to make sense to me. Salesforce 1 is a brand, a platform and an app.

As a brand, Salesforce 1 encompasses all the APIs that form the Salesforce platform. The best place to understand the current state of Salesforce 1 is here, where you can see links to all the APIs, including Force.com, Heroku, ExactTarget, Radian6 (social media listening), Pardot (sales automation), Desk.com (service cloud) and GoInstant (build real-time multi-user apps). Those individual APIs still exist in their own right, but Salesforce 1 is a new brand that encompasses all of them.

There is also a Salesforce 1 app for iOS and Android. This is mainly an HTML5 app, which makes it odd that it is iOS and Android only. As I understand it, you can also use a mobile browser and get a similar experience, so it might not be too bad for Windows Phone users after all.

The Salesforce 1 app is actually an evolution of the Chatter mobile app. As I understand it, it is built with the Aura framework, for creating a responsive user interface, with strong support for touch control. The Chatter app was renamed Salesforce 1 at the start of Dreamforce.

The Salesforce 1 app is built around a feed, and Salesforce describes it as a feed-first approach. Chatter has support for Publisher Actions, which now in Salesforce 1 have a more prominent role, making the feed capable of initiating tasks and being a mobile-friendly centre of operations. Some vendors I have spoken to, such as FinancialForce (wholly owned by Salesforce), see this feed-first approach as being the core of what Salesforce 1 is about. 

When Salesforce talks about creating Salesforce 1 apps, that might refer to either of two things.

One is to create custom apps for your Salesforce users, which you can do without needing much code in some cases, which will be viewed through the Salesforce 1 app.

The other is to use the Mobile SDK for iOS or Android to create a native app. This does not have to be an HTML5 app, but could be if you want the quickest route to something that works.

According to CEO Marc Benioff, speaking to the press, much of the effort behind Salesforce 1 was in making the Salesforce browser UI properly mobile-friendly. He said that this includes mobile client libraries as well as the server APIs. Salesforce has an rapid visual builder for browser apps running on its platform, called VisualForce, and apparently getting these apps working nicely on mobile took huge effort.

Benioff gave the impression that VisualForce now works perfectly on mobile, but the booklet given to developers expresses reservations:

Only VisualForce pages enabled for Salesforce Mobile Apps and attached to a tab can be added to the Salesforce 1 navigation menu. Note that you may have to optimize these pages to work and/or display correctly on a mobile device.

Nevertheless, you can see the intent here, that anything running on Salesforce will work well on a mobile device. Benioff says that he only takes a smartphone with him when travelling, no laptop or even tablet, and he expects to be able to do all his work through it.

You could therefore call Salesforce 1 the optimisation of the Salesforce platform for mobile, subject to the iOS/Android limitation.

According to Salesforce then, the new mobile-enabled platform is more productive than other app-building tools. The idea is that many corporate apps can be implemented to run in the existing Salesforce 1 app, which perhaps more correctly should be called a client, while apps that need to be deployed more broadly, such as to consumers, can be built using the Mobile SDK and deployed to the App Store or Google Play.

Developers of course are used to these kinds of claims and will be sceptical. Still, if you have adopted Salesforce to the extent that all your users are on the system, then it might make sense to build apps with Salesforce 1 and have a lot done for you, including user management and authentication.

There is talk at Dreamforce of the “app gap”, the fact that typical enterprises currently have most of their apps designed for the desktop, but are planning for most of their apps to be mobile. That gap is an opportunity for Salesforce 1.

Against that, note that apps built with Salesforce 1 are not portable to other platform, and there are the usual questions about the extent to which businesses are willing to entrust their business to a third-party cloud platform, and if so, which cloud platform is the best choice.

Is Salesforce 1 the same old stuff repackaged, or something new? It is a bit of each.

As an aside, the focus here on iOS and Android will not be helpful to Microsoft/Nokia trying to sell Windows Phone in the enterprise. You can also understand why Microsoft is partnering with Xamarin to enable its .NET, C# libraries to work on iOS/Android. If enterprises are going mobile and largely not using Windows Phone to do so, Microsoft has no choice but to give full support to those rival mobile platforms.

What does Xamarin’s success say about open source versus proprietary? Miguel de Icaza says he has never been happier

image

Yesterday Xamarin, which offers tools for targeting iOS, Android and Mac with C#, announced a partnership with Microsoft, an announcement which I wrote up on The Register. It drew a few comments, several complaining about the cost:

So it cost more then Visual Studio Pro.

And that is for 1 target platform?

or

Not so useful for little indie developers at those prices.

or

From open source to $999 per developer per year. Monetising Mono seems to have worked, so perhaps PCL being open sourced won’t be such a bargain either.

If you check Xamarin’s pricing you will see that the tools are not cheap for casual users; of course, if you are selling thousands of apps or developing corporate apps at normal rates the tools soon pay for themselves.

Xamarin is doing well as far as I am aware; CEO Nat Friedman told me of rapid growth in the number of customers and I have seen for myself the high interest in the tools at events like Microsoft BUILD earlier this year in San Francisco.

This gives me pause for reflection. What does the success of Xamarin, and the relative lack of success of Mono (the open source C# compiler and .NET Framework on which Xamarin is based) say about how well the open source business model works in the real world?

I was reminded of a conversation I had with Miguel de Icaza, creator of Mono and co-founder of Xamarin, Friedman back in February of this year, when Xamarin 2.0 was launched. I asked de Icaza if the new company publishes the source code for all its products?

“No. Our company does proprietary tools for iOS and Android apps. The entire iOS and Android support is proprietary as well as our commercial Mac support. All those three pieces are proprietary while the IDE and the Mono runtime are open source. Whether the code is open source or not depends on whether it is part of core Mono or core MonoDevelop. Otherwise it tends to end up as proprietary.”

Friedman added: “Mono has a thriving open source community around it, and Xamarin has a thriving community of developers who are building commercial mobile apps. We have 12,000 customers, many of them have never heard of Mono. They came to us because they had a problem to solve, they were C# developers and they wanted to get an iOS or Android app built. We solved that problem and that was worth money to them. The reason we have a business is that Microsoft developers do pay for tools, unlike Web developers for example. It’s been a great market for us. It allows us to invest.”

I asked de Icaza if he gets any grief from the open source community for having proprietary code in his company.

“Actually no. We started doing the proprietary bit at Novell. In fact we’ve been doing proprietary for a long time, even before we were acquired by Novell, at Ximian. We didn’t get a lot of grief from people. I can tell you though that when I was working in the Linux world, they were very stressful days for me, because people constantly complain about a “secret conspiracy” and that thing just went out of control. There are some advocates in the Linux world that don’t like anything that has the label Microsoft on.

“Ever since we did Xamarin which meant we focused on Mac and Windows, all that stress is gone, I don’t think I have ever been happier. In the past I was enduring this constant barrage of senseless attacks, and now I never hear about this.

“One thing that happened in the Linux world is that I was very proud of the four or five big apps that were built with Mono. F-spot that we built, Banshee, and a couple of others. Now with Xamarin I can’t keep track of them any more because they are measured in the thousands. There are thousands of very large apps, over a millions lines of code, that people send us. It’s a very different world, it’s just so much larger than all the work we did in Linux days back then.”

Visual Studio 2013 is released. What’s new?

Microsoft released Visual Studio 2013 yesterday:

VS 2013 can be installed side by side with previous versions of Visual Studio or, if you have a VS 2013 pre-release, it can be installed straight over  top of the pre-release.

I installed over the top of the pre-release and I’m happy to say that this worked without incident. This is how it should be.

image

Oddly, the launch of Visual Studio 2013 is not until November 13th, proving that in Microsoft’s world products can “launch” before, at or after general release.

So what’s new in Visual Studio 2013? Tracking Visual Studio is difficult, because many important features show up as updates and add-ons. After all, at heart Visual Studio is just a shell or platform in which development sit. The Visual Studio LightSwitch HTML client, for example, which made LightSwitch into a strong tool for rapid application development of mobile web apps, appeared as part of Visual Studio 2012 Update 2. Now in Visual Studio 2013 we have LightSwitch support for Cloud Business Apps, though the new project type is shown under Office/SharePoint rather than under LightSwitch:

image

A Cloud Business App is an add-on for SharePoint typically running on Office 365. In the new model SharePoint apps do not really run on SharePoint, but are web apps that integrate with SharePoint. This is great in an Office 365 context, since you can write a web app that is accessible through the Office 365 site and which is aware of the logged-on user; in other words, it uses Azure Active Directory automatically. There’s more on the subject here.

What else is new? Here are some highlights:

  • Better ISO C/C++ compliance in Visual C++
  • Upgraded F# with language tweaks and improved performance
  • .NET Framework 4.5.1 with minor enhancements
  • Support for new Windows 8.1 controls and APIs in Windows Store apps – these are extensive.
  • “Just my code” debugging for C++ and JavaScript, and Edit and Continue for 64-bit .NET apps
  • Graphics diagnostics for apps running remotely
  • Sign into Visual Studio with a Microsoft account. Microsoft pulls developers further into its cloud platform.
  • Windows Azure Mobile Services – build a back end for an app running on Windows, Windows Phone, iOS, Android or web

Does that amount to much? Compared to the changes between Visual Studio 2010 and 2012, no. That is a good thing, since what we have is a refinement of what was already a capable tool, rather than something which gives developers a headache learning new ways to work.

ComponentOne’s TouchToolkit for Windows Forms: another approach to the Windows tablet problem

Software component vendor ComponentOne has released Studio Enterprise 2013 v2.5, the latest in its suite of components, with support for Windows 8.1 and Visual Studio 2013.

The piece that caught my eye is the TouchToolkit for Windows Forms.

image

Here’s the problem. The Windows desktop is poor with touch control, which is why Microsoft created Windows 8 with its alternate, touch-friendly Windows Runtime platform. However users are resistant to the changed user interface, and it does not help with existing desktop apps.

Developers are also faced with a question of simple mathematics. Develop a Windows 8 Store app, get a market of x. Develop a Windows desktop app, get a market of many times x, since Windows 8 can run desktop apps, but Windows 7 cannot run Store apps.

Embarcadero approached this problem with a framework called Metropolis, for Delphi and RAD Studio. It builds apps that mimic the Windows Runtime look and feel, but which are actually desktop apps. Of course they do not run on Windows RT, the ARM version. It is a confusing solution in my opinion, leading users into what Martin Fowler calls the Uncanny Valley, where stuff works almost but not quite how you expect.

I prefer the thinking behind the TouchToolkit. Take your existing Windows Forms apps, or write a new one, using these controls to make them more touch-friendly. They will never be as well suited to touch control as a Store app, but they might be good enough, and of course will run on Windows 7 and earlier versions.

The controls include a magnifier, support for zoom gestures, and a touch event provider that adds gesture support to any control.

Windows Forms, we all know, is not as good as WPF if you want an application that scales nicely and supports modern design. On the other hand, Windows Forms is pragmatic and easy to use framework that remains popular for line of business apps.

Embarcadero RAD Studio XE5 (Delphi) for Android now available

Today Embarcadero released RAD Studio XE5 which lets you build apps for Windows, Mac, iOS and Android. You can also buy Delphi XE5 separately if you prefer.

Embarcadero’s release cycle is relatively rapid. It was only six months ago that RAD Studio XE4 with iOS support appeared.

The big deal in this release is Android support. If you use the FireMonkey framework, you can build apps for all supported platforms.

There is also a new REST client library and some other enhancements – see here for a list of what’s new.

Embarcadero’s approach to Android development is distinctive. In keeping with Delphi’s tradition of native code compilation, Android apps are compiled using the NDK (Native Development Kit). Embarcadero’s developer evangelist John Thomas told me that this delivers excellent performance. I can believe it, though note what Google says:

Before downloading the NDK, you should understand that the NDK will not benefit most apps. As a developer, you need to balance its benefits against its drawbacks. Notably, using native code on Android generally does not result in a noticable performance improvement, but it always increases your app complexity. In general, you should only use the NDK if it is essential to your app—never because you simply prefer to program in C/C++.

Delphi developers are largely shielded from the complexity of the NDK, since you code using the high level abstraction provided by the runtime library (RTL) and the FireMonkey framework. If that is all you need I should think everything will be fine. If you have a Java library you need to call from your Delphi Android application, you need to use JNI (Java Native Interface) which is not so much fun.

Another point to note is that FireMonkey emulates most visual controls like buttons and lists, by drawing them itself. Users might not notice, if they look and behave exactly like the native controls, but this is hard to do perfectly. Embarcadero’s approach is native in respect of the code it generates, but not in respect of the controls it uses.

I installed RAD Studio XE5 on a Windows 8 machine and set about building an Android app. I already had the Android SDK installed so I asked the RAD Studio installer to skip the SDK but to install the NDK. As it turned out, I am not sure whether it did or did not (I could not find it quickly), but it was easier to download the NDK manually.

I have previously tried Delphi for iOS, for which the usual approach is to run Delphi (or RAD Studio) in a Windows emulator on a Mac, since the Delphi IDE is Windows only. This approach is not so good for Android development because its hard to attach Android devices to an emulator for debugging. Therefore, a real Windows PC is a better platform for Android development. If you want to target iOS as well, you can still do so, by using the remote agent running on a Mac.

Setting up for Android development is a little harder than setting up iOS development. The Android device I used for my test is a Sony Xperia T, and I installed the Sony PC Companion to be sure of having the correct USB drivers for debugging. With Java, the SDK, the NDK, RAD Studio itself, and getting the device connected, that is a fair number of moving parts.

It worked though. I created an Android app, connected my Xperia, and it showed up as a target in Delphi (it is also called the LT30p).

image

I threw a label, a listbox and a button onto my app’s main screen.

image

As it turned out, I should have taken a little more trouble. Here is my app running on the phone:

image

Something has gone wrong with the list, but it looks easy to fix.

According to Embarcadero, a recent survey of over 1300 Windows developers showed that 85% get requests for mobile apps. But what mobile platform is most requested? Android is apparently at the top of the list:

  • 83% Android
  • 67% iOS
  • 33% Windows Phone
  • 17% Windows RT
  • 14% Blackberry

Is that really Windows RT (ARM) or could it include WinRT (Windows 8 Store app) I wonder? Neither are supported by Delphi yet; but at least with Android it now supports the most highly requested platform.

Cross-platform mobile development is critical today, and the new capabilities in Delphi and RAD Studio will be welcome. Is it the best approach? The trade-off is this. On the plus side, you get a cross-platform GUI framework that lets you share the maximum amount of code across all the targets you support. On the minus side, that might not be a good idea; see this post for some thoughts on that. You also get a native executable that should perform well, certainly better than an HTML/JavaScript approach, though I’m not convinced that using the NDK on Android is ideal.

How big is your Delphi Android app? Using the Hello World example above, this is what I got in debug configuration:

image

24.52MB storage. I changed to release configuration and got this:

image

That saved nearly 3MB, to 21.62MB.

Here is the RAM usage:

image

I would be interested in hearing from developers using Delphi or C++ Builder for Android development. How is the quality of this first release? Is the fact that you are not developing in Java a problem in practice?