Kde nájdem informáciu o zvyšnej veľkosti predčasnej splátky bez poplatku v internet bankingu mBank

Chcel by som sa s vami podeliť o jednu drobnosť (iste ide len o glitch) v UX IB mBank ktorá sa zhodou okolností vyskytuje na mieste, kde by ste ju najmenej čakali. Hádate správne, na mieste zistenia výšky sumy ktorú ešte môžete splatiť do konca aktuálneho výročia. V mBank totiž podľa aktuálnych pravidiel môžete splatiť 20% istiny ročne.

OK, takže without further ado, hľadajte tu :

v sekcii Detaily o účte musíte kliknúť na UX element ktorým sa zväčša reordrujú items v liste (červený rámček).

Hľadaný údaj nájdete ako posledný v liste.

Enjoy.

How to convince Facebook to display your panorama pictures like 360 ones

Facebook for some time now has the possibility to upload and display your pictures as 360 ones. But you don’t need to have 360 photos from some special HW camera. All you need to do is to make a big enough photo and tell Facebook to display the photo as 360 one.

I am not sure about the minimal size of picture that could be displayed as 360 but all my old panoramas were OK when I tested.

I found not much relevant articles about this problem but here is one from FB itself that will explain much.
https://facebook360.fb.com/360-photos/

Tool you need :

exiftool – https://www.sno.phy.queensu.ca/~phil/exiftool/

How to :

exiftool -Make=”Apple” -Model=”iPhone 6s” your_photo.jpg

This will add EXIF information to the file, claiming it was created by iPhone with model iPhone 6s. Now I haven’t really investigated about models that are fine for FB. I suppose from before mentioned FB page, FB would be also fine with some 360 camera makers EXIFs.
It is really funny that pictures that are OK in all ways are not displayed as 360 just because of this EXIF.
Maybe some day we will get a checkbox to display our pictures as 360 from some size.

Hope this helps somebody :)

Don’t forget to Automatically Authenticate calls when using Fiddler

I tend to forget some simple things I just don’t use that often.

One of these is when working with some ASP.NET apps which are using Windows Authentication with 401 HTTP Challenge (Kerberos) set like this in IIS manager :

asp dot net iis windows auth sample

For bigger HTTP debugging “jobs” I am using Fiddler, as most of us do. So, if you want to forge a new HTTP request in Composer and see something like this (401 in the lines 14-21) :

calls without automatically authenticate

You clearly need to check Automatically Authenticate in Composer Options tab.

So what do we see here. This is a random session on my dev box. My browser undergo 401 challenge in the step 1 and 2. From there, everything had 200 because we are authenticated. This is done by the browser, “automagically”. I drag and dropped POST request on position 12 to Composer and not checked Automatically Authenticate (I forgot to) and I got all those nice 401s from 14 to 21.

Please note, that even if you drag and drop some request from browser that got 200 from IIS,  the Fiddler will not get 200 also. Fiddler is for IIS just another client, just replaying the very same request will not make it authenticated. This is by design, not a bug.

If you allow automatically authenticate, you will see that you will get 401 at first, but Fiddler will do it’s job and issue another request, which will get 200 this time. Something like this :

calls with automatically authenticate

All requests from that point will get 200.

Hope this helps guys.

Using Azure App Service Web Apps continuous deployment with GitHub organizations

I am using happily deployments from GitHub to Azure functions, but I wanted to use a repo I have in another Organizations collection.
I came across this article : https://azure.microsoft.com/en-us/blog/using-app-service-web-apps-continuous-deployment-with-github-organizations/ which is currently just partially true, because GitHub UI changed a bit.

In Installed GitHub apps where the Azure Management Portal app should be I see 0 apps :
installed github apps

but Authorized OAuth Apps is now the tab where you should go.

authorized oauth apps

and clicking on the name of app (Azure Management Portal) you will now see a list of your organizations that could be granted to be listed in your account (here I already granted access for one ogranization):
github granted permissions

Now in http://portal.azure.com you could see something like this :
azure github with organizations

Second level sub domain not supported in Azure

I just ported my blog to Microsoft Azure and I would like to say I am sorry to all linkers from my previous sub domain blog.rostacik.net,  but I can’t redirect any of the old links to my current links.

The reason is simple – Azure still does not support second level sub domains in 2017.

More on the topic here : https://feedback.azure.com/forums/169385-websites/suggestions/7026845-support-double-wildcard-custom-domains

Shame on you Microsoft….

Where to find audio settings for Skype built into Windows 10

I will just leave this small “note to self” here also for others to ease their pain.

Find out where to change audio settings in built Skype in Windows 10 is not as easy as it looks like.

So here are the steps :

  • Click on your icon in the top left corner (alternatively you can use CTRL+I) – skype_w10_icon
  • Modal window will appear where you can click Settings and you are good – skype_w10_settings

Plan B is to change setting during call :

skype_w10_during_call_setting

Hope this helps.

My Karma tests are failing in IE on my Jenkins and I don’t know why

We had a small problem I would like to share today. We have Windows 2012 R2 with Jenkis as one of means to build our stuff (I know, W2012 man… others in our company use different CI systems and there was also some other reason for W2012 R2, but if I had the choice I would definitely pick some newer OS).

Some days ago, our IE tests started to fail. The reason from Jenkis : Timeout. Wait, what? We didn’t changed anything in the build and test process!!! Indeed there were code changes but no one touched the build pipeline.

After short investigation, the reason to this was quite simple (as always) :
It seems like there was some update that changed IE or touched it’s settings and it wanted me to confirm security setting when I ran tests from my account.

Something like this :
ie 11 security settings

OK, let’s suppose that IE timeouted for the same reason on Jenkins job. But Jenkins runs as service, as special privileged Local System Account. How can I run IE like this account?

This link helped : https://marckean.com/2010/12/17/run-internet-explorer-as-the-local-system-account/

You need to :

  1. download PsExec from this URL : https://technet.microsoft.com/en-us/sysinternals/bb897553
  2. execute this command : psexec -s -i “%programfiles%\Internet Explorer\iexplore.exe”
  3. IE will open
  4. make IE happy
  5. close it
  6. never touch it again

The tests should be good again :)
Thanks to the author of aforementioned blog for this time saver.

How to run StyleCop as opt-in feature with msbuild from command line

The tool :

So everyone knows wonderful tool from Microsoft, named StyleCop. StyleCop is a tool that runs against C# code (not against IL assemblies – already build code) and based on rules saved either per machine, or per project (we will show us how to save them per project) gives you feedback , if you violated some of these rules. StyleCop started on codeplex (MS take on similar portal like github) and currently moved to GitHub – https://github.com/StyleCop. If you see closely, on GitHub we have two projects :

We will go down the free path and take a look at first option. There are two plugins I will speak about today :

(please note that in StyleCop repo there is a note about recommendation to use Roslyn based StyleCop from https://github.com/DotNetAnalyzers/StyleCopAnalyzers repo)

So, you can add NuGet StyleCop.MSBuild package and now running msbuild from command line will trigger analysis. Which is what we want on CI server, but not for builds from Visual Studio. You can try to run build from VS and see what happens.

How to turn off StyleCop.MSBuild for VS builds :

After some search on the interwebz I found out, that there is a property StyleCopEnabled in StyleCop.MSBuild.Targets that is set to true if nothing is specified, which we need to set to false as default. So you need to edit your .csproj (or any other .proj file) and insert

<StyleCopEnabled>false</StyleCopEnabled>

in some PropertyGroup.

This will enable you to do following thing :

  • run msbuild to trigger just plain old build
  • run msbuild  /p:StyleCopEnabled=true to pass parameter to msbuild that will do the analysis after the build.

If you guess that the first will be “used” when building from VS and second to get analysis on your CI server, you are right :)

And if you questioned yourself, “why not to pass  /p:StyleCopEnabled=false” from VS build, then AFAIK from VS also in 2017 we cant just pass parameters to msbuild. Shame, I know.

How to handle async functions inside constructors in TypeScript

In this post we will discuss some options you have with calling async functions in constructor of your TypeScript classes.

So, first of all – why would you do this? Well, maybe you need some data from a web API to fill the object with data, or you need some input from user, or some API in code from a colleague is async. Reasons may vary, but the problem is still the same :
in TypeScript, you can’t have await statement in constructor, because constructor returns instance of object, not Promise<yourObjectType>. (All of this indeed is tied to current version of TypeScript 2.2. maybe in future with native async/await keywords in JS, things will change).

So, possible solutions depend on what happens in your async functions and if you need results from this call / calls at the time you return the object.

Solutions :

1. Try to avoid async stuff in constructor. As said earlier, constructor is a function, that should initiate the object in some way and return it immediately, not return a promise that has to be awaited. That is considered a bad practice and TypeScript doesn’t allow this. More on this problem here

http://stackoverflow.com/questions/11856778/asynchronous-constructor

http://stackoverflow.com/questions/24398699/is-it-bad-practice-to-have-a-constructor-function-return-a-promise

http://stackoverflow.com/questions/36363278/does-async-await-will-allow-us-to-be-used-on-constructors

So in some sense, need for async stuff in your constructor might be considered code smell, you are doing too much in constructor. Refactor your code.

2. If you want your async code to stay in constructor for some reason, do you need results from async calls? If not and you want to call them and let them just execute, you might consider calling async functions without await. In this way you will unfortunately be unable to receive (await) the result from these calls (values passed back via resolve).
Please note, that this might result in some non deterministic issues because of how JS handles async code and I really don’t recommend this. Also another downside is, that if you would wrap everything inside constructor with try, promises that would be rejected (analogy with throwing exception in async sense will be not caught but become unhandled exceptions).

Your constructor might then look like this :

class SomeClass1 {
  constructor() {
    getConfirmAsync("1 - 1");
    getConfirmAsync("1 - 2");
    getConfirmAsync("1 - 3");
  }
}

Sample with try/catch block might look like this :

class SomeClass2 {
  constructor() {
   try {
     delayAsync(3000);
     delayAsync(2000);
     delayAsync(1000);
   } catch (e) {
     console.log(e);
   }
  }
}

No awaits means that code will continue to run and your constructor will finish and hand over new instance of your class sooner than code triggered from constructor will finish its execution. Scary, right? Don’t do it!!!!

Another take on this same approach is to leave an async self executing function in constructor like this :

class SomeClass3 {
  constructor() {
    console.log("SomeClass3 - entry");
      (async () => {
        try {
          await delayAsync(3000);
          await delayAsync(1000);
          await delayAsync(2000);
        } catch (e) {
          console.log(`catch triggered with exception ${e}`);
        }
      })();
      console.log("SomeClass3 - exit");
  }
}

Again, object would return from constructor but it would still lack calls to all async functions but this time, with proper async function, await and try/catch will work. So if for some reason first function would throw, all the others will not be hit (you can try to change the first call from 3000 to 2999 and see the results). Again, this is not recommended!

3. Simple “factory” function :

This is a way you might potentially want to go because it’s the safest one. All calls will be awaited and instance of you class will be in the state it should be.
All logic from constructor would have to be removed and stored in function that will have the logic of preparing object to the right shape. But, it is OK to separate the logic of creation from class to different function/files that knows what to do to make the object “right”?
Also you might want for safety reasons to “hide” somehow the class itself to prevent from instantiation without the factory function.
This could be done by exporting (from module) only interface of the object and “factory” function and not the class itself. Downside is, that all functions that are called in “factory” function need to be also public because “factory” function is not inside the class itself, but it is a separate function.

//exporting interface so we can work with the object outside
export interface ISomeClass {
	stringPublic: string;
	numberPublic: number;
}
 
//not exported = not visible
class SomeClass implements ISomeClass {
	public stringPublic: string;
	public numberPublic: number;
 
	private somePrivateFn() {
		console.log("this is private fn");
	}
}
 
export async function createSomeClassAsync(): Promise<SomeClass> {
	let res = new SomeClass();
 
	await delayAsync(1000);
	await getConfirmAsync("1");
	await delayAsync(3000);
	await getConfirmAsync("2");
	await delayAsync(2000);
	res.numberPublic = 1;
	res.stringPublic = "aa";
	// res.somePrivateFn(); since we are not inside function this would fail
 
	return res;
}

This is TS that has export and import statements, but in my examples on GitHub I have this implemented without export and import. I can make a sample for you that is using modules (like the one above) but I decides to cut complexity for my readers and not use any bundling tool like webpack or browserify (I recommend webpack over browserify but that is just a matter of taste).
5. You want to hook a browser event inside the constructor , like some ready event or some other that will trigger some async functions once it happened.

Your constructor might look like this :

function ready(fn) {
    if (document.readyState !== "loading") {
        fn();
    } else {
        document.addEventListener("DOMContentLoaded", fn);
    }
}

class SomeClass {
    constructor() {
        console.log("SomeClass5 - entry");
        ready(async () => {
            try {
                await delayAsync(3000);
                await delayAsync(1000);
                await delayAsync(2000);
            } catch (e) {
                console.log(`catch triggered with exception ${e}`);
            }
        });
        console.log("SomeClass5 - exit");
    }
}

I am using a helper function from http://youmightnotneedjquery.com/ to avoid adding jQ to the project, but you get the point.

If my samples doesn’t make sense for you, please to to my GitHub repo, you can find all the code I made as examples can be found there : https://github.com/rostacik/asyncTsCtorSolutions .

If  you have TypeScript installed as global npm package, just type

tsc

in the root. If you dont have TypeScript installed, you just need to do to install npm packages :

npm install

and run TypeScript compiler to build all .ts files :

 "node_modules/.bin/tsc.cmd"

Feel free to ask or discuss in the comments :)

Why folders keep reappearing in my Visual Studio 2015 (WebForms) project?

tl;dr

If you have in your project files you moved to different location or removed but your .csproj still points to lets say : removedFolder/removedSubfolder/removedFile.ts then it might happen VS will recreate folders where you point (in this case  removedFolder/removedSubfolder).
What triggers this I wasn’t able to isolate and verify reliably (VS builds? open solution? some timer?).

My VS 2015 version to compare with yours :

Microsoft Visual Studio Enterprise 2015
Version 14.0.25431.01 Update 3
Microsoft .NET Framework
Version 4.6.01586

I have quite some plugins installed, so maybe some plugin is causing this. I can dump list of all my plugins, if needed. Just mail me.

my setup and how I found out

This happened to me on project  I work on and was quite difficult one to troubleshoot. Project is a bigger WebForms solution with some TypeScript files (among other stuff). We reordered some folders and forgot to save changes to .csproj. Since files we moved are TypeScript files and switched from built in TypeScript tooling build to npm builds, no build time error occurred. Folders kept reappearing and it was difficult to find some pattern what caused it. npm TypeScript builds? Running tape + karma tests? Some other tools? SVN even? No clue. But after I excluded missing files, folders didn’t appeared anymore. So I made a test solution like this,

VS with missing files

and boom, folders re appeared :)

Hope this helps.