My experience with Microsoft Store

Hello, again!

As a hobbyist software developer, I want my applications to be easy to find on the web and easy to download by potential users. When I began developing my first application, KeyPress OSD, I was struck by what hurdles one can face. One of the biggest deterrents would probably be, in my case, malware and virus warnings.

Since Windows 8, Microsoft integrated its own antivirus application in the operating system and made it aggressive. It proactively tries to detect potentially harmful applications. In the past, users were allowed to easily download any application they found on the internet and just run or install it. Now, because of the security measures employed by Microsoft in Windows, it has become very hard to execute any random application you may download. Windows discourages users to run the downloaded app or can even prevent inexperienced users to run it at all.

Now, as a new software developer, I was very unhappy with the aforementioned situation. My applications were labeled and still are, as malware. It feels to me like small developers are shunned or outcasted by Microsoft in the name of security. How to solve this issue? As far as I know, there are two options: sign the binary files using purchased VeriSign or DigiCert certificates, or publish the applications on the Microsoft Store, introduced in Windows 8.

Because I am in a collaboration with Tablet Pro, I had the option to publish my applications on Microsoft Store. Thank you for this, Justice!

My experience with the Microsoft Windows Store is overall positive. It is pretty good, but this post would not be written if everything was positive ;). Humans like to point out the negatives, right?

Microsoft provides users, such as me, with a dashboard where one can manage the submitted applications and their store-front properties. When an application is submitted to be published on Windows Store, it undergoes several stages to be certified and published. Primarily, there are two stages: an automated one and a human-centric one (a person from Microsoft tests the app).

The automated certification process does not return detailed error logs.

I once submitted a package with a malformed DLL, but I was not aware of this. The error I received on the Windows Store dashboard was just: «bad EXE format», but it did not point on what file this error occurred. I e-mailed Microsoft Support numerous times, weeks have passed by, and no one was able to tell me exactly why my package was rejected. It amazed me they were unable to give me an answer. They kept on bouncing the responsibility between different teams.

One day I decided to remove from the .appx package one DLL at a time, and resubmit it to the store, until it no longer fails. I discovered that msvcr100.dll was malformed. I do not know how it got to be malformed. This happened in the context of a major new version of my app. I was packaging it with a new DLL that I wrote and compiled myself. I initially believed the culprit was my new DLL. However, it was not. I had to do stupid trial and error to get to successfully publish the new Church Bells Tower version.

Human error reports lack details or are misleading.

Recently, I submitted Quick Picto Viewer to the Windows Store and it got rejected. The dashboard error report said: «App Quality - Misleading Content; Information within the product or metadata does not accurately represent the product. Products need to have unique functionality and value in the Store». I e-mailed Microsoft Support to ask what they mean by that. They told me, and provided me with a screen shot, that the About panel does not say it is published by Tablet Pro. I found their reply utterly silly. My other apps do not explicitly mention Tablet Pro at About.

To be honest, before submitting it, I did not test QPV on my system in the «Windows Store» mode, because I was lazy. However, I decided to do so, and I discovered it was crashing the very moment one tried to open an image. One could argue the app quality is crap, indeed, but why did they not report this? They could have said in the initial report on the dashboard, and I would not have had to e-mail them about it. A simple message would have sufficed: «App crashes on image open». The reply I got from Microsoft Support was a confirmation that they treat their customers as fragile snowflakes. You cannot hurt your customers by telling them the truth, but it is totally fine to mislead them with euphemisms and irrelevant things.

Microsoft Store dashboard has bugs.

If one tries to reorganize resources, such as screen shots, it sometimes loses the images or messes up the image descriptions. Or, if you try to upload a new package, without deleting the older one first, you get unexpected results: the old package is not replaced or, you get no package at all, after Apply. I am using Firefox and maybe they do not care about making it work well on this browser.

On the positive side of things, when I developed an application for Tablet Pro, Microsoft Support was more than great. One of the guys from there, in his spare time, helped us develop a DLL that we needed.

In conclusion, I am happy at least I have a safe way to distribute my applications to potential users. No virus or malware warnings, and as a big plus, app updates are automatically handled by Windows Store. Overall, I cannot complain much. For now.

Best regards, Marius.

Blending modes math formulas

Hello, again!

I recently overhauled the blending modes maths in Quick Picto Viewer. I decided to write an article here on the maths behind the common blending modes, because I was not able to easily find in one place the mathematical formulas. However, I will not be describing how they visually impact the image or their use cases.

Blending modes describe mathematically how the colours of two images are mixed when composited on top of each other. The mathematical formula is applied on each image colour channel: R, G and B, for each overlapping pixel. The formulas provided here work on normalized RGB values. To normalize the values, one has to divide by 255 each R, G and B value, given they are in the range of 0 to 255. Therefore, floating point precision is necessary for the computations.

In the following table, the base layer is B and the image on top is A, and Z is the result of the math formula which has to be applied on each colour channel. The commutative blending modes are marked with * (asterisk). For these, the layers order does not matter.

Fomula Blend mode Category
z = min(A, B) *Darken Darker
z = A * B *Multiply Darker
z = A + B - 1 *Linear burn Darker
z = 1 - ((1 - B) / A) Color burn Darker
z = max(A, B) *Lighten Brighter
z = 1 - ( (1 - B) * (1 - A) ) *Screen Brighter
z = A + B *Linear dodge (linear add) Brighter
z = B / (1 - A) Color dodge Brighter
if (A < 0.5)
 z = 2 * A * B
else
 z = 1 - (2 * (1 - A) * (1 - B) )
Hard light Contrast
if (A < 0.5)
 z = (1 - 2*A) * (B^2) + 2 * B * A
else
 z = 2 * B * (1 - A) + sqrt(B) * (2 * A - 1)
Soft light Contrast
if (B < 0.5)
 z = 2 * A * B
else
 z = 1 - (2 * (1 - A) * (1 - B) )
Overlay Contrast
if (A <= (1 - B))
 z = 0
else
 z = 1
*Hard mix Contrast
z = B + (2 * A) - 1 Linear light Contrast
if (A < 0.5)
 z = 1 - (1 - B) / (2 * A)
else
 z = B / (2 * (1 - A))
Vivid light Contrast
z = (B + A)/2 *Average Contrast
z = A + B - 2 * (A * B) *Exclusion Inversion
z = abs(B - A) *Difference Inversion
z = B / A Divide Cancelation
z = B - A Substract Cancelation
z = gray(A) + B - gray(B) Luminosity Component
z = gray(B) - gray(A) + B + A/5 Ghosting Component contrast

The gray() function takes the non-normalized RGB values and returns a normalized value. It is defined as:

g = (r*0.299 + g*0.587 + b*0.114)/255.0

I used the NTSC colour weights to convert the colour of the pixel to gray, because I get very similar results with other applications. Of course, one can try more accurate conversion algorithms.

The Ghosting blending mode is a personal concoction :-). The end results one can get with it are quite interesting.

Till next time... best regards, Marius.

(Almost) summer 2018 updates

Hello!

Since my last post here I made two new images, both on the subject of love and romance. One is a sketch and the other is a painting.

The Scream of Love

Love Prison

KeyPress OSD

KeyPress OSD video presentation (on Youtube)

Since Septmber 2017, I began working on something new. I started to code and develop an application. It is something I never did before.

I was trying to find an application to help me use it easier, but I was not able to find the right app that suited my needs. I also discovered Autohotkey, a scripting language. Its ease of learning allowed me to develop the application I wanted, suited for my needs and beyond. I loved developing it, because I learned a lot of things. I am still actively working on it and making improvements and fixes.

Learn more about KeyPress OSD

To keep the development going, please donate using PayPal. Follow the development on GitHub or see the version history.

Through the development of this project, Drugwash (from the AHK forums) substantially contributed with code and feedback. Many thanks to you!

Other than this. All is good. Got no precise plans for what I want to do next.

Adios, amigos!

Newer entries

Older entries

Please subscribe Subscribe to the RSS feed

Current page: 1 of 1.