FetchRemote function to work with git in Powershell

I have a useful method to create a remote git alias, if not exists,  and fetch data. I used it in Powershell scripts to operate with git remote branches:

function FetchRemote( $remoteAlias, $remoteRepository, $remoteBranch)
$aliasFound= & git remote | out-string -stream | select-string $remoteAlias
git remote add -f -t $remoteBranch –no-tags $remoteAlias $remoteRepository
git fetch $remoteAlias

IdentityServer OpenID Connect Flows: Relationship between Response Types and Grant Types

Openid Connect determine a few flows ( e.g. see scottbrady91 Flow Comparison  and which-openid-connect flow-is-the-right-one )

 In IdentityServer Client description you specify grant type (i.e. flow)( e.g. AllowedGrantTypes = GrantTypes.HybridAndClientCredentials )

You also specify one or more response types in OpenIdConnectOptions.ResponseType (e.g. ResponseType = “code id_token token”)

If you mismatch them, you will get error like.

[Error] Invalid grant type for client: implicit \”ResponseType\”: \”id_token token\”

The relationship is not obvious, it’s partially discussed in http://stackoverflow.com/questions/29275477/openidconnect-response-type-confusion.

To understand the possible relationships between Response Types and Grant Types see IdentityServer4Constants.cs


            { OidcConstants.ResponseTypes.Code, GrantType.AuthorizationCode },

            { OidcConstants.ResponseTypes.Token, GrantType.Implicit },

            { OidcConstants.ResponseTypes.IdToken, GrantType.Implicit },

            { OidcConstants.ResponseTypes.IdTokenToken, GrantType.Implicit },

            { OidcConstants.ResponseTypes.CodeIdToken, GrantType.Hybrid },

            { OidcConstants.ResponseTypes.CodeToken, GrantType.Hybrid },

            { OidcConstants.ResponseTypes.CodeIdTokenToken, GrantType.Hybrid }

#hybrid-flow, #idsrv, #openid-connect

Suggestions to improve Pocket

I am using Pocket (previously named RIL -Read It Later) and sometimes wish to suggest some improvements for them. Unfortunately they don’t want to have a forum to have such suggestions public( They had it before, but closed it- probably because they are too slow with implementing requested features).

Anyway I will post my emails and feature requests (submit here) to Pocket to increase visibility of my suggestions.

Create User Voice forum

“We monitor Feature Request submissions regularly, so you can trust that yours will be reviewed by our Product Team. ”

To trust that it’s reviewed, user should see, what he/she and other users submitted in the past, have ability to vote and comment on existing suggestings, and see will the feature be implemented and when.

Pocket archive option – keep offline version.

In iPad Pocket when I click tick for article, it moves to Archive, and local copy is not available any more.Sometimes, I’ve read the article and want to put it to archive, but wish to keep local copy for the reference.

It will be good for archive button to have an option – keep offline version.

The option will be in particular useful in case if I clicked tick accidentally.

Pocket Ability to export page/article.

On iPad I want to send some old stored article to a friend. Sometimes the original URL is not available any more. It will be good if share command allow to send the actual file rather than link.
In particular, I am interesting in sending full content to email, to iPad Evernote, and some book reader, e.g uBooks, iBooks,Kindle,KyBooks

Pocket -ability to search by tag

Currently Pocket searches for a pattern within title and URL. It wil be good also search within tags and also to allow to search specifically by tag, e.g tag:myTag.

Pocket to support simple “add URL” functionality.

When I open Pocket on iPad and the last copied to clipboard string was URL, Pocket usually suggests to add it as article. It didn’t prompt me when I wanted to add a particular URL.

I tried to find Add menu to enter/paste URL, but didn’t find it either(I believe, previously it was available). I search for support and found help page telling

The notification bar that appears when Pocket detects a copied URL will only be shown once. Therefore, if you miss it, it will not be shown again

In my case,I think, prompt wasn’t shown because the URL was already added to my list previously.

I appreciate smart logic that try to show Add only when it’s convenient to user.

However Pocket should additionally have Add button to give user control when and what he wants to add.

  An ability to search within article

When reading the article , I often need an ability to search within article.

It is a common requirement for any text reader.

Could you please add it to iOS UI? 

I am normally using not article, but web mode( if it matters).

IOS: option to open link in Safari.

When I select a link in a pocket, 3 options appears-add to pocket, open and copy. Open actually open new page in pocket. As not all pages are opened correctly in Pocket, it will be good to add an option to open link in safari.

Report article menu should ask for details

Report article menu doesn’t allow to specify what the problem is, which makes it quite useless. It should open email form, which allow user to explain the problem.

iPad pocket on slow connection opens blank page

I’ve noticed if I have low wi-fi signal, and try to open some article, blank page is opened and, it seems, app tries to load the article from Internet, even if local cache exists.i have to close the article. 

If I open the same page when wi-fi is completely off, the cached article opens instantly.

Is it a known bug? Can Pocket app have timeout check, and if page is not loaded within e.g.5sec, consider Internet is not available and use local copy instead?

Reply from Pocket:To ensure that Web Views load correctly for you, Pocket will always load the “live” version, not downloaded version, when your device is on a cellular or Wi-Fi connection. I understand this might be inconvenience when you have a low Wi-Fi signal and it’s just coming up blank.  I’ll be happy to submit your suggestion of having a way for the app to have a timeout check and revert to the cache copy. That would certainly improve what’s happening right now!

Stored pages from github have “old version of Safari” warning

Stored pages from github have  warning: “Please note that GitHub no longer supports old versions of Safari. We recommend upgrading to the latest Safari, Google Chrome, or Firefox.” The Pocket viewer should simulate the latest version to avoid such message.

Related previous posts

Pocket Favorites are not available when you off-line 

Using MSBuild Conditional Constructs to run one or other target

I was doing modification of MSBuild target https://github.com/MNF/OctoPack.Precompile/blob/master/Source/OctoPack.Precompile.targets to have different behavior depending on parameter OutDir was specified or not for Msbuild.
Follow to MSDN “MSBuild Conditional Constructs”  I selected  Choose Element and  tried to put it   inside <Target> element
 <Target Name=”foo” />

It didn’t work as for Choose Element allowed Parents are only Project, Otherwise, When.
I tried other way to include Target inside Choose/When element, but it is also not allowed, because Target also should be direct child of Project.
I found an implementation in http://stackoverflow.com/questions/30904741/msbuild-now-to-conditionally-use-one-of-two-targets-with-same-name when you set target depends on other targets and each child target has different conditions:
 <Target Name=”foo” DependsOnTargets=”_fooDebug;_fooRelease”/>
    <Target Name=”_fooDebug” Condition=”‘$(Configuration)’ == ‘Debug’ “
Later I found in  http://stackoverflow.com/questions/2284389/how-do-you-stop-msbuild-execution-without-raising-an-error/ that CallTaget elements with condition can be used as well:
 <CallTarget Targets="Exit"
Condition="Special Condition"/>
I beleive that MSDN “MSBuild Conditional Constructs” documentation should provide reference to all such options.

OutDir vs OutputPath for Visual studio 2015 and Asp.Net Core


In MSBuild for Asp.Net Core use /p:OutputPath parameter, not /p:OutDir nor both.

Full story

We’ve used psake powershell build for ASP.Net 4.61 project and passed both parameters
msbuild  /p:OutDir=“$binariesDir\” /p:OutputPath=“$outPath\”
Actually /p:OutputPath was ignored(almost, see below) and build was saved to specified in /p:OutDir folder.
When I included Asp.Net Core project into solution, it’s failed because dll, referenced by the Core project, was saved to OutDir folder, but Asp.Net Core project tried to find it in OutputPath folder.
I’ve tried to remove /p:OutputPath  parameter (as suggested in OutputPath vs OutDir thread: “to keep the OutputPath that is generated by Visual Studio, then set the OutDir as a command argument”), Asp.Net Core project failed because dll was saved to OutDir folder, but Asp.Net Core project tried to find it in relative bin\Release\ folder.
When I removed OutDir parameter and specified /p:OutputPath=“$binariesDir\” build was successful,  but package for MSDeploy, specified in a custom MS Build step, was created in a relative path obj\Release\Package rather than specified $binariesDir folder, so I needed to adjust package path.
Current VS 2015 MSDN page  Common MSBuild Project Properties doesn’t document OutDir , but only OutputPath.
Note that previously MSDN recommended the opposite: “OutputPath has been deprecated and OutDir should be used instead whenever possible. ”

Gmail arbitrary rejects emails with big number of recipients

I was sending information letter to the club subscribers(total 225 emails) using Gmail account. I keep them in 3 mailing lists: 2 with 95 emails and 3rd with remaining(GMail limit recipients to 100 per email). The first list was rejected with the following (not very specific) message.
Delivery to the following recipient failed permanently: email address
Technical details of permanent failure:
Message rejected. See https://support.google.com/mail/answer/69585 for more information.
But the second list with the same size was successful.
Additional annoyance was that “delivery failed” notifications were received slowly within 5 minutes, and initially I didn’t understand which group  (or emails from both groups)  were rejected.
 The simple workaround to split big list in 3 smaller mailing lists one was successful.

TestContext.WriteLine doesn’t accept curly brackets

In test class I was using TestContext.WriteLine trying to output JSON string, I’ve got
System.FormatException : Input string was not in a correct format.
at System.Text.StringBuilder. AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
at System.String.Format(IFormatProvider provider, String format, Object[] args)
at Microsoft.VisualStudio.TestPlatform.MSTestFramework.TestContextImplementation.WriteLine(String format, Object[] args)

Example of code that works for Debug.WriteLine, but not for TestContext.WriteLine is the following:

var msg = “{curly braces}”;

I found, that TestContext.WriteLine expects first parameter as a format string, that consider { and } as placeholder delimiters.

UPDATE: Simple workaround,  suggested in a comment by Steve Gilham


I had to write EscapeCurlyBraces extension

public static string EscapeCurlyBraces( this string message)
string ret = message.Replace( “{“, “{{” ).Replace(“}”, “}}”);
return ret;

and call
TestContext.WriteLine(msg.EscapeCurlyBraces() );
I’ve wrote a suggestion to MS Connect that it will be good to have separate overload TestContext.WriteLine(string msg); that doesn’t consider the parameter as format and doesn’t expect any additional parameters.

The file  https://github.com/MNF/CommonDotNetHelpers/blob/master/src/Strings/StringFormatExtensions.cs and corresponding unit tests https://github.com/MNF/CommonDotNetHelpers/blob/master/Tests/Strings/StringFormatExtensionsTests.cs are located on GitHub.

Pocket Favorites are not available when you off-line

I am using Pocket(previously known as Read It Later) and sometimes sent to support my suggestions.
Unfortunately they do not have convenient support forums(or uservoice sites), so I post my suggestions here to have them visible:

IPad Pocket Favorites are not available when you off-line. It shows message similar to Archives. For Archives it makes sense, but why favorites have this limitation?
Could you please allow to access Favorites list off-line.

The support person agreed that including the Favorites would be great approach to improving upon this feature.

He also ask to submit the request officially here: http://pocket.co/soPybA This helps the team prioritize most requested features we receive.

I don’t understand why email to support is not considered as official request. Anyway everyone who wants to suggest something to Pocket, should fill the boring form

#favorites, #pocket, #support


Globally replace obsolete NLog.WarnException using regular expression

I’ve updated NLog ver 2.0 to 4.3.5. After this I’ve noticed a compiler warning that 
WarnException(msg,exc) is obsolete and should be replaced by Warn(exc,msg)

It could be globally replaced using regular expressions 


Warn($2, $1);

See saved regex in https://regex101.com/r/kL8cR4/1

#nlog, #regex

FromToRange generic class

Quite often you need to return from method 2 values that describe the range, e.g. From/To or Min/Max. You could use standard MS classes Pair or Tuple https://msdn.microsoft.com/en-us/library/system.tuple.aspx. However the names of properties are not describe the meaning of the values.
So I am using own class FromToRange. It is done similar to Pair(from http://blog.o-x-t.com/2007/07/16/generic-pair-net-class/)

/// similar to Pair(from http://blog.o-x-t.com/2007/07/16/generic-pair-net-class/"
///See also  DateTimeRange ( https://github.com/MNF/CommonDotNetHelpers/blob/master/src/Dates/DateTimeRange.cs)

public class FromToRange
public T From { get; set; }
public T To { get; set; }

public FromToRange()

public FromToRange(T from, T to)
this.From = from;
this.To = to;
public override string ToString()
string sRet = String.Format("From {0} to {1}", From, To);
return sRet;
public override bool Equals(object obj)
if (this == obj) return true;
FromToRange pair = obj as FromToRange;
if (pair == null) return false;
return Equals(From, pair.From) && Equals(To, pair.To);

public override int GetHashCode()
return (From != null ? From.GetHashCode() : 0) + 29 * (To != null ? To.GetHashCode() : 0);