|
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
It seems that project managers like to think that they know best, and screw the experts. I remember a senior manager telling the head of the Human Factors group on the Comanche helicopter that a double press world work, which meant that did not need a pressure sensitive screen. Of course what he did not seem to take into account was that the helicopter would be shaking and maneuvering, so the crew member would have to keep his eyes on the screen for both touches, instead of being able to take his eyes off once he had identified the control with his touch. Look at the crap Microsoft has given us like the ribbon and metro.
|
|
|
|
|
With regard to Metro, I agree that it's mostly a load of crap. However, after almost a decade of daily use, starting when I transitioned from Office 2002 (Office XP) to Office 2010, I've grown accustomed to the ribbon, and I have an idea about why they adopted it, and are extending it into other parts of Windows, etc. Somewhat to their credit, they seem to have learned from some of their mistakes, and are grudgingly adding support for the old, trustworthy Windows widgets to the Metro (UWP) kit.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
Their implementation in Office basically sucked for year since it did not allow you to change it, and it hide functionality. All they had to do was keep the menu, possibly using a scheme like used in several programs where you just had to hit the alt key, and give users the option of showing the menu all the time. They wanted to force people to use the Ribbon so they gave no option. Instead should have provided it as the standard option and allowed users to decide what they wanted instead of dictating. I too have gotten use to the Ribbon, but I am not sure it is that much better than toolbars. That the menu and toolbars have their place is shown in even Microsoft applications still using these older concepts, and you see menus all the time in Web apps. Nobody seems to have bothered with the Ribbon concept in web apps, which to me shows it was not all that great a concept.
|
|
|
|
|
You aren't likely to see it in Web apps because it significantly increases the download bandwidth required to support the page, since those graphics are much larger than any text menu. Even using something as efficient as SVG requires more bytes to transmit than the text, most of which must be transmitted anyway, to convey the URL behind each button. CDNs can mitigate the cost somewhat, but it requires a good bit of extra infrastructure to use them under HTPPS.
Another reason you are unlikely to see ribbons in Web applications is that they consume far more screen real estate, which is contrary to Responsive design principles. In that regard, Google is pushing developers very strongly in that direction, and with good reason. Who knows, maybe we'll eventually get back to the simple predominantly text pages that dominated the early WWW.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
The screen real estate is an issue too, especially on smaller displays. It was a gimmick that was put out before it was ready, and totally destroying the old interface was another stupid Microsoft move since it just made it difficult on people. In the meantime things that they could have fixed that would have truly improved the product are still not made. You can see things in Microsoft products that are basically over 20 years old.
|
|
|
|
|
Yes; did you miss my mention of screen real estate in the 2nd paragraph?
Microsoft is a Big Company, and it suffers from most of the problems common to Big Companies. One of the most pernicious of those is group hubris. That's how you get things like pandering to new users, even at the expense of throwing loyal customers that paid your way under the bus.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
So far many of the products are not worth upgrading. Using office from 2 decades ago is not much different except the stupid ribbon made it impossible to get to features, a big down vote, and used a lot more real estate. Not sure I really thought that Windows 7 had to be replaced by windows 10
|
|
|
|
|
It didn't, apart from keeping the revenue stream going.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
I've found that the best color scheme is subjective at best.
I recall one custom software project where I did everything the client asked for and he said, I don't know it just doesn't look right to me.
He was an immigranr running his own business. I went to the library and looked up the country he was from and adjusted the color scheme to match the colors on their flag. He loved it and immediately went to get everyone around the office so he could braag on his new software and he wrote a check for me immediately, and the bank recognized and paid the check, too.
CQ de W5ALT
Walt Fair, Jr., P. E.
Comport Computing
Specializing in Technical Engineering Software
|
|
|
|
|
|
This is quite old. JS was brought in as a first-class language with Windows 8 (WinRT apps) already. Microsoft just continued it with UWP.
UWP does not need to implement the browser control - it is directly using Chakra + Trident.
This was one of the reasons why WinJS was formed (GitHub - winjs/winjs: A UI toolkit for modern browsers) in the first place.
|
|
|
|
|
Interesting. Yes I remember that now -- the old WinRT which lived for about 3 seconds.
Good info on the Chakra + Trident engine. thanks
|
|
|
|
|
As Florian explained, this is, indeed, old news.
However, it did deserved to end-up in that forum one day.... And now you have done it!
|
|
|
|
|
|
MS should have just focused on one single language which is C#, than spread all the development efforts over other language/platform like C++/CX and Javascript.
C++/CX syntax is definitely not as inituitively as C# API. Take Array class for example,
byte[] arr = new byte[5];
arr[0] = 12;
byte n = arr[0];
Array<unsigned char>^ arr = ref new Array<unsigned char>(5);
arr->set(0, 12); unsigned char n = arr->get(0);
C++/CX needlessly expose many implementation details out while C# encapsulates those details. For example, C# string is converted to UWP Platform String automatically when calling UWP API, while C++/CX developer has to do this explicit step ourselves. Despite out for 5 years, C++/CX does not have async feature. So when C++/CX dev calls async UWP function, he has to manually spurn a worker thread to call it synchronously. Instead of introducing this half-baked language, efforts could have been better spent on one main language.
|
|
|
|
|
Cake Processor wrote: he has to manually spurn a worker thread
It's always good to spurn[^] things!
(I think you meant "spawn".)
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Haha, you are right!
|
|
|
|
|
|
Let me illustrate with the below code. mSource used to be local variable but it is disposed before it can be used in the 4th lambda. So I make this temporary variable as a class member to work around that problem.
void ClampImageApp::MainPage::btnOpenImage_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
FileOpenPicker^ fileOpenPicker = ref new FileOpenPicker();
fileOpenPicker->SuggestedStartLocation = PickerLocationId::PicturesLibrary;
fileOpenPicker->FileTypeFilter->Append(L".jpg");
fileOpenPicker->ViewMode = PickerViewMode::Thumbnail;
mSource = ref new SoftwareBitmapSource();
concurrency::create_task(fileOpenPicker->PickSingleFileAsync())
.then([&](StorageFile^ file)->IAsyncOperation<IRandomAccessStream^>^
{
if (file)
{
return file->OpenAsync(FileAccessMode::Read);
}
else
{
throw task_canceled();
}
}).then([&](IRandomAccessStream^ stream)->IAsyncOperation<BitmapDecoder^>^
{
return BitmapDecoder::CreateAsync(stream);
}).then([&](BitmapDecoder^ decoder)->IAsyncOperation<SoftwareBitmap^>^
{
return decoder->GetSoftwareBitmapAsync();
}).then([&](SoftwareBitmap^ sw_bmp)->IAsyncAction^
{
if (sw_bmp->BitmapPixelFormat != BitmapPixelFormat::Bgra8 ||
sw_bmp->BitmapAlphaMode == BitmapAlphaMode::Straight)
{
sw_bmp = SoftwareBitmap::Convert(sw_bmp, BitmapPixelFormat::Bgra8, BitmapAlphaMode::Premultiplied);
}
return mSource->SetBitmapAsync(sw_bmp);
}).then([&]()->void {
this->imgPhoto->Source = mSource;
});
}
This is the C# code to use composite value
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.ApplicationDataCompositeValue composite = new Windows.Storage.ApplicationDataCompositeValue();
composite["intVal"] = 1212;
composite["strVal"] = "string";
localSettings.Values["RawCompositeSetting"] = composite;
Windows.Storage.ApplicationDataCompositeValue composite2 =
(Windows.Storage.ApplicationDataCompositeValue)localSettings.Values["RawCompositeSetting"];
And compared to C++/CX equivalent code
Windows::Storage::ApplicationDataContainer^ localSettings =
Windows::Storage::ApplicationData::Current->LocalSettings;
ApplicationDataCompositeValue^ composite = ref new ApplicationDataCompositeValue();
composite->Insert("intVal", dynamic_cast<PropertyValue^>(PropertyValue::CreateInt32(1212)));
composite->Insert("strVal", dynamic_cast<PropertyValue^>(PropertyValue::CreateString("string")));
auto values = localSettings->Values;
values->Insert("RawCompositeSetting", composite);
ApplicationDataCompositeValue^ composite2 = safe_cast<ApplicationDataCompositeValue^>(localSettings->Values->Lookup("RawCompositeSetting"));
UWP is a native platform where native C++/CX is orders of magnitude slower than managed C#. Not sure how that is possible. Microsoft just developed a new C++ language to replace C++/CX, called C++/winrt which has async/await and much better performance and full C++ standard compliant. But it is not ready yet as 2 months ago, I found VS cannot build a newly generated C++/winrt project without errors and it does not support win2D.
|
|
|
|
|
|
Interesting but I didn't notice that they even mention building desktop apps in that course.
I just took my web app and converted it directly to UWP by bringing in the HTML,CSS , Bootstrap etc. and it ran perfectly as a desktop app even though it uses localstorage and other web-centric tech.
It's quite amazing and quite smooth.
But there is a bug in MS project template for UWP Desktop via JS. It doesn't set the document URL properly and then it doesn't want to allow your JS to run. It should be an extremely easy fix for them but they haven't done so yet in the preview 2017 version.
|
|
|
|
|
It's not the same thing, but MS also develops and supports React Native for Windows, which also lets you write UWP apps using JavaScript or TypeScript.
As a bonus, it also includes a WPF back-end, which would potentially allow you to publish both UWP and WPF apps from a single codebase. I think the performance of RN would likely be better than the HTML/CSS/JS UWP app, since RN is using native views for rendering instead of HTML.
Heck, without too much work you could also take your UWP/WPF app and run it on MacOS, Linux, Android, and iOS using the versions of React Native for those platforms. You'd probably need a bit of platform specific code here and there, but the majority of your code would be portable.
|
|
|
|
|
Very interesting points, I will definitely keep in mind.
The biggest one is that I am able to convert a pure HTML5 / JavaScript app directly to UWP.
Just so shocked that HTML Canvas and localStorage works seamlessly.
|
|
|
|
|
What's this article doing in the forum?
Wout
|
|
|
|