Microsoft-ish developer, new app idea: what platforms to target/tools to use?

First, let’s summarize the current trends:

  • mobile (smartphone) usage increases tremendously, desktop usage decreases;
  • users prefer native apps vs. Web.;
  • programmers prefer native development vs. cross-platform development;
  • medium term: HoloLens (3D holograms projected directly on eyes).

Apps

Assuming that you’re a Microsoft technology oriented developer that masters .NET (probably with C#) and JavaScript (probably through TypeScript), I think there are a few (partially divergent) directions to take. I tried to illustrate the options in a small table and hope it would help someone, someday:

Native development (more to learn to target smartphones) Using Xamarin (native apps with C#-based cross-platform dev. tools) Using Cordova tools (WebView-based apps, using JavaScript or TypeScript – not native, but sharing Web code)
Smartphones only
(minimal)
App development 1.0 (native, minimal) App development 2.0 (Xamarin, minimal) App development 3.0 (Cordova, minimal)
Smartphones + HoloLens
(future-oriented)
App development 1.1 (native, future trends).png App development 2.1 (Xamarin, future trends) App development 3.1 (Cordova, future trends)
HoleLens
(future only)
App development 1.1.1 (native, future only) N/A N/A
Smartphones + desktop/Web
(past-oriented)
App development 1.1.2 (native, legacy) App development 2.1.2 (Xamarin, legacy) App development 3.1.2 (Cordova, legacy)
Smartphones + HoloLens + desktop/Web
(extensive)
App development 1.2 (native, future, legacy) App development 2.2 (Xamarin, future, legacy) App development 3.2 (Cordova, future, legacy)
Posted in Development | Tagged , , , , , , , , , , , | 1 Comment

Targeting .NET Framework 4.7 or .NET Core 1.1

A heads up, if I may.

If you plan to develop an app targeting .NET Framework 4.7 or .NET Core 1.1, Microsoft says that you need to:

  • Update Windows 10 to the Creators update, build 15063;
  • Update Visual Studio 2017 to version 15.1.

But they do not tell you that you also need – of course – the .NET Framework 4.7 development tools and/or .NET Core 1.1 development tools, that are both optional features available in the Visual Studio 2017 update dialog, to be able to target these .NET versions from your projects (assemblies).

Note that the check boxes of these optional items may not be pre-selected when you do the Visual Studio update (at least that occurred in my case) and in this case, to resolve the target availability issue, you will need to start the Visual Studio Installer app again, select Modify, then check the features from the right side of the screen, under the .NET desktop development section:

NET47

Posted in .NET | Tagged , , , , , | Leave a comment

Processing Edge favorites

If you are like me and use the default Edge browser in Windows 10 despite that Chrome is much more popular among other users, you’ll also have favorites saved there. However, many times you might have a difficult time synchronizing them to other browsers or devices.

For example, if you want to simply import them in Chrome, that’s doable. But you cannot set Apple iCloud service to automatically synchronize Edge favorites to your iPhone’s Safari: iCloud only supports Chrome, Firefox or Internet Explorer.

As a .NET developer you think you could resolve this with some easy code writing, right? But then you understand that Edge favorites are saved into a special .edb file, which is an ESE database type (aka Blue Jet), and reading that file format is more difficult than you probably expected.

While you can use some nuget packages to actually read from that database using managed extensions for Microsoft’s esent.dll, I just found out that there is an easier way to do this and it should work from other environments too:

  • Get the free ESE database viewer from NirSoft – this doesn’t need installation, it’s just an executable file you can copy in your project;
  • Ensure Edge browser is closed (or, if you do this in a Windows service try the actions below periodically, catching file access exceptions and re-attempt later – Edge holds the database file in exclusive mode when running);
  • Run a command to export the favorites into a Temp.csv file (comma separated values) – such as using Process.Start:
ESEDatabaseView.exe /table "C:\Users\...\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\...\DBStore\spartan.edb" "Favorites" /scomma Temp.csv
  • Read the content of the Temp.csv file (once it’s crated and closed, i.e. the ESEDatabaseView.exe process completed), using a simple stream reader and splitting values on commas, as usual for CSV formatted data;
  • Skip deleted favorites and folder entries by checking IsDeleted and IsFolder fields (note that 255 means true, while probably any other value – I saw 42 in my case – means false);
  • Process the accepted entries as you wish using their Title and URL fields; e.g. save .url files in a folder like C:\Users\…\Favorites\Edge so that Internet Explorer sees them automatically in the Favorites section, and iCloud can synchronize them to your iPhone automatically if configured to synchronize items from Internet Explorer browser.
    • The name or the .url file should be the favorite title (encoded if needed).
    • Since the minimal content of a .url file can simply be a URL value you may skip adding any [InternetShortcut] section and URL= field definition there, and simply include only the actual value, like “https://codesections.wordpress.com” (without quote chars).
    • Note that processing the hierarchy of favorite folders might be more complex, but if your target is just synchronizing the flat list of names and URLs, the above should be enough.

Although this solution seems more simple, I haven’t had the time to implement it yet, so I decided to write this post for you guys to develop it if you need it too. And – if I don’t ask too much – I’d appreciate if you could also send me the GitHub link to it, assuming you want to publish it as open source code when it’s ready. Thank you in advance. 🙂

Posted in .NET, Miscellaneous | Tagged , , , , , , , | Leave a comment

My tech interests

Here below is a mind map diagram presenting the most important tech interests I currently have. They have surely increased much in the last few years, and I’m sure that even more topics are to be added there – either because I simply forgot about them or because they’re going to be much more important in the future.

Technology

It’s such a pleasure to take part in a dynamic world like the IT field of the 21st century! Especially as for me it all started from a single topic in the previous one: Basic programming language (about 25 years ago.) Pascal was the second and that lasted for some years too. Windows development got added way later, attached to Delphi at first!… While .NET was, eventually, one of the first millennial updates on my list.

Update: Here is the way I see the most recent tech history and possibly the times to come:

Tech time tunnel

Posted in Miscellaneous | Tagged , | Leave a comment

Scale box for UWP

In XAML based UWP development you’ll notice that the common WPF feature of LayoutTransform isn’t available. However, sometimes you just want to scale things up or down and it’s difficult to get it done. Viewbox is a nice element but it scales according to the viewport and content size rather than on a specific Scale percent.

However, you can workaround this (and even create a custom Scalebox element if you wish) following this simple pattern (in the example below Scale percent is 140%):

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="*"/>
    <RowDefinition Height="0.4*"/>
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="0.4*"/>
  </Grid.ColumnDefinitions>
  <Grid>
    <Grid.RenderTransform>
      <ScaleTransform ScaleX="1.4" ScaleY="1.4"/>
    </Grid.RenderTransform>
    <!-- Content goes here -->
  </Grid>
</Grid>

As you can see, we use two Grid elements and RenderTransform to ensure layout is prepared correctly from the measuring time even if content is scaled up only at runtime. The green values need to be scale 1, and the blue ones represent the scale percent itself.

Posted in UWP | Tagged , , , | Leave a comment

Do I need a smartphone?

As a developer, I’m in front of a large screen many hours per day. So I wonder, do I really need a smartphone? The answer for me is (surprisingly?) yes, but at first look it’s not a big yes because the time I’m not at my computer and still need to execute computing tasks is very short and such occasions are rare.

Indeed, sometimes it does happen to need computing power and an Internet connection when I’m not at the computer, in order to accomplish important tasks such as to:

  • check my e-mail or synchronized calendar when I’m away (although I try to check mail on the phone only when I expect something);
  • check someone’s exact address once I arrived at their block;
  • check the map when I’m pretty much lost in a (new) place;
  • remove something that I just bought from the shopping list;
  • read something on Kindle app and check news/Facebook or play a game while I wait to enter at the doctor;
  • find the names of the artist and song playing at the radio in my car or at a mall using Shazam;
  • call a cab when I’m away without my car or use Waze to find traffic issues when I’m driving, especially upon longer trips;
  • remove the need of holding the physical loyalty cards for miscellaneous shops and use a specialized app instead.

And the yes increases a little more because a smartphone includes something that might be even more important than the computing services themselves: a camera. Taking good photos without a separate camera and storing them into the cloud automatically are things that can become very important allowing me to:

  • record notes written on a whiteboard during a meeting;
  • “scan” documents;
  • capture the schedule of a business’ working hours (when it’s not standard);
  • and more.

Without the mobile technology I could hardly do any of the items above (without having to carry my notebook with some mobile Internet access device and a separate camera with me everywhere; although myself I would be crazy enough to do it if mobiles weren’t invented; in fact, there was a time when smartphones weren’t invented and you could often see me with the notebook bag almost everywhere, having Internet access available through a USB cable from my CDMA-based non-smart Zapp phone, and with a separate camera hanging over my shoulder, also USB-connectible to the PC.)

In conclusion, as a developer I do need a smartphone, but the yes is not that big at first. Meaning that the phone surely doesn’t have to be an iPhone, and it doesn’t need to run Android either. It can be a Windows Phone (regardless of its minor 0.3% of the global market share): the phone just needs the ability to connect to the Internet, run basic contemporary apps, and have a good camera.

However, a factor that should be taken into consideration for the future is that for new projects most mobile app developers (at least that want to keep output native) will focus more/only to Android and iOS. That means that eventually apps that could turn out to be very important for me as a developer (such as to avoid being left behind competition by not using them), may be not available on Windows, or – worse – not even on the plain Web. Consumer-oriented non-Windows/Web apps already exist, but nothing critical… yet! I’m gonna watch mobile evolution very carefully in the short term, and I will probably need to select between Androids and iPhone eventually. Knowing me, and after testing both, a little, it’s probably going to be an iPhone!

Posted in Miscellaneous | Tagged , , , , | 1 Comment

Microsoft fans and the (golden?) apples

There was a time when I really loved the way that Microsoft’s smart employees were up to centralize and unify everything into an ecosystem run mostly on Windows and Office, with help of the PC rising, regardless the communist-style of this centralization. By then I didn’t know much about Apple’s Macs and their fall, and I didn’t care much either: with Microsoft’s OS, their Office suite, and Visual Basic/C++, later J++ and Visual Studio, all running well on my buggy hardware-based PC I had everything I wanted from a technical perspective.

Later, when Microsoft was left behind by the internet evolution, I didn’t care much either. Simply because in my Easter European country the internet was late as well. Although later it got back on track and speeded up to the top. Eventually, Microsoft got back too, rushing Internet Explorer versions after 6, so we met in the middle and continued our love story.

In the recent years, however, Microsoft had issues again; this time it lost the smartphone battle against Apple (and later Google). Although by now it’s already fighting in the next one – that of the holographic devices – in order to survive these years, they needed to do a switch from selling software infrastructure and products to selling mostly services, especially as the cloud has risen too. Personally, I don’t need to care much about using smartphones as I’m a developer and like larger screens, and I can continue using mostly PCs and Windows software there, without caring much about Android and iOS (excepting the need of developing apps also for those platforms, which is a separate story).

But because Microsoft opened that much, including by embracing JavaScript and supporting developers to build cross platform apps with Cordova Tools or by freeing Xamarin, and also having their server software and apps developed for other OSes too (e.g. SQL Server can now be run on Linux and Visual Studio Code is available for Linux and Mac), I feel that their resources are now used extensively (I almost feel an incontrollable technological expansion) and I expect more bugs and less improvement over time in Microsoft’s software and services. (Still, I hope I’m wrong and that the “opening” enthusiasm is higher than the old centralism-based enthusiasm, allowing them to continue this way indefinitely without breaking good old things too much.)

I need to mention, though, that I do like the concurrent opposite turnaround (or side effect) of recent Microsoft opening: their interest to build and sell full devices now too, not just PC peripherals as before. Specifically, Surface tablets and – more important – notebooks (yes, the Studio workstation, too) are really well designed and attract many people, including old Apple lovers. But I fell some fear here when I compare this to what Apple does: Apple always decided to remain on the same closed track, building everything from hardware and infrastructure to software and services, and it seems to me that this way they can protect their resources and focus better on what they are doing.

Microsoft had some of this too at the beginning when they tried to centralize everything (although only regarding infrastructure, software and services, as for hardware the historical reasons tied them up to needing many resources allocated on driver development and approval), that I loved. And disregarding the new Microsoft’s multi-direction approach, now Microsoft has this full stack with their Surface devices too (even including hardware now, except that personally I would need a notebook with 15″ screen and they don’t have that one – yet – so I go with Dell instead, but I’ll leave this out for this discussion). My love should only increase then, no? At some level it is increasing, but since they’ve opened so much, I opened my eyes more too, and looking around I cannot help wondering whether Apple’s closure wouldn’t be better for the long term (after all they had it from their first Macs and never lost it): wouldn’t it be better in Apple’s (embracing) arms than being hold with a single arm of Microsoft? (And maybe other old Microsoft lovers like me have the same question.) Only time will tell.

(No, I don’t want to compare Microsoft and Apple to Google this time, as Google runs everything pretty open. Indeed, prices are very low for Android based devices because of this, but I personally had some bad experiences in the area, caused exactly by the openness of their platform. And nobody has Chrome OS so I need to skip desktops completely. To me Google remains a good search provider and best revenue-generating Ads service, and although they do have some good cloud products, I cannot bring them into the Microsoft vs. Apple discussion above, sorry.)

Posted in Miscellaneous | Tagged , , , , , , , | 1 Comment