Thursday, May 16, 2019

The Register: Tangled in .NET: Will 5.0 really unify Microsoft's development stack?

The Register: Tangled in .NET: Will 5.0 really unify Microsoft's development stack?. https://www.theregister.co.uk/2019/05/16/will_net_5_really_unify_microsoft_development_stack/

Monday, May 6, 2019

Windows 10 will soon ship with a full, open source, GPLed Linux kernel

Ars Technica: Windows 10 will soon ship with a full, open source, GPLed Linux kernel. https://arstechnica.com/gadgets/2019/05/windows-10-will-soon-ship-with-a-full-open-source-gpled-linux-kernel/

Tuesday, April 23, 2019

openwrt strongswan config for android and ios using native vpn client


/etc/ipsec.config

 conn ios
              keyexchange=ikev1
              authby=xauthrsasig
              xauth=server
              left=%any
              leftsubnet=0.0.0.0/0
              leftfirewall=yes
              leftcert=serverCert.pem
              right=%any
              rightsubnet=192.168.1.0/24
              rightsourceip=%dhcp
              rightcert=clientCert.pem
              forceencaps=yes
              auto=add
conn android
 keyexchange=ikev2
 left=%any
 leftauth=pubkey
 leftcert=serverCert.pem
 leftid=yourdomain.dyndns.org
 leftsubnet=0.0.0.0/0,::/0
 right=%any
 rightsubnet=192.168.1.0/24
 rightsourceip=%dhcp
 rightauth=pubkey
 rightcert=androidCert.pem
 auto=add

Tuesday, April 9, 2019

Extending the angular and react single page application with graph api to customer web api

The original article are published here:

https://docs.microsoft.com/en-us/graph/tutorials/angular
https://docs.microsoft.com/en-us/graph/tutorials/react

to make it work with my own web api, I have to make considerable adjustment:

in the react version, there is a need to give the tenant specific authority URL.

class App extends Component {
constructor(props) {
super(props);

this.userAgentApplication = new UserAgentApplication(config.appId,
"https://login.microsoftonline.com/{tentan}", null);

this is how we call the web api:

async componentDidMount() {
try {
// Get the user's access token
var accessToken = await window.msal.acquireTokenSilent(config.scopes2);

var timesheets = await api.get(accessToken);
// Update the array of events in state
this.setState({timesheets: timesheets});


The angular version:

export class TimesheetService {

accessToken: string;

constructor(private authService: AuthService,
private alertsService: AlertsService,
private http: HttpClient
) {
//move the following two line to login method within authService and save token in cache.
//this.authService.getAccessToken(OAuthSettings.scopes2).then(data => {
//this.accessToken = data;
this.accessToken = sessionStorage.getItem('access_token');

});
}
getTimeSheets():Observable<TimeSheet[]> {
var header = {headers: new HttpHeaders()
.set('Authorization', 'Bearer ' + this.accessToken)
}
return this.http.get<Array<TimeSheet>>('https://localhost:44301/api/TimeSheets?WeekEnding=2018-10-01',header);
}


export class TimesheetComponent implements OnInit {

private timesheets: TimeSheet[];

constructor(private timesheetService: TimesheetService) { }

ngOnInit() {
this.getTimeSheets();
}
getTimeSheets() {
this.timesheetService.getTimeSheets().subscribe(data => {
this.timesheets = data;
});
}


Most importantly , you need to specific the scope for the web api when acquiring the token, a sample config is as below:

export const OAuthSettings = {
appId: 'xxxxx-xxxx-4edxxxx9-xxxx-xxxxxx',
scopes: [
"user.read",
"calendars.read"
],
scopes2: [
"https://{tenant}}.onmicrosoft.com/webapi/access_as_user"
]

};

Finally you also need to sort out CORS issue.

Tuesday, March 26, 2019

"Something is wrong with the numpy installation. While importing we detected an older version of numpy" error on azure databricks

"Something is wrong with the numpy installation. While importing we detected an older version of numpy"

I was doing the lab below and experienced the issue today.

https://cloudworkshop.blob.core.windows.net/cognitive-deep-learning/Hands-on%20lab/HOL%20step-by%20step%20-%20Cognitive%20services%20and%20deep%20learning.html

the problem seems to be related to azureml-sdk[databricks] because if I uninstall it some part of code can still run.
after spending quite some time scratching my hair, I looked up the azureml-sdk release page and found out that a new version 1.0.21 released just today (26 March 2019), I uninstall the default version and installed the prior version by using the format azureml-sdk[databricks]==1.0.18.1

alternatively if you choose runtime version 5.2 when creating the cluster then the problem doesn't occur.

Monday, February 18, 2019

Dax: currency conversion with date range

if you have daily exchange rate, the post at https://www.kasperonbi.com/currency-conversion-in-dax-for-power-bi-and-ssas/ shows a nice solution, however if you are like me where exchange rates are only updated periodically hence come with a start and end date then you need a difference solution.

with a small change to the above, I came up with an alternative solution as below:




Sales (in reporting currency) := if(HASONEVALUE(ReportCurrency[ReportCurrency]),
SUMX(FactSales,FactSales[Sales]*CALCULATE(MIN(FactExchangeRate[Factor]),
FILTER(FactExchangeRate,
AND(FactExchangeRate[FromDate]<=FactSales[Date],FactExchangeRate[ToDate]> FactSales[Date])
)
)
)
)

YTD Sales (year to date) :=
SUMX(
CALCULATETABLE(FactSales,ALL(FactSales[Date]),DATESYTD(DATE[date]))
FactSales[Sales]*CALCULATE(MIN(FactExchangeRate[Factor]),
FILTER(FactExchangeRate,
AND(FactExchangeRate[FromDate]<=FactSales[Date],FactExchangeRate[ToDate]> FactSales[Date])
)
)


)


LTD Sales (life to date) :=


SUMX(
CALCULATETABLE(FactSales,ALL(FactSales[Date]),
FILTER(ALL(DATE),DATE[Date] <= MAX(DATE[date]))
)
FactSales[Sales]*CALCULATE(MIN(FactExchangeRate[Factor]),
FILTER(FactExchangeRate,
AND(FactExchangeRate[FromDate]<=FactSales[Date],FactExchangeRate[ToDate]> FactSales[Date])
)
)

)

The above formula are quite resource intensive though, hence if you are working on a very large dataset, it is probably better to have them pre-calculated

Disable Microsoft Defender for Cloud for Visual Studio Subscription (MSDN)

I use a visual studio pro subscription which comes with $150 azure cloud credit, for some reason Microsoft Defender for Cloud was turned on ...